diff --git a/.github/workflows/Build_Examples.yml b/.github/workflows/Build_Examples.yml index d8a463f390a..f92db33e8d9 100644 --- a/.github/workflows/Build_Examples.yml +++ b/.github/workflows/Build_Examples.yml @@ -57,6 +57,27 @@ jobs: ref: '${{ github.event.pull_request.head.ref }}' repository: '${{ github.event.pull_request.head.repo.full_name }}' + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v45 + with: + files: | + **.c + **.h + **.S + **.s + **.a + **.cpp + **.mk + **/Makefile + + - name: List all changed files + env: + ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} + run: | + echo ${ALL_CHANGED_FILES} > changed_files + cat changed_files + - name: Check watch files id: check_watch run: | @@ -222,7 +243,7 @@ jobs: # Set MAXIM_PATH to limit warnings export MAXIM_PATH=$(pwd) - python .github/workflows/scripts/build.py + python .github/workflows/scripts/build.py --change_file changed_files Regression_Test_Make_3_81: runs-on: diff --git a/.github/workflows/clang-format-check.yml b/.github/workflows/clang-format-check.yml index b0f145b2e20..89c2621e0c6 100644 --- a/.github/workflows/clang-format-check.yml +++ b/.github/workflows/clang-format-check.yml @@ -65,7 +65,7 @@ jobs: # Exclude register header files. Those don't follow clang formatting or it becomes unreadable - name: clang-format-check run: | - CHANGE_FILES=$(git diff --ignore-submodules --name-only remotes/origin/main '*.c' '*.h' ':!*_regs.h' ':!*ffconf.h' ':!*weights.h' ':!*cnn.h' ':!*cnn.c' ':!*sampledata.h' ':!*sampleoutput.h' ':!*softmax.c' ':!Examples/*/Coremark/*' ':!Libraries/FCL' ':!Libraries/FreeRTOS' ':!Libraries/lwIP' ':!Libraries/littlefs' ':!Libraries/FreeRTOS-Plus' ':!Libraries/LC3' ':!Libraries/SDHC' ':!Libraries/MAXUSB' ':!Libraries/Cordio' ':!Libraries/LVGL' ':!Libraries/Coremark' ':!Libraries/MiscDrivers/BarcodeDecoder' ':!Libraries/tinyusb') + CHANGE_FILES=$(git diff --ignore-submodules --name-only remotes/origin/main '*.c' '*.h' ':!*_regs.h' ':!*ffconf.h' ':!*weights.h' ':!*cnn.h' ':!*cnn.c' ':!*sampledata.h' ':!*sampleoutput.h' ':!*softmax.c' ':!Examples/*/Coremark/*' ':!Libraries/FCL' ':!Libraries/FreeRTOS' ':!Libraries/lwIP' ':!Libraries/littlefs' ':!Libraries/FreeRTOS-Plus' ':!Libraries/LC3' ':!Libraries/SDHC' ':!Libraries/MAXUSB' ':!Libraries/Cordio' ':!Libraries/LVGL' ':!Libraries/Coremark' ':!Libraries/MiscDrivers/BarcodeDecoder' ':!Libraries/tinyusb' ':!Libraries/CMSIS/5.9.0/DSP') if [[ "$CHANGE_FILES" != "" ]]; then bash -e .github/workflows/clang-format-run.sh $CHANGE_FILES fi diff --git a/.github/workflows/clang-format-run.sh b/.github/workflows/clang-format-run.sh index 4cd87b6d671..4f3a1a03890 100644 --- a/.github/workflows/clang-format-run.sh +++ b/.github/workflows/clang-format-run.sh @@ -37,10 +37,10 @@ FILES="" if [[ $# -eq 0 ]] then # Find the c files - FILES=$(find . -iname "*.c" -not -name "*cnn.c" -a -not -name "*softmax.c" -a -not -regex ".*/Libraries/MiscDrivers/BarcodeDecoder/.*" -a -not -regex ".*/Examples/.*/Coremark/.*" -a -not -regex ".*/Libraries/\(Cordio\|FCL\|FreeRTOS\|FreeRTOS\-Plus\|LC3\|littlefs\|lwIP\|MAXUSB\|SDHC\|LVGL\|Coremark\)/.*") + FILES=$(find . -iname "*.c" -not -name "*cnn.c" -a -not -name "*softmax.c" -a -not -regex ".*/Libraries/MiscDrivers/BarcodeDecoder/.*" -a -not -regex ".*/Examples/.*/Coremark/.*" -a -not -regex ".*/Libraries/\(Cordio\|FCL\|FreeRTOS\|FreeRTOS\-Plus\|LC3\|littlefs\|lwIP\|MAXUSB\|SDHC\|LVGL\|Coremark\|tinyusb\)/.*") # Find the header files - FILES=$FILES+$(find . -iname "*.h" -not -name "*regs*" -a -not -name "*weights.h" -a -not -name "*cnn.h" -a -not -name "*sampledata.h" -a -not -name "*sampleoutput.h" -a -not -regex ".*/Libraries/MiscDrivers/BarcodeDecoder/.*" -a -not -regex ".*/Examples/.*/Coremark/.*" -a -not -regex ".*/Libraries/\(Cordio\|FCL\|FreeRTOS\|FreeRTOS\-Plus\|LC3\|littlefs\|lwIP\|MAXUSB\|SDHC\|LVGL\|Coremark\)/.*") + FILES=$FILES+$(find . -iname "*.h" -not -name "*regs*" -a -not -name "*weights.h" -a -not -name "*cnn.h" -a -not -name "*sampledata.h" -a -not -name "*sampleoutput.h" -a -not -regex ".*/Libraries/MiscDrivers/BarcodeDecoder/.*" -a -not -regex ".*/Examples/.*/Coremark/.*" -a -not -regex ".*/Libraries/\(Cordio\|FCL\|FreeRTOS\|FreeRTOS\-Plus\|LC3\|littlefs\|lwIP\|MAXUSB\|SDHC\|LVGL\|Coremark\|tinyusb\)/.*") else # Accumulate the input arguments into FILES FILES="$*" diff --git a/.github/workflows/example_tester.yml b/.github/workflows/example_tester.yml index 854c1c83f45..c9dd386cf22 100644 --- a/.github/workflows/example_tester.yml +++ b/.github/workflows/example_tester.yml @@ -51,7 +51,7 @@ env: MAXIM_PATH: '' jobs: - Example_Tests: + Example_Tests_MAX32690: # The type of runner that the job will run on runs-on: [self-hosted] if: github.event.pull_request.draft == false @@ -89,6 +89,43 @@ jobs: lock: false all_owned: true + Example_Tests_MAX78002: + # The type of runner that the job will run on + runs-on: [self-hosted] + if: github.event.pull_request.draft == false + + + steps: + + - uses: actions/checkout@v4 + with: + submodules: false + repository: analogdevicesinc/msdk + fetch-depth: 0 + + - name: Set MAXIM_PATH + run: | + echo "MAXIM_PATH=$(pwd)" >> $GITHUB_ENV + printenv + + - name: Lock Boards + uses: Analog-Devices-MSDK/btm-ci-scripts/actions/lock-board@v1.1 + with: + boards: | + max78002_board_ex + lock: true + timeout: 900 # Attempt to lock for an hour + + - name: run_example_test + run: | + bash .github/workflows/scripts/example_tester_78002.sh max78002_board_ex + + - name: Unlock Boards + if: always() + uses: Analog-Devices-MSDK/btm-ci-scripts/actions/lock-board@v1.1 + with: + lock: false + all_owned: true diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index 2371926b74e..6886c3cfc90 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -78,7 +78,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Skip autogenerated register files and internal use board files - FILTER_REGEX_EXCLUDE: (.*\/Libraries\/CMSIS\/Device\/Maxim\/.*\/Include\/partition_.*\.h)|(.*\/Libraries\/((CMSIS\/Device\/Maxim\/[^\/]*\/Include)|(PeriphDrivers\/Source\/[^\/]*))\/[^\/]*_regs\.h)|(.*\/Libraries\/Boards\/[^\/]*\/(BCB|Emulator|Simulation|ROM)[^\/]*\/.*)|(.*\/Examples\/[^\/]*\/Display\/lvgl-8\.0\.2\/.*)|(.*\/Examples\/[^\/]*\/Demo\/lv_conf.h)|(.*\/Libraries\/CMSIS\/5.9.0\/.*)|(.*\/Libraries\/CMSIS\/Include\/.*)|(.*\/Libraries\/Cordio\/.*)|(.*\/Libraries\/SDHC\/.*)|(.*\/Libraries\/lwIP\/.*)|(.*\/Examples\/[^\/]*\/CNN\/.*)|(.*\/Libraries\/tinyusb\/.*) + FILTER_REGEX_EXCLUDE: (.*\/Libraries\/CMSIS\/Device\/Maxim\/.*\/Include\/partition_.*\.h)|(.*\/Libraries\/((CMSIS\/Device\/Maxim\/[^\/]*\/Include)|(PeriphDrivers\/Source\/[^\/]*))\/[^\/]*_regs\.h)|(.*\/Libraries\/Boards\/[^\/]*\/(BCB|Emulator|Simulation|ROM)[^\/]*\/.*)|(.*\/Examples\/[^\/]*\/Display\/lvgl-8\.0\.2\/.*)|(.*\/Examples\/[^\/]*\/Demo\/lv_conf.h)|(.*\/Libraries\/CMSIS\/5.9.0\/.*)|(.*\/Libraries\/CMSIS\/Include\/.*)|(.*\/Libraries\/Cordio\/.*)|(.*\/Libraries\/SDHC\/.*)|(.*\/Libraries\/lwIP\/.*)|(.*\/Examples\/[^\/]*\/CNN\/.*)|(.*\/Libraries\/tinyusb\/.*)|(.*\/Libraries\/CMSIS\/5\.9\.0\/DSP\/.*)|(.*\/Libraries\/CMSIS\/Device\/Maxim\/MAX32657\/Source\/Template\/.*)|(.*\/partition_.*\.h) # Explicity turn off all linters except CPP # SuperLinter Documentation says all we need to do is turn on the ones we want diff --git a/.github/workflows/scripts/build.py b/.github/workflows/scripts/build.py index c42c274fc92..e4397e363ee 100644 --- a/.github/workflows/scripts/build.py +++ b/.github/workflows/scripts/build.py @@ -18,13 +18,13 @@ "MAX32665/BLE_LR_Central", "MAX32665/BLE_LR_Peripheral", "MAXREFDES178", - "BCB", - "ROM", - "Simulation", - "BCB_PBM", - "Emulator", - "Emulator_NFC", - "EvKit_129B", + "BCB", + "ROM", + "Simulation", + "BCB_PBM", + "Emulator", + "Emulator_NFC", + "EvKit_129B", "EvKit_129C", "WLP_VAR", "WLP_DB", @@ -51,11 +51,10 @@ "BLE_FreeRTOS" ] +console = Console(emoji=False, color_system="standard") + def build_project(project:Path, target, board, maxim_path:Path, distclean=False, extra_args=None) -> Tuple[int, tuple]: clean_cmd = "make clean" if not distclean else "make distclean" - if "Bluetooth" in project.as_posix() or "BLE" in project.as_posix(): - # Clean cordio lib for BLE projects - clean_cmd += "&& make clean.cordio" res = run(clean_cmd, cwd=project, shell=True, capture_output=True, encoding="utf-8") # Test build @@ -64,6 +63,17 @@ def build_project(project:Path, target, board, maxim_path:Path, distclean=False, build_cmd += f" {str(extra_args)}" res = run(build_cmd, cwd=project, shell=True, capture_output=True, encoding="utf-8") + if res.returncode != 0 and ("Bluetooth" in project.as_posix() or "BLE" in project.as_posix()): + # NOTE: Special case is required to handle some Cordio re-builds. + # TODO: Track Cordio options better across library re-builds + console.print(f"[red]BLE project {project} failed.[/red]") + console.print("[yellow]Trying a clean.cordio and rebuild...[/yellow]") + clean_cmd += "&& make clean.cordio" + run(clean_cmd, cwd=project, shell=True, capture_output=True, encoding="utf-8") + res = run(build_cmd, cwd=project, shell=True, capture_output=True, encoding="utf-8") + if res.returncode == 0: + console.print("[green]Pass[/green] after rebuild.") + project_info = { "target":target, "project":project.name, @@ -87,7 +97,7 @@ def build_project(project:Path, target, board, maxim_path:Path, distclean=False, # to stdout. For these warnings, stderr is non-null but empty if res.stderr == '': known_error = True - + if fail and known_error: # build error fail = False @@ -105,11 +115,99 @@ def build_project(project:Path, target, board, maxim_path:Path, distclean=False, return (return_code, project_info) +def query_build_variable(project:Path, variable:str) -> list: + result = run(f"make query QUERY_VAR=\"{variable}\"", cwd=project, shell=True, capture_output=True, encoding="utf-8") + if result.returncode != 0: + return [] + + output = [] + for v in variable.split(" "): + for line in result.stdout.splitlines(): + if line[:len(v)] == v: + # query output string will be "{variable}={item1, item2, ..., itemN}" + output += str(line).split("=")[1].split(" ") + + return output + +""" +Create a dictionary mapping each target micro to its dependencies in the MSDK. +The dependency paths contain IPATH, VPATH, SRCS, and LIBS from all of the target's examples. + +The format of the dependency map a dictionary: + dependency_map[TARGET] = [DEPENDENCIES] + + where TARGET is the target micro's part number (ex: MAX78000) + and DEPENDENCIES is a list of absolute paths as strings (ex: ['/home/jhcarter/repos/msdk/Examples/MAX32690/ADC', + '/home/jhcarter/repos/msdk/Examples/MAX32690/ADC/board.c', + ...]) + the paths may be a file or a folder. +""" +def create_dependency_map(maxim_path:Path, targets:list) -> dict: + dependency_map = dict() + + with Progress(console=console) as progress: + task_dependency_map = progress.add_task("Creating dependency map...", total=len(targets)) + for target in targets: + progress.update(task_dependency_map, description=f"Creating dependency map for {target}...") + dependency_map[target] = [] + examples_dir = Path(maxim_path / "Examples" / target) + if examples_dir.exists(): + projects = [Path(i).parent for i in examples_dir.rglob("**/project.mk")] + for project in projects: + console.print(f"\t- Checking dependencies: {project}") + dependencies = query_build_variable(project, "IPATH SRCS LIBS") + dependencies = list(set(dependencies)) + for i in dependencies: + if i == ".": + dependencies.remove(i) + i = project + + # Convert to absolute paths + if not Path(i).is_absolute(): + dependencies.remove(i) + corrected = Path(Path(project) / i).absolute() + i = corrected + + if i not in dependency_map[target]: + dependency_map[target].append(str(Path(i).resolve())) + + + if "." in dependency_map[target]: + dependency_map[target].remove(".") # Root project dir + if str(maxim_path) in dependency_map[target]: + dependency_map[target].remove(str(maxim_path)) # maxim_path gets added for "mxc_version.h" + + dependency_map[target] = sorted(list(set(dependency_map[target]))) + # console.print(dependency_map[target]) + progress.update(task_dependency_map, advance=1) + + return dependency_map + +""" +Return a list of target microcontrollers that are affected by a change to the specified file. +""" +def get_affected_targets(dependency_map: dict, file: Path) -> list: + file = Path(file) + affected = [] + for target in dependency_map.keys(): + add = False + if target in str(file).upper(): + add = True + else: + for dependency in dependency_map[target]: + if str(file) == dependency: + add = True + elif file.suffix == ".h" and file.is_relative_to(dependency): + add = True -def test(maxim_path : Path = None, targets=None, boards=None, projects=None): + if add: + break - console = Console(emoji=False, color_system="standard") + if add and target not in affected: affected.append(target) + return affected + +def test(maxim_path : Path = None, targets=None, boards=None, projects=None, change_file=None): env = os.environ.copy() if maxim_path is None and "MAXIM_PATH" in env.keys(): maxim_path = Path(env['MAXIM_PATH']).absolute() @@ -117,12 +215,19 @@ def test(maxim_path : Path = None, targets=None, boards=None, projects=None): else: console.print("MAXIM_PATH not set.") return - + env["FORCE_COLOR"] = 1 + console.print(f"Blacklist: {blacklist}") + console.print(f"Project blacklist: {project_blacklist}") + console.print(f"Known errors: {known_errors}") + console.print(f"Hard FP whitelist: {hardfp_test_list}") + # Remove the periphdrivers build directory console.print("Cleaning PeriphDrivers build directories...") shutil.rmtree(Path(maxim_path) / "Libraries" / "PeriphDrivers" / "bin", ignore_errors=True) + console.print("Cleaning Cordio build directories...") + shutil.rmtree(Path(maxim_path) / "Libraries" / "Cordio" / "bin", ignore_errors=True) # Get list of target micros if none is specified if targets is None: @@ -134,7 +239,7 @@ def test(maxim_path : Path = None, targets=None, boards=None, projects=None): targets.append(dir.name) # Append subdirectories of Examples to list of target micros console.print(f"Detected target microcontrollers: {targets}") - + else: assert(type(targets) is list) console.print(f"Testing {targets}") @@ -142,6 +247,42 @@ def test(maxim_path : Path = None, targets=None, boards=None, projects=None): # Enforce alphabetical ordering targets = sorted(targets) + if (args.change_file is not None): + console.print(f"Reading '{args.change_file}'") + targets_to_skip = [] + for i in targets: targets_to_skip.append(i) + files:list = [] + with open(args.change_file, "r") as change_file: + files = change_file.read().strip().replace(" ", "\n").splitlines() + files = [maxim_path / file for file in files] + + if not files: + console.print("[red]Changed files is empty. Skipping dependency checks.[/red]") + else: + console.print("Creating dependency map...") + dependency_map = create_dependency_map(maxim_path, targets) + console.print(f"Checking {len(files)} changed files...") + + for f in files: + affected = get_affected_targets(dependency_map, f) + if affected: + for i in affected: + if i in targets_to_skip: + targets_to_skip.remove(i) + console.print(f"\t- Testing {i} from change to {f}") + else: + console.print(f"\t- Unknown effects from change to {f}, testing everything") + targets_to_skip.clear() + + if len(targets_to_skip) == 0: break + + targets = [i for i in targets if i not in targets_to_skip] + + if targets is not None: + console.print(f"Testing: {targets}") + else: + console.print("Nothing to be tested.") + # Track failed projects for end summary failed = [] warnings = [] @@ -168,7 +309,7 @@ def test(maxim_path : Path = None, targets=None, boards=None, projects=None): console.print(f"Testing {boards}") boards = sorted(boards) # Enforce alphabetical ordering - + # Get list of examples for this target. _projects = set() if projects is None: @@ -183,14 +324,14 @@ def test(maxim_path : Path = None, targets=None, boards=None, projects=None): dirpath = Path(dirpath) if dirpath.name in projects: _projects.add(dirpath) - - - + + + console.print(f"Found {len(_projects)} projects for [bold cyan]{target}[/bold cyan]") console.print(f"Detected boards: {boards}") _projects = sorted(_projects) # Enforce alphabetical ordering - + with Progress(console=console) as progress: task_build = progress.add_task(description=f"{target}: PeriphDrivers", total=(len(_projects) * len(boards)) + len(boards)) @@ -202,7 +343,7 @@ def test(maxim_path : Path = None, targets=None, boards=None, projects=None): for p in _projects: if p.name == "Hello_World": hello_world = p - + if hello_world is None: console.print(f"[red]Failed to locate Hello_World for {target}[/red]") else: @@ -251,7 +392,7 @@ def test(maxim_path : Path = None, targets=None, boards=None, projects=None): (return_code, project_info) = build_project(project, target, board, maxim_path, distclean=False) # Error check build command - if return_code == 1: + if return_code == 1: console.print(f"\n[red]{target} ({board}): {project_name} failed.[/red]") print(f"Build command: {project_info['build_cmd']}") console.print("[bold]Errors:[/bold]") @@ -318,7 +459,7 @@ def test(maxim_path : Path = None, targets=None, boards=None, projects=None): elif not periph_success: progress.update(task_build, description=f"[bold cyan]{target}[/bold cyan]: [red]PeriphDriver build failed.[/red]", refresh=True) else: - progress.update(task_build, description=f"[bold cyan]{target}[/bold cyan]: [red]Failed for {target_fails}/{len(_projects)} projects[/red]", refresh=True) + progress.update(task_build, description=f"[bold cyan]{target}[/bold cyan]: [red]Failed for {target_fails}/{len(_projects)} projects[/red]", refresh=True) boards = None # Reset boards list _projects = None # Reset projects list @@ -328,7 +469,7 @@ def test(maxim_path : Path = None, targets=None, boards=None, projects=None): print(f"{len(warnings)} projects with warnings:") for p in warnings: console.print(f"[bold cyan]{p['target']}[/bold cyan]: [bold]{p['project']}[/bold] [yellow]warnings[/yellow] for [yellow]{p['board']}[/yellow]") - + if (len(failed) > 0): print("Failed projects:") for p in failed: @@ -344,15 +485,18 @@ def test(maxim_path : Path = None, targets=None, boards=None, projects=None): parser.add_argument("--targets", type=str, nargs="+", required=False, help="Target microcontrollers to test.") parser.add_argument("--boards", type=str, nargs="+", required=False, help="Boards to test. Should match the BSP folder-name exactly.") parser.add_argument("--projects", type=str, nargs="+", required=False, help="Examples to populate. Should match the example's folder name.") +parser.add_argument("--change_file", type=str, required=False, help="(Optional) Pass a text file containing a list of space-separated or new-line separated changed files. The build script will intelligently adjust which parts it tests based on this list.") if __name__ == "__main__": args = parser.parse_args() inspect(args, title="Script arguments:", ) + exit( test( maxim_path=args.maxim_path, targets=args.targets, boards=args.boards, - projects=args.projects + projects=args.projects, + change_file=args.change_file ) ) diff --git a/.github/workflows/scripts/example_tester.sh b/.github/workflows/scripts/example_tester.sh index 2d3211d263a..26f5eeffdb4 100644 --- a/.github/workflows/scripts/example_tester.sh +++ b/.github/workflows/scripts/example_tester.sh @@ -63,9 +63,9 @@ function init() { if [[ $1 = "SPI" || $1 = "SPI_v2" || $1 = "ADC" || $1 = "UART" ]]; then - make -C $Path/$testName METHOD=$2 + make -j -C $Path/$testName METHOD=$2 else - make -C $Path/$testName + make -j -C $Path/$testName fi fi diff --git a/.github/workflows/scripts/example_tester_78002.sh b/.github/workflows/scripts/example_tester_78002.sh new file mode 100644 index 00000000000..00281ad31cb --- /dev/null +++ b/.github/workflows/scripts/example_tester_78002.sh @@ -0,0 +1,353 @@ +#! /usr/bin/bash + +<<"CONFIGURATION" +The following is the configuration for hardware (max78002): +Close jumper (RX - P0.0) and (TX - P0.1) at Headers JP23 (UART 0 EN). +Install headers JP9 and JP10 to SDA and SCL respectively. +You must connect P0.10 to P0.16 (SCL) and P0.11 to P0.17 (SDA) +Connect P0.12 to P1.1. Connect P0.13 to P1.0. for UART test +Connect P0.21 (MOSI) to P0.22 (MISO). +Apply an input voltage between 0 and 1.25V to pin labeled 0 of the JH6 (Analog) header. for ADC +CONFIGURATION + + +# variable for configuration +baudRate=115200 +timeLimit=5 +timeLimitICC=30 #ICC needs around 20s to finish the test +boardVersion=max78002 +#boardName=max78002-1 +boardName=$1 +uartPort=$(resource_manager -g $boardName.console_port) +target_uc=$(resource_manager -g $boardName.target) +Path=$MAXIM_PATH/Examples/$target_uc + +# variable for testing purpose +tempFile=.temp.txt +result_UART_INTERRUPT='not tested' +result_UART_DMA='not tested' +result_HelloWorld='not tested' +result_HelloWorld_Cpp='not tested' +result_TRNG='not tested' +result_I2C='not tested' +result_SPI='not tested' +result_ICC='not tested' +result_DMA='not tested' +result_CRC='not tested' +result_ADC_DMA='not tested' +result_Lib_Gen='not tested' +result_Lib_Use='not tested' + +function init() { + # print the testcase + echo "-------------------------------------------------------------------" + echo "Start testing $1 Example:" + # clean the temp file + rm -rf $tempFile + sleep 2 + + # do initialization, compiler and flash the code + testName=$1 + if [[ $testName != Library_Use ]] + then + make -C $Path/$testName distclean + + if [[ $1 == "ADC" || $1 == "UART" ]]; then + make -j -C "$Path/$testName" METHOD="$2" + else + make -j -C "$Path/$testName" + fi + + fi + + if [[ $testName != Library_Generate && $testName != Library_Use ]] + then + stty -F $uartPort $baudRate + ocdflash $boardName $Path/$testName/build/$boardVersion.elf + if [[ $testName = ICC ]] + then + timeout $timeLimitICC cat $uartPort > $tempFile + else + timeout $timeLimit cat $uartPort > $tempFile + fi + fi +} + +function test_Hello_World() { + init Hello_World + + # start testing the output + grep "Hello World!" $tempFile + if [[ $? -eq 0 ]]; + then + result_HelloWorld='pass' + else + result_HelloWorld='fail' + fi + + printf "Test result for Hello_World: $result_HelloWorld\n" + +} + +function test_Hello_World_Cpp() { + init Hello_World_Cpp + + # start testing the output + grep "C++ Hello World Example" $tempFile + if [[ $? -eq 0 ]]; + then + result_HelloWorld_Cpp='pass' + else + result_HelloWorld_Cpp='fail' + fi + + printf "Test result for Hello_World_Cpp: $result_HelloWorld_Cpp\n" + +} + +function test_UART() { + init UART INTERRUPT + + # start testing the output + grep "Example Succeeded" $tempFile + if [[ $? -eq 0 ]]; + then + result_UART_INTERRUPT='pass' + else + result_UART_INTERRUPT='fail' + fi + + printf "Test result for UART_INTERRUPT: $result_UART_INTERRUPT\n" + init UART DMA + + # start testing the output + grep "Example Succeeded" $tempFile + if [[ $? -eq 0 ]]; + then + result_UART_DMA='pass' + else + result_UART_DMA='fail' + fi + + printf "Test result for UART_DMA: $result_UART_DMA\n" +} + +function test_TRNG() { + init TRNG + + # start testing the output + grep "Test Complete" $tempFile + if [[ $? -eq 0 ]]; + then + result_TRNG='pass' + else + result_TRNG='fail' + fi + + printf "Test result for TRNG: $result_TRNG\n" + +} + + +function test_I2C() { + init I2C + + # start testing the output + grep "I2C Transaction Successful" $tempFile + if [[ $? -eq 0 ]]; + then + result_I2C='pass' + else + result_I2C='fail' + fi + + printf "Test result for I2C: $result_I2C\n" + +} + +function test_SPI() { + init SPI + + # start testing the output + grep "16 Bits Transaction Successful" $tempFile + if [[ $? -eq 0 ]]; + then + result_SPI='pass' + else + result_SPI='fail' + fi + + printf "Test result for SPI: $result_SPI\n" + + +} + +function test_ICC() { + init ICC + + # start testing the output + grep "Example Succeeded" $tempFile + if [[ $? -eq 0 ]]; + then + result_ICC='pass' + else + result_ICC='fail' + fi + + printf "Test result for ICC: $result_ICC\n" + +} + + +function test_DMA() { + init DMA + + # start testing the output + grep "Example Succeeded" $tempFile + if [[ $? -eq 0 ]]; + then + result_DMA='pass' + else + result_DMA='fail' + fi + + printf "Test result for DMA: $result_DMA\n" + +} + +function test_CRC() { + init CRC + + # start testing the output + grep "Example Succeeded" $tempFile + if [[ $? -eq 0 ]]; + then + result_CRC='pass' + else + result_CRC='fail' + fi + + printf "Test result for CRC: $result_CRC\n" + +} + + +function test_ADC() { + + init ADC DMA + + # start testing the output + result_ADC_DMA='pass' + grep "Running Single Channel Example" $tempFile + if [[ $? -ne 0 ]]; + then + result_ADC_DMA='fail' + fi + + grep "Running Temperature Sensor Example" $tempFile + if [[ $? -ne 0 ]]; + then + result_ADC_DMA='fail' + fi + + grep "Running Multi Channel Example" $tempFile + if [[ $? -ne 0 ]]; + then + result_ADC_DMA='fail' + fi + printf "Test result for ADC_DMA: $result_ADC_DMA\n" +} + +function test_Lib_Gen() { + init Library_Generate + + # start testing the output + find $Path/$testName/build/$boardVersion.a + if [[ $? -eq 0 ]]; + then + result_Lib_Gen='pass' + else + result_Lib_Gen='fail' + fi + + printf "Test result for Library_Generate: $result_Lib_Gen\n" + +} + +function test_Lib_Use() { + init Library_Use + + # start testing the output + make -C $Path/$testName distclean + make -C $Path/$testName + if [[ $? -eq 0 ]]; + then + result_Lib_Use='pass' + else + result_Lib_Use='fail' + fi + + printf "Test result for Library_Use: $result_Lib_Use\n" + +} + +function summary() { + printf "*************************Result Summary****************************\n" + printf "Test result for Hello_World: $result_HelloWorld\n" + printf "Test result for Hello_World_Cpp: $result_HelloWorld_Cpp\n" + printf "Test result for UART_INTERRUPT: $result_UART_INTERRUPT\n" + printf "Test result for UART_DMA: $result_UART_DMA\n" + printf "Test result for TRNG: $result_TRNG\n" + printf "Test result for I2C: $result_I2C\n" + printf "Test result for SPI: $result_SPI\n" + printf "Test result for ICC: $result_ICC\n" + printf "Test result for DMA: $result_DMA\n" + printf "Test result for CRC: $result_CRC\n" + printf "Test result for ADC_DMA: $result_ADC_DMA\n" + printf "Test result for Library_Generate: $result_Lib_Gen\n" + printf "Test result for Library_Use: $result_Lib_Use\n" + +} + +function main() { + test_UART + if [[ $result_UART_INTERRUPT = 'fail' ]] + then + printf "Since UART INTERRUPT test fails, example test stops. " + return + fi + test_Hello_World + test_Hello_World_Cpp + test_TRNG + test_I2C + test_SPI + test_DMA + test_CRC + test_ADC + test_ICC + test_Lib_Gen + test_Lib_Use + + summary + # clean the temp file + rm -rf $tempFile +} + +main +if [[ $result_UART_INTERRUPT = "fail" || + $result_UART_DMA = "fail" || + $result_HelloWorld = "fail" || + $result_HelloWorld_Cpp = "fail" || + $result_TRNG = "fail" || + $result_I2C = "fail" || + $result_SPI = "fail" || + $result_ICC = "fail" || + $result_DMA = "fail" || + $result_CRC = "fail" || + $result_ADC_DMA = "fail" || + $result_Lib_Gen = "fail" || + $result_Lib_Use = "fail" ]]; then + exit 2 + else + exit 0 +fi diff --git a/.gitignore b/.gitignore index f84ce1a7b9b..06d1ef0dc6f 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,5 @@ package.json mxc_version.h mxc_version.mk Packetcraft-ADI +packetcraft-adi diff --git a/Examples/MAX32650/UART_DMA/.cproject b/Examples/MAX32650/UART_DMA/.cproject new file mode 100644 index 00000000000..c9d62244405 --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.cproject @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32650/UART_DMA/.project b/Examples/MAX32650/UART_DMA/.project new file mode 100644 index 00000000000..523d770068f --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.project @@ -0,0 +1,26 @@ + + + UART_DMA + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32650/UART_DMA/.settings/language.settings.xml b/Examples/MAX32650/UART_DMA/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32650/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32650/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32650/UART_DMA/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32650/UART_DMA/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..15924d3ccb1 --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=UART_DMA +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32650 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32650/UART_DMA/.settings/org.eclipse.core.resources.prefs b/Examples/MAX32650/UART_DMA/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000000..99f26c0203a --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Examples/MAX32650/UART_DMA/.vscode/README.md b/Examples/MAX32650/UART_DMA/.vscode/README.md new file mode 100755 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32650/UART_DMA/.vscode/c_cpp_properties.json b/Examples/MAX32650/UART_DMA/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32650/UART_DMA/.vscode/flash.gdb b/Examples/MAX32650/UART_DMA/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32650/UART_DMA/.vscode/launch.json b/Examples/MAX32650/UART_DMA/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32650/UART_DMA/.vscode/settings.json b/Examples/MAX32650/UART_DMA/.vscode/settings.json new file mode 100755 index 00000000000..3e8e99ac3d8 --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.vscode/settings.json @@ -0,0 +1,79 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32650", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"max32650.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32650/UART_DMA/.vscode/tasks.json b/Examples/MAX32650/UART_DMA/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32650/UART_DMA/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32650/UART_DMA/Makefile b/Examples/MAX32650/UART_DMA/Makefile new file mode 100644 index 00000000000..34c2eb93756 --- /dev/null +++ b/Examples/MAX32650/UART_DMA/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32650 +TARGET_UC := MAX32650 +TARGET_LC := max32650 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32650/UART_DMA/README.md b/Examples/MAX32650/UART_DMA/README.md new file mode 100644 index 00000000000..ef505b98d7c --- /dev/null +++ b/Examples/MAX32650/UART_DMA/README.md @@ -0,0 +1,71 @@ +## Description + +To demonstrate the use of the UART peripheral with DMA, data is sent between two UART ports on the MAX32650. + + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +(None - this project builds as a standard example) + +## Required Connections + +- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. +- Connect P2.14 (RX of UART1) and P1.10 (TX of UART2). + +## Expected Output + +The Console UART of the device will output these messages: + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` + +or + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +Acquired DMA channel 0 for RX transaction +Acquired DMA channel 1 for TX transaction + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` \ No newline at end of file diff --git a/Examples/MAX32650/UART_DMA/UART_DMA.launch b/Examples/MAX32650/UART_DMA/UART_DMA.launch new file mode 100644 index 00000000000..5a7e7306d7d --- /dev/null +++ b/Examples/MAX32650/UART_DMA/UART_DMA.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32650/UART_DMA/main.c b/Examples/MAX32650/UART_DMA/main.c new file mode 100644 index 00000000000..66559b8426b --- /dev/null +++ b/Examples/MAX32650/UART_DMA/main.c @@ -0,0 +1,272 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief Main for UART with DMA example. + * @details This example demonstrates how to use DMA with UART for data transfer. + * The example sets up DMA channels to handle UART transmissions and receptions, + * looping back the TX of one UART to the RX of another UART. A jumper must be + * connected between P2.14 (RX of UART1) and P1.10 (TX of UART2). + * The example uses either automatic or manual DMA handler configuration + * depending on the AUTOHANDLERS macro definition. + */ + +/***** Includes *****/ +#include +#include +#include +#include "mxc_device.h" +#include "pb.h" +#include "board.h" +#include "mxc_delay.h" +#include "uart.h" +#include "dma.h" +#include "nvic_table.h" +#include "led.h" + +/***** Definitions *****/ +#define AUTOHANDLERS + +#define UART_BAUD 115200 +#define BUFF_SIZE 512 + +#define RX_UART MXC_UART1 +#define TX_UART MXC_UART2 + +/***** Globals *****/ +volatile int READ_FLAG; +volatile int WRITE_FLAG; +volatile int buttonPressed; +static mxc_uart_req_t read_req; +static mxc_uart_req_t write_req; + +/***** Functions *****/ +#ifndef AUTOHANDLERS +void DMA_RX_Handler(void) +{ + MXC_DMA_Handler(); +} + +void DMA_TX_Handler(void) +{ + MXC_DMA_Handler(); +} +#endif + +void readCallback(mxc_uart_req_t *req, int error) +{ + READ_FLAG = error; +} + +void writeCallback(mxc_uart_req_t *req, int error) +{ + WRITE_FLAG = error; +} + +void buttonHandler(void) +{ + buttonPressed = 1; +} + +#ifdef AUTOHANDLERS +int exampleDMAAutoHandlers(void) +{ + int error = 0; + + // Auto DMA handlers will automatically initialize DMA, acquire & assign channels, + // and guarantee that each transaction's callback function is executed when + // the transaction is complete. + MXC_UART_SetAutoDMAHandlers(RX_UART, true); + MXC_UART_SetAutoDMAHandlers(TX_UART, true); + + // "READ_FLAG" is set in the read transaction's callback. It will be set to 0 when + // the read request completes successfully. We use it to wait for the DMA transaction + // to complete, since the DMA APIs are asynchronous (non-blocking) + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&read_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_TransactionDMA(&write_req); + if (error) { + printf("-->Error starting DMA write: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return READ_FLAG; +} +#else +int exampleDMAManualHandlers(void) +{ + int error = 0; + + // Manally initialize DMA + MXC_DMA_Init(); + + // Manually acquire a channel for the read request and assign it to the drivers. + int rx_channel = MXC_DMA_AcquireChannel(); + if (rx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", rx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", rx_channel); + return rx_channel; + } + MXC_UART_SetRXDMAChannel(RX_UART, rx_channel); + + // Additionally, assign the NVIC IRQ to a function that calls "MXC_DMA_Handler()". + // This is required for any assigned callbacks to work. + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(rx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(rx_channel), DMA_RX_Handler); + + // Do the same for the write request. + int tx_channel = MXC_DMA_AcquireChannel(); + if (tx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", tx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", tx_channel); + return tx_channel; + } + MXC_UART_SetTXDMAChannel(TX_UART, tx_channel); + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(tx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(tx_channel), DMA_TX_Handler); + + // Initialize flags. We will use these to monitor when the read/write requests + // have completed, since the DMA APIs are asynchronous. + WRITE_FLAG = 1; + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&read_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_TransactionDMA(&write_req); + if (error) { + printf("-->Error starting DMA write: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (WRITE_FLAG) {} + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return WRITE_FLAG; +} +#endif // AUTOHANDLERS + +/******************************************************************************/ +int main(void) +{ + int error, i, fail = 0; + uint8_t TxData[BUFF_SIZE]; + uint8_t RxData[BUFF_SIZE]; + + printf("\n\n**************** UART Example ******************\n"); + printf("This example sends data from one UART to another\n"); + printf("\nConnect RX(P2.14) of UART1 and TX(P1.10) of UART2.\n\n"); + printf("To indicate a successful UART transfer, LED1 will illuminate.\n"); + printf("\nPush SW2 to continue\n"); + + buttonPressed = 0; + PB_RegisterCallback(0, (pb_callback)buttonHandler); + while (!buttonPressed) {} + + printf("\nUART Baud \t: %d Hz\n", UART_BAUD); + printf("Test Length \t: %d bytes\n\n", BUFF_SIZE); + + // Initialize the data buffers + for (i = 0; i < BUFF_SIZE; i++) { + TxData[i] = i; + } + memset(RxData, 0x0, BUFF_SIZE); + + // Initialize the UART + error = MXC_UART_Init(TX_UART, UART_BAUD); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_Init(RX_UART, UART_BAUD); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + // Setup request structs describing the transactions. + // Request structs are placed in the global scope so they + // don't go out of context. This can happen when a req struct + // is declared inside a function and the function completes. + // The memory would be freed, invalidating the UART driver's + // pointers to it. + read_req.uart = RX_UART; + read_req.rxData = RxData; + read_req.rxLen = BUFF_SIZE; + read_req.txLen = 0; + read_req.callback = readCallback; + + write_req.uart = TX_UART; + write_req.txData = TxData; + write_req.txLen = BUFF_SIZE; + write_req.rxLen = 0; + write_req.callback = writeCallback; + + printf("-->UART Initialized\n\n"); + +#ifdef AUTOHANDLERS + error = exampleDMAAutoHandlers(); +#else + error = exampleDMAManualHandlers(); +#endif + + if (READ_FLAG != E_NO_ERROR) { + printf("-->Error with read callback; %d\n", READ_FLAG); + fail++; + } + + if ((error = memcmp(RxData, TxData, BUFF_SIZE)) != 0) { + printf("-->Error verifying Data: %d\n", error); + fail++; + } else { + printf("-->Data verified\n"); + } + + if (fail != 0) { + printf("\n-->Example Failed\n"); + LED_On(0); // indicates FAIL + return E_FAIL; + } + + LED_On(1); // indicates SUCCESS + printf("\n-->Example Succeeded\n"); + return E_NO_ERROR; +} diff --git a/Examples/MAX32650/UART_DMA/project.mk b/Examples/MAX32650/UART_DMA/project.mk new file mode 100644 index 00000000000..a7f185557dc --- /dev/null +++ b/Examples/MAX32650/UART_DMA/project.mk @@ -0,0 +1,19 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +#BOARD=FTHR_RevA +# ^ For example, you can uncomment this line to make the +# project build for the "FTHR_RevA" board. + +# ********************************************************** + +# Add your config here! + +# If you have secure version of MCU (MAX32651), set SBT=1 to generate signed binary +# For more information on how sing process works, see +# https://www.analog.com/en/education/education-library/videos/6313214207112.html +SBT=0 diff --git a/Examples/MAX32655/Bluetooth/BLE5_ctr/main.c b/Examples/MAX32655/Bluetooth/BLE5_ctr/main.c index b3f59a29f05..e2b71be0524 100644 --- a/Examples/MAX32655/Bluetooth/BLE5_ctr/main.c +++ b/Examples/MAX32655/Bluetooth/BLE5_ctr/main.c @@ -119,8 +119,8 @@ static void mainWsfInit(void) 12 + HCI_ISO_DL_MAX_LEN + mainLlRtCfg.maxAclLen + 4 + BB_DATA_PDU_TAILROOM; /* Use single pool for data buffers. */ -#if (BT_VER > 9) - WSF_ASSERT(mainLlRtCfg.maxAclLen == mainLlRtCfg.maxIsoSduLen); +#if (BT_VER > 9) && INIT_FEAT_ISO + mainLlRtCfg.maxIsoSduLen = mainLlRtCfg.maxAclLen; #endif /* Ensure pool buffers are ordered correctly. */ diff --git a/Examples/MAX32655/Demo_2048/ARM/.cproject b/Examples/MAX32655/Demo_2048/ARM/.cproject new file mode 100644 index 00000000000..b55b8320df6 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.cproject @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/ARM/.project b/Examples/MAX32655/Demo_2048/ARM/.project new file mode 100644 index 00000000000..e0ac7bea7d7 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.project @@ -0,0 +1,26 @@ + + + ARM + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32655/Demo_2048/ARM/.settings/language.settings.xml b/Examples/MAX32655/Demo_2048/ARM/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..bd472bd04f2 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=ARM +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32655 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/README.md b/Examples/MAX32655/Demo_2048/ARM/.vscode/README.md new file mode 100644 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/c_cpp_properties.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/flash.gdb b/Examples/MAX32655/Demo_2048/ARM/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/launch.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json new file mode 100644 index 00000000000..8d86424f5da --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/settings.json @@ -0,0 +1,82 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32655", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"${config:target}.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ], + "files.associations": { + "graphics.h": "c" + } +} + diff --git a/Examples/MAX32655/Demo_2048/ARM/.vscode/tasks.json b/Examples/MAX32655/Demo_2048/ARM/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/ARM/ARM.launch b/Examples/MAX32655/Demo_2048/ARM/ARM.launch new file mode 100644 index 00000000000..b1947ffa006 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/ARM.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/ARM/Makefile b/Examples/MAX32655/Demo_2048/ARM/Makefile new file mode 100644 index 00000000000..717125621b6 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32655 +TARGET_UC := MAX32655 +TARGET_LC := max32655 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32655/Demo_2048/ARM/README.md b/Examples/MAX32655/Demo_2048/ARM/README.md new file mode 100644 index 00000000000..0bc3ab69870 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/README.md @@ -0,0 +1,70 @@ +## Description + +This example demonstrates running the 2048 game on both ARM and RISC-V cores on the MAX32655. + +The RISC-V core, running at 60MHz (ISO), handles the controller (keyboard) user inputs and the main 2048 game logic. + +The ARM core, running at 100MHz (IPO), keeps track of the timer (RTC) and handles the display graphics after the RISC-V core finishes handling the main game logic. + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +This project only supports the MAX32655EVKIT as it has the 320x240 TFT Display. + +## Required Connections + +If using the MAX32655EVKIT (EvKit\_V1): +- Connect a USB cable between the PC and the CN1 (USB/PWR) connector. +- Connect pins JP4(RX_SEL) and JP5(TX_SEL) to RX0 and TX0 header. +- Open an terminal application on the PC and connect to the EV kit's console UART at 2000000, 8-N-1. +- Close jumper JP2 (LED0 EN). +- Close jumper JP3 (LED1 EN). + +## Expected Output + +``` +******************************************************************************* +ARM: Starting ARM Initialization. + +ARM: Semaphore is not busy - with previous value: 1 + +ARM: Starting RISC-V core and handing off major UART0 Control to RISC-V. + +RISC-V: Starting RISC-V Initialization. + +RISC-V: Semaphore is not busy - with previous value: 1 + +RISC-V: Finished startup. Main UART0 control is handled by RISC-V now. + +RISC-V: Starting Controller and Game + + + + + + + + + + + | | | + | | | + | | | +----------------------------------- + | | | + | | | + | | | +----------------------------------- + | | | + | | 0002 | + | | | +----------------------------------- + | | | + | | | + | | | +``` diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h b/Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h new file mode 100644 index 00000000000..1277d89c566 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/cfs_logo.h @@ -0,0 +1,122 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CFS_LOGO_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CFS_LOGO_H_ + +// clang-format off + +/* **** Includes **** */ + +#include +#include "mxc_device.h" + +/* **** Definitions **** */ + +// NOTE: This definition is used instead of 'const' to place these files into Flash to remove +// the "discard 'const' qualifer from pointer target type" build warning. +#define __flash __attribute__((section(".flash_code_section"))) + +/* **** Function Prototypes **** */ + +#define CFS_LOGO_WIDTH (80) +#define CFS_LOGO_HEIGHT (80) +__flash uint16_t cfs_logo[] = { + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9db6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7944, 0x7602, 0x1c96, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3faf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x593c, 0xf602, 0x5703, 0xb602, 0xfc95, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0xff9e, 0x7fcf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x593c, 0xf602, 0x5703, 0x5703, 0x5703, 0xb602, 0xfc95, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0xff9e, 0xff9e, 0xbfdf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3934, 0xf602, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0xb602, 0xfc8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1faf, 0xdff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x593c, 0xf602, 0x5703, 0x5703, 0x1703, 0x1703, 0x3703, 0x5703, 0x5703, 0xb602, 0xdc8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1f9f, 0xff96, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5934, 0xf602, 0x5703, 0x5703, 0xf602, 0x7944, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xd602, 0xdc8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x7fcf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3934, 0xf602, 0x5703, 0x5703, 0xf602, 0x7944, 0xffff, 0xffff, 0xffff, 0x770b, 0x1703, 0x5703, 0x5703, 0xd602, 0xbc8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0xbfe7, 0xffff, 0xffff, 0xffff, 0xffff, 0x192c, 0xf702, 0x5703, 0x5703, 0xf602, 0x7944, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x770b, 0x1703, 0x5703, 0x5703, 0xb602, 0xbc85, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1faf, 0xfff7, 0xffff, 0x192c, 0xf702, 0x5703, 0x5703, 0xf602, 0x7944, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xb602, 0xbb85, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0xf923, 0xf702, 0x5703, 0x5703, 0xf602, 0x9a4c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb813, 0x1703, 0x5703, 0x5703, 0xd602, 0x9b85, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0xf81b, 0x1703, 0x5703, 0x5703, 0xf602, 0xba54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb813, 0x1703, 0x5703, 0x5703, 0xd602, 0x9b7d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5fb7, 0xd81b, 0x1703, 0x5703, 0x5703, 0xf602, 0x592c, 0xfff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xd602, 0x9b7d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x7fb7, 0xb813, 0x1703, 0x5703, 0x5703, 0xf602, 0x5934, 0x7fb7, 0xff9e, 0x3faf, 0xdff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xb602, 0x7b7d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0xb813, 0x1703, 0x5703, 0x5703, 0xf602, 0x7a34, 0x9fb7, 0x1fa7, 0x1fa7, 0x1f9f, 0xff96, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb81b, 0x1703, 0x5703, 0x5703, 0xb602, 0x7b75, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0xd81b, 0x1703, 0x5703, 0x5703, 0xf602, 0x7a34, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fcf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd81b, 0x1703, 0x5703, 0x5703, 0xd602, 0x7b75, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0xd81b, 0x1703, 0x5703, 0x5703, 0xf602, 0x9a34, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1fa7, 0xbfe7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd823, 0x1703, 0x5703, 0x5703, 0xd602, 0x5b75, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0xb813, 0x1703, 0x5703, 0x5703, 0xf602, 0x9a34, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x3faf, 0xfff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb81b, 0x1703, 0x5703, 0x5703, 0xd602, 0x5b75, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0x9a3c, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1f9f, 0xff96, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd81b, 0x1703, 0x5703, 0x5703, 0xd602, 0x3b6d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0x9a3c, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3faf, 0x3faf, 0x3faf, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xf702, 0x5703, 0x5703, 0xd602, 0x3b6d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x3faf, 0xb813, 0x1703, 0x5703, 0x5703, 0xf602, 0xba3c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xbc6d, 0xfd75, 0xfd75, 0xfd75, 0xdd6d, 0xbf96, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1fa7, 0xbfe7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xf702, 0x5703, 0x5703, 0xd602, 0x3b6d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x3faf, 0xb813, 0x1703, 0x5703, 0x5703, 0xf602, 0xba3c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0xdd6d, 0x9502, 0xf602, 0xf602, 0xf602, 0xf702, 0xbf96, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x3faf, 0xfff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf82b, 0xf702, 0x5703, 0x5703, 0xd602, 0x3b65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1f9f, 0x5faf, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0xba3c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x3d7e, 0xd602, 0x3703, 0x5703, 0x3703, 0x1703, 0xdf96, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xf702, 0x5703, 0x5703, 0xd602, 0x1a65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3fa7, 0x780b, 0x1703, 0x5703, 0x5703, 0xf602, 0xba44, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x3d7e, 0xf602, 0x3703, 0x5703, 0x3703, 0xf602, 0xbe96, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x9fd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xf82b, 0xf702, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7703, 0x1703, 0x5703, 0x5703, 0xf602, 0xda44, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x3d7e, 0xf602, 0x3703, 0x5703, 0x3703, 0x1703, 0x9e8e, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1fa7, 0xbfe7, 0xffff, 0xffff, 0xffff, 0x192c, 0xf702, 0x5703, 0x5703, 0xd602, 0xfa64, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0xda44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x3d7e, 0xf602, 0x3703, 0x5703, 0x3703, 0x1703, 0x9e8e, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x3faf, 0xfff7, 0xffff, 0xffff, 0x1934, 0xf702, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0xdb44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x5e86, 0xd602, 0x3703, 0x5703, 0x3703, 0xf602, 0x9e96, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x5fbf, 0xffff, 0xffff, 0x3934, 0xf702, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x980b, 0x1703, 0x5703, 0x5703, 0xf602, 0xdb44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x5e86, 0xd602, 0x3703, 0x5703, 0x3703, 0xf602, 0x9e96, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fd7, 0xffff, 0x3934, 0xf702, 0x5703, 0x5703, 0xd602, 0xda5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x770b, 0x1703, 0x5703, 0x5703, 0xf602, 0xfb4c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x5e86, 0xf602, 0x3703, 0x5703, 0x3703, 0xf602, 0x9e8e, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1fa7, 0xffff, 0x593c, 0xf702, 0x5703, 0x5703, 0xd602, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x5703, 0x1703, 0x5703, 0x5703, 0x1703, 0x3b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7e86, 0x3703, 0x5703, 0x5703, 0x3703, 0xf602, 0x3d7e, 0x3fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xbfcf, 0x5934, 0x3703, 0x5703, 0x5703, 0xd602, 0xba4c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xbfef, 0x1703, 0x3703, 0x5703, 0x5703, 0x1703, 0x9c65, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0xbf96, 0x5703, 0x3703, 0x5703, 0x5703, 0xd602, 0xbc6d, 0x3faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xbfc7, 0xba44, 0x1703, 0x5703, 0x5703, 0xf702, 0xb81b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3703, 0x1703, 0x5703, 0x5703, 0xd602, 0x5b5d, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0x9e8e, 0x1703, 0x3703, 0x5703, 0x5703, 0xd602, 0xfd75, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0xfff7, 0xba54, 0xf602, 0x5703, 0x5703, 0xf702, 0xf823, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5703, 0x1703, 0x5703, 0x5703, 0xd602, 0x3b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x9e8e, 0xf602, 0x3703, 0x5703, 0x5703, 0xd602, 0x1d76, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x7fc7, 0xffff, 0x994c, 0xf602, 0x5703, 0x5703, 0xf702, 0x192c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5703, 0x1703, 0x5703, 0x5703, 0xd602, 0x3b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x9e8e, 0xf602, 0x3703, 0x5703, 0x3703, 0xd602, 0x1d76, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1f9f, 0xff9e, 0x3fb7, 0xffff, 0xffff, 0x994c, 0xf602, 0x5703, 0x5703, 0xf702, 0x3934, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x5703, 0x3703, 0x5703, 0x5703, 0xd602, 0x3b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7e8e, 0xf602, 0x3703, 0x5703, 0x3703, 0xf602, 0x1d76, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1fa7, 0xdfe7, 0xffff, 0xffff, 0x593c, 0xb602, 0x1703, 0x1703, 0xf602, 0x3934, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x3703, 0x3703, 0x5703, 0x5703, 0xd602, 0x1b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7e8e, 0xf702, 0x3703, 0x5703, 0x3703, 0xd602, 0x1d76, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fd7, 0xffff, 0xffff, 0xffff, 0xdc8d, 0x3934, 0x994c, 0x994c, 0x9944, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff9e, 0x5703, 0x3703, 0x5703, 0x5703, 0xd602, 0x1b55, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7e8e, 0xf602, 0x3703, 0x5703, 0x3703, 0xd602, 0x1d7e, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x5fc7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1f9f, 0x3fa7, 0x5703, 0x3703, 0x5703, 0x5703, 0xd602, 0x1b4d, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7e8e, 0xd602, 0x3703, 0x5703, 0x3703, 0xd602, 0x3d7e, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x3fb7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x3fa7, 0x1fa7, 0x770b, 0x1703, 0x5703, 0x5703, 0xd602, 0x1b4d, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3d7e, 0x9602, 0xf602, 0x1703, 0xf602, 0xd602, 0x3d7e, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x7fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x3fa7, 0x1fa7, 0x770b, 0x3703, 0x5703, 0x5703, 0xf602, 0xfb4c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5c5d, 0x7c65, 0x9c65, 0x9c65, 0x7c5d, 0x5e86, 0x5faf, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x1fa7, 0xba44, 0xba54, 0xba54, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xba4c, 0xda5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x3fa7, 0x3fa7, 0x5703, 0x3703, 0x5703, 0x5703, 0xf602, 0xfb4c, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0x3faf, 0x3faf, 0x3faf, 0x3faf, 0x3fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0x5fb7, 0x3b55, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xf702, 0x5703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3faf, 0x5703, 0x1703, 0x5703, 0x5703, 0xf602, 0xfb4c, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x7fb7, 0xfd75, 0x5703, 0xf602, 0x3703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x5703, 0x3703, 0x770b, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3faf, 0x780b, 0x1703, 0x5703, 0x5703, 0xf602, 0xdb44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1f9f, 0x5e7e, 0x7703, 0x7602, 0xd602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xf602, 0xd602, 0x3703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3fa7, 0x980b, 0x1703, 0x5703, 0x5703, 0xf602, 0xdb44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fd7, 0x5edf, 0x7fe7, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0x9fef, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3faf, 0x980b, 0x1703, 0x5703, 0x5703, 0xf602, 0xda44, 0x7fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff96, 0x5fc7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x3faf, 0x780b, 0x1703, 0x5703, 0x5703, 0xf602, 0xba44, 0x9fb7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff96, 0x3faf, 0xfff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x780b, 0x1703, 0x5703, 0x5703, 0xf602, 0xba44, 0x9fb7, 0xff9e, 0x1fa7, 0xbfe7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x7fe7, 0x7fe7, 0x7fe7, 0x7fe7, 0x3ed7, 0xdfff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x5faf, 0x9813, 0x1703, 0x5703, 0x5703, 0xf602, 0xba3c, 0xffef, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xb602, 0xd602, 0xd602, 0x7502, 0x3934, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3faf, 0xb813, 0x1703, 0x5703, 0x5703, 0xd602, 0x1a6d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf82b, 0xf702, 0x5703, 0x5703, 0xd602, 0xba54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x3fa7, 0x9813, 0x1703, 0x5703, 0x5703, 0xd602, 0xfa64, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf82b, 0xf702, 0x5703, 0x5703, 0xd602, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1f9f, 0xdfef, 0xffff, 0xb81b, 0x1703, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd823, 0xf702, 0x5703, 0x5703, 0xd602, 0xba54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0xff9e, 0x9fd7, 0xffff, 0xffff, 0xffff, 0xffff, 0xb81b, 0x1703, 0x5703, 0x5703, 0xd602, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xb81b, 0x1703, 0x5703, 0x5703, 0xd602, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1f9f, 0xff9e, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd823, 0x1703, 0x5703, 0x5703, 0xd602, 0xda5c, 0xffff, 0xffff, 0xffff, 0xd81b, 0x1703, 0x5703, 0x5703, 0xd602, 0xda54, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x3faf, 0xdff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xf702, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xd823, 0x1703, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0x1fa7, 0x1fa7, 0xff9e, 0x1f9f, 0xbfe7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0x1703, 0x5703, 0x5703, 0x1703, 0x5703, 0x1703, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0x1fa7, 0xff9e, 0xff96, 0x7fcf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xd823, 0xf702, 0x5703, 0x5703, 0x3703, 0x5703, 0x5703, 0xd602, 0xfa5c, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xff96, 0xff96, 0x5fbf, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf823, 0xf702, 0x5703, 0x5703, 0x5703, 0xd602, 0x1a65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1fa7, 0xdff7, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xf82b, 0xf702, 0x5703, 0xd602, 0x1a65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x192c, 0x9602, 0x3b65, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdc8d, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CFS_LOGO_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h new file mode 100644 index 00000000000..d4a5f0f6922 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_game_text.h @@ -0,0 +1,318 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_GAME_TEXT_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_GAME_TEXT_H_ + +// clang-format off + +/* **** Includes **** */ + +#include +#include "mxc_device.h" + +/* **** Definitions **** */ + +// NOTE: This definition is used instead of 'const' to place these files into Flash to remove +// the "discard 'const' qualifer from pointer target type" build warning. +#define __flash __attribute__((section(".flash_code_section"))) + +/* **** Function Prototypes **** */ + +// 199x15 +#define GAME_TEXT_DIGITS_WIDTH (131) +#define GAME_TEXT_DIGITS_HEIGHT (15) + +// These digits were edited in Microsoft Paint. Dimensions taken from there. + +// 11x15 +#define GAME_TEXT_DIGIT_0_WIDTH (11) +#define GAME_TEXT_DIGIT_0_HEIGHT (15) +__flash uint16_t game_text_digit_0[] = { + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 +}; + +// 7x15 +#define GAME_TEXT_DIGIT_1_WIDTH (7) +#define GAME_TEXT_DIGIT_1_HEIGHT (15) +__flash uint16_t game_text_digit_1[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff +}; + +// 10x15 +#define GAME_TEXT_DIGIT_2_WIDTH (10) +#define GAME_TEXT_DIGIT_2_HEIGHT (15) +__flash uint16_t game_text_digit_2[] = { + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +// 10x15 +#define GAME_TEXT_DIGIT_3_WIDTH (10) +#define GAME_TEXT_DIGIT_3_HEIGHT (15) +__flash uint16_t game_text_digit_3[] = { + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 +}; + +// 13x15 +#define GAME_TEXT_DIGIT_4_WIDTH (13) +#define GAME_TEXT_DIGIT_4_HEIGHT (15) +__flash uint16_t game_text_digit_4[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 +}; + +// 12x15 +#define GAME_TEXT_DIGIT_5_WIDTH (12) +#define GAME_TEXT_DIGIT_5_HEIGHT (15) +__flash uint16_t game_text_digit_5[] = { + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +// 12x15 +#define GAME_TEXT_DIGIT_6_WIDTH (12) +#define GAME_TEXT_DIGIT_6_HEIGHT (15) +__flash uint16_t game_text_digit_6[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 +}; + +// 11x15 +#define GAME_TEXT_DIGIT_7_WIDTH (11) +#define GAME_TEXT_DIGIT_7_HEIGHT (15) +__flash uint16_t game_text_digit_7[] = { + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +// 10x15 +#define GAME_TEXT_DIGIT_8_WIDTH (10) +#define GAME_TEXT_DIGIT_8_HEIGHT (15) +__flash uint16_t game_text_digit_8[] = { + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 +}; + +// 12x15 +#define GAME_TEXT_DIGIT_9_WIDTH (12) +#define GAME_TEXT_DIGIT_9_HEIGHT (15) +__flash uint16_t game_text_digit_9[] = { + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +#define GAME_TEXT_DIGIT_PTR(digit) ((digit) == 0 ? game_text_digit_0 \ + : (digit) == 1 ? game_text_digit_1 \ + : (digit) == 2 ? game_text_digit_2 \ + : (digit) == 3 ? game_text_digit_3 \ + : (digit) == 4 ? game_text_digit_4 \ + : (digit) == 5 ? game_text_digit_5 \ + : (digit) == 6 ? game_text_digit_6 \ + : (digit) == 7 ? game_text_digit_7 \ + : (digit) == 8 ? game_text_digit_8 \ + : (digit) == 9 ? game_text_digit_9 \ + : NULL) + +#define GAME_TEXT_DIGIT_WIDTH(digit) ((digit) == 0 ? GAME_TEXT_DIGIT_0_WIDTH \ + : (digit) == 1 ? GAME_TEXT_DIGIT_1_WIDTH \ + : (digit) == 2 ? GAME_TEXT_DIGIT_2_WIDTH \ + : (digit) == 3 ? GAME_TEXT_DIGIT_3_WIDTH \ + : (digit) == 4 ? GAME_TEXT_DIGIT_4_WIDTH \ + : (digit) == 5 ? GAME_TEXT_DIGIT_5_WIDTH \ + : (digit) == 6 ? GAME_TEXT_DIGIT_6_WIDTH \ + : (digit) == 7 ? GAME_TEXT_DIGIT_7_WIDTH \ + : (digit) == 8 ? GAME_TEXT_DIGIT_8_WIDTH \ + : (digit) == 9 ? GAME_TEXT_DIGIT_9_WIDTH \ + : GAME_TEXT_DIGIT_0_WIDTH) + +// All the same. +#define GAME_TEXT_DIGITS_HEIGHT (15) + +// 4x15 +#define GAME_TEXT_DIGIT_COLON_WIDTH (4) +#define GAME_TEXT_DIGIT_COLON_HEIGHT (15) +__flash uint16_t game_text_colon[] = { + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000 +}; + +// 67x11 +#define GAME_TEXT_MOVES_WIDTH (67) +#define GAME_TEXT_MOVES_HEIGHT (11) +__flash uint16_t game_text_moves[] = { + 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 +}; + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_GAME_TEXT_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h new file mode 100644 index 00000000000..e4fb4d691de --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/clear_sans_bold_scaled_block_digits.h @@ -0,0 +1,363 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_SCALED_BLOCK_DIGITS_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_SCALED_BLOCK_DIGITS_H_ + +// clang-format off + +/* **** Includes **** */ + +#include +#include "mxc_device.h" + +/* **** Definitions **** */ + +// NOTE: This definition is used instead of 'const' to place these files into Flash to remove +// the "discard 'const' qualifer from pointer target type" build warning. +#define __flash __attribute__((section(".flash_code_section"))) + +/* **** Function Prototypes **** */ + +// These digits were custom made in Microsoft Paint and scaled down to fit the blocks. +// Dimensions are taken from bitmaps. + +// 14x22 +#define BLOCK_2_DIGIT_PX_WIDTH (14) +#define BLOCK_2_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_2[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +// 17x22 +#define BLOCK_4_DIGIT_PX_WIDTH (17) +#define BLOCK_4_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_4[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 +}; + +// 14x22 +#define BLOCK_8_DIGIT_PX_WIDTH (14) +#define BLOCK_8_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_8[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +// 26x22 +#define BLOCK_16_DIGIT_PX_WIDTH (26) +#define BLOCK_16_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_16[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 +}; + +// 30x22 +#define BLOCK_32_DIGIT_PX_WIDTH (30) +#define BLOCK_32_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_32[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +// 34x22 +#define BLOCK_64_DIGIT_PX_WIDTH (34) +#define BLOCK_64_DIGIT_PX_HEIGHT (22) +__flash uint16_t block_64[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 +}; + +// 40x19 +#define BLOCK_128_DIGIT_PX_WIDTH (40) +#define BLOCK_128_DIGIT_PX_HEIGHT (19) +__flash uint16_t block_128[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xbef7, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xdfff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000 +}; + +// 45x19 +#define BLOCK_256_DIGIT_PX_WIDTH (45) +#define BLOCK_256_DIGIT_PX_HEIGHT (19) +__flash uint16_t block_256[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000 +}; + +// 39x19 +#define BLOCK_512_DIGIT_PX_WIDTH (39) +#define BLOCK_512_DIGIT_PX_HEIGHT (19) +__flash uint16_t block_512[] = { + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff +}; + +// 41x13 +#define BLOCK_1024_DIGIT_PX_WIDTH (41) +#define BLOCK_1024_DIGIT_PX_HEIGHT (13) +__flash uint16_t block_1024[] = { + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000 +}; + +// 44x13 +#define BLOCK_2048_DIGIT_PX_WIDTH (44) +#define BLOCK_2048_DIGIT_PX_HEIGHT (13) +__flash uint16_t block_2048[] = { + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, + 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, + 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000 +}; + + +// Easier way to get these measurements. +// Default is 2. +#define BLOCK_DIGIT_PX_WIDTH(block) ((block) == 2 ? BLOCK_2_DIGIT_PX_WIDTH \ + : (block) == 4 ? BLOCK_4_DIGIT_PX_WIDTH \ + : (block) == 8 ? BLOCK_8_DIGIT_PX_WIDTH \ + : (block) == 16 ? BLOCK_16_DIGIT_PX_WIDTH \ + : (block) == 32 ? BLOCK_32_DIGIT_PX_WIDTH \ + : (block) == 64 ? BLOCK_64_DIGIT_PX_WIDTH \ + : (block) == 128 ? BLOCK_128_DIGIT_PX_WIDTH \ + : (block) == 256 ? BLOCK_256_DIGIT_PX_WIDTH \ + : (block) == 512 ? BLOCK_512_DIGIT_PX_WIDTH \ + : (block) == 1024 ? BLOCK_1024_DIGIT_PX_WIDTH \ + : (block) == 2048 ? BLOCK_2048_DIGIT_PX_WIDTH \ + : BLOCK_2_DIGIT_PX_WIDTH) + +#define BLOCK_DIGIT_PX_HEIGHT(block) ((block) == 2 ? BLOCK_2_DIGIT_PX_HEIGHT \ + : (block) == 4 ? BLOCK_4_DIGIT_PX_HEIGHT \ + : (block) == 8 ? BLOCK_8_DIGIT_PX_HEIGHT \ + : (block) == 16 ? BLOCK_16_DIGIT_PX_HEIGHT \ + : (block) == 32 ? BLOCK_32_DIGIT_PX_HEIGHT \ + : (block) == 64 ? BLOCK_64_DIGIT_PX_HEIGHT \ + : (block) == 128 ? BLOCK_128_DIGIT_PX_HEIGHT \ + : (block) == 256 ? BLOCK_256_DIGIT_PX_HEIGHT \ + : (block) == 512 ? BLOCK_512_DIGIT_PX_HEIGHT \ + : (block) == 1024 ? BLOCK_1024_DIGIT_PX_HEIGHT \ + : (block) == 2048 ? BLOCK_2048_DIGIT_PX_HEIGHT \ + : BLOCK_2_DIGIT_PX_HEIGHT) + +#define BLOCK_DIGIT_PTR(block) ((block) == 2 ? block_2 \ + : (block) == 4 ? block_4 \ + : (block) == 8 ? block_8 \ + : (block) == 16 ? block_16 \ + : (block) == 32 ? block_32 \ + : (block) == 64 ? block_64 \ + : (block) == 128 ? block_128 \ + : (block) == 256 ? block_256 \ + : (block) == 512 ? block_512 \ + : (block) == 1024 ? block_1024 \ + : (block) == 2048 ? block_2048 \ + : NULL) + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_CLEAR_SANS_BOLD_SCALED_BLOCK_DIGITS_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h b/Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h new file mode 100644 index 00000000000..577fc34df1f --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/end_game_text.h @@ -0,0 +1,300 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_END_GAME_TEXT_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_END_GAME_TEXT_H_ + +// clang-format off + +/* **** Includes **** */ + +#include +#include "mxc_device.h" + +/* **** Definitions **** */ + +// NOTE: This definition is used instead of 'const' to place these files into Flash to remove +// the "discard 'const' qualifer from pointer target type" build warning. +#define __flash __attribute__((section(".flash_code_section"))) + +/* **** Function Prototypes **** */ + +// These digits were custom made in Microsoft Paint and scaled down to fit the blocks. +// Dimensions are taken from bitmaps. + +// 206x124 +#define YOU_WIN_BOX_WIDTH (206) +#define YOU_WIN_BOX_HEIGHT (124) +__flash uint16_t you_win[] = { + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x18c6, 0x18c6, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x18c6, 0x18c6, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0x18c6, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x18c6, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x18c6, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703 +}; + +// 206x124 +#define GAME_OVER_BOX_WIDTH (206) +#define GAME_OVER_BOX_HEIGHT (124) +__flash uint16_t game_over[] = { + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x1084, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x1084, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x1084, 0x0842, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x1084, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0x0000, 0x0000, 0x0842, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0842, 0x0000, 0x0000, 0x0842, 0xffff, 0x1084, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1084, 0x0842, 0x0000, 0x0000, 0x0000, 0x0000, 0x0842, 0x0842, 0x1084, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, + 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703, 0x1703 +}; + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_END_GAME_TEXT_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h new file mode 100644 index 00000000000..c53bb87bf89 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/graphics.h @@ -0,0 +1,279 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_GRAPHICS_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_GRAPHICS_H_ + +/* **** Includes **** */ + +#include + +/* **** Definitions **** */ + +#define SCREEN_ORIENTATION (SCREEN_ROTATE) + +// Will be different from actual screen dimensions depending on screen orientation +#define SCREEN_WIDTH (320) +#define SCREEN_HEIGHT (240) + +// TODO(SW): Automatically calculate these sizes based on screen dimensions. +// Set the dimensions of all the models. +#define GRID_OFFSET_X (80) +#define GRID_OFFSET_Y (0) +#define GRID_LENGTH (224) +#define GRID_SPACING (8) // spacing between edge of "screen to grid". + +#define BLOCK_LENGTH (51) +#define BLOCK_SPACING (4) // spacing between edge of "grid to block" and "block to block". + +#define RADIUS_FOR_CORNERS (3) + +#define CFS_LOGO_OFFSET_X (4) +#define CFS_LOGO_OFFSET_Y (0) + +#define GAME_LOGO_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X - BLOCK_LENGTH) / 2) +#define GAME_LOGO_OFFSET_Y (80) + +// Position settings for timer. +#define TIME_OFFSET_Y (215) +#define TIME_COLON_OFFSET_X (CFS_LOGO_OFFSET_X + (GRID_OFFSET_X / 2) - 1) +#define TIME_DIGIT_WIDTH (15) // Max width of digit is 15 pixels +#define TIME_DIGIT3_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 2)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - \ + (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT2_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X - (TIME_DIGIT_WIDTH * 1)) + ((TIME_DIGIT_WIDTH / 2) - (width / 2) - 1) - \ + (GAME_TEXT_DIGIT_COLON_WIDTH / 2)) +#define TIME_DIGIT1_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2)) + \ + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) +#define TIME_DIGIT0_OFFSET_X(width) \ + ((TIME_COLON_OFFSET_X + (GAME_TEXT_DIGIT_COLON_WIDTH * 2) + TIME_DIGIT_WIDTH) + \ + ((TIME_DIGIT_WIDTH / 2) - (width / 2)) - 1) + +// Position settings for moves counter. +#define MOVES_DIGITS_OFFSET_Y (160) +#define MOVES_TEXT_OFFSET_Y \ + (MOVES_DIGITS_OFFSET_Y + GAME_TEXT_DIGITS_HEIGHT + \ + 4) // 4 seemed to be appropriate number of pxiels for spacing. +#define MOVES_DIGIT_WIDTH (15) // Max width of digit is 15 pixels. +#define MOVES_DIGITS_OFFSET_X ((GRID_OFFSET_X / 2) - MOVES_DIGIT_WIDTH - (MOVES_DIGIT_WIDTH / 2)) +#define MOVES_TEXT_OFFSET_X ((GRID_OFFSET_X / 2) - (GAME_TEXT_MOVES_WIDTH / 2) + 4) +#define MOVES_DIGIT3_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 0) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT2_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 1) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT1_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 2) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) +#define MOVES_DIGIT0_OFFSET_X(width) \ + (MOVES_DIGITS_OFFSET_X + (MOVES_DIGIT_WIDTH * 3) + (MOVES_DIGIT_WIDTH / 2) - (width - 2)) + +// Position settings for Game Over and You Win boxes, +#define GAME_OVER_BOX_OFFSET_X \ + (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (GAME_OVER_BOX_WIDTH / 2)) +#define GAME_OVER_BOX_OFFSET_Y \ + (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (GAME_OVER_BOX_HEIGHT / 2)) +#define YOU_WIN_BOX_OFFSET_X \ + (GRID_OFFSET_X + ((SCREEN_WIDTH - GRID_OFFSET_X) / 2) - (YOU_WIN_BOX_WIDTH / 2)) +#define YOU_WIN_BOX_OFFSET_Y \ + (GRID_OFFSET_Y + ((SCREEN_HEIGHT - GRID_OFFSET_Y) / 2) - (YOU_WIN_BOX_HEIGHT / 2)) + +// Colors 16-bit RGB565. +#define RGB565_WHITE (0xFFFF) +#define RGB565_BLACK (0x0000) +#define RGB565_DARK_GRAY (0x3084) +#define RGB565_LIGHT_GRAY (0x5AEB) + +// Block colors (2-2048) are taken from original game: https://github.com/gabrielecirulli/2048?tab=readme-ov-file +// Open-source under MIT License. +#define RGB565_BLOCK_2 (0xEF3B) +#define RGB565_BLOCK_4 (0xEF19) +#define RGB565_BLOCK_8 (0xF58F) +#define RGB565_BLOCK_16 (0xF4AC) +#define RGB565_BLOCK_32 (0xF3EB) +#define RGB565_BLOCK_64 (0xF2E7) +#define RGB565_BLOCK_128 (0xEE6E) +#define RGB565_BLOCK_256 (0xEE6C) +#define RGB565_BLOCK_512 (0xEE4A) +#define RGB565_BLOCK_1024 (0xEE27) +#define RGB565_BLOCK_2048 (0xEE05) + +// Unused, but left here if anyone wants to expand features. +#define RGB565_BLOCK_4096 (0xFDF7) +#define RGB565_BLOCK_8192 (0xF38E) +#define RGB565_BLOCK_16384 (0xFC58) +#define RGB565_BLOCK_32768 (0xB43C) +#define RGB565_BLOCK_65536 (0x8BF9) +#define RGB565_BLOCK_131072 (0x6C3C) + +// For my non-American English Speakers :) +#define RGB565_DARK_GREY RGB565_DARK_GRAY +#define RGB565_LIGHT_GREY RGB565_LIGHT_GRAY + +// Formatted Colors +#define FORMAT_RGB565_TO_PACKET(RGB) (0x01000100 | ((RGB & 0x00FF) << 16) | ((RGB & 0xFF00) >> 8)) + +// 'F_' prefix stands for "formatted into packets". +#define F_BACKGROUND_COLOR FORMAT_RGB565_TO_PACKET(RGB565_WHITE) +#define F_GRID_COLOR FORMAT_RGB565_TO_PACKET(RGB565_DARK_GRAY) +#define F_EMPTY_BLOCK_COLOR FORMAT_RGB565_TO_PACKET(RGB565_LIGHT_GRAY) + +#define RGB_BLOCK_COLOR(block) \ + ((block) == 2 ? RGB565_BLOCK_2 : \ + (block) == 4 ? RGB565_BLOCK_4 : \ + (block) == 8 ? RGB565_BLOCK_8 : \ + (block) == 16 ? RGB565_BLOCK_16 : \ + (block) == 32 ? RGB565_BLOCK_32 : \ + (block) == 64 ? RGB565_BLOCK_64 : \ + (block) == 128 ? RGB565_BLOCK_128 : \ + (block) == 256 ? RGB565_BLOCK_256 : \ + (block) == 512 ? RGB565_BLOCK_512 : \ + (block) == 1024 ? RGB565_BLOCK_1024 : \ + (block) == 2048 ? RGB565_BLOCK_2048 : \ + BLOCK_2_DIGIT_PX_HEIGHT) + +#define FORMATTED_RGB_BLOCK_COLOR(block) FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block)) + +/** + * These enums help keep track of what blocks were erased, + * combined, or didn't move to help optimize and select + * the animation of for the display. + * IMPORTANT: Sync these commands with the RISCV core. + */ +typedef enum { EMPTY = 0, ERASE = 1, COMBINE = 2, UNMOVED = 3 } block_state_t; + +/** + * These enums help keep track of the game state. + * IMPORTANT: Sync these commands with the RISCV core. + */ +typedef enum { + IN_PROGRESS = 0, + GAME_OVER = 1, + WINNER = 2, +} game_state_t; + +/* **** Function Prototypes **** */ + +/** + * This enum is used to keep track of which direction the blocks will slide to + * for the graphics. + * IMPORTANT: Sync these directions with the RISCV core. + */ +typedef enum { + GRAPHICS_SLIDE_DIR_UP = 0, + GRAPHICS_SLIDE_DIR_DOWN = 1, + GRAPHICS_SLIDE_DIR_LEFT = 2, + GRAPHICS_SLIDE_DIR_RIGHT = 3, +} graphics_slide_direction_t; + +/* **** Function Prototypes **** */ + +/** + * @brief Initializes the Graphics of the 2048 Game Demo. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int Graphics_Init(void); + +/** + * @brief Draw the new block (2 or 4) spawn animation on the grid. This + * function runs when the existing grid has finished updating and + * a new block needs to be drawn. + * + * @param row Row number (indexed 0). + * @param col Column number (indexed 0). + * @param block_2_4 Pass in 2 for Block 2 spawn, 4 for Block 4 spawn. + */ +void Graphics_AddNewBlock(int row, int col, int block_2_4); + +/** + * @brief Draws a block on the grid (no animation). This function is + * is mainly used for re-drawing existing blocks when they're moved. + * + * @param row Row number (indexed 0). + * @param col Column number (indexed 0). + * @param value Value of block to draw on grid. + */ +void Graphics_AddBlock(int row, int col, int value); + +/** + * @brief Draws a new combined block (including blow-up/shrink-down animation). + * + * @param row Row number (indexed 0). + * @param col Column number (indexed 0). + * @param new_value Value of combined block to draw on grid. + */ +void Graphics_CombineSingleBlock(int row, int col, int new_value); + +/** + * @brief Draws all blocks that were combined. This function not only draws the combined blocks, + * but also draws the blow-up/shrink-down animation. This function should be called + * after all the blocks that moved to their final locations (Graphics_AddBlock()) + * have been drawn to display. + * + * @param grid Pointer to main 2048 grid (2-D array) which holds the current positions + * of all valid blocks. + * @param grid_state Pointer to grid state (2-D array) which holds the state of the blocks that + * needs to combined. + */ +void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]); + +/** + * @brief Erases all moving blocks from the grid. This function is used before + * drawing the blocks that moved to their final location. + * + * @param grid_state Pointer to grid (2-D array) which holds the state of the blocks that + * needs to be erased because they're moving. + * @param direction Direction that the blocks are moving to. + */ +void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_direction_t direction); + +/** + * @brief Erases the the block from the grid. This function is mainly used + * when blocks are moving which need to be erased, then redrawned. + * + * @param row Row number (indexed 0). + * @param col Column number (indexed 0). + */ +void Graphics_EraseSingleBlock(int row, int col); + +/** + * @brief Update the timer on the display. + * + * @param total_seconds The current total second value of RTC. + */ +void Graphics_SetTime(uint32_t total_seconds); + +/** + * @brief Update the moves counter on the display. + * + * @param moves_count The number of moves that have been executed. + */ +void Graphics_UpdateMovesCount(uint32_t moves_count); + +/** + * @brief Draws the "game over" box popup when game is finished. + */ +void Graphics_DisplayGameOver(void); + +/** + * @brief Draws the "you win" box popup when game is finished. + */ +void Graphics_DisplayYouWin(void); + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_GRAPHICS_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h new file mode 100644 index 00000000000..b3b3ed1bb93 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/inc/ipc_defines.h @@ -0,0 +1,61 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_INC_IPC_DEFINES_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_INC_IPC_DEFINES_H_ + +/* **** Includes **** */ + +#include + +/* **** Definitions **** */ + +// These should match with the RISC-V core's copy of ipc_defines.h + +/// Semaphores +// Should never reach here +#if (MAILBOX_SIZE == 0) +#error "Mailbox size is 0." +#endif + +// Keep track for Semaphore peripheral. +#define SEMA_IDX_ARM (0) +#define SEMA_IDX_RISCV (1) + +#define MAILBOX_OVERHEAD (2 * sizeof(uint16_t)) +#define MAILBOX_PAYLOAD_LEN (MAILBOX_SIZE - MAILBOX_OVERHEAD) +typedef struct { + uint16_t readLocation; + uint16_t writeLocation; +#if (MAILBOX_SIZE == 0) + uint8_t payload[1]; +#else + uint8_t payload[MAILBOX_PAYLOAD_LEN]; +#endif +} mxcSemaBox_t; + +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indices are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX \ + (4 * 16) // Indices are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indices before are for the main grids. +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_INC_IPC_DEFINES_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/main.c b/Examples/MAX32655/Demo_2048/ARM/main.c new file mode 100644 index 00000000000..c2b3d97000f --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/main.c @@ -0,0 +1,355 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief ARM Core portion of the 2048 Game. + * @details + */ + +/* **** Includes **** */ +#include +#include +#include + +// MSDK-provided Drivers +#include "mxc_delay.h" +#include "mxc_device.h" +#include "mxc_sys.h" +#include "sema.h" +#include "led.h" +#include "uart.h" +#include "rtc.h" + +// Application Libraries +#include "graphics.h" +#include "ipc_defines.h" + +/* **** Definitions **** */ + +#if DEV_MODE_TRACE +#define PRINT(...) printf(__VA_ARGS__) +#else +// Don't print anything +#define PRINT(...) +#endif + +// Match the Console's baud rate to what the controller will be set to +// for the RISC-V as they share the same port. +#define RISCV_CONTROLLER_BAUD (115200) + +/* **** Globals **** */ +// Defined in sema_reva.c +extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads +extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes + +// Rename boxes for readability. +// Imagine like real mailboxes, owner (core) sends mail (keypress) in their mailbox. +#define SEMA_RISCV_MAILBOX mxcSemaBox0 +#define SEMA_ARM_MAILBOX mxcSemaBox1 + +uint32_t ARM_GRID_COPY[4][4] = { 0 }; +block_state_t ARM_GRID_COPY_STATE[4][4] = { 0 }; + +uint32_t MOVES_COUNT = 0; + +/* **** Functions **** */ + +void ReceiveGridFromRISCVCore(void) +{ + int i = MAILBOX_MAIN_GRID_IDX; + + // Grid state. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + ARM_GRID_COPY[row][col] = SEMA_ARM_MAILBOX->payload[i] << (8 * 0); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 1] << (8 * 1); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 2] << (8 * 2); + ARM_GRID_COPY[row][col] += SEMA_ARM_MAILBOX->payload[i + 3] << (8 * 3); + + i += 4; + } + } + + // Grid status (unmoved/delete/combine). + i = MAILBOX_MAIN_GRID_STATE_IDX; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + ARM_GRID_COPY_STATE[row][col] = SEMA_ARM_MAILBOX->payload[i] << (8 * 0); + + i++; + } + } +} + +graphics_slide_direction_t ReceiveDirectionFromRISCVCore(void) +{ + // Add more direction keys here. + switch (SEMA_ARM_MAILBOX->payload[MAILBOX_KEYPRESS_IDX]) { + // UP + case 'w': + return GRAPHICS_SLIDE_DIR_UP; + + // DOWN + case 's': + return GRAPHICS_SLIDE_DIR_DOWN; + + // LEFT + case 'a': + return GRAPHICS_SLIDE_DIR_LEFT; + + // RIGHT + case 'd': + return GRAPHICS_SLIDE_DIR_RIGHT; + + default: + return -1; + } +} + +bool ReceiveNewBlockLocationFromRISCVCore(uint16_t *row, uint16_t *col) +{ + uint8_t new_block_added = SEMA_ARM_MAILBOX->payload[MAILBOX_IF_BLOCK_MOVED_IDX]; + if (new_block_added) { // true + *row = (uint16_t)(SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] / 4); + *col = (uint16_t)(SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] % 4); + } else { + *row = 0xFFFF; + *col = 0xFFFF; + } + + return new_block_added; +} + +game_state_t ReceiveGameStateFromRISCVCore(void) +{ + return SEMA_ARM_MAILBOX->payload[MAILBOX_GAME_STATE_IDX]; +} + +uint32_t ReceiveMovesCountFromRISCVCore(void) +{ + uint32_t moves_count = 0; + moves_count = SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX] << (8 * 0); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 1] << (8 * 1); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 2] << (8 * 2); + moves_count += SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 3] << (8 * 3); + return moves_count; +} + +// ***************************************************************************** +int main(void) +{ + int error; + uint16_t new_block_row = 0xFFFF, new_block_col = 0xFFFF; + graphics_slide_direction_t direction; + game_state_t game_state; + + // System Initialization: + // - Use IPO for System Clock for fastest speed. (Done in SystemInit) + // - Enable Internal Cache. (Done in SystemInit) + + // Speed up console UART to match player controller baud rate which have shared ports + // (PC Keyboard via Console UART). + error = MXC_UART_Init(MXC_UART_GET_UART(CONSOLE_UART), RISCV_CONTROLLER_BAUD, MXC_UART_APB_CLK); + if (error != E_NO_ERROR) { + PRINT("ARM: Error speeding up baud rate: %d\n", error); + LED_On(LED_RED); + while (1) {} + } + + PRINT("\n\n*******************************************************************************\n"); + + // ARM Initialization. + PRINT("ARM: Starting ARM Initialization.\n\n"); + + // Enable ISO clock for RISC-V. + MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ISO); + + // Enable RISCV JTAG debugger. + MXC_GPIO_Config(&gpio_cfg_rv_jtag); + + // Prepare ARM semaphore. + MXC_SEMA_Init(); + + // Check status of ARM semaphore. + error = MXC_SEMA_CheckSema(SEMA_IDX_ARM); + if (error != E_NO_ERROR) { + PRINT("ARM: Semaphore for ARM core is busy: %d\n", error); + LED_On(LED_RED); + while (1) {} + } + + error = MXC_SEMA_GetSema(SEMA_IDX_ARM); + if (error != E_NO_ERROR) { + PRINT("ARM: Semaphore is busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_ARM]); + LED_On(LED_RED); + while (1) {} + } else { + PRINT("ARM: Semaphore is not busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_ARM]); + } + + // Backup Delay for 1 second before starting RISCV core. + MXC_Delay(MXC_DELAY_SEC(1)); + + PRINT("ARM: Starting RISC-V core and handing off major UART0 Control to RISC-V.\n\n"); + + // Start the RISCV core. + MXC_SYS_RISCVRun(); + + // Wait the RISC-V core to finish startup (when it frees ARM semaphore). + while (MXC_SEMA_CheckSema(SEMA_IDX_ARM) != E_NO_ERROR) {} + MXC_SEMA_GetSema(SEMA_IDX_ARM); + + // Initialize mailboxes between ARM and RISCV cores. + MXC_SEMA_InitBoxes(); + + // Signal RISCV core to run. + MXC_SEMA_FreeSema(SEMA_IDX_RISCV); + + // Initialize RTC. + if (MXC_RTC_Init(0, 0) != E_NO_ERROR) { + PRINT("ARM: Error initializing RTC: %d\n", error); + LED_On(LED_RED); + while (1) {} + } + + error = Graphics_Init(); + if (error != E_NO_ERROR) { + PRINT("ARM: Error initializing graphics: %d\n", error); + LED_On(LED_RED); + while (1) {} + } + + // Wait for Game logic to finish initializing on RISCV. + while (MXC_SEMA_CheckSema(SEMA_IDX_ARM) != E_NO_ERROR) {} + MXC_SEMA_GetSema(SEMA_IDX_ARM); + + // Get starting grid to keep ARM and RISCV grid copies in sync. + ReceiveGridFromRISCVCore(); + + ReceiveNewBlockLocationFromRISCVCore(&new_block_row, &new_block_col); + + game_state = ReceiveGameStateFromRISCVCore(); + if (game_state != IN_PROGRESS) { + PRINT("ARM: Error starting game.\n"); + LED_On(LED_RED); + while (1) {} + } + + Graphics_AddNewBlock(new_block_row, new_block_col, ARM_GRID_COPY[new_block_row][new_block_col]); + + // Signal RISC-V to start waiting for keypresses. + MXC_SEMA_FreeSema(SEMA_IDX_RISCV); + + // Start timer. + if (MXC_RTC_Start() != E_NO_ERROR) { + PRINT("ARM: Error starting timer: %d\n", error); + LED_On(LED_RED); + while (1) {} + } + + uint32_t prev_seconds = 0; + uint32_t seconds = 0; + int prev_moves_count = MOVES_COUNT; // Should start as 0. + while (1) { + // Update timer. + MXC_RTC_GetSeconds(&seconds); + if (prev_seconds != seconds) { + Graphics_SetTime(seconds); + prev_seconds = seconds; + } + + // Update grid when RISCV signals ARM it's ready. + if (MXC_SEMA_CheckSema(SEMA_IDX_ARM) == E_NO_ERROR) { + MXC_SEMA_GetSema(SEMA_IDX_ARM); + + // Get the updated grid then display. + ReceiveGridFromRISCVCore(); + + direction = ReceiveDirectionFromRISCVCore(); + + // Erase blocks that are moving before drawing theem at their final location. + Graphics_EraseBlocks(ARM_GRID_COPY_STATE, direction); + + // Pre-set these values as invalid locations. + new_block_row = 0xFFFF, new_block_col = 0xFFFF; + bool new_block_added; + // If blocks moved, Add new block after all the grid updated. + new_block_added = ReceiveNewBlockLocationFromRISCVCore(&new_block_row, &new_block_col); + + // Increment moves counter if blocks moved. + MOVES_COUNT = ReceiveMovesCountFromRISCVCore(); + if (prev_moves_count != MOVES_COUNT) { + Graphics_UpdateMovesCount(MOVES_COUNT); + prev_moves_count = MOVES_COUNT; + } + + // Add new blocks. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if ((ARM_GRID_COPY[row][col]) != 0 && + (ARM_GRID_COPY_STATE[row][col] != UNMOVED) && + (ARM_GRID_COPY_STATE[row][col] != COMBINE)) { + // Don't draw newly spawned block. + // new_block_row and new_block_col will be set to 0xFFFF for invalid + // location if new block was not added. + if ((row != new_block_row) || (col != new_block_col)) { + Graphics_AddBlock(row, col, ARM_GRID_COPY[row][col]); + } + } + } + } + + // Add combined blocks. + Graphics_CombineBlocks(ARM_GRID_COPY, ARM_GRID_COPY_STATE); + + // Add new block with spawn animation. + if (new_block_added == true) { + Graphics_AddNewBlock(new_block_row, new_block_col, + ARM_GRID_COPY[new_block_row][new_block_col]); + } + + game_state = ReceiveGameStateFromRISCVCore(); + // Check if game is finished. + if (game_state == WINNER) { + PRINT("ARM: Congratulations, you win!\n"); + PRINT("ARM: Ending game.\n"); + + // Give some time for user to look at grid before drawing the popup. + MXC_Delay(MXC_DELAY_MSEC(750)); + Graphics_DisplayYouWin(); + + while (1) {} + } else if (game_state == GAME_OVER) { + PRINT("ARM: Game Over. Nice try! Better luck next time.\n"); + PRINT("ARM: Ending game.\n"); + + // Give some time for user to look at grid before drawing the popup. + MXC_Delay(MXC_DELAY_MSEC(750)); + Graphics_DisplayGameOver(); + + while (1) {} + } + + // Signal RISC-V Core that it's ready for the next grid state. + MXC_SEMA_FreeSema(SEMA_IDX_RISCV); + } + } +} diff --git a/Examples/MAX32655/Demo_2048/ARM/project.mk b/Examples/MAX32655/Demo_2048/ARM/project.mk new file mode 100644 index 00000000000..0c8806ec85b --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/project.mk @@ -0,0 +1,30 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Add your config here! + +# Load and start the RISCV core +RISCV_LOAD=1 + +# Directory for RISCV code +RISCV_APP=../RISCV + +IPATH += ./inc +VPATH += ./src + +DEV_MODE_TRACE = 1 +ifeq ($(DEV_MODE_TRACE), 1) +PROJ_CFLAGS += -DDEV_MODE_TRACE=1 +endif + +MAILBOX_SIZE = 226 + +ifeq ($(BOARD),FTHR_Apps_P1) +$(error ERR_NOTSUPPORTED: This example requires a TFT display, therefore it's not supported on the MAX32650FTHR) +endif diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c new file mode 100644 index 00000000000..d054ad552ca --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/resources/all_imgs.c @@ -0,0 +1,115971 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +__attribute__((section(".bin_storage_img"))) __attribute__((__used__)) +const unsigned char imgs_arr[] = { + /** + * Header + */ + 0x18, + 0x00, + 0x00, + 0x00, + 0x1D, + 0x04, + 0x00, + 0x00, + 0x16, + 0x0A, + 0x00, + 0x00, + 0x01, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + + /** + * Palette + */ + 0x01, + 0x1D, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x9B, + 0xA5, + 0x18, + 0x00, + 0x70, + 0x73, + 0x71, + 0x00, + 0x33, + 0x35, + 0x3B, + 0x00, + 0x20, + 0xE8, + 0xD9, + 0x00, + 0x03, + 0x02, + 0xD5, + 0x00, + 0x00, + 0xA9, + 0x00, + 0x00, + 0x6F, + 0x6E, + 0x7A, + 0x00, + 0xFF, + 0xFD, + 0xFF, + 0x00, + 0x76, + 0x75, + 0x76, + 0x00, + 0x95, + 0x94, + 0x95, + 0x00, + 0x6A, + 0x66, + 0x69, + 0x00, + 0x7A, + 0x76, + 0x78, + 0x00, + 0x76, + 0x72, + 0x74, + 0x00, + 0x75, + 0x71, + 0x73, + 0x00, + 0x71, + 0x6F, + 0x6F, + 0x00, + 0x76, + 0x75, + 0x75, + 0x00, + 0x75, + 0x74, + 0x74, + 0x00, + 0x74, + 0x73, + 0x73, + 0x00, + 0x73, + 0x72, + 0x72, + 0x00, + 0x72, + 0x71, + 0x71, + 0x00, + 0x91, + 0x90, + 0x90, + 0x00, + 0x86, + 0x85, + 0x85, + 0x00, + 0x67, + 0x65, + 0x64, + 0x00, + 0x63, + 0x61, + 0x60, + 0x00, + 0x70, + 0x6E, + 0x6D, + 0x00, + 0x6A, + 0x68, + 0x66, + 0x00, + 0x77, + 0x76, + 0x75, + 0x00, + 0x71, + 0x70, + 0x6F, + 0x00, + 0x6E, + 0x6D, + 0x6C, + 0x00, + 0x6D, + 0x6C, + 0x6B, + 0x00, + 0x6C, + 0x6B, + 0x6A, + 0x00, + 0x90, + 0x8F, + 0x8E, + 0x00, + 0x88, + 0x87, + 0x86, + 0x00, + 0x77, + 0x74, + 0x70, + 0x00, + 0x76, + 0x73, + 0x6F, + 0x00, + 0x75, + 0x72, + 0x6E, + 0x00, + 0x4F, + 0x4D, + 0x4A, + 0x00, + 0x5A, + 0x58, + 0x55, + 0x00, + 0x58, + 0x56, + 0x53, + 0x00, + 0x56, + 0x54, + 0x51, + 0x00, + 0x3F, + 0x3D, + 0x39, + 0x00, + 0x44, + 0x42, + 0x3E, + 0x00, + 0x47, + 0x45, + 0x41, + 0x00, + 0x4C, + 0x4A, + 0x46, + 0x00, + 0x4B, + 0x49, + 0x45, + 0x00, + 0x4A, + 0x48, + 0x44, + 0x00, + 0x4E, + 0x4C, + 0x48, + 0x00, + 0x4D, + 0x4B, + 0x47, + 0x00, + 0x6B, + 0x6A, + 0x68, + 0x00, + 0x68, + 0x67, + 0x65, + 0x00, + 0x66, + 0x65, + 0x63, + 0x00, + 0x64, + 0x63, + 0x61, + 0x00, + 0x74, + 0x73, + 0x71, + 0x00, + 0x73, + 0x72, + 0x70, + 0x00, + 0x42, + 0x40, + 0x3B, + 0x00, + 0x41, + 0x3F, + 0x3A, + 0x00, + 0x43, + 0x41, + 0x3C, + 0x00, + 0x46, + 0x44, + 0x3F, + 0x00, + 0x5D, + 0x5C, + 0x59, + 0x00, + 0x5B, + 0x5A, + 0x57, + 0x00, + 0x61, + 0x60, + 0x5D, + 0x00, + 0x5F, + 0x5E, + 0x5B, + 0x00, + 0x76, + 0x75, + 0x72, + 0x00, + 0x72, + 0x71, + 0x6E, + 0x00, + 0x53, + 0x52, + 0x4E, + 0x00, + 0x51, + 0x50, + 0x4C, + 0x00, + 0x79, + 0x78, + 0x74, + 0x00, + 0x48, + 0x47, + 0x42, + 0x00, + 0xFD, + 0xFC, + 0xF7, + 0x00, + 0x77, + 0x76, + 0x6B, + 0x00, + 0x80, + 0x7F, + 0x71, + 0x00, + 0x9D, + 0xA0, + 0x19, + 0x00, + 0x93, + 0x95, + 0x1E, + 0x00, + 0xA3, + 0xA6, + 0x25, + 0x00, + 0xF9, + 0xF9, + 0xED, + 0x00, + 0x76, + 0x76, + 0x73, + 0x00, + 0x79, + 0x79, + 0x77, + 0x00, + 0x89, + 0x89, + 0x87, + 0x00, + 0x81, + 0x81, + 0x7F, + 0x00, + 0x4C, + 0x4C, + 0x4B, + 0x00, + 0x4A, + 0x4A, + 0x49, + 0x00, + 0xFE, + 0xFE, + 0xFC, + 0x00, + 0xFF, + 0xFF, + 0xFE, + 0x00, + 0xE2, + 0xE2, + 0xE1, + 0x00, + 0xC2, + 0xC2, + 0xC1, + 0x00, + 0xB7, + 0xB7, + 0xB6, + 0x00, + 0xAE, + 0xAE, + 0xAD, + 0x00, + 0xA7, + 0xA7, + 0xA6, + 0x00, + 0xA1, + 0xA1, + 0xA0, + 0x00, + 0x9C, + 0x9C, + 0x9B, + 0x00, + 0x9A, + 0x9A, + 0x99, + 0x00, + 0x97, + 0x97, + 0x96, + 0x00, + 0x8E, + 0x8E, + 0x8D, + 0x00, + 0x8D, + 0x8D, + 0x8C, + 0x00, + 0x8A, + 0x8A, + 0x89, + 0x00, + 0x83, + 0x83, + 0x82, + 0x00, + 0xA6, + 0xAE, + 0x00, + 0x00, + 0xA5, + 0xAB, + 0x00, + 0x00, + 0xA2, + 0xA6, + 0x00, + 0x00, + 0xA0, + 0xA4, + 0x00, + 0x00, + 0x95, + 0x9C, + 0x01, + 0x00, + 0xA6, + 0xAA, + 0x0A, + 0x00, + 0x9F, + 0xA6, + 0x0B, + 0x00, + 0x89, + 0x8F, + 0x0E, + 0x00, + 0xA9, + 0xAD, + 0x13, + 0x00, + 0xAD, + 0xB1, + 0x1D, + 0x00, + 0x9C, + 0xA2, + 0x1F, + 0x00, + 0xB1, + 0xB5, + 0x25, + 0x00, + 0xBD, + 0xC3, + 0x41, + 0x00, + 0xB5, + 0xB9, + 0x44, + 0x00, + 0xC3, + 0xC8, + 0x59, + 0x00, + 0x83, + 0x85, + 0x4B, + 0x00, + 0xCB, + 0xCF, + 0x79, + 0x00, + 0x8B, + 0x8D, + 0x56, + 0x00, + 0x7D, + 0x7E, + 0x59, + 0x00, + 0xDB, + 0xDE, + 0x9D, + 0x00, + 0xE4, + 0xE6, + 0xB7, + 0x00, + 0xA9, + 0xB2, + 0x00, + 0x00, + 0xAF, + 0xB8, + 0x14, + 0x00, + 0x9D, + 0xA6, + 0x13, + 0x00, + 0x9C, + 0xA5, + 0x15, + 0x00, + 0x9B, + 0xA5, + 0x16, + 0x00, + 0x99, + 0xA2, + 0x17, + 0x00, + 0x9A, + 0xA3, + 0x19, + 0x00, + 0x9E, + 0xA7, + 0x1D, + 0x00, + 0xA0, + 0xA9, + 0x20, + 0x00, + 0x74, + 0x7A, + 0x1A, + 0x00, + 0xB5, + 0xBC, + 0x2B, + 0x00, + 0xAE, + 0xB4, + 0x36, + 0x00, + 0x9A, + 0xA0, + 0x31, + 0x00, + 0x93, + 0x97, + 0x46, + 0x00, + 0x97, + 0x9A, + 0x67, + 0x00, + 0xA8, + 0xAB, + 0x77, + 0x00, + 0x84, + 0x86, + 0x65, + 0x00, + 0xEC, + 0xEE, + 0xCC, + 0x00, + 0xF4, + 0xF5, + 0xE0, + 0x00, + 0x9C, + 0xA6, + 0x18, + 0x00, + 0x91, + 0x99, + 0x2C, + 0x00, + 0x60, + 0x65, + 0x24, + 0x00, + 0x6A, + 0x6C, + 0x56, + 0x00, + 0x77, + 0x79, + 0x62, + 0x00, + 0x9C, + 0xAB, + 0x15, + 0x00, + 0xA5, + 0xB5, + 0x2B, + 0x00, + 0x9E, + 0xAD, + 0x2C, + 0x00, + 0x8A, + 0x93, + 0x37, + 0x00, + 0x7C, + 0x84, + 0x3D, + 0x00, + 0x51, + 0x55, + 0x2F, + 0x00, + 0x4C, + 0x4F, + 0x2F, + 0x00, + 0x9C, + 0x9F, + 0x81, + 0x00, + 0x8F, + 0xA2, + 0x15, + 0x00, + 0xAF, + 0xC1, + 0x29, + 0x00, + 0xAA, + 0xBC, + 0x2A, + 0x00, + 0xA7, + 0xB8, + 0x2B, + 0x00, + 0xA4, + 0xB5, + 0x2B, + 0x00, + 0xA3, + 0xB3, + 0x2C, + 0x00, + 0x99, + 0xA9, + 0x35, + 0x00, + 0x45, + 0x48, + 0x32, + 0x00, + 0xA6, + 0xBA, + 0x32, + 0x00, + 0xA2, + 0xB5, + 0x33, + 0x00, + 0x9D, + 0xAF, + 0x34, + 0x00, + 0x6A, + 0x72, + 0x40, + 0x00, + 0x65, + 0x6B, + 0x42, + 0x00, + 0x5F, + 0x65, + 0x40, + 0x00, + 0x48, + 0x4C, + 0x31, + 0x00, + 0x58, + 0x5C, + 0x40, + 0x00, + 0x59, + 0x5C, + 0x47, + 0x00, + 0x53, + 0x56, + 0x44, + 0x00, + 0x4F, + 0x51, + 0x45, + 0x00, + 0x53, + 0x55, + 0x49, + 0x00, + 0x41, + 0x44, + 0x34, + 0x00, + 0x76, + 0x7A, + 0x66, + 0x00, + 0x48, + 0x4D, + 0x38, + 0x00, + 0x73, + 0x76, + 0x6B, + 0x00, + 0x4B, + 0x4D, + 0x46, + 0x00, + 0x41, + 0x45, + 0x39, + 0x00, + 0x73, + 0x76, + 0x6D, + 0x00, + 0x7C, + 0x7D, + 0x7B, + 0x00, + 0xFC, + 0xFD, + 0xFB, + 0x00, + 0x3A, + 0x3D, + 0x39, + 0x00, + 0x6D, + 0x71, + 0x6C, + 0x00, + 0x56, + 0x59, + 0x56, + 0x00, + 0x75, + 0x78, + 0x75, + 0x00, + 0xCC, + 0xCD, + 0xCC, + 0x00, + 0x50, + 0xCD, + 0x59, + 0x00, + 0x32, + 0xC6, + 0x3E, + 0x00, + 0x81, + 0xDC, + 0x89, + 0x00, + 0xA8, + 0xE8, + 0xAE, + 0x00, + 0xC3, + 0xEF, + 0xC7, + 0x00, + 0x02, + 0xC0, + 0x19, + 0x00, + 0xE9, + 0xF9, + 0xEB, + 0x00, + 0x02, + 0xD4, + 0x2E, + 0x00, + 0x6A, + 0x6D, + 0x6B, + 0x00, + 0x74, + 0x77, + 0x75, + 0x00, + 0x73, + 0x76, + 0x74, + 0x00, + 0x71, + 0x74, + 0x72, + 0x00, + 0x6C, + 0x6F, + 0x6D, + 0x00, + 0xFC, + 0xFF, + 0xFE, + 0x00, + 0x26, + 0xE2, + 0xD3, + 0x00, + 0x2E, + 0xD8, + 0xC9, + 0x00, + 0x34, + 0xD0, + 0xC1, + 0x00, + 0x57, + 0xE1, + 0xD5, + 0x00, + 0x88, + 0xE9, + 0xE1, + 0x00, + 0xBC, + 0xF3, + 0xEE, + 0x00, + 0xE0, + 0xF9, + 0xF7, + 0x00, + 0xF1, + 0xFD, + 0xFC, + 0x00, + 0x1F, + 0xE9, + 0xDA, + 0x00, + 0x63, + 0x65, + 0x65, + 0x00, + 0x51, + 0x52, + 0x52, + 0x00, + 0x55, + 0x56, + 0x56, + 0x00, + 0x4B, + 0x4D, + 0x4E, + 0x00, + 0x36, + 0x38, + 0x3A, + 0x00, + 0x42, + 0x44, + 0x47, + 0x00, + 0x6F, + 0x71, + 0x75, + 0x00, + 0x4E, + 0x4F, + 0x51, + 0x00, + 0x37, + 0x39, + 0x3E, + 0x00, + 0x3A, + 0x3C, + 0x41, + 0x00, + 0x34, + 0x36, + 0x3C, + 0x00, + 0x3F, + 0x40, + 0x44, + 0x00, + 0x46, + 0x47, + 0x4B, + 0x00, + 0x44, + 0x45, + 0x49, + 0x00, + 0x5A, + 0x5B, + 0x5F, + 0x00, + 0x79, + 0x7A, + 0x7F, + 0x00, + 0xF9, + 0xFA, + 0xFF, + 0x00, + 0x69, + 0x6A, + 0x70, + 0x00, + 0x12, + 0x25, + 0xF6, + 0x00, + 0x0D, + 0x1A, + 0xEB, + 0x00, + 0xEE, + 0xEF, + 0xFD, + 0x00, + 0x09, + 0x0F, + 0xE1, + 0x00, + 0x27, + 0x2A, + 0xE1, + 0x00, + 0x38, + 0x3A, + 0xE3, + 0x00, + 0x48, + 0x4A, + 0xE4, + 0x00, + 0x72, + 0x73, + 0xEA, + 0x00, + 0x7F, + 0x80, + 0xEC, + 0x00, + 0xA6, + 0xA6, + 0xF1, + 0x00, + 0xBD, + 0xBD, + 0xF5, + 0x00, + 0xD8, + 0xD8, + 0xF9, + 0x00, + 0x79, + 0x79, + 0x84, + 0x00, + 0x75, + 0x75, + 0x7E, + 0x00, + 0x97, + 0x97, + 0x9E, + 0x00, + 0x49, + 0x49, + 0x4C, + 0x00, + 0x58, + 0x58, + 0x59, + 0x00, + 0xFA, + 0xFA, + 0xFA, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0xF3, + 0xF3, + 0xF3, + 0x00, + 0xEA, + 0xEA, + 0xEA, + 0x00, + 0xD8, + 0xD8, + 0xD8, + 0x00, + 0x98, + 0x98, + 0x98, + 0x00, + 0x92, + 0x92, + 0x92, + 0x00, + 0x91, + 0x91, + 0x91, + 0x00, + 0x76, + 0x76, + 0x76, + 0x00, + 0x4D, + 0x4D, + 0x4D, + 0x00, + 0x4B, + 0x4B, + 0x4B, + 0x00, + 0x4A, + 0x4A, + 0x4A, + 0x00, + 0x49, + 0x49, + 0x49, + 0x00, + + /* + Fonts + */ + 0x04, + 0x2E, + 0x04, + 0x00, + 0x00, + 0xA8, + 0x05, + 0x00, + 0x00, + 0x22, + 0x07, + 0x00, + 0x00, + 0x9C, + 0x08, + 0x00, + 0x00, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0B, + 0x23, + 0x15, + 0x00, + 0x09, + 0x24, + 0x1F, + 0x00, + 0x10, + 0x25, + 0x30, + 0x00, + 0x0F, + 0x26, + 0x40, + 0x00, + 0x02, + 0x27, + 0x43, + 0x00, + 0x06, + 0x28, + 0x4A, + 0x00, + 0x07, + 0x29, + 0x52, + 0x00, + 0x06, + 0x2A, + 0x59, + 0x00, + 0x0B, + 0x2B, + 0x65, + 0x00, + 0x05, + 0x2C, + 0x6B, + 0x00, + 0x06, + 0x2D, + 0x72, + 0x00, + 0x02, + 0x2E, + 0x75, + 0x00, + 0x09, + 0x2F, + 0x7F, + 0x00, + 0x0B, + 0x30, + 0x8B, + 0x00, + 0x05, + 0x31, + 0x91, + 0x00, + 0x0A, + 0x32, + 0x9C, + 0x00, + 0x0B, + 0x33, + 0xA8, + 0x00, + 0x0B, + 0x34, + 0xB4, + 0x00, + 0x0C, + 0x35, + 0xC1, + 0x00, + 0x0B, + 0x36, + 0xCD, + 0x00, + 0x09, + 0x37, + 0xD7, + 0x00, + 0x0A, + 0x38, + 0xE2, + 0x00, + 0x0B, + 0x39, + 0xEE, + 0x00, + 0x02, + 0x3A, + 0xF1, + 0x00, + 0x04, + 0x3B, + 0xF6, + 0x00, + 0x0B, + 0x3C, + 0x02, + 0x01, + 0x0B, + 0x3D, + 0x0E, + 0x01, + 0x0B, + 0x3E, + 0x1A, + 0x01, + 0x0A, + 0x3F, + 0x25, + 0x01, + 0x10, + 0x40, + 0x36, + 0x01, + 0x10, + 0x41, + 0x47, + 0x01, + 0x0A, + 0x42, + 0x52, + 0x01, + 0x10, + 0x43, + 0x63, + 0x01, + 0x0D, + 0x44, + 0x71, + 0x01, + 0x09, + 0x45, + 0x7B, + 0x01, + 0x09, + 0x46, + 0x85, + 0x01, + 0x11, + 0x47, + 0x97, + 0x01, + 0x0C, + 0x48, + 0xA4, + 0x01, + 0x02, + 0x49, + 0xA7, + 0x01, + 0x09, + 0x4A, + 0xB1, + 0x01, + 0x0B, + 0x4B, + 0xBD, + 0x01, + 0x09, + 0x4C, + 0xC7, + 0x01, + 0x11, + 0x4D, + 0xD9, + 0x01, + 0x0D, + 0x4E, + 0xE7, + 0x01, + 0x11, + 0x4F, + 0xF9, + 0x01, + 0x0B, + 0x50, + 0x05, + 0x02, + 0x11, + 0x51, + 0x17, + 0x02, + 0x0B, + 0x52, + 0x23, + 0x02, + 0x0A, + 0x53, + 0x2E, + 0x02, + 0x09, + 0x54, + 0x38, + 0x02, + 0x0B, + 0x55, + 0x44, + 0x02, + 0x0F, + 0x56, + 0x54, + 0x02, + 0x15, + 0x57, + 0x6A, + 0x02, + 0x0D, + 0x58, + 0x78, + 0x02, + 0x0E, + 0x59, + 0x87, + 0x02, + 0x0A, + 0x5A, + 0x92, + 0x02, + 0x04, + 0x5B, + 0x97, + 0x02, + 0x09, + 0x5C, + 0xA1, + 0x02, + 0x05, + 0x5D, + 0xA7, + 0x02, + 0x0D, + 0x5E, + 0xB5, + 0x02, + 0x0B, + 0x5F, + 0xC1, + 0x02, + 0x06, + 0x60, + 0xC8, + 0x02, + 0x0D, + 0x61, + 0xD6, + 0x02, + 0x0C, + 0x62, + 0xE3, + 0x02, + 0x0D, + 0x63, + 0xF1, + 0x02, + 0x0D, + 0x64, + 0xFF, + 0x02, + 0x0C, + 0x65, + 0x0C, + 0x03, + 0x06, + 0x66, + 0x13, + 0x03, + 0x0C, + 0x67, + 0x20, + 0x03, + 0x0B, + 0x68, + 0x2C, + 0x03, + 0x02, + 0x69, + 0x2F, + 0x03, + 0x05, + 0x6A, + 0x35, + 0x03, + 0x0A, + 0x6B, + 0x40, + 0x03, + 0x02, + 0x6C, + 0x43, + 0x03, + 0x12, + 0x6D, + 0x56, + 0x03, + 0x0A, + 0x6E, + 0x61, + 0x03, + 0x0C, + 0x6F, + 0x6E, + 0x03, + 0x0C, + 0x70, + 0x7B, + 0x03, + 0x0D, + 0x71, + 0x89, + 0x03, + 0x05, + 0x72, + 0x8F, + 0x03, + 0x07, + 0x73, + 0x97, + 0x03, + 0x07, + 0x74, + 0x9F, + 0x03, + 0x0A, + 0x75, + 0xAA, + 0x03, + 0x0C, + 0x76, + 0xB7, + 0x03, + 0x12, + 0x77, + 0xCA, + 0x03, + 0x0B, + 0x78, + 0xD6, + 0x03, + 0x0C, + 0x79, + 0xE3, + 0x03, + 0x09, + 0x7A, + 0xED, + 0x03, + 0x06, + 0x7B, + 0xF4, + 0x03, + 0x02, + 0x7C, + 0xF7, + 0x03, + 0x06, + 0x7D, + 0xFE, + 0x03, + 0x0B, + 0x7E, + 0x5E, + 0x01, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0B, + 0x23, + 0x15, + 0x00, + 0x09, + 0x24, + 0x1F, + 0x00, + 0x10, + 0x25, + 0x30, + 0x00, + 0x0F, + 0x26, + 0x40, + 0x00, + 0x02, + 0x27, + 0x43, + 0x00, + 0x06, + 0x28, + 0x4A, + 0x00, + 0x07, + 0x29, + 0x52, + 0x00, + 0x06, + 0x2A, + 0x59, + 0x00, + 0x0B, + 0x2B, + 0x65, + 0x00, + 0x05, + 0x2C, + 0x6B, + 0x00, + 0x06, + 0x2D, + 0x72, + 0x00, + 0x02, + 0x2E, + 0x75, + 0x00, + 0x09, + 0x2F, + 0x7F, + 0x00, + 0x0B, + 0x30, + 0x8B, + 0x00, + 0x05, + 0x31, + 0x91, + 0x00, + 0x0A, + 0x32, + 0x9C, + 0x00, + 0x0B, + 0x33, + 0xA8, + 0x00, + 0x0B, + 0x34, + 0xB4, + 0x00, + 0x0C, + 0x35, + 0xC1, + 0x00, + 0x0B, + 0x36, + 0xCD, + 0x00, + 0x09, + 0x37, + 0xD7, + 0x00, + 0x0A, + 0x38, + 0xE2, + 0x00, + 0x0B, + 0x39, + 0xEE, + 0x00, + 0x02, + 0x3A, + 0xF1, + 0x00, + 0x04, + 0x3B, + 0xF6, + 0x00, + 0x0B, + 0x3C, + 0x02, + 0x01, + 0x0B, + 0x3D, + 0x0E, + 0x01, + 0x0B, + 0x3E, + 0x1A, + 0x01, + 0x0A, + 0x3F, + 0x25, + 0x01, + 0x10, + 0x40, + 0x36, + 0x01, + 0x10, + 0x41, + 0x47, + 0x01, + 0x0A, + 0x42, + 0x52, + 0x01, + 0x10, + 0x43, + 0x63, + 0x01, + 0x0D, + 0x44, + 0x71, + 0x01, + 0x09, + 0x45, + 0x7B, + 0x01, + 0x09, + 0x46, + 0x85, + 0x01, + 0x11, + 0x47, + 0x97, + 0x01, + 0x0C, + 0x48, + 0xA4, + 0x01, + 0x02, + 0x49, + 0xA7, + 0x01, + 0x09, + 0x4A, + 0xB1, + 0x01, + 0x0B, + 0x4B, + 0xBD, + 0x01, + 0x09, + 0x4C, + 0xC7, + 0x01, + 0x11, + 0x4D, + 0xD9, + 0x01, + 0x0D, + 0x4E, + 0xE7, + 0x01, + 0x11, + 0x4F, + 0xF9, + 0x01, + 0x0B, + 0x50, + 0x05, + 0x02, + 0x11, + 0x51, + 0x17, + 0x02, + 0x0B, + 0x52, + 0x23, + 0x02, + 0x0A, + 0x53, + 0x2E, + 0x02, + 0x09, + 0x54, + 0x38, + 0x02, + 0x0B, + 0x55, + 0x44, + 0x02, + 0x0F, + 0x56, + 0x54, + 0x02, + 0x15, + 0x57, + 0x6A, + 0x02, + 0x0D, + 0x58, + 0x78, + 0x02, + 0x0E, + 0x59, + 0x87, + 0x02, + 0x0A, + 0x5A, + 0x92, + 0x02, + 0x04, + 0x5B, + 0x97, + 0x02, + 0x09, + 0x5C, + 0xA1, + 0x02, + 0x05, + 0x5D, + 0xA7, + 0x02, + 0x0D, + 0x5E, + 0xB5, + 0x02, + 0x0B, + 0x5F, + 0xC1, + 0x02, + 0x06, + 0x60, + 0xC8, + 0x02, + 0x0D, + 0x61, + 0xD6, + 0x02, + 0x0C, + 0x62, + 0xE3, + 0x02, + 0x0D, + 0x63, + 0xF1, + 0x02, + 0x0D, + 0x64, + 0xFF, + 0x02, + 0x0C, + 0x65, + 0x0C, + 0x03, + 0x06, + 0x66, + 0x13, + 0x03, + 0x0C, + 0x67, + 0x20, + 0x03, + 0x0B, + 0x68, + 0x2C, + 0x03, + 0x02, + 0x69, + 0x2F, + 0x03, + 0x05, + 0x6A, + 0x35, + 0x03, + 0x0A, + 0x6B, + 0x40, + 0x03, + 0x02, + 0x6C, + 0x43, + 0x03, + 0x12, + 0x6D, + 0x56, + 0x03, + 0x0A, + 0x6E, + 0x61, + 0x03, + 0x0C, + 0x6F, + 0x6E, + 0x03, + 0x0C, + 0x70, + 0x7B, + 0x03, + 0x0D, + 0x71, + 0x89, + 0x03, + 0x05, + 0x72, + 0x8F, + 0x03, + 0x07, + 0x73, + 0x97, + 0x03, + 0x07, + 0x74, + 0x9F, + 0x03, + 0x0A, + 0x75, + 0xAA, + 0x03, + 0x0C, + 0x76, + 0xB7, + 0x03, + 0x12, + 0x77, + 0xCA, + 0x03, + 0x0B, + 0x78, + 0xD6, + 0x03, + 0x0C, + 0x79, + 0xE3, + 0x03, + 0x09, + 0x7A, + 0xED, + 0x03, + 0x06, + 0x7B, + 0xF4, + 0x03, + 0x02, + 0x7C, + 0xF7, + 0x03, + 0x06, + 0x7D, + 0xFE, + 0x03, + 0x0B, + 0x7E, + 0x5E, + 0x02, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0C, + 0x23, + 0x16, + 0x00, + 0x09, + 0x24, + 0x20, + 0x00, + 0x11, + 0x25, + 0x32, + 0x00, + 0x10, + 0x26, + 0x43, + 0x00, + 0x02, + 0x27, + 0x46, + 0x00, + 0x07, + 0x28, + 0x4E, + 0x00, + 0x07, + 0x29, + 0x56, + 0x00, + 0x07, + 0x2A, + 0x5E, + 0x00, + 0x0C, + 0x2B, + 0x6B, + 0x00, + 0x04, + 0x2C, + 0x70, + 0x00, + 0x06, + 0x2D, + 0x77, + 0x00, + 0x02, + 0x2E, + 0x7A, + 0x00, + 0x0A, + 0x2F, + 0x85, + 0x00, + 0x0C, + 0x30, + 0x92, + 0x00, + 0x05, + 0x31, + 0x98, + 0x00, + 0x0B, + 0x32, + 0xA4, + 0x00, + 0x0B, + 0x33, + 0xB0, + 0x00, + 0x0C, + 0x34, + 0xBD, + 0x00, + 0x0C, + 0x35, + 0xCA, + 0x00, + 0x0C, + 0x36, + 0xD7, + 0x00, + 0x0A, + 0x37, + 0xE2, + 0x00, + 0x0B, + 0x38, + 0xEE, + 0x00, + 0x0C, + 0x39, + 0xFB, + 0x00, + 0x02, + 0x3A, + 0xFE, + 0x00, + 0x04, + 0x3B, + 0x03, + 0x01, + 0x0C, + 0x3C, + 0x10, + 0x01, + 0x0C, + 0x3D, + 0x1D, + 0x01, + 0x0C, + 0x3E, + 0x2A, + 0x01, + 0x0B, + 0x3F, + 0x36, + 0x01, + 0x11, + 0x40, + 0x48, + 0x01, + 0x11, + 0x41, + 0x5A, + 0x01, + 0x0B, + 0x42, + 0x66, + 0x01, + 0x11, + 0x43, + 0x78, + 0x01, + 0x0E, + 0x44, + 0x87, + 0x01, + 0x0A, + 0x45, + 0x92, + 0x01, + 0x09, + 0x46, + 0x9C, + 0x01, + 0x12, + 0x47, + 0xAF, + 0x01, + 0x0C, + 0x48, + 0xBC, + 0x01, + 0x02, + 0x49, + 0xBF, + 0x01, + 0x09, + 0x4A, + 0xC9, + 0x01, + 0x0C, + 0x4B, + 0xD6, + 0x01, + 0x09, + 0x4C, + 0xE0, + 0x01, + 0x12, + 0x4D, + 0xF3, + 0x01, + 0x0E, + 0x4E, + 0x02, + 0x02, + 0x12, + 0x4F, + 0x15, + 0x02, + 0x0B, + 0x50, + 0x21, + 0x02, + 0x12, + 0x51, + 0x34, + 0x02, + 0x0C, + 0x52, + 0x41, + 0x02, + 0x0B, + 0x53, + 0x4D, + 0x02, + 0x0A, + 0x54, + 0x58, + 0x02, + 0x0C, + 0x55, + 0x65, + 0x02, + 0x10, + 0x56, + 0x76, + 0x02, + 0x16, + 0x57, + 0x8D, + 0x02, + 0x0E, + 0x58, + 0x9C, + 0x02, + 0x0E, + 0x59, + 0xAB, + 0x02, + 0x0B, + 0x5A, + 0xB7, + 0x02, + 0x05, + 0x5B, + 0xBD, + 0x02, + 0x0A, + 0x5C, + 0xC8, + 0x02, + 0x05, + 0x5D, + 0xCE, + 0x02, + 0x0E, + 0x5E, + 0xDD, + 0x02, + 0x0C, + 0x5F, + 0xEA, + 0x02, + 0x07, + 0x60, + 0xF2, + 0x02, + 0x0E, + 0x61, + 0x01, + 0x03, + 0x0D, + 0x62, + 0x0F, + 0x03, + 0x0E, + 0x63, + 0x1E, + 0x03, + 0x0E, + 0x64, + 0x2D, + 0x03, + 0x0D, + 0x65, + 0x3B, + 0x03, + 0x07, + 0x66, + 0x43, + 0x03, + 0x0D, + 0x67, + 0x51, + 0x03, + 0x0B, + 0x68, + 0x5D, + 0x03, + 0x02, + 0x69, + 0x60, + 0x03, + 0x05, + 0x6A, + 0x66, + 0x03, + 0x0B, + 0x6B, + 0x72, + 0x03, + 0x02, + 0x6C, + 0x75, + 0x03, + 0x13, + 0x6D, + 0x89, + 0x03, + 0x0B, + 0x6E, + 0x95, + 0x03, + 0x0D, + 0x6F, + 0xA3, + 0x03, + 0x0D, + 0x70, + 0xB1, + 0x03, + 0x0D, + 0x71, + 0xBF, + 0x03, + 0x06, + 0x72, + 0xC6, + 0x03, + 0x08, + 0x73, + 0xCF, + 0x03, + 0x07, + 0x74, + 0xD7, + 0x03, + 0x0B, + 0x75, + 0xE3, + 0x03, + 0x0D, + 0x76, + 0xF1, + 0x03, + 0x14, + 0x77, + 0x06, + 0x04, + 0x0B, + 0x78, + 0x12, + 0x04, + 0x0D, + 0x79, + 0x20, + 0x04, + 0x09, + 0x7A, + 0x2A, + 0x04, + 0x06, + 0x7B, + 0x31, + 0x04, + 0x02, + 0x7C, + 0x34, + 0x04, + 0x06, + 0x7D, + 0x3B, + 0x04, + 0x0C, + 0x7E, + 0x5E, + 0x03, + 0x00, + 0x00, + 0x01, + 0x21, + 0x01, + 0x00, + 0x02, + 0x22, + 0x09, + 0x00, + 0x0C, + 0x23, + 0x16, + 0x00, + 0x09, + 0x24, + 0x20, + 0x00, + 0x11, + 0x25, + 0x32, + 0x00, + 0x10, + 0x26, + 0x43, + 0x00, + 0x02, + 0x27, + 0x46, + 0x00, + 0x07, + 0x28, + 0x4E, + 0x00, + 0x07, + 0x29, + 0x56, + 0x00, + 0x07, + 0x2A, + 0x5E, + 0x00, + 0x0C, + 0x2B, + 0x6B, + 0x00, + 0x04, + 0x2C, + 0x70, + 0x00, + 0x06, + 0x2D, + 0x77, + 0x00, + 0x02, + 0x2E, + 0x7A, + 0x00, + 0x0A, + 0x2F, + 0x85, + 0x00, + 0x0C, + 0x30, + 0x92, + 0x00, + 0x05, + 0x31, + 0x98, + 0x00, + 0x0B, + 0x32, + 0xA4, + 0x00, + 0x0B, + 0x33, + 0xB0, + 0x00, + 0x0C, + 0x34, + 0xBD, + 0x00, + 0x0C, + 0x35, + 0xCA, + 0x00, + 0x0C, + 0x36, + 0xD7, + 0x00, + 0x0A, + 0x37, + 0xE2, + 0x00, + 0x0B, + 0x38, + 0xEE, + 0x00, + 0x0C, + 0x39, + 0xFB, + 0x00, + 0x02, + 0x3A, + 0xFE, + 0x00, + 0x04, + 0x3B, + 0x03, + 0x01, + 0x0C, + 0x3C, + 0x10, + 0x01, + 0x0C, + 0x3D, + 0x1D, + 0x01, + 0x0C, + 0x3E, + 0x2A, + 0x01, + 0x0B, + 0x3F, + 0x36, + 0x01, + 0x11, + 0x40, + 0x48, + 0x01, + 0x11, + 0x41, + 0x5A, + 0x01, + 0x0B, + 0x42, + 0x66, + 0x01, + 0x11, + 0x43, + 0x78, + 0x01, + 0x0E, + 0x44, + 0x87, + 0x01, + 0x0A, + 0x45, + 0x92, + 0x01, + 0x09, + 0x46, + 0x9C, + 0x01, + 0x12, + 0x47, + 0xAF, + 0x01, + 0x0C, + 0x48, + 0xBC, + 0x01, + 0x02, + 0x49, + 0xBF, + 0x01, + 0x09, + 0x4A, + 0xC9, + 0x01, + 0x0C, + 0x4B, + 0xD6, + 0x01, + 0x09, + 0x4C, + 0xE0, + 0x01, + 0x12, + 0x4D, + 0xF3, + 0x01, + 0x0E, + 0x4E, + 0x02, + 0x02, + 0x12, + 0x4F, + 0x15, + 0x02, + 0x0B, + 0x50, + 0x21, + 0x02, + 0x12, + 0x51, + 0x34, + 0x02, + 0x0C, + 0x52, + 0x41, + 0x02, + 0x0B, + 0x53, + 0x4D, + 0x02, + 0x0A, + 0x54, + 0x58, + 0x02, + 0x0C, + 0x55, + 0x65, + 0x02, + 0x10, + 0x56, + 0x76, + 0x02, + 0x16, + 0x57, + 0x8D, + 0x02, + 0x0E, + 0x58, + 0x9C, + 0x02, + 0x0E, + 0x59, + 0xAB, + 0x02, + 0x0B, + 0x5A, + 0xB7, + 0x02, + 0x05, + 0x5B, + 0xBD, + 0x02, + 0x0A, + 0x5C, + 0xC8, + 0x02, + 0x05, + 0x5D, + 0xCE, + 0x02, + 0x0E, + 0x5E, + 0xDD, + 0x02, + 0x0C, + 0x5F, + 0xEA, + 0x02, + 0x07, + 0x60, + 0xF2, + 0x02, + 0x0E, + 0x61, + 0x01, + 0x03, + 0x0D, + 0x62, + 0x0F, + 0x03, + 0x0E, + 0x63, + 0x1E, + 0x03, + 0x0E, + 0x64, + 0x2D, + 0x03, + 0x0D, + 0x65, + 0x3B, + 0x03, + 0x07, + 0x66, + 0x43, + 0x03, + 0x0D, + 0x67, + 0x51, + 0x03, + 0x0B, + 0x68, + 0x5D, + 0x03, + 0x02, + 0x69, + 0x60, + 0x03, + 0x05, + 0x6A, + 0x66, + 0x03, + 0x0B, + 0x6B, + 0x72, + 0x03, + 0x02, + 0x6C, + 0x75, + 0x03, + 0x13, + 0x6D, + 0x89, + 0x03, + 0x0B, + 0x6E, + 0x95, + 0x03, + 0x0D, + 0x6F, + 0xA3, + 0x03, + 0x0D, + 0x70, + 0xB1, + 0x03, + 0x0D, + 0x71, + 0xBF, + 0x03, + 0x06, + 0x72, + 0xC6, + 0x03, + 0x08, + 0x73, + 0xCF, + 0x03, + 0x07, + 0x74, + 0xD7, + 0x03, + 0x0B, + 0x75, + 0xE3, + 0x03, + 0x0D, + 0x76, + 0xF1, + 0x03, + 0x14, + 0x77, + 0x06, + 0x04, + 0x0B, + 0x78, + 0x12, + 0x04, + 0x0D, + 0x79, + 0x20, + 0x04, + 0x09, + 0x7A, + 0x2A, + 0x04, + 0x06, + 0x7B, + 0x31, + 0x04, + 0x02, + 0x7C, + 0x34, + 0x04, + 0x06, + 0x7D, + 0x3B, + 0x04, + 0x0C, + 0x7E, + + /* + Bitmaps + */ + 0x04, + 0x27, + 0x0A, + 0x00, + 0x00, + 0x6F, + 0x73, + 0x00, + 0x00, + 0xB7, + 0xDC, + 0x00, + 0x00, + 0xCB, + 0x50, + 0x01, + 0x00, + 0x0B, + 0x04, + 0x00, + 0x00, + 0x1A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3A, + 0x69, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDF, + 0x56, + 0xF7, + 0x56, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x04, + 0xDF, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x54, + 0xDF, + 0xDA, + 0x04, + 0xDD, + 0xF7, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x53, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x04, + 0x57, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xC6, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD5, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x53, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x5B, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x53, + 0x00, + 0x00, + 0x53, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xFA, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF5, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x54, + 0x00, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x54, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x54, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x09, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xB3, + 0x00, + 0x00, + 0x53, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF4, + 0x00, + 0x00, + 0x54, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x5E, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xB3, + 0x56, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x54, + 0x00, + 0x54, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x09, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xF7, + 0x53, + 0x00, + 0x54, + 0x00, + 0x54, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x54, + 0x53, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x55, + 0x54, + 0x00, + 0x54, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xB3, + 0x00, + 0x54, + 0x00, + 0x53, + 0xF7, + 0xDB, + 0xDA, + 0x56, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x00, + 0x54, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF3, + 0x00, + 0x54, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xF6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x57, + 0x53, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0xF3, + 0x00, + 0x54, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x56, + 0x53, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0xC6, + 0x00, + 0x00, + 0x53, + 0x58, + 0xDA, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x53, + 0x00, + 0x54, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x56, + 0xC6, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xB3, + 0x00, + 0x54, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xC6, + 0x54, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xC6, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x54, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xC6, + 0x00, + 0x00, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x00, + 0xF5, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF3, + 0x00, + 0xC6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xC6, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x53, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x55, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0xDA, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0x55, + 0x53, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xB3, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x53, + 0x55, + 0xB8, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0x00, + 0x55, + 0xB8, + 0xF4, + 0x54, + 0xB3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xC6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x54, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xEF, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x54, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0xF6, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xB3, + 0xF7, + 0xB8, + 0xF4, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB3, + 0xB8, + 0xF3, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xDF, + 0xDA, + 0xDD, + 0xF3, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xE1, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x53, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0x17, + 0xD3, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x00, + 0xF3, + 0x17, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x55, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF4, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF7, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xF3, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD4, + 0xF4, + 0x00, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x54, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0x21, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0xDA, + 0xC6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD4, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xD4, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x09, + 0xDA, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x59, + 0x54, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD9, + 0xC6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x60, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0xD3, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xDE, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xC6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0xB8, + 0x04, + 0x57, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF6, + 0x55, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xF6, + 0x04, + 0x56, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x58, + 0xDA, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xB8, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xB8, + 0x04, + 0x57, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x16, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xDE, + 0xB8, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xDB, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0xD7, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0xDB, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDF, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFB, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0xF7, + 0x54, + 0x59, + 0x17, + 0x17, + 0x55, + 0x00, + 0xFA, + 0x17, + 0x17, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xDC, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0xB3, + 0x00, + 0xD0, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x00, + 0xF5, + 0xDD, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xB8, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD6, + 0xD0, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0x54, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x54, + 0x54, + 0x5B, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xD0, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x5D, + 0xDD, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x5E, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0x58, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x53, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0xD7, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x55, + 0x00, + 0x00, + 0xD2, + 0xD8, + 0xC6, + 0x00, + 0xD3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD4, + 0x54, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF6, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xB8, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD8, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x55, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xD9, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x58, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0xD9, + 0x00, + 0x57, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xE1, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD9, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0x59, + 0x53, + 0x00, + 0x17, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0xF3, + 0x00, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDF, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0xDC, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0xDF, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0xE0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDB, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5B, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x5E, + 0x00, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x5B, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xD7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x5C, + 0x5E, + 0x56, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0xDD, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x5C, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xB3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0xC6, + 0xDD, + 0x04, + 0x57, + 0x00, + 0xD9, + 0x59, + 0x00, + 0xDB, + 0x04, + 0x57, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xB8, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0xDC, + 0x04, + 0xB3, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x87, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0x00, + 0x55, + 0xDD, + 0xDD, + 0xDC, + 0x00, + 0xF7, + 0xDC, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0xDF, + 0x54, + 0x00, + 0x00, + 0x54, + 0x50, + 0x04, + 0x04, + 0x55, + 0x00, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x54, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0xC6, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF6, + 0xDE, + 0xF1, + 0x5C, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x55, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x57, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x50, + 0xD0, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDF, + 0x00, + 0x54, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xB8, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDC, + 0x00, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF3, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x58, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xD8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0x55, + 0xD8, + 0x59, + 0x00, + 0xC6, + 0xD9, + 0x04, + 0xF3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xF5, + 0x00, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xB8, + 0x04, + 0x5D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x53, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xC6, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD3, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x5C, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x60, + 0x5D, + 0x57, + 0xF6, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0xD5, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0xE1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xD5, + 0x04, + 0x00, + 0xF3, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x17, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0xDB, + 0xDB, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD2, + 0xEF, + 0x5D, + 0xF7, + 0x00, + 0xC6, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x57, + 0x53, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x00, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x5E, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xB3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE0, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xC6, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x55, + 0xD3, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD9, + 0x04, + 0xD8, + 0xB3, + 0xF5, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xDF, + 0xD0, + 0xDA, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xFA, + 0xF7, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xC6, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF4, + 0x5A, + 0x5B, + 0xF5, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xD0, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDD, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xD3, + 0xDF, + 0xF6, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x54, + 0x00, + 0x54, + 0x57, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x55, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0xDB, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x54, + 0xB8, + 0x04, + 0x56, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0xF5, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x60, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x53, + 0x04, + 0xB8, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xB8, + 0x04, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xB8, + 0x04, + 0x56, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xDB, + 0xD9, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5C, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDA, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xD0, + 0x55, + 0x00, + 0xD0, + 0xD0, + 0xD0, + 0xF5, + 0x00, + 0xD0, + 0xD0, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x00, + 0x55, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0xD2, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x53, + 0x57, + 0x5D, + 0x55, + 0x54, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xC6, + 0x57, + 0xFA, + 0xF7, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xDB, + 0x04, + 0x54, + 0x53, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x17, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xD7, + 0x60, + 0xB3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xD8, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDB, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0xDD, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x0A, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x60, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xD6, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x00, + 0x5E, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x54, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF5, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDA, + 0xC6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0x00, + 0xDD, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x54, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x56, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF6, + 0xD7, + 0xD6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0xDB, + 0xF7, + 0x00, + 0x54, + 0xD8, + 0x04, + 0xD9, + 0x17, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xF7, + 0xDC, + 0xDB, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x5A, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xDC, + 0x5E, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF6, + 0xDE, + 0xD7, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF5, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xB8, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0xE0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD3, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0xDA, + 0xF3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xD9, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x56, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xDF, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x54, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB3, + 0x54, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x59, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDD, + 0x54, + 0x54, + 0xF4, + 0xF7, + 0xF7, + 0xF3, + 0x54, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x56, + 0x56, + 0x00, + 0x53, + 0x56, + 0x56, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0xF5, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xC6, + 0xD4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0x00, + 0x00, + 0xD6, + 0xF6, + 0x00, + 0xF3, + 0xB8, + 0xF7, + 0x54, + 0x00, + 0x56, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x53, + 0x54, + 0xB3, + 0xD8, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF4, + 0xF7, + 0xF7, + 0xB3, + 0x54, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x5C, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x09, + 0xF4, + 0x58, + 0x04, + 0xD3, + 0x00, + 0x54, + 0xB8, + 0xB3, + 0x00, + 0xD0, + 0x04, + 0x56, + 0x56, + 0x53, + 0x00, + 0x56, + 0x56, + 0x56, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x50, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xB8, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0xD8, + 0xD9, + 0x00, + 0x58, + 0xD8, + 0xD8, + 0xD7, + 0x00, + 0x60, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0xD8, + 0xDB, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xDB, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0xF1, + 0x00, + 0xF5, + 0x04, + 0xDB, + 0x54, + 0x54, + 0xB8, + 0x5A, + 0x00, + 0x53, + 0x00, + 0xD8, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xDF, + 0xDB, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x5E, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x5E, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xE1, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDF, + 0x04, + 0xFA, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDD, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xF1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF7, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x5C, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0xB3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDD, + 0xF5, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x53, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x59, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x57, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD6, + 0xC6, + 0x00, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xF6, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x56, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x59, + 0x04, + 0xB8, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF7, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x17, + 0x59, + 0x00, + 0x09, + 0x57, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x56, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x60, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDC, + 0x5A, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x5C, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF7, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xF1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x53, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x5A, + 0x04, + 0x56, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xDA, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x58, + 0x09, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x5A, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x53, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xB3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x55, + 0xD8, + 0x04, + 0xD8, + 0xD9, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF6, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF6, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5D, + 0x04, + 0xD5, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5E, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF7, + 0xD9, + 0xD8, + 0xF7, + 0x00, + 0x58, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xF7, + 0xF6, + 0x00, + 0x53, + 0xDA, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xC6, + 0xB8, + 0xF6, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x54, + 0x04, + 0x5C, + 0x54, + 0xB3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xD6, + 0x00, + 0x00, + 0xDF, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xC6, + 0xF7, + 0xB8, + 0xF5, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x17, + 0x56, + 0x56, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF5, + 0x54, + 0x53, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF4, + 0xB8, + 0xF6, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF5, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF3, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0xF3, + 0xB8, + 0xF7, + 0x00, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0xF4, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x53, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xDF, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x50, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x54, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x56, + 0x56, + 0xB8, + 0x55, + 0xB3, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xB3, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x53, + 0x00, + 0x56, + 0x56, + 0x56, + 0x56, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF1, + 0x04, + 0x5B, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x50, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x60, + 0x04, + 0x04, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0x56, + 0xB8, + 0x54, + 0x00, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF7, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD0, + 0xF3, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF5, + 0x04, + 0x5A, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x50, + 0x04, + 0x04, + 0x04, + 0xFA, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x5A, + 0xB3, + 0x00, + 0x00, + 0x53, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x00, + 0x00, + 0xB3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x55, + 0xC6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x55, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x53, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF4, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF5, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0x00, + 0x55, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD5, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD2, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x54, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF5, + 0x04, + 0xD8, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x54, + 0x00, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xD5, + 0xD9, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x00, + 0x00, + 0x0B, + 0x04, + 0x00, + 0x00, + 0x1A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3A, + 0x69, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x59, + 0xF7, + 0xF7, + 0xB8, + 0xF9, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x55, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x04, + 0x59, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x54, + 0x59, + 0xDB, + 0x04, + 0xE1, + 0x55, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xF5, + 0x53, + 0xB3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x53, + 0x54, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF5, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x04, + 0xB8, + 0x54, + 0xF4, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xC6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0xF3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x04, + 0x56, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x04, + 0x04, + 0xE1, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0x60, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xB3, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xB3, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD6, + 0x53, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF4, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xB3, + 0x00, + 0x00, + 0x53, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD8, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x58, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x09, + 0x57, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF6, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x00, + 0xD0, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x55, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xF7, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xDE, + 0xDB, + 0xF7, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x59, + 0xF3, + 0x00, + 0x00, + 0x54, + 0x55, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xF6, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD9, + 0xB8, + 0x53, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0xC6, + 0x00, + 0x00, + 0x53, + 0xB8, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x53, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD9, + 0xB8, + 0xC6, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x17, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0x54, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xC6, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x55, + 0x55, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0x53, + 0xF7, + 0x55, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x54, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0xC6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xC6, + 0x55, + 0x55, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x00, + 0xF4, + 0x55, + 0xF7, + 0x55, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF6, + 0x53, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xB3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x60, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x00, + 0xB3, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x53, + 0x55, + 0xF7, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x11, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x11, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xC6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x55, + 0x55, + 0xF3, + 0x00, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB3, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xB3, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0xC6, + 0x00, + 0xB3, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0xF5, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0xB3, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB3, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB3, + 0xF7, + 0xF3, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0xB3, + 0x55, + 0x55, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x09, + 0xC6, + 0x59, + 0xDB, + 0xE1, + 0xF3, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x5C, + 0x04, + 0x53, + 0x00, + 0xD2, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF3, + 0x00, + 0x58, + 0x0A, + 0x00, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDE, + 0x54, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xDB, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x00, + 0xF3, + 0x58, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x17, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0xD5, + 0xF6, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF5, + 0x54, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x00, + 0xF6, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x60, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x57, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x53, + 0x00, + 0xF3, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x55, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xF3, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD6, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0xF4, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x53, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xD9, + 0x53, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x57, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0xC6, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x09, + 0xC6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xDB, + 0x53, + 0x54, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xD9, + 0x04, + 0xD8, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF2, + 0xC6, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x58, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x60, + 0x04, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0x0A, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x0A, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x09, + 0xB3, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x53, + 0x53, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x54, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x54, + 0x60, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xC6, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x56, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xF7, + 0x04, + 0xB8, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF5, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x56, + 0xDA, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x55, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0xB8, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x60, + 0xF7, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDE, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x0D, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5A, + 0xDE, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFB, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x55, + 0x00, + 0x56, + 0x58, + 0x58, + 0xF6, + 0x09, + 0x57, + 0x58, + 0x58, + 0x04, + 0x55, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x54, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x55, + 0x04, + 0xB3, + 0x54, + 0x16, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x00, + 0xF4, + 0xE1, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x5B, + 0xF9, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x56, + 0x54, + 0x54, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x54, + 0x57, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0xDB, + 0x55, + 0x00, + 0x00, + 0xD8, + 0x59, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0xF9, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x57, + 0xE1, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xC6, + 0x56, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD9, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xB8, + 0x04, + 0x53, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x0D, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0xDF, + 0xD5, + 0xE0, + 0x00, + 0x0A, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x09, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD3, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0xD7, + 0x04, + 0xD7, + 0x00, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x56, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xC6, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xE0, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF7, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0xF2, + 0x54, + 0xB8, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x09, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x60, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x5D, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x04, + 0xD7, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB3, + 0x56, + 0x56, + 0x53, + 0x00, + 0x58, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0xF3, + 0x00, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x59, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0xD6, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD5, + 0x59, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0xDB, + 0xF6, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDE, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x5E, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x57, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x55, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x57, + 0x09, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x59, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDC, + 0x04, + 0x57, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x55, + 0x57, + 0x57, + 0xB8, + 0xF4, + 0x00, + 0x00, + 0xF5, + 0xD7, + 0x04, + 0x04, + 0x16, + 0x09, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0xE1, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x57, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x59, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0xF5, + 0xDA, + 0xF5, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD5, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xB3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xE1, + 0x04, + 0xB8, + 0x54, + 0xD7, + 0x56, + 0x00, + 0xDE, + 0x04, + 0xB8, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xF7, + 0x04, + 0x0D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF4, + 0x00, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0x13, + 0x04, + 0xB3, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xAD, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0x00, + 0xF6, + 0xE1, + 0xE1, + 0xD6, + 0x00, + 0x55, + 0xE1, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x59, + 0x53, + 0x00, + 0x00, + 0x54, + 0x59, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x54, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x55, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xF5, + 0x16, + 0xD6, + 0x57, + 0x54, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x59, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x54, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x59, + 0xF9, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x59, + 0x54, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x53, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xE1, + 0x09, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x55, + 0x04, + 0x5B, + 0x53, + 0x55, + 0xB8, + 0x53, + 0x54, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x53, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF7, + 0x04, + 0x04, + 0xD3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x00, + 0x55, + 0xDC, + 0x56, + 0x00, + 0xC6, + 0xF2, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xF4, + 0x00, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x00, + 0xF2, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x5A, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF7, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x54, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF5, + 0x04, + 0x04, + 0x60, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x0A, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x57, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x57, + 0xB8, + 0xF5, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0xD0, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x5D, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xD0, + 0x04, + 0x00, + 0xF3, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x58, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x54, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0xD8, + 0xDE, + 0xDE, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x17, + 0x5A, + 0x57, + 0x55, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xB8, + 0x53, + 0x54, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x17, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x59, + 0x00, + 0x59, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x54, + 0x00, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x00, + 0x09, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xC6, + 0xC6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x09, + 0xC6, + 0x04, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB3, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x58, + 0xC6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xC6, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF3, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF6, + 0x0A, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD7, + 0x04, + 0xD5, + 0xB3, + 0xF5, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x59, + 0x5E, + 0xD9, + 0x04, + 0xF5, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x57, + 0xF7, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0xDA, + 0xDF, + 0x00, + 0xC6, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF4, + 0x56, + 0x57, + 0xF5, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5E, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x5A, + 0xF3, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0x57, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x56, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x53, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x54, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDC, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0x0A, + 0x59, + 0xF6, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x03, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDE, + 0xF7, + 0xC6, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF7, + 0x04, + 0xB8, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0xF5, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x54, + 0xB8, + 0x04, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x54, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xF2, + 0x04, + 0x04, + 0xDE, + 0xD2, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x57, + 0xD6, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xDD, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xF9, + 0x55, + 0x00, + 0xF9, + 0xF9, + 0xF9, + 0xF5, + 0x00, + 0xF9, + 0xF9, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x55, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x17, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x09, + 0xC6, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0x53, + 0xB8, + 0x57, + 0x55, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xC6, + 0xB8, + 0x57, + 0x55, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0x04, + 0x04, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x04, + 0x04, + 0x5C, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0xDE, + 0x04, + 0x54, + 0x53, + 0x04, + 0x5A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x58, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0xC6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0x0D, + 0x58, + 0xB3, + 0x00, + 0x59, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xDC, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xDE, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0xE1, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x5A, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x54, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x00, + 0xF7, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x5B, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xC6, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0xDC, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0x57, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x58, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xD2, + 0xB3, + 0x54, + 0x57, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x00, + 0x58, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x5D, + 0x54, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xDA, + 0xDA, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0xE1, + 0x04, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0x55, + 0x00, + 0xF7, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF9, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x5C, + 0x54, + 0x54, + 0xDC, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x58, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0xDC, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF4, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xC6, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF6, + 0xDF, + 0x5B, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xF3, + 0xDE, + 0x55, + 0x00, + 0x54, + 0xDC, + 0x04, + 0xF2, + 0x58, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x55, + 0xE1, + 0xDE, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x56, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xD6, + 0x57, + 0x09, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF5, + 0x60, + 0xDF, + 0xF6, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF7, + 0xDA, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0xF3, + 0x00, + 0x60, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF4, + 0x04, + 0x5E, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0x5B, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x53, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xDE, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x0A, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0xDA, + 0xF4, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x53, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x54, + 0xF2, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x09, + 0xD8, + 0x04, + 0xD9, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x54, + 0x53, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x59, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB3, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB3, + 0xC6, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x54, + 0x00, + 0x56, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xE1, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x54, + 0x0D, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xF3, + 0x55, + 0x55, + 0xF3, + 0x00, + 0xF5, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0x00, + 0x00, + 0x5B, + 0xF6, + 0x54, + 0xF3, + 0xF7, + 0x55, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0x55, + 0x55, + 0x53, + 0x00, + 0xB3, + 0xD5, + 0x04, + 0x04, + 0xE1, + 0x54, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x55, + 0xF7, + 0xB3, + 0x00, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x53, + 0x55, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x57, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x56, + 0x04, + 0x0A, + 0x00, + 0x09, + 0xF7, + 0xB3, + 0x00, + 0xF9, + 0x04, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x60, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x59, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x16, + 0x09, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0xDC, + 0xDC, + 0xF2, + 0x00, + 0x56, + 0xDC, + 0xDC, + 0xDF, + 0xC6, + 0x57, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x57, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0xDC, + 0xDE, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0xDE, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB8, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0xD6, + 0x00, + 0xF5, + 0x04, + 0xDE, + 0x54, + 0x00, + 0xF7, + 0x56, + 0x00, + 0x53, + 0x00, + 0xD5, + 0xF5, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF3, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x59, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x09, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF7, + 0x55, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x5C, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x0D, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x5D, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5E, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x5B, + 0x04, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x59, + 0xDA, + 0x58, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x0D, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x57, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x0D, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x5C, + 0xB3, + 0x00, + 0x00, + 0xF3, + 0x60, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB3, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xE1, + 0xF4, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x53, + 0x00, + 0x00, + 0x54, + 0x55, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xB8, + 0x00, + 0x09, + 0x04, + 0x04, + 0x5B, + 0xC6, + 0x00, + 0x54, + 0x57, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x54, + 0xB8, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x56, + 0x04, + 0xF7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x55, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0xD8, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x0D, + 0x00, + 0xF3, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x58, + 0x56, + 0x00, + 0x54, + 0xB8, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x59, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x04, + 0x04, + 0x57, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x60, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0x04, + 0x58, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD6, + 0x56, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xC6, + 0x09, + 0xDC, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x55, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x56, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x09, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x53, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF3, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x0D, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0xB3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x53, + 0x00, + 0xD2, + 0xDA, + 0x04, + 0x57, + 0x00, + 0x56, + 0x04, + 0xF7, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE0, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x56, + 0x54, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF5, + 0xD9, + 0xDA, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x56, + 0x00, + 0x55, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x57, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x53, + 0x00, + 0xD3, + 0xDA, + 0xDA, + 0xD3, + 0x00, + 0x53, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xB3, + 0xDC, + 0xDA, + 0x04, + 0x04, + 0x59, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0xD8, + 0xF4, + 0x00, + 0x55, + 0xD3, + 0x04, + 0xF1, + 0xF2, + 0x04, + 0xDB, + 0xF7, + 0x00, + 0x54, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x55, + 0xD3, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x16, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0xF4, + 0xE1, + 0x04, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF3, + 0x00, + 0x5C, + 0x04, + 0x04, + 0xF2, + 0x54, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0xDE, + 0xF5, + 0x54, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0D, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x17, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF5, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x57, + 0xC6, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF3, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x09, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x55, + 0xD2, + 0xDC, + 0xF7, + 0x00, + 0x56, + 0x04, + 0x5B, + 0x54, + 0x54, + 0x55, + 0xF6, + 0x00, + 0x53, + 0xDB, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x09, + 0xC6, + 0xF7, + 0xF6, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x54, + 0x04, + 0x57, + 0x00, + 0xB3, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x5B, + 0x00, + 0x00, + 0x59, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xF6, + 0x54, + 0x53, + 0x55, + 0xF7, + 0xF5, + 0x54, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x58, + 0xF7, + 0xF7, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF4, + 0x00, + 0x53, + 0x55, + 0x55, + 0x53, + 0x54, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF4, + 0xF7, + 0xF5, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF4, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x54, + 0x55, + 0x55, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x56, + 0xC6, + 0x09, + 0x55, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF3, + 0xF7, + 0x55, + 0x00, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0xF4, + 0x55, + 0xF7, + 0xF5, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x55, + 0xF4, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0xC6, + 0x60, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x59, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF5, + 0x54, + 0x54, + 0xB3, + 0x55, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0xC6, + 0x5E, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xF5, + 0x00, + 0x09, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x55, + 0xF7, + 0x55, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0xF7, + 0x55, + 0xB3, + 0x00, + 0x00, + 0xF9, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xB3, + 0x00, + 0xF4, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x58, + 0x04, + 0x04, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0xF4, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF4, + 0x00, + 0x54, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x53, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x55, + 0x0C, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF9, + 0xF3, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF2, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xB3, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x53, + 0x00, + 0x00, + 0xF5, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0xF5, + 0x04, + 0x56, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x57, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x56, + 0xB3, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xF3, + 0x00, + 0x00, + 0xB3, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x54, + 0x55, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x55, + 0xC6, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0xF5, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF6, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF9, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x55, + 0x53, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF4, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF5, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD9, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF6, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x16, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xD8, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x0A, + 0xF4, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x54, + 0x00, + 0x56, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0xC6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x00, + 0x5B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xF4, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0xD0, + 0xD7, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x00, + 0x00, + 0x49, + 0x04, + 0x00, + 0x00, + 0x1B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x74, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xB8, + 0x5D, + 0x17, + 0x17, + 0x5D, + 0xF7, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDC, + 0xEF, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x60, + 0x5D, + 0x54, + 0x5D, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0xD9, + 0xDF, + 0xB8, + 0x55, + 0xF7, + 0x5A, + 0xD2, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDE, + 0x04, + 0xF2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDE, + 0xD9, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDC, + 0xEF, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x5B, + 0x00, + 0x5B, + 0xDA, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC1, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0xD6, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD7, + 0xDB, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD3, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xDE, + 0x57, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD3, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDC, + 0xD9, + 0x58, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD9, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xC6, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xDA, + 0x60, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDE, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xDD, + 0x5A, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD8, + 0x17, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xF2, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD3, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xDB, + 0xDB, + 0xD0, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDE, + 0xDB, + 0xD8, + 0xD7, + 0x60, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0xD0, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDD, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD6, + 0xD7, + 0xD8, + 0xD8, + 0xD7, + 0x12, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x53, + 0xB8, + 0xE1, + 0xDD, + 0xD8, + 0xD3, + 0xDF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x16, + 0xF2, + 0xD9, + 0xD9, + 0xDE, + 0x5D, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0xD2, + 0xD9, + 0xD9, + 0xDE, + 0xFA, + 0xB3, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xDD, + 0xD8, + 0xDC, + 0xD6, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF6, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5B, + 0xD0, + 0xDC, + 0xD8, + 0xD9, + 0xD7, + 0xD6, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x03, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDB, + 0xD2, + 0xD6, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF5, + 0xFA, + 0xD0, + 0xDC, + 0xDA, + 0xD9, + 0xD3, + 0xE1, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD3, + 0xD0, + 0x5E, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x59, + 0xE1, + 0xD7, + 0xD9, + 0xDA, + 0xD5, + 0xDE, + 0x60, + 0xF6, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0xD5, + 0xDA, + 0xDD, + 0xD6, + 0xF6, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x5D, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xD0, + 0xDC, + 0xD8, + 0xD8, + 0xD3, + 0xE1, + 0x5A, + 0xF3, + 0xC6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0x59, + 0xE1, + 0xF1, + 0xD8, + 0xD9, + 0xF1, + 0xE1, + 0x59, + 0x53, + 0xF5, + 0xDF, + 0xD7, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xEF, + 0xD7, + 0xD9, + 0xDB, + 0xDE, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD6, + 0xD7, + 0xD9, + 0xDB, + 0xDE, + 0x5E, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD8, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xDF, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xDF, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDF, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD3, + 0xD8, + 0xD9, + 0xD7, + 0xDF, + 0xF5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x09, + 0xB8, + 0xE1, + 0xDC, + 0xD8, + 0xD5, + 0xD0, + 0x58, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD6, + 0xF1, + 0xD8, + 0xD9, + 0xF2, + 0x17, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x0A, + 0xD7, + 0xD9, + 0xD8, + 0xD2, + 0x17, + 0xF5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0xDD, + 0xDA, + 0xD5, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x57, + 0xD0, + 0xDD, + 0xD8, + 0xD5, + 0xE1, + 0xB8, + 0x00, + 0xF1, + 0xD7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x58, + 0xD0, + 0xDD, + 0xDA, + 0xDB, + 0xDE, + 0x5A, + 0x00, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x56, + 0xD0, + 0xD5, + 0xDA, + 0xDD, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x58, + 0xD0, + 0xD5, + 0xDA, + 0xD5, + 0xD0, + 0x56, + 0xC6, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD0, + 0xDB, + 0xD9, + 0xDE, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xDE, + 0xDB, + 0x04, + 0xD5, + 0xD6, + 0xF5, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD0, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xF2, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xD9, + 0x55, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xD8, + 0xD0, + 0xE1, + 0xD9, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xDB, + 0xE1, + 0xD6, + 0xF1, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x54, + 0x58, + 0xD9, + 0xD5, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xD9, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x53, + 0x59, + 0xD8, + 0xD9, + 0xD0, + 0xD6, + 0xDE, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xD7, + 0xD6, + 0xE1, + 0xDC, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xDC, + 0x04, + 0xD7, + 0xD6, + 0xD6, + 0xDC, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0xDA, + 0xD9, + 0xD0, + 0xD6, + 0xDE, + 0x04, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x60, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x60, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x60, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDC, + 0x04, + 0xDC, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xB8, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0xE1, + 0xD2, + 0x04, + 0x04, + 0x17, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0xDB, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD6, + 0xDE, + 0xD9, + 0x04, + 0xD2, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xD6, + 0xDE, + 0xD5, + 0x04, + 0xD9, + 0x17, + 0x53, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD7, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDB, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0xD5, + 0x04, + 0xDE, + 0xD6, + 0xDE, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x04, + 0xDC, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD7, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD7, + 0x56, + 0x54, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD2, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xDE, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x16, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDE, + 0x04, + 0x59, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD5, + 0x04, + 0xD2, + 0xD6, + 0xE1, + 0xD5, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xD9, + 0x04, + 0xF2, + 0xD6, + 0xD6, + 0xD3, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5A, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xD4, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0xD2, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xEF, + 0x04, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x16, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xDA, + 0xDE, + 0xD6, + 0xE1, + 0xF1, + 0x04, + 0xDC, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xDA, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD6, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0xD8, + 0x59, + 0xDE, + 0xD9, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xF2, + 0xF3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x60, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0x16, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0x56, + 0xD8, + 0xD9, + 0xE1, + 0xD6, + 0xDB, + 0xD8, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0x54, + 0xEF, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xDE, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0xE1, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x45, + 0x3E, + 0x54, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD9, + 0xF2, + 0xB8, + 0xF3, + 0xB8, + 0xD7, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD5, + 0xDF, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x57, + 0x00, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x58, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x59, + 0xD8, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD5, + 0xD7, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x17, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD5, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0xFC, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD4, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0xD7, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x12, + 0x04, + 0xE1, + 0x54, + 0x00, + 0xF6, + 0xDC, + 0xD8, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD9, + 0xD5, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x0A, + 0xD9, + 0x04, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF1, + 0x04, + 0xDB, + 0xEF, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xD0, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xD5, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x17, + 0xD9, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD0, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDB, + 0x60, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0xDC, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD6, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x60, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0xDB, + 0x5E, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xDB, + 0xD8, + 0x59, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x58, + 0xD9, + 0xDA, + 0xDF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0D, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD3, + 0xDA, + 0x5D, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0xD5, + 0x56, + 0x00, + 0x00, + 0x00, + 0x53, + 0x60, + 0x04, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0x04, + 0x04, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDC, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x0D, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0xD9, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xDC, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xD6, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xDC, + 0x55, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x54, + 0x54, + 0xE1, + 0x04, + 0xE1, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x0A, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0xD0, + 0x00, + 0x54, + 0x54, + 0xE1, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF7, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xF2, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD5, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x7D, + 0x3B, + 0x45, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xF6, + 0x54, + 0x00, + 0xF5, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDB, + 0xF5, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0xDE, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x04, + 0xEF, + 0xDA, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDD, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0xD2, + 0xD8, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5A, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x59, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xB8, + 0x54, + 0xDF, + 0x04, + 0x16, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD9, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x56, + 0xD0, + 0xDA, + 0x04, + 0xD2, + 0x5A, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x59, + 0xD2, + 0x04, + 0xDA, + 0xE1, + 0x56, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0xDA, + 0xFA, + 0x00, + 0xF4, + 0xF7, + 0xF5, + 0x54, + 0x54, + 0xF3, + 0xF7, + 0x04, + 0x04, + 0x0A, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDB, + 0xD5, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5C, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x60, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDD, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD9, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x57, + 0xDA, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD7, + 0xD8, + 0x57, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD9, + 0xD9, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD7, + 0xD2, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x56, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x5B, + 0x53, + 0xF5, + 0xD7, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x5A, + 0x54, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDD, + 0xDE, + 0xF6, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0x00, + 0xD2, + 0xD2, + 0xB8, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xFA, + 0x54, + 0x59, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x69, + 0xFF, + 0xAD, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDD, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x60, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0xC6, + 0xF2, + 0xDB, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC3, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDB, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0xDA, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD6, + 0x00, + 0xDB, + 0x04, + 0xD6, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xDC, + 0x04, + 0x0A, + 0x0A, + 0x00, + 0xE1, + 0xD4, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0xD7, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x59, + 0xF2, + 0x04, + 0x04, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0x04, + 0x04, + 0xDE, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0xFA, + 0x00, + 0x60, + 0xD9, + 0x04, + 0xDA, + 0xD6, + 0xB8, + 0xDD, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF1, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0xF6, + 0xDB, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD6, + 0x5A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDA, + 0xF7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xD9, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0x04, + 0xDE, + 0x09, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xD9, + 0xF5, + 0x57, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF4, + 0x04, + 0xDE, + 0x00, + 0xF3, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xDC, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD7, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x0D, + 0x04, + 0xFD, + 0xF7, + 0x57, + 0xDA, + 0xF1, + 0xF3, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0xD5, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xDD, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDB, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xF7, + 0xB3, + 0xDC, + 0xF2, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xDF, + 0xF7, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xD4, + 0xB8, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0xDA, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF2, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x54, + 0x5A, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x54, + 0xE1, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDE, + 0x54, + 0xE1, + 0xD9, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x5E, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xD0, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xD0, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0xD0, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0x04, + 0x5A, + 0x00, + 0xD6, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0xF4, + 0x59, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x17, + 0x00, + 0xD2, + 0xD7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xD9, + 0xB8, + 0xD5, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x60, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD7, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0x56, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xD6, + 0x04, + 0xDE, + 0x0A, + 0x0A, + 0x0A, + 0xDC, + 0xD5, + 0x0A, + 0x0A, + 0x0A, + 0x54, + 0x59, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDC, + 0xF3, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD0, + 0x00, + 0xDB, + 0xD2, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD3, + 0xF1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDE, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xD0, + 0x00, + 0xFA, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x60, + 0x0D, + 0x5E, + 0x04, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x60, + 0xF1, + 0x04, + 0xD9, + 0xD6, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xD8, + 0x04, + 0xD7, + 0xFA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDE, + 0x00, + 0x58, + 0x04, + 0xF1, + 0x60, + 0x17, + 0xF1, + 0x04, + 0x04, + 0x56, + 0x55, + 0xEF, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5B, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x00, + 0x17, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x0D, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5D, + 0x04, + 0xDF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x16, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xD6, + 0x00, + 0xC6, + 0xD7, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xDA, + 0x56, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xFA, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xFA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x56, + 0xF5, + 0x53, + 0xF5, + 0x56, + 0xDF, + 0xD5, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xFA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xF5, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x56, + 0x00, + 0xDC, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xF6, + 0xF6, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x53, + 0xDE, + 0xDA, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDB, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF3, + 0xDC, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDC, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDD, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0xDC, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xDD, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0xDD, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDE, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD5, + 0xF3, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0xD6, + 0x00, + 0xF4, + 0xD9, + 0xEF, + 0x00, + 0x5E, + 0x04, + 0xF7, + 0x00, + 0x60, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF6, + 0x00, + 0xD7, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD8, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDB, + 0xF7, + 0xC6, + 0x00, + 0x0A, + 0xE1, + 0x00, + 0x54, + 0x53, + 0x53, + 0x57, + 0xDE, + 0xD9, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x56, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD6, + 0xD6, + 0xD9, + 0xD5, + 0xF7, + 0x00, + 0xD0, + 0xDA, + 0xB8, + 0x53, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDD, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD0, + 0x04, + 0x0A, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0xF1, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF1, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x58, + 0x00, + 0xE1, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF5, + 0xD2, + 0x04, + 0x59, + 0x54, + 0x00, + 0xFA, + 0xD7, + 0xE0, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xDF, + 0x00, + 0xDE, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD2, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0x04, + 0xD2, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x57, + 0x5B, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x16, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD8, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xDF, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x59, + 0x54, + 0x00, + 0x55, + 0xDA, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xDB, + 0xB3, + 0x00, + 0x03, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0x54, + 0xDD, + 0xF2, + 0x00, + 0x00, + 0xF2, + 0xD5, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xDE, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x56, + 0xDA, + 0x04, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xD2, + 0x04, + 0xD8, + 0xEF, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD5, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x57, + 0x00, + 0x00, + 0xD0, + 0xDC, + 0x00, + 0xDE, + 0xD7, + 0x00, + 0x00, + 0x55, + 0xD8, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xDA, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDA, + 0xFA, + 0x00, + 0x5A, + 0x04, + 0xFA, + 0xF3, + 0x57, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x55, + 0x00, + 0x00, + 0x4D, + 0xF9, + 0x69, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD0, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x53, + 0xF7, + 0xD0, + 0xDB, + 0xDB, + 0xD0, + 0xF7, + 0x00, + 0x00, + 0x56, + 0xD4, + 0xDC, + 0xB8, + 0x54, + 0xB3, + 0xE1, + 0x04, + 0xD0, + 0xF3, + 0x17, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xFA, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0xDE, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x5A, + 0x00, + 0x53, + 0xD0, + 0x04, + 0xD0, + 0xB8, + 0xF3, + 0xF5, + 0x59, + 0xD3, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xD9, + 0x56, + 0xC6, + 0x00, + 0x00, + 0xDB, + 0xF6, + 0x00, + 0xD0, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x16, + 0xC6, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD0, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xEF, + 0xD0, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xF7, + 0xF1, + 0xD9, + 0xF7, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDB, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDD, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF2, + 0x17, + 0xF4, + 0x00, + 0x00, + 0xDC, + 0xF1, + 0x55, + 0x5A, + 0x17, + 0xEF, + 0xDF, + 0x5D, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0xD0, + 0xDE, + 0xD7, + 0xD8, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDF, + 0xD9, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD8, + 0xD0, + 0x00, + 0x00, + 0x59, + 0x04, + 0x59, + 0x54, + 0x00, + 0xB8, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x17, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0x04, + 0x04, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0xD9, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x00, + 0xD5, + 0xD7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xDE, + 0x00, + 0xD5, + 0x04, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x17, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDC, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD2, + 0x04, + 0xD3, + 0x60, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x5A, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x57, + 0xD4, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDB, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x57, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDA, + 0x16, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD6, + 0x56, + 0xF4, + 0x5A, + 0xD8, + 0xD6, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xD8, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDA, + 0xF4, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x0A, + 0xDB, + 0x04, + 0xFC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x54, + 0x53, + 0xB8, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x59, + 0xD9, + 0xD8, + 0xEF, + 0xD0, + 0x04, + 0xD6, + 0x53, + 0x00, + 0xF4, + 0xDC, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x5A, + 0xDA, + 0xF1, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x56, + 0x00, + 0x5A, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD2, + 0xD8, + 0x17, + 0x55, + 0xB3, + 0xF7, + 0xE1, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x5B, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD3, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xD7, + 0x04, + 0xDA, + 0xD0, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD6, + 0xD8, + 0x04, + 0xD7, + 0xFA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xDB, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x04, + 0x53, + 0x00, + 0x0A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x56, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xE1, + 0xF2, + 0xDA, + 0xDB, + 0x57, + 0x00, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x56, + 0xD8, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x60, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD2, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x17, + 0xDA, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x60, + 0xDE, + 0xDA, + 0x04, + 0xB6, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x5C, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0xD6, + 0x00, + 0x00, + 0x60, + 0x04, + 0x56, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x58, + 0xD6, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDC, + 0xD2, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x03, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0xD0, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xF5, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD4, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xD7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0D, + 0x04, + 0xB8, + 0x00, + 0x04, + 0xF1, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD5, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x04, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDF, + 0x53, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD8, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD8, + 0x5A, + 0xD8, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x53, + 0x16, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0xDF, + 0x5D, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x56, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDE, + 0x04, + 0xDA, + 0xD9, + 0xD6, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xDF, + 0xDF, + 0x57, + 0x00, + 0x54, + 0xDE, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xD6, + 0xD2, + 0x04, + 0xF1, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xD5, + 0xF6, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xDA, + 0x5E, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x0A, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x53, + 0xD2, + 0xD8, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x59, + 0x04, + 0x17, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDE, + 0x04, + 0x04, + 0xDE, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0x04, + 0x04, + 0xDE, + 0x58, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xDB, + 0xD9, + 0xF7, + 0x00, + 0xD9, + 0xF6, + 0x00, + 0x58, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0xF4, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xE1, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x09, + 0xF5, + 0xDB, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC6, + 0xF2, + 0xD9, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xDC, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xFA, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x53, + 0xF1, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD5, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xDF, + 0x00, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDB, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xD8, + 0x04, + 0xD2, + 0xDF, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xD7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD3, + 0x00, + 0x00, + 0xD0, + 0xDB, + 0xB3, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x12, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0xF2, + 0x00, + 0x55, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDC, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xD0, + 0x04, + 0x57, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDB, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x12, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xE1, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD8, + 0xF4, + 0x00, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xD0, + 0x00, + 0x59, + 0x04, + 0xD0, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0xD0, + 0x04, + 0x58, + 0x00, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0xD0, + 0x04, + 0x57, + 0x00, + 0x58, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF4, + 0x5B, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0xDF, + 0x00, + 0x16, + 0x04, + 0x17, + 0x54, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x0A, + 0x54, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEC, + 0xFF, + 0xFF, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x58, + 0xFA, + 0x04, + 0xDF, + 0x58, + 0x58, + 0x58, + 0x04, + 0xF2, + 0x58, + 0x58, + 0x00, + 0xF5, + 0xDC, + 0x04, + 0xD2, + 0xFA, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD0, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x57, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xDE, + 0xDB, + 0xDA, + 0xDF, + 0x53, + 0x00, + 0x53, + 0xD2, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC3, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD6, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0xD3, + 0xD6, + 0xE1, + 0xDC, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0x04, + 0xD2, + 0xD6, + 0xD6, + 0xF1, + 0x04, + 0xF2, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDE, + 0xD6, + 0xD0, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0xDB, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x04, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xE1, + 0xD8, + 0x04, + 0xD2, + 0x5C, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0xD2, + 0x04, + 0xD4, + 0xE1, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xE1, + 0x00, + 0xD2, + 0x59, + 0x54, + 0x53, + 0xD7, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x53, + 0x04, + 0xD3, + 0x00, + 0x00, + 0xF4, + 0xD8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xB3, + 0x55, + 0x5A, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD9, + 0xD2, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDA, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x58, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD0, + 0xD9, + 0xF6, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xDE, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDA, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD7, + 0x00, + 0xD7, + 0xD9, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD9, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xE1, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xD0, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDA, + 0x57, + 0x54, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDC, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xF7, + 0xF3, + 0xD9, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x57, + 0x54, + 0x00, + 0xEF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xF1, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xD0, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xDB, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0xDE, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD5, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xEF, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x12, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xD6, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0xD4, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD7, + 0x04, + 0x56, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDA, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD0, + 0xF3, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0x59, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xE1, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x57, + 0x53, + 0x00, + 0x5A, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x54, + 0xF2, + 0xDD, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x54, + 0x53, + 0xDC, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0xDA, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD2, + 0xB3, + 0x00, + 0x00, + 0xDE, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x54, + 0xF2, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD0, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x41, + 0x74, + 0xEC, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x60, + 0x04, + 0xD6, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD6, + 0xF6, + 0xF6, + 0xD6, + 0x04, + 0xDF, + 0x00, + 0xD2, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0xD6, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD4, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x56, + 0x58, + 0x00, + 0x57, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0xEE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x56, + 0xD2, + 0xD8, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xDF, + 0xDE, + 0xDB, + 0xD9, + 0xF2, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDC, + 0xD9, + 0xD2, + 0x17, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDF, + 0xDB, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x04, + 0xDB, + 0x0D, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xEE, + 0xF5, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0xDF, + 0xDE, + 0x00, + 0x00, + 0xB8, + 0xD8, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x57, + 0x00, + 0x57, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDD, + 0xF3, + 0x54, + 0x53, + 0xD3, + 0xD7, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x17, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x0D, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0xD9, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x60, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF4, + 0xD7, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xFA, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0xFA, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x0A, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x17, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x5A, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xD2, + 0xD8, + 0xB8, + 0x55, + 0xD9, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xB6, + 0xC6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD7, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0x04, + 0x60, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5A, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xDA, + 0xDE, + 0xD6, + 0xD6, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0xFA, + 0xD4, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDF, + 0x04, + 0xD8, + 0xDE, + 0xD6, + 0xD6, + 0xD7, + 0x04, + 0xDC, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xDA, + 0xD8, + 0xDE, + 0xD6, + 0xE1, + 0xD7, + 0x04, + 0xD5, + 0x56, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0xDA, + 0xD6, + 0xF3, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0xD9, + 0x59, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0x17, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x12, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xD6, + 0xD6, + 0xDC, + 0x04, + 0x60, + 0xB8, + 0xDB, + 0xD9, + 0xD0, + 0xD6, + 0xF2, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD0, + 0xF4, + 0x00, + 0x00, + 0x04, + 0xDE, + 0xFA, + 0xD4, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xE1, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0x60, + 0xDE, + 0x04, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xD6, + 0x56, + 0x00, + 0xF7, + 0xDB, + 0xD9, + 0xE1, + 0xE1, + 0xD9, + 0xD5, + 0x55, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xB8, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF5, + 0x00, + 0x57, + 0x04, + 0xF9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xF9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x17, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD9, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDB, + 0xD7, + 0xF3, + 0x00, + 0xB8, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0x04, + 0xDD, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3B, + 0x56, + 0x94, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0xDE, + 0x04, + 0x53, + 0xF6, + 0x55, + 0x55, + 0xDE, + 0xDE, + 0x55, + 0x55, + 0x55, + 0x17, + 0x04, + 0xB8, + 0x55, + 0x00, + 0xD0, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDD, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x53, + 0xF1, + 0xDC, + 0x00, + 0x5A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF1, + 0xD5, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0xDC, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x17, + 0xDD, + 0x55, + 0xDC, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD5, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDB, + 0x00, + 0x00, + 0xF4, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xF1, + 0xD7, + 0xF4, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xF2, + 0xDA, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD9, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x16, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0x16, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0x00, + 0x55, + 0xD9, + 0x60, + 0x00, + 0x00, + 0x58, + 0xD9, + 0xD8, + 0xD0, + 0xD6, + 0xDD, + 0xDE, + 0xD7, + 0xE1, + 0x53, + 0xDE, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x5B, + 0x00, + 0x58, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0xD5, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x56, + 0xD6, + 0x58, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD2, + 0xDA, + 0xF7, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0x0D, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDC, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD3, + 0x53, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x0A, + 0x04, + 0xFA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF4, + 0xF1, + 0xDB, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xDC, + 0xF3, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xD8, + 0x00, + 0xF7, + 0xDA, + 0xDC, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDC, + 0xD9, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x17, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xB3, + 0xDC, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD4, + 0x55, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xDA, + 0x56, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDC, + 0xF1, + 0x53, + 0x00, + 0xD7, + 0xDD, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD7, + 0xD9, + 0xD9, + 0xF2, + 0x17, + 0xF4, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x54, + 0xB8, + 0xE1, + 0xDD, + 0xDA, + 0xD5, + 0xD0, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD3, + 0xD9, + 0xD9, + 0xF2, + 0x17, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD6, + 0xD7, + 0xD9, + 0xD9, + 0xD2, + 0xDF, + 0xF6, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0xD0, + 0xDD, + 0xD8, + 0xDC, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD0, + 0xD5, + 0xD8, + 0xDC, + 0xD6, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0xF5, + 0xDF, + 0xD3, + 0xD9, + 0xD5, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x55, + 0xD0, + 0xDB, + 0xD9, + 0xDE, + 0x59, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xDB, + 0xD8, + 0xF1, + 0xEF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0xF3, + 0x60, + 0xD2, + 0xD9, + 0xD5, + 0xD0, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD0, + 0xDC, + 0xD8, + 0xD5, + 0xD0, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x54, + 0xB8, + 0xE1, + 0xDD, + 0xDA, + 0xD5, + 0xD0, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xD0, + 0xDD, + 0xD8, + 0xD5, + 0xD0, + 0x56, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0xB8, + 0xD7, + 0x04, + 0x17, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xD9, + 0xDB, + 0xD0, + 0xF7, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xD6, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0xFA, + 0x00, + 0xE1, + 0xD8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xD7, + 0x00, + 0x00, + 0x60, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x0D, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD5, + 0xF3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0x8C, + 0x3B, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xEF, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0x58, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD7, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xD9, + 0x00, + 0xF3, + 0xDC, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xF6, + 0xD5, + 0xDD, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0xDE, + 0x53, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x5E, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD0, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDA, + 0xDE, + 0x00, + 0x00, + 0xDE, + 0xD3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD0, + 0x09, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD4, + 0x55, + 0x00, + 0x00, + 0xDB, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0xDB, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xF2, + 0x00, + 0x00, + 0x5B, + 0xDA, + 0x5E, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0xD5, + 0xD9, + 0xD0, + 0x55, + 0x00, + 0xF3, + 0x04, + 0xD5, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDD, + 0xD2, + 0x00, + 0xDE, + 0xDB, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0xB8, + 0xD5, + 0xDB, + 0x55, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xE1, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x59, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x09, + 0x16, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x57, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x56, + 0xD8, + 0xD7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDC, + 0xDA, + 0x57, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0xF1, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xF2, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xF2, + 0x04, + 0x16, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xFA, + 0x00, + 0x00, + 0xDC, + 0xDC, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x59, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x54, + 0xDE, + 0xDB, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0xDB, + 0x53, + 0x00, + 0x00, + 0xC6, + 0xB8, + 0xD8, + 0xD2, + 0xB3, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0xD7, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xD2, + 0xB3, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xC3, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x59, + 0x57, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x3B, + 0xC8, + 0xE3, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x17, + 0x00, + 0x00, + 0x17, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDB, + 0xDE, + 0x00, + 0xDE, + 0xDA, + 0x56, + 0x54, + 0x00, + 0xB8, + 0xD4, + 0xDE, + 0x00, + 0x00, + 0x16, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xD9, + 0xF7, + 0x54, + 0x00, + 0xB8, + 0xD9, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDC, + 0xD5, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x59, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xDD, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5C, + 0xD4, + 0xDC, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x56, + 0x04, + 0xD7, + 0x55, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD2, + 0x04, + 0x57, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDC, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x16, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0x04, + 0xEF, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0x59, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xD5, + 0xDB, + 0x57, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xDF, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD7, + 0xD8, + 0x5A, + 0x54, + 0x00, + 0x54, + 0xF5, + 0xD0, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0xDE, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x59, + 0xD7, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x60, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xD6, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0xDD, + 0x5A, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0x60, + 0xD9, + 0xD9, + 0x56, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x54, + 0x00, + 0xB3, + 0x58, + 0xD2, + 0x04, + 0xD0, + 0xB3, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x53, + 0xD0, + 0x04, + 0xDB, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x5A, + 0xDC, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5B, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD9, + 0xDB, + 0x5E, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x17, + 0xD9, + 0xD8, + 0x59, + 0x54, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD0, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x53, + 0xD6, + 0x04, + 0xDC, + 0x5A, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5C, + 0xDD, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xD8, + 0xDC, + 0xF5, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x0D, + 0x53, + 0x00, + 0x54, + 0xF5, + 0xDE, + 0x04, + 0x57, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD3, + 0xD5, + 0xF3, + 0x00, + 0xF5, + 0xD4, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFA, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x56, + 0x00, + 0x00, + 0xB3, + 0xD2, + 0xD8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD9, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x5B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5E, + 0x00, + 0x00, + 0xF6, + 0xDB, + 0xDB, + 0x56, + 0x00, + 0x00, + 0x00, + 0xF5, + 0xDB, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x17, + 0x04, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0xD8, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xFA, + 0x5D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD2, + 0xD8, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD5, + 0xD0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD9, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x55, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xC0, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x59, + 0x54, + 0x00, + 0x00, + 0xD3, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xF1, + 0xD3, + 0x56, + 0xF3, + 0x55, + 0xD0, + 0x04, + 0x5A, + 0x00, + 0xB8, + 0xDB, + 0xD9, + 0xE1, + 0xE1, + 0xD9, + 0xDB, + 0xB8, + 0x54, + 0x00, + 0xF4, + 0xDB, + 0x0D, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xD9, + 0xDB, + 0xE1, + 0xE1, + 0xD9, + 0xD9, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD9, + 0xDC, + 0x56, + 0x00, + 0x57, + 0xDB, + 0xD5, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x0A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x59, + 0xD8, + 0x04, + 0xDE, + 0xD6, + 0xD6, + 0xD7, + 0x04, + 0xD5, + 0xB8, + 0x54, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x5E, + 0xD4, + 0xD9, + 0xD0, + 0xD6, + 0xD0, + 0xD9, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDC, + 0xD4, + 0xD0, + 0xD6, + 0xDE, + 0x04, + 0xD7, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD5, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xD9, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x55, + 0xF1, + 0x04, + 0xDE, + 0xD6, + 0xDE, + 0x04, + 0xDC, + 0x55, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD5, + 0x04, + 0xDE, + 0xD6, + 0xE1, + 0xDC, + 0x04, + 0xDE, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0xDB, + 0x04, + 0xD2, + 0xD6, + 0xE1, + 0xD5, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xDC, + 0x04, + 0xDD, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xDE, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD9, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xD0, + 0xDD, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5D, + 0xDB, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD6, + 0xDE, + 0xD9, + 0x04, + 0xD2, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0xD6, + 0xE1, + 0xDE, + 0xDB, + 0x04, + 0xD9, + 0x17, + 0x53, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x54, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x57, + 0x54, + 0x00, + 0x00, + 0xB3, + 0xEF, + 0x04, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0x04, + 0xD7, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x0D, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB8, + 0xD2, + 0x04, + 0xD9, + 0xDE, + 0xD6, + 0xD6, + 0xDE, + 0xD9, + 0x04, + 0xD7, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x12, + 0xD6, + 0xDE, + 0xDB, + 0x04, + 0xD2, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0xDB, + 0x04, + 0xDB, + 0xD0, + 0xD6, + 0xD6, + 0xD0, + 0xDB, + 0xDA, + 0xDB, + 0x5C, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x12, + 0xD6, + 0xDE, + 0xDB, + 0x04, + 0xDC, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xF4, + 0xDE, + 0x04, + 0xD7, + 0xD6, + 0xE1, + 0xD5, + 0x04, + 0xD6, + 0x00, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x04, + 0xDC, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x60, + 0x04, + 0x5A, + 0x54, + 0x59, + 0x04, + 0xF9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x56, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDF, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0xF1, + 0xF3, + 0x00, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0x0A, + 0xD6, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD9, + 0xDA, + 0x5A, + 0x00, + 0x00, + 0x16, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD2, + 0x04, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xC1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0xD7, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0xD4, + 0xD8, + 0xD0, + 0xD6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0xD0, + 0x57, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x0A, + 0xD7, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x9D, + 0x3B, + 0xD8, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0xDE, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDB, + 0xDF, + 0x00, + 0x00, + 0x00, + 0xD0, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x17, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0xDB, + 0xDB, + 0xD0, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDF, + 0xDB, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xD0, + 0xD9, + 0xDB, + 0xD0, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD0, + 0x17, + 0x00, + 0x17, + 0xD0, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD9, + 0xF4, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD6, + 0xD7, + 0xD9, + 0xD9, + 0xD2, + 0xDF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xDC, + 0xD8, + 0xDC, + 0xD0, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD6, + 0xD5, + 0xD8, + 0xF1, + 0xEF, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD5, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0x12, + 0xDC, + 0xD8, + 0xDC, + 0xD6, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDF, + 0xD7, + 0xD9, + 0xDB, + 0xDE, + 0x5D, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xE1, + 0xDD, + 0x04, + 0xDB, + 0xDE, + 0x59, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x5B, + 0xD0, + 0xF1, + 0xD8, + 0xD9, + 0xD7, + 0xD6, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xDC, + 0xDE, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF5, + 0x16, + 0xD0, + 0xDD, + 0xD8, + 0xD9, + 0xD7, + 0xE1, + 0x58, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xDB, + 0xD7, + 0xD0, + 0x5E, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x0A, + 0xD7, + 0xD9, + 0x04, + 0xD9, + 0xD7, + 0xD6, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDE, + 0x04, + 0x5A, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0x58, + 0xE1, + 0xD3, + 0xD8, + 0xD8, + 0xF1, + 0xE1, + 0x59, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xDC, + 0xD0, + 0xFA, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x60, + 0xDE, + 0xDD, + 0xDA, + 0xD8, + 0xDC, + 0xD0, + 0xFA, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD9, + 0xD3, + 0xD0, + 0xFA, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x60, + 0xD2, + 0xD9, + 0xDB, + 0xDE, + 0x5A, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x0D, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xD9, + 0xDE, + 0x00, + 0xD6, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0xD8, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD5, + 0xD2, + 0x00, + 0xF7, + 0xD8, + 0xD2, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0xDA, + 0x56, + 0x00, + 0xE1, + 0x04, + 0x56, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x5E, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xDE, + 0x17, + 0x00, + 0x00, + 0xD7, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDB, + 0xEF, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0xD7, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0xE1, + 0xF1, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF2, + 0xD8, + 0x17, + 0x00, + 0x04, + 0xDE, + 0x00, + 0xD8, + 0xDC, + 0xD6, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0x04, + 0xF2, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x00, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD6, + 0xD2, + 0x53, + 0xD0, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDE, + 0x16, + 0xB3, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x5E, + 0x3B, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0xDE, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x55, + 0x00, + 0xF6, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xFF, + 0xFF, + 0xFF, + 0x00, + 0x00, + 0x49, + 0x04, + 0x00, + 0x00, + 0x1B, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x06, + 0x74, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x60, + 0x58, + 0x58, + 0x60, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x60, + 0x04, + 0x60, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x57, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x56, + 0xD7, + 0xD9, + 0xDB, + 0xDF, + 0xF3, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0x17, + 0x04, + 0x17, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB3, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF5, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x53, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x54, + 0x55, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF6, + 0x54, + 0x00, + 0xF3, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xF7, + 0x53, + 0x54, + 0xB3, + 0x56, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0xF5, + 0x00, + 0x00, + 0xF5, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x57, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x53, + 0x54, + 0x53, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x17, + 0x55, + 0x53, + 0x54, + 0x53, + 0xF3, + 0xB8, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF7, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x54, + 0xF4, + 0xB8, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xFA, + 0xF6, + 0x53, + 0x54, + 0x00, + 0x53, + 0xF7, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x00, + 0x53, + 0x55, + 0x5C, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF7, + 0xF3, + 0x00, + 0x54, + 0x53, + 0xF6, + 0x5A, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x53, + 0x00, + 0x46, + 0xB8, + 0xD8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x17, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x55, + 0x53, + 0x54, + 0x53, + 0xB3, + 0xF7, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF7, + 0xB3, + 0x00, + 0x54, + 0xB3, + 0xF7, + 0xD6, + 0x04, + 0xDA, + 0x57, + 0xF3, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xB8, + 0xF3, + 0x54, + 0x54, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0xF3, + 0x54, + 0x53, + 0xF5, + 0x5C, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x57, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x57, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0xB3, + 0x54, + 0x54, + 0xF3, + 0x57, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD7, + 0xF7, + 0x53, + 0x54, + 0x53, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0xB3, + 0x54, + 0x00, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xB8, + 0xF3, + 0x54, + 0x54, + 0xF3, + 0x57, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x53, + 0x54, + 0x53, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0C, + 0x55, + 0x53, + 0x54, + 0x53, + 0xF7, + 0xDC, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0C, + 0x55, + 0x53, + 0x54, + 0x54, + 0xF6, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD2, + 0x55, + 0x54, + 0x54, + 0x53, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0C, + 0x55, + 0x54, + 0x54, + 0x53, + 0x55, + 0xD2, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x54, + 0x00, + 0xF5, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0xF5, + 0x54, + 0x54, + 0x53, + 0xB8, + 0xD4, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x51, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x55, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF4, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x00, + 0x55, + 0xF7, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x54, + 0xF7, + 0xF7, + 0xB3, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xF7, + 0xF4, + 0x00, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x53, + 0x00, + 0x54, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xF5, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x53, + 0x00, + 0xF3, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF5, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x5A, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x53, + 0x00, + 0x53, + 0x55, + 0xB8, + 0xB8, + 0xF6, + 0x54, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0xC6, + 0x09, + 0x54, + 0xF6, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF6, + 0x53, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x54, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xB8, + 0xF5, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF3, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0xB8, + 0xF6, + 0x09, + 0x09, + 0xF3, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF4, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0xF5, + 0x5B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0x53, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0xB3, + 0x54, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x54, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0xF3, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF5, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xD5, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x5D, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0xF7, + 0xB3, + 0x00, + 0x53, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0xF5, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0xE1, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xD4, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x5A, + 0x00, + 0x54, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x54, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x5B, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x54, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0x55, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0xF7, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFE, + 0xFF, + 0xF9, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0xDC, + 0x04, + 0xD7, + 0xF3, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x53, + 0x56, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0xDA, + 0xE1, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0xEF, + 0x00, + 0x53, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDB, + 0xB3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x54, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xB8, + 0x54, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x54, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC6, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xC6, + 0x54, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0x00, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0x54, + 0x5A, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x54, + 0x5C, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xC6, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x56, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x55, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x53, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDD, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xC8, + 0xFF, + 0xFE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xD8, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x53, + 0xD4, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0xF6, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xB8, + 0x54, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xEF, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x00, + 0x00, + 0x54, + 0x53, + 0x04, + 0xD6, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x57, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x55, + 0x00, + 0x00, + 0xF4, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0xF4, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xFA, + 0x04, + 0xDA, + 0xD5, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0xD5, + 0x00, + 0x00, + 0xB8, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x16, + 0x09, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF4, + 0x00, + 0x59, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDE, + 0x00, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x00, + 0x00, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xE1, + 0x04, + 0xD2, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF5, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0xD2, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x17, + 0x04, + 0xD4, + 0xF3, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xE1, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF4, + 0xD7, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xFA, + 0x04, + 0x0A, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE3, + 0x3B, + 0x6E, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x59, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0xF4, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF5, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x09, + 0x00, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x53, + 0x54, + 0xB8, + 0xB8, + 0x04, + 0xF7, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x56, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0xF5, + 0x00, + 0x00, + 0xF6, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xFA, + 0x04, + 0x59, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xDC, + 0x53, + 0x00, + 0x00, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0xDA, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0xF7, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD0, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDA, + 0xD0, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x53, + 0xD4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x56, + 0x00, + 0xB3, + 0xDD, + 0xDE, + 0x54, + 0xB3, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x53, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x57, + 0xDD, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDF, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5C, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0xD3, + 0x55, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xDF, + 0x04, + 0xF7, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDA, + 0x0A, + 0x00, + 0xDE, + 0x04, + 0xD9, + 0x00, + 0x58, + 0x04, + 0xF3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD3, + 0x53, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0x5A, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF3, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xF7, + 0x00, + 0xF6, + 0xB8, + 0xB8, + 0xB8, + 0x53, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0xEF, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x53, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x55, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0xF6, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x16, + 0x54, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x59, + 0x56, + 0x5C, + 0x00, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5A, + 0xB3, + 0x00, + 0x00, + 0xF7, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0xF6, + 0x04, + 0xD0, + 0x00, + 0xB3, + 0x5A, + 0x58, + 0xB3, + 0x00, + 0x00, + 0xD7, + 0xD9, + 0xB8, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x59, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0xB8, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x16, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xD2, + 0xDA, + 0x04, + 0xDA, + 0xD7, + 0x57, + 0x53, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x16, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD4, + 0xF4, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xD2, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0xDA, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF3, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF6, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x54, + 0xDA, + 0x04, + 0xD7, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF7, + 0x04, + 0xDA, + 0x00, + 0xB8, + 0x04, + 0x5C, + 0x00, + 0xDD, + 0x04, + 0x5A, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0xF4, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD9, + 0x04, + 0x04, + 0xB8, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0xF5, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x54, + 0x53, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0xDB, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xC6, + 0xF7, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0xDA, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xD4, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xE1, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0x0A, + 0x04, + 0x04, + 0xFA, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x00, + 0x00, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0x00, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x17, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0x57, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF4, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x57, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xD6, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x00, + 0x00, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x57, + 0x53, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x54, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD2, + 0x00, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xF5, + 0x54, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x55, + 0x53, + 0x04, + 0xF5, + 0xF3, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x16, + 0x09, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0x16, + 0x04, + 0xDF, + 0x00, + 0x16, + 0xDA, + 0xD0, + 0xF5, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xD9, + 0x04, + 0x04, + 0xFC, + 0x3B, + 0xE3, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x54, + 0x55, + 0xD5, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x58, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x53, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x16, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x56, + 0x04, + 0xF6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0xD7, + 0x04, + 0xDA, + 0xD6, + 0xB3, + 0xC6, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0x09, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x54, + 0xDA, + 0x04, + 0x55, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x55, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x54, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x53, + 0xB3, + 0xD9, + 0xDF, + 0x57, + 0xB8, + 0x57, + 0x17, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD5, + 0x55, + 0xF6, + 0xF3, + 0x00, + 0x00, + 0xF5, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x57, + 0x00, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x03, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x57, + 0x04, + 0x04, + 0x57, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x53, + 0x00, + 0x00, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0xDA, + 0x54, + 0x00, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x59, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF3, + 0x00, + 0xB3, + 0x59, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0x5D, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xF2, + 0xDA, + 0xDF, + 0x09, + 0xF7, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x45, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xB8, + 0x54, + 0x00, + 0xB3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x00, + 0xB8, + 0x55, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xB3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD7, + 0x04, + 0xDF, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF4, + 0x00, + 0x58, + 0xD9, + 0x04, + 0xD5, + 0xF7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB3, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xF3, + 0x00, + 0x00, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0x00, + 0x00, + 0xF4, + 0x16, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x54, + 0xF2, + 0x04, + 0x04, + 0x00, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD9, + 0x04, + 0x04, + 0xD2, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF4, + 0x00, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x54, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x53, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xD2, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x59, + 0x53, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x5A, + 0xF5, + 0x00, + 0x00, + 0xF5, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x17, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xD2, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xE1, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0xDA, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xDA, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x04, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xDC, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0xDA, + 0xF6, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0xDA, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0xEF, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEF, + 0x56, + 0x17, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0xD7, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF5, + 0x00, + 0x00, + 0x00, + 0xF7, + 0xD8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD0, + 0x57, + 0x57, + 0xD0, + 0x04, + 0xDA, + 0xF6, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0B, + 0xF7, + 0xF4, + 0x00, + 0xB3, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0xDA, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x59, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF6, + 0x00, + 0x00, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xF6, + 0x00, + 0x00, + 0xF5, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xDB, + 0x04, + 0x00, + 0xD8, + 0x04, + 0xD0, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x58, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x53, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xFA, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xB3, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x60, + 0x04, + 0x04, + 0xDA, + 0x57, + 0x00, + 0x00, + 0xF3, + 0x57, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xF5, + 0xB3, + 0x04, + 0x04, + 0xF6, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF4, + 0x04, + 0xD9, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x54, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xD0, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x00, + 0xF6, + 0x04, + 0xE1, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0x53, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x00, + 0x00, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF6, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xE1, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xD0, + 0x04, + 0xD0, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x17, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x17, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x54, + 0x57, + 0x04, + 0x5D, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3C, + 0x3B, + 0x3B, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xD0, + 0x16, + 0x00, + 0x56, + 0xD0, + 0xD0, + 0xD0, + 0x00, + 0xF4, + 0xD0, + 0xD0, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xF3, + 0xFA, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0x00, + 0x00, + 0x54, + 0x55, + 0xDA, + 0xD0, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x54, + 0xF6, + 0x54, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x00, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0xB3, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0xF5, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0x00, + 0x00, + 0xF3, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0xF4, + 0x00, + 0x00, + 0xF7, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0xF7, + 0x04, + 0xF4, + 0xD6, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xB3, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xEF, + 0x53, + 0x54, + 0xD9, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xD0, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xF5, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0xF4, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xF6, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDB, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD0, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xD4, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0xB3, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0xC6, + 0x55, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x54, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB8, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xB8, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF3, + 0x00, + 0xD2, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x55, + 0xD4, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x00, + 0x53, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0x00, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF3, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0x00, + 0xC6, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xF7, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x54, + 0x00, + 0x00, + 0x04, + 0x00, + 0x00, + 0xF5, + 0xD4, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD0, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5E, + 0x09, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0xD8, + 0x3E, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0x54, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x5A, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0xB8, + 0xD8, + 0xDA, + 0xB8, + 0x54, + 0x56, + 0x04, + 0xF4, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0xB8, + 0x04, + 0xD8, + 0xF6, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0xB6, + 0xD0, + 0x04, + 0xDE, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xD2, + 0xF4, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDE, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5A, + 0x54, + 0x57, + 0xF6, + 0x54, + 0x00, + 0xF4, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x00, + 0x53, + 0x00, + 0xF3, + 0x59, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x55, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x56, + 0x54, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x00, + 0x54, + 0x56, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x57, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x57, + 0xF5, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB3, + 0xD5, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x00, + 0xDE, + 0x04, + 0xDE, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x53, + 0x04, + 0x04, + 0x04, + 0xB3, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x56, + 0x04, + 0x04, + 0x58, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x56, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x5A, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0xD4, + 0xF3, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xFA, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0x16, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0xB8, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x57, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x58, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x00, + 0x00, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDC, + 0xD9, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x59, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF5, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0xB3, + 0xD5, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0x0B, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xD2, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0x54, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x0A, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF7, + 0xF7, + 0x53, + 0x00, + 0x5A, + 0xDC, + 0x54, + 0x00, + 0x55, + 0xB8, + 0xF5, + 0x53, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xF6, + 0x00, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x0B, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF7, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x54, + 0x00, + 0x59, + 0xF6, + 0x00, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF7, + 0xD7, + 0x04, + 0xDB, + 0x54, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0xD9, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xDC, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDA, + 0x04, + 0xD0, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x16, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0x59, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0xDD, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xDA, + 0x04, + 0xDC, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x57, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0x00, + 0x53, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0xF9, + 0x94, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xF6, + 0x00, + 0x04, + 0xD9, + 0xD9, + 0xD9, + 0xF5, + 0xF5, + 0xD9, + 0xD9, + 0xD9, + 0x58, + 0x00, + 0xD7, + 0xD9, + 0xDA, + 0x55, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0xDF, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x54, + 0xDA, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x57, + 0x53, + 0xD9, + 0x53, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x53, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x04, + 0xD4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xB3, + 0xF3, + 0xD4, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x00, + 0x04, + 0x04, + 0xF3, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5B, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0x5B, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0xD9, + 0x00, + 0x5A, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x53, + 0xF5, + 0xF3, + 0xF7, + 0x04, + 0xF5, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x17, + 0x04, + 0xE1, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x55, + 0x04, + 0x04, + 0xD8, + 0x09, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xD5, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x56, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x54, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xD5, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0xB3, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xB8, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xDA, + 0xB3, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0xD5, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x00, + 0x00, + 0xC6, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x57, + 0x04, + 0x04, + 0xFA, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x54, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xF3, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF7, + 0xF3, + 0x00, + 0x00, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD3, + 0xF7, + 0x53, + 0x00, + 0x54, + 0x55, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0xB3, + 0x00, + 0x00, + 0xF4, + 0x59, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0xF4, + 0x57, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x55, + 0x53, + 0x00, + 0x53, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF6, + 0x53, + 0x00, + 0x53, + 0xF7, + 0xD5, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x56, + 0xB3, + 0x00, + 0x54, + 0x55, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xD9, + 0x55, + 0x54, + 0x00, + 0xF5, + 0xD6, + 0x04, + 0x04, + 0xDB, + 0x55, + 0x54, + 0x00, + 0xB3, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x59, + 0xF3, + 0x00, + 0x54, + 0xF6, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x55, + 0x53, + 0x00, + 0x54, + 0xF6, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD3, + 0xF7, + 0x53, + 0x00, + 0x54, + 0xF6, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x55, + 0x53, + 0x00, + 0x53, + 0x55, + 0xD2, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xD7, + 0xF3, + 0x54, + 0x57, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x54, + 0xF6, + 0xDD, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0xB8, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x16, + 0x04, + 0xF7, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0xF3, + 0x04, + 0x04, + 0x59, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x60, + 0x00, + 0x56, + 0x04, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x54, + 0xDA, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x9E, + 0xFF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0xD0, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0xF3, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x5C, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x55, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF5, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0x04, + 0x04, + 0x57, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF2, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x17, + 0x00, + 0x5C, + 0x04, + 0x04, + 0xD5, + 0xF7, + 0x54, + 0x00, + 0xF6, + 0xD9, + 0x04, + 0x04, + 0x00, + 0x53, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF4, + 0x04, + 0xF6, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x54, + 0x54, + 0xD9, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF3, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF3, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xDE, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD2, + 0x00, + 0xF3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x53, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x57, + 0x00, + 0xF5, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x53, + 0x5D, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xFA, + 0x04, + 0x04, + 0x53, + 0x53, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD6, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x53, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0xEF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xE1, + 0xDE, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFF, + 0x54, + 0x41, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0xDB, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x57, + 0x04, + 0x04, + 0x59, + 0x00, + 0xDE, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0xF5, + 0x04, + 0xF6, + 0x00, + 0xD7, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x5B, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD5, + 0x04, + 0x04, + 0xDD, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0xF4, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x53, + 0x54, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x53, + 0x54, + 0x00, + 0x00, + 0x00, + 0x53, + 0x54, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x54, + 0xD6, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x53, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0xD2, + 0x00, + 0xF3, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF4, + 0x00, + 0xDE, + 0x04, + 0x04, + 0xB8, + 0x54, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x58, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x55, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x55, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x54, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0xF6, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x54, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0x5A, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x56, + 0x00, + 0x53, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5A, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0xF4, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x00, + 0x54, + 0x16, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x53, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x00, + 0x54, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x00, + 0x54, + 0x5B, + 0xD4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x58, + 0x00, + 0x00, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x55, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x53, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x53, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xFA, + 0x00, + 0x53, + 0xDA, + 0x04, + 0x04, + 0x56, + 0x00, + 0x56, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF6, + 0x54, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x53, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x00, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xD2, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x00, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5B, + 0x54, + 0x5B, + 0x04, + 0x04, + 0xD8, + 0x54, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x54, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0xC6, + 0xF3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x16, + 0x60, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x54, + 0x55, + 0xDA, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x59, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0xD6, + 0x04, + 0x04, + 0x04, + 0xB3, + 0x55, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xB3, + 0xD2, + 0x04, + 0xD9, + 0x55, + 0x00, + 0xEF, + 0x04, + 0xDC, + 0x54, + 0x00, + 0xF7, + 0xF7, + 0x00, + 0x54, + 0xDC, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD2, + 0x00, + 0x54, + 0xF7, + 0xF7, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x53, + 0xD7, + 0x04, + 0xDE, + 0x54, + 0x54, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0x54, + 0x00, + 0x00, + 0xB8, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x0A, + 0x00, + 0x54, + 0xF5, + 0xF7, + 0xF7, + 0xF3, + 0x00, + 0x53, + 0xD3, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0xF6, + 0xDA, + 0x04, + 0x5C, + 0x00, + 0x00, + 0x55, + 0xB8, + 0x55, + 0x00, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x00, + 0xF6, + 0xB8, + 0xF5, + 0x53, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x54, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x55, + 0x54, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x00, + 0x04, + 0x04, + 0xD9, + 0x53, + 0x54, + 0xF6, + 0xB8, + 0xF6, + 0x54, + 0x53, + 0xD9, + 0x04, + 0x04, + 0x04, + 0xD3, + 0x53, + 0x00, + 0xF5, + 0xB8, + 0xF7, + 0x53, + 0x00, + 0xF6, + 0xD4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x54, + 0x00, + 0xF4, + 0xB8, + 0xF7, + 0x54, + 0x00, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0x53, + 0x00, + 0x53, + 0x55, + 0xB8, + 0xF7, + 0xF6, + 0x54, + 0x00, + 0xF5, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0x00, + 0x00, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0x55, + 0x53, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x17, + 0x54, + 0x00, + 0x54, + 0x55, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF4, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF5, + 0x54, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x54, + 0x00, + 0xF6, + 0xB8, + 0xB8, + 0x55, + 0x54, + 0x00, + 0xF3, + 0xDE, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0x56, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x54, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF4, + 0x00, + 0x00, + 0xF6, + 0xF7, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF3, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5C, + 0x54, + 0x00, + 0x54, + 0xF6, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x54, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xF7, + 0xF6, + 0x00, + 0x00, + 0x53, + 0xDC, + 0x04, + 0x04, + 0x04, + 0xDA, + 0xF5, + 0x53, + 0xF3, + 0xF7, + 0xF7, + 0x54, + 0x00, + 0xB8, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x53, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xDB, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x59, + 0x54, + 0xDF, + 0x04, + 0xD6, + 0x00, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD7, + 0x00, + 0x57, + 0x04, + 0x04, + 0x58, + 0x00, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x54, + 0x56, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x53, + 0xB3, + 0x04, + 0x04, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0xB8, + 0x54, + 0x54, + 0x04, + 0x04, + 0x04, + 0xDE, + 0x00, + 0x00, + 0xDF, + 0x04, + 0x04, + 0x5D, + 0x54, + 0xDC, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF4, + 0x54, + 0xB3, + 0xDB, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0x00, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF3, + 0x54, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD0, + 0x00, + 0x00, + 0xF6, + 0xB8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x55, + 0xDE, + 0x04, + 0x00, + 0xF6, + 0xDA, + 0xB8, + 0xF3, + 0x00, + 0x5A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x81, + 0xFF, + 0x45, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0xF6, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0x56, + 0x04, + 0x04, + 0x04, + 0x55, + 0x53, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF6, + 0x00, + 0x00, + 0x00, + 0x00, + 0x58, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x55, + 0x54, + 0x54, + 0xF6, + 0xDD, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x54, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x00, + 0x54, + 0xF6, + 0xD3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF6, + 0x58, + 0x04, + 0x58, + 0x55, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x00, + 0x00, + 0x00, + 0xD5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0xF3, + 0x57, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0xD7, + 0xF7, + 0x53, + 0x00, + 0x53, + 0x55, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0xF7, + 0x53, + 0x00, + 0xB3, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDF, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x57, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x54, + 0xF3, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xB8, + 0x53, + 0x00, + 0x53, + 0xB8, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x56, + 0xF3, + 0x00, + 0x54, + 0xF5, + 0x17, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0xF7, + 0x53, + 0x00, + 0x54, + 0xF6, + 0x0A, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x17, + 0x55, + 0xB3, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF7, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF6, + 0x16, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5D, + 0xF6, + 0x53, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0xF3, + 0x55, + 0x5C, + 0xD8, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x54, + 0x57, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0xB8, + 0xF3, + 0x00, + 0x00, + 0x00, + 0xF3, + 0xF7, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x00, + 0xDF, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0xB3, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0x00, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x00, + 0x55, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xE1, + 0xF7, + 0xB3, + 0x00, + 0x00, + 0xB3, + 0xF7, + 0xD6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x53, + 0xF6, + 0x16, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x5A, + 0xF6, + 0x53, + 0x00, + 0x00, + 0x53, + 0xF6, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0xB3, + 0x55, + 0xFA, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD4, + 0x59, + 0xF4, + 0x00, + 0x54, + 0xF5, + 0xDF, + 0x04, + 0x04, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x56, + 0x00, + 0xD0, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0x00, + 0xF5, + 0x04, + 0xF7, + 0x00, + 0xD9, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF3, + 0x00, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x54, + 0xF4, + 0x04, + 0xDD, + 0x00, + 0xF4, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF5, + 0x00, + 0xD7, + 0x04, + 0xF7, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x5D, + 0x00, + 0x5C, + 0x04, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDC, + 0xF5, + 0x58, + 0x04, + 0x04, + 0xF3, + 0xF5, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x53, + 0xB8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDD, + 0x00, + 0x00, + 0xD7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD8, + 0xF5, + 0x54, + 0xF3, + 0xE1, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD3, + 0xF7, + 0xB3, + 0x00, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD5, + 0xF4, + 0x54, + 0x57, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x00, + 0x53, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDB, + 0x00, + 0xF4, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xB8, + 0xF4, + 0x04, + 0x55, + 0xF7, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xF6, + 0x5D, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xEC, + 0xFF, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x00, + 0xF6, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0xD9, + 0x04, + 0xD8, + 0xDA, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x04, + 0x3B, + 0x3B, + 0x3B, + 0x00, + 0x00, +}; diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h new file mode 100644 index 00000000000..b35c3514e8d --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/resources/bitmap.h @@ -0,0 +1,30 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ +#define EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ + +// bitmaps id + +// fonts id +#define urw_gothic_12_grey_bg_white 0 +#define urw_gothic_12_white_bg_grey 1 +#define urw_gothic_13_grey_bg_white 2 +#define urw_gothic_13_white_bg_grey 3 + +#endif // EXAMPLES_MAX32655_DEMO_2048_ARM_RESOURCES_BITMAP_H_ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/CodeFusion-Studio-FG-Icon_Digital-FullColor.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/CodeFusion-Studio-FG-Icon_Digital-FullColor.bmp new file mode 100644 index 00000000000..48bf5769146 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/CodeFusion-Studio-FG-Icon_Digital-FullColor.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_1024.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_1024.bmp new file mode 100644 index 00000000000..241a318cc7f Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_1024.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_128.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_128.bmp new file mode 100644 index 00000000000..12d129a51a6 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_128.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_16.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_16.bmp new file mode 100644 index 00000000000..3947c8cc7c3 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_16.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_2.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_2.bmp new file mode 100644 index 00000000000..75316025cf3 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_2.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_2048.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_2048.bmp new file mode 100644 index 00000000000..365b77fff22 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_2048.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_256.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_256.bmp new file mode 100644 index 00000000000..64484b7b4f6 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_256.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_32.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_32.bmp new file mode 100644 index 00000000000..af3d8e7011a Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_32.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_4.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_4.bmp new file mode 100644 index 00000000000..cafc2e49df7 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_4.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_512.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_512.bmp new file mode 100644 index 00000000000..57fd76ede1d Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_512.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_64.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_64.bmp new file mode 100644 index 00000000000..d0b3a717008 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_64.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_8.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_8.bmp new file mode 100644 index 00000000000..dc0171451fc Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/clear_sans_bold_8.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.bmp new file mode 100644 index 00000000000..be134db754c Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.png b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.png new file mode 100644 index 00000000000..9f21dc00a6f Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/game_over.png differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/you_win.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/you_win.bmp new file mode 100644 index 00000000000..2b0db5186a6 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/you_win.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/you_win.png b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/you_win.png new file mode 100644 index 00000000000..63f9b10b288 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/bmp_rle/you_win.png differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.bmp new file mode 100644 index 00000000000..cd2cf93446c Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.mff b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.mff new file mode 100644 index 00000000000..b4fc0b62d28 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-grey_bg-white.mff differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-white_bg-grey.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-white_bg-grey.bmp new file mode 100644 index 00000000000..b4749ebf295 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-white_bg-grey.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-white_bg-grey.mff b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-white_bg-grey.mff new file mode 100644 index 00000000000..b4fc0b62d28 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_12-white_bg-grey.mff differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-grey_bg-white.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-grey_bg-white.bmp new file mode 100644 index 00000000000..9030c466136 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-grey_bg-white.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-grey_bg-white.mff b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-grey_bg-white.mff new file mode 100644 index 00000000000..4a003574091 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-grey_bg-white.mff differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.bmp b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.bmp new file mode 100644 index 00000000000..6ddcefbb74b Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.bmp differ diff --git a/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.mff b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.mff new file mode 100644 index 00000000000..4a003574091 Binary files /dev/null and b/Examples/MAX32655/Demo_2048/ARM/resources/fonts/urw_gothic_13-white_bg-grey.mff differ diff --git a/Examples/MAX32655/Demo_2048/ARM/src/graphics.c b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c new file mode 100644 index 00000000000..d523bd172b9 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/ARM/src/graphics.c @@ -0,0 +1,989 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +#include +#include "mxc_device.h" +#include "mxc_delay.h" +#include "tft_ssd2119.h" + +// Application Libraries. +#include "graphics.h" +#include "clear_sans_bold_scaled_block_digits.h" +#include "clear_sans_bold_game_text.h" +#include "cfs_logo.h" +#include "end_game_text.h" + +/* **** Definitions **** */ + +// Focus on top left corner of the top left block in the grid to help with visualize calculating the coordinates. +#define BLOCK_X_POSITION(col) \ + (GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (col))) +#define BLOCK_Y_POSITION(row) \ + (GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * (row))) +// Math is to center the digits printed to the newly created block. +#define DIGIT_CENTER_X_POSITION(x, value) \ + (x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2)) +#define DIGIT_CENTER_Y_POSITION(y, value) \ + (y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2)) + +// Test out delays so that it's not too slow and not too fast for human eye. +#define COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS (15) + +/* **** Globals **** */ + +static int prev_timer_digit1 = 0; +static int prev_timer_digit2 = 0; +static int prev_timer_digit3 = 0; +static int prev_moves_digit1 = 0; +static int prev_moves_digit2 = 0; +static int prev_moves_digit3 = 0; + +/* **** Functions **** */ + +int Graphics_Init(void) +{ + int error; + + // Initialize TFT Display. + error = MXC_TFT_Init(); + if (error != E_NO_ERROR) { + return error; + } + + // Clear display. + MXC_TFT_DrawRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, F_BACKGROUND_COLOR); + + // Draw CFS Logo. + MXC_TFT_DrawBitmap(CFS_LOGO_OFFSET_X, CFS_LOGO_OFFSET_Y, CFS_LOGO_WIDTH, CFS_LOGO_HEIGHT, + cfs_logo); + + // Draw Game Logo. + // Forgive me for all the math who ever tries to read through the code. + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + int x = GAME_LOGO_OFFSET_X; + int y = GAME_LOGO_OFFSET_Y; + + // Math is to center the digits printed to the newly created block. + int dx = x + (BLOCK_LENGTH / 2) - (BLOCK_2048_DIGIT_PX_WIDTH / 2); + int dy = y + (BLOCK_LENGTH / 2) - (BLOCK_2048_DIGIT_PX_HEIGHT / 2); + + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, + F_BACKGROUND_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_2048_DIGIT_PX_WIDTH, BLOCK_2048_DIGIT_PX_HEIGHT, + block_2048, RGB565_BLACK, RGB565_BLOCK_2048); + + // Draw move counter. + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(MOVES_TEXT_OFFSET_X, MOVES_TEXT_OFFSET_Y, GAME_TEXT_MOVES_WIDTH, + GAME_TEXT_MOVES_HEIGHT, game_text_moves, RGB565_BLACK, + RGB565_WHITE); + + // Draw timer. + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_COLON_OFFSET_X, TIME_OFFSET_Y, GAME_TEXT_DIGIT_COLON_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, game_text_colon, RGB565_BLACK, + RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(0)), TIME_OFFSET_Y, + GAME_TEXT_DIGIT_WIDTH(0), GAME_TEXT_DIGITS_HEIGHT, + GAME_TEXT_DIGIT_PTR(0), RGB565_BLACK, RGB565_WHITE); + + // Draw grid. + MXC_TFT_DrawRect(GRID_OFFSET_X + GRID_SPACING, GRID_OFFSET_Y + GRID_SPACING, GRID_LENGTH, + GRID_LENGTH, F_GRID_COLOR); + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + MXC_TFT_DrawRoundedRect(GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + + ((BLOCK_LENGTH + BLOCK_SPACING) * row), + GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + + ((BLOCK_LENGTH + BLOCK_SPACING) * col), + BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, + RADIUS_FOR_CORNERS, F_GRID_COLOR); + } + } + + return E_NO_ERROR; +} + +void Graphics_AddNewBlock(int row, int col, int block_2_4) +{ + // 6 is chosen based on animation/display refresh rate speed to the naked eye. + for (int frame_i = 0; frame_i < 6; frame_i++) { + // Forgive the unreadability. + // The math calculates where each block needs to be drawn as its animated to grow from small to big. + + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + int x = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_X + GRID_SPACING + + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = ((BLOCK_LENGTH / 2) - (frame_i * 5)) + GRID_OFFSET_Y + GRID_SPACING + + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + + // Increase the block size by 10 pixels + MXC_TFT_DrawRoundedRect( + x, y, ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), + ((frame_i * 10) > BLOCK_LENGTH) ? BLOCK_LENGTH : ((frame_i * 10) + 1), + FORMAT_RGB565_TO_PACKET(RGB_BLOCK_COLOR(block_2_4)), RADIUS_FOR_CORNERS, + ((frame_i * 10) > BLOCK_LENGTH) ? F_EMPTY_BLOCK_COLOR : F_GRID_COLOR); + + // Don't delay when empty space is fully filled. + if (frame_i < 5) { + // Minimum speed visual for human eye while also being fast and not laggy. + MXC_Delay(MXC_DELAY_MSEC(20)); + } + } + + // Calculate the starting coordinate to write the digit at the center of the tile. + int x = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(block_2_4) / 2) + GRID_OFFSET_X + + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(block_2_4) / 2) + GRID_OFFSET_Y + + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + + // Draw a 2 or 4 digit. + // Blocks 2 and 4 are lighter color, so white text won't fit. Use black text instead (Inverted). + if (block_2_4 == 2) { + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_2_DIGIT_PX_WIDTH, BLOCK_2_DIGIT_PX_HEIGHT, + block_2, RGB565_BLACK, RGB565_BLOCK_2); + } else { + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(x, y, BLOCK_4_DIGIT_PX_WIDTH, BLOCK_4_DIGIT_PX_HEIGHT, + block_4, RGB565_BLACK, RGB565_BLOCK_4); + } +} + +// Mainly used for sliding blocks to a new location. +inline void Graphics_AddBlock(int row, int col, int value) +{ + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Math is to center the digits printed to the newly created block. + int dx = x + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_WIDTH(value) / 2); + int dy = y + (BLOCK_LENGTH / 2) - (BLOCK_DIGIT_PX_HEIGHT(value) / 2); + + switch (value) { + case 2: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), + BLOCK_DIGIT_PX_HEIGHT(value), block_2, RGB565_BLACK, + RGB565_BLOCK_2); + break; + + case 4: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_4), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapInvertedMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), + BLOCK_DIGIT_PX_HEIGHT(value), block_4, RGB565_BLACK, + RGB565_BLOCK_4); + break; + + case 8: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_8), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_8, RGB565_BLACK, RGB565_BLOCK_8); + break; + + case 16: + // Draw text. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_16), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_16, RGB565_BLACK, RGB565_BLOCK_16); + break; + + case 32: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_32), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_32, RGB565_BLACK, RGB565_BLOCK_32); + break; + + case 64: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_64), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_64, RGB565_BLACK, RGB565_BLOCK_64); + break; + + case 128: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_128), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_128, RGB565_BLACK, RGB565_BLOCK_128); + break; + + case 256: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_256), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_256, RGB565_BLACK, RGB565_BLOCK_256); + break; + + case 512: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_512), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_512, RGB565_BLACK, RGB565_BLOCK_512); + break; + + case 1024: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_1024), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_1024, RGB565_BLACK, RGB565_BLOCK_1024); + break; + + case 2048: + // Draw block. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMAT_RGB565_TO_PACKET(RGB565_BLOCK_2048), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Draw digits. + // 0x0000 is RGB color BLACK (background of digit) which will be masked out to match color of block. + MXC_TFT_DrawBitmapMask(dx, dy, BLOCK_DIGIT_PX_WIDTH(value), BLOCK_DIGIT_PX_HEIGHT(value), + block_2048, RGB565_BLACK, RGB565_BLOCK_2048); + break; + + default: + break; + } +} + +void Graphics_CombineSingleBlock(int row, int col, int new_value) +{ + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, FORMAT_RGB565_TO_PACKET(new_value), + RADIUS_FOR_CORNERS, F_GRID_COLOR); + + // Animate the blow up. + // 4 is the amount of pixels between each block. That's the extent that the block will temporarily expand. + for (int i = 0; i < BLOCK_SPACING + 1; i++) { + MXC_TFT_DrawRoundedRect(x - i, y - i, BLOCK_LENGTH + (2 * i), BLOCK_LENGTH + (2 * i), + FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Delay for animation. + MXC_Delay(MXC_DELAY_MSEC(6)); + } + + // Animate the shrink down. + for (int i = 0; i < BLOCK_SPACING; i++) { + // Redraw block to remove corners. + MXC_TFT_DrawRoundedRect(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + FORMATTED_RGB_BLOCK_COLOR(new_value), RADIUS_FOR_CORNERS, + F_GRID_COLOR); + + // Remove outer borders again. + MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + F_GRID_COLOR); // Top line. + + MXC_TFT_DrawVerticalLine(x - BLOCK_SPACING + i, y - BLOCK_SPACING + i, + BLOCK_LENGTH + ((BLOCK_SPACING - i) * 2), + F_GRID_COLOR); // Left line. + + MXC_TFT_DrawHorizontalLine(x - BLOCK_SPACING + 1 + i, + BLOCK_LENGTH + y + BLOCK_SPACING - 1 - i, + BLOCK_LENGTH + ((BLOCK_SPACING - 1 - i) * 2), + F_GRID_COLOR); // Bottom line. + + MXC_TFT_DrawVerticalLine(BLOCK_LENGTH + x + BLOCK_SPACING - 1 - i, y - BLOCK_SPACING + i, + BLOCK_LENGTH - 1 + ((BLOCK_SPACING - i) * 2), + F_GRID_COLOR); // Right line. + + // Delay for animation. + MXC_Delay(MXC_DELAY_MSEC(6)); + } + + Graphics_AddBlock(row, col, new_value); +} + +// TODO(SW): Definitely could be optimized and more readable. Not enough time and wrote this late at night. +// Helper function for "_CombineBlocks function which draws the outer borders of the block with width matching the 'radius' +// @param x X coordinate of the block. +// @param y Y coordinate of the block. +// @param frame_i Current frame of the animation. +// @param current_length Length of block at current frame. +// @param f_color Formatted color code of outer border. +// @param radius Radius ofrounded cornewrs and width of block. +static void graphics_helper_CombineBlocks(uint32_t x, uint32_t y, int frame_i, + uint32_t current_length, uint32_t f_color, + uint32_t radius) +{ + // Draw top horizontal lines. + for (int p_y = 0; p_y < radius; p_y++) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = radius - p_y; + + while ((dx * dx) < ((radius * radius) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, + current_length - (2 * (radius - dx)), f_color); + } + + // Draw bottom horizontal lines. + for (int p_y = (current_length - radius); p_y < current_length; p_y++) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = p_y - (current_length - radius - 1); + + while ((dx * dx) < ((radius * radius) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x - frame_i + radius - dx, y - frame_i + p_y, + current_length - (2 * (radius - dx)), f_color); + } + + // Draw left vertical lines. + for (int p_x = 0; p_x < radius; p_x++) { + // Find the starting x position using pythagorean theorem. + int dx = radius - p_x; + int dy = 0; + + while ((dy * dy) < ((radius * radius) - (dx * dx))) { + dy++; + } + + // No negative horizontal distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, + current_length - (2 * (radius - dy)), f_color); + } + + // Draw right vertical lines. + for (int p_x = (current_length - radius); p_x < current_length; p_x++) { + // Find the starting x position using pythagorean theorem. + int dx = p_x - (current_length - radius - 1); + int dy = 0; + + while ((dy * dy) < ((radius * radius) - (dx * dx))) { + dy++; + } + + // No negative horizontal distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x - frame_i + p_x, y - frame_i + radius - dy, + current_length - (2 * (radius - dy)), f_color); + } +} + +// Helper function for "_CombineBlocks function which removes the corners of the blocks outside of 'radius' boundary. +// @param x X coordinate of the block. +// @param y Y coordinate of the block. +// @param frame_i Current frame of the animation. +// @param current_length Length of block at current frame. +// @param f_color Formatted color code of outer border. +// @param radius Radius ofrounded cornewrs and width of block. +static void graphics_helper_eraseCorners(uint32_t x, uint32_t y, int frame_i, + uint32_t current_length, uint32_t f_color, uint32_t radius) +{ + for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { + for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { + // Calculate distance from the corner. + int dx = (p_x < radius) ? radius - p_x : + (p_x >= current_length - radius) ? p_x - (current_length - radius - 1) : + 0; + int dy = (p_y < radius) ? radius - p_y : + (p_y >= current_length - radius) ? p_y - (current_length - radius - 1) : + 0; + + // Use pythagorean theorem to map coordinates, square not necessary when comparing with r. + if (((dx * dx) + (dy * dy)) > (radius * radius)) { + MXC_TFT_WritePixel(x + p_x, y + p_y, 1, 1, f_color); + } + + // Skip x points that aren't within corners. + if (p_x >= radius && p_x < (current_length - radius)) { + p_x = current_length - radius - 1; + } + } + + // Skip x points that aren't within corners. + if (p_y >= radius && p_y < (current_length - radius)) { + p_y = current_length - radius - 1; + } + } +} + +void Graphics_CombineBlocks(uint32_t grid[4][4], block_state_t grid_state[4][4]) +{ + // Animate the blow up. + // 4 is the amount of pixels between each block. That's the extent that the block will temporarily expand. + for (int frame_i = 0; frame_i < BLOCK_SPACING + 1; frame_i++) { + int combine_count = 0; + + // Go through each block that is going to be combined and draw a single blow up frame. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == COMBINE) { + // Only draw out edges when expanding to save time. + combine_count++; + + uint32_t x = BLOCK_X_POSITION(col); + uint32_t y = BLOCK_Y_POSITION(row); + + if (frame_i == 0) { + // Draw entire block for first frame. + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, + FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), + RADIUS_FOR_CORNERS, F_GRID_COLOR); + } else { + graphics_helper_CombineBlocks(x, y, frame_i, BLOCK_LENGTH + (2 * frame_i), + FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), + RADIUS_FOR_CORNERS); + } + } + } + } + + // If no blocks combined, don't waste computation time and exit. + if (combine_count == 0) { + return; + } + + MXC_Delay(MXC_DELAY_MSEC(COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS)); + } + + // Animate the shrink down. + for (int frame_i = BLOCK_SPACING - 1; frame_i >= 0; frame_i--) { + int combine_count = 0; + + // Go through each block that is going to be combined and shrink the block + // one pixel at a time. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == COMBINE) { + combine_count++; + + uint32_t x = BLOCK_X_POSITION(col); + uint32_t y = BLOCK_Y_POSITION(row); + + // Erase outer edges. + MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), y - (frame_i + 1), + BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawVerticalLine(x - (frame_i + 1), y - (frame_i + 1), + BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + + MXC_TFT_DrawHorizontalLine(x - (frame_i + 1), + y + BLOCK_LENGTH + (2 * (frame_i + 1)) - + (frame_i + 1) - 1, + BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + MXC_TFT_DrawVerticalLine( + x + BLOCK_LENGTH + (2 * (frame_i + 1)) - (frame_i + 1) - 1, + y - (frame_i + 1), BLOCK_LENGTH + (2 * (frame_i + 1)), F_GRID_COLOR); + + // Erase corners. + graphics_helper_eraseCorners(x - frame_i, y - frame_i, frame_i, + BLOCK_LENGTH + (2 * (frame_i)), F_GRID_COLOR, + RADIUS_FOR_CORNERS); + + // Draw digit in last frame. + if ((frame_i) == 0) { + // graphics_helper_CombineBlocks(x, y, 0, BLOCK_LENGTH, FORMATTED_RGB_BLOCK_COLOR(grid[row][col]), RADIUS_FOR_CORNERS); + + // Blocks 2 and 4 are the only ones with inverted digit colors because of their block color. + // However, Block 2 will nevber be a combined block. + if (grid[row][col] == 4) { + MXC_TFT_DrawBitmapInvertedMask( + DIGIT_CENTER_X_POSITION(x, grid[row][col]), + DIGIT_CENTER_Y_POSITION(y, grid[row][col]), + BLOCK_DIGIT_PX_WIDTH(grid[row][col]), + BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), + BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, + RGB_BLOCK_COLOR(grid[row][col])); + } else { + MXC_TFT_DrawBitmapMask(DIGIT_CENTER_X_POSITION(x, grid[row][col]), + DIGIT_CENTER_Y_POSITION(y, grid[row][col]), + BLOCK_DIGIT_PX_WIDTH(grid[row][col]), + BLOCK_DIGIT_PX_HEIGHT(grid[row][col]), + BLOCK_DIGIT_PTR(grid[row][col]), RGB565_BLACK, + RGB_BLOCK_COLOR(grid[row][col])); + } + } + } + } + } + + // Add delay so the shrink down is visual to human eye, + // except for the last frame. + if (frame_i != 0) { + MXC_Delay(MXC_DELAY_MSEC(COMBINE_BLOCKS_ANIMATE_MAX_DELAY_MS)); + } + } +} + +void Graphics_EraseBlocks(block_state_t grid_state[4][4], graphics_slide_direction_t direction) +{ + switch (direction) { + case GRAPHICS_SLIDE_DIR_UP: + // Start from bottom row to top row (column order doesn't matter). + // This for-loop keeps track of the localized y position of where the horizontal line is drawn. + // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_y = (BLOCK_LENGTH - 1); p_y >= 0; p_y--) { + // These two for-loops iterate through each block in the + // grid (bottom row to top row, columns direction - don't care) and + // erases a horizontal line (1-pixel wide) + for (int row = 3; row >= 0; row--) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = (p_y < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_y : + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + + while ((dx * dx) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, + BLOCK_LENGTH - + (2 * (RADIUS_FOR_CORNERS - dx)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, + F_EMPTY_BLOCK_COLOR); + } + } + } + } + } + break; + + case GRAPHICS_SLIDE_DIR_DOWN: + // Start from top row to bottom row (column order doesn't matter). + // This for-loop keeps track of the localized y position of where the horizontal line is drawn. + // A horizontal line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_y = 0; p_y < BLOCK_LENGTH; p_y++) { + // These two for-loops iterate through each block in the + // grid (top row to bottom row, columns direction - don't care) and + // erases a horizontal line (1-pixel wide) + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_y < RADIUS_FOR_CORNERS) || + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting x position using pythagorean theorem. + int dx = 0; + int dy = (p_y < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_y : + (p_y >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_y - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + + while ((dx * dx) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dy * dy))) { + dx++; + } + + // No negative horizontal distance. + if (dx > 0) { + dx--; + } + + MXC_TFT_DrawHorizontalLine(x + RADIUS_FOR_CORNERS - dx, y + p_y, + BLOCK_LENGTH - + (2 * (RADIUS_FOR_CORNERS - dx)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawHorizontalLine(x, y + p_y, BLOCK_LENGTH, + F_EMPTY_BLOCK_COLOR); + } + } + } + } + } + break; + + case GRAPHICS_SLIDE_DIR_LEFT: + // Start from right column to left column (row order doesn't matter). + // This for-loop keeps track of the localized x position of where the vertical line is drawn. + // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_x = (BLOCK_LENGTH - 1); p_x >= 0; p_x--) { + // These two for-loops iterate through each block in the + // grid (right column to left column, rows direction - don't care) and + // erases a vertical line (1-pixel wide) + for (int col = 3; col >= 0; col--) { + for (int row = 0; row < 4; row++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem. + int dx = (p_x < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_x : + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + int dy = 0; + + while ((dy * dy) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; + } + + // No negative vertical distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, + BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + } + } + } + } + break; + + case GRAPHICS_SLIDE_DIR_RIGHT: + // Start from left column to right column (row order doesn't matter). + // This for-loop keeps track of the localized x position of where the vertical line is drawn. + // A vertical line of 1-pixel wide, and of color of empty block, is drawn to represent + // the block being erased, and this is done through the entire block. + for (int p_x = 0; p_x < BLOCK_LENGTH; p_x++) { + // These two for-loops iterate through each block in the + // grid (right column to left column, rows direction - don't care) and + // erases a vertical line (1-pixel wide) + for (int col = 0; col < 4; col++) { + for (int row = 0; row < 4; row++) { + if (grid_state[row][col] == ERASE) { + int x = BLOCK_X_POSITION(col); + int y = BLOCK_Y_POSITION(row); + + // Account for rounded corners. + if ((p_x < RADIUS_FOR_CORNERS) || + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS))) { + // Find the starting y position using pythagorean theorem. + int dx = (p_x < RADIUS_FOR_CORNERS) ? + RADIUS_FOR_CORNERS - p_x : + (p_x >= (BLOCK_LENGTH - RADIUS_FOR_CORNERS)) ? + p_x - (BLOCK_LENGTH - RADIUS_FOR_CORNERS - 1) : + 0; + int dy = 0; + + while ((dy * dy) < + ((RADIUS_FOR_CORNERS * RADIUS_FOR_CORNERS) - (dx * dx))) { + dy++; + } + + // No negative vertical distance. + if (dy > 0) { + dy--; + } + + MXC_TFT_DrawVerticalLine(x + p_x, y + RADIUS_FOR_CORNERS - dy, + BLOCK_LENGTH - (2 * (RADIUS_FOR_CORNERS - dy)), + F_EMPTY_BLOCK_COLOR); + + } else { + MXC_TFT_DrawVerticalLine(x + p_x, y, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR); + } + } + } + } + } + + break; + + default: + return; + } +} + +void Graphics_EraseSingleBlock(int row, int col) +{ + // Forgive me for all the math who ever tries to read through the code. + // Focusing on top left corner of the top left block in the grid to help with visualizing the coordinates and calculations. + int x = GRID_OFFSET_X + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * col); + int y = GRID_OFFSET_Y + GRID_SPACING + BLOCK_SPACING + ((BLOCK_LENGTH + BLOCK_SPACING) * row); + + MXC_TFT_DrawRoundedRect(x, y, BLOCK_LENGTH, BLOCK_LENGTH, F_EMPTY_BLOCK_COLOR, + RADIUS_FOR_CORNERS, F_GRID_COLOR); +} + +void Graphics_SetTime(uint32_t total_seconds) +{ + // Convert total time to minutes:seconds (mm:ss) + int digit0, digit1, digit2, digit3; + + // The max possible seconds is 5999, which yields 99m:59s. + if (total_seconds >= 5999) { + digit0 = 9; + digit1 = 5; + digit2 = 9; + digit3 = 9; + } else { + digit0 = (total_seconds % 10); + digit1 = ((total_seconds - digit0) % 60) / 10; + + digit2 = ((total_seconds - (digit1 * 10) - digit0) / 60) % 10; + digit3 = ((total_seconds - (digit1 * 10) - digit0) / 60) / 10; + } + + // Update timer on display. + MXC_TFT_DrawRect(TIME_DIGIT0_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), + RGB565_BLACK, RGB565_WHITE); + + // Don't waste time on re-writing the same digits. + // Changes every 10 seconds. + if (prev_timer_digit1 != digit1) { + MXC_TFT_DrawRect(TIME_DIGIT1_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), + RGB565_BLACK, RGB565_WHITE); + prev_timer_digit1 = digit1; + } + + // Changes every 60 seconds. + if (prev_timer_digit2 != digit2) { + MXC_TFT_DrawRect(TIME_DIGIT2_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), + RGB565_BLACK, RGB565_WHITE); + prev_timer_digit2 = digit2; + } + + // Changes every 600 seoncds. + if (prev_timer_digit3 != digit3) { + MXC_TFT_DrawRect(TIME_DIGIT3_OFFSET_X(TIME_DIGIT_WIDTH), TIME_OFFSET_Y, TIME_DIGIT_WIDTH, + GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(TIME_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), + TIME_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), + RGB565_BLACK, RGB565_WHITE); + prev_timer_digit3 = digit3; + } +} + +void Graphics_UpdateMovesCount(uint32_t moves_count) +{ + // Convert total time to minutes:seconds (mm:ss) + int digit0, digit1, digit2, digit3; + + // The max possible seconds is 5999, which yields 99m:59s. + if (moves_count >= 9999) { + digit0 = 9; + digit1 = 9; + digit2 = 9; + digit3 = 9; + } else { + digit0 = (moves_count % 10); + digit1 = ((moves_count / 10) % 10); + digit2 = ((moves_count / 100) % 10); + digit3 = ((moves_count / 1000) % 10); + } + + // Update timer on display. + MXC_TFT_DrawRect(MOVES_DIGIT0_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT0_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit0)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit0), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit0), + RGB565_BLACK, RGB565_WHITE); + + // Don't waste time on re-writing the same digits. + // Changes every 10 seconds. + if (prev_moves_digit1 != digit1) { + MXC_TFT_DrawRect(MOVES_DIGIT1_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT1_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit1)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit1), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit1), + RGB565_BLACK, RGB565_WHITE); + prev_moves_digit1 = digit1; + } + + // Changes every 60 seconds. + if (prev_moves_digit2 != digit2) { + MXC_TFT_DrawRect(MOVES_DIGIT2_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT2_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit2)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit2), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit2), + RGB565_BLACK, RGB565_WHITE); + prev_moves_digit2 = digit2; + } + + // Changes every 600 seoncds. + if (prev_moves_digit3 != digit3) { + MXC_TFT_DrawRect(MOVES_DIGIT3_OFFSET_X(MOVES_DIGIT_WIDTH), MOVES_DIGITS_OFFSET_Y, + MOVES_DIGIT_WIDTH, GAME_TEXT_DIGITS_HEIGHT, F_BACKGROUND_COLOR); + MXC_TFT_DrawBitmapInvertedMask(MOVES_DIGIT3_OFFSET_X(GAME_TEXT_DIGIT_WIDTH(digit3)), + MOVES_DIGITS_OFFSET_Y, GAME_TEXT_DIGIT_WIDTH(digit3), + GAME_TEXT_DIGITS_HEIGHT, GAME_TEXT_DIGIT_PTR(digit3), + RGB565_BLACK, RGB565_WHITE); + prev_moves_digit3 = digit3; + } +} + +void Graphics_DisplayGameOver(void) +{ + MXC_TFT_DrawBitmap(GAME_OVER_BOX_OFFSET_X, GAME_OVER_BOX_OFFSET_Y, GAME_OVER_BOX_WIDTH, + GAME_OVER_BOX_HEIGHT, game_over); +} + +void Graphics_DisplayYouWin(void) +{ + MXC_TFT_DrawBitmap(YOU_WIN_BOX_OFFSET_X, YOU_WIN_BOX_OFFSET_Y, YOU_WIN_BOX_WIDTH, + YOU_WIN_BOX_HEIGHT, you_win); +} diff --git a/Examples/MAX32655/Demo_2048/RISCV/.cproject b/Examples/MAX32655/Demo_2048/RISCV/.cproject new file mode 100644 index 00000000000..8d841e30794 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.cproject @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/RISCV/.project b/Examples/MAX32655/Demo_2048/RISCV/.project new file mode 100644 index 00000000000..e36a7fd5918 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.project @@ -0,0 +1,26 @@ + + + RISCV + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32655/Demo_2048/RISCV/.settings/language.settings.xml b/Examples/MAX32655/Demo_2048/RISCV/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..68775a2fce2 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=RISCV +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32655 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/README.md b/Examples/MAX32655/Demo_2048/RISCV/.vscode/README.md new file mode 100644 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/c_cpp_properties.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/flash.gdb b/Examples/MAX32655/Demo_2048/RISCV/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/launch.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json new file mode 100644 index 00000000000..8ca5ce8ab8c --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/settings.json @@ -0,0 +1,82 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32655", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"${config:target}.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ], + "files.associations": { + "ipc_defines.h": "c" + } +} + diff --git a/Examples/MAX32655/Demo_2048/RISCV/.vscode/tasks.json b/Examples/MAX32655/Demo_2048/RISCV/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32655/Demo_2048/RISCV/Makefile b/Examples/MAX32655/Demo_2048/RISCV/Makefile new file mode 100644 index 00000000000..717125621b6 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32655 +TARGET_UC := MAX32655 +TARGET_LC := max32655 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32655/Demo_2048/RISCV/README.md b/Examples/MAX32655/Demo_2048/RISCV/README.md new file mode 100644 index 00000000000..0bc3ab69870 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/README.md @@ -0,0 +1,70 @@ +## Description + +This example demonstrates running the 2048 game on both ARM and RISC-V cores on the MAX32655. + +The RISC-V core, running at 60MHz (ISO), handles the controller (keyboard) user inputs and the main 2048 game logic. + +The ARM core, running at 100MHz (IPO), keeps track of the timer (RTC) and handles the display graphics after the RISC-V core finishes handling the main game logic. + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +This project only supports the MAX32655EVKIT as it has the 320x240 TFT Display. + +## Required Connections + +If using the MAX32655EVKIT (EvKit\_V1): +- Connect a USB cable between the PC and the CN1 (USB/PWR) connector. +- Connect pins JP4(RX_SEL) and JP5(TX_SEL) to RX0 and TX0 header. +- Open an terminal application on the PC and connect to the EV kit's console UART at 2000000, 8-N-1. +- Close jumper JP2 (LED0 EN). +- Close jumper JP3 (LED1 EN). + +## Expected Output + +``` +******************************************************************************* +ARM: Starting ARM Initialization. + +ARM: Semaphore is not busy - with previous value: 1 + +ARM: Starting RISC-V core and handing off major UART0 Control to RISC-V. + +RISC-V: Starting RISC-V Initialization. + +RISC-V: Semaphore is not busy - with previous value: 1 + +RISC-V: Finished startup. Main UART0 control is handled by RISC-V now. + +RISC-V: Starting Controller and Game + + + + + + + + + + + | | | + | | | + | | | +----------------------------------- + | | | + | | | + | | | +----------------------------------- + | | | + | | 0002 | + | | | +----------------------------------- + | | | + | | | + | | | +``` diff --git a/Examples/MAX32655/Demo_2048/RISCV/RISCV.launch b/Examples/MAX32655/Demo_2048/RISCV/RISCV.launch new file mode 100644 index 00000000000..66a72794ebc --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/RISCV.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h b/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h new file mode 100644 index 00000000000..51453a4c21d --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/controller.h @@ -0,0 +1,52 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_CONTROLLER_H_ +#define EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_CONTROLLER_H_ + +/* **** Includes **** */ + +#include +#include "mxc_device.h" +#include "uart.h" + +/* **** Definitions **** */ + +/* **** Function Prototypes **** */ + +/** + * @brief Initialize the user controller (PC Keyboard). + * - Use the system clock for UART which should be the IPO (fastest). + * + * @param uart Select which UART port the controller is connected to. + * @param baud Select the highest baud rate that the device can support. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud); + +/** + * @brief Start the Controller and listen for any keypresses. + * + * @param req UART request struct needed for transactions. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int Controller_Start(mxc_uart_req_t *req); + +#endif // EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_CONTROLLER_H_ diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h new file mode 100644 index 00000000000..45222b36eb4 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/game_2048.h @@ -0,0 +1,107 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_GAME_2048_H_ +#define EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_GAME_2048_H_ + +/* **** Includes **** */ + +#include + +/* **** Definitions **** */ + +/** + * This enum is used to keep track of which direction the blocks will slide to + * for the main logic to handle. + * IMPORTANT: Sync these directions with the ARM core. + */ +typedef enum { + INPUT_UP = 0, + INPUT_DOWN = 1, + INPUT_LEFT = 2, + INPUT_RIGHT = 3, +} input_direction_t; + +/** + * These enums help keep track what blocks were deleted from previous grid, and + * combined at new grid. + * IMPORTANT: Sync these commands with the ARM core. + */ +typedef enum { EMPTY = 0, ERASE = 1, COMBINE = 2, UNMOVED = 3 } block_state_t; + +/** + * These enums help track the state of the end game.. + * IMPORTANT: Sync these commands with the ARM core. + */ +typedef enum { + IN_PROGRESS = 0, + GAME_OVER = 1, + WINNER = 2, +} game_state_t; + +/* **** Function Prototypes **** */ + +/** + * @brief Initializes the game logic for 2048. + * + * @param new_block_location_idx Pointer which holds 1-D index location of where + * the starting blcok would spawn. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int Game_2048_Init(uint8_t *new_block_location_idx); + +/** + * @brief Get the state of the game (in progress, game over, or win). + * + * @return State of game.. + */ +game_state_t Game_2048_CheckState(void); + +/** + * @brief Update the grid. + * + * @param direction The direction that all the blocks slide to. + * @param new_block_1D_idx Pointer which holds 1-D index location of where + * the new blcok would spawn. + * + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +bool Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx); + +/** + * @brief Prints the grid to the terminal. + */ +void Game_2048_PrintGrid(void); + +/** + * @brief Gets the current grid. + * + * @param grid Pointer to 2-D array to hold the current grid. + */ +void Game_2048_GetGrid(uint32_t grid[4][4]); + +/** + * @brief Gets the current grid state which tells you what blocks + * were deleted, unmoved, or combined. + * + * @param grid Pointer to 2-D array to hold the current grid state. + */ +void Game_2048_GetGridState(uint8_t grid_state[4][4]); + +#endif // EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_GAME_2048_H_ diff --git a/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h new file mode 100644 index 00000000000..38447ce34df --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/inc/ipc_defines.h @@ -0,0 +1,61 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_IPC_DEFINES_H_ +#define EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_IPC_DEFINES_H_ + +/* **** Includes **** */ + +#include + +/* **** Definitions **** */ + +// These should match with the ARM core's copy of ipc_defines.h + +/// Semaphores +// Should never reach here +#if (MAILBOX_SIZE == 0) +#error "Mailbox size is 0." +#endif + +// Keep track for Semaphore peripheral. +#define SEMA_IDX_ARM (0) +#define SEMA_IDX_RISCV (1) + +#define MAILBOX_OVERHEAD (2 * sizeof(uint16_t)) +#define MAILBOX_PAYLOAD_LEN (MAILBOX_SIZE - MAILBOX_OVERHEAD) +typedef struct { + uint16_t readLocation; + uint16_t writeLocation; +#if (MAILBOX_SIZE == 0) + uint8_t payload[1]; +#else + uint8_t payload[MAILBOX_PAYLOAD_LEN]; +#endif +} mxcSemaBox_t; + +#define MAILBOX_MAIN_GRID_IDX (0) // Main grid indices are from 0 to (16 blocks * 4 bytes) - 1. +#define MAILBOX_MAIN_GRID_STATE_IDX \ + (4 * 16) // Indices are from (4 bytes * 16) to ((4 bytes * 16) + (1 byte * 16))) +#define MAILBOX_KEYPRESS_IDX ((4 * 16) + (1 * 16)) // All indices before are for the main grids. +#define MAILBOX_IF_BLOCK_MOVED_IDX (MAILBOX_KEYPRESS_IDX + 1) +#define MAILBOX_NEW_BLOCK_LOCATION_IDX (MAILBOX_IF_BLOCK_MOVED_IDX + 1) +#define MAILBOX_GAME_STATE_IDX (MAILBOX_NEW_BLOCK_LOCATION_IDX + 1) +#define MAILBOX_MOVES_COUNT_IDX (MAILBOX_GAME_STATE_IDX + 1) + +#endif // EXAMPLES_MAX32655_DEMO_2048_RISCV_INC_IPC_DEFINES_H_ diff --git a/Examples/MAX32655/Demo_2048/RISCV/main.c b/Examples/MAX32655/Demo_2048/RISCV/main.c new file mode 100644 index 00000000000..931d232a49c --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/main.c @@ -0,0 +1,422 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief RISCV Portion of the 2048 Game. + * @details + */ + +/***** Includes *****/ +#include +#include +#include +#include + +// MSDK-provided Drivers +#include "mxc_delay.h" +#include "mxc_device.h" +#include "board.h" +#include "led.h" +#include "pb.h" +#include "sema.h" + +// Application Libraries +#include "controller.h" +#include "game_2048.h" +#include "ipc_defines.h" + +/***** Definitions *****/ + +#if DEV_MODE_TRACE +#define PRINT(...) printf(__VA_ARGS__) +#else +// Don't print anything +#define PRINT(...) +#endif + +/// Controller Settings. +// Change UART speeds here, if needed. 115200 was more than enough, but users +// have the option to increase the speed here. +// UART speed up is set at the beginning of BOTH ARM and RISC-V main code +// because SystemInit for both cores default the UART baud rate to +// 115200. +#define CONTROLLER_UART_BAUD (115200) + +/* **** Globals **** */ +// Defined in sema_reva.c +extern mxcSemaBox_t *mxcSemaBox0; // ARM writes, RISCV reads +extern mxcSemaBox_t *mxcSemaBox1; // ARM reads, RISCV writes + +// Rename boxes for readability. +#define SEMA_RISCV_MAILBOX mxcSemaBox0 +#define SEMA_ARM_MAILBOX mxcSemaBox1 + +mxc_uart_req_t CONTROLLER_REQ; +uint8_t CONTROLLER_KEYPRESS; +volatile bool KEYPRESS_READY = false; +uint8_t KEYPRESS_INPUT_DIR; + +uint32_t RISCV_GRID_COPY[4][4] = { 0 }; +uint8_t RISCV_GRID_COPY_STATE[4][4] = { 0 }; + +uint32_t MOVES_COUNT = 0; + +// Select Console UART instance. +mxc_uart_regs_t *CONTROLLER_UART = MXC_UART0; + +/***** Functions *****/ + +void CONTROLLER_KEYPRESS_Callback(mxc_uart_req_t *req, int cb_error) +{ + int error; + + // No keypress if error detected. + if (cb_error != E_NO_ERROR) { + PRINT("RISCV: Error listening to keypress: %d\n", cb_error); + PRINT("RISCV: Try again.\n"); + + CONTROLLER_KEYPRESS = 0; // NULL character + KEYPRESS_READY = false; + + MXC_UART_ClearRXFIFO(MXC_UART0); + + // Listen for next keypress. + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); + LED_On(LED_RED); + } + + return; + } + + // User can add additional directional key switches here. + switch (CONTROLLER_KEYPRESS) { + case 'a': + KEYPRESS_INPUT_DIR = INPUT_LEFT; + KEYPRESS_READY = true; + break; + + case 'd': + KEYPRESS_INPUT_DIR = INPUT_RIGHT; + KEYPRESS_READY = true; + break; + + case 'w': + KEYPRESS_INPUT_DIR = INPUT_UP; + KEYPRESS_READY = true; + break; + + case 's': + KEYPRESS_INPUT_DIR = INPUT_DOWN; + KEYPRESS_READY = true; + break; + + default: + KEYPRESS_READY = false; + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Invalid Keypress: %c\n", CONTROLLER_KEYPRESS); + } + } + + PRINT("RISC-V: Keypress: %c - 0x%02x Error: %d\n", CONTROLLER_KEYPRESS, CONTROLLER_KEYPRESS, + cb_error); +} + +// Must grab grid space before calling this function to have the latest +// grid state. +void PRINT_GRID(void) +{ + // Imitate the grid is refreshing on terminal. + PRINT("\n\n\n\n\n\n\n\n\n\n"); + + for (int row = 0; row < 4; row++) { + PRINT(" | | | \n"); + + for (int col = 0; col < 4; col++) { + if (RISCV_GRID_COPY[row][col] != 0) { + PRINT(" %04d ", RISCV_GRID_COPY[row][col]); + } else { + PRINT(" "); + } + + // Only print border 3 times. + if (col < 3) { + PRINT("|"); + } + } + + PRINT("\n | | | \n"); + + // Only print the row border 3 times. + if (row < 3) { + PRINT("-----------------------------------\n"); + } + } +} + +void PRINT_GRID_STATE(void) +{ + Game_2048_GetGridState(RISCV_GRID_COPY_STATE); + + // Imitate the grid is refreshing on terminal. + PRINT("\n\n\n\n\n\n\n\n\n\n"); + + for (int row = 0; row < 4; row++) { + PRINT(" | | | \n"); + + for (int col = 0; col < 4; col++) { + if (RISCV_GRID_COPY_STATE[row][col] != 0) { + PRINT(" %02d ", RISCV_GRID_COPY_STATE[row][col]); + } else { + PRINT(" "); + } + + // Only print border 3 times. + if (col < 3) { + PRINT("|"); + } + } + + PRINT("\n | | | \n"); + + // Only print the row border 3 times. + if (row < 3) { + PRINT("-----------------------------------\n"); + } + } +} + +// Must grab grid space before calling this function to have the latest +// grid state. +void SendGridToARMCore(void) +{ + int i = MAILBOX_MAIN_GRID_IDX; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY[row][col] >> (8 * 0)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i + 1] = (RISCV_GRID_COPY[row][col] >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i + 2] = (RISCV_GRID_COPY[row][col] >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[i + 3] = (RISCV_GRID_COPY[row][col] >> (8 * 3)) & 0xFF; + + i += 4; + } + } + + i = MAILBOX_MAIN_GRID_STATE_IDX; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + SEMA_ARM_MAILBOX->payload[i] = (RISCV_GRID_COPY_STATE[row][col] >> (8 * 0)) & 0xFF; + i++; + } + } +} + +inline void SendKeypressToARMCore(void) +{ + SEMA_ARM_MAILBOX->payload[MAILBOX_KEYPRESS_IDX] = (CONTROLLER_KEYPRESS >> (8 * 0)) & 0xFF; +} + +void SendNewBlockIndexToARMCore(uint8_t *new_block_idx, uint8_t did_block_move_or_is_init) +{ + SEMA_ARM_MAILBOX->payload[MAILBOX_IF_BLOCK_MOVED_IDX] = (did_block_move_or_is_init >> (8 * 0)) & + 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_NEW_BLOCK_LOCATION_IDX] = (*new_block_idx >> (8 * 0)) & 0xFF; +} + +void SendGameStateToARMCore(game_state_t state) +{ + SEMA_ARM_MAILBOX->payload[MAILBOX_GAME_STATE_IDX] = (state >> (8 * 0)) & 0xFF; +} + +void SendMovesCountToARMCore(uint32_t moves_count) +{ + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX] = (moves_count >> (8 * 0)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 1] = (moves_count >> (8 * 1)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 2] = (moves_count >> (8 * 2)) & 0xFF; + SEMA_ARM_MAILBOX->payload[MAILBOX_MOVES_COUNT_IDX + 3] = (moves_count >> (8 * 3)) & 0xFF; +} + +// ***************************************************************************** +int main(void) +{ + int error; + int state; + + // Location of new block represented as an index for a 1-D array. + // (0-15) instead of represented as a coordinate (row, col) for + // easier and quicker transfer into mailbox. + uint8_t new_block_idx_location = 0; + + // Speed up UART0 (Console) baud rate as the controller and console share the same port. + // Plus, Console UART gets reverted to default speed (115200) during SystemInit() during both + // ARM and RISC-V SystemInit(). + error = Controller_Init(CONTROLLER_UART, CONTROLLER_UART_BAUD); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error speeding up baud rate: %d\n", error); + LED_On(LED_RED); + while (1) {} + } + + // Set up Controller Request Struct. + CONTROLLER_REQ.uart = CONTROLLER_UART; + CONTROLLER_REQ.txData = NULL; + CONTROLLER_REQ.txLen = 0; + CONTROLLER_REQ.rxData = &CONTROLLER_KEYPRESS; + CONTROLLER_REQ.rxLen = 1; // Handle 1 keypress at a time + CONTROLLER_REQ.callback = CONTROLLER_KEYPRESS_Callback; + + // NOTE: Printing to terminal is done on UART0 which both the ARM and RISC-V core must share. + // Must be mindful when to use PRINT (printf) for RISC-V side. + PRINT("RISC-V: Starting RISC-V Initialization.\n\n"); + + MXC_SEMA_Init(); + + error = MXC_SEMA_CheckSema(SEMA_IDX_RISCV); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Semaphore for RISC-V core is busy: %d\n", error); + LED_On(LED_GREEN); + while (1) {} + } + + error = MXC_SEMA_GetSema(SEMA_IDX_RISCV); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Semaphore is busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_RISCV]); + LED_On(LED_RED); + while (1) {} + } else { + PRINT("RISC-V: Semaphore is not busy - with previous value: %d\n\n", + MXC_SEMA->semaphores[SEMA_IDX_RISCV]); + } + + // Initialize mailboxes between ARM and RISCV cores. + MXC_SEMA_InitBoxes(); + + // RISCV startup and mailbox initialization is finished. Signal ARM core to continue. + PRINT("RISC-V: Finished startup. Main UART0 control is handled by RISC-V now.\n\n"); + MXC_SEMA_FreeSema(SEMA_IDX_ARM); + + PRINT("RISC-V: Starting Controller and Game\n"); + + // Start Controller. + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error starting the controller: %d\n", error); + LED_On(LED_RED); + while (1) {} + } + + error = Game_2048_Init(&new_block_idx_location); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error starting game: %d\n", error); + LED_On(LED_RED); + while (1) {} + } + + // Send starting grid to ARM core. + // This function must be called before PRINT_GRID() and SendGridToARMCore() + // functions to grab the latest grid state. + Game_2048_GetGrid(RISCV_GRID_COPY); + + PRINT_GRID(); + + SendGridToARMCore(); + + SendNewBlockIndexToARMCore(&new_block_idx_location, true); + + SendGameStateToARMCore(Game_2048_CheckState()); + + // Signal ARM core to display initial grid. + MXC_SEMA_FreeSema(SEMA_IDX_ARM); + + // Wait for ARM core to finish displaying the starting grid. + while (MXC_SEMA_CheckSema(SEMA_IDX_RISCV) != E_NO_ERROR) {} + + while (1) { + // Wait for keypress. + while (KEYPRESS_READY == false) {} + + // Make sure the ARM core is finished displaying. + while (MXC_SEMA_CheckSema(SEMA_IDX_RISCV) != E_NO_ERROR) {} + MXC_SEMA_GetSema(SEMA_IDX_RISCV); + + input_direction_t dir = KEYPRESS_INPUT_DIR; + + state = Game_2048_UpdateGrid(dir, &new_block_idx_location); + if (state == true) { + PRINT("RISC-V: Blocks moved.\n"); + SendMovesCountToARMCore(++MOVES_COUNT); + } else { + PRINT("RISC-V: Blocks did not move.\n"); + } + + // Get the state of the game after finishing latest move. + game_state_t game_state = Game_2048_CheckState(); + + // These functions must be called before PRINT_GRID() and SendGridToARMCore() + // functions to grab the latest grid state. + Game_2048_GetGrid(RISCV_GRID_COPY); + Game_2048_GetGridState(RISCV_GRID_COPY_STATE); + + PRINT_GRID(); + + SendGridToARMCore(); + + SendKeypressToARMCore(); + + SendGameStateToARMCore(game_state); + + SendNewBlockIndexToARMCore(&new_block_idx_location, state); + + KEYPRESS_READY = false; + + // Check if game is finished. + if (game_state == WINNER) { + // Signal ARM to finish final display update. + MXC_SEMA_FreeSema(SEMA_IDX_ARM); + + PRINT("RISCV: Congratulations, you win!\n"); + PRINT("RISCV: Ending game.\n"); + + while (1) {} + } else if (game_state == GAME_OVER) { + // Signal ARM to finish final display update. + MXC_SEMA_FreeSema(SEMA_IDX_ARM); + + PRINT("RISCV: Game Over. Nice try! Better luck next time.\n"); + PRINT("RISCV: Ending game.\n"); + while (1) {} + } + + // Listen for next keypress. + MXC_UART_ClearRXFIFO(MXC_UART0); + + error = Controller_Start(&CONTROLLER_REQ); + if (error != E_NO_ERROR) { + PRINT("RISC-V: Error listening for next controller keypress: %d\n", error); + LED_On(LED_RED); + while (1) {} + } + + // Signal ARM to update display. + MXC_SEMA_FreeSema(SEMA_IDX_ARM); + } +} diff --git a/Examples/MAX32655/Demo_2048/RISCV/project.mk b/Examples/MAX32655/Demo_2048/RISCV/project.mk new file mode 100644 index 00000000000..ec7e2cc78eb --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/project.mk @@ -0,0 +1,29 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Add your config here! + +# Build this project for the RISC-V core +# Note: The RISCV portion of the game is not built on its own. +# Check the ARM project's project.mk file. +RISCV_CORE=1 + +IPATH += ./inc +VPATH += ./src + +DEV_MODE_TRACE = 1 +ifeq ($(DEV_MODE_TRACE), 1) +PROJ_CFLAGS += -DDEV_MODE_TRACE=1 +endif + +MAILBOX_SIZE = 226 + +ifeq ($(BOARD),FTHR_Apps_P1) +$(error ERR_NOTSUPPORTED: This example requires a TFT display, therefore it's not supported on the MAX32650FTHR) +endif diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/controller.c b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c new file mode 100644 index 00000000000..c7ea6f3365c --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/src/controller.c @@ -0,0 +1,75 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +#include +#include "mxc_device.h" +#include "uart.h" + +/* **** Definitions **** */ + +/* **** Globals **** */ + +static mxc_uart_regs_t *Controller_UART; + +/* **** Functions **** */ + +void UART0_IRQHandler(void) +{ + MXC_UART_AsyncHandler(Controller_UART); +} + +int Controller_Init(mxc_uart_regs_t *uart, uint32_t baud) +{ + int error; + + error = MXC_UART_Shutdown(uart); + if (error != E_NO_ERROR) { + return error; + } + + // Set up System UART interrupt for Controller. + // Clear if Console UART was previously set up in SystemInit. + NVIC_ClearPendingIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); + NVIC_DisableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); + NVIC_EnableIRQ(MXC_UART_GET_IRQ((MXC_UART_GET_IDX(uart)))); + + // This will re-initialize the console UART since the controller + // and console share the same UART port. + error = MXC_UART_Init(uart, baud, MXC_UART_APB_CLK); + if (error != E_NO_ERROR) { + return error; + } + + Controller_UART = uart; + + return E_NO_ERROR; +} + +int Controller_Start(mxc_uart_req_t *req) +{ + int error; + + error = MXC_UART_TransactionAsync(req); + if (error != E_NO_ERROR) { + return error; + } + + return E_NO_ERROR; +} diff --git a/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c new file mode 100644 index 00000000000..e27a9424b99 --- /dev/null +++ b/Examples/MAX32655/Demo_2048/RISCV/src/game_2048.c @@ -0,0 +1,741 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/* **** Includes **** */ + +#include +#include +#include +#include "mxc_device.h" +#include "trng.h" + +#include "game_2048.h" + +/* **** Definitions **** */ + +#if DEV_MODE_TRACE +#define PRINT(...) printf(__VA_ARGS__) +#else +// Don't print anything +#define PRINT(...) +#endif + +#define COLUMN_SUM(col) \ + ((MAIN_2048_GRID[0][col] + MAIN_2048_GRID[1][col] + MAIN_2048_GRID[2][col] + \ + MAIN_2048_GRID[3][col])) +#define ROW_SUM(row) \ + ((MAIN_2048_GRID[row][0] + MAIN_2048_GRID[row][1] + MAIN_2048_GRID[row][2] + \ + MAIN_2048_GRID[row][3])) + +/* **** Globals **** */ + +// Main 4x4 2048 grid that is used to save current state of game. +// Did not choose to create defines for the size of the grid because +// 2048 is played on 4x4 grid. +// When using the grid as a single dimensional array, these are the +// the indices assigned to each of the 16 squares. +// 0 | 1 | 2 | 3 +// ---|---|---|--- +// 4 | 5 | 6 | 7 +// ---|---|---|--- +// 8 | 9 | a | b +// ---|---|---|--- +// c | d | e | f +static uint32_t MAIN_2048_GRID[4][4]; +static block_state_t PREV_2048_GRID_STATE[4][4]; + +static game_state_t GAME_STATE; + +static uint16_t AVAILABLE_EMPTY_BLOCKS_NUM; + +/* **** Functions **** */ + +/** + * Must have TRNG initialized first before calling this function. + * + * @param is_init True/False if a new block is added during + * initialization when grid is first created. + * @param new_block_1D_idx_location Pointer to hold the index (0-15) of the new + * block location. + * + * @return If true (non-zero value), new block added. If false (zero), + * game over. + */ +static bool add_new_block(bool is_init, uint8_t *new_block_1D_idx_location) +{ + uint8_t block_2_or_4; + uint32_t open_space_idx; + uint32_t available_open_spaces = 0; + uint8_t open_space_count = 0; + + // If at the start of the new program, start with the 2 block. + if (is_init == true) { + block_2_or_4 = 2; + } else { + // Select whether a 2 or 4 block will be placed. + // Add more weight to 2. + if (MXC_TRNG_RandomInt() % 3) { // 1 or 2 + block_2_or_4 = 2; + } else { // 0 + block_2_or_4 = 4; + } + } + + // Find available spaces in the grid by representing the grid (2-D array) + // as a 1-D array. + // Locations of main Locations of main + // grid represented grid represented as + // as indices for coordinates (row,col) + // 1-D array: for 2-D array: + // 0 | 1 | 2 | 3 (0,0) | (0,1) | (0,2) | (0,3) + // ---|---|---|--- ------|-------|-------|------ + // 4 | 5 | 6 | 7 (1,0) | (1,1) | (1,2) | (1,3) + // ---|---|---|--- ======> ------|-------|-------|------ + // 8 | 9 | a | b (2,0) | (2,1) | (2,2) | (2,3) + // ---|---|---|--- ------|-------|-------|------ + // c | d | e | f (3,0) | (3,1) | (3,2) | (3,3) + for (int i = 0; i < 16; i++) { + if (MAIN_2048_GRID[i / 4][i % 4] == 0) { + available_open_spaces += 1; + } + } + + // This should be the only place that this variable is written to. + AVAILABLE_EMPTY_BLOCKS_NUM = available_open_spaces; + + // No available space, game over. + if (available_open_spaces == 0) { + return false; + } + + open_space_idx = (MXC_TRNG_RandomInt() % available_open_spaces); + + // Fill the "n-th" available open space where n is variable "open_space_idx". + // We have the 1-D array index and need to convert to 2-D array coordinate location. + int idx = 0; + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (MAIN_2048_GRID[row][col] == 0) { + if (open_space_count == open_space_idx) { + // Found "n-th" available open space, update grid. + MAIN_2048_GRID[row][col] = block_2_or_4; + *new_block_1D_idx_location = idx; + + // Decrement as a new block was just filled into the function. + AVAILABLE_EMPTY_BLOCKS_NUM--; + return true; + } + + open_space_count++; + } + idx++; + } + } + + // Added for build warning. + // Shouldn't reach here as there's a check earlier in the function that checks if there + // are any available spaces to save time from iterating through the for loop. + return false; +} + +int Game_2048_Init(uint8_t *new_block_location_idx) +{ + int error; + + // Clear the grid. + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 4; j++) { + MAIN_2048_GRID[i][j] = 0; + } + } + + // Initialize TRNG that is used to randomly select a 2 or 4 block in the grid. + error = MXC_TRNG_Init(); + if (error != E_NO_ERROR) { + return error; + } + + // Should never reach here since we cleared the grid earlier in the function. + if (add_new_block(true, new_block_location_idx) == false) { + return E_BAD_STATE; + } + + GAME_STATE = IN_PROGRESS; + + return E_NO_ERROR; +} + +inline static bool row_logic_left(void) +{ + bool blocks_moved = false; + + for (int row = 0; row < 4; row++) { + // Don't waste processing time if row is empty by checking if sum of all blocks in row is 0. + if (ROW_SUM(row) == 0) { + continue; + } + + uint32_t prev_row[4] = { 0 }; + uint32_t temp_row[4] = { 0 }; + int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. + + // Get all valid blocks in column to help with same-value pair logic. + for (int col = 0; col < 4; col++) { // Start at left of main row. + prev_row[col] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_row[temp_col_num] = MAIN_2048_GRID[row][col]; + + temp_col_num += 1; + + // Clear valid block on main grid for temp_row to write the updated + // row into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_col_num == 1) { + MAIN_2048_GRID[row][0] = temp_row[0]; + + // Check if the single block moved left. + if (prev_row[0] != MAIN_2048_GRID[row][0]) { + blocks_moved = true; + + // Represent the state of the original block location as deleted for + // display. + for (int col = 3; col >= 0; col--) { + if (prev_row[col] != 0) { + PREV_2048_GRID_STATE[row][col] = ERASE; + break; + } + } + } else { + PREV_2048_GRID_STATE[row][0] = UNMOVED; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated row to main grid. + int main_grid_col = 0; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_col = 0; t_col < 4; t_col++) { + if (temp_row[t_col] == 0 || t_col >= temp_col_num) { + // Reached end of valid blocks in row. + break; + } + + // Write to main grid. + MAIN_2048_GRID[row][main_grid_col] = temp_row[t_col]; + + // Prevent illegal memory reads past main array size when at last column. + if (t_col < 3) { + // If same-value pair detected, combine then re-update the same block in main grid. + if (temp_row[t_col] == temp_row[t_col + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[row][main_grid_col] = (temp_row[t_col] * 2); + + PREV_2048_GRID_STATE[row][main_grid_col] = COMBINE; + + // Because a same-value pair was combined at index "col" and "col + 1", + // increment the col so that the next iteration of the for loop + // will start at "col + 2" in the temp_row. + t_col += 1; + } + } + + main_grid_col += 1; + } + + // Check if any blocks moved starting from right to left, and keep track of what blocks were moved + // to delete on the display. + for (int col = 3; col >= 0; col--) { + if (prev_row[col] != MAIN_2048_GRID[row][col]) { + blocks_moved = true; + + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = ERASE; + } + } else if ((prev_row[col] != 0) && (prev_row[col] == MAIN_2048_GRID[row][col])) { + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = UNMOVED; + } + } + } + } + + return blocks_moved; +} + +inline static bool row_logic_right(void) +{ + bool blocks_moved = false; + + for (int row = 0; row < 4; row++) { + // Don't waste processing time if row is empty by checking if sum of all blocks in row is 0. + if (ROW_SUM(row) == 0) { + continue; + } + + uint32_t prev_row[4] = { 0 }; + uint32_t temp_row[4] = { 0 }; + int temp_col_num = 0; // Also tracks how many valid blocks there are in a row. + + // Get all valid blocks to help with same-value pair logic. + for (int col = 3; col >= 0; col--) { // Start at right of main row. + prev_row[col] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_row[temp_col_num] = MAIN_2048_GRID[row][col]; + + temp_col_num += 1; + + // Clear valid block on main grid for temp_row to write the updated + // row into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_col_num == 1) { + // Don't forget, starting at end of main row, but temp_row is still in order (left to right). + MAIN_2048_GRID[row][3] = temp_row[0]; + + // Check if the single block moved right. + if (prev_row[3] != MAIN_2048_GRID[row][3]) { + blocks_moved = true; + + // Represent the state of the original block location as deleted. + for (int col = 0; col < 4; col++) { + if (prev_row[col] != 0) { + PREV_2048_GRID_STATE[row][col] = ERASE; + break; + } + } + } else { + PREV_2048_GRID_STATE[row][3] = UNMOVED; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated row to main grid. + int main_grid_col = 3; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_col = 0; t_col < 4; t_col++) { + if (temp_row[t_col] == 0 || t_col >= temp_col_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[row][main_grid_col] = temp_row[t_col]; + + // Prevent illegal memory reads past main array size when at last column. + if (t_col < 3) { + // If same-value pair detected, combine then re-update the same block in main grid. + if (temp_row[t_col] == temp_row[t_col + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[row][main_grid_col] = (temp_row[t_col] * 2); + + PREV_2048_GRID_STATE[row][main_grid_col] = COMBINE; + + // Because a same-value pair was combined at index "col" and "col + 1", + // increment the col so that the next iteration of the for loop + // will start at "col + 2" in the temp_row. + t_col += 1; + } + } + + main_grid_col -= 1; + } + + // Check if any blocks moved starting from left to right, and keep track of what blocks were moved + // to delete on the display. + for (int col = 0; col < 4; col++) { + // Don't forget direction, start at end. + if (prev_row[col] != MAIN_2048_GRID[row][col]) { + blocks_moved = true; + + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = ERASE; + } + } else if ((prev_row[col] != 0) && (prev_row[col] == MAIN_2048_GRID[row][col])) { + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = UNMOVED; + } + } + } + } + + return blocks_moved; +} + +inline static bool column_logic_up(void) +{ + bool blocks_moved = false; + + for (int col = 0; col < 4; col++) { + // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. + if (COLUMN_SUM(col) == 0) { + continue; + } + + uint32_t prev_col[4] = { 0 }; + uint32_t temp_column[4] = { 0 }; + int temp_row_num = 0; // Also tracks how many valid blocks there are. + + // Get all valid blocks to help with same-value pair logic. + for (int row = 0; row < 4; row++) { // Start at top of main column. + prev_col[row] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_column[temp_row_num] = MAIN_2048_GRID[row][col]; + + temp_row_num += 1; + + // Clear valid block on main grid for temp_column to write the updated + // column into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_row_num == 1) { + MAIN_2048_GRID[0][col] = temp_column[0]; + + // Check if the single block moved up. + if (prev_col[0] != MAIN_2048_GRID[0][col]) { + blocks_moved = true; + + for (int row = 3; row >= 0; row--) { + if (prev_col[row] != 0) { + PREV_2048_GRID_STATE[row][col] = ERASE; + break; + } + } + + } else { + PREV_2048_GRID_STATE[0][col] = UNMOVED; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated column to main grid. + int main_grid_row = 0; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_row = 0; t_row < 4; t_row++) { + if (temp_column[t_row] == 0 || t_row >= temp_row_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[main_grid_row][col] = temp_column[t_row]; + + // Prevent illegal memory reads past main array size when at last row. + if (t_row < 3) { + // If same-value pair detected, combine then re-update grid. + if (temp_column[t_row] == temp_column[t_row + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[main_grid_row][col] = (temp_column[t_row] * 2); + + PREV_2048_GRID_STATE[main_grid_row][col] = COMBINE; + + // Because a same-value pair was combined at index "row" and "row + 1", + // increment the row so that the next iteration of the for loop + // will start at "row + 2" in the temp_column. + t_row += 1; + } + } + + main_grid_row += 1; + } + + // Check if any blocks moved starting from bottom to top, and keep track of what blocks were moved + // to delete on the display. + for (int row = 3; row >= 0; row--) { + if (prev_col[row] != MAIN_2048_GRID[row][col]) { + blocks_moved = true; + + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = ERASE; + } + } else if ((prev_col[row] != 0) && (prev_col[row] == MAIN_2048_GRID[row][col])) { + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = UNMOVED; + } + } + } + } + + return blocks_moved; +} + +static bool column_logic_down(void) +{ + bool blocks_moved = false; + + for (int col = 0; col < 4; col++) { + // Don't waste processing time if column is empty by checking if sum of all blocks in column is 0. + if (COLUMN_SUM(col) == 0) { + continue; + } + + uint32_t prev_col[4] = { 0 }; + uint32_t temp_column[4] = { 0 }; + int temp_row_num = 0; // Also tracks how many valid blocks there are in column. + + // Get all valid blocks to help with same-value pair logic. + for (int row = 3; row >= 0; row--) { // Start at bottom of main column. + prev_col[row] = MAIN_2048_GRID[row][col]; + + if (MAIN_2048_GRID[row][col] != 0) { + temp_column[temp_row_num] = MAIN_2048_GRID[row][col]; + + temp_row_num += 1; + + // Clear valid block on main grid for temp_column to write the updated + // column into after logic is done. + MAIN_2048_GRID[row][col] = 0; + } + } + + // If there's only one valid block, don't bother with the same-value pair logic. + if (temp_row_num == 1) { + // Confusing but temp column goes in order no matter the direction (up/down). + MAIN_2048_GRID[3][col] = temp_column[0]; + + // Check if the single block moved down. + if (prev_col[3] != MAIN_2048_GRID[3][col]) { + blocks_moved = true; + + // Represent the state of the original block location as deleted. + for (int row = 0; row < 4; row++) { + if (prev_col[row] != 0) { + PREV_2048_GRID_STATE[row][col] = ERASE; + break; + } + } + } else { + PREV_2048_GRID_STATE[3][col] = UNMOVED; + } + + continue; + } + + // Main logic: Combine the same-value pairs and write updated column to main grid. + int main_grid_row = 3; // index used to keep track of where to write next on main grid. + + // Start at top of temp column. + for (int t_row = 0; t_row < 4; t_row++) { + if (temp_column[t_row] == 0 || t_row >= temp_row_num) { + // Reached end of valid blocks. + break; + } + + // Write to main grid. + MAIN_2048_GRID[main_grid_row][col] = temp_column[t_row]; + + // Prevent illegal memory reads (-1) index of temp column. + if (t_row < 3) { + // If same-value pair detected, combine then re-update grid. + if (temp_column[t_row] == temp_column[t_row + 1]) { + // Combine then write to main grid. + MAIN_2048_GRID[main_grid_row][col] = (temp_column[t_row] * 2); + + PREV_2048_GRID_STATE[main_grid_row][col] = COMBINE; + + // Because a same-value pair was combined at index "row" and "row + 1", + // increment the row so that the next iteration of the for loop + // will start at "row + 2" in the temp_column. + // Don't forget, temp column goes in order (top to bottom) even though + // we go backwards in main column due to down direction. + t_row += 1; + } + } + + main_grid_row -= 1; + } + + // Check if any blocks moved starting from bottom to top, and keep track of what blocks were moved + // to delete on the display. + for (int row = 0; row < 4; row++) { + if (prev_col[row] != MAIN_2048_GRID[row][col]) { + blocks_moved = true; + + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = ERASE; + } + } else if ((prev_col[row] != 0) && (prev_col[row] == MAIN_2048_GRID[row][col])) { + if (PREV_2048_GRID_STATE[row][col] != COMBINE) { + PREV_2048_GRID_STATE[row][col] = UNMOVED; + } + } + } + } + + return blocks_moved; +} + +game_state_t Game_2048_CheckState(void) +{ + // Check if there's a 2048 block. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + if (MAIN_2048_GRID[row][col] == 2048) { + return WINNER; + } + } + } + + // Check if the new block that was just added filled in the + // last available empty block. + if (AVAILABLE_EMPTY_BLOCKS_NUM == 0) { + // If so, check if there are any swipes that can still be made before calling game over. + // This can be done by checking if there are any same-value pairs next to each other. + // Check if a row has same value pair. + for (int r = 0; r < 4; r++) { + for (int c = 0; c < 3; c++) { + if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r][c + 1]) { + return IN_PROGRESS; + } + } + } + + // Check if a column has a same-value pair. + for (int c = 0; c < 4; c++) { + for (int r = 0; r < 3; r++) { + if (MAIN_2048_GRID[r][c] == MAIN_2048_GRID[r + 1][c]) { + return IN_PROGRESS; + } + } + } + + // If it reaches here, then there were no same-value pairs and no more moves can be made + return GAME_OVER; + } else { + return IN_PROGRESS; + } +} + +bool Game_2048_UpdateGrid(input_direction_t direction, uint8_t *new_block_1D_idx) +{ + bool blocks_moved; + + // Clear grid state. + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + PREV_2048_GRID_STATE[row][col] = 0; + } + } + + // Run main game logic. + switch (direction) { + case INPUT_UP: + printf("UP\n"); + blocks_moved = column_logic_up(); + break; + + case INPUT_DOWN: + printf("DOWN\n"); + blocks_moved = column_logic_down(); + break; + + case INPUT_LEFT: + printf("LEFT\n"); + blocks_moved = row_logic_left(); + break; + + case INPUT_RIGHT: + printf("RIGHT\n"); + blocks_moved = row_logic_right(); + break; + + // Should never reach here. + default: + return false; + } + + // Once the main game logic is done, insert a new block. + if (blocks_moved == true) { + if (add_new_block(false, new_block_1D_idx) == true) { + // Successfully added new block. + return true; + } else { + // New block could not be added, nothing happened. + return false; + } + } else { + // Blocks didn't move. + return false; + } +} + +void Game_2048_PrintGrid(void) +{ + // Imitate the grid is refreshing on terminal. + PRINT("\n\n\n\n\n\n\n\n\n\n"); + + for (int row = 0; row < 4; row++) { + PRINT(" | | | \n"); + + for (int col = 0; col < 4; col++) { + if (MAIN_2048_GRID[row][col] != 0) { + PRINT(" %04d ", MAIN_2048_GRID[row][col]); + } else { + PRINT(" "); + } + + // Only print border 3 times. + if (col < 3) { + PRINT("|"); + } + } + + PRINT("\n | | | \n"); + + // Only print the row border 3 times. + if (row < 3) { + PRINT("-----------------------------------\n"); + } + } +} + +void Game_2048_GetGrid(uint32_t grid[4][4]) +{ + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + grid[row][col] = MAIN_2048_GRID[row][col]; + } + } +} + +void Game_2048_GetGridState(uint8_t grid_state[4][4]) +{ + for (int row = 0; row < 4; row++) { + for (int col = 0; col < 4; col++) { + grid_state[row][col] = PREV_2048_GRID_STATE[row][col]; + } + } +} diff --git a/Examples/MAX32655/Flash/.vscode/README.md b/Examples/MAX32655/Flash/.vscode/README.md old mode 100755 new mode 100644 diff --git a/Examples/MAX32655/Flash/.vscode/c_cpp_properties.json b/Examples/MAX32655/Flash/.vscode/c_cpp_properties.json old mode 100755 new mode 100644 diff --git a/Examples/MAX32655/Flash/.vscode/flash.gdb b/Examples/MAX32655/Flash/.vscode/flash.gdb old mode 100755 new mode 100644 diff --git a/Examples/MAX32655/Flash/.vscode/launch.json b/Examples/MAX32655/Flash/.vscode/launch.json old mode 100755 new mode 100644 diff --git a/Examples/MAX32655/Flash/.vscode/settings.json b/Examples/MAX32655/Flash/.vscode/settings.json old mode 100755 new mode 100644 diff --git a/Examples/MAX32655/Flash/.vscode/tasks.json b/Examples/MAX32655/Flash/.vscode/tasks.json old mode 100755 new mode 100644 diff --git a/Examples/MAX32655/UART_DMA/.cproject b/Examples/MAX32655/UART_DMA/.cproject new file mode 100644 index 00000000000..bbbb2e72e57 --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.cproject @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/UART_DMA/.project b/Examples/MAX32655/UART_DMA/.project new file mode 100644 index 00000000000..523d770068f --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.project @@ -0,0 +1,26 @@ + + + UART_DMA + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32655/UART_DMA/.settings/language.settings.xml b/Examples/MAX32655/UART_DMA/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32655/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32655/UART_DMA/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32655/UART_DMA/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..b577731d791 --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=UART_DMA +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32655 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32655/UART_DMA/.settings/org.eclipse.core.resources.prefs b/Examples/MAX32655/UART_DMA/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000000..99f26c0203a --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Examples/MAX32655/UART_DMA/.vscode/README.md b/Examples/MAX32655/UART_DMA/.vscode/README.md new file mode 100755 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32655/UART_DMA/.vscode/c_cpp_properties.json b/Examples/MAX32655/UART_DMA/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32655/UART_DMA/.vscode/flash.gdb b/Examples/MAX32655/UART_DMA/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32655/UART_DMA/.vscode/launch.json b/Examples/MAX32655/UART_DMA/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32655/UART_DMA/.vscode/settings.json b/Examples/MAX32655/UART_DMA/.vscode/settings.json new file mode 100755 index 00000000000..4a8f72d173e --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.vscode/settings.json @@ -0,0 +1,84 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32655", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"max32655.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/EEPROM", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/CODEC" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ADC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/EEPROM", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/CODEC" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32655/UART_DMA/.vscode/tasks.json b/Examples/MAX32655/UART_DMA/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32655/UART_DMA/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32655/UART_DMA/Makefile b/Examples/MAX32655/UART_DMA/Makefile new file mode 100644 index 00000000000..be2ad0e6c98 --- /dev/null +++ b/Examples/MAX32655/UART_DMA/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32655 +TARGET_UC := MAX32655 +TARGET_LC := max32655 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32655/UART_DMA/README.md b/Examples/MAX32655/UART_DMA/README.md new file mode 100644 index 00000000000..c951e461dfc --- /dev/null +++ b/Examples/MAX32655/UART_DMA/README.md @@ -0,0 +1,71 @@ +## Description + +To demonstrate the use of the UART peripheral with DMA, data is sent between two UART ports on the MAX32655. + + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +(None - this project builds as a standard example) + +## Required Connections + +- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. +- Connect P2.6 (UART 3 RX) and P2.7 (UART 3 TX). + +## Expected Output + +The Console UART of the device will output these messages: + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` + +or + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +Acquired DMA channel 0 for RX transaction +Acquired DMA channel 1 for TX transaction + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` \ No newline at end of file diff --git a/Examples/MAX32655/UART_DMA/UART_DMA.launch b/Examples/MAX32655/UART_DMA/UART_DMA.launch new file mode 100644 index 00000000000..78572048ec4 --- /dev/null +++ b/Examples/MAX32655/UART_DMA/UART_DMA.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32655/UART_DMA/main.c b/Examples/MAX32655/UART_DMA/main.c new file mode 100644 index 00000000000..c9e8753cdfe --- /dev/null +++ b/Examples/MAX32655/UART_DMA/main.c @@ -0,0 +1,235 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief Main for UART with DMA example. + * @details This example demonstrates how to use DMA with UART for data transfer. + * The example sets up DMA channels to handle UART transmissions and receptions, + * looping back the TX to the RX on UART0 with DMA. A jumper must be + * connected between P2.6 (UART 3 RX) -> P2.7 (UART 3 TX). + * The example uses either automatic or manual DMA handler configuration + * depending on the AUTOHANDLERS macro definition. + */ + +/***** Includes *****/ +#include +#include +#include +#include "mxc_device.h" +#include "pb.h" +#include "board.h" +#include "mxc_delay.h" +#include "uart.h" +#include "dma.h" +#include "nvic_table.h" +#include "led.h" + +/***** Definitions *****/ +#define AUTOHANDLERS + +#define UART_BAUD 115200 +#define BUFF_SIZE 512 + +#define UART MXC_UART3 + +/***** Globals *****/ +volatile int READ_FLAG; +volatile int buttonPressed; +static mxc_uart_req_t loop_req; + +/***** Functions *****/ +#ifndef AUTOHANDLERS +void DMA_RX_Handler(void) +{ + MXC_DMA_Handler(); +} + +void DMA_TX_Handler(void) +{ + MXC_DMA_Handler(); +} +#endif + +void readCallback(mxc_uart_req_t *req, int error) +{ + READ_FLAG = error; +} + +void buttonHandler(void) +{ + buttonPressed = 1; +} + +#ifdef AUTOHANDLERS +int exampleDMAAutoHandlers(void) +{ + int error = 0; + + // Auto DMA handlers will automatically initialize DMA, acquire & assign channels, + // and guarantee that each transaction's callback function is executed when + // the transaction is complete. + MXC_UART_SetAutoDMAHandlers(UART, true); + + // "READ_FLAG" is set in the read transaction's callback. It will be set to 0 when + // the read request completes successfully. We use it to wait for the DMA transaction + // to complete, since the DMA APIs are asynchronous (non-blocking) + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&loop_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return READ_FLAG; +} +#else +int exampleDMAManualHandlers(void) +{ + int error = 0; + + // Manally initialize DMA + MXC_DMA_Init(); + + // Manually acquire a channel for the read request and assign it to the drivers. + int rx_channel = MXC_DMA_AcquireChannel(); + if (rx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", rx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", rx_channel); + return rx_channel; + } + MXC_UART_SetRXDMAChannel(UART, rx_channel); + + // Additionally, assign the NVIC IRQ to a function that calls "MXC_DMA_Handler()". + // This is required for any assigned callbacks to work. + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(rx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(rx_channel), DMA_RX_Handler); + + // Do the same for the write request. + int tx_channel = MXC_DMA_AcquireChannel(); + if (tx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", tx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", tx_channel); + return tx_channel; + } + MXC_UART_SetTXDMAChannel(UART, tx_channel); + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(tx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(tx_channel), DMA_TX_Handler); + + // Initialize flags. We will use these to monitor when the read/write requests + // have completed, since the DMA APIs are asynchronous. + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&loop_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return READ_FLAG; +} +#endif // AUTOHANDLERS + +/******************************************************************************/ +int main(void) +{ + int error, i, fail = 0; + uint8_t TxData[BUFF_SIZE]; + uint8_t RxData[BUFF_SIZE]; + + printf("\n\n**************** UART Example ******************\n"); + printf("This example sends data from one UART to another\n"); + printf("\nConnect P2.6 (UART3 RX) and P2.7 (UART3 TX).\n\n"); + printf("To indicate a successful UART transfer, LED1 will illuminate.\n"); + printf("\nPush SW2 to continue\n"); + + buttonPressed = 0; + PB_RegisterCallback(0, buttonHandler); + while (!buttonPressed) {} + + printf("\nUART Baud \t: %d Hz\n", UART_BAUD); + printf("Test Length \t: %d bytes\n\n", BUFF_SIZE); + + // Initialize the data buffers + for (i = 0; i < BUFF_SIZE; i++) { + TxData[i] = i; + } + memset(RxData, 0x0, BUFF_SIZE); + + // Initialize the UART + error = MXC_UART_Init(UART, UART_BAUD, MXC_UART_IBRO_CLK); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + // Setup request structs describing the transactions. + // Request structs are placed in the global scope so they + // don't go out of context. This can happen when a req struct + // is declared inside a function and the function completes. + // The memory would be freed, invalidating the UART driver's + // pointers to it. + loop_req.uart = UART; + loop_req.rxData = RxData; + loop_req.rxLen = BUFF_SIZE; + loop_req.txData = TxData; + loop_req.txLen = BUFF_SIZE; + loop_req.callback = readCallback; + + printf("-->UART Initialized\n\n"); + +#ifdef AUTOHANDLERS + error = exampleDMAAutoHandlers(); +#else + error = exampleDMAManualHandlers(); +#endif + + if (READ_FLAG != E_NO_ERROR) { + printf("-->Error with read callback; %d\n", READ_FLAG); + fail++; + } + + if ((error = memcmp(RxData, TxData, BUFF_SIZE)) != 0) { + printf("-->Error verifying Data: %d\n", error); + fail++; + } else { + printf("-->Data verified\n"); + } + + if (fail != 0) { + printf("\n-->Example Failed\n"); + LED_On(0); // indicates FAIL + return E_FAIL; + } + + LED_On(1); // indicates SUCCESS + printf("\n-->Example Succeeded\n"); + return E_NO_ERROR; +} diff --git a/Examples/MAX32655/UART_DMA/project.mk b/Examples/MAX32655/UART_DMA/project.mk new file mode 100644 index 00000000000..7ef1c79dfa2 --- /dev/null +++ b/Examples/MAX32655/UART_DMA/project.mk @@ -0,0 +1,10 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Add your config here! \ No newline at end of file diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.cproject b/Examples/MAX32657/Hello_World_TZ/NonSecure/.cproject new file mode 100644 index 00000000000..b4f8045283a --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.cproject @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.project b/Examples/MAX32657/Hello_World_TZ/NonSecure/.project new file mode 100644 index 00000000000..f8bf123ecf9 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.project @@ -0,0 +1,26 @@ + + + NonSecure + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.settings/language.settings.xml b/Examples/MAX32657/Hello_World_TZ/NonSecure/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32657/Hello_World_TZ/NonSecure/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32657/Hello_World_TZ/NonSecure/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..e95acaeb99f --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=NonSecure +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32657 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/README.md b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/README.md new file mode 100644 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/c_cpp_properties.json b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/flash.gdb b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/launch.json b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/settings.json b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/settings.json new file mode 100644 index 00000000000..86620b5cc05 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/settings.json @@ -0,0 +1,79 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32657", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"${config:target}.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/tasks.json b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/Makefile b/Examples/MAX32657/Hello_World_TZ/NonSecure/Makefile new file mode 100644 index 00000000000..2de2e35fdc6 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32657 +TARGET_UC := MAX32657 +TARGET_LC := max32657 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + arm-none-eabi-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/NonSecure.launch b/Examples/MAX32657/Hello_World_TZ/NonSecure/NonSecure.launch new file mode 100644 index 00000000000..cc20fbb1dfe --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/NonSecure.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/README.md b/Examples/MAX32657/Hello_World_TZ/NonSecure/README.md new file mode 100644 index 00000000000..d7222aab8ee --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/README.md @@ -0,0 +1,31 @@ +## Description + +A basic getting started program using Cortex-M33 TrustZone feature. + +This version of Hello_World prints an incrementing count to the console UART and toggles a LED0 every 500 ms from the non-secure world. Incrementing the count is done in the Secure world. + +Under the **Hello_World_TZ** example, the **Secure** and **NonSecure** projects demonstrate building the secure and non-secure code into a single image. You do not build directly in the **NonSecure** project. + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +The Non-Secure Project must set these flags: +- `TRUSTZONE=1` +- `MSECURITY_MODE=NONSECURE` + +## Required Connections + +TODO + +## Expected Output + +TODO + +``` +TODO +``` diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/main.c b/Examples/MAX32657/Hello_World_TZ/NonSecure/main.c new file mode 100644 index 00000000000..f197a75512e --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/main.c @@ -0,0 +1,62 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief Hello World - Non-Secure. + * @details This TrustZone-enabled exampled splits Hello_World into two partitions. + * The Secure world setups the transition to the Non-Secure world, and + * increments the counter. The Non-Secure world prints the count, + * and toggles the LED. + */ + +/***** Includes *****/ +#include +#include +#include "mxc_device.h" +#include "led.h" +#include "pb.h" +#include "board.h" +#include "mxc_delay.h" + +/***** Definitions *****/ + +/***** Globals *****/ + +/***** Functions *****/ + +// From the Secure code, loaded into Non-Secure project through secure_implib.o object file. +extern int IncrementCount_S(volatile int *count_ns); + +// ***************************************************************************** +int main(void) +{ + int count = 0; + + printf("Hello from Non-Secure World!\n"); + + while (1) { + LED_On(LED_RED); + MXC_Delay(500000); + LED_Off(LED_RED); + MXC_Delay(500000); + + IncrementCount_S(&count); + printf("count = %d\n", count); + } +} diff --git a/Examples/MAX32657/Hello_World_TZ/NonSecure/project.mk b/Examples/MAX32657/Hello_World_TZ/NonSecure/project.mk new file mode 100644 index 00000000000..ad2149f0137 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/NonSecure/project.mk @@ -0,0 +1,15 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Add your config here! + +# TrustZone project with secure and non-secure code. +TRUSTZONE=1 + +MSECURITY_MODE=NONSECURE diff --git a/Examples/MAX32657/Hello_World_TZ/README.md b/Examples/MAX32657/Hello_World_TZ/README.md new file mode 100644 index 00000000000..eb28178ec54 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/README.md @@ -0,0 +1,38 @@ +## Description + +A basic getting started program using the Cortex-M33 TrustZone feature. + +This version of Hello_World prints an incrementing count to the console UART and toggles a LED0 every 500 ms from the Non-Secure world. Incrementing the count is done in the Secure world. + +Under the **Hello_World_TZ** example, the **Secure** and **NonSecure** projects demonstrate building the secure and non-secure code into a single image. You do not build directly in the **NonSecure** project. + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +The **Secure** project must have the **partition_max32657.h** file included for the SAU setup done in `SystemInit()` at startup. + +The Secure Project must set these flags: +- `TRUSTZONE=1` +- `MSECURITY_MODE=SECURE` +- `NONSECURE_CODE_DIR=path/to/nonsecure/project` + +The Non-Secure Project must set these flags: +- `TRUSTZONE=1` +- `MSECURITY_MODE=NONSECURE` + +## Required Connections + +TODO + +## Expected Output + +TODO + +``` +TODO +``` diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.cproject b/Examples/MAX32657/Hello_World_TZ/Secure/.cproject new file mode 100644 index 00000000000..0eeca628fef --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.cproject @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.project b/Examples/MAX32657/Hello_World_TZ/Secure/.project new file mode 100644 index 00000000000..65da42ba98e --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.project @@ -0,0 +1,26 @@ + + + Secure + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.settings/language.settings.xml b/Examples/MAX32657/Hello_World_TZ/Secure/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32657/Hello_World_TZ/Secure/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32657/Hello_World_TZ/Secure/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..7c28de8c89f --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=Secure +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32657 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/README.md b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/README.md new file mode 100644 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/c_cpp_properties.json b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/flash.gdb b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/launch.json b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/settings.json b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/settings.json new file mode 100644 index 00000000000..86620b5cc05 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/settings.json @@ -0,0 +1,79 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32657", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"${config:target}.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/tasks.json b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/Makefile b/Examples/MAX32657/Hello_World_TZ/Secure/Makefile new file mode 100644 index 00000000000..2de2e35fdc6 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32657 +TARGET_UC := MAX32657 +TARGET_LC := max32657 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + arm-none-eabi-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/README.md b/Examples/MAX32657/Hello_World_TZ/Secure/README.md new file mode 100644 index 00000000000..c7cc4d0b268 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/README.md @@ -0,0 +1,34 @@ +## Description + +A basic getting started program using the Cortex-M33 TrustZone feature. + +This version of Hello_World prints an incrementing count to the console UART and toggles a LED0 every 500 ms from the Non-Secure world. Incrementing the count is done in the Secure world. + +Under the **Hello_World_TZ** example, the **Secure** and **NonSecure** projects demonstrate building the secure and non-secure code into a single image. You do not build directly in the **NonSecure** project. + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +The **Secure** project must have the **partition_max32657.h** file included for the SAU setup done in `SystemInit()` at startup. + +The Secure Project must set these flags: +- `TRUSTZONE=1` +- `MSECURITY_MODE=SECURE` +- `NONSECURE_CODE_DIR=path/to/nonsecure/project` + +## Required Connections + +TODO + +## Expected Output + +TODO + +``` +TODO +``` diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/Secure.launch b/Examples/MAX32657/Hello_World_TZ/Secure/Secure.launch new file mode 100644 index 00000000000..b0ced9208f0 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/Secure.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/main.c b/Examples/MAX32657/Hello_World_TZ/Secure/main.c new file mode 100644 index 00000000000..2372c05096c --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/main.c @@ -0,0 +1,105 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief Hello World - Secure. + * @details This TrustZone-enabled exampled splits Hello_World into two partitions. + * The Secure world setups the transition to the Non-Secure world, and + * increments the counter. The Non-Secure world prints the count, + * and toggles the LED. + */ + +/***** Includes *****/ +#include +#include +#include +#include "mxc_device.h" +#include "mxc_errors.h" +#include "mxc_delay.h" +#include "led.h" +#include "pb.h" +#include "board.h" +#include "spc.h" + +/***** Definitions *****/ + +/***** Globals *****/ + +/***** Functions *****/ + +/** + * Brief: Increment counter in Secure context from Non-Secure world. + * + * Warning: Prevent leaks by checking pointers passed into + * Secure functions before dereferencing them, or the Non-Secure + * world can access all of Secure memory. Secure code must also + * handle non-secure memory as volatile. + * + * By design, illegal accesses would trigger a hardfault unless + * handled by the MPC/PPC. + * + * Param: *count Pointer of counter value to increment. + * Return: Error code. + */ +__ns_entry int IncrementCount_S(volatile int *count_ns) +{ + // CMSE intrinsic function. Check permissions before derefencing pointer. + count_ns = cmse_check_pointed_object((int *)count_ns, CMSE_NONSECURE); + + // count_ns will be NULL on a failed check. + if (count_ns == NULL) { + return E_NULL_PTR; + } + + (*count_ns)++; + + return E_NO_ERROR; +} + +// ***************************************************************************** +int main(void) +{ + printf("**** Hello_World example with TrustZone ****\n"); + printf("Currently in the secure world.\n"); + + // Add any Secure World software initialization and routines here + // before NonSecure_Init(); + + printf("Beginning transition to the non-secure world.\n"); + + // Set UART (serial console) and GPIO (LED) peripheral to Non-Secure. + MXC_SPC_SetNonSecure(MXC_SPC_PERIPH_UART); + MXC_SPC_SetNonSecure(MXC_SPC_PERIPH_GPIO0); + + // Set LED pins to be accessible in Non-Secure code. + MXC_SPC_GPIO_SetNonSecure(MXC_GPIO0, led_pin[0].mask); + + // Set Flash (Code region) as Non-Secure Callable for the IncrementCount_S function. + MXC_SPC_SetCode_NSC(true); + + // Transition to Non-Secure world. + // Defined in system_max32657.c as a weak function. + printf("Transitioning to non-secure world.\n"); + NonSecure_Init(); + + // Should never reach here. + printf("Error: Code should not reach here. Transition not successful.\n"); + + while (1) {} +} diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/partition_max32657.h b/Examples/MAX32657/Hello_World_TZ/Secure/partition_max32657.h similarity index 97% rename from Libraries/CMSIS/Device/Maxim/MAX32657/Include/partition_max32657.h rename to Examples/MAX32657/Hello_World_TZ/Secure/partition_max32657.h index a948716c809..c3fa050aaf8 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/partition_max32657.h +++ b/Examples/MAX32657/Hello_World_TZ/Secure/partition_max32657.h @@ -25,10 +25,10 @@ * limitations under the License. */ -#ifndef LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_PARTITION_MAX32657_H_ -#define LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_PARTITION_MAX32657_H_ +#ifndef EXAMPLES_MAX32657_HELLO_WORLD_TZ_SECURE_PARTITION_MAX32657_H_ +#define EXAMPLES_MAX32657_HELLO_WORLD_TZ_SECURE_PARTITION_MAX32657_H_ -#include "max32657.h" +#include "mxc_device.h" // clang-format off #if IS_SECURE_ENVIRONMENT @@ -70,7 +70,7 @@ */ /** * Analog Devices, Inc. - * 4 Regions in the MAX32657. + * 4 Memory Spaces in the MAX32657. * 1. Non-Secure Flash * 2. Secure Flash * 3. Non-Secure SRAM @@ -92,6 +92,18 @@ * Secure SRAM2 (64kB) 0x3001.0000 - 0x3001.FFFF * Secure SRAM3 (64kB) 0x3002.0000 - 0x3002.FFFF * Secure SRAM4 (64kB) 0x3003.0000 - 0x3003.FFFF + * + * Note: The total physical space for Flash is 1MB, and SRAM is 256KB. + * The total size between the non-secure and secure Flash regions + * should be 1MB. + * The total size between the non-secure and secure SRAM regions + * should be 256KB. + * - By default, this file sets the following regions: + * Secure Flash (504KB): 0x1100.0000 - 0x1107.DFFF + * Non-Secure Callable Flash (8KB): 0x1107.E000 - 0x1107.FFFF + * Non-Secure Flash (512KB): 0x0108.0000 - 0x010F.FFFF + * Secure SRAM (0-2) (128KB): 0x3000.0000 - 0x3001.FFFF + * Non-Secure SRAM (3-4) (128KB): 0x2002.0000 - 0x2003.FFFF */ #define SAU_REGIONS_MAX 4 /* Max. number of SAU regions */ @@ -109,7 +121,7 @@ /* // End Address <0x1F-0xFFFFFFFF> */ -#define SAU_INIT_END0 0x110FFFFF /* end address of SAU region 0 */ +#define SAU_INIT_END0 0x1107ffff /* end address of SAU region 0 */ /* // Region is @@ -130,12 +142,12 @@ /* // Start Address <0-0xFFFFFFE0> */ -#define SAU_INIT_START1 0x01000000 +#define SAU_INIT_START1 0x01080000 /* // End Address <0x1F-0xFFFFFFFF> */ -#define SAU_INIT_END1 0x010FFFFF +#define SAU_INIT_END1 0x010fffff /* // Region is @@ -148,7 +160,7 @@ */ /* -// Initialize SAU Region 2 (Secure SRAM) +// Initialize SAU Region 2 (Secure SRAM (0-2)) // Setup SAU Region 2 memory attributes */ #define SAU_INIT_REGION2 1 @@ -161,7 +173,7 @@ /* // End Address <0x1F-0xFFFFFFFF> */ -#define SAU_INIT_END2 0x3003FFFF +#define SAU_INIT_END2 0x3001ffff /* // Region is @@ -174,7 +186,7 @@ */ /* -// Initialize SAU Region 3 (Non-Secure SRAM) +// Initialize SAU Region 3 (Non-Secure SRAM (3-4)) // Setup SAU Region 3 memory attributes */ #define SAU_INIT_REGION3 1 @@ -182,12 +194,12 @@ /* // Start Address <0-0xFFFFFFE0> */ -#define SAU_INIT_START3 0x20000000 +#define SAU_INIT_START3 0x20020000 /* // End Address <0x1F-0xFFFFFFFF> */ -#define SAU_INIT_END3 0x2003FFFF +#define SAU_INIT_END3 0x2003ffff /* // Region is @@ -200,7 +212,7 @@ */ /* -// Initialize SAU Region 4 +// Initialize SAU Region 4 (Non-Secure SRAM) // Setup SAU Region 4 memory attributes */ #define SAU_INIT_REGION4 0 @@ -1185,7 +1197,7 @@ __STATIC_INLINE void TZ_SAU_Setup (void) #if defined (SAU_INIT_CTRL) && (SAU_INIT_CTRL == 1U) SAU->CTRL = ((SAU_INIT_CTRL_ENABLE << SAU_CTRL_ENABLE_Pos) & SAU_CTRL_ENABLE_Msk) | - ((SAU_INIT_CTRL_ALLNS << SAU_CTRL_ALLNS_Pos) & SAU_CTRL_ALLNS_Msk) ; + ((SAU_INIT_CTRL_ALLNS << SAU_CTRL_ALLNS_Pos) & SAU_CTRL_ALLNS_Msk); #endif #if defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) @@ -1283,4 +1295,4 @@ __STATIC_INLINE void TZ_SAU_Setup (void) #endif // IS_SECURE_EVIRONMENT -#endif // LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_PARTITION_MAX32657_H_ +#endif // EXAMPLES_MAX32657_HELLO_WORLD_TZ_SECURE_PARTITION_MAX32657_H_ diff --git a/Examples/MAX32657/Hello_World_TZ/Secure/project.mk b/Examples/MAX32657/Hello_World_TZ/Secure/project.mk new file mode 100644 index 00000000000..52c4d65c9e8 --- /dev/null +++ b/Examples/MAX32657/Hello_World_TZ/Secure/project.mk @@ -0,0 +1,56 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Add your config here! + +# TrustZone project with secure and non-secure code. +TRUSTZONE=1 + +# This is a secure project. +MSECURITY_MODE=SECURE + +# Add path to Non-Secure project. +NONSECURE_CODE_DIR=../NonSecure +SECURE_CODE_DIR=. + +# Set up custom memory settings if enabled +# 1 - enabled, 0 - disabled. +USE_CUSTOM_MEMORY_SETTINGS = 0 + +################################################################################ +# +# If 'USE_CUSTOM_MEMORY_SETTINGS = 1': +# + +# Select which type of memory the main code will execute from. +# Possible options: FLASH or SRAM +EXECUTE_CODE_MEM=FLASH + +# *_SIZE required if USE_CUSTOM_MEMORY_SETTINGS=1 +# Total of *_FLASH_SIZE and *_SRAM_SIZE regions must equal their respective physical size constraints. +# FLASH: 1MB = 0x00100000 +# SRAM: 256KB = 0x00040000 +S_FLASH_SIZE=0x00080000 +NS_FLASH_SIZE=0x00080000 +S_SRAM_SIZE=0x00020000 +NS_SRAM_SIZE=0x00020000 + +# Depending on what type of memory the main code will execute from, a portion +# of the secure region would be used for the Non-Secure Callable Region. +# This sets the size of that region. +NSC_SIZE=0x00008000 # Not required. + +# Optional for finer grain control, but all *_START variables must be set if provided. +# Note: bit 28 of the starting address indicates the security state of the region. +# If not provided, by default, the secure regions start in first half of memory, and the non- +# secure regions start in the second half. +# S_FLASH_START=0x11000000 +# NS_FLASH_START=0x01080000 +# S_SRAM_START=0x30000000 +# NS_SRAM_START=0x20020000 diff --git a/Examples/MAX32665/UART_DMA/.cproject b/Examples/MAX32665/UART_DMA/.cproject new file mode 100644 index 00000000000..bbbb2e72e57 --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.cproject @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32665/UART_DMA/.project b/Examples/MAX32665/UART_DMA/.project new file mode 100644 index 00000000000..523d770068f --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.project @@ -0,0 +1,26 @@ + + + UART_DMA + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32665/UART_DMA/.settings/language.settings.xml b/Examples/MAX32665/UART_DMA/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32665/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32665/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32665/UART_DMA/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32665/UART_DMA/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..ea6bca78c3f --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=UART_DMA +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32665 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32665/UART_DMA/.settings/org.eclipse.core.resources.prefs b/Examples/MAX32665/UART_DMA/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000000..99f26c0203a --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Examples/MAX32665/UART_DMA/.vscode/README.md b/Examples/MAX32665/UART_DMA/.vscode/README.md new file mode 100755 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32665/UART_DMA/.vscode/c_cpp_properties.json b/Examples/MAX32665/UART_DMA/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32665/UART_DMA/.vscode/flash.gdb b/Examples/MAX32665/UART_DMA/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32665/UART_DMA/.vscode/launch.json b/Examples/MAX32665/UART_DMA/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32665/UART_DMA/.vscode/settings.json b/Examples/MAX32665/UART_DMA/.vscode/settings.json new file mode 100755 index 00000000000..4cc8b36e2fb --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.vscode/settings.json @@ -0,0 +1,84 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32665", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"max32665.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/EEPROM", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/CODEC" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ADC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/EEPROM", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/CODEC" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32665/UART_DMA/.vscode/tasks.json b/Examples/MAX32665/UART_DMA/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32665/UART_DMA/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32665/UART_DMA/Makefile b/Examples/MAX32665/UART_DMA/Makefile new file mode 100644 index 00000000000..585cabea5f5 --- /dev/null +++ b/Examples/MAX32665/UART_DMA/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32665 +TARGET_UC := MAX32665 +TARGET_LC := max32665 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32665/UART_DMA/README.md b/Examples/MAX32665/UART_DMA/README.md new file mode 100644 index 00000000000..f6a9d74d320 --- /dev/null +++ b/Examples/MAX32665/UART_DMA/README.md @@ -0,0 +1,71 @@ +## Description + +To demonstrate the use of the UART peripheral with DMA, data is sent between two UART ports on the MAX32665. + + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +(None - this project builds as a standard example) + +## Required Connections + +- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. +- Connect P0.20 (RX of UART1) and P0.1 (TX of UART2). + +## Expected Output + +The Console UART of the device will output these messages: + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` + +or + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +Acquired DMA channel 0 for RX transaction +Acquired DMA channel 1 for TX transaction + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` \ No newline at end of file diff --git a/Examples/MAX32665/UART_DMA/UART_DMA.launch b/Examples/MAX32665/UART_DMA/UART_DMA.launch new file mode 100644 index 00000000000..20b976110cf --- /dev/null +++ b/Examples/MAX32665/UART_DMA/UART_DMA.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32665/UART_DMA/main.c b/Examples/MAX32665/UART_DMA/main.c new file mode 100644 index 00000000000..d11333857e3 --- /dev/null +++ b/Examples/MAX32665/UART_DMA/main.c @@ -0,0 +1,277 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief Main for UART with DMA example. + * @details This example demonstrates how to use DMA with UART for data transfer. + * The example sets up DMA channels to handle UART transmissions and receptions, + * looping back the TX of one UART to the RX of another UART. A jumper must be + * connected between P0.20 (RX of UART1) and P0.1 (TX of UART2). + * The example uses either automatic or manual DMA handler configuration + * depending on the AUTOHANDLERS macro definition. + */ + +/***** Includes *****/ +#include +#include +#include +#include "mxc_device.h" +#include "pb.h" +#include "board.h" +#include "mxc_delay.h" +#include "uart.h" +#include "dma.h" +#include "nvic_table.h" +#include "led.h" + +/***** Definitions *****/ +#define AUTOHANDLERS + +#define UART_BAUD 115200 +#define BUFF_SIZE 512 + +#define RX_UART MXC_UART1 +#define TX_UART MXC_UART2 + +#define DMA MXC_DMA0 + +/***** Globals *****/ +volatile int READ_FLAG; +volatile int WRITE_FLAG; +volatile int buttonPressed; +static mxc_uart_req_t read_req; +static mxc_uart_req_t write_req; + +#ifndef BOARD_FTHR2 +#warning "This example has been written for the MAX32665 FTHR2 board." +#endif + +/***** Functions *****/ +#ifndef AUTOHANDLERS +void DMA_RX_Handler(void) +{ + MXC_DMA_Handler(DMA); +} + +void DMA_TX_Handler(void) +{ + MXC_DMA_Handler(DMA); +} +#endif + +void readCallback(mxc_uart_req_t *req, int error) +{ + READ_FLAG = error; +} + +void writeCallback(mxc_uart_req_t *req, int error) +{ + WRITE_FLAG = error; +} + +void buttonHandler(void) +{ + buttonPressed = 1; +} + +#ifdef AUTOHANDLERS +int exampleDMAAutoHandlers(void) +{ + int error = 0; + + // Auto DMA handlers will automatically initialize DMA, acquire & assign channels, + // and guarantee that each transaction's callback function is executed when + // the transaction is complete. + MXC_UART_SetAutoDMAHandlers(RX_UART, true); + MXC_UART_SetAutoDMAHandlers(TX_UART, true); + + // "READ_FLAG" is set in the read transaction's callback. It will be set to 0 when + // the read request completes successfully. We use it to wait for the DMA transaction + // to complete, since the DMA APIs are asynchronous (non-blocking) + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&read_req, DMA); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_TransactionDMA(&write_req, DMA); + if (error) { + printf("-->Error starting DMA write: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return READ_FLAG; +} +#else +int exampleDMAManualHandlers(void) +{ + int error = 0; + // Manally initialize DMA + MXC_DMA_Init(DMA); + + // Manually acquire a channel for the read request and assign it to the drivers. + int rx_channel = MXC_DMA_AcquireChannel(DMA); + if (rx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", rx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", rx_channel); + return rx_channel; + } + MXC_UART_SetRXDMAChannel(RX_UART, rx_channel); + + // Additionally, assign the NVIC IRQ to a function that calls "MXC_DMA_Handler()". + // This is required for any assigned callbacks to work. + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(rx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(rx_channel), DMA_RX_Handler); + + // Do the same for the write request. + int tx_channel = MXC_DMA_AcquireChannel(DMA); + if (tx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", tx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", tx_channel); + return tx_channel; + } + MXC_UART_SetTXDMAChannel(TX_UART, tx_channel); + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(tx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(tx_channel), DMA_TX_Handler); + + // Initialize flags. We will use these to monitor when the read/write requests + // have completed, since the DMA APIs are asynchronous. + WRITE_FLAG = 1; + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&read_req, DMA); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_TransactionDMA(&write_req, DMA); + if (error) { + printf("-->Error starting DMA write: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (WRITE_FLAG) {} + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return WRITE_FLAG; +} +#endif // AUTOHANDLERS + +/******************************************************************************/ +int main(void) +{ + int error, i, fail = 0; + uint8_t TxData[BUFF_SIZE]; + uint8_t RxData[BUFF_SIZE]; + + printf("\n\n**************** UART Example ******************\n"); + printf("This example sends data from one UART to another\n"); + printf("\nConnect P0.20 (RX of UART1) and P0.1 (TX of UART2).\n\n"); + printf("To indicate a successful UART transfer, LED1 will illuminate.\n"); + printf("\nPush SW2 to continue\n"); + + buttonPressed = 0; + PB_RegisterCallback(0, (pb_callback)buttonHandler); + while (!buttonPressed) {} + + printf("\nUART Baud \t: %d Hz\n", UART_BAUD); + printf("Test Length \t: %d bytes\n\n", BUFF_SIZE); + + // Initialize the data buffers + for (i = 0; i < BUFF_SIZE; i++) { + TxData[i] = i; + } + memset(RxData, 0x0, BUFF_SIZE); + + // Initialize the UART + error = MXC_UART_Init(TX_UART, UART_BAUD, MAP_A); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_Init(RX_UART, UART_BAUD, MAP_A); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + // Setup request structs describing the transactions. + // Request structs are placed in the global scope so they + // don't go out of context. This can happen when a req struct + // is declared inside a function and the function completes. + // The memory would be freed, invalidating the UART driver's + // pointers to it. + read_req.uart = RX_UART; + read_req.rxData = RxData; + read_req.rxLen = BUFF_SIZE; + read_req.txLen = 0; + read_req.callback = readCallback; + + write_req.uart = TX_UART; + write_req.txData = TxData; + write_req.txLen = BUFF_SIZE; + write_req.rxLen = 0; + write_req.callback = writeCallback; + + printf("-->UART Initialized\n\n"); + +#ifdef AUTOHANDLERS + error = exampleDMAAutoHandlers(); +#else + error = exampleDMAManualHandlers(); +#endif + + if (READ_FLAG != E_NO_ERROR) { + printf("-->Error with read callback; %d\n", READ_FLAG); + fail++; + } + + if ((error = memcmp(RxData, TxData, BUFF_SIZE)) != 0) { + printf("-->Error verifying Data: %d\n", error); + fail++; + } else { + printf("-->Data verified\n"); + } + + if (fail != 0) { + printf("\n-->Example Failed\n"); + LED_On(0); // indicates FAIL + return E_FAIL; + } + + LED_On(1); // indicates SUCCESS + printf("\n-->Example Succeeded\n"); + return E_NO_ERROR; +} diff --git a/Examples/MAX32665/UART_DMA/project.mk b/Examples/MAX32665/UART_DMA/project.mk new file mode 100644 index 00000000000..6b431a22292 --- /dev/null +++ b/Examples/MAX32665/UART_DMA/project.mk @@ -0,0 +1,15 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Add your config here! + +# If you have secure version of MCU (MAX32666), set SBT=1 to generate signed binary +# For more information on how sing process works, see +# https://www.analog.com/en/education/education-library/videos/6313214207112.html +SBT=0 diff --git a/Examples/MAX32670/UART_DMA/.cproject b/Examples/MAX32670/UART_DMA/.cproject new file mode 100644 index 00000000000..c9d62244405 --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.cproject @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32670/UART_DMA/.project b/Examples/MAX32670/UART_DMA/.project new file mode 100644 index 00000000000..523d770068f --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.project @@ -0,0 +1,26 @@ + + + UART_DMA + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32670/UART_DMA/.settings/language.settings.xml b/Examples/MAX32670/UART_DMA/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32670/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32670/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32670/UART_DMA/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32670/UART_DMA/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..be8d77d441f --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=UART_DMA +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32670 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32670/UART_DMA/.settings/org.eclipse.core.resources.prefs b/Examples/MAX32670/UART_DMA/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000000..99f26c0203a --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Examples/MAX32670/UART_DMA/.vscode/README.md b/Examples/MAX32670/UART_DMA/.vscode/README.md new file mode 100755 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32670/UART_DMA/.vscode/c_cpp_properties.json b/Examples/MAX32670/UART_DMA/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32670/UART_DMA/.vscode/flash.gdb b/Examples/MAX32670/UART_DMA/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32670/UART_DMA/.vscode/launch.json b/Examples/MAX32670/UART_DMA/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32670/UART_DMA/.vscode/settings.json b/Examples/MAX32670/UART_DMA/.vscode/settings.json new file mode 100755 index 00000000000..69a6d5eb65e --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.vscode/settings.json @@ -0,0 +1,79 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32670", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"max32670.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32670/UART_DMA/.vscode/tasks.json b/Examples/MAX32670/UART_DMA/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32670/UART_DMA/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32670/UART_DMA/Makefile b/Examples/MAX32670/UART_DMA/Makefile new file mode 100644 index 00000000000..5954b8b4b52 --- /dev/null +++ b/Examples/MAX32670/UART_DMA/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32670 +TARGET_UC := MAX32670 +TARGET_LC := max32670 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32670/UART_DMA/README.md b/Examples/MAX32670/UART_DMA/README.md new file mode 100644 index 00000000000..e83dcc41763 --- /dev/null +++ b/Examples/MAX32670/UART_DMA/README.md @@ -0,0 +1,71 @@ +## Description + +To demonstrate the use of the UART peripheral with DMA, data is sent between two UART ports on the MAX32670. + + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +(None - this project builds as a standard example) + +## Required Connections + +- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. +- Connect P0.28 (UART 1 RX) -> P0.15 (UART 2 TX). + +## Expected Output + +The Console UART of the device will output these messages: + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` + +or + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +Acquired DMA channel 0 for RX transaction +Acquired DMA channel 1 for TX transaction + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` \ No newline at end of file diff --git a/Examples/MAX32670/UART_DMA/UART_DMA.launch b/Examples/MAX32670/UART_DMA/UART_DMA.launch new file mode 100644 index 00000000000..ceeff9410ec --- /dev/null +++ b/Examples/MAX32670/UART_DMA/UART_DMA.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32670/UART_DMA/main.c b/Examples/MAX32670/UART_DMA/main.c new file mode 100644 index 00000000000..9184c3d3a93 --- /dev/null +++ b/Examples/MAX32670/UART_DMA/main.c @@ -0,0 +1,272 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief Main for UART with DMA example. + * @details This example demonstrates how to use DMA with UART for data transfer. + * The example sets up DMA channels to handle UART transmissions and receptions, + * looping back the TX of one UART to the RX of another UART. A jumper must be + * connected between P0.28 (UART 1 RX) -> P0.15 (UART 2 TX). + * The example uses either automatic or manual DMA handler configuration + * depending on the AUTOHANDLERS macro definition. + */ + +/***** Includes *****/ +#include +#include +#include +#include "mxc_device.h" +#include "pb.h" +#include "board.h" +#include "mxc_delay.h" +#include "uart.h" +#include "dma.h" +#include "nvic_table.h" +#include "led.h" + +/***** Definitions *****/ +#define AUTOHANDLERS + +#define UART_BAUD 115200 +#define BUFF_SIZE 512 + +#define RX_UART MXC_UART1 +#define TX_UART MXC_UART2 + +/***** Globals *****/ +volatile int READ_FLAG; +volatile int WRITE_FLAG; +volatile int buttonPressed; +static mxc_uart_req_t read_req; +static mxc_uart_req_t write_req; + +/***** Functions *****/ +#ifndef AUTOHANDLERS +void DMA_RX_Handler(void) +{ + MXC_DMA_Handler(); +} + +void DMA_TX_Handler(void) +{ + MXC_DMA_Handler(); +} +#endif + +void readCallback(mxc_uart_req_t *req, int error) +{ + READ_FLAG = error; +} + +void writeCallback(mxc_uart_req_t *req, int error) +{ + WRITE_FLAG = error; +} + +void buttonHandler(void) +{ + buttonPressed = 1; +} + +#ifdef AUTOHANDLERS +int exampleDMAAutoHandlers(void) +{ + int error = 0; + + // Auto DMA handlers will automatically initialize DMA, acquire & assign channels, + // and guarantee that each transaction's callback function is executed when + // the transaction is complete. + MXC_UART_SetAutoDMAHandlers(RX_UART, true); + MXC_UART_SetAutoDMAHandlers(TX_UART, true); + + // "READ_FLAG" is set in the read transaction's callback. It will be set to 0 when + // the read request completes successfully. We use it to wait for the DMA transaction + // to complete, since the DMA APIs are asynchronous (non-blocking) + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&read_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_TransactionDMA(&write_req); + if (error) { + printf("-->Error starting DMA write: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return READ_FLAG; +} +#else +int exampleDMAManualHandlers(void) +{ + int error = 0; + + // Manally initialize DMA + MXC_DMA_Init(); + + // Manually acquire a channel for the read request and assign it to the drivers. + int rx_channel = MXC_DMA_AcquireChannel(); + if (rx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", rx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", rx_channel); + return rx_channel; + } + MXC_UART_SetRXDMAChannel(RX_UART, rx_channel); + + // Additionally, assign the NVIC IRQ to a function that calls "MXC_DMA_Handler()". + // This is required for any assigned callbacks to work. + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(rx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(rx_channel), DMA_RX_Handler); + + // Do the same for the write request. + int tx_channel = MXC_DMA_AcquireChannel(); + if (tx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", tx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", tx_channel); + return tx_channel; + } + MXC_UART_SetTXDMAChannel(TX_UART, tx_channel); + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(tx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(tx_channel), DMA_TX_Handler); + + // Initialize flags. We will use these to monitor when the read/write requests + // have completed, since the DMA APIs are asynchronous. + WRITE_FLAG = 1; + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&read_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_TransactionDMA(&write_req); + if (error) { + printf("-->Error starting DMA write: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (WRITE_FLAG) {} + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return WRITE_FLAG; +} +#endif // AUTOHANDLERS + +/******************************************************************************/ +int main(void) +{ + int error, i, fail = 0; + uint8_t TxData[BUFF_SIZE]; + uint8_t RxData[BUFF_SIZE]; + + printf("\n\n**************** UART Example ******************\n"); + printf("This example sends data from one UART to another\n"); + printf("\nConnect P0.28 (UART 1 RX) to P0.15 (UART 2 TX).\n\n"); + printf("To indicate a successful UART transfer, LED1 will illuminate.\n"); + printf("\nPush SW3 to continue\n"); + + buttonPressed = 0; + PB_RegisterCallback(0, (pb_callback)buttonHandler); + while (!buttonPressed) {} + + printf("\nUART Baud \t: %d Hz\n", UART_BAUD); + printf("Test Length \t: %d bytes\n\n", BUFF_SIZE); + + // Initialize the data buffers + for (i = 0; i < BUFF_SIZE; i++) { + TxData[i] = i; + } + memset(RxData, 0x0, BUFF_SIZE); + + // Initialize the UART + error = MXC_UART_Init(TX_UART, UART_BAUD, MXC_UART_APB_CLK); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_Init(RX_UART, UART_BAUD, MXC_UART_APB_CLK); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + // Setup request structs describing the transactions. + // Request structs are placed in the global scope so they + // don't go out of context. This can happen when a req struct + // is declared inside a function and the function completes. + // The memory would be freed, invalidating the UART driver's + // pointers to it. + read_req.uart = RX_UART; + read_req.rxData = RxData; + read_req.rxLen = BUFF_SIZE; + read_req.txLen = 0; + read_req.callback = readCallback; + + write_req.uart = TX_UART; + write_req.txData = TxData; + write_req.txLen = BUFF_SIZE; + write_req.rxLen = 0; + write_req.callback = writeCallback; + + printf("-->UART Initialized\n\n"); + +#ifdef AUTOHANDLERS + error = exampleDMAAutoHandlers(); +#else + error = exampleDMAManualHandlers(); +#endif + + if (READ_FLAG != E_NO_ERROR) { + printf("-->Error with read callback; %d\n", READ_FLAG); + fail++; + } + + if ((error = memcmp(RxData, TxData, BUFF_SIZE)) != 0) { + printf("-->Error verifying Data: %d\n", error); + fail++; + } else { + printf("-->Data verified\n"); + } + + if (fail != 0) { + printf("\n-->Example Failed\n"); + LED_On(0); // indicates FAIL + return E_FAIL; + } + + LED_On(1); // indicates SUCCESS + printf("\n-->Example Succeeded\n"); + return E_NO_ERROR; +} diff --git a/Examples/MAX32670/UART_DMA/project.mk b/Examples/MAX32670/UART_DMA/project.mk new file mode 100644 index 00000000000..7e750c9c17a --- /dev/null +++ b/Examples/MAX32670/UART_DMA/project.mk @@ -0,0 +1,14 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +#BOARD=FTHR_RevA +# ^ For example, you can uncomment this line to make the +# project build for the "FTHR_RevA" board. + +# ********************************************************** + +# Add your config here! diff --git a/Examples/MAX32672/UART_DMA/.cproject b/Examples/MAX32672/UART_DMA/.cproject new file mode 100644 index 00000000000..bbbb2e72e57 --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.cproject @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32672/UART_DMA/.project b/Examples/MAX32672/UART_DMA/.project new file mode 100644 index 00000000000..523d770068f --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.project @@ -0,0 +1,26 @@ + + + UART_DMA + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32672/UART_DMA/.settings/language.settings.xml b/Examples/MAX32672/UART_DMA/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32672/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32672/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32672/UART_DMA/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32672/UART_DMA/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..86095bdbccb --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=UART_DMA +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32672 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32672/UART_DMA/.settings/org.eclipse.core.resources.prefs b/Examples/MAX32672/UART_DMA/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000000..99f26c0203a --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Examples/MAX32672/UART_DMA/.vscode/README.md b/Examples/MAX32672/UART_DMA/.vscode/README.md new file mode 100755 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32672/UART_DMA/.vscode/c_cpp_properties.json b/Examples/MAX32672/UART_DMA/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32672/UART_DMA/.vscode/flash.gdb b/Examples/MAX32672/UART_DMA/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32672/UART_DMA/.vscode/launch.json b/Examples/MAX32672/UART_DMA/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32672/UART_DMA/.vscode/settings.json b/Examples/MAX32672/UART_DMA/.vscode/settings.json new file mode 100755 index 00000000000..948202f52a1 --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.vscode/settings.json @@ -0,0 +1,84 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32672", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"max32672.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/EEPROM", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/CODEC" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ADC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/EEPROM", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/CODEC" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32672/UART_DMA/.vscode/tasks.json b/Examples/MAX32672/UART_DMA/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32672/UART_DMA/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32672/UART_DMA/Makefile b/Examples/MAX32672/UART_DMA/Makefile new file mode 100644 index 00000000000..bccb16e972e --- /dev/null +++ b/Examples/MAX32672/UART_DMA/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32672 +TARGET_UC := MAX32672 +TARGET_LC := max32672 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32672/UART_DMA/README.md b/Examples/MAX32672/UART_DMA/README.md new file mode 100644 index 00000000000..1dd3f3417a4 --- /dev/null +++ b/Examples/MAX32672/UART_DMA/README.md @@ -0,0 +1,71 @@ +## Description + +To demonstrate the use of the UART peripheral with DMA, data is sent between two UART ports on the MAX32672. + + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +(None - this project builds as a standard example) + +## Required Connections + +- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. +- Connect P0.28 (RX of UART1) and P0.15 (TX of UART2). + +## Expected Output + +The Console UART of the device will output these messages: + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` + +or + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +Acquired DMA channel 0 for RX transaction +Acquired DMA channel 1 for TX transaction + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` \ No newline at end of file diff --git a/Examples/MAX32672/UART_DMA/UART_DMA.launch b/Examples/MAX32672/UART_DMA/UART_DMA.launch new file mode 100644 index 00000000000..935fab67446 --- /dev/null +++ b/Examples/MAX32672/UART_DMA/UART_DMA.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32672/UART_DMA/main.c b/Examples/MAX32672/UART_DMA/main.c new file mode 100644 index 00000000000..493e37c6ba5 --- /dev/null +++ b/Examples/MAX32672/UART_DMA/main.c @@ -0,0 +1,274 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief Main for UART with DMA example. + * @details This example demonstrates how to use DMA with UART for data transfer. + * The example sets up DMA channels to handle UART transmissions and receptions, + * looping back the TX of one UART to the RX of another UART. A jumper must be + * connected between P0.28 (RX of UART1) and P0.15 (TX of UART2). + * The example uses either automatic or manual DMA handler configuration + * depending on the AUTOHANDLERS macro definition. + */ + +/***** Includes *****/ +#include +#include +#include +#include "mxc_device.h" +#include "pb.h" +#include "board.h" +#include "mxc_delay.h" +#include "uart.h" +#include "dma.h" +#include "nvic_table.h" +#include "led.h" + +/***** Definitions *****/ +#define AUTOHANDLERS + +#define UART_BAUD 115200 +#define BUFF_SIZE 512 + +#define RX_UART MXC_UART1 +#define TX_UART MXC_UART2 + +/***** Globals *****/ +volatile int READ_FLAG; +volatile int WRITE_FLAG; +volatile int buttonPressed; +static mxc_uart_req_t read_req; +static mxc_uart_req_t write_req; + +/***** Functions *****/ +#ifndef AUTOHANDLERS +void DMA_RX_Handler(void) +{ + MXC_DMA_Handler(); +} + +void DMA_TX_Handler(void) +{ + MXC_DMA_Handler(); +} +#endif + +void readCallback(mxc_uart_req_t *req, int error) +{ + READ_FLAG = error; +} + +void writeCallback(mxc_uart_req_t *req, int error) +{ + WRITE_FLAG = error; +} + +void buttonHandler(void) +{ + buttonPressed = 1; +} + +#ifdef AUTOHANDLERS +int exampleDMAAutoHandlers(void) +{ + int error = 0; + + // Auto DMA handlers will automatically initialize DMA, acquire & assign channels, + // and guarantee that each transaction's callback function is executed when + // the transaction is complete. + MXC_UART_SetAutoDMAHandlers(RX_UART, true); + MXC_UART_SetAutoDMAHandlers(TX_UART, true); + + // "READ_FLAG" is set in the read transaction's callback. It will be set to 0 when + // the read request completes successfully. We use it to wait for the DMA transaction + // to complete, since the DMA APIs are asynchronous (non-blocking) + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&read_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_TransactionDMA(&write_req); + if (error) { + printf("-->Error starting DMA write: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return READ_FLAG; +} +#else +int exampleDMAManualHandlers(void) +{ + int error = 0; + + // Manally initialize DMA + MXC_DMA_Init(); + + // Manually acquire a channel for the read request and assign it to the drivers. + int rx_channel = MXC_DMA_AcquireChannel(); + if (rx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", rx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", rx_channel); + return rx_channel; + } + MXC_UART_SetRXDMAChannel(RX_UART, rx_channel); + + // Additionally, assign the NVIC IRQ to a function that calls "MXC_DMA_Handler()". + // This is required for any assigned callbacks to work. + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(rx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(rx_channel), DMA_RX_Handler); + + // Do the same for the write request. + int tx_channel = MXC_DMA_AcquireChannel(); + if (tx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", tx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", tx_channel); + return tx_channel; + } + MXC_UART_SetTXDMAChannel(TX_UART, tx_channel); + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(tx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(tx_channel), DMA_TX_Handler); + + // Initialize flags. We will use these to monitor when the read/write requests + // have completed, since the DMA APIs are asynchronous. + WRITE_FLAG = 1; + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&read_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_TransactionDMA(&write_req); + if (error) { + printf("-->Error starting DMA write: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (WRITE_FLAG) {} + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return WRITE_FLAG; +} +#endif // AUTOHANDLERS + +/******************************************************************************/ +int main(void) +{ + int error, i, fail = 0; + uint8_t TxData[BUFF_SIZE]; + uint8_t RxData[BUFF_SIZE]; + + printf("\n\n**************** UART Example ******************\n"); + printf("This example sends data from one UART to another\n"); + printf("\nConnect RX(P0.28) of UART1 and TX(P0.15) of UART2.\n\n"); + printf("To indicate a successful UART transfer, LED1 will illuminate.\n"); + printf("\nPush SW3 to continue\n"); + + buttonPressed = 0; + PB_RegisterCallback(0, (pb_callback)buttonHandler); + while (!buttonPressed) {} + + printf("\nUART Baud \t: %d Hz\n", UART_BAUD); + printf("Test Length \t: %d bytes\n\n", BUFF_SIZE); + + // Initialize the data buffers + for (i = 0; i < BUFF_SIZE; i++) { + TxData[i] = i; + } + memset(RxData, 0x0, BUFF_SIZE); + + // Initialize the UART + MXC_UART_SetPinMapping(TX_UART, MAP_B); + error = MXC_UART_Init(TX_UART, UART_BAUD, MXC_UART_IBRO_CLK); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + MXC_UART_SetPinMapping(RX_UART, MAP_A); + error = MXC_UART_Init(RX_UART, UART_BAUD, MXC_UART_IBRO_CLK); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + // Setup request structs describing the transactions. + // Request structs are placed in the global scope so they + // don't go out of context. This can happen when a req struct + // is declared inside a function and the function completes. + // The memory would be freed, invalidating the UART driver's + // pointers to it. + read_req.uart = RX_UART; + read_req.rxData = RxData; + read_req.rxLen = BUFF_SIZE; + read_req.txLen = 0; + read_req.callback = readCallback; + + write_req.uart = TX_UART; + write_req.txData = TxData; + write_req.txLen = BUFF_SIZE; + write_req.rxLen = 0; + write_req.callback = writeCallback; + + printf("-->UART Initialized\n\n"); + +#ifdef AUTOHANDLERS + error = exampleDMAAutoHandlers(); +#else + error = exampleDMAManualHandlers(); +#endif + + if (READ_FLAG != E_NO_ERROR) { + printf("-->Error with read callback; %d\n", READ_FLAG); + fail++; + } + + if ((error = memcmp(RxData, TxData, BUFF_SIZE)) != 0) { + printf("-->Error verifying Data: %d\n", error); + fail++; + } else { + printf("-->Data verified\n"); + } + + if (fail != 0) { + printf("\n-->Example Failed\n"); + LED_On(0); // indicates FAIL + return E_FAIL; + } + + LED_On(1); // indicates SUCCESS + printf("\n-->Example Succeeded\n"); + return E_NO_ERROR; +} diff --git a/Examples/MAX32672/UART_DMA/project.mk b/Examples/MAX32672/UART_DMA/project.mk new file mode 100644 index 00000000000..96eb02eae1d --- /dev/null +++ b/Examples/MAX32672/UART_DMA/project.mk @@ -0,0 +1,15 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Add your config here! + +# If you have secure version of MCU, set SBT=1 to generate signed binary +# For more information on how sing process works, see +# https://www.analog.com/en/education/education-library/videos/6313214207112.html +SBT=0 diff --git a/Examples/MAX32690/Bluetooth/Bootloader/README.md b/Examples/MAX32690/Bluetooth/Bootloader/README.md index e988d5bf3ac..06cdf6c11e0 100644 --- a/Examples/MAX32690/Bluetooth/Bootloader/README.md +++ b/Examples/MAX32690/Bluetooth/Bootloader/README.md @@ -9,7 +9,7 @@ the main flash section is erased and replaced with the update image. If no valid is identified, the Bootloader will boot the exiting image in the main flash space. __0x10000000__: Bootloader -__0x10004000__: Main flash space +__0x10008000__: Main flash space __0x10300000__: Update flash space ## Software diff --git a/Examples/MAX32690/Bluetooth/Bootloader/boot_lower.S b/Examples/MAX32690/Bluetooth/Bootloader/boot_lower.S index 6a2646f91c4..1dff366bfd1 100644 --- a/Examples/MAX32690/Bluetooth/Bootloader/boot_lower.S +++ b/Examples/MAX32690/Bluetooth/Bootloader/boot_lower.S @@ -31,7 +31,7 @@ /* Boot from the lower flash array */ Boot_Lower: - ldr r0,=0x10004000 /* Address for main flash image */ + ldr r0,=0x10008000 /* Address for main flash image */ ldr r1,=0xE000ED08 /* Address for SCB_VTOR_REG */ /* First 32-bit word in image is initial stack pointer */ diff --git a/Examples/MAX32690/Bluetooth/Bootloader/bootloader.ld b/Examples/MAX32690/Bluetooth/Bootloader/bootloader.ld index 564c592524c..cb0fdfd4d45 100644 --- a/Examples/MAX32690/Bluetooth/Bootloader/bootloader.ld +++ b/Examples/MAX32690/Bluetooth/Bootloader/bootloader.ld @@ -18,15 +18,17 @@ * ******************************************************************************/ -BOOTLOADER_ORIGIN = 0x10000000; -BOOTLOADER_LEN = 0x4000; -FLASH_SECTION_LEN = 0x40000 - BOOTLOADER_LEN; +/* Note: Flash 0 page size is 16KB (0x4000). Flash 1 page size is 8KB (0x2000) */ +BOOTLOADER_ORIGIN = 0x10000000; /* Bootloader resides in Flash 0 */ +BOOTLOADER_LEN = 0x8000; /* 2 Flash 0 pages length (total 32KB) */ +FLASH0_SECTION_LEN = 0x300000 - BOOTLOADER_LEN; /* 3MB - 2 pages (16KB/page) */ +FLASH1_SECTION_LEN = 0x40000; /* 256KB */ FLASH0_ORIGIN = BOOTLOADER_ORIGIN + BOOTLOADER_LEN; MEMORY { FLASH (rx) : ORIGIN = BOOTLOADER_ORIGIN, LENGTH = BOOTLOADER_LEN - FLASH0 (rx) : ORIGIN = FLASH0_ORIGIN, LENGTH = FLASH_SECTION_LEN - FLASH1 (rx) : ORIGIN = 0x10300000, LENGTH = FLASH_SECTION_LEN + FLASH0 (rx) : ORIGIN = FLASH0_ORIGIN, LENGTH = FLASH0_SECTION_LEN + FLASH1 (rx) : ORIGIN = 0x10300000, LENGTH = FLASH1_SECTION_LEN SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x20000 } @@ -50,14 +52,14 @@ SECTIONS { .flash0 (NOLOAD) : { _flash0 = ALIGN(., 4); - . = . + FLASH_SECTION_LEN; + . = . + FLASH0_SECTION_LEN; _eflash0 = ALIGN(., 4); } > FLASH0 .flash1 (NOLOAD) : { _flash1 = ALIGN(., 4); - . = . + FLASH_SECTION_LEN; + . = . + FLASH1_SECTION_LEN; _eflash1 = ALIGN(., 4); } > FLASH1 diff --git a/Examples/MAX32690/Dual_Core_Sync/Dual_core_sync_arm/README.md b/Examples/MAX32690/Dual_Core_Sync/Dual_core_sync_arm/README.md index 1c9935270cc..93a2e884a13 100644 --- a/Examples/MAX32690/Dual_Core_Sync/Dual_core_sync_arm/README.md +++ b/Examples/MAX32690/Dual_Core_Sync/Dual_core_sync_arm/README.md @@ -23,8 +23,11 @@ Universal instructions on building, flashing, and debugging this project can be ## Required Connections +Connect a MAXPICO or other supported Debug adapter to the SWD Connector. +- Note: Debug adapters other than the MAXPICO may not route the UART signals to the SWD connector. On MAX32690FTHR and AD-APARD32690-SL boards, this may limit your ability to access to serial port. + If using the MAX32690EVKIT: -- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Connect a USB cable between the PC and the CN2 (USB/PWR - UART) connector. - Install JP7(RX_EN) and JP8(TX_EN) headers. - Open a terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. - Close jumper JP5 (LED1 EN). @@ -36,7 +39,6 @@ If using the MAX32690FTHR: If using the AD-APARD32690-SL: - Connect a USB cable between the PC and the P10 (USB-C) connector. -- Connect a MAXPICO Debug adapter to P9 (SWD Connector) - Open a terminal application on the PC and connect to the MAXPICO's console UART at 115200, 8-N-1. ## Expected Output diff --git a/Examples/MAX32690/Dual_Core_Sync/Dual_core_sync_riscv/README.md b/Examples/MAX32690/Dual_Core_Sync/Dual_core_sync_riscv/README.md index 7fca8531afd..bcb50e9b578 100644 --- a/Examples/MAX32690/Dual_Core_Sync/Dual_core_sync_riscv/README.md +++ b/Examples/MAX32690/Dual_Core_Sync/Dual_core_sync_riscv/README.md @@ -21,8 +21,11 @@ Universal instructions on building, flashing, and debugging this project can be ## Required Connections +Connect a MAXPICO or other supported Debug adapter to the SWD Connector. +- Note: Debug adapters other than the MAXPICO may not route the UART signals to the SWD connector. On MAX32690FTHR and AD-APARD32690-SL boards, this may limit your ability to access to serial port. + If using the MAX32690EVKIT: -- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Connect a USB cable between the PC and the CN2 (USB/PWR - UART) connector. - Install JP7(RX_EN) and JP8(TX_EN) headers. - Open a terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. - Close jumper JP5 (LED1 EN). @@ -34,5 +37,4 @@ If using the MAX32690FTHR: If using the AD-APARD32690-SL: - Connect a USB cable between the PC and the P10 (USB-C) connector. -- Connect a MAXPICO Debug adapter to P9 (SWD Connector) - Open a terminal application on the PC and connect to the MAXPICO's console UART at 115200, 8-N-1. diff --git a/Examples/MAX32690/Hello_World/README.md b/Examples/MAX32690/Hello_World/README.md index 5519cec8151..30ec8756368 100644 --- a/Examples/MAX32690/Hello_World/README.md +++ b/Examples/MAX32690/Hello_World/README.md @@ -16,8 +16,11 @@ Universal instructions on building, flashing, and debugging this project can be ## Required Connections +Connect a MAXPICO or other supported Debug adapter to the SWD Connector. +- Note: Debug adapters other than the MAXPICO may not route the UART signals to the SWD connector. On MAX32690FTHR and AD-APARD32690-SL boards, this may limit your ability to access to serial port. + If using the MAX32690EVKIT: -- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Connect a USB cable between the PC and the CN2 (USB/PWR - UART) connector. - Install JP7(RX_EN) and JP8(TX_EN) headers. - Open a terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. - Close jumper JP5 (LED1 EN). @@ -29,7 +32,6 @@ If using the MAX32690FTHR: If using the AD-APARD32690-SL: - Connect a USB cable between the PC and the P10 (USB-C) connector. -- Connect a MAXPICO Debug adapter to P9 (SWD Connector) - Open a terminal application on the PC and connect to the MAXPICO's console UART at 115200, 8-N-1. ## Expected Output diff --git a/Examples/MAX32690/UART_DMA/.cproject b/Examples/MAX32690/UART_DMA/.cproject new file mode 100644 index 00000000000..c9d62244405 --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.cproject @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32690/UART_DMA/.project b/Examples/MAX32690/UART_DMA/.project new file mode 100644 index 00000000000..523d770068f --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.project @@ -0,0 +1,26 @@ + + + UART_DMA + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX32690/UART_DMA/.settings/language.settings.xml b/Examples/MAX32690/UART_DMA/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX32690/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX32690/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX32690/UART_DMA/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX32690/UART_DMA/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..9002368e719 --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=UART_DMA +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX32690 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX32690/UART_DMA/.settings/org.eclipse.core.resources.prefs b/Examples/MAX32690/UART_DMA/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000000..99f26c0203a --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Examples/MAX32690/UART_DMA/.vscode/README.md b/Examples/MAX32690/UART_DMA/.vscode/README.md new file mode 100755 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX32690/UART_DMA/.vscode/c_cpp_properties.json b/Examples/MAX32690/UART_DMA/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX32690/UART_DMA/.vscode/flash.gdb b/Examples/MAX32690/UART_DMA/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX32690/UART_DMA/.vscode/launch.json b/Examples/MAX32690/UART_DMA/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX32690/UART_DMA/.vscode/settings.json b/Examples/MAX32690/UART_DMA/.vscode/settings.json new file mode 100755 index 00000000000..abd00ff497a --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.vscode/settings.json @@ -0,0 +1,79 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX32690", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"max32690.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX32690/UART_DMA/.vscode/tasks.json b/Examples/MAX32690/UART_DMA/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX32690/UART_DMA/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX32690/UART_DMA/Makefile b/Examples/MAX32690/UART_DMA/Makefile new file mode 100644 index 00000000000..4fbb9a75d5d --- /dev/null +++ b/Examples/MAX32690/UART_DMA/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX32690 +TARGET_UC := MAX32690 +TARGET_LC := max32690 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -Og + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX32690/UART_DMA/README.md b/Examples/MAX32690/UART_DMA/README.md new file mode 100644 index 00000000000..52891368b8c --- /dev/null +++ b/Examples/MAX32690/UART_DMA/README.md @@ -0,0 +1,71 @@ +## Description + +To demonstrate the use of the UART peripheral with DMA, data is sent between one UART port on the MAX32690. + + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +(None - this project builds as a standard example) + +## Required Connections + +- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. +- Connect P2.11 (UART 0 RX) and P2.12 (UART 0 TX). + +## Expected Output + +The Console UART of the device will output these messages: + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` + +or + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +Acquired DMA channel 0 for RX transaction +Acquired DMA channel 1 for TX transaction + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` \ No newline at end of file diff --git a/Examples/MAX32690/UART_DMA/UART_DMA.launch b/Examples/MAX32690/UART_DMA/UART_DMA.launch new file mode 100644 index 00000000000..9d3b37713c1 --- /dev/null +++ b/Examples/MAX32690/UART_DMA/UART_DMA.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX32690/UART_DMA/main.c b/Examples/MAX32690/UART_DMA/main.c new file mode 100644 index 00000000000..c12ad494114 --- /dev/null +++ b/Examples/MAX32690/UART_DMA/main.c @@ -0,0 +1,235 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief Main for UART with DMA example. + * @details This example demonstrates how to use DMA with UART for data transfer. + * The example sets up DMA channels to handle UART transmissions and receptions, + * looping back the TX to the RX on UART0 with DMA. A jumper must be + * connected between P2.11 (UART 0 RX) -> P2.12 (UART 0 TX). + * The example uses either automatic or manual DMA handler configuration + * depending on the AUTOHANDLERS macro definition. + */ + +/***** Includes *****/ +#include +#include +#include +#include "mxc_device.h" +#include "pb.h" +#include "board.h" +#include "mxc_delay.h" +#include "uart.h" +#include "dma.h" +#include "nvic_table.h" +#include "led.h" + +/***** Definitions *****/ +#define AUTOHANDLERS + +#define UART_BAUD 115200 +#define BUFF_SIZE 512 + +#define UART MXC_UART0 + +/***** Globals *****/ +volatile int READ_FLAG; +volatile int buttonPressed; +static mxc_uart_req_t loop_req; + +/***** Functions *****/ +#ifndef AUTOHANDLERS +void DMA_RX_Handler(void) +{ + MXC_DMA_Handler(); +} + +void DMA_TX_Handler(void) +{ + MXC_DMA_Handler(); +} +#endif + +void readCallback(mxc_uart_req_t *req, int error) +{ + READ_FLAG = error; +} + +void buttonHandler(void) +{ + buttonPressed = 1; +} + +#ifdef AUTOHANDLERS +int exampleDMAAutoHandlers(void) +{ + int error = 0; + + // Auto DMA handlers will automatically initialize DMA, acquire & assign channels, + // and guarantee that each transaction's callback function is executed when + // the transaction is complete. + MXC_UART_SetAutoDMAHandlers(UART, true); + + // "READ_FLAG" is set in the read transaction's callback. It will be set to 0 when + // the read request completes successfully. We use it to wait for the DMA transaction + // to complete, since the DMA APIs are asynchronous (non-blocking) + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&loop_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return READ_FLAG; +} +#else +int exampleDMAManualHandlers(void) +{ + int error = 0; + + // Manally initialize DMA + MXC_DMA_Init(); + + // Manually acquire a channel for the read request and assign it to the drivers. + int rx_channel = MXC_DMA_AcquireChannel(); + if (rx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", rx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", rx_channel); + return rx_channel; + } + MXC_UART_SetRXDMAChannel(UART, rx_channel); + + // Additionally, assign the NVIC IRQ to a function that calls "MXC_DMA_Handler()". + // This is required for any assigned callbacks to work. + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(rx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(rx_channel), DMA_RX_Handler); + + // Do the same for the write request. + int tx_channel = MXC_DMA_AcquireChannel(); + if (tx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", tx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", tx_channel); + return tx_channel; + } + MXC_UART_SetTXDMAChannel(UART, tx_channel); + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(tx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(tx_channel), DMA_TX_Handler); + + // Initialize flags. We will use these to monitor when the read/write requests + // have completed, since the DMA APIs are asynchronous. + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&loop_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return READ_FLAG; +} +#endif // AUTOHANDLERS + +/******************************************************************************/ +int main(void) +{ + int error, i, fail = 0; + uint8_t TxData[BUFF_SIZE]; + uint8_t RxData[BUFF_SIZE]; + + printf("\n\n**************** UART Example ******************\n"); + printf("This example sends data from one UART to another\n"); + printf("\nConnect RX(P2.11) of UART1 and TX(P2.12) of UART0.\n\n"); + printf("To indicate a successful UART transfer, LED1 will illuminate.\n"); + printf("\nPush SW2 to continue\n"); + + buttonPressed = 0; + PB_RegisterCallback(0, buttonHandler); + while (!buttonPressed) {} + + printf("\nUART Baud \t: %d Hz\n", UART_BAUD); + printf("Test Length \t: %d bytes\n\n", BUFF_SIZE); + + // Initialize the data buffers + for (i = 0; i < BUFF_SIZE; i++) { + TxData[i] = i; + } + memset(RxData, 0x0, BUFF_SIZE); + + // Initialize the UART + error = MXC_UART_Init(UART, UART_BAUD, MXC_UART_APB_CLK); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + // Setup request structs describing the transactions. + // Request structs are placed in the global scope so they + // don't go out of context. This can happen when a req struct + // is declared inside a function and the function completes. + // The memory would be freed, invalidating the UART driver's + // pointers to it. + loop_req.uart = UART; + loop_req.rxData = RxData; + loop_req.rxLen = BUFF_SIZE; + loop_req.txData = TxData; + loop_req.txLen = BUFF_SIZE; + loop_req.callback = readCallback; + + printf("-->UART Initialized\n\n"); + +#ifdef AUTOHANDLERS + error = exampleDMAAutoHandlers(); +#else + error = exampleDMAManualHandlers(); +#endif + + if (READ_FLAG != E_NO_ERROR) { + printf("-->Error with read callback; %d\n", READ_FLAG); + fail++; + } + + if ((error = memcmp(RxData, TxData, BUFF_SIZE)) != 0) { + printf("-->Error verifying Data: %d\n", error); + fail++; + } else { + printf("-->Data verified\n"); + } + + if (fail != 0) { + printf("\n-->Example Failed\n"); + LED_On(0); // indicates FAIL + return E_FAIL; + } + + LED_On(1); // indicates SUCCESS + printf("\n-->Example Succeeded\n"); + return E_NO_ERROR; +} diff --git a/Examples/MAX32690/UART_DMA/project.mk b/Examples/MAX32690/UART_DMA/project.mk new file mode 100644 index 00000000000..42b5536113b --- /dev/null +++ b/Examples/MAX32690/UART_DMA/project.mk @@ -0,0 +1,19 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +# ********************************************************** + +# Add your config here! + +# If you have secure version of MCU, set SBT=1 to generate signed binary +# For more information on how sing process works, see +# https://www.analog.com/en/education/education-library/videos/6313214207112.html +SBT=0 + +ifeq ($(BOARD),FTHR) +$(error ERR_NOTSUPPORTED: This project is not supported for the FTHR board) +endif diff --git a/Examples/MAX78000/UART_DMA/.cproject b/Examples/MAX78000/UART_DMA/.cproject new file mode 100644 index 00000000000..bbbb2e72e57 --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.cproject @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX78000/UART_DMA/.project b/Examples/MAX78000/UART_DMA/.project new file mode 100644 index 00000000000..523d770068f --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.project @@ -0,0 +1,26 @@ + + + UART_DMA + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + diff --git a/Examples/MAX78000/UART_DMA/.settings/language.settings.xml b/Examples/MAX78000/UART_DMA/.settings/language.settings.xml new file mode 100644 index 00000000000..d32717b6f37 --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.settings/language.settings.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/Examples/MAX78000/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs b/Examples/MAX78000/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs new file mode 100644 index 00000000000..59c0b37ba75 --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.settings/org.eclipse.cdt.codan.core.prefs @@ -0,0 +1,93 @@ +eclipse.preferences.version=1 +org.eclipse.cdt.codan.checkers.errnoreturn=Warning +org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false} +org.eclipse.cdt.codan.checkers.errreturnvalue=Error +org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"} +org.eclipse.cdt.codan.checkers.nocommentinside=-Error +org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"} +org.eclipse.cdt.codan.checkers.nolinecomment=-Error +org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"} +org.eclipse.cdt.codan.checkers.noreturn=Error +org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false} +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error +org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"} +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error +org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"} +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error +org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"} +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CStyleCastProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"C-Style cast instead of C++ cast\\")"} +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning +org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false} +org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning +org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error +org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"} +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning +org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true} +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.CopyrightProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Lack of copyright information\\")",regex\=>".*Copyright.*"} +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error +org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"} +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.GotoStatementProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Goto statement used\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error +org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"} +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error +org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"} +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error +org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"} +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissCaseProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing cases in switch\\")"} +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissDefaultProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing default in switch\\")",defaultWithAllEnums\=>false} +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing reference return value in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.MissSelfCheckProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Missing self check in assignment operator\\")"} +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info +org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning +org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"} +org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error +org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"} +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"} +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error +org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"} +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"} +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"} +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning +org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()} +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false} +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning +org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false} +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true} +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning +org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")} +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem=-Warning +org.eclipse.cdt.codan.internal.checkers.UsingInHeaderProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Using directive in header\\")"} +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error +org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"} +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem=-Error +org.eclipse.cdt.codan.internal.checkers.VirtualMethodCallProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Virtual method call in constructor/destructor\\")"} +org.eclipse.cdt.qt.core.qtproblem=Warning +org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null} diff --git a/Examples/MAX78000/UART_DMA/.settings/org.eclipse.cdt.core.prefs b/Examples/MAX78000/UART_DMA/.settings/org.eclipse.cdt.core.prefs new file mode 100644 index 00000000000..f882afd1da2 --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.settings/org.eclipse.cdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/BOARD/value=EvKit_V1 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/operation=replace +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/GCC_PREFIX/value=arm-none-eabi- +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/PROJECT/value=UART_DMA +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/delimiter=; +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/operation=append +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/TARGET/value=MAX78000 +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/append=true +environment/project/cdt.managedbuild.toolchain.gnu.cross.base.1028364529/appendContributed=true diff --git a/Examples/MAX78000/UART_DMA/.settings/org.eclipse.core.resources.prefs b/Examples/MAX78000/UART_DMA/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 00000000000..99f26c0203a --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/=UTF-8 diff --git a/Examples/MAX78000/UART_DMA/.vscode/README.md b/Examples/MAX78000/UART_DMA/.vscode/README.md new file mode 100755 index 00000000000..5b355bd51c9 --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.vscode/README.md @@ -0,0 +1,47 @@ +# VSCode-Maxim + +_(If you're viewing this document from within Visual Studio Code you can press `CTRL+SHIFT+V` to open a Markdown preview window.)_ + +## Quick Links + +* [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/) +* [VSCode-Maxim Github](https://github.com/analogdevicesinc/VSCode-Maxim) + +## Introduction + +VSCode-Maxim is a set of [Visual Studio Code](https://code.visualstudio.com/) project configurations and utilities for enabling embedded development for [Analog Device's MSDK](https://github.com/analogdevicesinc/msdk) and the [MAX32xxx/MAX78xxx microcontrollers](https://www.analog.com/en/product-category/microcontrollers.html). + +The following features are supported: + +* Code editing with intellisense down to the register level +* Code compilation with the ability to easily re-target a project for different microcontrollers and boards +* Flashing programs +* GUI and command-line debugging + +## Dependencies + +* [Visual Studio Code](https://code.visualstudio.com/) + * [C/C++ VSCode Extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools) + * [Cortex-Debug Extension](https://marketplace.visualstudio.com/items?itemName=marus25.cortex-debug) +* [Analog Devices MSDK](https://analogdevicesinc.github.io/msdk/) + +## Installation + +Install the MSDK, then set `"MAXIM_PATH"` in your _user_ VS Code settings. + +See [Getting Started with Visual Studio Code](https://analogdevicesinc.github.io/msdk/USERGUIDE/#getting-started-with-visual-studio-code) in the MSDK User Guide for detailed instructions. + +## Usage + +See the [MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/#visual-studio-code) for detailed usage info. + +## Issue Tracker + +Bug reports, feature requests, and contributions are welcome via the [issues](https://github.com/analogdevicesinc/VSCode-Maxim/issues) tracker on Github. + +New issues should contain _at minimum_ the following information: + +* Visual Studio Code version #s (see `Help -> About`) +* C/C++ Extension version # +* Target microcontroller and evaluation platform +* The projects `.vscode` folder and `Makefile` (where applicable). Standard compression formats such as `.zip`, `.rar`, `.tar.gz`, etc. are all acceptable. diff --git a/Examples/MAX78000/UART_DMA/.vscode/c_cpp_properties.json b/Examples/MAX78000/UART_DMA/.vscode/c_cpp_properties.json new file mode 100644 index 00000000000..dfbed47b581 --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.vscode/c_cpp_properties.json @@ -0,0 +1,53 @@ +{ + "configurations": [ + { + "name": "Win32", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc.exe", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Linux", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + }, + { + "name": "Mac", + "includePath": [ + "${default}" + ], + "defines": [ + "${default}" + ], + "intelliSenseMode": "gcc-arm", + "compilerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gcc", + "browse": { + "path": [ + "${default}" + ] + } + } + ], + "version": 4 +} \ No newline at end of file diff --git a/Examples/MAX78000/UART_DMA/.vscode/flash.gdb b/Examples/MAX78000/UART_DMA/.vscode/flash.gdb new file mode 100644 index 00000000000..8f22801a47d --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.vscode/flash.gdb @@ -0,0 +1,17 @@ +define flash_m4 + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor reset halt +end + +define flash_m4_run + set architecture armv7e-m + set remotetimeout 10 + target remote | openocd -c "gdb_port pipe;log_output flash.log" -s $arg0/scripts -f interface/$arg1 -f target/$arg2 -c "init; reset halt" + load + compare-sections + monitor resume +end diff --git a/Examples/MAX78000/UART_DMA/.vscode/launch.json b/Examples/MAX78000/UART_DMA/.vscode/launch.json new file mode 100644 index 00000000000..01fe5199048 --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.vscode/launch.json @@ -0,0 +1,133 @@ +{ + "configurations": [ + { + "name": "Debug Arm (Cortex-debug)", + "cwd":"${workspaceRoot}", + "executable": "${workspaceFolder}/build/${config:program_file}", + "loadFiles": ["${workspaceFolder}/build/${config:program_file}"], + "symbolFiles": [{ + "file": "${workspaceFolder}/build/${config:symbol_file}" + }], + "request": "launch", + "type": "cortex-debug", + "servertype": "openocd", + "linux": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "windows": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "serverpath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "gdbPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "serverpath": "${config:OCD_path}/openocd", + }, + "searchDir": ["${config:OCD_path}/scripts"], + "configFiles": ["interface/${config:M4_OCD_interface_file}", "target/${config:M4_OCD_target_file}"], + "interface": "swd", + "runToEntryPoint": "main", + "svdFile": "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include/${config:target}.svd" + }, + { + "name": "GDB (Arm M4)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/build/${config:program_file}", + "args": [], + "stopAtEntry": true, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:ARM_GCC_path}/bin/arm-none-eabi-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3333", + "debugServerArgs": "-s ${config:OCD_path}/scripts -f interface/${config:M4_OCD_interface_file} -f target/${config:M4_OCD_target_file} -c \"init; reset halt\"", + "serverStarted": "Info : Listening on port 3333 for gdb connections", + "filterStderr": true, + "targetArchitecture": "arm", + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-arm.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text":"exec-file build/${config:program_file}" }, + { "text":"symbol-file build/${config:symbol_file}" }, + { "text":"target remote localhost:3333" }, + { "text":"monitor reset halt" }, + { "text":"set $pc=Reset_Handler"}, + { "text":"b main" } + ] + }, + { + "name": "GDB (RISC-V)", + "type": "cppdbg", + "request": "launch", + "program": "${workspaceFolder}/buildrv/${config:program_file}", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceFolder}", + "environment": [], + "externalConsole": false, + "MIMode": "gdb", + "linux": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/openocd", + }, + "windows": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb.exe", + "debugServerPath": "${config:OCD_path}/openocd.exe", + }, + "osx": { + "miDebuggerPath": "${config:xPack_GCC_path}/bin/riscv-none-elf-gdb", + "debugServerPath": "${config:OCD_path}/bin/openocd", + }, + "logging": { + "exceptions": true, + "trace": false, + "traceResponse": false, + "engineLogging": false + }, + "miDebuggerServerAddress": "localhost:3334", + "debugServerArgs": "-c \"gdb_port 3334\" -s ${config:OCD_path}/scripts -f interface/${config:RV_OCD_interface_file} -f target/${config:RV_OCD_target_file}", + "serverStarted": "Info : Listening on port 3334 for gdb connections", + "filterStderr": true, + "customLaunchSetupCommands": [ + {"text":"-list-features"} + ], + "targetArchitecture": "arm", + "setupCommands": [ + { "text":"set logging overwrite on"}, + { "text":"set logging file debug-riscv.log"}, + { "text":"set logging on"}, + { "text":"cd ${workspaceFolder}" }, + { "text": "set architecture riscv:rv32", "ignoreFailures": false }, + { "text":"exec-file build/${config:program_file}", "ignoreFailures": false }, + { "text":"symbol-file buildrv/${config:symbol_file}", "ignoreFailures": false }, + { "text":"target remote localhost:3334" }, + { "text":"b main" }, + { "text": "set $pc=Reset_Handler","ignoreFailures": false } + ] + } + ] +} diff --git a/Examples/MAX78000/UART_DMA/.vscode/settings.json b/Examples/MAX78000/UART_DMA/.vscode/settings.json new file mode 100755 index 00000000000..a2e954acb7e --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.vscode/settings.json @@ -0,0 +1,84 @@ +{ + "terminal.integrated.env.windows": { + "Path":"${config:OCD_path};${config:ARM_GCC_path}/bin;${config:xPack_GCC_path}/bin;${config:MSYS_path}/usr/bin;${config:Make_path};${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.defaultProfile.windows": "Command Prompt", + + "terminal.integrated.env.linux": { + "PATH":"${config:OCD_path}:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + "terminal.integrated.env.osx": { + "PATH":"${config:OCD_path}/bin:${config:ARM_GCC_path}/bin:${config:xPack_GCC_path}/bin:${config:Make_path}:${env:PATH}", + "MAXIM_PATH":"${config:MAXIM_PATH}" + }, + + "target":"MAX78000", + "board":"EvKit_V1", + + "project_name":"${workspaceFolderBasename}", + + "program_file":"${config:project_name}.elf", + "symbol_file":"${config:program_file}", + + "M4_OCD_interface_file":"cmsis-dap.cfg", + "M4_OCD_target_file":"max78000.cfg", + "RV_OCD_interface_file":"ftdi/olimex-arm-usb-ocd-h.cfg", + "RV_OCD_target_file":"${config:target}_riscv.cfg", + + "v_Arm_GCC":"10.3", + "v_xPack_GCC":"12.2.0-3.1", + + "OCD_path":"${config:MAXIM_PATH}/Tools/OpenOCD", + "ARM_GCC_path":"${config:MAXIM_PATH}/Tools/GNUTools/${config:v_Arm_GCC}", + "xPack_GCC_path":"${config:MAXIM_PATH}/Tools/xPack/riscv-none-elf-gcc/${config:v_xPack_GCC}", + "Make_path":"${config:MAXIM_PATH}/Tools/GNUTools/Make", + "MSYS_path":"${config:MAXIM_PATH}/Tools/MSYS2", + + "C_Cpp.default.includePath": [ + "${workspaceFolder}", + "${workspaceFolder}/**", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Device/Maxim/${config:target}/Include", + "${config:MAXIM_PATH}/Libraries/CMSIS/Include", + "${config:ARM_GCC_path}/arm-none-eabi/include", + "${config:ARM_GCC_path}/lib/gcc/arm-none-eabi/${config:v_Arm_GCC}/include", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Include/${config:target}", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ExtMemory", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/EEPROM", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/CODEC" + ], + "C_Cpp.default.browse.path": [ + "${workspaceFolder}", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/Source", + "${config:MAXIM_PATH}/Libraries/Boards/${config:target}/${config:board}/Source", + "${config:MAXIM_PATH}/Libraries/PeriphDrivers/Source", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Camera", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Display/fonts", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/LED", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PMIC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/PushButton", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/Touchscreen", + "${config:MAXIM_PATH}/Libraries/MiscDrivers", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/ADC", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/EEPROM", + "${config:MAXIM_PATH}/Libraries/MiscDrivers/CODEC" + ], + "C_Cpp.default.defines": [ + + ], + "C_Cpp.default.forcedInclude": [ + "${workspaceFolder}/build/project_defines.h" + ] +} + diff --git a/Examples/MAX78000/UART_DMA/.vscode/tasks.json b/Examples/MAX78000/UART_DMA/.vscode/tasks.json new file mode 100644 index 00000000000..e95445e2b3e --- /dev/null +++ b/Examples/MAX78000/UART_DMA/.vscode/tasks.json @@ -0,0 +1,115 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build", + "type": "shell", + "command": "make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -r -j 8 --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean", + "type": "shell", + "command": "make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 clean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "clean-periph", + "type": "shell", + "command": "make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}", + "osx":{ + "command": "source ~/.zshrc && make -j 8 distclean --output-sync=target --no-print-directory TARGET=${config:target} BOARD=${config:board} MAXIM_PATH=${config:MAXIM_PATH} MAKE=make PROJECT=${config:project_name}" + }, + "group": "build", + "problemMatcher": [] + }, + { + "label": "flash", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4 ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "flash & run", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--cd=\"${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "-x=\"${workspaceFolder}/.vscode/flash.gdb\"", + "--ex=\"flash_m4_run ${config:OCD_path} ${config:M4_OCD_interface_file} ${config:M4_OCD_target_file}\"", + "--batch" + ], + "group": "build", + "problemMatcher": [], + "dependsOn":["build"] + }, + { + "label": "erase flash", + "type": "shell", + "command": "openocd", + "args": [ + "-s", "${config:OCD_path}/scripts", + "-f", "interface/${config:M4_OCD_interface_file}", + "-f", "target/${config:M4_OCD_target_file}", + "-c", "\"init; reset halt; max32xxx mass_erase 0;\"", + "-c", "exit" + ], + "group":"build", + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "openocd (m4)", + "type": "shell", + "command": "openocd", + "args": [ + "-s", + "${config:OCD_path}/scripts", + "-f", + "interface/${config:M4_OCD_interface_file}", + "-f", + "target/${config:M4_OCD_target_file}", + "-c", + "\"init; reset halt\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + { + "label": "gdb (m4)", + "type": "shell", + "command": "arm-none-eabi-gdb", + "args": [ + "--ex=\"cd ${workspaceFolder}\"", + "--se=\"build/${config:program_file}\"", + "--symbols=build/${config:symbol_file}", + "--ex=\"target remote localhost:3333\"", + "--ex=\"monitor reset halt\"", + "--ex=\"b main\"", + "--ex=\"c\"" + ], + "problemMatcher": [], + "dependsOn":[] + }, + ] +} \ No newline at end of file diff --git a/Examples/MAX78000/UART_DMA/Makefile b/Examples/MAX78000/UART_DMA/Makefile new file mode 100644 index 00000000000..5d1117380ea --- /dev/null +++ b/Examples/MAX78000/UART_DMA/Makefile @@ -0,0 +1,382 @@ +############################################################################### + # + # Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by + # Analog Devices, Inc.), + # Copyright (C) 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# ** Readme! ** +# Don't edit this file! This is the core Makefile for a MaximSDK +# project. The available configuration options can be overridden +# in "project.mk", on the command-line, or with system environment +# variables. + +# See https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system +# for more detailed instructions on how to use this system. + +# The detailed instructions mentioned above are easier to read than +# this file, but the comments found in this file also outline the +# available configuration variables. This file is organized into +# sub-sections, some of which expose config variables. + + +# ******************************************************************************* +# Set the target microcontroller and board to compile for. + +# Every TARGET microcontroller has some Board Support Packages (BSPs) that are +# available for it under the MaximSDK/Libraries/Boards/TARGET folder. The BSP +# that gets selected is MaximSDK/Libraries/Boards/TARGET/BOARD. + +# Configuration Variables: +# - TARGET : Override the default target microcontroller. Ex: TARGET=MAX78000 +# - BOARD : Override the default BSP (case sensitive). Ex: BOARD=EvKit_V1, BOARD=FTHR_RevA + + +ifeq "$(TARGET)" "" +# Default target microcontroller +TARGET := MAX78000 +TARGET_UC := MAX78000 +TARGET_LC := max78000 +else +# "TARGET" has been overridden in the environment or on the command-line. +# We need to calculate an upper and lowercase version of the part number, +# because paths on Linux and MacOS are case-sensitive. +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) +endif + +# Default board. +BOARD ?= EvKit_V1 + +# ******************************************************************************* +# Locate the MaximSDK + +# This Makefile needs to know where to find the MaximSDK, and the MAXIM_PATH variable +# should point to the root directory of the MaximSDK installation. Setting this manually +# is usually only required if you're working on the command-line. + +# If MAXIM_PATH is not specified, we assume the project still lives inside of the MaximSDK +# and move up from this project's original location. + +# Configuration Variables: +# - MAXIM_PATH : Tell this Makefile where to find the MaximSDK. Ex: MAXIM_PATH=C:/MaximSDK + + +ifneq "$(MAXIM_PATH)" "" +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +# Locate some other useful paths... +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS +endif + +# ******************************************************************************* +# Include project Makefile. We do this after formulating TARGET, BOARD, and MAXIM_PATH +# in case project.mk needs to reference those values. However, we also include +# this as early as possible in the Makefile so that it can append to or override +# the variables below. + + +PROJECTMK ?= $(abspath ./project.mk) +include $(PROJECTMK) +$(info Loaded project.mk) +# PROJECTMK is also used by implicit rules and other libraries to add project.mk as a watch file + +# ******************************************************************************* +# Final path sanitization and re-calculation. No options here. + +ifeq "$(MAXIM_PATH)" "" +# MAXIM_PATH is still not defined... +DEPTH := ../../../ +MAXIM_PATH := $(abspath $(DEPTH)) +$(warning Warning: MAXIM_PATH is not set! Set MAXIM_PATH in your environment or in project.mk to clear this warning.) +$(warning Warning: Attempting to use $(MAXIM_PATH) calculated from relative path) +else +# Sanitize MAXIM_PATH for backslashes +MAXIM_PATH := $(subst \,/,$(MAXIM_PATH)) +endif + +# Final recalculation of LIBS_DIR/CMSIS_ROOT +LIBS_DIR := $(abspath $(MAXIM_PATH)/Libraries) +CMSIS_ROOT := $(LIBS_DIR)/CMSIS + +# One final UC/LC check in case user set TARGET in project.mk +TARGET_UC := $(subst m,M,$(subst a,A,$(subst x,X,$(TARGET)))) +TARGET_LC := $(subst M,m,$(subst A,a,$(subst X,x,$(TARGET)))) + +export TARGET +export TARGET_UC +export TARGET_LC +export CMSIS_ROOT +# TODO: Remove dependency on exports for these variables. + +# ******************************************************************************* +# Set up search paths, and auto-detect all source code on those paths. + +# The following paths are searched by default, where "./" is the project directory. +# ./ +# |- *.h +# |- *.c +# |-include (optional) +# |- *.h +# |-src (optional) +# |- *.c + +# Configuration Variables: +# - VPATH : Tell this Makefile to search additional locations for source (.c) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - IPATH : Tell this Makefile to search additional locations for header (.h) files. +# You should use the "+=" operator with this option. +# Ex: VPATH += your/new/path +# - SRCS : Tell this Makefile to explicitly add a source (.c) file to the build. +# This is really only useful if you want to add a source file that isn't +# on any VPATH, in which case you can add the full path to the file here. +# You should use the "+=" operator with this option. +# Ex: SRCS += your/specific/source/file.c +# - AUTOSEARCH : Set whether this Makefile should automatically detect .c files on +# VPATH and add them to the build. This is enabled by default. Set +# to 0 to disable. If autosearch is disabled, source files must be +# manually added to SRCS. +# Ex: AUTOSEARCH = 0 + + +# Where to find source files for this project. +VPATH += . +VPATH += src +VPATH := $(VPATH) + +# Where to find header files for this project +IPATH += . +IPATH += include +IPATH := $(IPATH) + +AUTOSEARCH ?= 1 +ifeq ($(AUTOSEARCH), 1) +# Auto-detect all C/C++ source files on VPATH +SRCS += $(wildcard $(addsuffix /*.c, $(VPATH))) +SRCS += $(wildcard $(addsuffix /*.cpp, $(VPATH))) +endif + +# Collapse SRCS before passing them on to the next stage +SRCS := $(SRCS) + +# ******************************************************************************* +# Set the output filename + +# Configuration Variables: +# - PROJECT : Override the default output filename. Ex: PROJECT=MyProject + + +# The default value creates a file named after the target micro. Ex: MAX78000.elf +PROJECT ?= $(TARGET_LC) + +# ******************************************************************************* +# Compiler options + +# Configuration Variables: +# - DEBUG : Set DEBUG=1 to build explicitly for debugging. This adds some additional +# symbols and sets -Og as the default optimization level. +# - MXC_OPTIMIZE_CFLAGS : Override the default compiler optimization level. +# Ex: MXC_OPTIMIZE_CFLAGS = -O2 +# - PROJ_CFLAGS : Add additional compiler flags to the build. +# You should use the "+=" operator with this option. +# Ex: PROJ_CFLAGS += -Wextra +# - MFLOAT_ABI : Set the floating point acceleration level. +# The only options are "hard", "soft", or "softfp". +# Ex: MFLOAT_ABI = hard +# - LINKERFILE : Override the default linkerfile. +# Ex: LINKERFILE = customlinkerfile.ld +# - LINKERPATH : Override the default search location for $(LINKERFILE) +# The default search location is $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +# If $(LINKERFILE) cannot be found at this path, then the root project +# directory will be used as a fallback. + +# Select 'GCC' or 'IAR' compiler +ifeq "$(COMPILER)" "" +COMPILER := GCC +endif + +# Set default compiler optimization levels +ifeq "$(MAKECMDGOALS)" "release" +# Default optimization level for "release" builds (make release) +MXC_OPTIMIZE_CFLAGS ?= -O2 +DEBUG = 0 +endif + +ifeq ($(DEBUG),1) +# Optimizes for debugging as recommended +# by GNU for code-edit-debug cycles +# https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options +MXC_OPTIMIZE_CFLAGS := -Og +endif + +# Default level if not building for release or explicitly for debug +MXC_OPTIMIZE_CFLAGS ?= -O2 + +# Set compiler flags +PROJ_CFLAGS += -Wall # Enable warnings +PROJ_CFLAGS += -DMXC_ASSERT_ENABLE + +# Set hardware floating point acceleration. +# Options are: +# - hard +# - soft +# - softfp (default if MFLOAT_ABI is not set) +MFLOAT_ABI ?= softfp +# MFLOAT_ABI must be exported to other Makefiles +export MFLOAT_ABI + +# This path contains system-level intialization files for the target micro. Add to the build. +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source + +# ******************************************************************************* +# Secure Boot Tools (SBT) + +# This section integrates the Secure Boot Tools. It's intended for use with +# microcontrollers that have a secure bootloader. + +# Enabling SBT integration will add some special rules, such as "make sla", "make scpa", etc. + +# Configuration variables: +# SBT : Toggle SBT integration. Set to 1 to enable, or 0 +# to disable +# MAXIM_SBT_DIR : Specify the location of the SBT tool binaries. This defaults to +# Tools/SBT in the MaximSDK. The standalone SBT installer will override +# this via an environment variable. +# TARGET_SEC : Specify the part number to be passed into the SBT. This should match +# the secure variant part #. The default value will depend on TARGET. +# For example, TARGET=MAX32650 will result in TARGET_SEC=MAX32651, and +# the default selection happens in Tools/SBT/SBT-config. +# However, if there are multiple secure part #s for the target +# microcontroller this variable may need to be changed. + +SBT ?= 0 +ifeq ($(SBT), 1) +MAXIM_SBT_DIR ?= $(MAXIM_PATH)/Tools/SBT +MAXIM_SBT_DIR := $(subst \,/,$(MAXIM_SBT_DIR)) +# ^ Must sanitize path for \ on Windows, since this may come from an environment +# variable. + +export MAXIM_SBT_DIR # SBTs must have this environment variable defined to work + +# SBT-config.mk and SBT-rules.mk are included further down this Makefile. + +endif # SBT + +# ******************************************************************************* +# Default goal selection. This section allows you to override the default goal +# that will run if no targets are specified on the command-line. +# (ie. just running 'make' instead of 'make all') + +# Configuration variables: +# .DEFAULT_GOAL : Set the default goal if no targets were specified on the +# command-line +# ** "override" must be used with this variable. ** +# Ex: "override .DEFAULT_GOAL = mygoal" + +ifeq "$(.DEFAULT_GOAL)" "" +ifeq ($(SBT),1) +override .DEFAULT_GOAL := sla +else +override .DEFAULT_GOAL := all +endif +endif + +# Developer note: 'override' is used above for legacy Makefile compatibility. +# gcc.mk/gcc_riscv.mk need to hard-set 'all' internally, so this new system +# uses 'override' to come in over the top without breaking old projects. + +# It's also necessary to explicitly set MAKECMDGOALS... +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + +# Enable colors when --sync-output is used. +# See https://www.gnu.org/software/make/manual/make.html#Terminal-Output (section 13.2) +ifneq ($(MAKE_TERMOUT),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +ifneq ($(FORCE_COLOR),) +PROJ_CFLAGS += -fdiagnostics-color=always +endif + +# ******************************************************************************* +# Include SBT config. We need to do this here because it needs to know +# the current MAKECMDGOAL. +ifeq ($(SBT),1) +include $(MAXIM_PATH)/Tools/SBT/SBT-config.mk +endif + +# ******************************************************************************* +# Libraries + +# This section offers "toggle switches" to include or exclude the libraries that +# are available in the MaximSDK. Set a configuration variable to 1 to include the +# library in the build, or 0 to exclude. + +# Each library may also have its own library specific configuration variables. See +# Libraries/libs.mk for more details. + +# Configuration variables: +# - LIB_BOARD : Include the Board-Support Package (BSP) library. (Enabled by default) +# - LIB_PERIPHDRIVERS : Include the peripheral driver library. (Enabled by default) +# - LIB_CMSIS_DSP : Include the CMSIS-DSP library. +# - LIB_CORDIO : Include the Cordio BLE library +# - LIB_FCL : Include the Free Cryptographic Library (FCL) +# - LIB_FREERTOS : Include the FreeRTOS and FreeRTOS-Plus-CLI libraries +# - LIB_LC3 : Include the Low Complexity Communication Codec (LC3) library +# - LIB_LITTLEFS : Include the "little file system" (littleFS) library +# - LIB_LWIP : Include the lwIP library +# - LIB_MAXUSB : Include the MAXUSB library +# - LIB_SDHC : Include the SDHC library + +include $(LIBS_DIR)/libs.mk + + +# ******************************************************************************* +# Rules + +# Include the rules for building for this target. All other makefiles should be +# included before this one. +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/$(COMPILER)/$(TARGET_LC).mk + +# Include the rules that integrate the SBTs. SBTs are a special case that must be +# include after the core gcc rules to extend them. +ifeq ($(SBT), 1) +include $(MAXIM_PATH)/Tools/SBT/SBT-rules.mk +endif + + +# Get .DEFAULT_GOAL working. +ifeq "$(MAKECMDGOALS)" "" +MAKECMDGOALS:=$(.DEFAULT_GOAL) +endif + + +all: +# Extend the functionality of the "all" recipe here + $(PREFIX)-size --format=berkeley $(BUILD_DIR)/$(PROJECT).elf + +libclean: + $(MAKE) -f ${PERIPH_DRIVER_DIR}/periphdriver.mk clean.periph + +clean: +# Extend the functionality of the "clean" recipe here + +# The rule to clean out all the build products. +distclean: clean libclean diff --git a/Examples/MAX78000/UART_DMA/README.md b/Examples/MAX78000/UART_DMA/README.md new file mode 100644 index 00000000000..50b59cbbe5b --- /dev/null +++ b/Examples/MAX78000/UART_DMA/README.md @@ -0,0 +1,71 @@ +## Description + +To demonstrate the use of the UART peripheral with DMA, data is sent between two UART ports on the MAX78000. + + +## Software + +### Project Usage + +Universal instructions on building, flashing, and debugging this project can be found in the **[MSDK User Guide](https://analogdevicesinc.github.io/msdk/USERGUIDE/)**. + +### Project-Specific Build Notes + +(None - this project builds as a standard example) + +## Required Connections + +- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. +- Connect P1.0 (UART 2 RX) and P2.7 (UART 3 TX). + +## Expected Output + +The Console UART of the device will output these messages: + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` + +or + +``` +**************** UART Example ****************** +This example sends data from one UART to another + +Connect RX(Px.xx) of UARTx and TX(Px.xx) of UARTx. + +To indicate a successful UART transfer, LED1 will illuminate. + +Push SW2 to continue + +UART Baud : 115200 Hz +Test Length : 512 bytes + +Acquired DMA channel 0 for RX transaction +Acquired DMA channel 1 for TX transaction + +-->UART Initialized + +-->Data verified + +-->Example Succeeded + +``` \ No newline at end of file diff --git a/Examples/MAX78000/UART_DMA/UART_DMA.launch b/Examples/MAX78000/UART_DMA/UART_DMA.launch new file mode 100644 index 00000000000..7eb32081d3d --- /dev/null +++ b/Examples/MAX78000/UART_DMA/UART_DMA.launch @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Examples/MAX78000/UART_DMA/main.c b/Examples/MAX78000/UART_DMA/main.c new file mode 100644 index 00000000000..ab044bbbe7f --- /dev/null +++ b/Examples/MAX78000/UART_DMA/main.c @@ -0,0 +1,276 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file main.c + * @brief Main for UART with DMA example. + * @details This example demonstrates how to use DMA with UART for data transfer. + * The example sets up DMA channels to handle UART transmissions and receptions, + * looping back the TX of one UART to the RX of another UART. A jumper must be + * connected between P1.0 (UART 2 RX) -> P2.7 (UART 3 TX). + * The example uses either automatic or manual DMA handler configuration + * depending on the AUTOHANDLERS macro definition. + */ + +/***** Includes *****/ +#include +#include +#include +#include "mxc_device.h" +#include "pb.h" +#include "board.h" +#include "mxc_delay.h" +#include "uart.h" +#include "dma.h" +#include "nvic_table.h" +#include "led.h" + +/***** Definitions *****/ +#define AUTOHANDLERS + +#define UART_BAUD 115200 +#define BUFF_SIZE 512 + +#define RX_UART MXC_UART2 +#define TX_UART MXC_UART3 + +/***** Globals *****/ +volatile int READ_FLAG; +volatile int WRITE_FLAG; +volatile int buttonPressed; +static mxc_uart_req_t read_req; +static mxc_uart_req_t write_req; + +#if defined(BOARD_EVKIT_V1) +#warning "This example has been written for the MAX78000 FTHR board." +#endif + +/***** Functions *****/ +#ifndef AUTOHANDLERS +void DMA_RX_Handler(void) +{ + MXC_DMA_Handler(); +} + +void DMA_TX_Handler(void) +{ + MXC_DMA_Handler(); +} +#endif + +void readCallback(mxc_uart_req_t *req, int error) +{ + READ_FLAG = error; +} + +void writeCallback(mxc_uart_req_t *req, int error) +{ + WRITE_FLAG = error; +} + +void buttonHandler(void) +{ + buttonPressed = 1; +} + +#ifdef AUTOHANDLERS +int exampleDMAAutoHandlers(void) +{ + int error = 0; + + // Auto DMA handlers will automatically initialize DMA, acquire & assign channels, + // and guarantee that each transaction's callback function is executed when + // the transaction is complete. + MXC_UART_SetAutoDMAHandlers(RX_UART, true); + MXC_UART_SetAutoDMAHandlers(TX_UART, true); + + // "READ_FLAG" is set in the read transaction's callback. It will be set to 0 when + // the read request completes successfully. We use it to wait for the DMA transaction + // to complete, since the DMA APIs are asynchronous (non-blocking) + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&read_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_TransactionDMA(&write_req); + if (error) { + printf("-->Error starting DMA write: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return READ_FLAG; +} +#else +int exampleDMAManualHandlers(void) +{ + int error = 0; + + // Manally initialize DMA + MXC_DMA_Init(); + + // Manually acquire a channel for the read request and assign it to the drivers. + int rx_channel = MXC_DMA_AcquireChannel(); + if (rx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", rx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", rx_channel); + return rx_channel; + } + MXC_UART_SetRXDMAChannel(RX_UART, rx_channel); + + // Additionally, assign the NVIC IRQ to a function that calls "MXC_DMA_Handler()". + // This is required for any assigned callbacks to work. + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(rx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(rx_channel), DMA_RX_Handler); + + // Do the same for the write request. + int tx_channel = MXC_DMA_AcquireChannel(); + if (tx_channel >= 0) { + printf("Acquired DMA channel %i for RX transaction\n", tx_channel); + } else { + printf("Failed to acquire RX DMA channel with error %i\n", tx_channel); + return tx_channel; + } + MXC_UART_SetTXDMAChannel(TX_UART, tx_channel); + NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(tx_channel)); + MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(tx_channel), DMA_TX_Handler); + + // Initialize flags. We will use these to monitor when the read/write requests + // have completed, since the DMA APIs are asynchronous. + WRITE_FLAG = 1; + READ_FLAG = 1; + + error = MXC_UART_TransactionDMA(&read_req); + if (error) { + printf("-->Error starting DMA read: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_TransactionDMA(&write_req); + if (error) { + printf("-->Error starting DMA write: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + while (WRITE_FLAG) {} + while (READ_FLAG) {} + + printf("-->Transaction completed\n"); + return WRITE_FLAG; +} +#endif // AUTOHANDLERS + +/******************************************************************************/ +int main(void) +{ + int error, i, fail = 0; + uint8_t TxData[BUFF_SIZE]; + uint8_t RxData[BUFF_SIZE]; + + printf("\n\n**************** UART Example ******************\n"); + printf("This example sends data from one UART to another\n"); + printf("\nConnect P1.0 (UART 2 RX) to P2.7 (UART 3 TX).\n\n"); + printf("To indicate a successful UART transfer, LED1 will illuminate.\n"); + printf("\nPush SW1 to continue\n"); + + buttonPressed = 0; + PB_RegisterCallback(0, (pb_callback)buttonHandler); + while (!buttonPressed) {} + + printf("\nUART Baud \t: %d Hz\n", UART_BAUD); + printf("Test Length \t: %d bytes\n\n", BUFF_SIZE); + + // Initialize the data buffers + for (i = 0; i < BUFF_SIZE; i++) { + TxData[i] = i; + } + memset(RxData, 0x0, BUFF_SIZE); + + // Initialize the UART + error = MXC_UART_Init(TX_UART, UART_BAUD, MXC_UART_APB_CLK); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + error = MXC_UART_Init(RX_UART, UART_BAUD, MXC_UART_APB_CLK); + if (error < E_NO_ERROR) { + printf("-->Error initializing UART: %d\n", error); + printf("-->Example Failed\n"); + return error; + } + + // Setup request structs describing the transactions. + // Request structs are placed in the global scope so they + // don't go out of context. This can happen when a req struct + // is declared inside a function and the function completes. + // The memory would be freed, invalidating the UART driver's + // pointers to it. + read_req.uart = RX_UART; + read_req.rxData = RxData; + read_req.rxLen = BUFF_SIZE; + read_req.txLen = 0; + read_req.callback = readCallback; + + write_req.uart = TX_UART; + write_req.txData = TxData; + write_req.txLen = BUFF_SIZE; + write_req.rxLen = 0; + write_req.callback = writeCallback; + + printf("-->UART Initialized\n\n"); + +#ifdef AUTOHANDLERS + error = exampleDMAAutoHandlers(); +#else + error = exampleDMAManualHandlers(); +#endif + + if (READ_FLAG != E_NO_ERROR) { + printf("-->Error with read callback; %d\n", READ_FLAG); + fail++; + } + + if ((error = memcmp(RxData, TxData, BUFF_SIZE)) != 0) { + printf("-->Error verifying Data: %d\n", error); + fail++; + } else { + printf("-->Data verified\n"); + } + + if (fail != 0) { + printf("\n-->Example Failed\n"); + LED_On(0); // indicates FAIL + return E_FAIL; + } + + LED_On(1); // indicates SUCCESS + printf("\n-->Example Succeeded\n"); + return E_NO_ERROR; +} diff --git a/Examples/MAX78000/UART_DMA/project.mk b/Examples/MAX78000/UART_DMA/project.mk new file mode 100644 index 00000000000..b64113639d8 --- /dev/null +++ b/Examples/MAX78000/UART_DMA/project.mk @@ -0,0 +1,33 @@ +# This file can be used to set build configuration +# variables. These variables are defined in a file called +# "Makefile" that is located next to this one. + +# For instructions on how to use this system, see +# https://analogdevicesinc.github.io/msdk/USERGUIDE/#build-system + +#MXC_OPTIMIZE_CFLAGS = -Og +# ^ For example, you can uncomment this line to +# optimize the project for debugging + +# ********************************************************** + +# Add your config here! + +ifeq ($(BOARD),Aud01_RevA) +$(error ERR_NOTSUPPORTED: This project is not supported for the Audio board) +endif + +ifeq ($(BOARD),CAM01_RevA) +$(error ERR_NOTSUPPORTED: This project is not supported for the CAM01 board) +endif + +ifeq ($(BOARD),CAM02_RevA) +$(error ERR_NOTSUPPORTED: This project is not supported for the CAM02 board) +endif + +ifeq ($(BOARD),EVKIT) +$(error ERR_NOTSUPPORTED: This project is not supported for the FTHR board) +endif + + + diff --git a/Examples/MAX78002/Hello_World/README.md b/Examples/MAX78002/Hello_World/README.md index 77b16764822..c415e2a012b 100644 --- a/Examples/MAX78002/Hello_World/README.md +++ b/Examples/MAX78002/Hello_World/README.md @@ -16,7 +16,8 @@ Universal instructions on building, flashing, and debugging this project can be ## Required Connections -- Connect a USB cable between the PC and the CN2 (USB/PWR) connector. +- Connect a MAXPICO or other supported Debug adapter to the SWD Connector. +- Connect a USB cable between the PC and the CN2 (USB/UART) connector. - Connect the 5V power cable at (5V IN). - Close jumper (RX - P0.0) and (TX - P0.1) at Headers JP23 (UART 0 EN). - Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. diff --git a/Examples/MAX78002/RV_ARM_Loader/README.md b/Examples/MAX78002/RV_ARM_Loader/README.md index a3b04e5350c..067e6583f65 100644 --- a/Examples/MAX78002/RV_ARM_Loader/README.md +++ b/Examples/MAX78002/RV_ARM_Loader/README.md @@ -14,6 +14,16 @@ Universal instructions on building, flashing, and debugging this project can be * The application to load into the RISC-V core can be selected using the `RISCV_APP` option in [project.mk](project.mk). By default, the `Hello_World` example is used. +## Required Connections + +- Connect a MAXPICO or other supported Debug adapter to the SWD Connector. +- Connect a USB cable between the PC and the CN2 (USB/UART) connector. +- Connect the 5V power cable at (5V IN). +- Close jumper (RX - P0.0) and (TX - P0.1) at Headers JP23 (UART 0 EN). +- Open an terminal application on the PC and connect to the EV kit's console UART at 115200, 8-N-1. +- Close jumper JP1 (LED1 EN). +- Close jumper JP2 (LED2 EN). + ## Expected Output The Console UART of the device will output whatever the expected output for the `RISCV_APP`-selected project is. By default, that's the `Hello_World` output: diff --git a/Libraries/BlePhy/MAX32657/libphy.a b/Libraries/BlePhy/MAX32657/libphy.a new file mode 100644 index 00000000000..8f7ede46088 Binary files /dev/null and b/Libraries/BlePhy/MAX32657/libphy.a differ diff --git a/Libraries/Boards/MAX32690/APARD/Source/board.c b/Libraries/Boards/MAX32690/APARD/Source/board.c index a239698e495..0889bad3443 100644 --- a/Libraries/Boards/MAX32690/APARD/Source/board.c +++ b/Libraries/Boards/MAX32690/APARD/Source/board.c @@ -146,6 +146,8 @@ int Board_Init(void) return err; } + PB_Set_Polarity(0, PB_POLARITY_HIGH); + if ((err = LED_Init()) != E_NO_ERROR) { MXC_ASSERT_FAIL(); return err; diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_common_tables.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_common_tables.h new file mode 100644 index 00000000000..6a9270437fb --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_common_tables.h @@ -0,0 +1,318 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_common_tables.h + * Description: Extern declaration for common tables + * + * @version V1.10.0 + * @date 08 July 2021 + * + * Target Processor: Cortex-M and Cortex-A cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARM_COMMON_TABLES_H +#define ARM_COMMON_TABLES_H + +#include "arm_math_types.h" +#include "dsp/fast_math_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + /* Double Precision Float CFFT twiddles */ + extern const uint16_t armBitRevTable[1024]; + + extern const uint64_t twiddleCoefF64_16[32]; + + extern const uint64_t twiddleCoefF64_32[64]; + + extern const uint64_t twiddleCoefF64_64[128]; + + extern const uint64_t twiddleCoefF64_128[256]; + + extern const uint64_t twiddleCoefF64_256[512]; + + extern const uint64_t twiddleCoefF64_512[1024]; + + extern const uint64_t twiddleCoefF64_1024[2048]; + + extern const uint64_t twiddleCoefF64_2048[4096]; + + extern const uint64_t twiddleCoefF64_4096[8192]; + + extern const float32_t twiddleCoef_16[32]; + + extern const float32_t twiddleCoef_32[64]; + + extern const float32_t twiddleCoef_64[128]; + + extern const float32_t twiddleCoef_128[256]; + + extern const float32_t twiddleCoef_256[512]; + + extern const float32_t twiddleCoef_512[1024]; + + extern const float32_t twiddleCoef_1024[2048]; + + extern const float32_t twiddleCoef_2048[4096]; + + extern const float32_t twiddleCoef_4096[8192]; + #define twiddleCoef twiddleCoef_4096 + + /* Q31 */ + + extern const q31_t twiddleCoef_16_q31[24]; + + extern const q31_t twiddleCoef_32_q31[48]; + + extern const q31_t twiddleCoef_64_q31[96]; + + extern const q31_t twiddleCoef_128_q31[192]; + + extern const q31_t twiddleCoef_256_q31[384]; + + extern const q31_t twiddleCoef_512_q31[768]; + + extern const q31_t twiddleCoef_1024_q31[1536]; + + extern const q31_t twiddleCoef_2048_q31[3072]; + + extern const q31_t twiddleCoef_4096_q31[6144]; + + extern const q15_t twiddleCoef_16_q15[24]; + + extern const q15_t twiddleCoef_32_q15[48]; + + extern const q15_t twiddleCoef_64_q15[96]; + + extern const q15_t twiddleCoef_128_q15[192]; + + extern const q15_t twiddleCoef_256_q15[384]; + + extern const q15_t twiddleCoef_512_q15[768]; + + extern const q15_t twiddleCoef_1024_q15[1536]; + + extern const q15_t twiddleCoef_2048_q15[3072]; + + extern const q15_t twiddleCoef_4096_q15[6144]; + + /* Double Precision Float RFFT twiddles */ + extern const uint64_t twiddleCoefF64_rfft_32[32]; + + extern const uint64_t twiddleCoefF64_rfft_64[64]; + + extern const uint64_t twiddleCoefF64_rfft_128[128]; + + extern const uint64_t twiddleCoefF64_rfft_256[256]; + + extern const uint64_t twiddleCoefF64_rfft_512[512]; + + extern const uint64_t twiddleCoefF64_rfft_1024[1024]; + + extern const uint64_t twiddleCoefF64_rfft_2048[2048]; + + extern const uint64_t twiddleCoefF64_rfft_4096[4096]; + + extern const float32_t twiddleCoef_rfft_32[32]; + + extern const float32_t twiddleCoef_rfft_64[64]; + + extern const float32_t twiddleCoef_rfft_128[128]; + + extern const float32_t twiddleCoef_rfft_256[256]; + + extern const float32_t twiddleCoef_rfft_512[512]; + + extern const float32_t twiddleCoef_rfft_1024[1024]; + + extern const float32_t twiddleCoef_rfft_2048[2048]; + + extern const float32_t twiddleCoef_rfft_4096[4096]; + + /* Double precision floating-point bit reversal tables */ + + #define ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH ((uint16_t)12) + extern const uint16_t armBitRevIndexTableF64_16[ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH ((uint16_t)24) + extern const uint16_t armBitRevIndexTableF64_32[ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH ((uint16_t)56) + extern const uint16_t armBitRevIndexTableF64_64[ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH ((uint16_t)112) + extern const uint16_t armBitRevIndexTableF64_128[ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH ((uint16_t)240) + extern const uint16_t armBitRevIndexTableF64_256[ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH ((uint16_t)480) + extern const uint16_t armBitRevIndexTableF64_512[ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH ((uint16_t)992) + extern const uint16_t armBitRevIndexTableF64_1024[ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH ((uint16_t)1984) + extern const uint16_t armBitRevIndexTableF64_2048[ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH ((uint16_t)4032) + extern const uint16_t armBitRevIndexTableF64_4096[ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH]; + /* floating-point bit reversal tables */ + + #define ARMBITREVINDEXTABLE_16_TABLE_LENGTH ((uint16_t)20) + extern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE_16_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_32_TABLE_LENGTH ((uint16_t)48) + extern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE_32_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_64_TABLE_LENGTH ((uint16_t)56) + extern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE_64_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208) + extern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440) + extern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448) + extern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_1024_TABLE_LENGTH ((uint16_t)1800) + extern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE_1024_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_2048_TABLE_LENGTH ((uint16_t)3808) + extern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE_2048_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_4096_TABLE_LENGTH ((uint16_t)4032) + extern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE_4096_TABLE_LENGTH]; + + + /* fixed-point bit reversal tables */ + + #define ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH ((uint16_t)12) + extern const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH ((uint16_t)24) + extern const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH ((uint16_t)56) + extern const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH ((uint16_t)112) + extern const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH ((uint16_t)240) + extern const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH ((uint16_t)480) + extern const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992) + extern const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984) + extern const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH]; + + #define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032) + extern const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH]; + + extern const float32_t realCoefA[8192]; + extern const float32_t realCoefB[8192]; + + extern const q31_t realCoefAQ31[8192]; + extern const q31_t realCoefBQ31[8192]; + + extern const q15_t realCoefAQ15[8192]; + extern const q15_t realCoefBQ15[8192]; + + extern const float32_t Weights_128[256]; + extern const float32_t cos_factors_128[128]; + + extern const float32_t Weights_512[1024]; + extern const float32_t cos_factors_512[512]; + + extern const float32_t Weights_2048[4096]; + extern const float32_t cos_factors_2048[2048]; + + extern const float32_t Weights_8192[16384]; + extern const float32_t cos_factors_8192[8192]; + + extern const q15_t WeightsQ15_128[256]; + extern const q15_t cos_factorsQ15_128[128]; + + extern const q15_t WeightsQ15_512[1024]; + extern const q15_t cos_factorsQ15_512[512]; + + extern const q15_t WeightsQ15_2048[4096]; + extern const q15_t cos_factorsQ15_2048[2048]; + + extern const q15_t WeightsQ15_8192[16384]; + extern const q15_t cos_factorsQ15_8192[8192]; + + extern const q31_t WeightsQ31_128[256]; + extern const q31_t cos_factorsQ31_128[128]; + + extern const q31_t WeightsQ31_512[1024]; + extern const q31_t cos_factorsQ31_512[512]; + + extern const q31_t WeightsQ31_2048[4096]; + extern const q31_t cos_factorsQ31_2048[2048]; + + extern const q31_t WeightsQ31_8192[16384]; + extern const q31_t cos_factorsQ31_8192[8192]; + + + extern const q15_t armRecipTableQ15[64]; + + extern const q31_t armRecipTableQ31[64]; + + /* Tables for Fast Math Sine and Cosine */ + extern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1]; + + extern const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1]; + + extern const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1]; + + + /* Accurate scalar sqrt */ + extern const q31_t sqrt_initial_lut_q31[32]; + + extern const q15_t sqrt_initial_lut_q15[16]; + +#if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) + extern const q15_t sqrtTable_Q15[256]; + extern const q31_t sqrtTable_Q31[256]; + extern const unsigned char hwLUT[256]; +#endif + +#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) + extern const float32_t exp_tab[8]; + extern const float32_t __logf_lut_f32[8]; +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* ARM_COMMON_TABLES_H */ + diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_common_tables_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_common_tables_f16.h new file mode 100755 index 00000000000..c84a766adf6 --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_common_tables_f16.h @@ -0,0 +1,95 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_common_tables_f16.h + * Description: Extern declaration for common tables + * + * @version V1.10.0 + * @date 08 July 2021 + * + * Target Processor: Cortex-M and Cortex-A cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARM_COMMON_TABLES_F16_H +#define ARM_COMMON_TABLES_F16_H + +#include "arm_math_types_f16.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + + /* F16 */ + #if !defined(__CC_ARM) && defined(ARM_FLOAT16_SUPPORTED) + extern const float16_t twiddleCoefF16_16[32]; + + extern const float16_t twiddleCoefF16_32[64]; + + extern const float16_t twiddleCoefF16_64[128]; + + extern const float16_t twiddleCoefF16_128[256]; + + extern const float16_t twiddleCoefF16_256[512]; + + extern const float16_t twiddleCoefF16_512[1024]; + + extern const float16_t twiddleCoefF16_1024[2048]; + + extern const float16_t twiddleCoefF16_2048[4096]; + + extern const float16_t twiddleCoefF16_4096[8192]; + #define twiddleCoefF16 twiddleCoefF16_4096 + + + extern const float16_t twiddleCoefF16_rfft_32[32]; + + extern const float16_t twiddleCoefF16_rfft_64[64]; + + extern const float16_t twiddleCoefF16_rfft_128[128]; + + extern const float16_t twiddleCoefF16_rfft_256[256]; + + extern const float16_t twiddleCoefF16_rfft_512[512]; + + extern const float16_t twiddleCoefF16_rfft_1024[1024]; + + extern const float16_t twiddleCoefF16_rfft_2048[2048]; + + extern const float16_t twiddleCoefF16_rfft_4096[4096]; + + #endif /* ARMAC5 */ + + +#if !defined(__CC_ARM) && defined(ARM_FLOAT16_SUPPORTED) +#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) + extern const float16_t exp_tab_f16[8]; + extern const float16_t __logf_lut_f16[8]; +#endif +#endif + + +#ifdef __cplusplus +} +#endif + +#endif /* _ARM_COMMON_TABLES_F16_H */ + + diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_const_structs.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_const_structs.h new file mode 100644 index 00000000000..32c1a436e67 --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_const_structs.h @@ -0,0 +1,86 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_const_structs.h + * Description: Constant structs that are initialized for user convenience. + * For example, some can be given as arguments to the arm_cfft_f32() function. + * + * @version V1.10.0 + * @date 08 July 2021 + * + * Target Processor: Cortex-M and Cortex-A cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARM_CONST_STRUCTS_H +#define ARM_CONST_STRUCTS_H + +#include "arm_math_types.h" +#include "arm_common_tables.h" +#include "dsp/transform_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len16; + extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len32; + extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len64; + extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len128; + extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len256; + extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len512; + extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len1024; + extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len2048; + extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len4096; + + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len16; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len32; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len64; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len128; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len256; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len512; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048; + extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096; + + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len16; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len32; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len64; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len128; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len256; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len512; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048; + extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096; + + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len16; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len32; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len64; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len128; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len256; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len512; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048; + extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096; + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_const_structs_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_const_structs_f16.h new file mode 100755 index 00000000000..3a520b6b94f --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_const_structs_f16.h @@ -0,0 +1,59 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_const_structs_f16.h + * Description: Constant structs that are initialized for user convenience. + * For example, some can be given as arguments to the arm_cfft_f16() function. + * + * @version V1.10.0 + * @date 08 July 2021 + * + * Target Processor: Cortex-M and Cortex-A cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARM_CONST_STRUCTS_F16_H +#define ARM_CONST_STRUCTS_F16_H + +#include "arm_math_types_f16.h" +#include "arm_common_tables.h" +#include "arm_common_tables_f16.h" +#include "dsp/transform_functions_f16.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#if !defined(__CC_ARM) && defined(ARM_FLOAT16_SUPPORTED) + extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len16; + extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len32; + extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len64; + extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len128; + extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len256; + extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len512; + extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len1024; + extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len2048; + extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len4096; +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_helium_utils.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_helium_utils.h old mode 100644 new mode 100755 similarity index 64% rename from Libraries/CMSIS/5.9.0/DSP/Include/arm_helium_utils.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_helium_utils.h index 55afd6471be..65167678261 --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_helium_utils.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_helium_utils.h @@ -26,21 +26,23 @@ * limitations under the License. */ -#ifndef _ARM_UTILS_HELIUM_H_ -#define _ARM_UTILS_HELIUM_H_ +#ifndef ARM_UTILS_HELIUM_H_ +#define ARM_UTILS_HELIUM_H_ -#ifdef __cplusplus -extern "C" { + +#ifdef __cplusplus +extern "C" +{ #endif /*************************************** Definitions available for MVEF and MVEI ***************************************/ -#if (defined(ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI)) && \ - !defined(ARM_MATH_AUTOVECTORIZE) +#if (defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI)) && !defined(ARM_MATH_AUTOVECTORIZE) + +#define INACTIVELANE 0 /* inactive lane content */ -#define INACTIVELANE 0 /* inactive lane content */ #endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI) */ @@ -49,63 +51,70 @@ Definitions available for MVEF and MVEI Definitions available for MVEF only ***************************************/ -#if (defined(ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF)) && !defined(ARM_MATH_AUTOVECTORIZE) +#if (defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF)) && !defined(ARM_MATH_AUTOVECTORIZE) __STATIC_FORCEINLINE float32_t vecAddAcrossF32Mve(float32x4_t in) { float32_t acc; - acc = vgetq_lane(in, 0) + vgetq_lane(in, 1) + vgetq_lane(in, 2) + vgetq_lane(in, 3); + acc = vgetq_lane(in, 0) + vgetq_lane(in, 1) + + vgetq_lane(in, 2) + vgetq_lane(in, 3); return acc; } + + + /* newton initial guess */ -#define INVSQRT_MAGIC_F32 0x5f3759df -#define INV_NEWTON_INIT_F32 0x7EF127EA - -#define INVSQRT_NEWTON_MVE_F32(invSqrt, xHalf, xStart) \ - { \ - float32x4_t tmp; \ - \ - /* tmp = xhalf * x * x */ \ - tmp = vmulq(xStart, xStart); \ - tmp = vmulq(tmp, xHalf); \ - /* (1.5f - xhalf * x * x) */ \ - tmp = vsubq(vdupq_n_f32(1.5f), tmp); \ - /* x = x*(1.5f-xhalf*x*x); */ \ - invSqrt = vmulq(tmp, xStart); \ - } +#define INVSQRT_MAGIC_F32 0x5f3759df +#define INV_NEWTON_INIT_F32 0x7EF127EA + + +#define INVSQRT_NEWTON_MVE_F32(invSqrt, xHalf, xStart)\ +{ \ + float32x4_t tmp; \ + \ + /* tmp = xhalf * x * x */ \ + tmp = vmulq(xStart, xStart); \ + tmp = vmulq(tmp, xHalf); \ + /* (1.5f - xhalf * x * x) */ \ + tmp = vsubq(vdupq_n_f32(1.5f), tmp); \ + /* x = x*(1.5f-xhalf*x*x); */ \ + invSqrt = vmulq(tmp, xStart); \ +} #endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) */ + /*************************************** Definitions available for f16 datatype with HW acceleration only ***************************************/ #if defined(ARM_FLOAT16_SUPPORTED) -#if defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) +#if defined (ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) __STATIC_FORCEINLINE float16_t vecAddAcrossF16Mve(float16x8_t in) { float16x8_t tmpVec; _Float16 acc; - tmpVec = (float16x8_t)vrev32q_s16((int16x8_t)in); + tmpVec = (float16x8_t) vrev32q_s16((int16x8_t) in); in = vaddq_f16(tmpVec, in); - tmpVec = (float16x8_t)vrev64q_s32((int32x4_t)in); + tmpVec = (float16x8_t) vrev64q_s32((int32x4_t) in); in = vaddq_f16(tmpVec, in); acc = (_Float16)vgetq_lane_f16(in, 0) + (_Float16)vgetq_lane_f16(in, 4); return acc; } -__STATIC_FORCEINLINE float16x8_t __mve_cmplx_sum_intra_vec_f16(float16x8_t vecIn) +__STATIC_FORCEINLINE float16x8_t __mve_cmplx_sum_intra_vec_f16( + float16x8_t vecIn) { - float16x8_t vecTmp, vecOut; - uint32_t tmp; + float16x8_t vecTmp, vecOut; + uint32_t tmp = 0; - vecTmp = (float16x8_t)vrev64q_s32((int32x4_t)vecIn); + vecTmp = (float16x8_t) vrev64q_s32((int32x4_t) vecIn); // TO TRACK : using canonical addition leads to unefficient code generation for f16 // vecTmp = vecTmp + vecAccCpx0; /* @@ -118,7 +127,7 @@ __STATIC_FORCEINLINE float16x8_t __mve_cmplx_sum_intra_vec_f16(float16x8_t vecIn /* * shift left, random tmp insertion in bottom */ - vecOut = vreinterpretq_f16_s32(vshlcq_s32(vreinterpretq_s32_f16(vecOut), &tmp, 32)); + vecOut = vreinterpretq_f16_s32(vshlcq_s32(vreinterpretq_s32_f16(vecOut) , &tmp, 32)); /* * Compute: * DONTCARE | DONTCARE | re0+re1+re0+re1 |im0+im1+im0+im1 @@ -132,51 +141,56 @@ __STATIC_FORCEINLINE float16x8_t __mve_cmplx_sum_intra_vec_f16(float16x8_t vecIn return vecOut; } -#define mve_cmplx_sum_intra_r_i_f16(vec, Re, Im) \ - { \ - float16x8_t vecOut = __mve_cmplx_sum_intra_vec_f16(vec); \ - Re = vgetq_lane(vecOut, 4); \ - Im = vgetq_lane(vecOut, 5); \ - } -__STATIC_FORCEINLINE void mve_cmplx_sum_intra_vec_f16(float16x8_t vecIn, float16_t *pOut) +#define mve_cmplx_sum_intra_r_i_f16(vec, Re, Im) \ +{ \ + float16x8_t vecOut = __mve_cmplx_sum_intra_vec_f16(vec); \ + Re = vgetq_lane(vecOut, 4); \ + Im = vgetq_lane(vecOut, 5); \ +} + +__STATIC_FORCEINLINE void mve_cmplx_sum_intra_vec_f16( + float16x8_t vecIn, + float16_t *pOut) { - float16x8_t vecOut = __mve_cmplx_sum_intra_vec_f16(vecIn); + float16x8_t vecOut = __mve_cmplx_sum_intra_vec_f16(vecIn); /* * Cmplx sum is in 4rd & 5th f16 elt * use 32-bit extraction */ - *(float32_t *)pOut = ((float32x4_t)vecOut)[2]; + *(float32_t *) pOut = ((float32x4_t) vecOut)[2]; } -#define INVSQRT_MAGIC_F16 0x59ba /* ( 0x1ba = 0x3759df >> 13) */ + +#define INVSQRT_MAGIC_F16 0x59ba /* ( 0x1ba = 0x3759df >> 13) */ /* canonical version of INVSQRT_NEWTON_MVE_F16 leads to bad performance */ -#define INVSQRT_NEWTON_MVE_F16(invSqrt, xHalf, xStart) \ - { \ - float16x8_t tmp; \ - \ - /* tmp = xhalf * x * x */ \ - tmp = vmulq(xStart, xStart); \ - tmp = vmulq(tmp, xHalf); \ - /* (1.5f - xhalf * x * x) */ \ - tmp = vsubq(vdupq_n_f16((float16_t)1.5), tmp); \ - /* x = x*(1.5f-xhalf*x*x); */ \ - invSqrt = vmulq(tmp, xStart); \ - } +#define INVSQRT_NEWTON_MVE_F16(invSqrt, xHalf, xStart) \ +{ \ + float16x8_t tmp; \ + \ + /* tmp = xhalf * x * x */ \ + tmp = vmulq(xStart, xStart); \ + tmp = vmulq(tmp, xHalf); \ + /* (1.5f - xhalf * x * x) */ \ + tmp = vsubq(vdupq_n_f16((float16_t)1.5), tmp); \ + /* x = x*(1.5f-xhalf*x*x); */ \ + invSqrt = vmulq(tmp, xStart); \ +} #endif -#endif +#endif /*************************************** Definitions available for MVEI and MVEF only ***************************************/ -#if (defined(ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI)) && \ - !defined(ARM_MATH_AUTOVECTORIZE) +#if (defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEF) || defined(ARM_MATH_MVEI)) && !defined(ARM_MATH_AUTOVECTORIZE) /* Following functions are used to transpose matrix in f32 and q31 cases */ -__STATIC_INLINE arm_status arm_mat_trans_32bit_2x2_mve(uint32_t *pDataSrc, uint32_t *pDataDest) +__STATIC_INLINE arm_status arm_mat_trans_32bit_2x2_mve( + uint32_t * pDataSrc, + uint32_t * pDataDest) { static const uint32x4_t vecOffs = { 0, 2, 1, 3 }; /* @@ -191,10 +205,12 @@ __STATIC_INLINE arm_status arm_mat_trans_32bit_2x2_mve(uint32_t *pDataSrc, uint3 return (ARM_MATH_SUCCESS); } -__STATIC_INLINE arm_status arm_mat_trans_32bit_3x3_mve(uint32_t *pDataSrc, uint32_t *pDataDest) +__STATIC_INLINE arm_status arm_mat_trans_32bit_3x3_mve( + uint32_t * pDataSrc, + uint32_t * pDataDest) { - const uint32x4_t vecOffs1 = { 0, 3, 6, 1 }; - const uint32x4_t vecOffs2 = { 4, 7, 2, 5 }; + const uint32x4_t vecOffs1 = { 0, 3, 6, 1}; + const uint32x4_t vecOffs2 = { 4, 7, 2, 5}; /* * * | 0 1 2 | | 0 3 6 | 4 x 32 flattened version | 0 3 6 1 | @@ -202,8 +218,8 @@ __STATIC_INLINE arm_status arm_mat_trans_32bit_3x3_mve(uint32_t *pDataSrc, uint3 * | 6 7 8 | | 2 5 8 | (row major) | 8 . . . | * */ - uint32x4_t vecIn1 = vldrwq_u32((uint32_t const *)pDataSrc); - uint32x4_t vecIn2 = vldrwq_u32((uint32_t const *)&pDataSrc[4]); + uint32x4_t vecIn1 = vldrwq_u32((uint32_t const *) pDataSrc); + uint32x4_t vecIn2 = vldrwq_u32((uint32_t const *) &pDataSrc[4]); vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs1, vecIn1); vstrwq_scatter_shifted_offset_u32(pDataDest, vecOffs2, vecIn2); @@ -213,7 +229,7 @@ __STATIC_INLINE arm_status arm_mat_trans_32bit_3x3_mve(uint32_t *pDataSrc, uint3 return (ARM_MATH_SUCCESS); } -__STATIC_INLINE arm_status arm_mat_trans_32bit_4x4_mve(uint32_t *pDataSrc, uint32_t *pDataDest) +__STATIC_INLINE arm_status arm_mat_trans_32bit_4x4_mve(uint32_t * pDataSrc, uint32_t * pDataDest) { /* * 4x4 Matrix transposition @@ -227,7 +243,7 @@ __STATIC_INLINE arm_status arm_mat_trans_32bit_4x4_mve(uint32_t *pDataSrc, uint3 uint32x4x4_t vecIn; - vecIn = vld4q((uint32_t const *)pDataSrc); + vecIn = vld4q((uint32_t const *) pDataSrc); vstrwq(pDataDest, vecIn.val[0]); pDataDest += 4; vstrwq(pDataDest, vecIn.val[1]); @@ -239,12 +255,16 @@ __STATIC_INLINE arm_status arm_mat_trans_32bit_4x4_mve(uint32_t *pDataSrc, uint3 return (ARM_MATH_SUCCESS); } -__STATIC_INLINE arm_status arm_mat_trans_32bit_generic_mve(uint16_t srcRows, uint16_t srcCols, - uint32_t *pDataSrc, uint32_t *pDataDest) + +__STATIC_INLINE arm_status arm_mat_trans_32bit_generic_mve( + uint16_t srcRows, + uint16_t srcCols, + uint32_t * pDataSrc, + uint32_t * pDataDest) { uint32x4_t vecOffs; - uint32_t i; - uint32_t blkCnt; + uint32_t i; + uint32_t blkCnt; uint32_t const *pDataC; uint32_t *pDataDestR; uint32x4_t vecIn; @@ -253,14 +273,16 @@ __STATIC_INLINE arm_status arm_mat_trans_32bit_generic_mve(uint16_t srcRows, uin vecOffs = vecOffs * srcCols; i = srcCols; - do { - pDataC = (uint32_t const *)pDataSrc; + do + { + pDataC = (uint32_t const *) pDataSrc; pDataDestR = pDataDest; blkCnt = srcRows >> 2; - while (blkCnt > 0U) { + while (blkCnt > 0U) + { vecIn = vldrwq_gather_shifted_offset_u32(pDataC, vecOffs); - vstrwq(pDataDestR, vecIn); + vstrwq(pDataDestR, vecIn); pDataDestR += 4; pDataC = pDataC + srcCols * 4; /* @@ -273,7 +295,8 @@ __STATIC_INLINE arm_status arm_mat_trans_32bit_generic_mve(uint16_t srcRows, uin * tail */ blkCnt = srcRows & 3; - if (blkCnt > 0U) { + if (blkCnt > 0U) + { mve_pred16_t p0 = vctp32q(blkCnt); vecIn = vldrwq_gather_shifted_offset_u32(pDataC, vecOffs); vstrwq_p(pDataDestR, vecIn, p0); @@ -281,28 +304,34 @@ __STATIC_INLINE arm_status arm_mat_trans_32bit_generic_mve(uint16_t srcRows, uin pDataSrc += 1; pDataDest += srcRows; - } while (--i); + } + while (--i); return (ARM_MATH_SUCCESS); } -__STATIC_INLINE arm_status arm_mat_cmplx_trans_32bit(uint16_t srcRows, uint16_t srcCols, - uint32_t *pDataSrc, uint16_t dstRows, - uint16_t dstCols, uint32_t *pDataDest) +__STATIC_INLINE arm_status arm_mat_cmplx_trans_32bit( + uint16_t srcRows, + uint16_t srcCols, + uint32_t *pDataSrc, + uint16_t dstRows, + uint16_t dstCols, + uint32_t *pDataDest) { - uint32_t i; + uint32_t i; uint32_t const *pDataC; - uint32_t *pDataRow; - uint32_t *pDataDestR, *pDataDestRow; - uint32x4_t vecOffsRef, vecOffsCur; - uint32_t blkCnt; - uint32x4_t vecIn; + uint32_t *pDataRow; + uint32_t *pDataDestR, *pDataDestRow; + uint32x4_t vecOffsRef, vecOffsCur; + uint32_t blkCnt; + uint32x4_t vecIn; #ifdef ARM_MATH_MATRIX_CHECK /* * Check for matrix mismatch condition */ - if ((srcRows != dstCols) || (srcCols != dstRows)) { + if ((srcRows != dstCols) || (srcCols != dstRows)) + { /* * Set status as ARM_MATH_SIZE_MISMATCH */ @@ -323,28 +352,31 @@ __STATIC_INLINE arm_status arm_mat_cmplx_trans_32bit(uint16_t srcRows, uint16_t pDataRow = pDataSrc; pDataDestRow = pDataDest; i = srcCols; - do { - pDataC = (uint32_t const *)pDataRow; + do + { + pDataC = (uint32_t const *) pDataRow; pDataDestR = pDataDestRow; vecOffsCur = vecOffsRef; blkCnt = (srcRows * CMPLX_DIM) >> 2; - while (blkCnt > 0U) { + while (blkCnt > 0U) + { vecIn = vldrwq_gather_shifted_offset(pDataC, vecOffsCur); - vstrwq(pDataDestR, vecIn); + vstrwq(pDataDestR, vecIn); pDataDestR += 4; vecOffsCur = vaddq(vecOffsCur, (srcCols << 2)); /* * Decrement the blockSize loop counter */ - blkCnt--; + blkCnt--; } /* * tail * (will be merged thru tail predication) */ blkCnt = (srcRows * CMPLX_DIM) & 3; - if (blkCnt > 0U) { + if (blkCnt > 0U) + { mve_pred16_t p0 = vctp32q(blkCnt); vecIn = vldrwq_gather_shifted_offset(pDataC, vecOffsCur); vstrwq_p(pDataDestR, vecIn, p0); @@ -352,12 +384,13 @@ __STATIC_INLINE arm_status arm_mat_cmplx_trans_32bit(uint16_t srcRows, uint16_t pDataRow += CMPLX_DIM; pDataDestRow += (srcRows * CMPLX_DIM); - } while (--i); + } + while (--i); return (ARM_MATH_SUCCESS); } -__STATIC_INLINE arm_status arm_mat_trans_16bit_2x2(uint16_t *pDataSrc, uint16_t *pDataDest) +__STATIC_INLINE arm_status arm_mat_trans_16bit_2x2(uint16_t * pDataSrc, uint16_t * pDataDest) { pDataDest[0] = pDataSrc[0]; pDataDest[3] = pDataSrc[3]; @@ -367,11 +400,11 @@ __STATIC_INLINE arm_status arm_mat_trans_16bit_2x2(uint16_t *pDataSrc, uint16_t return (ARM_MATH_SUCCESS); } -__STATIC_INLINE arm_status arm_mat_trans_16bit_3x3_mve(uint16_t *pDataSrc, uint16_t *pDataDest) +__STATIC_INLINE arm_status arm_mat_trans_16bit_3x3_mve(uint16_t * pDataSrc, uint16_t * pDataDest) { static const uint16_t stridesTr33[8] = { 0, 3, 6, 1, 4, 7, 2, 5 }; - uint16x8_t vecOffs1; - uint16x8_t vecIn1; + uint16x8_t vecOffs1; + uint16x8_t vecIn1; /* * * | 0 1 2 | | 0 3 6 | 8 x 16 flattened version | 0 3 6 1 4 7 2 5 | @@ -379,8 +412,8 @@ __STATIC_INLINE arm_status arm_mat_trans_16bit_3x3_mve(uint16_t *pDataSrc, uint1 * | 6 7 8 | | 2 5 8 | (row major) * */ - vecOffs1 = vldrhq_u16((uint16_t const *)stridesTr33); - vecIn1 = vldrhq_u16((uint16_t const *)pDataSrc); + vecOffs1 = vldrhq_u16((uint16_t const *) stridesTr33); + vecIn1 = vldrhq_u16((uint16_t const *) pDataSrc); vstrhq_scatter_shifted_offset_u16(pDataDest, vecOffs1, vecIn1); @@ -389,13 +422,14 @@ __STATIC_INLINE arm_status arm_mat_trans_16bit_3x3_mve(uint16_t *pDataSrc, uint1 return (ARM_MATH_SUCCESS); } -__STATIC_INLINE arm_status arm_mat_trans_16bit_4x4_mve(uint16_t *pDataSrc, uint16_t *pDataDest) + +__STATIC_INLINE arm_status arm_mat_trans_16bit_4x4_mve(uint16_t * pDataSrc, uint16_t * pDataDest) { static const uint16_t stridesTr44_1[8] = { 0, 4, 8, 12, 1, 5, 9, 13 }; static const uint16_t stridesTr44_2[8] = { 2, 6, 10, 14, 3, 7, 11, 15 }; - uint16x8_t vecOffs1, vecOffs2; - uint16x8_t vecIn1, vecIn2; - uint16_t const *pDataSrcVec = (uint16_t const *)pDataSrc; + uint16x8_t vecOffs1, vecOffs2; + uint16x8_t vecIn1, vecIn2; + uint16_t const * pDataSrcVec = (uint16_t const *) pDataSrc; /* * 4x4 Matrix transposition @@ -406,8 +440,8 @@ __STATIC_INLINE arm_status arm_mat_trans_16bit_4x4_mve(uint16_t *pDataSrc, uint1 * | 12 13 14 15 | | 3 7 11 15 | */ - vecOffs1 = vldrhq_u16((uint16_t const *)stridesTr44_1); - vecOffs2 = vldrhq_u16((uint16_t const *)stridesTr44_2); + vecOffs1 = vldrhq_u16((uint16_t const *) stridesTr44_1); + vecOffs2 = vldrhq_u16((uint16_t const *) stridesTr44_2); vecIn1 = vldrhq_u16(pDataSrcVec); pDataSrcVec += 8; vecIn2 = vldrhq_u16(pDataSrcVec); @@ -415,31 +449,39 @@ __STATIC_INLINE arm_status arm_mat_trans_16bit_4x4_mve(uint16_t *pDataSrc, uint1 vstrhq_scatter_shifted_offset_u16(pDataDest, vecOffs1, vecIn1); vstrhq_scatter_shifted_offset_u16(pDataDest, vecOffs2, vecIn2); + return (ARM_MATH_SUCCESS); } -__STATIC_INLINE arm_status arm_mat_trans_16bit_generic(uint16_t srcRows, uint16_t srcCols, - uint16_t *pDataSrc, uint16_t *pDataDest) + + +__STATIC_INLINE arm_status arm_mat_trans_16bit_generic( + uint16_t srcRows, + uint16_t srcCols, + uint16_t * pDataSrc, + uint16_t * pDataDest) { - uint16x8_t vecOffs; - uint32_t i; - uint32_t blkCnt; + uint16x8_t vecOffs; + uint32_t i; + uint32_t blkCnt; uint16_t const *pDataC; - uint16_t *pDataDestR; - uint16x8_t vecIn; + uint16_t *pDataDestR; + uint16x8_t vecIn; vecOffs = vidupq_u16((uint32_t)0, 1); vecOffs = vecOffs * srcCols; i = srcCols; - while (i > 0U) { - pDataC = (uint16_t const *)pDataSrc; + while(i > 0U) + { + pDataC = (uint16_t const *) pDataSrc; pDataDestR = pDataDest; blkCnt = srcRows >> 3; - while (blkCnt > 0U) { + while (blkCnt > 0U) + { vecIn = vldrhq_gather_shifted_offset_u16(pDataC, vecOffs); - vstrhq_u16(pDataDestR, vecIn); + vstrhq_u16(pDataDestR, vecIn); pDataDestR += 8; pDataC = pDataC + srcCols * 8; /* @@ -452,7 +494,8 @@ __STATIC_INLINE arm_status arm_mat_trans_16bit_generic(uint16_t srcRows, uint16_ * tail */ blkCnt = srcRows & 7; - if (blkCnt > 0U) { + if (blkCnt > 0U) + { mve_pred16_t p0 = vctp16q(blkCnt); vecIn = vldrhq_gather_shifted_offset_u16(pDataC, vecOffs); vstrhq_p_u16(pDataDestR, vecIn, p0); @@ -465,24 +508,30 @@ __STATIC_INLINE arm_status arm_mat_trans_16bit_generic(uint16_t srcRows, uint16_ return (ARM_MATH_SUCCESS); } -__STATIC_INLINE arm_status arm_mat_cmplx_trans_16bit(uint16_t srcRows, uint16_t srcCols, - uint16_t *pDataSrc, uint16_t dstRows, - uint16_t dstCols, uint16_t *pDataDest) + +__STATIC_INLINE arm_status arm_mat_cmplx_trans_16bit( + uint16_t srcRows, + uint16_t srcCols, + uint16_t *pDataSrc, + uint16_t dstRows, + uint16_t dstCols, + uint16_t *pDataDest) { static const uint16_t loadCmplxCol[8] = { 0, 0, 1, 1, 2, 2, 3, 3 }; - int i; - uint16x8_t vecOffsRef, vecOffsCur; + int i; + uint16x8_t vecOffsRef, vecOffsCur; uint16_t const *pDataC; - uint16_t *pDataRow; - uint16_t *pDataDestR, *pDataDestRow; - uint32_t blkCnt; - uint16x8_t vecIn; + uint16_t *pDataRow; + uint16_t *pDataDestR, *pDataDestRow; + uint32_t blkCnt; + uint16x8_t vecIn; #ifdef ARM_MATH_MATRIX_CHECK /* * Check for matrix mismatch condition */ - if ((srcRows != dstCols) || (srcCols != dstRows)) { + if ((srcRows != dstCols) || (srcCols != dstRows)) + { /* * Set status as ARM_MATH_SIZE_MISMATCH */ @@ -497,26 +546,29 @@ __STATIC_INLINE arm_status arm_mat_cmplx_trans_16bit(uint16_t srcRows, uint16_t * 2x2, 3x3 and 4x4 specialization to be added */ + /* * build [0, 1, 2xcol, 2xcol+1, 4xcol, 4xcol+1, 6xcol, 6xcol+1] */ - vecOffsRef = vldrhq_u16((uint16_t const *)loadCmplxCol); - vecOffsRef = vmulq(vecOffsRef, (uint16_t)(srcCols * CMPLX_DIM)) + - viwdupq_u16((uint32_t)0, (uint16_t)2, 1); + vecOffsRef = vldrhq_u16((uint16_t const *) loadCmplxCol); + vecOffsRef = vmulq(vecOffsRef, (uint16_t) (srcCols * CMPLX_DIM)) + + viwdupq_u16((uint32_t)0, (uint16_t) 2, 1); pDataRow = pDataSrc; pDataDestRow = pDataDest; i = srcCols; - do { - pDataC = (uint16_t const *)pDataRow; + do + { + pDataC = (uint16_t const *) pDataRow; pDataDestR = pDataDestRow; vecOffsCur = vecOffsRef; blkCnt = (srcRows * CMPLX_DIM) >> 3; - while (blkCnt > 0U) { + while (blkCnt > 0U) + { vecIn = vldrhq_gather_shifted_offset(pDataC, vecOffsCur); - vstrhq(pDataDestR, vecIn); - pDataDestR += 8; // VEC_LANES_U16 + vstrhq(pDataDestR, vecIn); + pDataDestR+= 8; // VEC_LANES_U16 vecOffsCur = vaddq(vecOffsCur, (srcCols << 3)); /* * Decrement the blockSize loop counter @@ -528,7 +580,8 @@ __STATIC_INLINE arm_status arm_mat_cmplx_trans_16bit(uint16_t srcRows, uint16_t * (will be merged thru tail predication) */ blkCnt = (srcRows * CMPLX_DIM) & 0x7; - if (blkCnt > 0U) { + if (blkCnt > 0U) + { mve_pred16_t p0 = vctp16q(blkCnt); vecIn = vldrhq_gather_shifted_offset(pDataC, vecOffsCur); vstrhq_p(pDataDestR, vecIn, p0); @@ -536,7 +589,8 @@ __STATIC_INLINE arm_status arm_mat_cmplx_trans_16bit(uint16_t srcRows, uint16_t pDataRow += CMPLX_DIM; pDataDestRow += (srcRows * CMPLX_DIM); - } while (--i); + } + while (--i); return (ARM_MATH_SUCCESS); } @@ -547,22 +601,22 @@ __STATIC_INLINE arm_status arm_mat_cmplx_trans_16bit(uint16_t srcRows, uint16_t Definitions available for MVEI only ***************************************/ -#if (defined(ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI)) && !defined(ARM_MATH_AUTOVECTORIZE) +#if (defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI)) && !defined(ARM_MATH_AUTOVECTORIZE) #include "arm_common_tables.h" -#define MVE_ASRL_SAT16(acc, shift) ((sqrshrl_sat48(acc, -(32 - shift)) >> 32) & 0xffffffff) -#define MVE_ASRL_SAT32(acc, shift) ((sqrshrl(acc, -(32 - shift)) >> 32) & 0xffffffff) +#define MVE_ASRL_SAT16(acc, shift) ((sqrshrl_sat48(acc, -(32-shift)) >> 32) & 0xffffffff) +#define MVE_ASRL_SAT32(acc, shift) ((sqrshrl(acc, -(32-shift)) >> 32) & 0xffffffff) + -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || \ - defined(ARM_TABLE_FAST_SQRT_Q31_MVE) __STATIC_INLINE q31x4_t FAST_VSQRT_Q31(q31x4_t vecIn) { - q63x2_t vecTmpLL; - q31x4_t vecTmp0, vecTmp1; - q31_t scale; - q63_t tmp64; - q31x4_t vecNrm, vecDst, vecIdx, vecSignBits; + q63x2_t vecTmpLL; + q31x4_t vecTmp0, vecTmp1; + q31_t scale; + q63_t tmp64; + q31x4_t vecNrm, vecDst, vecIdx, vecSignBits; + vecSignBits = vclsq(vecIn); vecSignBits = vbicq_n_s32(vecSignBits, 1); @@ -595,11 +649,11 @@ __STATIC_INLINE q31x4_t FAST_VSQRT_Q31(q31x4_t vecIn) */ scale = 26 + (vecSignBits[0] >> 1); tmp64 = asrl(vecTmpLL[0], scale); - vecDst[0] = (q31_t)tmp64; + vecDst[0] = (q31_t) tmp64; scale = 26 + (vecSignBits[2] >> 1); tmp64 = asrl(vecTmpLL[1], scale); - vecDst[2] = (q31_t)tmp64; + vecDst[2] = (q31_t) tmp64; vecTmpLL = vmulltq_int(vecNrm, vecTmp0); @@ -608,11 +662,11 @@ __STATIC_INLINE q31x4_t FAST_VSQRT_Q31(q31x4_t vecIn) */ scale = 26 + (vecSignBits[1] >> 1); tmp64 = asrl(vecTmpLL[0], scale); - vecDst[1] = (q31_t)tmp64; + vecDst[1] = (q31_t) tmp64; scale = 26 + (vecSignBits[3] >> 1); tmp64 = asrl(vecTmpLL[1], scale); - vecDst[3] = (q31_t)tmp64; + vecDst[3] = (q31_t) tmp64; /* * set negative values to 0 */ @@ -620,15 +674,12 @@ __STATIC_INLINE q31x4_t FAST_VSQRT_Q31(q31x4_t vecIn) return vecDst; } -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || \ - defined(ARM_TABLE_FAST_SQRT_Q15_MVE) __STATIC_INLINE q15x8_t FAST_VSQRT_Q15(q15x8_t vecIn) { - q31x4_t vecTmpLev, vecTmpLodd, vecSignL; - q15x8_t vecTmp0, vecTmp1; - q15x8_t vecNrm, vecDst, vecIdx, vecSignBits; + q31x4_t vecTmpLev, vecTmpLodd, vecSignL; + q15x8_t vecTmp0, vecTmp1; + q15x8_t vecNrm, vecDst, vecIdx, vecSignBits; vecDst = vuninitializedq_s16(); @@ -688,11 +739,10 @@ __STATIC_INLINE q15x8_t FAST_VSQRT_Q15(q15x8_t vecIn) return vecDst; } -#endif #endif /* defined (ARM_MATH_HELIUM) || defined(ARM_MATH_MVEI) */ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math.h new file mode 100644 index 00000000000..0e9ca5997ed --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math.h @@ -0,0 +1,80 @@ +/****************************************************************************** + * @file arm_math.h + * @brief Public header file for CMSIS DSP Library + * @version V1.10.0 + * @date 08 July 2021 + * Target Processor: Cortex-M and Cortex-A cores + ******************************************************************************/ +/* + * Copyright (c) 2010-2021 Arm Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef ARM_MATH_H +#define ARM_MATH_H + + +#include "arm_math_types.h" +#include "arm_math_memory.h" + +#include "dsp/none.h" +#include "dsp/utils.h" + +#include "dsp/basic_math_functions.h" +#include "dsp/interpolation_functions.h" +#include "dsp/bayes_functions.h" +#include "dsp/matrix_functions.h" +#include "dsp/complex_math_functions.h" +#include "dsp/statistics_functions.h" +#include "dsp/controller_functions.h" +#include "dsp/support_functions.h" +#include "dsp/distance_functions.h" +#include "dsp/svm_functions.h" +#include "dsp/fast_math_functions.h" +#include "dsp/transform_functions.h" +#include "dsp/filtering_functions.h" +#include "dsp/quaternion_math_functions.h" +#include "dsp/window_functions.h" + + + +#ifdef __cplusplus +extern "C" +{ +#endif + + + + +//#define TABLE_SPACING_Q31 0x400000 +//#define TABLE_SPACING_Q15 0x80 + + + + + +#ifdef __cplusplus +} +#endif + + +#endif /* _ARM_MATH_H */ + +/** + * + * End of file. + */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_math_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_f16.h old mode 100644 new mode 100755 similarity index 94% rename from Libraries/CMSIS/5.9.0/DSP/Include/arm_math_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_f16.h index 309ea68b192..34ca0e542fc --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_math_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_f16.h @@ -23,13 +23,14 @@ * limitations under the License. */ -#ifndef _ARM_MATH_F16_H -#define _ARM_MATH_F16_H +#ifndef ARM_MATH_F16_H +#define ARM_MATH_F16_H #include "arm_math.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #include "arm_math_types_f16.h" @@ -49,8 +50,10 @@ extern "C" { #include "dsp/transform_functions_f16.h" #include "dsp/filtering_functions_f16.h" -#ifdef __cplusplus +#ifdef __cplusplus } #endif #endif /* _ARM_MATH_F16_H */ + + diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_math_memory.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_memory.h old mode 100644 new mode 100755 similarity index 60% rename from Libraries/CMSIS/5.9.0/DSP/Include/arm_math_memory.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_memory.h index 2f4be7eae6c..d4b4c3323ad --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_math_memory.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_memory.h @@ -23,63 +23,68 @@ * limitations under the License. */ -#ifndef _ARM_MATH_MEMORY_H_ +#ifndef ARM_MATH_MEMORY_H_ -#define _ARM_MATH_MEMORY_H_ +#define ARM_MATH_MEMORY_H_ #include "arm_math_types.h" -#ifdef __cplusplus -extern "C" { + +#ifdef __cplusplus +extern "C" +{ #endif /** @brief definition to read/write two 16 bit values. @deprecated */ -#if defined(__CC_ARM) -#define __SIMD32_TYPE int32_t __packed -#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) -#define __SIMD32_TYPE int32_t -#elif defined(__GNUC__) -#define __SIMD32_TYPE int32_t -#elif defined(__ICCARM__) -#define __SIMD32_TYPE int32_t __packed -#elif defined(__TI_ARM__) -#define __SIMD32_TYPE int32_t -#elif defined(__CSMC__) -#define __SIMD32_TYPE int32_t -#elif defined(__TASKING__) -#define __SIMD32_TYPE __un(aligned) int32_t -#elif defined(_MSC_VER) -#define __SIMD32_TYPE int32_t +#if defined ( __CC_ARM ) + #define __SIMD32_TYPE int32_t __packed +#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) + #define __SIMD32_TYPE int32_t +#elif defined ( __GNUC__ ) + #define __SIMD32_TYPE int32_t +#elif defined ( __ICCARM__ ) + #define __SIMD32_TYPE int32_t __packed +#elif defined ( __TI_ARM__ ) + #define __SIMD32_TYPE int32_t +#elif defined ( __CSMC__ ) + #define __SIMD32_TYPE int32_t +#elif defined ( __TASKING__ ) + #define __SIMD32_TYPE __un(aligned) int32_t +#elif defined(_MSC_VER ) + #define __SIMD32_TYPE int32_t #else -#error Unknown compiler + #error Unknown compiler #endif -#define __SIMD32(addr) (*(__SIMD32_TYPE **)&(addr)) -#define __SIMD32_CONST(addr) ((__SIMD32_TYPE *)(addr)) -#define _SIMD32_OFFSET(addr) (*(__SIMD32_TYPE *)(addr)) -#define __SIMD64(addr) (*(int64_t **)&(addr)) +#define __SIMD32(addr) (*(__SIMD32_TYPE **) & (addr)) +#define __SIMD32_CONST(addr) ( (__SIMD32_TYPE * ) (addr)) +#define _SIMD32_OFFSET(addr) (*(__SIMD32_TYPE * ) (addr)) +#define __SIMD64(addr) (*( int64_t **) & (addr)) + /* SIMD replacement */ + /** @brief Read 2 Q15 from Q15 pointer. @param[in] pQ15 points to input value @return Q31 value */ -__STATIC_FORCEINLINE q31_t read_q15x2(q15_t const *pQ15) +__STATIC_FORCEINLINE q31_t read_q15x2 ( + q15_t const * pQ15) { - q31_t val; + q31_t val; #ifdef __ARM_FEATURE_UNALIGNED - memcpy(&val, pQ15, 4); + memcpy (&val, pQ15, 4); #else - val = (pQ15[1] << 16) | (pQ15[0] & 0x0FFFF); + val = (pQ15[1] << 16) | (pQ15[0] & 0x0FFFF) ; #endif - return (val); + return (val); } /** @@ -100,55 +105,58 @@ __STATIC_FORCEINLINE q31_t read_q15x2(q15_t const *pQ15) @brief Write 2 Q15 to Q15 pointer and increment pointer afterwards. @param[in] pQ15 points to input value @param[in] value Q31 value - @return none */ -__STATIC_FORCEINLINE void write_q15x2_ia(q15_t **pQ15, q31_t value) +__STATIC_FORCEINLINE void write_q15x2_ia ( + q15_t ** pQ15, + q31_t value) { - q31_t val = value; + q31_t val = value; #ifdef __ARM_FEATURE_UNALIGNED - memcpy(*pQ15, &val, 4); + memcpy (*pQ15, &val, 4); #else - (*pQ15)[0] = (q15_t)(val & 0x0FFFF); - (*pQ15)[1] = (q15_t)((val >> 16) & 0x0FFFF); + (*pQ15)[0] = (q15_t)(val & 0x0FFFF); + (*pQ15)[1] = (q15_t)((val >> 16) & 0x0FFFF); #endif - *pQ15 += 2; + *pQ15 += 2; } /** @brief Write 2 Q15 to Q15 pointer. @param[in] pQ15 points to input value @param[in] value Q31 value - @return none */ -__STATIC_FORCEINLINE void write_q15x2(q15_t *pQ15, q31_t value) +__STATIC_FORCEINLINE void write_q15x2 ( + q15_t * pQ15, + q31_t value) { - q31_t val = value; + q31_t val = value; #ifdef __ARM_FEATURE_UNALIGNED - memcpy(pQ15, &val, 4); + memcpy (pQ15, &val, 4); #else - pQ15[0] = (q15_t)(val & 0x0FFFF); - pQ15[1] = (q15_t)(val >> 16); + pQ15[0] = (q15_t)(val & 0x0FFFF); + pQ15[1] = (q15_t)(val >> 16); #endif } + /** @brief Read 4 Q7 from Q7 pointer @param[in] pQ7 points to input value @return Q31 value */ -__STATIC_FORCEINLINE q31_t read_q7x4(q7_t const *pQ7) +__STATIC_FORCEINLINE q31_t read_q7x4 ( + q7_t const * pQ7) { - q31_t val; + q31_t val; #ifdef __ARM_FEATURE_UNALIGNED - memcpy(&val, pQ7, 4); + memcpy (&val, pQ7, 4); #else - val = ((pQ7[3] & 0x0FF) << 24) | ((pQ7[2] & 0x0FF) << 16) | ((pQ7[1] & 0x0FF) << 8) | - (pQ7[0] & 0x0FF); -#endif - return (val); + val =((pQ7[3] & 0x0FF) << 24) | ((pQ7[2] & 0x0FF) << 16) | ((pQ7[1] & 0x0FF) << 8) | (pQ7[0] & 0x0FF); +#endif + return (val); } /** @@ -169,24 +177,26 @@ __STATIC_FORCEINLINE q31_t read_q7x4(q7_t const *pQ7) @brief Write 4 Q7 to Q7 pointer and increment pointer afterwards. @param[in] pQ7 points to input value @param[in] value Q31 value - @return none */ -__STATIC_FORCEINLINE void write_q7x4_ia(q7_t **pQ7, q31_t value) +__STATIC_FORCEINLINE void write_q7x4_ia ( + q7_t ** pQ7, + q31_t value) { - q31_t val = value; + q31_t val = value; #ifdef __ARM_FEATURE_UNALIGNED - memcpy(*pQ7, &val, 4); + memcpy (*pQ7, &val, 4); #else - (*pQ7)[0] = (q7_t)(val & 0x0FF); - (*pQ7)[1] = (q7_t)((val >> 8) & 0x0FF); - (*pQ7)[2] = (q7_t)((val >> 16) & 0x0FF); - (*pQ7)[3] = (q7_t)((val >> 24) & 0x0FF); + (*pQ7)[0] = (q7_t)(val & 0x0FF); + (*pQ7)[1] = (q7_t)((val >> 8) & 0x0FF); + (*pQ7)[2] = (q7_t)((val >> 16) & 0x0FF); + (*pQ7)[3] = (q7_t)((val >> 24) & 0x0FF); #endif - *pQ7 += 4; + *pQ7 += 4; } -#ifdef __cplusplus + +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_types.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_types.h new file mode 100755 index 00000000000..74ae8485f77 --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_types.h @@ -0,0 +1,645 @@ +/****************************************************************************** + * @file arm_math_types.h + * @brief Public header file for CMSIS DSP Library + * @version V1.10.0 + * @date 08 July 2021 + * Target Processor: Cortex-M and Cortex-A cores + ******************************************************************************/ +/* + * Copyright (c) 2010-2021 Arm Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ARM_MATH_TYPES_H_ + +#define ARM_MATH_TYPES_H_ + +#if defined(ARM_DSP_CUSTOM_CONFIG) +#include "arm_dsp_config.h" +#endif + +#ifndef ARM_DSP_ATTRIBUTE +#define ARM_DSP_ATTRIBUTE +#endif + +#ifndef ARM_DSP_TABLE_ATTRIBUTE +#define ARM_DSP_TABLE_ATTRIBUTE +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +/* Compiler specific diagnostic adjustment */ +#if defined ( __CC_ARM ) + +#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) + +#elif defined ( __APPLE_CC__ ) + #pragma GCC diagnostic ignored "-Wold-style-cast" + +#elif defined(__clang__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wsign-conversion" + #pragma GCC diagnostic ignored "-Wconversion" + #pragma GCC diagnostic ignored "-Wunused-parameter" + +#elif defined ( __GNUC__ ) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wsign-conversion" + #pragma GCC diagnostic ignored "-Wconversion" + #pragma GCC diagnostic ignored "-Wunused-parameter" + // Disable some code having issue with GCC + #define ARM_DSP_BUILT_WITH_GCC + +#elif defined ( __ICCARM__ ) + +#elif defined ( __TI_ARM__ ) + +#elif defined ( __CSMC__ ) + +#elif defined ( __TASKING__ ) + +#elif defined ( _MSC_VER ) + +#else + #error Unknown compiler +#endif + + +/* Included for instrinsics definitions */ +#if defined (_MSC_VER ) +#include +#define __STATIC_FORCEINLINE static __forceinline +#define __STATIC_INLINE static __inline +#define __ALIGNED(x) __declspec(align(x)) +#define __WEAK +#elif defined ( __APPLE_CC__ ) +#include +#define __ALIGNED(x) __attribute__((aligned(x))) +#define __STATIC_FORCEINLINE static inline __attribute__((always_inline)) +#define __STATIC_INLINE static inline +#define __WEAK +#elif defined (__GNUC_PYTHON__) +#include +#define __ALIGNED(x) __attribute__((aligned(x))) +#define __STATIC_FORCEINLINE static inline __attribute__((always_inline)) +#define __STATIC_INLINE static inline +#define __WEAK +#else +#include "cmsis_compiler.h" +#endif + + + +#include +#include +#include +#include + +/* evaluate ARM DSP feature */ +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + #define ARM_MATH_DSP 1 +#endif + +#if defined(ARM_MATH_NEON) + #if defined(_MSC_VER) && defined(_M_ARM64EC) + #include + #else + #include + #endif + #if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) && __ARM_FEATURE_FP16_VECTOR_ARITHMETIC + #if !defined(ARM_MATH_NEON_FLOAT16) + #define ARM_MATH_NEON_FLOAT16 + #endif + #endif +#endif + +#if !defined(ARM_MATH_AUTOVECTORIZE) + + +#if defined(__ARM_FEATURE_MVE) +#if __ARM_FEATURE_MVE + #if !defined(ARM_MATH_MVEI) + #define ARM_MATH_MVEI + #endif +#endif + +#if defined(__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE & 2) + #if !defined(ARM_MATH_MVEF) + #define ARM_MATH_MVEF + #endif + #if !defined(ARM_MATH_MVE_FLOAT16) + #define ARM_MATH_MVE_FLOAT16 + #endif +#endif + +#endif /* defined (__ARM_FEATURE_MVE) */ +#endif /* !defined (ARM_MATH_AUTOVECTORIZE) */ + + +#if defined (ARM_MATH_HELIUM) + #if !defined(ARM_MATH_MVEF) + #define ARM_MATH_MVEF + #endif + + #if !defined(ARM_MATH_MVEI) + #define ARM_MATH_MVEI + #endif + + #if !defined(ARM_MATH_MVE_FLOAT16) + #define ARM_MATH_MVE_FLOAT16 + #endif +#endif + + + +#if defined ( __CC_ARM ) + /* Enter low optimization region - place directly above function definition */ + #if defined( __ARM_ARCH_7EM__ ) + #define LOW_OPTIMIZATION_ENTER \ + _Pragma ("push") \ + _Pragma ("O1") + #else + #define LOW_OPTIMIZATION_ENTER + #endif + + /* Exit low optimization region - place directly after end of function definition */ + #if defined ( __ARM_ARCH_7EM__ ) + #define LOW_OPTIMIZATION_EXIT \ + _Pragma ("pop") + #else + #define LOW_OPTIMIZATION_EXIT + #endif + + /* Enter low optimization region - place directly above function definition */ + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + + /* Exit low optimization region - place directly after end of function definition */ + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined (__ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) + #define LOW_OPTIMIZATION_ENTER + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined ( __APPLE_CC__ ) + #define LOW_OPTIMIZATION_ENTER + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined ( __GNUC__ ) + #define LOW_OPTIMIZATION_ENTER \ + __attribute__(( optimize("-O1") )) + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined ( __ICCARM__ ) + /* Enter low optimization region - place directly above function definition */ + #if defined ( __ARM_ARCH_7EM__ ) + #define LOW_OPTIMIZATION_ENTER \ + _Pragma ("optimize=low") + #else + #define LOW_OPTIMIZATION_ENTER + #endif + + /* Exit low optimization region - place directly after end of function definition */ + #define LOW_OPTIMIZATION_EXIT + + /* Enter low optimization region - place directly above function definition */ + #if defined ( __ARM_ARCH_7EM__ ) + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER \ + _Pragma ("optimize=low") + #else + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #endif + + /* Exit low optimization region - place directly after end of function definition */ + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined ( __TI_ARM__ ) + #define LOW_OPTIMIZATION_ENTER + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined ( __CSMC__ ) + #define LOW_OPTIMIZATION_ENTER + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined ( __TASKING__ ) + #define LOW_OPTIMIZATION_ENTER + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT + +#elif defined ( _MSC_VER ) || defined(__GNUC_PYTHON__) + #define LOW_OPTIMIZATION_ENTER + #define LOW_OPTIMIZATION_EXIT + #define IAR_ONLY_LOW_OPTIMIZATION_ENTER + #define IAR_ONLY_LOW_OPTIMIZATION_EXIT +#endif + + + +/* Compiler specific diagnostic adjustment */ +#if defined ( __CC_ARM ) + +#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) + +#elif defined ( __APPLE_CC__ ) + +#elif defined ( __GNUC__ ) +#pragma GCC diagnostic pop + +#elif defined ( __ICCARM__ ) + +#elif defined ( __TI_ARM__ ) + +#elif defined ( __CSMC__ ) + +#elif defined ( __TASKING__ ) + +#elif defined ( _MSC_VER ) + +#else + #error Unknown compiler +#endif + +#ifdef __cplusplus +} +#endif + +#if defined(__ARM_FEATURE_MVE) && __ARM_FEATURE_MVE +#include +#endif + +#if defined(ARM_DSP_CONFIG_TABLES) +#error("-DARM_DSP_CONFIG_TABLES no more supported. Use the new initialization functions to let the linker optimize the code size.") +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** + * @defgroup genericTypes Generic Types + * @{ +*/ + + /** + * @brief 8-bit fractional data type in 1.7 format. + */ + typedef int8_t q7_t; + + /** + * @brief 16-bit fractional data type in 1.15 format. + */ + typedef int16_t q15_t; + + /** + * @brief 32-bit fractional data type in 1.31 format. + */ + typedef int32_t q31_t; + + /** + * @brief 64-bit fractional data type in 1.63 format. + */ + typedef int64_t q63_t; + + /** + * @brief 32-bit floating-point type definition. + */ +#if !defined(__ICCARM__) || !(__ARM_FEATURE_MVE & 2) + typedef float float32_t; +#endif + + /** + * @brief 64-bit floating-point type definition. + */ + typedef double float64_t; + + /** + * @brief vector types + */ +#if defined(ARM_MATH_NEON) || (defined (ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE)) + + /** + * @brief 64-bit fractional 128-bit vector data type in 1.63 format + */ + typedef int64x2_t q63x2_t; + + /** + * @brief 32-bit fractional 128-bit vector data type in 1.31 format. + */ + typedef int32x4_t q31x4_t; + + /** + * @brief 16-bit fractional 128-bit vector data type with 16-bit alignment in 1.15 format. + */ + typedef __ALIGNED(2) int16x8_t q15x8_t; + + /** + * @brief 8-bit fractional 128-bit vector data type with 8-bit alignment in 1.7 format. + */ + typedef __ALIGNED(1) int8x16_t q7x16_t; + + /** + * @brief 32-bit fractional 128-bit vector pair data type in 1.31 format. + */ + typedef int32x4x2_t q31x4x2_t; + + /** + * @brief 32-bit fractional 128-bit vector quadruplet data type in 1.31 format. + */ + typedef int32x4x4_t q31x4x4_t; + + /** + * @brief 16-bit fractional 128-bit vector pair data type in 1.15 format. + */ + typedef int16x8x2_t q15x8x2_t; + + /** + * @brief 16-bit fractional 128-bit vector quadruplet data type in 1.15 format. + */ + typedef int16x8x4_t q15x8x4_t; + + /** + * @brief 8-bit fractional 128-bit vector pair data type in 1.7 format. + */ + typedef int8x16x2_t q7x16x2_t; + + /** + * @brief 8-bit fractional 128-bit vector quadruplet data type in 1.7 format. + */ + typedef int8x16x4_t q7x16x4_t; + + /** + * @brief 32-bit fractional data type in 9.23 format. + */ + typedef int32_t q23_t; + + /** + * @brief 32-bit fractional 128-bit vector data type in 9.23 format. + */ + typedef int32x4_t q23x4_t; + + /** + * @brief 64-bit status 128-bit vector data type. + */ + typedef int64x2_t status64x2_t; + + /** + * @brief 32-bit status 128-bit vector data type. + */ + typedef int32x4_t status32x4_t; + + /** + * @brief 16-bit status 128-bit vector data type. + */ + typedef int16x8_t status16x8_t; + + /** + * @brief 8-bit status 128-bit vector data type. + */ + typedef int8x16_t status8x16_t; + + +#endif + +#if defined(ARM_MATH_NEON) || (defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)) /* floating point vector*/ + + /** + * @brief 32-bit floating-point 128-bit vector type + */ + typedef float32x4_t f32x4_t; + + /** + * @brief 32-bit floating-point 128-bit vector pair data type + */ + typedef float32x4x2_t f32x4x2_t; + + /** + * @brief 32-bit floating-point 128-bit vector quadruplet data type + */ + typedef float32x4x4_t f32x4x4_t; + + /** + * @brief 32-bit ubiquitous 128-bit vector data type + */ + typedef union _any32x4_t + { + float32x4_t f; + int32x4_t i; + } any32x4_t; + +#endif + +#if defined(ARM_MATH_NEON) + /** + * @brief 32-bit fractional 64-bit vector data type in 1.31 format. + */ + typedef int32x2_t q31x2_t; + + /** + * @brief 16-bit fractional 64-bit vector data type in 1.15 format. + */ + typedef __ALIGNED(2) int16x4_t q15x4_t; + + /** + * @brief 8-bit fractional 64-bit vector data type in 1.7 format. + */ + typedef __ALIGNED(1) int8x8_t q7x8_t; + + /** + * @brief 32-bit float 64-bit vector data type. + */ + typedef float32x2_t f32x2_t; + + /** + * @brief 32-bit floating-point 128-bit vector triplet data type + */ + typedef float32x4x3_t f32x4x3_t; + + /** + * @brief 32-bit fractional 128-bit vector triplet data type in 1.31 format + */ + typedef int32x4x3_t q31x4x3_t; + + /** + * @brief 16-bit fractional 128-bit vector triplet data type in 1.15 format + */ + typedef int16x8x3_t q15x8x3_t; + + /** + * @brief 8-bit fractional 128-bit vector triplet data type in 1.7 format + */ + typedef int8x16x3_t q7x16x3_t; + + /** + * @brief 32-bit floating-point 64-bit vector pair data type + */ + typedef float32x2x2_t f32x2x2_t; + + /** + * @brief 32-bit floating-point 64-bit vector triplet data type + */ + typedef float32x2x3_t f32x2x3_t; + + /** + * @brief 32-bit floating-point 64-bit vector quadruplet data type + */ + typedef float32x2x4_t f32x2x4_t; + + /** + * @brief 32-bit fractional 64-bit vector pair data type in 1.31 format + */ + typedef int32x2x2_t q31x2x2_t; + + /** + * @brief 32-bit fractional 64-bit vector triplet data type in 1.31 format + */ + typedef int32x2x3_t q31x2x3_t; + + /** + * @brief 32-bit fractional 64-bit vector quadruplet data type in 1.31 format + */ + typedef int32x4x3_t q31x2x4_t; + + /** + * @brief 16-bit fractional 64-bit vector pair data type in 1.15 format + */ + typedef int16x4x2_t q15x4x2_t; + + /** + * @brief 16-bit fractional 64-bit vector triplet data type in 1.15 format + */ + typedef int16x4x2_t q15x4x3_t; + + /** + * @brief 16-bit fractional 64-bit vector quadruplet data type in 1.15 format + */ + typedef int16x4x3_t q15x4x4_t; + + /** + * @brief 8-bit fractional 64-bit vector pair data type in 1.7 format + */ + typedef int8x8x2_t q7x8x2_t; + + /** + * @brief 8-bit fractional 64-bit vector triplet data type in 1.7 format + */ + typedef int8x8x3_t q7x8x3_t; + + /** + * @brief 8-bit fractional 64-bit vector quadruplet data type in 1.7 format + */ + typedef int8x8x4_t q7x8x4_t; + + /** + * @brief 32-bit ubiquitous 64-bit vector data type + */ + typedef union _any32x2_t + { + float32x2_t f; + int32x2_t i; + } any32x2_t; + + /** + * @brief 32-bit status 64-bit vector data type. + */ + typedef int32x4_t status32x2_t; + + /** + * @brief 16-bit status 64-bit vector data type. + */ + typedef int16x8_t status16x4_t; + + /** + * @brief 8-bit status 64-bit vector data type. + */ + typedef int8x16_t status8x8_t; + +#endif + + /** + * @brief Error status returned by some functions in the library. + */ + typedef enum + { + ARM_MATH_SUCCESS = 0, /**< No error */ + ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */ + ARM_MATH_LENGTH_ERROR = -2, /**< Length of data buffer is incorrect */ + ARM_MATH_SIZE_MISMATCH = -3, /**< Size of matrices is not compatible with the operation */ + ARM_MATH_NANINF = -4, /**< Not-a-number (NaN) or infinity is generated */ + ARM_MATH_SINGULAR = -5, /**< Input matrix is singular and cannot be inverted */ + ARM_MATH_TEST_FAILURE = -6, /**< Test Failed */ + ARM_MATH_DECOMPOSITION_FAILURE = -7 /**< Decomposition Failed */ + } arm_status; + +/** + * @} // endgroup generic +*/ + + +#define F64_MAX ((float64_t)DBL_MAX) +#define F32_MAX ((float32_t)FLT_MAX) + + + +#define F64_MIN (-DBL_MAX) +#define F32_MIN (-FLT_MAX) + + + +#define F64_ABSMAX ((float64_t)DBL_MAX) +#define F32_ABSMAX ((float32_t)FLT_MAX) + + + +#define F64_ABSMIN ((float64_t)0.0) +#define F32_ABSMIN ((float32_t)0.0) + + +#define Q31_MAX ((q31_t)(0x7FFFFFFFL)) +#define Q15_MAX ((q15_t)(0x7FFF)) +#define Q7_MAX ((q7_t)(0x7F)) +#define Q31_MIN ((q31_t)(0x80000000L)) +#define Q15_MIN ((q15_t)(0x8000)) +#define Q7_MIN ((q7_t)(0x80)) + +#define Q31_ABSMAX ((q31_t)(0x7FFFFFFFL)) +#define Q15_ABSMAX ((q15_t)(0x7FFF)) +#define Q7_ABSMAX ((q7_t)(0x7F)) +#define Q31_ABSMIN ((q31_t)0) +#define Q15_ABSMIN ((q15_t)0) +#define Q7_ABSMIN ((q7_t)0) + + /* Dimension C vector space */ + #define CMPLX_DIM 2 + +#ifdef __cplusplus +} +#endif + +#endif /*ifndef _ARM_MATH_TYPES_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_math_types_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_types_f16.h old mode 100644 new mode 100755 similarity index 65% rename from Libraries/CMSIS/5.9.0/DSP/Include/arm_math_types_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_types_f16.h index 882dd01c8bb..26b8feeec9c --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_math_types_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_math_types_f16.h @@ -23,16 +23,17 @@ * limitations under the License. */ -#ifndef _ARM_MATH_TYPES_F16_H -#define _ARM_MATH_TYPES_F16_H +#ifndef ARM_MATH_TYPES_F16_H +#define ARM_MATH_TYPES_F16_H #include "arm_math_types.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif -#if !defined(__CC_ARM) +#if !defined( __CC_ARM ) /** * @brief 16-bit floating-point type definition. @@ -48,93 +49,97 @@ If it is not available, f16 version of the kernels won't be built. */ -#if !(__ARM_FEATURE_MVE & 2) -#if !defined(DISABLEFLOAT16) -#if defined(__ARM_FP16_FORMAT_IEEE) || defined(__ARM_FP16_FORMAT_ALTERNATIVE) -typedef __fp16 float16_t; -#define ARM_FLOAT16_SUPPORTED -#endif -#endif -#else +#if defined(__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE & 2) /* When Vector float16, this flag is always defined and can't be disabled */ -#define ARM_FLOAT16_SUPPORTED + #define ARM_FLOAT16_SUPPORTED +#else + #if !defined(DISABLEFLOAT16) + #if defined(__ARM_FP16_FORMAT_IEEE) || defined(__ARM_FP16_FORMAT_ALTERNATIVE) + typedef __fp16 float16_t; + #define ARM_FLOAT16_SUPPORTED + #endif + #endif #endif -#if defined(ARM_MATH_NEON) || \ - (defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)) /* floating point vector*/ +#if defined(ARM_MATH_NEON) || (defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)) /* floating point vector*/ #if defined(ARM_MATH_MVE_FLOAT16) || defined(ARM_MATH_NEON_FLOAT16) -/** + /** * @brief 16-bit floating-point 128-bit vector data type */ -typedef __ALIGNED(2) float16x8_t f16x8_t; + typedef __ALIGNED(2) float16x8_t f16x8_t; -/** + /** * @brief 16-bit floating-point 128-bit vector pair data type */ -typedef float16x8x2_t f16x8x2_t; + typedef float16x8x2_t f16x8x2_t; -/** + /** * @brief 16-bit floating-point 128-bit vector quadruplet data type */ -typedef float16x8x4_t f16x8x4_t; + typedef float16x8x4_t f16x8x4_t; -/** + /** * @brief 16-bit ubiquitous 128-bit vector data type */ -typedef union _any16x8_t { - float16x8_t f; - int16x8_t i; -} any16x8_t; + typedef union _any16x8_t + { + float16x8_t f; + int16x8_t i; + } any16x8_t; #endif #endif #if defined(ARM_MATH_NEON) + #if defined(ARM_MATH_NEON_FLOAT16) -/** + /** * @brief 16-bit float 64-bit vector data type. */ -typedef __ALIGNED(2) float16x4_t f16x4_t; + typedef __ALIGNED(2) float16x4_t f16x4_t; -/** + /** * @brief 16-bit floating-point 128-bit vector triplet data type */ -typedef float16x8x3_t f16x8x3_t; + typedef float16x8x3_t f16x8x3_t; -/** + /** * @brief 16-bit floating-point 64-bit vector pair data type */ -typedef float16x4x2_t f16x4x2_t; + typedef float16x4x2_t f16x4x2_t; -/** + /** * @brief 16-bit floating-point 64-bit vector triplet data type */ -typedef float16x4x3_t f16x4x3_t; + typedef float16x4x3_t f16x4x3_t; -/** + /** * @brief 16-bit floating-point 64-bit vector quadruplet data type */ -typedef float16x4x4_t f16x4x4_t; + typedef float16x4x4_t f16x4x4_t; -/** + /** * @brief 16-bit ubiquitous 64-bit vector data type */ -typedef union _any16x4_t { - float16x4_t f; - int16x4_t i; -} any16x4_t; + typedef union _any16x4_t + { + float16x4_t f; + int16x4_t i; + } any16x4_t; #endif #endif + + #if defined(ARM_FLOAT16_SUPPORTED) #if defined(__ICCARM__) -#define F16INFINITY ((float16_t)INFINITY) +#define F16INFINITY ((float16_t) INFINITY) #else @@ -142,16 +147,16 @@ typedef union _any16x4_t { #endif -#define F16_MAX ((float16_t)__FLT16_MAX__) -#define F16_MIN (-(_Float16)__FLT16_MAX__) +#define F16_MAX ((float16_t)__FLT16_MAX__) +#define F16_MIN (-(_Float16)__FLT16_MAX__) -#define F16_ABSMAX ((float16_t)__FLT16_MAX__) -#define F16_ABSMIN ((float16_t)0.0f16) +#define F16_ABSMAX ((float16_t)__FLT16_MAX__) +#define F16_ABSMIN ((float16_t)0.0f16) #endif /* ARM_FLOAT16_SUPPORTED*/ #endif /* !defined( __CC_ARM ) */ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_mve_tables.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_mve_tables.h new file mode 100755 index 00000000000..aa58d7a92c6 --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_mve_tables.h @@ -0,0 +1,193 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mve_tables.h + * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc + * used for MVE implementation only + * + * @version V1.10.0 + * @date 04 October 2021 + * + * Target Processor: Cortex-M and Cortex-A cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + #ifndef ARM_MVE_TABLES_H + #define ARM_MVE_TABLES_H + +#include "arm_math_types.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + + + +#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_16_f32[2]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_16_f32[2]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_16_f32[2]; +extern const float32_t rearranged_twiddle_stride1_16_f32[8]; +extern const float32_t rearranged_twiddle_stride2_16_f32[8]; +extern const float32_t rearranged_twiddle_stride3_16_f32[8]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_64_f32[3]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_64_f32[3]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_64_f32[3]; +extern const float32_t rearranged_twiddle_stride1_64_f32[40]; +extern const float32_t rearranged_twiddle_stride2_64_f32[40]; +extern const float32_t rearranged_twiddle_stride3_64_f32[40]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_256_f32[4]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_256_f32[4]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_256_f32[4]; +extern const float32_t rearranged_twiddle_stride1_256_f32[168]; +extern const float32_t rearranged_twiddle_stride2_256_f32[168]; +extern const float32_t rearranged_twiddle_stride3_256_f32[168]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_1024_f32[5]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_1024_f32[5]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_1024_f32[5]; +extern const float32_t rearranged_twiddle_stride1_1024_f32[680]; +extern const float32_t rearranged_twiddle_stride2_1024_f32[680]; +extern const float32_t rearranged_twiddle_stride3_1024_f32[680]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_4096_f32[6]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_4096_f32[6]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_4096_f32[6]; +extern const float32_t rearranged_twiddle_stride1_4096_f32[2728]; +extern const float32_t rearranged_twiddle_stride2_4096_f32[2728]; +extern const float32_t rearranged_twiddle_stride3_4096_f32[2728]; + + +#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ + + + +#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) + + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_16_q31[2]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_16_q31[2]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_16_q31[2]; +extern const q31_t rearranged_twiddle_stride1_16_q31[8]; +extern const q31_t rearranged_twiddle_stride2_16_q31[8]; +extern const q31_t rearranged_twiddle_stride3_16_q31[8]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_64_q31[3]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_64_q31[3]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_64_q31[3]; +extern const q31_t rearranged_twiddle_stride1_64_q31[40]; +extern const q31_t rearranged_twiddle_stride2_64_q31[40]; +extern const q31_t rearranged_twiddle_stride3_64_q31[40]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_256_q31[4]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_256_q31[4]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_256_q31[4]; +extern const q31_t rearranged_twiddle_stride1_256_q31[168]; +extern const q31_t rearranged_twiddle_stride2_256_q31[168]; +extern const q31_t rearranged_twiddle_stride3_256_q31[168]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_1024_q31[5]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_1024_q31[5]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_1024_q31[5]; +extern const q31_t rearranged_twiddle_stride1_1024_q31[680]; +extern const q31_t rearranged_twiddle_stride2_1024_q31[680]; +extern const q31_t rearranged_twiddle_stride3_1024_q31[680]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_4096_q31[6]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_4096_q31[6]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_4096_q31[6]; +extern const q31_t rearranged_twiddle_stride1_4096_q31[2728]; +extern const q31_t rearranged_twiddle_stride2_4096_q31[2728]; +extern const q31_t rearranged_twiddle_stride3_4096_q31[2728]; + + + +#endif /* defined(ARM_MATH_MVEI) */ + + + +#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) + + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_16_q15[2]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_16_q15[2]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_16_q15[2]; +extern const q15_t rearranged_twiddle_stride1_16_q15[8]; +extern const q15_t rearranged_twiddle_stride2_16_q15[8]; +extern const q15_t rearranged_twiddle_stride3_16_q15[8]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_64_q15[3]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_64_q15[3]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_64_q15[3]; +extern const q15_t rearranged_twiddle_stride1_64_q15[40]; +extern const q15_t rearranged_twiddle_stride2_64_q15[40]; +extern const q15_t rearranged_twiddle_stride3_64_q15[40]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_256_q15[4]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_256_q15[4]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_256_q15[4]; +extern const q15_t rearranged_twiddle_stride1_256_q15[168]; +extern const q15_t rearranged_twiddle_stride2_256_q15[168]; +extern const q15_t rearranged_twiddle_stride3_256_q15[168]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_1024_q15[5]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_1024_q15[5]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_1024_q15[5]; +extern const q15_t rearranged_twiddle_stride1_1024_q15[680]; +extern const q15_t rearranged_twiddle_stride2_1024_q15[680]; +extern const q15_t rearranged_twiddle_stride3_1024_q15[680]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_4096_q15[6]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_4096_q15[6]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_4096_q15[6]; +extern const q15_t rearranged_twiddle_stride1_4096_q15[2728]; +extern const q15_t rearranged_twiddle_stride2_4096_q15[2728]; +extern const q15_t rearranged_twiddle_stride3_4096_q15[2728]; + + +#endif /* defined(ARM_MATH_MVEI) */ + + + +#ifdef __cplusplus +} +#endif + +#endif /*_ARM_MVE_TABLES_H*/ + diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_mve_tables_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_mve_tables_f16.h new file mode 100755 index 00000000000..ae2824529a3 --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_mve_tables_f16.h @@ -0,0 +1,97 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: arm_mve_tables_f16.h + * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc + * used for MVE implementation only + * + * @version V1.10.0 + * @date 04 October 2021 + * + * Target Processor: Cortex-M and Cortex-A cores + * -------------------------------------------------------------------- */ +/* + * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + #ifndef ARM_MVE_TABLES_F16_H + #define ARM_MVE_TABLES_F16_H + +#include "arm_math_types_f16.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + + + +#if defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) + + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_16_f16[2]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_16_f16[2]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_16_f16[2]; +extern const float16_t rearranged_twiddle_stride1_16_f16[8]; +extern const float16_t rearranged_twiddle_stride2_16_f16[8]; +extern const float16_t rearranged_twiddle_stride3_16_f16[8]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_64_f16[3]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_64_f16[3]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_64_f16[3]; +extern const float16_t rearranged_twiddle_stride1_64_f16[40]; +extern const float16_t rearranged_twiddle_stride2_64_f16[40]; +extern const float16_t rearranged_twiddle_stride3_64_f16[40]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_256_f16[4]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_256_f16[4]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_256_f16[4]; +extern const float16_t rearranged_twiddle_stride1_256_f16[168]; +extern const float16_t rearranged_twiddle_stride2_256_f16[168]; +extern const float16_t rearranged_twiddle_stride3_256_f16[168]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_1024_f16[5]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_1024_f16[5]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_1024_f16[5]; +extern const float16_t rearranged_twiddle_stride1_1024_f16[680]; +extern const float16_t rearranged_twiddle_stride2_1024_f16[680]; +extern const float16_t rearranged_twiddle_stride3_1024_f16[680]; + + +extern const uint32_t rearranged_twiddle_tab_stride1_arr_4096_f16[6]; +extern const uint32_t rearranged_twiddle_tab_stride2_arr_4096_f16[6]; +extern const uint32_t rearranged_twiddle_tab_stride3_arr_4096_f16[6]; +extern const float16_t rearranged_twiddle_stride1_4096_f16[2728]; +extern const float16_t rearranged_twiddle_stride2_4096_f16[2728]; +extern const float16_t rearranged_twiddle_stride3_4096_f16[2728]; + + + +#endif /* defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) */ + + + +#ifdef __cplusplus +} +#endif + +#endif /*_ARM_MVE_TABLES_F16_H*/ + diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_vec_math.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_vec_math.h old mode 100644 new mode 100755 similarity index 67% rename from Libraries/CMSIS/5.9.0/DSP/Include/arm_vec_math.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_vec_math.h index 0616db74dbc..ec90802e09b --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_vec_math.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_vec_math.h @@ -23,30 +23,33 @@ * limitations under the License. */ -#ifndef _ARM_VEC_MATH_H -#define _ARM_VEC_MATH_H +#ifndef ARM_VEC_MATH_H +#define ARM_VEC_MATH_H #include "arm_math_types.h" #include "arm_common_tables.h" #include "arm_helium_utils.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) -#define INV_NEWTON_INIT_F32 0x7EF127EA +#define INV_NEWTON_INIT_F32 0x7EF127EA + +static const float32_t __logf_rng_f32=0.693147180f; -static const float32_t __logf_rng_f32 = 0.693147180f; /* fast inverse approximation (3x newton) */ -__STATIC_INLINE f32x4_t vrecip_medprec_f32(f32x4_t x) +__STATIC_INLINE f32x4_t vrecip_medprec_f32( + f32x4_t x) { - q31x4_t m; - f32x4_t b; - any32x4_t xinv; - f32x4_t ax = vabsq(x); + q31x4_t m; + f32x4_t b; + any32x4_t xinv; + f32x4_t ax = vabsq(x); xinv.f = ax; m = 0x3F800000 - (xinv.i & 0x7F800000); @@ -63,7 +66,7 @@ __STATIC_INLINE f32x4_t vrecip_medprec_f32(f32x4_t x) b = 2.0f - xinv.f * ax; xinv.f = xinv.f * b; - xinv.f = vdupq_m(xinv.f, INFINITY, vcmpeqq(x, 0.0f)); + xinv.f = vdupq_m(xinv.f, F32_MAX, vcmpeqq(x, 0.0f)); /* * restore sign */ @@ -73,12 +76,13 @@ __STATIC_INLINE f32x4_t vrecip_medprec_f32(f32x4_t x) } /* fast inverse approximation (4x newton) */ -__STATIC_INLINE f32x4_t vrecip_hiprec_f32(f32x4_t x) +__STATIC_INLINE f32x4_t vrecip_hiprec_f32( + f32x4_t x) { - q31x4_t m; - f32x4_t b; - any32x4_t xinv; - f32x4_t ax = vabsq(x); + q31x4_t m; + f32x4_t b; + any32x4_t xinv; + f32x4_t ax = vabsq(x); xinv.f = ax; @@ -99,7 +103,7 @@ __STATIC_INLINE f32x4_t vrecip_hiprec_f32(f32x4_t x) b = 2.0f - xinv.f * ax; xinv.f = xinv.f * b; - xinv.f = vdupq_m(xinv.f, INFINITY, vcmpeqq(x, 0.0f)); + xinv.f = vdupq_m(xinv.f, F32_MAX, vcmpeqq(x, 0.0f)); /* * restore sign */ @@ -108,7 +112,8 @@ __STATIC_INLINE f32x4_t vrecip_hiprec_f32(f32x4_t x) return xinv.f; } -__STATIC_INLINE f32x4_t vdiv_f32(f32x4_t num, f32x4_t den) +__STATIC_INLINE f32x4_t vdiv_f32( + f32x4_t num, f32x4_t den) { return vmulq(num, vrecip_hiprec_f32(den)); } @@ -120,23 +125,27 @@ __STATIC_INLINE f32x4_t vdiv_f32(f32x4_t num, f32x4_t den) @return destination f32 quad vector */ -__STATIC_INLINE f32x4_t vtaylor_polyq_f32(f32x4_t x, const float32_t *coeffs) +__STATIC_INLINE f32x4_t vtaylor_polyq_f32( + f32x4_t x, + const float32_t * coeffs) { - f32x4_t A = vfmasq(vdupq_n_f32(coeffs[4]), x, coeffs[0]); - f32x4_t B = vfmasq(vdupq_n_f32(coeffs[6]), x, coeffs[2]); - f32x4_t C = vfmasq(vdupq_n_f32(coeffs[5]), x, coeffs[1]); - f32x4_t D = vfmasq(vdupq_n_f32(coeffs[7]), x, coeffs[3]); - f32x4_t x2 = vmulq(x, x); - f32x4_t x4 = vmulq(x2, x2); - f32x4_t res = vfmaq(vfmaq_f32(A, B, x2), vfmaq_f32(C, D, x2), x4); + f32x4_t A = vfmasq(vdupq_n_f32(coeffs[4]), x, coeffs[0]); + f32x4_t B = vfmasq(vdupq_n_f32(coeffs[6]), x, coeffs[2]); + f32x4_t C = vfmasq(vdupq_n_f32(coeffs[5]), x, coeffs[1]); + f32x4_t D = vfmasq(vdupq_n_f32(coeffs[7]), x, coeffs[3]); + f32x4_t x2 = vmulq(x, x); + f32x4_t x4 = vmulq(x2, x2); + f32x4_t res = vfmaq(vfmaq_f32(A, B, x2), vfmaq_f32(C, D, x2), x4); return res; } -__STATIC_INLINE f32x4_t vmant_exp_f32(f32x4_t x, int32x4_t *e) +__STATIC_INLINE f32x4_t vmant_exp_f32( + f32x4_t x, + int32x4_t * e) { - any32x4_t r; - int32x4_t n; + any32x4_t r; + int32x4_t n; r.f = x; n = r.i >> 23; @@ -147,12 +156,13 @@ __STATIC_INLINE f32x4_t vmant_exp_f32(f32x4_t x, int32x4_t *e) return r.f; } + __STATIC_INLINE f32x4_t vlogq_f32(f32x4_t vecIn) { - q31x4_t vecExpUnBiased; - f32x4_t vecTmpFlt0, vecTmpFlt1; - f32x4_t vecAcc0, vecAcc1, vecAcc2, vecAcc3; - f32x4_t vecExpUnBiasedFlt; + q31x4_t vecExpUnBiased; + f32x4_t vecTmpFlt0, vecTmpFlt1; + f32x4_t vecAcc0, vecAcc1, vecAcc2, vecAcc3; + f32x4_t vecExpUnBiasedFlt; /* * extract exponent @@ -203,21 +213,22 @@ __STATIC_INLINE f32x4_t vlogq_f32(f32x4_t vecIn) */ vecAcc0 = vfmaq(vecAcc0, vecExpUnBiasedFlt, __logf_rng_f32); // set log0 down to -inf - vecAcc0 = vdupq_m(vecAcc0, -INFINITY, vcmpeqq(vecIn, 0.0f)); + vecAcc0 = vdupq_m(vecAcc0, -F32_MAX, vcmpeqq(vecIn, 0.0f)); return vecAcc0; } -__STATIC_INLINE f32x4_t vexpq_f32(f32x4_t x) +__STATIC_INLINE f32x4_t vexpq_f32( + f32x4_t x) { // Perform range reduction [-log(2),log(2)] - int32x4_t m = vcvtq_s32_f32(vmulq_n_f32(x, 1.4426950408f)); - f32x4_t val = vfmsq_f32(x, vcvtq_f32_s32(m), vdupq_n_f32(0.6931471805f)); + int32x4_t m = vcvtq_s32_f32(vmulq_n_f32(x, 1.4426950408f)); + f32x4_t val = vfmsq_f32(x, vcvtq_f32_s32(m), vdupq_n_f32(0.6931471805f)); // Polynomial Approximation - f32x4_t poly = vtaylor_polyq_f32(val, exp_tab); + f32x4_t poly = vtaylor_polyq_f32(val, exp_tab); // Reconstruct - poly = (f32x4_t)(vqaddq_s32((q31x4_t)(poly), vqshlq_n_s32(m, 23))); + poly = (f32x4_t) (vqaddq_s32((q31x4_t) (poly), vqshlq_n_s32(m, 23))); poly = vdupq_m(poly, 0.0f, vcmpltq_n_s32(m, -126)); return poly; @@ -225,7 +236,7 @@ __STATIC_INLINE f32x4_t vexpq_f32(f32x4_t x) __STATIC_INLINE f32x4_t arm_vec_exponent_f32(f32x4_t x, int32_t nb) { - f32x4_t r = x; + f32x4_t r = x; nb--; while (nb > 0) { r = vmulq(r, x); @@ -236,8 +247,8 @@ __STATIC_INLINE f32x4_t arm_vec_exponent_f32(f32x4_t x, int32_t nb) __STATIC_INLINE f32x4_t vrecip_f32(f32x4_t vecIn) { - f32x4_t vecSx, vecW, vecTmp; - any32x4_t v; + f32x4_t vecSx, vecW, vecTmp; + any32x4_t v; vecSx = vabsq(vecIn); @@ -254,9 +265,9 @@ __STATIC_INLINE f32x4_t vrecip_f32(f32x4_t vecIn) vecTmp = vfmasq(vecW, vecTmp, 56.0f); vecTmp = vfmasq(vecW, vecTmp, -28.0f); vecTmp = vfmasq(vecW, vecTmp, 8.0f); - v.f = vmulq(v.f, vecTmp); + v.f = vmulq(v.f, vecTmp); - v.f = vdupq_m(v.f, INFINITY, vcmpeqq(vecIn, 0.0f)); + v.f = vdupq_m(v.f, F32_MAX, vcmpeqq(vecIn, 0.0f)); /* * restore sign */ @@ -264,17 +275,21 @@ __STATIC_INLINE f32x4_t vrecip_f32(f32x4_t vecIn) return v.f; } -__STATIC_INLINE f32x4_t vtanhq_f32(f32x4_t val) +__STATIC_INLINE f32x4_t vtanhq_f32( + f32x4_t val) { - f32x4_t x = vminnmq_f32(vmaxnmq_f32(val, vdupq_n_f32(-10.f)), vdupq_n_f32(10.0f)); - f32x4_t exp2x = vexpq_f32(vmulq_n_f32(x, 2.f)); - f32x4_t num = vsubq_n_f32(exp2x, 1.f); - f32x4_t den = vaddq_n_f32(exp2x, 1.f); - f32x4_t tanh = vmulq_f32(num, vrecip_f32(den)); + f32x4_t x = + vminnmq_f32(vmaxnmq_f32(val, vdupq_n_f32(-10.f)), vdupq_n_f32(10.0f)); + f32x4_t exp2x = vexpq_f32(vmulq_n_f32(x, 2.f)); + f32x4_t num = vsubq_n_f32(exp2x, 1.f); + f32x4_t den = vaddq_n_f32(exp2x, 1.f); + f32x4_t tanh = vmulq_f32(num, vrecip_f32(den)); return tanh; } -__STATIC_INLINE f32x4_t vpowq_f32(f32x4_t val, f32x4_t n) +__STATIC_INLINE f32x4_t vpowq_f32( + f32x4_t val, + f32x4_t n) { return vexpq_f32(vmulq_f32(n, vlogq_f32(val))); } @@ -284,8 +299,7 @@ __STATIC_INLINE f32x4_t vpowq_f32(f32x4_t val, f32x4_t n) #if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) #endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */ -#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && \ - !defined(ARM_MATH_AUTOVECTORIZE) +#if (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) #include "NEMath.h" /** @@ -295,18 +309,20 @@ __STATIC_INLINE f32x4_t vpowq_f32(f32x4_t val, f32x4_t n) * @return x^nb * */ -__STATIC_INLINE float32x4_t arm_vec_exponent_f32(float32x4_t x, int32_t nb) +__STATIC_INLINE float32x4_t arm_vec_exponent_f32(float32x4_t x, int32_t nb) { float32x4_t r = x; - nb--; - while (nb > 0) { - r = vmulq_f32(r, x); + nb --; + while(nb > 0) + { + r = vmulq_f32(r , x); nb--; } - return (r); + return(r); } -__STATIC_INLINE float32x4_t __arm_vec_sqrt_f32_neon(float32x4_t x) + +__STATIC_INLINE float32x4_t __arm_vec_sqrt_f32_neon(float32x4_t x) { float32x4_t x1 = vmaxq_f32(x, vdupq_n_f32(FLT_MIN)); float32x4_t e = vrsqrteq_f32(x1); @@ -318,36 +334,37 @@ __STATIC_INLINE float32x4_t __arm_vec_sqrt_f32_neon(float32x4_t x) __STATIC_INLINE int16x8_t __arm_vec_sqrt_q15_neon(int16x8_t vec) { float32x4_t tempF; - int32x4_t tempHI, tempLO; + int32x4_t tempHI,tempLO; tempLO = vmovl_s16(vget_low_s16(vec)); - tempF = vcvtq_n_f32_s32(tempLO, 15); + tempF = vcvtq_n_f32_s32(tempLO,15); tempF = __arm_vec_sqrt_f32_neon(tempF); - tempLO = vcvtq_n_s32_f32(tempF, 15); + tempLO = vcvtq_n_s32_f32(tempF,15); tempHI = vmovl_s16(vget_high_s16(vec)); - tempF = vcvtq_n_f32_s32(tempHI, 15); + tempF = vcvtq_n_f32_s32(tempHI,15); tempF = __arm_vec_sqrt_f32_neon(tempF); - tempHI = vcvtq_n_s32_f32(tempF, 15); + tempHI = vcvtq_n_s32_f32(tempF,15); - return (vcombine_s16(vqmovn_s32(tempLO), vqmovn_s32(tempHI))); + return(vcombine_s16(vqmovn_s32(tempLO),vqmovn_s32(tempHI))); } __STATIC_INLINE int32x4_t __arm_vec_sqrt_q31_neon(int32x4_t vec) { - float32x4_t temp; + float32x4_t temp; - temp = vcvtq_n_f32_s32(vec, 31); - temp = __arm_vec_sqrt_f32_neon(temp); - return (vcvtq_n_s32_f32(temp, 31)); + temp = vcvtq_n_f32_s32(vec,31); + temp = __arm_vec_sqrt_f32_neon(temp); + return(vcvtq_n_s32_f32(temp,31)); } #endif /* (defined(ARM_MATH_NEON) || defined(ARM_MATH_NEON_EXPERIMENTAL)) && !defined(ARM_MATH_AUTOVECTORIZE) */ -#ifdef __cplusplus +#ifdef __cplusplus } #endif + #endif /* _ARM_VEC_MATH_H */ /** diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_vec_math_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_vec_math_f16.h old mode 100644 new mode 100755 similarity index 68% rename from Libraries/CMSIS/5.9.0/DSP/Include/arm_vec_math_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_vec_math_f16.h index 7fe91b07d70..70e503d66e2 --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_vec_math_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/arm_vec_math_f16.h @@ -23,30 +23,34 @@ * limitations under the License. */ -#ifndef _ARM_VEC_MATH_F16_H -#define _ARM_VEC_MATH_F16_H +#ifndef ARM_VEC_MATH_F16_H +#define ARM_VEC_MATH_F16_H #include "arm_math_types_f16.h" #include "arm_common_tables_f16.h" #include "arm_helium_utils.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) + #if defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) -static const float16_t __logf_rng_f16 = 0.693147180f16; + +static const float16_t __logf_rng_f16=0.693147180f16; /* fast inverse approximation (3x newton) */ -__STATIC_INLINE f16x8_t vrecip_medprec_f16(f16x8_t x) +__STATIC_INLINE f16x8_t vrecip_medprec_f16( + f16x8_t x) { - q15x8_t m; - f16x8_t b; - any16x8_t xinv; - f16x8_t ax = vabsq(x); + q15x8_t m; + f16x8_t b; + any16x8_t xinv; + f16x8_t ax = vabsq(x); xinv.f = ax; @@ -74,12 +78,13 @@ __STATIC_INLINE f16x8_t vrecip_medprec_f16(f16x8_t x) } /* fast inverse approximation (4x newton) */ -__STATIC_INLINE f16x8_t vrecip_hiprec_f16(f16x8_t x) +__STATIC_INLINE f16x8_t vrecip_hiprec_f16( + f16x8_t x) { - q15x8_t m; - f16x8_t b; - any16x8_t xinv; - f16x8_t ax = vabsq(x); + q15x8_t m; + f16x8_t b; + any16x8_t xinv; + f16x8_t ax = vabsq(x); xinv.f = ax; @@ -109,11 +114,13 @@ __STATIC_INLINE f16x8_t vrecip_hiprec_f16(f16x8_t x) return xinv.f; } -__STATIC_INLINE f16x8_t vdiv_f16(f16x8_t num, f16x8_t den) +__STATIC_INLINE f16x8_t vdiv_f16( + f16x8_t num, f16x8_t den) { return vmulq(num, vrecip_hiprec_f16(den)); } + /** @brief Single-precision taylor dev. @param[in] x f16 vector input @@ -121,37 +128,39 @@ __STATIC_INLINE f16x8_t vdiv_f16(f16x8_t num, f16x8_t den) @return destination f16 vector */ -__STATIC_INLINE float16x8_t vtaylor_polyq_f16(float16x8_t x, const float16_t *coeffs) +__STATIC_INLINE float16x8_t vtaylor_polyq_f16( + float16x8_t x, + const float16_t * coeffs) { - float16x8_t A = vfmasq(vdupq_n_f16(coeffs[4]), x, coeffs[0]); - float16x8_t B = vfmasq(vdupq_n_f16(coeffs[6]), x, coeffs[2]); - float16x8_t C = vfmasq(vdupq_n_f16(coeffs[5]), x, coeffs[1]); - float16x8_t D = vfmasq(vdupq_n_f16(coeffs[7]), x, coeffs[3]); - float16x8_t x2 = vmulq(x, x); - float16x8_t x4 = vmulq(x2, x2); - float16x8_t res = vfmaq(vfmaq_f16(A, B, x2), vfmaq_f16(C, D, x2), x4); + float16x8_t A = vfmasq(vdupq_n_f16(coeffs[4]), x, coeffs[0]); + float16x8_t B = vfmasq(vdupq_n_f16(coeffs[6]), x, coeffs[2]); + float16x8_t C = vfmasq(vdupq_n_f16(coeffs[5]), x, coeffs[1]); + float16x8_t D = vfmasq(vdupq_n_f16(coeffs[7]), x, coeffs[3]); + float16x8_t x2 = vmulq(x, x); + float16x8_t x4 = vmulq(x2, x2); + float16x8_t res = vfmaq(vfmaq_f16(A, B, x2), vfmaq_f16(C, D, x2), x4); return res; } -#define VMANT_EXP_F16(x) \ - any16x8_t r; \ - int16x8_t n; \ - \ - r.f = x; \ - n = r.i >> 10; \ - n = n - 15; \ - r.i = r.i - (n << 10); \ - \ - vecExpUnBiased = n; \ +#define VMANT_EXP_F16(x) \ + any16x8_t r; \ + int16x8_t n; \ + \ + r.f = x; \ + n = r.i >> 10; \ + n = n - 15; \ + r.i = r.i - (n << 10);\ + \ + vecExpUnBiased = n; \ vecTmpFlt1 = r.f; __STATIC_INLINE float16x8_t vlogq_f16(float16x8_t vecIn) { - q15x8_t vecExpUnBiased; - float16x8_t vecTmpFlt0, vecTmpFlt1; - float16x8_t vecAcc0, vecAcc1, vecAcc2, vecAcc3; - float16x8_t vecExpUnBiasedFlt; + q15x8_t vecExpUnBiased; + float16x8_t vecTmpFlt0, vecTmpFlt1; + float16x8_t vecAcc0, vecAcc1, vecAcc2, vecAcc3; + float16x8_t vecExpUnBiasedFlt; /* * extract exponent @@ -206,17 +215,18 @@ __STATIC_INLINE float16x8_t vlogq_f16(float16x8_t vecIn) return vecAcc0; } -__STATIC_INLINE float16x8_t vexpq_f16(float16x8_t x) +__STATIC_INLINE float16x8_t vexpq_f16( + float16x8_t x) { // Perform range reduction [-log(2),log(2)] - int16x8_t m = vcvtq_s16_f16(vmulq_n_f16(x, 1.4426950408f16)); - float16x8_t val = vfmsq_f16(x, vcvtq_f16_s16(m), vdupq_n_f16(0.6931471805f16)); + int16x8_t m = vcvtq_s16_f16(vmulq_n_f16(x, 1.4426950408f16)); + float16x8_t val = vfmsq_f16(x, vcvtq_f16_s16(m), vdupq_n_f16(0.6931471805f16)); // Polynomial Approximation - float16x8_t poly = vtaylor_polyq_f16(val, exp_tab_f16); + float16x8_t poly = vtaylor_polyq_f16(val, exp_tab_f16); // Reconstruct - poly = (float16x8_t)(vqaddq_s16((int16x8_t)(poly), vqshlq_n_s16(m, 10))); + poly = (float16x8_t) (vqaddq_s16((int16x8_t) (poly), vqshlq_n_s16(m, 10))); poly = vdupq_m_n_f16(poly, 0.0f16, vcmpltq_n_s16(m, -14)); return poly; @@ -224,7 +234,7 @@ __STATIC_INLINE float16x8_t vexpq_f16(float16x8_t x) __STATIC_INLINE float16x8_t arm_vec_exponent_f16(float16x8_t x, int16_t nb) { - float16x8_t r = x; + float16x8_t r = x; nb--; while (nb > 0) { r = vmulq(r, x); @@ -233,17 +243,19 @@ __STATIC_INLINE float16x8_t arm_vec_exponent_f16(float16x8_t x, int16_t nb) return (r); } -__STATIC_INLINE f16x8_t vpowq_f16(f16x8_t val, f16x8_t n) +__STATIC_INLINE f16x8_t vpowq_f16( + f16x8_t val, + f16x8_t n) { return vexpq_f16(vmulq_f16(n, vlogq_f16(val))); } -#define INV_NEWTON_INIT_F16 0x7773 +#define INV_NEWTON_INIT_F16 0x7773 __STATIC_INLINE f16x8_t vrecip_f16(f16x8_t vecIn) { - f16x8_t vecSx, vecW, vecTmp; - any16x8_t v; + f16x8_t vecSx, vecW, vecTmp; + any16x8_t v; vecSx = vabsq(vecIn); @@ -260,7 +272,7 @@ __STATIC_INLINE f16x8_t vrecip_f16(f16x8_t vecIn) vecTmp = vfmasq_n_f16(vecW, vecTmp, 56.0f16); vecTmp = vfmasq_n_f16(vecW, vecTmp, -28.0f16); vecTmp = vfmasq_n_f16(vecW, vecTmp, 8.0f16); - v.f = vmulq(v.f, vecTmp); + v.f = vmulq(v.f, vecTmp); v.f = vdupq_m_n_f16(v.f, F16INFINITY, vcmpeqq_n_f16(vecIn, 0.0f)); /* @@ -270,19 +282,23 @@ __STATIC_INLINE f16x8_t vrecip_f16(f16x8_t vecIn) return v.f; } -__STATIC_INLINE f16x8_t vtanhq_f16(f16x8_t val) +__STATIC_INLINE f16x8_t vtanhq_f16( + f16x8_t val) { - f16x8_t x = vminnmq_f16(vmaxnmq_f16(val, vdupq_n_f16(-10.f16)), vdupq_n_f16(10.0f16)); - f16x8_t exp2x = vexpq_f16(vmulq_n_f16(x, 2.f16)); - f16x8_t num = vsubq_n_f16(exp2x, 1.f16); - f16x8_t den = vaddq_n_f16(exp2x, 1.f16); - f16x8_t tanh = vmulq_f16(num, vrecip_f16(den)); + f16x8_t x = + vminnmq_f16(vmaxnmq_f16(val, vdupq_n_f16(-10.f16)), vdupq_n_f16(10.0f16)); + f16x8_t exp2x = vexpq_f16(vmulq_n_f16(x, 2.f16)); + f16x8_t num = vsubq_n_f16(exp2x, 1.f16); + f16x8_t den = vaddq_n_f16(exp2x, 1.f16); + f16x8_t tanh = vmulq_f16(num, vrecip_f16(den)); return tanh; } #endif /* defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE)*/ -#ifdef __cplusplus + + +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/basic_math_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/basic_math_functions.h old mode 100644 new mode 100755 similarity index 71% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/basic_math_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/basic_math_functions.h index d6e50493c93..645afdc3b94 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/basic_math_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/basic_math_functions.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _BASIC_MATH_FUNCTIONS_H_ -#define _BASIC_MATH_FUNCTIONS_H_ + +#ifndef BASIC_MATH_FUNCTIONS_H_ +#define BASIC_MATH_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -32,50 +33,72 @@ #include "dsp/none.h" #include "dsp/utils.h" -#ifdef __cplusplus -extern "C" { + +#ifdef __cplusplus +extern "C" +{ #endif /** * @defgroup groupMath Basic Math Functions */ -/** + /** * @brief Q7 vector multiplication. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_mult_q7(const q7_t *pSrcA, const q7_t *pSrcB, q7_t *pDst, uint32_t blockSize); + void arm_mult_q7( + const q7_t * pSrcA, + const q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Q15 vector multiplication. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_mult_q15(const q15_t *pSrcA, const q15_t *pSrcB, q15_t *pDst, uint32_t blockSize); + void arm_mult_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Q31 vector multiplication. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_mult_q31(const q31_t *pSrcA, const q31_t *pSrcB, q31_t *pDst, uint32_t blockSize); + void arm_mult_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Floating-point vector multiplication. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_mult_f32(const float32_t *pSrcA, const float32_t *pSrcB, float32_t *pDst, - uint32_t blockSize); + void arm_mult_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + /** * @brief Floating-point vector multiplication. @@ -84,18 +107,28 @@ void arm_mult_f32(const float32_t *pSrcA, const float32_t *pSrcB, float32_t *pDs * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_mult_f64(const float64_t *pSrcA, const float64_t *pSrcB, float64_t *pDst, - uint32_t blockSize); +void arm_mult_f64( +const float64_t * pSrcA, +const float64_t * pSrcB, + float64_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Floating-point vector addition. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_add_f32(const float32_t *pSrcA, const float32_t *pSrcB, float32_t *pDst, - uint32_t blockSize); + void arm_add_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); + + /** * @brief Floating-point vector addition. @@ -104,102 +137,159 @@ void arm_add_f32(const float32_t *pSrcA, const float32_t *pSrcB, float32_t *pDst * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_add_f64(const float64_t *pSrcA, const float64_t *pSrcB, float64_t *pDst, - uint32_t blockSize); + void arm_add_f64( + const float64_t * pSrcA, + const float64_t * pSrcB, + float64_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Q7 vector addition. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_add_q7(const q7_t *pSrcA, const q7_t *pSrcB, q7_t *pDst, uint32_t blockSize); + void arm_add_q7( + const q7_t * pSrcA, + const q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Q15 vector addition. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_add_q15(const q15_t *pSrcA, const q15_t *pSrcB, q15_t *pDst, uint32_t blockSize); + void arm_add_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Q31 vector addition. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_add_q31(const q31_t *pSrcA, const q31_t *pSrcB, q31_t *pDst, uint32_t blockSize); + void arm_add_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Floating-point vector subtraction. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_sub_f32(const float32_t *pSrcA, const float32_t *pSrcB, float32_t *pDst, - uint32_t blockSize); + void arm_sub_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + float32_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Floating-point vector subtraction. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_sub_f64(const float64_t *pSrcA, const float64_t *pSrcB, float64_t *pDst, - uint32_t blockSize); + void arm_sub_f64( + const float64_t * pSrcA, + const float64_t * pSrcB, + float64_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Q7 vector subtraction. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_sub_q7(const q7_t *pSrcA, const q7_t *pSrcB, q7_t *pDst, uint32_t blockSize); + void arm_sub_q7( + const q7_t * pSrcA, + const q7_t * pSrcB, + q7_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Q15 vector subtraction. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_sub_q15(const q15_t *pSrcA, const q15_t *pSrcB, q15_t *pDst, uint32_t blockSize); + void arm_sub_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Q31 vector subtraction. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_sub_q31(const q31_t *pSrcA, const q31_t *pSrcB, q31_t *pDst, uint32_t blockSize); + void arm_sub_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Multiplies a floating-point vector by a scalar. * @param[in] pSrc points to the input vector * @param[in] scale scale factor to be applied * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_scale_f32(const float32_t *pSrc, float32_t scale, float32_t *pDst, uint32_t blockSize); + void arm_scale_f32( + const float32_t * pSrc, + float32_t scale, + float32_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Multiplies a floating-point vector by a scalar. * @param[in] pSrc points to the input vector * @param[in] scale scale factor to be applied * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_scale_f64(const float64_t *pSrc, float64_t scale, float64_t *pDst, uint32_t blockSize); + void arm_scale_f64( + const float64_t * pSrc, + float64_t scale, + float64_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Multiplies a Q7 vector by a scalar. * @param[in] pSrc points to the input vector * @param[in] scaleFract fractional portion of the scale value @@ -207,9 +297,15 @@ void arm_scale_f64(const float64_t *pSrc, float64_t scale, float64_t *pDst, uint * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_scale_q7(const q7_t *pSrc, q7_t scaleFract, int8_t shift, q7_t *pDst, uint32_t blockSize); + void arm_scale_q7( + const q7_t * pSrc, + q7_t scaleFract, + int8_t shift, + q7_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Multiplies a Q15 vector by a scalar. * @param[in] pSrc points to the input vector * @param[in] scaleFract fractional portion of the scale value @@ -217,10 +313,15 @@ void arm_scale_q7(const q7_t *pSrc, q7_t scaleFract, int8_t shift, q7_t *pDst, u * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_scale_q15(const q15_t *pSrc, q15_t scaleFract, int8_t shift, q15_t *pDst, - uint32_t blockSize); + void arm_scale_q15( + const q15_t * pSrc, + q15_t scaleFract, + int8_t shift, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Multiplies a Q31 vector by a scalar. * @param[in] pSrc points to the input vector * @param[in] scaleFract fractional portion of the scale value @@ -228,24 +329,38 @@ void arm_scale_q15(const q15_t *pSrc, q15_t scaleFract, int8_t shift, q15_t *pDs * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_scale_q31(const q31_t *pSrc, q31_t scaleFract, int8_t shift, q31_t *pDst, - uint32_t blockSize); + void arm_scale_q31( + const q31_t * pSrc, + q31_t scaleFract, + int8_t shift, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Q7 vector absolute value. * @param[in] pSrc points to the input buffer * @param[out] pDst points to the output buffer * @param[in] blockSize number of samples in each vector */ -void arm_abs_q7(const q7_t *pSrc, q7_t *pDst, uint32_t blockSize); + void arm_abs_q7( + const q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Floating-point vector absolute value. * @param[in] pSrc points to the input buffer * @param[out] pDst points to the output buffer * @param[in] blockSize number of samples in each vector */ -void arm_abs_f32(const float32_t *pSrc, float32_t *pDst, uint32_t blockSize); + void arm_abs_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** * @brief Floating-point vector absolute value. @@ -253,33 +368,51 @@ void arm_abs_f32(const float32_t *pSrc, float32_t *pDst, uint32_t blockSize); * @param[out] pDst points to the output buffer * @param[in] blockSize number of samples in each vector */ -void arm_abs_f64(const float64_t *pSrc, float64_t *pDst, uint32_t blockSize); +void arm_abs_f64( +const float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Q15 vector absolute value. * @param[in] pSrc points to the input buffer * @param[out] pDst points to the output buffer * @param[in] blockSize number of samples in each vector */ -void arm_abs_q15(const q15_t *pSrc, q15_t *pDst, uint32_t blockSize); + void arm_abs_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Q31 vector absolute value. * @param[in] pSrc points to the input buffer * @param[out] pDst points to the output buffer * @param[in] blockSize number of samples in each vector */ -void arm_abs_q31(const q31_t *pSrc, q31_t *pDst, uint32_t blockSize); + void arm_abs_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Dot product of floating-point vectors. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[in] blockSize number of samples in each vector * @param[out] result output result returned here */ -void arm_dot_prod_f32(const float32_t *pSrcA, const float32_t *pSrcB, uint32_t blockSize, - float32_t *result); + void arm_dot_prod_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + uint32_t blockSize, + float32_t * result); + + /** * @brief Dot product of floating-point vectors. @@ -288,62 +421,97 @@ void arm_dot_prod_f32(const float32_t *pSrcA, const float32_t *pSrcB, uint32_t b * @param[in] blockSize number of samples in each vector * @param[out] result output result returned here */ -void arm_dot_prod_f64(const float64_t *pSrcA, const float64_t *pSrcB, uint32_t blockSize, - float64_t *result); +void arm_dot_prod_f64( +const float64_t * pSrcA, +const float64_t * pSrcB, + uint32_t blockSize, + float64_t * result); -/** + + + /** * @brief Dot product of Q7 vectors. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[in] blockSize number of samples in each vector * @param[out] result output result returned here */ -void arm_dot_prod_q7(const q7_t *pSrcA, const q7_t *pSrcB, uint32_t blockSize, q31_t *result); + void arm_dot_prod_q7( + const q7_t * pSrcA, + const q7_t * pSrcB, + uint32_t blockSize, + q31_t * result); -/** + + /** * @brief Dot product of Q15 vectors. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[in] blockSize number of samples in each vector * @param[out] result output result returned here */ -void arm_dot_prod_q15(const q15_t *pSrcA, const q15_t *pSrcB, uint32_t blockSize, q63_t *result); + void arm_dot_prod_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + uint32_t blockSize, + q63_t * result); -/** + + /** * @brief Dot product of Q31 vectors. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[in] blockSize number of samples in each vector * @param[out] result output result returned here */ -void arm_dot_prod_q31(const q31_t *pSrcA, const q31_t *pSrcB, uint32_t blockSize, q63_t *result); + void arm_dot_prod_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + uint32_t blockSize, + q63_t * result); -/** + + /** * @brief Shifts the elements of a Q7 vector a specified number of bits. * @param[in] pSrc points to the input vector * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_shift_q7(const q7_t *pSrc, int8_t shiftBits, q7_t *pDst, uint32_t blockSize); + void arm_shift_q7( + const q7_t * pSrc, + int8_t shiftBits, + q7_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Shifts the elements of a Q15 vector a specified number of bits. * @param[in] pSrc points to the input vector * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_shift_q15(const q15_t *pSrc, int8_t shiftBits, q15_t *pDst, uint32_t blockSize); + void arm_shift_q15( + const q15_t * pSrc, + int8_t shiftBits, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Shifts the elements of a Q31 vector a specified number of bits. * @param[in] pSrc points to the input vector * @param[in] shiftBits number of bits to shift. A positive value shifts left; a negative value shifts right. * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_shift_q31(const q31_t *pSrc, int8_t shiftBits, q31_t *pDst, uint32_t blockSize); + void arm_shift_q31( + const q31_t * pSrc, + int8_t shiftBits, + q31_t * pDst, + uint32_t blockSize); + /** * @brief Adds a constant offset to a floating-point vector. @@ -352,51 +520,83 @@ void arm_shift_q31(const q31_t *pSrc, int8_t shiftBits, q31_t *pDst, uint32_t bl * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_offset_f64(const float64_t *pSrc, float64_t offset, float64_t *pDst, uint32_t blockSize); +void arm_offset_f64( +const float64_t * pSrc, + float64_t offset, + float64_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Adds a constant offset to a floating-point vector. * @param[in] pSrc points to the input vector * @param[in] offset is the offset to be added * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_offset_f32(const float32_t *pSrc, float32_t offset, float32_t *pDst, uint32_t blockSize); + void arm_offset_f32( + const float32_t * pSrc, + float32_t offset, + float32_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Adds a constant offset to a Q7 vector. * @param[in] pSrc points to the input vector * @param[in] offset is the offset to be added * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_offset_q7(const q7_t *pSrc, q7_t offset, q7_t *pDst, uint32_t blockSize); + void arm_offset_q7( + const q7_t * pSrc, + q7_t offset, + q7_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Adds a constant offset to a Q15 vector. * @param[in] pSrc points to the input vector * @param[in] offset is the offset to be added * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_offset_q15(const q15_t *pSrc, q15_t offset, q15_t *pDst, uint32_t blockSize); + void arm_offset_q15( + const q15_t * pSrc, + q15_t offset, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Adds a constant offset to a Q31 vector. * @param[in] pSrc points to the input vector * @param[in] offset is the offset to be added * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_offset_q31(const q31_t *pSrc, q31_t offset, q31_t *pDst, uint32_t blockSize); + void arm_offset_q31( + const q31_t * pSrc, + q31_t offset, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Negates the elements of a floating-point vector. * @param[in] pSrc points to the input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_negate_f32(const float32_t *pSrc, float32_t *pDst, uint32_t blockSize); + void arm_negate_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** * @brief Negates the elements of a floating-point vector. @@ -404,31 +604,47 @@ void arm_negate_f32(const float32_t *pSrc, float32_t *pDst, uint32_t blockSize); * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_negate_f64(const float64_t *pSrc, float64_t *pDst, uint32_t blockSize); +void arm_negate_f64( +const float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Negates the elements of a Q7 vector. * @param[in] pSrc points to the input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_negate_q7(const q7_t *pSrc, q7_t *pDst, uint32_t blockSize); + void arm_negate_q7( + const q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Negates the elements of a Q15 vector. * @param[in] pSrc points to the input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_negate_q15(const q15_t *pSrc, q15_t *pDst, uint32_t blockSize); + void arm_negate_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Negates the elements of a Q31 vector. * @param[in] pSrc points to the input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_negate_q31(const q31_t *pSrc, q31_t *pDst, uint32_t blockSize); + void arm_negate_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); /** * @brief Compute the logical bitwise AND of two fixed-point vectors. @@ -436,86 +652,110 @@ void arm_negate_q31(const q31_t *pSrc, q31_t *pDst, uint32_t blockSize); * @param[in] pSrcB points to input vector B * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_and_u16(const uint16_t *pSrcA, const uint16_t *pSrcB, uint16_t *pDst, uint32_t blockSize); + void arm_and_u16( + const uint16_t * pSrcA, + const uint16_t * pSrcB, + uint16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Compute the logical bitwise AND of two fixed-point vectors. * @param[in] pSrcA points to input vector A * @param[in] pSrcB points to input vector B * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_and_u32(const uint32_t *pSrcA, const uint32_t *pSrcB, uint32_t *pDst, uint32_t blockSize); + void arm_and_u32( + const uint32_t * pSrcA, + const uint32_t * pSrcB, + uint32_t * pDst, + uint32_t blockSize); -/** + /** * @brief Compute the logical bitwise AND of two fixed-point vectors. * @param[in] pSrcA points to input vector A * @param[in] pSrcB points to input vector B * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_and_u8(const uint8_t *pSrcA, const uint8_t *pSrcB, uint8_t *pDst, uint32_t blockSize); + void arm_and_u8( + const uint8_t * pSrcA, + const uint8_t * pSrcB, + uint8_t * pDst, + uint32_t blockSize); -/** + /** * @brief Compute the logical bitwise OR of two fixed-point vectors. * @param[in] pSrcA points to input vector A * @param[in] pSrcB points to input vector B * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_or_u16(const uint16_t *pSrcA, const uint16_t *pSrcB, uint16_t *pDst, uint32_t blockSize); + void arm_or_u16( + const uint16_t * pSrcA, + const uint16_t * pSrcB, + uint16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Compute the logical bitwise OR of two fixed-point vectors. * @param[in] pSrcA points to input vector A * @param[in] pSrcB points to input vector B * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_or_u32(const uint32_t *pSrcA, const uint32_t *pSrcB, uint32_t *pDst, uint32_t blockSize); + void arm_or_u32( + const uint32_t * pSrcA, + const uint32_t * pSrcB, + uint32_t * pDst, + uint32_t blockSize); -/** + /** * @brief Compute the logical bitwise OR of two fixed-point vectors. * @param[in] pSrcA points to input vector A * @param[in] pSrcB points to input vector B * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_or_u8(const uint8_t *pSrcA, const uint8_t *pSrcB, uint8_t *pDst, uint32_t blockSize); + void arm_or_u8( + const uint8_t * pSrcA, + const uint8_t * pSrcB, + uint8_t * pDst, + uint32_t blockSize); -/** + /** * @brief Compute the logical bitwise NOT of a fixed-point vector. * @param[in] pSrc points to input vector * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_not_u16(const uint16_t *pSrc, uint16_t *pDst, uint32_t blockSize); + void arm_not_u16( + const uint16_t * pSrc, + uint16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Compute the logical bitwise NOT of a fixed-point vector. * @param[in] pSrc points to input vector * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_not_u32(const uint32_t *pSrc, uint32_t *pDst, uint32_t blockSize); + void arm_not_u32( + const uint32_t * pSrc, + uint32_t * pDst, + uint32_t blockSize); -/** + /** * @brief Compute the logical bitwise NOT of a fixed-point vector. * @param[in] pSrc points to input vector * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_not_u8(const uint8_t *pSrc, uint8_t *pDst, uint32_t blockSize); + void arm_not_u8( + const uint8_t * pSrc, + uint8_t * pDst, + uint32_t blockSize); /** * @brief Compute the logical bitwise XOR of two fixed-point vectors. @@ -523,80 +763,101 @@ void arm_not_u8(const uint8_t *pSrc, uint8_t *pDst, uint32_t blockSize); * @param[in] pSrcB points to input vector B * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_xor_u16(const uint16_t *pSrcA, const uint16_t *pSrcB, uint16_t *pDst, uint32_t blockSize); + void arm_xor_u16( + const uint16_t * pSrcA, + const uint16_t * pSrcB, + uint16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Compute the logical bitwise XOR of two fixed-point vectors. * @param[in] pSrcA points to input vector A * @param[in] pSrcB points to input vector B * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_xor_u32(const uint32_t *pSrcA, const uint32_t *pSrcB, uint32_t *pDst, uint32_t blockSize); + void arm_xor_u32( + const uint32_t * pSrcA, + const uint32_t * pSrcB, + uint32_t * pDst, + uint32_t blockSize); -/** + /** * @brief Compute the logical bitwise XOR of two fixed-point vectors. * @param[in] pSrcA points to input vector A * @param[in] pSrcB points to input vector B * @param[out] pDst points to output vector * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_xor_u8(const uint8_t *pSrcA, const uint8_t *pSrcB, uint8_t *pDst, uint32_t blockSize); + void arm_xor_u8( + const uint8_t * pSrcA, + const uint8_t * pSrcB, + uint8_t * pDst, + uint32_t blockSize); -/** + /** @brief Elementwise floating-point clipping @param[in] pSrc points to input values @param[out] pDst points to output clipped values @param[in] low lower bound @param[in] high higher bound @param[in] numSamples number of samples to clip - @return none */ -void arm_clip_f32(const float32_t *pSrc, float32_t *pDst, float32_t low, float32_t high, - uint32_t numSamples); +void arm_clip_f32(const float32_t * pSrc, + float32_t * pDst, + float32_t low, + float32_t high, + uint32_t numSamples); -/** + /** @brief Elementwise fixed-point clipping @param[in] pSrc points to input values @param[out] pDst points to output clipped values @param[in] low lower bound @param[in] high higher bound @param[in] numSamples number of samples to clip - @return none */ -void arm_clip_q31(const q31_t *pSrc, q31_t *pDst, q31_t low, q31_t high, uint32_t numSamples); +void arm_clip_q31(const q31_t * pSrc, + q31_t * pDst, + q31_t low, + q31_t high, + uint32_t numSamples); -/** + /** @brief Elementwise fixed-point clipping @param[in] pSrc points to input values @param[out] pDst points to output clipped values @param[in] low lower bound @param[in] high higher bound @param[in] numSamples number of samples to clip - @return none */ -void arm_clip_q15(const q15_t *pSrc, q15_t *pDst, q15_t low, q15_t high, uint32_t numSamples); +void arm_clip_q15(const q15_t * pSrc, + q15_t * pDst, + q15_t low, + q15_t high, + uint32_t numSamples); -/** + /** @brief Elementwise fixed-point clipping @param[in] pSrc points to input values @param[out] pDst points to output clipped values @param[in] low lower bound @param[in] high higher bound @param[in] numSamples number of samples to clip - @return none */ -void arm_clip_q7(const q7_t *pSrc, q7_t *pDst, q7_t low, q7_t high, uint32_t numSamples); +void arm_clip_q7(const q7_t * pSrc, + q7_t * pDst, + q7_t low, + q7_t high, + uint32_t numSamples); + -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/basic_math_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/basic_math_functions_f16.h old mode 100644 new mode 100755 similarity index 74% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/basic_math_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/basic_math_functions_f16.h index 6b39dd98122..b3d5ecdc95a --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/basic_math_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/basic_math_functions_f16.h @@ -23,12 +23,9 @@ * limitations under the License. */ -#ifndef _BASIC_MATH_FUNCTIONS_F16_H_ -#define _BASIC_MATH_FUNCTIONS_F16_H_ - -#ifdef __cplusplus -extern "C" { -#endif + +#ifndef BASIC_MATH_FUNCTIONS_F16_H_ +#define BASIC_MATH_FUNCTIONS_F16_H_ #include "arm_math_types_f16.h" #include "arm_math_memory.h" @@ -36,98 +33,132 @@ extern "C" { #include "dsp/none.h" #include "dsp/utils.h" +#ifdef __cplusplus +extern "C" +{ +#endif + #if defined(ARM_FLOAT16_SUPPORTED) -/** + + /** * @brief Floating-point vector addition. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_add_f16(const float16_t *pSrcA, const float16_t *pSrcB, float16_t *pDst, - uint32_t blockSize); + void arm_add_f16( + const float16_t * pSrcA, + const float16_t * pSrcB, + float16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Floating-point vector subtraction. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_sub_f16(const float16_t *pSrcA, const float16_t *pSrcB, float16_t *pDst, - uint32_t blockSize); + void arm_sub_f16( + const float16_t * pSrcA, + const float16_t * pSrcB, + float16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Multiplies a floating-point vector by a scalar. * @param[in] pSrc points to the input vector * @param[in] scale scale factor to be applied * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_scale_f16(const float16_t *pSrc, float16_t scale, float16_t *pDst, uint32_t blockSize); + void arm_scale_f16( + const float16_t * pSrc, + float16_t scale, + float16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Floating-point vector absolute value. * @param[in] pSrc points to the input buffer * @param[out] pDst points to the output buffer * @param[in] blockSize number of samples in each vector */ -void arm_abs_f16(const float16_t *pSrc, float16_t *pDst, uint32_t blockSize); + void arm_abs_f16( + const float16_t * pSrc, + float16_t * pDst, + uint32_t blockSize); + -/** + /** * @brief Adds a constant offset to a floating-point vector. * @param[in] pSrc points to the input vector * @param[in] offset is the offset to be added * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_offset_f16(const float16_t *pSrc, float16_t offset, float16_t *pDst, uint32_t blockSize); + void arm_offset_f16( + const float16_t * pSrc, + float16_t offset, + float16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Dot product of floating-point vectors. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[in] blockSize number of samples in each vector * @param[out] result output result returned here */ -void arm_dot_prod_f16(const float16_t *pSrcA, const float16_t *pSrcB, uint32_t blockSize, - float16_t *result); + void arm_dot_prod_f16( + const float16_t * pSrcA, + const float16_t * pSrcB, + uint32_t blockSize, + float16_t * result); -/** + /** * @brief Floating-point vector multiplication. * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in each vector */ -void arm_mult_f16(const float16_t *pSrcA, const float16_t *pSrcB, float16_t *pDst, - uint32_t blockSize); + void arm_mult_f16( + const float16_t * pSrcA, + const float16_t * pSrcB, + float16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Negates the elements of a floating-point vector. * @param[in] pSrc points to the input vector * @param[out] pDst points to the output vector * @param[in] blockSize number of samples in the vector */ -void arm_negate_f16(const float16_t *pSrc, float16_t *pDst, uint32_t blockSize); + void arm_negate_f16( + const float16_t * pSrc, + float16_t * pDst, + uint32_t blockSize); -/** + /** @brief Elementwise floating-point clipping @param[in] pSrc points to input values @param[out] pDst points to output clipped values @param[in] low lower bound @param[in] high higher bound @param[in] numSamples number of samples to clip - @return none */ - -void arm_clip_f16(const float16_t *pSrc, float16_t *pDst, float16_t low, float16_t high, - uint32_t numSamples); +void arm_clip_f16(const float16_t * pSrc, + float16_t * pDst, + float16_t low, + float16_t high, + uint32_t numSamples); #endif /* defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/bayes_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/bayes_functions.h old mode 100644 new mode 100755 similarity index 75% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/bayes_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/bayes_functions.h index 91a1d5f3dad..7b3e0efacbb --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/bayes_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/bayes_functions.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _BAYES_FUNCTIONS_H_ -#define _BAYES_FUNCTIONS_H_ + +#ifndef BAYES_FUNCTIONS_H_ +#define BAYES_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -45,20 +46,22 @@ * DSP/Testing/PatternGeneration/Bayes.py */ -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif /** * @brief Instance structure for Naive Gaussian Bayesian estimator. */ -typedef struct { - uint32_t vectorDimension; /**< Dimension of vector space */ - uint32_t numberOfClasses; /**< Number of different classes */ - const float32_t *theta; /**< Mean values for the Gaussians */ - const float32_t *sigma; /**< Variances for the Gaussians */ - const float32_t *classPriors; /**< Class prior probabilities */ - float32_t epsilon; /**< Additive value to variances */ +typedef struct +{ + uint32_t vectorDimension; /**< Dimension of vector space */ + uint32_t numberOfClasses; /**< Number of different classes */ + const float32_t *theta; /**< Mean values for the Gaussians */ + const float32_t *sigma; /**< Variances for the Gaussians */ + const float32_t *classPriors; /**< Class prior probabilities */ + float32_t epsilon; /**< Additive value to variances */ } arm_gaussian_naive_bayes_instance_f32; /** @@ -69,14 +72,14 @@ typedef struct { * @param[out] *pOutputProbabilities points to a buffer of length numberOfClasses containing estimated probabilities * @param[out] *pBufferB points to a temporary buffer of length numberOfClasses * @return The predicted class - * */ +uint32_t arm_gaussian_naive_bayes_predict_f32(const arm_gaussian_naive_bayes_instance_f32 *S, + const float32_t * in, + float32_t *pOutputProbabilities, + float32_t *pBufferB); -uint32_t arm_gaussian_naive_bayes_predict_f32(const arm_gaussian_naive_bayes_instance_f32 *S, - const float32_t *in, float32_t *pOutputProbabilities, - float32_t *pBufferB); -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/bayes_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/bayes_functions_f16.h old mode 100644 new mode 100755 similarity index 73% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/bayes_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/bayes_functions_f16.h index f8131e13d5e..100162ed465 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/bayes_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/bayes_functions_f16.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _BAYES_FUNCTIONS_F16_H_ -#define _BAYES_FUNCTIONS_F16_H_ + +#ifndef BAYES_FUNCTIONS_F16_H_ +#define BAYES_FUNCTIONS_F16_H_ #include "arm_math_types_f16.h" #include "arm_math_memory.h" @@ -34,8 +35,9 @@ #include "dsp/statistics_functions_f16.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) @@ -43,13 +45,14 @@ extern "C" { /** * @brief Instance structure for Naive Gaussian Bayesian estimator. */ -typedef struct { - uint32_t vectorDimension; /**< Dimension of vector space */ - uint32_t numberOfClasses; /**< Number of different classes */ - const float16_t *theta; /**< Mean values for the Gaussians */ - const float16_t *sigma; /**< Variances for the Gaussians */ - const float16_t *classPriors; /**< Class prior probabilities */ - float16_t epsilon; /**< Additive value to variances */ +typedef struct +{ + uint32_t vectorDimension; /**< Dimension of vector space */ + uint32_t numberOfClasses; /**< Number of different classes */ + const float16_t *theta; /**< Mean values for the Gaussians */ + const float16_t *sigma; /**< Variances for the Gaussians */ + const float16_t *classPriors; /**< Class prior probabilities */ + float16_t epsilon; /**< Additive value to variances */ } arm_gaussian_naive_bayes_instance_f16; /** @@ -60,15 +63,14 @@ typedef struct { * @param[out] *pOutputProbabilities points to a buffer of length numberOfClasses containing estimated probabilities * @param[out] *pBufferB points to a temporary buffer of length numberOfClasses * @return The predicted class - * */ - -uint32_t arm_gaussian_naive_bayes_predict_f16(const arm_gaussian_naive_bayes_instance_f16 *S, - const float16_t *in, float16_t *pOutputProbabilities, - float16_t *pBufferB); +uint32_t arm_gaussian_naive_bayes_predict_f16(const arm_gaussian_naive_bayes_instance_f16 *S, + const float16_t * in, + float16_t *pOutputProbabilities, + float16_t *pBufferB); #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/complex_math_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/complex_math_functions.h old mode 100644 new mode 100755 similarity index 72% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/complex_math_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/complex_math_functions.h index 65f09b0489f..bdbc2a4ed49 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/complex_math_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/complex_math_functions.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _COMPLEX_MATH_FUNCTIONS_H_ -#define _COMPLEX_MATH_FUNCTIONS_H_ + +#ifndef COMPLEX_MATH_FUNCTIONS_H_ +#define COMPLEX_MATH_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -33,8 +34,9 @@ #include "dsp/utils.h" #include "dsp/fast_math_functions.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif /** @@ -47,61 +49,88 @@ extern "C" { * real values. */ -/** + /** * @brief Floating-point complex conjugate. * @param[in] pSrc points to the input vector * @param[out] pDst points to the output vector * @param[in] numSamples number of complex samples in each vector */ -void arm_cmplx_conj_f32(const float32_t *pSrc, float32_t *pDst, uint32_t numSamples); + void arm_cmplx_conj_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); -/** + /** * @brief Q31 complex conjugate. * @param[in] pSrc points to the input vector * @param[out] pDst points to the output vector * @param[in] numSamples number of complex samples in each vector */ -void arm_cmplx_conj_q31(const q31_t *pSrc, q31_t *pDst, uint32_t numSamples); + void arm_cmplx_conj_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); -/** + + /** * @brief Q15 complex conjugate. * @param[in] pSrc points to the input vector * @param[out] pDst points to the output vector * @param[in] numSamples number of complex samples in each vector */ -void arm_cmplx_conj_q15(const q15_t *pSrc, q15_t *pDst, uint32_t numSamples); + void arm_cmplx_conj_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); -/** + + /** * @brief Floating-point complex magnitude squared * @param[in] pSrc points to the complex input vector * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_squared_f32(const float32_t *pSrc, float32_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_squared_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); -/** + + /** * @brief Floating-point complex magnitude squared * @param[in] pSrc points to the complex input vector * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_squared_f64(const float64_t *pSrc, float64_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_squared_f64( + const float64_t * pSrc, + float64_t * pDst, + uint32_t numSamples); -/** + + /** * @brief Q31 complex magnitude squared * @param[in] pSrc points to the complex input vector * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_squared_q31(const q31_t *pSrc, q31_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_squared_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); -/** + + /** * @brief Q15 complex magnitude squared * @param[in] pSrc points to the complex input vector * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_squared_q15(const q15_t *pSrc, q15_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_squared_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); + /** * @brief Floating-point complex magnitude @@ -109,7 +138,11 @@ void arm_cmplx_mag_squared_q15(const q15_t *pSrc, q15_t *pDst, uint32_t numSampl * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_f32(const float32_t *pSrc, float32_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t numSamples); + /** * @brief Floating-point complex magnitude @@ -117,33 +150,48 @@ void arm_cmplx_mag_f32(const float32_t *pSrc, float32_t *pDst, uint32_t numSampl * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_f64(const float64_t *pSrc, float64_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_f64( + const float64_t * pSrc, + float64_t * pDst, + uint32_t numSamples); -/** + + /** * @brief Q31 complex magnitude * @param[in] pSrc points to the complex input vector * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_q31(const q31_t *pSrc, q31_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t numSamples); -/** + + /** * @brief Q15 complex magnitude * @param[in] pSrc points to the complex input vector * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_q15(const q15_t *pSrc, q15_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); -/** + /** * @brief Q15 complex magnitude * @param[in] pSrc points to the complex input vector * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_fast_q15(const q15_t *pSrc, q15_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_fast_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t numSamples); -/** + + /** * @brief Q15 complex dot product * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector @@ -151,10 +199,15 @@ void arm_cmplx_mag_fast_q15(const q15_t *pSrc, q15_t *pDst, uint32_t numSamples) * @param[out] realResult real part of the result returned here * @param[out] imagResult imaginary part of the result returned here */ -void arm_cmplx_dot_prod_q15(const q15_t *pSrcA, const q15_t *pSrcB, uint32_t numSamples, - q31_t *realResult, q31_t *imagResult); + void arm_cmplx_dot_prod_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + uint32_t numSamples, + q31_t * realResult, + q31_t * imagResult); -/** + + /** * @brief Q31 complex dot product * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector @@ -162,10 +215,15 @@ void arm_cmplx_dot_prod_q15(const q15_t *pSrcA, const q15_t *pSrcB, uint32_t num * @param[out] realResult real part of the result returned here * @param[out] imagResult imaginary part of the result returned here */ -void arm_cmplx_dot_prod_q31(const q31_t *pSrcA, const q31_t *pSrcB, uint32_t numSamples, - q63_t *realResult, q63_t *imagResult); + void arm_cmplx_dot_prod_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + uint32_t numSamples, + q63_t * realResult, + q63_t * imagResult); -/** + + /** * @brief Floating-point complex dot product * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector @@ -173,68 +231,97 @@ void arm_cmplx_dot_prod_q31(const q31_t *pSrcA, const q31_t *pSrcB, uint32_t num * @param[out] realResult real part of the result returned here * @param[out] imagResult imaginary part of the result returned here */ -void arm_cmplx_dot_prod_f32(const float32_t *pSrcA, const float32_t *pSrcB, uint32_t numSamples, - float32_t *realResult, float32_t *imagResult); + void arm_cmplx_dot_prod_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + uint32_t numSamples, + float32_t * realResult, + float32_t * imagResult); -/** + + /** * @brief Q15 complex-by-real multiplication * @param[in] pSrcCmplx points to the complex input vector * @param[in] pSrcReal points to the real input vector * @param[out] pCmplxDst points to the complex output vector * @param[in] numSamples number of samples in each vector */ -void arm_cmplx_mult_real_q15(const q15_t *pSrcCmplx, const q15_t *pSrcReal, q15_t *pCmplxDst, - uint32_t numSamples); + void arm_cmplx_mult_real_q15( + const q15_t * pSrcCmplx, + const q15_t * pSrcReal, + q15_t * pCmplxDst, + uint32_t numSamples); -/** + + /** * @brief Q31 complex-by-real multiplication * @param[in] pSrcCmplx points to the complex input vector * @param[in] pSrcReal points to the real input vector * @param[out] pCmplxDst points to the complex output vector * @param[in] numSamples number of samples in each vector */ -void arm_cmplx_mult_real_q31(const q31_t *pSrcCmplx, const q31_t *pSrcReal, q31_t *pCmplxDst, - uint32_t numSamples); + void arm_cmplx_mult_real_q31( + const q31_t * pSrcCmplx, + const q31_t * pSrcReal, + q31_t * pCmplxDst, + uint32_t numSamples); -/** + + /** * @brief Floating-point complex-by-real multiplication * @param[in] pSrcCmplx points to the complex input vector * @param[in] pSrcReal points to the real input vector * @param[out] pCmplxDst points to the complex output vector * @param[in] numSamples number of samples in each vector */ -void arm_cmplx_mult_real_f32(const float32_t *pSrcCmplx, const float32_t *pSrcReal, - float32_t *pCmplxDst, uint32_t numSamples); + void arm_cmplx_mult_real_f32( + const float32_t * pSrcCmplx, + const float32_t * pSrcReal, + float32_t * pCmplxDst, + uint32_t numSamples); -/** + /** * @brief Q15 complex-by-complex multiplication * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] numSamples number of complex samples in each vector */ -void arm_cmplx_mult_cmplx_q15(const q15_t *pSrcA, const q15_t *pSrcB, q15_t *pDst, - uint32_t numSamples); + void arm_cmplx_mult_cmplx_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + q15_t * pDst, + uint32_t numSamples); -/** + + /** * @brief Q31 complex-by-complex multiplication * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] numSamples number of complex samples in each vector */ -void arm_cmplx_mult_cmplx_q31(const q31_t *pSrcA, const q31_t *pSrcB, q31_t *pDst, - uint32_t numSamples); + void arm_cmplx_mult_cmplx_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + q31_t * pDst, + uint32_t numSamples); -/** + + /** * @brief Floating-point complex-by-complex multiplication * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] numSamples number of complex samples in each vector */ -void arm_cmplx_mult_cmplx_f32(const float32_t *pSrcA, const float32_t *pSrcB, float32_t *pDst, - uint32_t numSamples); + void arm_cmplx_mult_cmplx_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + float32_t * pDst, + uint32_t numSamples); + + /** * @brief Floating-point complex-by-complex multiplication @@ -243,10 +330,15 @@ void arm_cmplx_mult_cmplx_f32(const float32_t *pSrcA, const float32_t *pSrcB, fl * @param[out] pDst points to the output vector * @param[in] numSamples number of complex samples in each vector */ -void arm_cmplx_mult_cmplx_f64(const float64_t *pSrcA, const float64_t *pSrcB, float64_t *pDst, - uint32_t numSamples); +void arm_cmplx_mult_cmplx_f64( +const float64_t * pSrcA, +const float64_t * pSrcB, + float64_t * pDst, + uint32_t numSamples); + + -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/complex_math_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/complex_math_functions_f16.h old mode 100644 new mode 100755 similarity index 76% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/complex_math_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/complex_math_functions_f16.h index 98f512b3a3b..bd147325f97 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/complex_math_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/complex_math_functions_f16.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _COMPLEX_MATH_FUNCTIONS_F16_H_ -#define _COMPLEX_MATH_FUNCTIONS_F16_H_ + +#ifndef COMPLEX_MATH_FUNCTIONS_F16_H_ +#define COMPLEX_MATH_FUNCTIONS_F16_H_ #include "arm_math_types_f16.h" #include "arm_math_memory.h" @@ -33,37 +34,47 @@ #include "dsp/utils.h" #include "dsp/fast_math_functions_f16.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) -/** + /** * @brief Floating-point complex conjugate. * @param[in] pSrc points to the input vector * @param[out] pDst points to the output vector * @param[in] numSamples number of complex samples in each vector */ -void arm_cmplx_conj_f16(const float16_t *pSrc, float16_t *pDst, uint32_t numSamples); + void arm_cmplx_conj_f16( + const float16_t * pSrc, + float16_t * pDst, + uint32_t numSamples); -/** + /** * @brief Floating-point complex magnitude squared * @param[in] pSrc points to the complex input vector * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_squared_f16(const float16_t *pSrc, float16_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_squared_f16( + const float16_t * pSrc, + float16_t * pDst, + uint32_t numSamples); -/** + /** * @brief Floating-point complex magnitude * @param[in] pSrc points to the complex input vector * @param[out] pDst points to the real output vector * @param[in] numSamples number of complex samples in the input vector */ -void arm_cmplx_mag_f16(const float16_t *pSrc, float16_t *pDst, uint32_t numSamples); + void arm_cmplx_mag_f16( + const float16_t * pSrc, + float16_t * pDst, + uint32_t numSamples); -/** + /** * @brief Floating-point complex dot product * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector @@ -71,31 +82,41 @@ void arm_cmplx_mag_f16(const float16_t *pSrc, float16_t *pDst, uint32_t numSampl * @param[out] realResult real part of the result returned here * @param[out] imagResult imaginary part of the result returned here */ -void arm_cmplx_dot_prod_f16(const float16_t *pSrcA, const float16_t *pSrcB, uint32_t numSamples, - float16_t *realResult, float16_t *imagResult); + void arm_cmplx_dot_prod_f16( + const float16_t * pSrcA, + const float16_t * pSrcB, + uint32_t numSamples, + float16_t * realResult, + float16_t * imagResult); -/** + /** * @brief Floating-point complex-by-real multiplication * @param[in] pSrcCmplx points to the complex input vector * @param[in] pSrcReal points to the real input vector * @param[out] pCmplxDst points to the complex output vector * @param[in] numSamples number of samples in each vector */ -void arm_cmplx_mult_real_f16(const float16_t *pSrcCmplx, const float16_t *pSrcReal, - float16_t *pCmplxDst, uint32_t numSamples); + void arm_cmplx_mult_real_f16( + const float16_t * pSrcCmplx, + const float16_t * pSrcReal, + float16_t * pCmplxDst, + uint32_t numSamples); -/** + /** * @brief Floating-point complex-by-complex multiplication * @param[in] pSrcA points to the first input vector * @param[in] pSrcB points to the second input vector * @param[out] pDst points to the output vector * @param[in] numSamples number of complex samples in each vector */ -void arm_cmplx_mult_cmplx_f16(const float16_t *pSrcA, const float16_t *pSrcB, float16_t *pDst, - uint32_t numSamples); + void arm_cmplx_mult_cmplx_f16( + const float16_t * pSrcA, + const float16_t * pSrcB, + float16_t * pDst, + uint32_t numSamples); #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/controller_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/controller_functions.h old mode 100644 new mode 100755 similarity index 73% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/controller_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/controller_functions.h index a892b9ba8f4..5d5de98ea58 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/controller_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/controller_functions.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _CONTROLLER_FUNCTIONS_H_ -#define _CONTROLLER_FUNCTIONS_H_ + +#ifndef CONTROLLER_FUNCTIONS_H_ +#define CONTROLLER_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -32,56 +33,82 @@ #include "dsp/none.h" #include "dsp/utils.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif -/** + /** * @brief Macros required for SINE and COSINE Controller functions */ -#define CONTROLLER_Q31_SHIFT (32 - 9) -/* 1.31(q31) Fixed value of 2/360 */ -/* -1 to +1 is divided into 360 values so total spacing is (2/360) */ -#define INPUT_SPACING 0xB60B61 - +#define CONTROLLER_Q31_SHIFT (32 - 9) + /* 1.31(q31) Fixed value of 2/360 */ + /* -1 to +1 is divided into 360 values so total spacing is (2/360) */ +#define INPUT_SPACING 0xB60B61 + /** * @defgroup groupController Controller Functions */ + /** - * @ingroup groupController - */ + @ingroup groupController + */ /** - * @addtogroup SinCos - * @{ - */ + @defgroup SinCos Sine Cosine + + Computes the trigonometric sine and cosine values using a combination of table lookup + and linear interpolation. + There are separate functions for Q31 and floating-point data types. + The input to the floating-point version is in degrees while the + fixed-point Q31 have a scaled input with the range + [-1 0.9999] mapping to [-180 +180] degrees. + + The floating point function also allows values that are out of the usual range. When this happens, the function will + take extra time to adjust the input value to the range of [-180 180]. + + The result is accurate to 5 digits after the decimal point. + The implementation is based on table lookup using 360 values together with linear interpolation. + The steps used are: + -# Calculation of the nearest integer table index. + -# Compute the fractional portion (fract) of the input. + -# Fetch the value corresponding to \c index from sine table to \c y0 and also value from \c index+1 to \c y1. + -# Sine value is computed as *psinVal = y0 + (fract * (y1 - y0)). + -# Fetch the value corresponding to \c index from cosine table to \c y0 and also value from \c index+1 to \c y1. + -# Cosine value is computed as *pcosVal = y0 + (fract * (y1 - y0)). + */ + /** * @brief Floating-point sin_cos function. * @param[in] theta input value in degrees * @param[out] pSinVal points to the processed sine output. * @param[out] pCosVal points to the processed cos output. */ -void arm_sin_cos_f32(float32_t theta, float32_t *pSinVal, float32_t *pCosVal); + void arm_sin_cos_f32( + float32_t theta, + float32_t * pSinVal, + float32_t * pCosVal); -/** + + /** * @brief Q31 sin_cos function. * @param[in] theta scaled input value in degrees * @param[out] pSinVal points to the processed sine output. * @param[out] pCosVal points to the processed cosine output. */ -void arm_sin_cos_q31(q31_t theta, q31_t *pSinVal, q31_t *pCosVal); + void arm_sin_cos_q31( + q31_t theta, + q31_t * pSinVal, + q31_t * pCosVal); -/** - * @} end of SinCos group - */ /** - * @ingroup groupController - */ - + @ingroup groupController + */ + /** * @defgroup PID PID Motor Control * @@ -140,106 +167,132 @@ void arm_sin_cos_q31(q31_t theta, q31_t *pSinVal, q31_t *pCosVal); * Refer to the function specific documentation below for usage guidelines. */ -/** + + /** + * @ingroup PID * @brief Instance structure for the Q15 PID Control. */ -typedef struct { - q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ -#if !defined(ARM_MATH_DSP) - q15_t A1; /**< The derived gain A1 = -Kp - 2Kd */ - q15_t A2; /**< The derived gain A1 = Kd. */ + typedef struct + { + q15_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ +#if !defined (ARM_MATH_DSP) + q15_t A1; /**< The derived gain A1 = -Kp - 2Kd */ + q15_t A2; /**< The derived gain A1 = Kd. */ #else - q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/ + q31_t A1; /**< The derived gain A1 = -Kp - 2Kd | Kd.*/ #endif - q15_t state[3]; /**< The state array of length 3. */ - q15_t Kp; /**< The proportional gain. */ - q15_t Ki; /**< The integral gain. */ - q15_t Kd; /**< The derivative gain. */ -} arm_pid_instance_q15; - -/** + q15_t state[3]; /**< The state array of length 3. */ + q15_t Kp; /**< The proportional gain. */ + q15_t Ki; /**< The integral gain. */ + q15_t Kd; /**< The derivative gain. */ + } arm_pid_instance_q15; + + /** + * @ingroup PID * @brief Instance structure for the Q31 PID Control. */ -typedef struct { - q31_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ - q31_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ - q31_t A2; /**< The derived gain, A2 = Kd . */ - q31_t state[3]; /**< The state array of length 3. */ - q31_t Kp; /**< The proportional gain. */ - q31_t Ki; /**< The integral gain. */ - q31_t Kd; /**< The derivative gain. */ -} arm_pid_instance_q31; - -/** + typedef struct + { + q31_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + q31_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ + q31_t A2; /**< The derived gain, A2 = Kd . */ + q31_t state[3]; /**< The state array of length 3. */ + q31_t Kp; /**< The proportional gain. */ + q31_t Ki; /**< The integral gain. */ + q31_t Kd; /**< The derivative gain. */ + } arm_pid_instance_q31; + + /** + * @ingroup PID * @brief Instance structure for the floating-point PID Control. */ -typedef struct { - float32_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ - float32_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ - float32_t A2; /**< The derived gain, A2 = Kd . */ - float32_t state[3]; /**< The state array of length 3. */ - float32_t Kp; /**< The proportional gain. */ - float32_t Ki; /**< The integral gain. */ - float32_t Kd; /**< The derivative gain. */ -} arm_pid_instance_f32; + typedef struct + { + float32_t A0; /**< The derived gain, A0 = Kp + Ki + Kd . */ + float32_t A1; /**< The derived gain, A1 = -Kp - 2Kd. */ + float32_t A2; /**< The derived gain, A2 = Kd . */ + float32_t state[3]; /**< The state array of length 3. */ + float32_t Kp; /**< The proportional gain. */ + float32_t Ki; /**< The integral gain. */ + float32_t Kd; /**< The derivative gain. */ + } arm_pid_instance_f32; -/** + + + /** * @brief Initialization function for the floating-point PID Control. * @param[in,out] S points to an instance of the PID structure. * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. */ -void arm_pid_init_f32(arm_pid_instance_f32 *S, int32_t resetStateFlag); + void arm_pid_init_f32( + arm_pid_instance_f32 * S, + int32_t resetStateFlag); -/** + + /** * @brief Reset function for the floating-point PID Control. * @param[in,out] S is an instance of the floating-point PID Control structure */ -void arm_pid_reset_f32(arm_pid_instance_f32 *S); + void arm_pid_reset_f32( + arm_pid_instance_f32 * S); -/** + + /** * @brief Initialization function for the Q31 PID Control. * @param[in,out] S points to an instance of the Q15 PID structure. * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. */ -void arm_pid_init_q31(arm_pid_instance_q31 *S, int32_t resetStateFlag); + void arm_pid_init_q31( + arm_pid_instance_q31 * S, + int32_t resetStateFlag); -/** + + /** * @brief Reset function for the Q31 PID Control. * @param[in,out] S points to an instance of the Q31 PID Control structure */ -void arm_pid_reset_q31(arm_pid_instance_q31 *S); + void arm_pid_reset_q31( + arm_pid_instance_q31 * S); -/** + + /** * @brief Initialization function for the Q15 PID Control. * @param[in,out] S points to an instance of the Q15 PID structure. * @param[in] resetStateFlag flag to reset the state. 0 = no change in state 1 = reset the state. */ -void arm_pid_init_q15(arm_pid_instance_q15 *S, int32_t resetStateFlag); + void arm_pid_init_q15( + arm_pid_instance_q15 * S, + int32_t resetStateFlag); -/** + + /** * @brief Reset function for the Q15 PID Control. * @param[in,out] S points to an instance of the q15 PID Control structure */ -void arm_pid_reset_q15(arm_pid_instance_q15 *S); + void arm_pid_reset_q15( + arm_pid_instance_q15 * S); -/** - * @addtogroup PID - * @{ - */ -/** + + + + /** + * @ingroup PID * @brief Process function for the floating-point PID Control. * @param[in,out] S is an instance of the floating-point PID Control structure * @param[in] in input sample to process * @return processed output sample. */ -__STATIC_FORCEINLINE float32_t arm_pid_f32(arm_pid_instance_f32 *S, float32_t in) -{ + __STATIC_FORCEINLINE float32_t arm_pid_f32( + arm_pid_instance_f32 * S, + float32_t in) + { float32_t out; /* y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2] */ - out = (S->A0 * in) + (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]); + out = (S->A0 * in) + + (S->A1 * S->state[0]) + (S->A2 * S->state[1]) + (S->state[2]); /* Update state */ S->state[1] = S->state[0]; @@ -248,9 +301,11 @@ __STATIC_FORCEINLINE float32_t arm_pid_f32(arm_pid_instance_f32 *S, float32_t in /* return to application */ return (out); -} + + } /** + @ingroup PID @brief Process function for the Q31 PID Control. @param[in,out] S points to an instance of the Q31 PID Control structure @param[in] in input sample to process @@ -263,22 +318,24 @@ __STATIC_FORCEINLINE float32_t arm_pid_f32(arm_pid_instance_f32 *S, float32_t in In order to avoid overflows completely the input signal must be scaled down by 2 bits as there are four additions. After all multiply-accumulates are performed, the 2.62 accumulator is truncated to 1.32 format and then saturated to 1.31 format. */ -__STATIC_FORCEINLINE q31_t arm_pid_q31(arm_pid_instance_q31 *S, q31_t in) -{ +__STATIC_FORCEINLINE q31_t arm_pid_q31( + arm_pid_instance_q31 * S, + q31_t in) + { q63_t acc; q31_t out; /* acc = A0 * x[n] */ - acc = (q63_t)S->A0 * in; + acc = (q63_t) S->A0 * in; /* acc += A1 * x[n-1] */ - acc += (q63_t)S->A1 * S->state[0]; + acc += (q63_t) S->A1 * S->state[0]; /* acc += A2 * x[n-2] */ - acc += (q63_t)S->A2 * S->state[1]; + acc += (q63_t) S->A2 * S->state[1]; /* convert output to 1.31 format to add y[n-1] */ - out = (q31_t)(acc >> 31U); + out = (q31_t) (acc >> 31U); /* out += y[n-1] */ out += S->state[2]; @@ -290,9 +347,11 @@ __STATIC_FORCEINLINE q31_t arm_pid_q31(arm_pid_instance_q31 *S, q31_t in) /* return to application */ return (out); -} + } + /** + @ingroup PID @brief Process function for the Q15 PID Control. @param[in,out] S points to an instance of the Q15 PID Control structure @param[in] in input sample to process @@ -306,33 +365,35 @@ __STATIC_FORCEINLINE q31_t arm_pid_q31(arm_pid_instance_q31 *S, q31_t in) After all additions have been performed, the accumulator is truncated to 34.15 format by discarding low 15 bits. Lastly, the accumulator is saturated to yield a result in 1.15 format. */ -__STATIC_FORCEINLINE q15_t arm_pid_q15(arm_pid_instance_q15 *S, q15_t in) -{ +__STATIC_FORCEINLINE q15_t arm_pid_q15( + arm_pid_instance_q15 * S, + q15_t in) + { q63_t acc; q15_t out; -#if defined(ARM_MATH_DSP) +#if defined (ARM_MATH_DSP) /* Implementation of PID controller */ /* acc = A0 * x[n] */ - acc = (q31_t)__SMUAD((uint32_t)S->A0, (uint32_t)in); + acc = (q31_t) __SMUAD((uint32_t)S->A0, (uint32_t)in); /* acc += A1 * x[n-1] + A2 * x[n-2] */ - acc = (q63_t)__SMLALD((uint32_t)S->A1, (uint32_t)read_q15x2(S->state), (uint64_t)acc); + acc = (q63_t)__SMLALD((uint32_t)S->A1, (uint32_t)read_q15x2 (S->state), (uint64_t)acc); #else /* acc = A0 * x[n] */ - acc = ((q31_t)S->A0) * in; + acc = ((q31_t) S->A0) * in; /* acc += A1 * x[n-1] + A2 * x[n-2] */ - acc += (q31_t)S->A1 * S->state[0]; - acc += (q31_t)S->A2 * S->state[1]; + acc += (q31_t) S->A1 * S->state[0]; + acc += (q31_t) S->A2 * S->state[1]; #endif /* acc += y[n-1] */ - acc += (q31_t)S->state[2] << 15; + acc += (q31_t) S->state[2] << 15; /* saturate the output */ - out = (q15_t)(__SSAT((q31_t)(acc >> 15), 16)); + out = (q15_t) (__SSAT((q31_t)(acc >> 15), 16)); /* Update state */ S->state[1] = S->state[0]; @@ -341,17 +402,15 @@ __STATIC_FORCEINLINE q15_t arm_pid_q15(arm_pid_instance_q15 *S, q15_t in) /* return to application */ return (out); -} + } -/** - * @} end of PID group - */ -/** + + /** * @ingroup groupController */ -/** + /** * @defgroup park Vector Park Transform * * Forward Park transform converts the input two-coordinate vector to flux and torque components. @@ -375,12 +434,10 @@ __STATIC_FORCEINLINE q15_t arm_pid_q15(arm_pid_instance_q15 *S, q15_t in) * Refer to the function specific documentation below for usage guidelines. */ -/** - * @addtogroup park - * @{ - */ + -/** + /** + * @ingroup park * @brief Floating-point Park transform * @param[in] Ialpha input two-phase vector coordinate alpha * @param[in] Ibeta input two-phase vector coordinate beta @@ -388,22 +445,28 @@ __STATIC_FORCEINLINE q15_t arm_pid_q15(arm_pid_instance_q15 *S, q15_t in) * @param[out] pIq points to output rotor reference frame q * @param[in] sinVal sine value of rotation angle theta * @param[in] cosVal cosine value of rotation angle theta - * @return none * * The function implements the forward Park transform. * */ -__STATIC_FORCEINLINE void arm_park_f32(float32_t Ialpha, float32_t Ibeta, float32_t *pId, - float32_t *pIq, float32_t sinVal, float32_t cosVal) -{ + __STATIC_FORCEINLINE void arm_park_f32( + float32_t Ialpha, + float32_t Ibeta, + float32_t * pId, + float32_t * pIq, + float32_t sinVal, + float32_t cosVal) + { /* Calculate pId using the equation, pId = Ialpha * cosVal + Ibeta * sinVal */ *pId = Ialpha * cosVal + Ibeta * sinVal; /* Calculate pIq using the equation, pIq = - Ialpha * sinVal + Ibeta * cosVal */ *pIq = -Ialpha * sinVal + Ibeta * cosVal; -} + } + /** + @ingroup park @brief Park transform for Q31 version @param[in] Ialpha input two-phase vector coordinate alpha @param[in] Ibeta input two-phase vector coordinate beta @@ -411,47 +474,50 @@ __STATIC_FORCEINLINE void arm_park_f32(float32_t Ialpha, float32_t Ibeta, float3 @param[out] pIq points to output rotor reference frame q @param[in] sinVal sine value of rotation angle theta @param[in] cosVal cosine value of rotation angle theta - @return none \par Scaling and Overflow Behavior The function is implemented using an internal 32-bit accumulator. The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. There is saturation on the addition and subtraction, hence there is no risk of overflow. */ -__STATIC_FORCEINLINE void arm_park_q31(q31_t Ialpha, q31_t Ibeta, q31_t *pId, q31_t *pIq, - q31_t sinVal, q31_t cosVal) -{ - q31_t product1, product2; /* Temporary variables used to store intermediate results */ - q31_t product3, product4; /* Temporary variables used to store intermediate results */ +__STATIC_FORCEINLINE void arm_park_q31( + q31_t Ialpha, + q31_t Ibeta, + q31_t * pId, + q31_t * pIq, + q31_t sinVal, + q31_t cosVal) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + q31_t product3, product4; /* Temporary variables used to store intermediate results */ /* Intermediate product is calculated by (Ialpha * cosVal) */ - product1 = (q31_t)(((q63_t)(Ialpha) * (cosVal)) >> 31); + product1 = (q31_t) (((q63_t) (Ialpha) * (cosVal)) >> 31); /* Intermediate product is calculated by (Ibeta * sinVal) */ - product2 = (q31_t)(((q63_t)(Ibeta) * (sinVal)) >> 31); + product2 = (q31_t) (((q63_t) (Ibeta) * (sinVal)) >> 31); + /* Intermediate product is calculated by (Ialpha * sinVal) */ - product3 = (q31_t)(((q63_t)(Ialpha) * (sinVal)) >> 31); + product3 = (q31_t) (((q63_t) (Ialpha) * (sinVal)) >> 31); /* Intermediate product is calculated by (Ibeta * cosVal) */ - product4 = (q31_t)(((q63_t)(Ibeta) * (cosVal)) >> 31); + product4 = (q31_t) (((q63_t) (Ibeta) * (cosVal)) >> 31); /* Calculate pId by adding the two intermediate products 1 and 2 */ *pId = __QADD(product1, product2); /* Calculate pIq by subtracting the two intermediate products 3 from 4 */ *pIq = __QSUB(product4, product3); -} + } -/** - * @} end of park group - */ -/** + + /** * @ingroup groupController */ -/** + /** * @defgroup inv_park Vector Inverse Park transform * Inverse Park transform converts the input flux and torque components to two-coordinate vector. * @@ -468,12 +534,10 @@ __STATIC_FORCEINLINE void arm_park_q31(q31_t Ialpha, q31_t Ibeta, q31_t *pId, q3 * Refer to the function specific documentation below for usage guidelines. */ -/** - * @addtogroup inv_park - * @{ - */ + -/** + /** + * @ingroup inv_park * @brief Floating-point Inverse Park transform * @param[in] Id input coordinate of rotor reference frame d * @param[in] Iq input coordinate of rotor reference frame q @@ -481,19 +545,25 @@ __STATIC_FORCEINLINE void arm_park_q31(q31_t Ialpha, q31_t Ibeta, q31_t *pId, q3 * @param[out] pIbeta points to output two-phase orthogonal vector axis beta * @param[in] sinVal sine value of rotation angle theta * @param[in] cosVal cosine value of rotation angle theta - * @return none */ -__STATIC_FORCEINLINE void arm_inv_park_f32(float32_t Id, float32_t Iq, float32_t *pIalpha, - float32_t *pIbeta, float32_t sinVal, float32_t cosVal) -{ + __STATIC_FORCEINLINE void arm_inv_park_f32( + float32_t Id, + float32_t Iq, + float32_t * pIalpha, + float32_t * pIbeta, + float32_t sinVal, + float32_t cosVal) + { /* Calculate pIalpha using the equation, pIalpha = Id * cosVal - Iq * sinVal */ *pIalpha = Id * cosVal - Iq * sinVal; /* Calculate pIbeta using the equation, pIbeta = Id * sinVal + Iq * cosVal */ *pIbeta = Id * sinVal + Iq * cosVal; -} + } + /** + @ingroup inv_park @brief Inverse Park transform for Q31 version @param[in] Id input coordinate of rotor reference frame d @param[in] Iq input coordinate of rotor reference frame q @@ -501,47 +571,49 @@ __STATIC_FORCEINLINE void arm_inv_park_f32(float32_t Id, float32_t Iq, float32_t @param[out] pIbeta points to output two-phase orthogonal vector axis beta @param[in] sinVal sine value of rotation angle theta @param[in] cosVal cosine value of rotation angle theta - @return none @par Scaling and Overflow Behavior The function is implemented using an internal 32-bit accumulator. The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. There is saturation on the addition, hence there is no risk of overflow. */ -__STATIC_FORCEINLINE void arm_inv_park_q31(q31_t Id, q31_t Iq, q31_t *pIalpha, q31_t *pIbeta, - q31_t sinVal, q31_t cosVal) -{ - q31_t product1, product2; /* Temporary variables used to store intermediate results */ - q31_t product3, product4; /* Temporary variables used to store intermediate results */ +__STATIC_FORCEINLINE void arm_inv_park_q31( + q31_t Id, + q31_t Iq, + q31_t * pIalpha, + q31_t * pIbeta, + q31_t sinVal, + q31_t cosVal) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ + q31_t product3, product4; /* Temporary variables used to store intermediate results */ /* Intermediate product is calculated by (Id * cosVal) */ - product1 = (q31_t)(((q63_t)(Id) * (cosVal)) >> 31); + product1 = (q31_t) (((q63_t) (Id) * (cosVal)) >> 31); /* Intermediate product is calculated by (Iq * sinVal) */ - product2 = (q31_t)(((q63_t)(Iq) * (sinVal)) >> 31); + product2 = (q31_t) (((q63_t) (Iq) * (sinVal)) >> 31); + /* Intermediate product is calculated by (Id * sinVal) */ - product3 = (q31_t)(((q63_t)(Id) * (sinVal)) >> 31); + product3 = (q31_t) (((q63_t) (Id) * (sinVal)) >> 31); /* Intermediate product is calculated by (Iq * cosVal) */ - product4 = (q31_t)(((q63_t)(Iq) * (cosVal)) >> 31); + product4 = (q31_t) (((q63_t) (Iq) * (cosVal)) >> 31); /* Calculate pIalpha by using the two intermediate products 1 and 2 */ *pIalpha = __QSUB(product1, product2); /* Calculate pIbeta by using the two intermediate products 3 and 4 */ *pIbeta = __QADD(product4, product3); -} + } -/** - * @} end of Inverse park group - */ /** * @ingroup groupController */ -/** + /** * @defgroup clarke Vector Clarke Transform * Forward Clarke transform converts the instantaneous stator phases into a two-coordinate time invariant vector. * Generally the Clarke transform uses three-phase currents Ia, Ib and Ic to calculate currents @@ -563,69 +635,71 @@ __STATIC_FORCEINLINE void arm_inv_park_q31(q31_t Id, q31_t Iq, q31_t *pIalpha, q * Refer to the function specific documentation below for usage guidelines. */ -/** - * @addtogroup clarke - * @{ - */ -/** + /** * + * @ingroup clarke * @brief Floating-point Clarke transform * @param[in] Ia input three-phase coordinate a * @param[in] Ib input three-phase coordinate b * @param[out] pIalpha points to output two-phase orthogonal vector axis alpha * @param[out] pIbeta points to output two-phase orthogonal vector axis beta - * @return none */ -__STATIC_FORCEINLINE void arm_clarke_f32(float32_t Ia, float32_t Ib, float32_t *pIalpha, - float32_t *pIbeta) -{ + __STATIC_FORCEINLINE void arm_clarke_f32( + float32_t Ia, + float32_t Ib, + float32_t * pIalpha, + float32_t * pIbeta) + { /* Calculate pIalpha using the equation, pIalpha = Ia */ *pIalpha = Ia; /* Calculate pIbeta using the equation, pIbeta = (1/sqrt(3)) * Ia + (2/sqrt(3)) * Ib */ *pIbeta = (0.57735026919f * Ia + 1.15470053838f * Ib); -} + } + /** + @ingroup clarke @brief Clarke transform for Q31 version @param[in] Ia input three-phase coordinate a @param[in] Ib input three-phase coordinate b @param[out] pIalpha points to output two-phase orthogonal vector axis alpha @param[out] pIbeta points to output two-phase orthogonal vector axis beta - @return none \par Scaling and Overflow Behavior The function is implemented using an internal 32-bit accumulator. The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. There is saturation on the addition, hence there is no risk of overflow. */ -__STATIC_FORCEINLINE void arm_clarke_q31(q31_t Ia, q31_t Ib, q31_t *pIalpha, q31_t *pIbeta) -{ - q31_t product1, product2; /* Temporary variables used to store intermediate results */ +__STATIC_FORCEINLINE void arm_clarke_q31( + q31_t Ia, + q31_t Ib, + q31_t * pIalpha, + q31_t * pIbeta) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ /* Calculating pIalpha from Ia by equation pIalpha = Ia */ *pIalpha = Ia; /* Intermediate product is calculated by (1/(sqrt(3)) * Ia) */ - product1 = (q31_t)(((q63_t)Ia * 0x24F34E8B) >> 30); + product1 = (q31_t) (((q63_t) Ia * 0x24F34E8B) >> 30); /* Intermediate product is calculated by (2/sqrt(3) * Ib) */ - product2 = (q31_t)(((q63_t)Ib * 0x49E69D16) >> 30); + product2 = (q31_t) (((q63_t) Ib * 0x49E69D16) >> 30); /* pIbeta is calculated by adding the intermediate products */ *pIbeta = __QADD(product1, product2); -} + } -/** - * @} end of clarke group - */ -/** + + /** * @ingroup groupController */ -/** + /** * @defgroup inv_clarke Vector Inverse Clarke Transform * Inverse Clarke transform converts the two-coordinate time invariant vector into instantaneous stator phases. * @@ -641,64 +715,70 @@ __STATIC_FORCEINLINE void arm_clarke_q31(q31_t Ia, q31_t Ib, q31_t *pIalpha, q31 * Refer to the function specific documentation below for usage guidelines. */ -/** - * @addtogroup inv_clarke - * @{ - */ + -/** + /** + * @ingroup inv_clarke * @brief Floating-point Inverse Clarke transform * @param[in] Ialpha input two-phase orthogonal vector axis alpha * @param[in] Ibeta input two-phase orthogonal vector axis beta * @param[out] pIa points to output three-phase coordinate a * @param[out] pIb points to output three-phase coordinate b - * @return none */ -__STATIC_FORCEINLINE void arm_inv_clarke_f32(float32_t Ialpha, float32_t Ibeta, float32_t *pIa, - float32_t *pIb) -{ + __STATIC_FORCEINLINE void arm_inv_clarke_f32( + float32_t Ialpha, + float32_t Ibeta, + float32_t * pIa, + float32_t * pIb) + { /* Calculating pIa from Ialpha by equation pIa = Ialpha */ *pIa = Ialpha; /* Calculating pIb from Ialpha and Ibeta by equation pIb = -(1/2) * Ialpha + (sqrt(3)/2) * Ibeta */ *pIb = -0.5f * Ialpha + 0.8660254039f * Ibeta; -} + } + /** + @ingroup inv_clarke @brief Inverse Clarke transform for Q31 version @param[in] Ialpha input two-phase orthogonal vector axis alpha @param[in] Ibeta input two-phase orthogonal vector axis beta @param[out] pIa points to output three-phase coordinate a @param[out] pIb points to output three-phase coordinate b - @return none \par Scaling and Overflow Behavior The function is implemented using an internal 32-bit accumulator. The accumulator maintains 1.31 format by truncating lower 31 bits of the intermediate multiplication in 2.62 format. There is saturation on the subtraction, hence there is no risk of overflow. */ -__STATIC_FORCEINLINE void arm_inv_clarke_q31(q31_t Ialpha, q31_t Ibeta, q31_t *pIa, q31_t *pIb) -{ - q31_t product1, product2; /* Temporary variables used to store intermediate results */ +__STATIC_FORCEINLINE void arm_inv_clarke_q31( + q31_t Ialpha, + q31_t Ibeta, + q31_t * pIa, + q31_t * pIb) + { + q31_t product1, product2; /* Temporary variables used to store intermediate results */ /* Calculating pIa from Ialpha by equation pIa = Ialpha */ *pIa = Ialpha; /* Intermediate product is calculated by (1/(2*sqrt(3)) * Ia) */ - product1 = (q31_t)(((q63_t)(Ialpha) * (0x40000000)) >> 31); + product1 = (q31_t) (((q63_t) (Ialpha) * (0x40000000)) >> 31); /* Intermediate product is calculated by (1/sqrt(3) * pIb) */ - product2 = (q31_t)(((q63_t)(Ibeta) * (0x6ED9EBA1)) >> 31); + product2 = (q31_t) (((q63_t) (Ibeta) * (0x6ED9EBA1)) >> 31); /* pIb is calculated by subtracting the products */ *pIb = __QSUB(product2, product1); -} + } + + + -/** - * @} end of inv_clarke group - */ -#ifdef __cplusplus + +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/controller_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/controller_functions_f16.h old mode 100644 new mode 100755 similarity index 90% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/controller_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/controller_functions_f16.h index d2e03156351..a4622ec3d5d --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/controller_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/controller_functions_f16.h @@ -23,16 +23,18 @@ * limitations under the License. */ -#ifndef _CONTROLLER_FUNCTIONS_F16_H_ -#define _CONTROLLER_FUNCTIONS_F16_H_ + +#ifndef CONTROLLER_FUNCTIONS_F16_H_ +#define CONTROLLER_FUNCTIONS_F16_H_ -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/debug.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/debug.h new file mode 100644 index 00000000000..b98e038931b --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/debug.h @@ -0,0 +1,146 @@ +/****************************************************************************** + * @file basic_math_functions.h + * @brief Public header file for CMSIS DSP Library + * @version V1.10.0 + * @date 08 July 2021 + * Target Processor: Cortex-M and Cortex-A cores + ******************************************************************************/ +/* + * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef DEBUG_FUNCTIONS_H_ +#define DEBUG_FUNCTIONS_H_ + +#include "arm_math_types.h" +#include "arm_math_memory.h" + +#include "dsp/none.h" +#include "dsp/utils.h" + +#include "dsp/matrix_functions.h" +#include "dsp/matrix_functions_f16.h" + +#include + +#ifdef __cplusplus +extern "C" +{ +#endif + +#if defined(ARM_FLOAT16_SUPPORTED) +#define PROW_f16(S,NB) \ +{ \ + printf("{%f",(double)(S)[0]); \ + for(unsigned int i=1;i<(NB) ;i++) \ + { \ + printf(",%f",(double)(S)[i]);\ + } \ + printf("}"); \ +}; + +#define PV_f16(S,V,NB)\ +{ \ + printf("%s=",(S)); \ + PROW_f16((V),(NB)); \ + printf(";\n"); \ +}; + +#define PM_f16(S,M) \ +{ \ + printf("%s={",(S)); \ + for(unsigned int row=0;row<(M)->numRows;row++) \ + { \ + if (row != 0) \ + { \ + printf("\n,"); \ + } \ + PROW_f16((M)->pData + row * (M)->numCols, (M)->numCols);\ + } \ + printf("};\n"); \ +} + +#endif + +#define PROW_f32(S,NB) \ +{ \ + printf("{%f",(double)(S)[0]); \ + for(unsigned int i=1;i<(NB) ;i++) \ + { \ + printf(",%f",(double)(S)[i]);\ + } \ + printf("}"); \ +}; + +#define PV_f32(S,V,NB)\ +{ \ + printf("%s=",(S)); \ + PROW_f32((V),(NB)); \ + printf(";\n"); \ +}; + +#define PM_f32(S,M) \ +{ \ + printf("%s={",(S)); \ + for(unsigned int row=0;row<(M)->numRows;row++) \ + { \ + if (row != 0) \ + { \ + printf("\n,"); \ + } \ + PROW_f32((M)->pData + row * (M)->numCols, (M)->numCols);\ + } \ + printf("};\n"); \ +} + +#define PROW_f64(S,NB) \ +{ \ + printf("{%.20g",(double)(S)[0]); \ + for(unsigned int i=1;i<(NB) ;i++) \ + { \ + printf(",%.20g",(double)(S)[i]);\ + } \ + printf("}"); \ +}; + +#define PV_f64(S,V,NB) \ +{ \ + printf("%s=",(S)); \ + PROW_f64((V),(NB));\ + printf(";\n"); \ +}; + +#define PM_f64(S,M) \ +{ \ + printf("%s={",(S)); \ + for(unsigned int row=0;row<(M)->numRows;row++) \ + { \ + if (row != 0) \ + { \ + printf("\n,"); \ + } \ + PROW_f64((M)->pData + row * (M)->numCols, (M)->numCols);\ + } \ + printf("};\n"); \ +} + +#ifdef __cplusplus +} +#endif + +#endif /* ifndef _DEBUG_FUNCTIONS_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/distance_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/distance_functions.h old mode 100644 new mode 100755 similarity index 72% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/distance_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/distance_functions.h index 2273b645261..995efab8b63 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/distance_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/distance_functions.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _DISTANCE_FUNCTIONS_H_ -#define _DISTANCE_FUNCTIONS_H_ + +#ifndef DISTANCE_FUNCTIONS_H_ +#define DISTANCE_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -35,13 +36,16 @@ #include "dsp/statistics_functions.h" #include "dsp/basic_math_functions.h" #include "dsp/fast_math_functions.h" +#include "dsp/matrix_functions.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif + /** - * @defgroup groupDistance Distance functions + * @defgroup groupDistance Distance Functions * * Distance functions for use with clustering algorithms. * There are distance functions for float vectors and boolean vectors. @@ -49,11 +53,11 @@ extern "C" { */ /* 6.14 bug */ -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) && (__ARMCC_VERSION < 6150001) - +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) && (__ARMCC_VERSION < 6150001) + __attribute__((weak)) float __powisf2(float a, int b); -#endif +#endif /** * @brief Euclidean distance between two vectors @@ -64,7 +68,7 @@ __attribute__((weak)) float __powisf2(float a, int b); * */ -float32_t arm_euclidean_distance_f32(const float32_t *pA, const float32_t *pB, uint32_t blockSize); +float32_t arm_euclidean_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); /** * @brief Euclidean distance between two vectors @@ -75,7 +79,7 @@ float32_t arm_euclidean_distance_f32(const float32_t *pA, const float32_t *pB, u * */ -float64_t arm_euclidean_distance_f64(const float64_t *pA, const float64_t *pB, uint32_t blockSize); +float64_t arm_euclidean_distance_f64(const float64_t *pA,const float64_t *pB, uint32_t blockSize); /** * @brief Bray-Curtis distance between two vectors @@ -85,7 +89,7 @@ float64_t arm_euclidean_distance_f64(const float64_t *pA, const float64_t *pB, u * @return distance * */ -float32_t arm_braycurtis_distance_f32(const float32_t *pA, const float32_t *pB, uint32_t blockSize); +float32_t arm_braycurtis_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); /** * @brief Canberra distance between two vectors @@ -100,7 +104,8 @@ float32_t arm_braycurtis_distance_f32(const float32_t *pA, const float32_t *pB, * @return distance * */ -float32_t arm_canberra_distance_f32(const float32_t *pA, const float32_t *pB, uint32_t blockSize); +float32_t arm_canberra_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); + /** * @brief Chebyshev distance between two vectors @@ -110,7 +115,8 @@ float32_t arm_canberra_distance_f32(const float32_t *pA, const float32_t *pB, ui * @return distance * */ -float32_t arm_chebyshev_distance_f32(const float32_t *pA, const float32_t *pB, uint32_t blockSize); +float32_t arm_chebyshev_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); + /** * @brief Chebyshev distance between two vectors @@ -120,7 +126,8 @@ float32_t arm_chebyshev_distance_f32(const float32_t *pA, const float32_t *pB, u * @return distance * */ -float64_t arm_chebyshev_distance_f64(const float64_t *pA, const float64_t *pB, uint32_t blockSize); +float64_t arm_chebyshev_distance_f64(const float64_t *pA,const float64_t *pB, uint32_t blockSize); + /** * @brief Cityblock (Manhattan) distance between two vectors @@ -130,7 +137,7 @@ float64_t arm_chebyshev_distance_f64(const float64_t *pA, const float64_t *pB, u * @return distance * */ -float32_t arm_cityblock_distance_f32(const float32_t *pA, const float32_t *pB, uint32_t blockSize); +float32_t arm_cityblock_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); /** * @brief Cityblock (Manhattan) distance between two vectors @@ -140,7 +147,7 @@ float32_t arm_cityblock_distance_f32(const float32_t *pA, const float32_t *pB, u * @return distance * */ -float64_t arm_cityblock_distance_f64(const float64_t *pA, const float64_t *pB, uint32_t blockSize); +float64_t arm_cityblock_distance_f64(const float64_t *pA,const float64_t *pB, uint32_t blockSize); /** * @brief Correlation distance between two vectors @@ -153,7 +160,7 @@ float64_t arm_cityblock_distance_f64(const float64_t *pA, const float64_t *pB, u * @return distance * */ -float32_t arm_correlation_distance_f32(float32_t *pA, float32_t *pB, uint32_t blockSize); +float32_t arm_correlation_distance_f32(float32_t *pA,float32_t *pB, uint32_t blockSize); /** * @brief Cosine distance between two vectors @@ -165,7 +172,7 @@ float32_t arm_correlation_distance_f32(float32_t *pA, float32_t *pB, uint32_t bl * */ -float32_t arm_cosine_distance_f32(const float32_t *pA, const float32_t *pB, uint32_t blockSize); +float32_t arm_cosine_distance_f32(const float32_t *pA,const float32_t *pB, uint32_t blockSize); /** * @brief Cosine distance between two vectors @@ -177,7 +184,7 @@ float32_t arm_cosine_distance_f32(const float32_t *pA, const float32_t *pB, uint * */ -float64_t arm_cosine_distance_f64(const float64_t *pA, const float64_t *pB, uint32_t blockSize); +float64_t arm_cosine_distance_f64(const float64_t *pA,const float64_t *pB, uint32_t blockSize); /** * @brief Jensen-Shannon distance between two vectors @@ -199,8 +206,7 @@ float64_t arm_cosine_distance_f64(const float64_t *pA, const float64_t *pB, uint * */ -float32_t arm_jensenshannon_distance_f32(const float32_t *pA, const float32_t *pB, - uint32_t blockSize); +float32_t arm_jensenshannon_distance_f32(const float32_t *pA,const float32_t *pB,uint32_t blockSize); /** * @brief Minkowski distance between two vectors @@ -213,8 +219,9 @@ float32_t arm_jensenshannon_distance_f32(const float32_t *pA, const float32_t *p * */ -float32_t arm_minkowski_distance_f32(const float32_t *pA, const float32_t *pB, int32_t order, - uint32_t blockSize); + + +float32_t arm_minkowski_distance_f32(const float32_t *pA,const float32_t *pB, int32_t order, uint32_t blockSize); /** * @brief Dice distance between two vectors @@ -227,6 +234,7 @@ float32_t arm_minkowski_distance_f32(const float32_t *pA, const float32_t *pB, i * */ + float32_t arm_dice_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); /** @@ -275,8 +283,7 @@ float32_t arm_kulsinski_distance(const uint32_t *pA, const uint32_t *pB, uint32_ * */ -float32_t arm_rogerstanimoto_distance(const uint32_t *pA, const uint32_t *pB, - uint32_t numberOfBools); +float32_t arm_rogerstanimoto_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); /** * @brief Russell-Rao distance between two vectors @@ -300,8 +307,7 @@ float32_t arm_russellrao_distance(const uint32_t *pA, const uint32_t *pB, uint32 * */ -float32_t arm_sokalmichener_distance(const uint32_t *pA, const uint32_t *pB, - uint32_t numberOfBools); +float32_t arm_sokalmichener_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); /** * @brief Sokal-Sneath distance between two vectors @@ -327,7 +333,53 @@ float32_t arm_sokalsneath_distance(const uint32_t *pA, const uint32_t *pB, uint3 float32_t arm_yule_distance(const uint32_t *pA, const uint32_t *pB, uint32_t numberOfBools); -#ifdef __cplusplus +typedef enum + { + ARM_DTW_SAKOE_CHIBA_WINDOW = 1, + /*ARM_DTW_ITAKURA_WINDOW = 2,*/ + ARM_DTW_SLANTED_BAND_WINDOW = 3 + } arm_dtw_window; + +/** + * @brief Window for dynamic time warping computation + * @param[in] windowType Type of window + * @param[in] windowSize Window size + * @param[in,out] pWindow Window + * @return Error if window type not recognized + * + */ +arm_status arm_dtw_init_window_q7(const arm_dtw_window windowType, + const int32_t windowSize, + arm_matrix_instance_q7 *pWindow); + +/** + * @brief Dynamic Time Warping distance + * @param[in] pDistance Distance matrix (Query rows * Template columns) + * @param[in] pWindow Windowing (can be NULL if no windowing used) + * @param[out] pDTW Temporary cost buffer (same size) + * @param[out] distance Distance + * @return Error in case no path can be found with window constraint + * + */ + +arm_status arm_dtw_distance_f32(const arm_matrix_instance_f32 *pDistance, + const arm_matrix_instance_q7 *pWindow, + arm_matrix_instance_f32 *pDTW, + float32_t *distance); + + +/** + * @brief Mapping between query and template + * @param[in] pDTW Cost matrix (Query rows * Template columns) + * @param[out] pPath Warping path in cost matrix 2*(nb rows + nb columns) + * @param[out] pathLength Length of path in number of points + * + */ + +void arm_dtw_path_f32(const arm_matrix_instance_f32 *pDTW, + int16_t *pPath, + uint32_t *pathLength); +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/distance_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/distance_functions_f16.h old mode 100644 new mode 100755 similarity index 78% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/distance_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/distance_functions_f16.h index 089633c7e09..224d8149974 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/distance_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/distance_functions_f16.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _DISTANCE_FUNCTIONS_F16_H_ -#define _DISTANCE_FUNCTIONS_F16_H_ + +#ifndef DISTANCE_FUNCTIONS_F16_H_ +#define DISTANCE_FUNCTIONS_F16_H_ #include "arm_math_types_f16.h" #include "arm_math_memory.h" @@ -33,18 +34,19 @@ #include "dsp/utils.h" /* 6.14 bug */ -#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) && (__ARMCC_VERSION < 6150001) +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6100100) && (__ARMCC_VERSION < 6150001) /* Defined in minkowski_f32 */ __attribute__((weak)) float __powisf2(float a, int b); -#endif +#endif #include "dsp/statistics_functions_f16.h" #include "dsp/basic_math_functions_f16.h" #include "dsp/fast_math_functions_f16.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) @@ -55,10 +57,9 @@ extern "C" { * @param[in] pB Second vector * @param[in] blockSize vector length * @return distance - * */ +float16_t arm_euclidean_distance_f16(const float16_t *pA,const float16_t *pB, uint32_t blockSize); -float16_t arm_euclidean_distance_f16(const float16_t *pA, const float16_t *pB, uint32_t blockSize); /** * @brief Bray-Curtis distance between two vectors @@ -66,9 +67,8 @@ float16_t arm_euclidean_distance_f16(const float16_t *pA, const float16_t *pB, u * @param[in] pB Second vector * @param[in] blockSize vector length * @return distance - * */ -float16_t arm_braycurtis_distance_f16(const float16_t *pA, const float16_t *pB, uint32_t blockSize); +float16_t arm_braycurtis_distance_f16(const float16_t *pA,const float16_t *pB, uint32_t blockSize); /** * @brief Canberra distance between two vectors @@ -81,9 +81,9 @@ float16_t arm_braycurtis_distance_f16(const float16_t *pA, const float16_t *pB, * @param[in] pB Second vector * @param[in] blockSize vector length * @return distance - * */ -float16_t arm_canberra_distance_f16(const float16_t *pA, const float16_t *pB, uint32_t blockSize); +float16_t arm_canberra_distance_f16(const float16_t *pA,const float16_t *pB, uint32_t blockSize); + /** * @brief Chebyshev distance between two vectors @@ -91,9 +91,9 @@ float16_t arm_canberra_distance_f16(const float16_t *pA, const float16_t *pB, ui * @param[in] pB Second vector * @param[in] blockSize vector length * @return distance - * */ -float16_t arm_chebyshev_distance_f16(const float16_t *pA, const float16_t *pB, uint32_t blockSize); +float16_t arm_chebyshev_distance_f16(const float16_t *pA,const float16_t *pB, uint32_t blockSize); + /** * @brief Cityblock (Manhattan) distance between two vectors @@ -101,9 +101,9 @@ float16_t arm_chebyshev_distance_f16(const float16_t *pA, const float16_t *pB, u * @param[in] pB Second vector * @param[in] blockSize vector length * @return distance - * */ -float16_t arm_cityblock_distance_f16(const float16_t *pA, const float16_t *pB, uint32_t blockSize); +float16_t arm_cityblock_distance_f16(const float16_t *pA,const float16_t *pB, uint32_t blockSize); + /** * @brief Correlation distance between two vectors @@ -114,9 +114,9 @@ float16_t arm_cityblock_distance_f16(const float16_t *pA, const float16_t *pB, u * @param[in] pB Second vector * @param[in] blockSize vector length * @return distance - * */ -float16_t arm_correlation_distance_f16(float16_t *pA, float16_t *pB, uint32_t blockSize); +float16_t arm_correlation_distance_f16(float16_t *pA,float16_t *pB, uint32_t blockSize); + /** * @brief Cosine distance between two vectors @@ -125,10 +125,9 @@ float16_t arm_correlation_distance_f16(float16_t *pA, float16_t *pB, uint32_t bl * @param[in] pB Second vector * @param[in] blockSize vector length * @return distance - * */ +float16_t arm_cosine_distance_f16(const float16_t *pA,const float16_t *pB, uint32_t blockSize); -float16_t arm_cosine_distance_f16(const float16_t *pA, const float16_t *pB, uint32_t blockSize); /** * @brief Jensen-Shannon distance between two vectors @@ -147,11 +146,9 @@ float16_t arm_cosine_distance_f16(const float16_t *pA, const float16_t *pB, uint * @param[in] pB Second vector * @param[in] blockSize vector length * @return distance - * */ +float16_t arm_jensenshannon_distance_f16(const float16_t *pA,const float16_t *pB,uint32_t blockSize); -float16_t arm_jensenshannon_distance_f16(const float16_t *pA, const float16_t *pB, - uint32_t blockSize); /** * @brief Minkowski distance between two vectors @@ -161,14 +158,12 @@ float16_t arm_jensenshannon_distance_f16(const float16_t *pA, const float16_t *p * @param[in] n Norm order (>= 2) * @param[in] blockSize vector length * @return distance - * */ +float16_t arm_minkowski_distance_f16(const float16_t *pA,const float16_t *pB, int32_t order, uint32_t blockSize); -float16_t arm_minkowski_distance_f16(const float16_t *pA, const float16_t *pB, int32_t order, - uint32_t blockSize); #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/fast_math_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/fast_math_functions.h old mode 100644 new mode 100755 similarity index 74% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/fast_math_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/fast_math_functions.h index a0bf53c3120..8e600ccff30 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/fast_math_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/fast_math_functions.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _FAST_MATH_FUNCTIONS_H_ -#define _FAST_MATH_FUNCTIONS_H_ + +#ifndef FAST_MATH_FUNCTIONS_H_ +#define FAST_MATH_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -34,22 +35,31 @@ #include "dsp/basic_math_functions.h" -#ifdef __cplusplus -extern "C" { +#include + +#ifdef __cplusplus +extern "C" +{ #endif -/** + /** * @brief Macros required for SINE and COSINE Fast math approximations */ -#define FAST_MATH_TABLE_SIZE 512 -#define FAST_MATH_Q31_SHIFT (32 - 10) -#define FAST_MATH_Q15_SHIFT (16 - 10) - +#define FAST_MATH_TABLE_SIZE 512 +#define FAST_MATH_Q31_SHIFT (32 - 10) +#define FAST_MATH_Q15_SHIFT (16 - 10) + #ifndef PI -#define PI 3.14159265358979f + #define PI 3.14159265358979f #endif +#ifndef PI_F64 + #define PI_F64 3.14159265358979323846 +#endif + + + /** * @defgroup groupFastMath Fast Math Functions * This set of functions provides a fast approximation to sine, cosine, and square root. @@ -59,125 +69,135 @@ extern "C" { * */ -/** - * @ingroup groupFastMath - */ - -/** - @addtogroup sin - @{ - */ -/** + /** * @brief Fast approximation to the trigonometric sine function for floating-point data. * @param[in] x input value in radians. * @return sin(x). */ -float32_t arm_sin_f32(float32_t x); + float32_t arm_sin_f32( + float32_t x); -/** + + /** * @brief Fast approximation to the trigonometric sine function for Q31 data. * @param[in] x Scaled input value in radians. * @return sin(x). */ -q31_t arm_sin_q31(q31_t x); + q31_t arm_sin_q31( + q31_t x); -/** + /** * @brief Fast approximation to the trigonometric sine function for Q15 data. * @param[in] x Scaled input value in radians. * @return sin(x). */ -q15_t arm_sin_q15(q15_t x); + q15_t arm_sin_q15( + q15_t x); -/** - @} end of sin group - */ - -/** - @addtogroup cos - @{ - */ -/** + /** * @brief Fast approximation to the trigonometric cosine function for floating-point data. * @param[in] x input value in radians. * @return cos(x). */ -float32_t arm_cos_f32(float32_t x); + float32_t arm_cos_f32( + float32_t x); -/** + + /** * @brief Fast approximation to the trigonometric cosine function for Q31 data. * @param[in] x Scaled input value in radians. * @return cos(x). */ -q31_t arm_cos_q31(q31_t x); + q31_t arm_cos_q31( + q31_t x); -/** + + /** * @brief Fast approximation to the trigonometric cosine function for Q15 data. * @param[in] x Scaled input value in radians. * @return cos(x). */ -q15_t arm_cos_q15(q15_t x); + q15_t arm_cos_q15( + q15_t x); -/** - @} end of cos group - */ /** @brief Floating-point vector of log values. @param[in] pSrc points to the input vector @param[out] pDst points to the output vector @param[in] blockSize number of samples in each vector - @return none */ -void arm_vlog_f32(const float32_t *pSrc, float32_t *pDst, uint32_t blockSize); + void arm_vlog_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** @brief Floating-point vector of log values. @param[in] pSrc points to the input vector @param[out] pDst points to the output vector @param[in] blockSize number of samples in each vector - @return none */ -void arm_vlog_f64(const float64_t *pSrc, float64_t *pDst, uint32_t blockSize); + void arm_vlog_f64( + const float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief q31 vector of log values. * @param[in] pSrc points to the input vector in q31 * @param[out] pDst points to the output vector in q5.26 * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_vlog_q31(const q31_t *pSrc, q31_t *pDst, uint32_t blockSize); + void arm_vlog_q31(const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + /** * @brief q15 vector of log values. * @param[in] pSrc points to the input vector in q15 * @param[out] pDst points to the output vector in q4.11 * @param[in] blockSize number of samples in each vector - * @return none */ -void arm_vlog_q15(const q15_t *pSrc, q15_t *pDst, uint32_t blockSize); + void arm_vlog_q15(const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + + /** @brief Floating-point vector of exp values. @param[in] pSrc points to the input vector @param[out] pDst points to the output vector @param[in] blockSize number of samples in each vector - @return none */ -void arm_vexp_f32(const float32_t *pSrc, float32_t *pDst, uint32_t blockSize); + void arm_vexp_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + /** @brief Floating-point vector of exp values. @param[in] pSrc points to the input vector @param[out] pDst points to the output vector @param[in] blockSize number of samples in each vector - @return none */ -void arm_vexp_f64(const float64_t *pSrc, float64_t *pDst, uint32_t blockSize); + void arm_vexp_f64( + const float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize); -/** + + + /** * @defgroup SQRT Square Root * * Computes the square root of a number. @@ -197,7 +217,8 @@ void arm_vexp_f64(const float64_t *pSrc, float64_t *pDst, uint32_t blockSize); * */ -/** + + /** * @addtogroup SQRT * @{ */ @@ -210,33 +231,49 @@ void arm_vexp_f64(const float64_t *pSrc, float64_t *pDst, uint32_t blockSize); - \ref ARM_MATH_SUCCESS : input value is positive - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 */ -__STATIC_FORCEINLINE arm_status arm_sqrt_f32(const float32_t in, float32_t *pOut) -{ - if (in >= 0.0f) { -#if defined(__CC_ARM) -#if defined __TARGET_FPU_VFP - *pOut = __sqrtf(in); -#else - *pOut = sqrtf(in); -#endif - -#elif defined(__ICCARM__) -#if defined __ARMVFP__ - __ASM("VSQRT.F32 %0,%1" : "=t"(*pOut) : "t"(in)); +__STATIC_FORCEINLINE arm_status arm_sqrt_f32( + const float32_t in, + float32_t * pOut) + { + if (in >= 0.0f) + { +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + *pOut = __sqrtf(in); + #else + *pOut = sqrtf(in); + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + __ASM("VSQRT.F32 %0,%1" : "=t"(*pOut) : "t"(in)); + #else + *pOut = sqrtf(in); + #endif + +#elif defined ( __ARMCC_VERSION ) && ( __ARMCC_VERSION >= 6010050 ) + *pOut = _sqrtf(in); +#elif defined(__GNUC_PYTHON__) + *pOut = sqrtf(in); +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + __ASM("VSQRT.F32 %0,%1" : "=t"(*pOut) : "t"(in)); + #else + *pOut = sqrtf(in); + #endif #else - *pOut = sqrtf(in); + *pOut = sqrtf(in); #endif -#else - *pOut = sqrtf(in); -#endif - - return (ARM_MATH_SUCCESS); - } else { - *pOut = 0.0f; - return (ARM_MATH_ARGUMENT_ERROR); + return (ARM_MATH_SUCCESS); } -} + else + { + *pOut = 0.0f; + return (ARM_MATH_ARGUMENT_ERROR); + } + } + /** @brief Q31 square root function. @@ -246,7 +283,10 @@ __STATIC_FORCEINLINE arm_status arm_sqrt_f32(const float32_t in, float32_t *pOut - \ref ARM_MATH_SUCCESS : input value is positive - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 */ -arm_status arm_sqrt_q31(q31_t in, q31_t *pOut); +arm_status arm_sqrt_q31( + q31_t in, + q31_t * pOut); + /** @brief Q15 square root function. @@ -256,13 +296,17 @@ arm_status arm_sqrt_q31(q31_t in, q31_t *pOut); - \ref ARM_MATH_SUCCESS : input value is positive - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 */ -arm_status arm_sqrt_q15(q15_t in, q15_t *pOut); +arm_status arm_sqrt_q15( + q15_t in, + q15_t * pOut); -/** + + + /** * @} end of SQRT group */ -/** + /** @brief Fixed point division @param[in] numerator Numerator @param[in] denominator Denominator @@ -274,9 +318,12 @@ arm_status arm_sqrt_q15(q15_t in, q15_t *pOut); to the saturated negative or positive value. */ -arm_status arm_divide_q15(q15_t numerator, q15_t denominator, q15_t *quotient, int16_t *shift); +arm_status arm_divide_q15(q15_t numerator, + q15_t denominator, + q15_t *quotient, + int16_t *shift); -/** + /** @brief Fixed point division @param[in] numerator Numerator @param[in] denominator Denominator @@ -288,36 +335,42 @@ arm_status arm_divide_q15(q15_t numerator, q15_t denominator, q15_t *quotient, i to the saturated negative or positive value. */ -arm_status arm_divide_q31(q31_t numerator, q31_t denominator, q31_t *quotient, int16_t *shift); +arm_status arm_divide_q31(q31_t numerator, + q31_t denominator, + q31_t *quotient, + int16_t *shift); -/** + + + /** @brief Arc tangent in radian of y/x using sign of x and y to determine right quadrant. @param[in] y y coordinate @param[in] x x coordinate @param[out] result Result @return error status. */ -arm_status arm_atan2_f32(float32_t y, float32_t x, float32_t *result); + arm_status arm_atan2_f32(float32_t y,float32_t x,float32_t *result); -/** + + /** @brief Arc tangent in radian of y/x using sign of x and y to determine right quadrant. @param[in] y y coordinate @param[in] x x coordinate @param[out] result Result in Q2.29 @return error status. */ -arm_status arm_atan2_q31(q31_t y, q31_t x, q31_t *result); + arm_status arm_atan2_q31(q31_t y,q31_t x,q31_t *result); -/** + /** @brief Arc tangent in radian of y/x using sign of x and y to determine right quadrant. @param[in] y y coordinate @param[in] x x coordinate @param[out] result Result in Q2.13 @return error status. */ -arm_status arm_atan2_q15(q15_t y, q15_t x, q15_t *result); + arm_status arm_atan2_q15(q15_t y,q15_t x,q15_t *result); -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/fast_math_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/fast_math_functions_f16.h old mode 100644 new mode 100755 similarity index 79% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/fast_math_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/fast_math_functions_f16.h index 7aca2c59b68..1fa45a86e1b --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/fast_math_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/fast_math_functions_f16.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _FAST_MATH_FUNCTIONS_F16_H_ -#define _FAST_MATH_FUNCTIONS_F16_H_ + +#ifndef FAST_MATH_FUNCTIONS_F16_H_ +#define FAST_MATH_FUNCTIONS_F16_H_ #include "arm_math_types_f16.h" #include "arm_math_memory.h" @@ -35,13 +36,14 @@ /* For sqrt_f32 */ #include "dsp/fast_math_functions.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) -/** + /** * @addtogroup SQRT * @{ */ @@ -54,57 +56,66 @@ extern "C" { - \ref ARM_MATH_SUCCESS : input value is positive - \ref ARM_MATH_ARGUMENT_ERROR : input value is negative; *pOut is set to 0 */ -__STATIC_FORCEINLINE arm_status arm_sqrt_f16(float16_t in, float16_t *pOut) -{ +__STATIC_FORCEINLINE arm_status arm_sqrt_f16( + float16_t in, + float16_t * pOut) + { float32_t r; arm_status status; - status = arm_sqrt_f32((float32_t)in, &r); - *pOut = (float16_t)r; - return (status); -} + status=arm_sqrt_f32((float32_t)in,&r); + *pOut=(float16_t)r; + return(status); + } + /** @} end of SQRT group */ - + /** @brief Floating-point vector of log values. @param[in] pSrc points to the input vector @param[out] pDst points to the output vector @param[in] blockSize number of samples in each vector - @return none */ -void arm_vlog_f16(const float16_t *pSrc, float16_t *pDst, uint32_t blockSize); + void arm_vlog_f16( + const float16_t * pSrc, + float16_t * pDst, + uint32_t blockSize); /** @brief Floating-point vector of exp values. @param[in] pSrc points to the input vector @param[out] pDst points to the output vector @param[in] blockSize number of samples in each vector - @return none */ -void arm_vexp_f16(const float16_t *pSrc, float16_t *pDst, uint32_t blockSize); + void arm_vexp_f16( + const float16_t * pSrc, + float16_t * pDst, + uint32_t blockSize); -/** + /** @brief Floating-point vector of inverse values. @param[in] pSrc points to the input vector @param[out] pDst points to the output vector @param[in] blockSize number of samples in each vector - @return none */ -void arm_vinverse_f16(const float16_t *pSrc, float16_t *pDst, uint32_t blockSize); + void arm_vinverse_f16( + const float16_t * pSrc, + float16_t * pDst, + uint32_t blockSize); -/** + /** @brief Arc tangent in radian of y/x using sign of x and y to determine right quadrant. @param[in] y y coordinate @param[in] x x coordinate @param[out] result Result @return error status. */ -arm_status arm_atan2_f16(float16_t y, float16_t x, float16_t *result); + arm_status arm_atan2_f16(float16_t y,float16_t x,float16_t *result); #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/filtering_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/filtering_functions.h old mode 100644 new mode 100755 similarity index 57% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/filtering_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/filtering_functions.h index e290890d600..fa149595bbe --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/filtering_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/filtering_functions.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _FILTERING_FUNCTIONS_H_ -#define _FILTERING_FUNCTIONS_H_ + +#ifndef FILTERING_FUNCTIONS_H_ +#define FILTERING_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -35,76 +36,84 @@ #include "dsp/support_functions.h" #include "dsp/fast_math_functions.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif -#define DELTA_Q31 ((q31_t)(0x100)) -#define DELTA_Q15 ((q15_t)0x5) + + +#define DELTA_Q31 ((q31_t)(0x100)) +#define DELTA_Q15 ((q15_t)0x5) /** * @defgroup groupFilters Filtering Functions */ - -/** + + /** * @brief Instance structure for the Q7 FIR filter. */ -typedef struct { - uint16_t numTaps; /**< number of filter coefficients in the filter. */ - q7_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - const q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ -} arm_fir_instance_q7; + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q7_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + const q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + } arm_fir_instance_q7; -/** + /** * @brief Instance structure for the Q15 FIR filter. */ -typedef struct { - uint16_t numTaps; /**< number of filter coefficients in the filter. */ - q15_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - const q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ -} arm_fir_instance_q15; + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + const q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + } arm_fir_instance_q15; -/** + /** * @brief Instance structure for the Q31 FIR filter. */ -typedef struct { - uint16_t numTaps; /**< number of filter coefficients in the filter. */ - q31_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - const q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ -} arm_fir_instance_q31; + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + const q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_q31; -/** + /** * @brief Instance structure for the floating-point FIR filter. */ -typedef struct { - uint16_t numTaps; /**< number of filter coefficients in the filter. */ - float32_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - const float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ -} arm_fir_instance_f32; + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + const float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_f32; -/** + /** * @brief Instance structure for the floating-point FIR filter. */ -typedef struct { - uint16_t numTaps; /**< number of filter coefficients in the filter. */ - float64_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - const float64_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ -} arm_fir_instance_f64; + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + float64_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + const float64_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_f64; -/** + /** * @brief Processing function for the Q7 FIR filter. * @param[in] S points to an instance of the Q7 FIR filter structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_fir_q7(const arm_fir_instance_q7 *S, const q7_t *pSrc, q7_t *pDst, uint32_t blockSize); + void arm_fir_q7( + const arm_fir_instance_q7 * S, + const q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); -/** + /** * @brief Initialization function for the Q7 FIR filter. * @param[in,out] S points to an instance of the Q7 FIR structure. * @param[in] numTaps Number of filter coefficients in the filter. @@ -115,29 +124,40 @@ void arm_fir_q7(const arm_fir_instance_q7 *S, const q7_t *pSrc, q7_t *pDst, uint * For the MVE version, the coefficient length must be a multiple of 16. * You can pad with zeros if you have less coefficients. */ -void arm_fir_init_q7(arm_fir_instance_q7 *S, uint16_t numTaps, const q7_t *pCoeffs, q7_t *pState, - uint32_t blockSize); + void arm_fir_init_q7( + arm_fir_instance_q7 * S, + uint16_t numTaps, + const q7_t * pCoeffs, + q7_t * pState, + uint32_t blockSize); -/** + /** * @brief Processing function for the Q15 FIR filter. * @param[in] S points to an instance of the Q15 FIR structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_fir_q15(const arm_fir_instance_q15 *S, const q15_t *pSrc, q15_t *pDst, uint32_t blockSize); + void arm_fir_q15( + const arm_fir_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + /** * @brief Processing function for the fast Q15 FIR filter (fast version). * @param[in] S points to an instance of the Q15 FIR filter structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_fir_fast_q15(const arm_fir_instance_q15 *S, const q15_t *pSrc, q15_t *pDst, - uint32_t blockSize); + void arm_fir_fast_q15( + const arm_fir_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + /** * @brief Initialization function for the Q15 FIR filter. * @param[in,out] S points to an instance of the Q15 FIR filter structure. * @param[in] numTaps Number of filter coefficients in the filter. Must be even and greater than or equal to 4. @@ -152,29 +172,40 @@ void arm_fir_fast_q15(const arm_fir_instance_q15 *S, const q15_t *pSrc, q15_t *p * You can pad with zeros if you have less coefficients. * */ -arm_status arm_fir_init_q15(arm_fir_instance_q15 *S, uint16_t numTaps, const q15_t *pCoeffs, - q15_t *pState, uint32_t blockSize); + arm_status arm_fir_init_q15( + arm_fir_instance_q15 * S, + uint16_t numTaps, + const q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); -/** + /** * @brief Processing function for the Q31 FIR filter. * @param[in] S points to an instance of the Q31 FIR filter structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_fir_q31(const arm_fir_instance_q31 *S, const q31_t *pSrc, q31_t *pDst, uint32_t blockSize); + void arm_fir_q31( + const arm_fir_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + /** * @brief Processing function for the fast Q31 FIR filter (fast version). * @param[in] S points to an instance of the Q31 FIR filter structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_fir_fast_q31(const arm_fir_instance_q31 *S, const q31_t *pSrc, q31_t *pDst, - uint32_t blockSize); + void arm_fir_fast_q31( + const arm_fir_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + /** * @brief Initialization function for the Q31 FIR filter. * @param[in,out] S points to an instance of the Q31 FIR structure. * @param[in] numTaps Number of filter coefficients in the filter. @@ -185,30 +216,40 @@ void arm_fir_fast_q31(const arm_fir_instance_q31 *S, const q31_t *pSrc, q31_t *p * For the MVE version, the coefficient length must be a multiple of 4. * You can pad with zeros if you have less coefficients. */ -void arm_fir_init_q31(arm_fir_instance_q31 *S, uint16_t numTaps, const q31_t *pCoeffs, - q31_t *pState, uint32_t blockSize); + void arm_fir_init_q31( + arm_fir_instance_q31 * S, + uint16_t numTaps, + const q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); -/** + /** * @brief Processing function for the floating-point FIR filter. * @param[in] S points to an instance of the floating-point FIR structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_fir_f32(const arm_fir_instance_f32 *S, const float32_t *pSrc, float32_t *pDst, - uint32_t blockSize); + void arm_fir_f32( + const arm_fir_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + /** * @brief Processing function for the floating-point FIR filter. * @param[in] S points to an instance of the floating-point FIR structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_fir_f64(const arm_fir_instance_f64 *S, const float64_t *pSrc, float64_t *pDst, - uint32_t blockSize); + void arm_fir_f64( + const arm_fir_instance_f64 * S, + const float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize); -/** + /** * @brief Initialization function for the floating-point FIR filter. * @param[in,out] S points to an instance of the floating-point FIR filter structure. * @param[in] numTaps Number of filter coefficients in the filter. @@ -216,10 +257,14 @@ void arm_fir_f64(const arm_fir_instance_f64 *S, const float64_t *pSrc, float64_t * @param[in] pState points to the state buffer. * @param[in] blockSize number of samples that are processed at a time. */ -void arm_fir_init_f32(arm_fir_instance_f32 *S, uint16_t numTaps, const float32_t *pCoeffs, - float32_t *pState, uint32_t blockSize); + void arm_fir_init_f32( + arm_fir_instance_f32 * S, + uint16_t numTaps, + const float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); -/** + /** * @brief Initialization function for the floating-point FIR filter. * @param[in,out] S points to an instance of the floating-point FIR filter structure. * @param[in] numTaps Number of filter coefficients in the filter. @@ -227,68 +272,69 @@ void arm_fir_init_f32(arm_fir_instance_f32 *S, uint16_t numTaps, const float32_t * @param[in] pState points to the state buffer. * @param[in] blockSize number of samples that are processed at a time. */ -void arm_fir_init_f64(arm_fir_instance_f64 *S, uint16_t numTaps, const float64_t *pCoeffs, - float64_t *pState, uint32_t blockSize); + void arm_fir_init_f64( + arm_fir_instance_f64 * S, + uint16_t numTaps, + const float64_t * pCoeffs, + float64_t * pState, + uint32_t blockSize); -/** + /** * @brief Instance structure for the Q15 Biquad cascade filter. */ -typedef struct { - int8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - q15_t * - pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ - const q15_t - *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ - int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ -} arm_biquad_casd_df1_inst_q15; + typedef struct + { + int8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q15_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + const q15_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + int8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ + } arm_biquad_casd_df1_inst_q15; -/** + /** * @brief Instance structure for the Q31 Biquad cascade filter. */ -typedef struct { - uint32_t - numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - q31_t * - pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ - const q31_t - *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ - uint8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ -} arm_biquad_casd_df1_inst_q31; + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q31_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + const q31_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + uint8_t postShift; /**< Additional shift, in bits, applied to each output sample. */ + } arm_biquad_casd_df1_inst_q31; -/** + /** * @brief Instance structure for the floating-point Biquad cascade filter. */ -typedef struct { - uint32_t - numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float32_t * - pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ - const float32_t - *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ -} arm_biquad_casd_df1_inst_f32; + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + const float32_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_casd_df1_inst_f32; #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -/** + /** * @brief Instance structure for the modified Biquad coefs required by vectorized code. */ -typedef struct { - float32_t coeffs - [8] - [4]; /**< Points to the array of modified coefficients. The array is of length 32. There is one per stage */ -} arm_biquad_mod_coef_f32; -#endif + typedef struct + { + float32_t coeffs[8][4]; /**< Points to the array of modified coefficients. The array is of length 32. There is one per stage */ + } arm_biquad_mod_coef_f32; +#endif -/** + /** * @brief Processing function for the Q15 Biquad cascade filter. * @param[in] S points to an instance of the Q15 Biquad cascade structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_df1_q15(const arm_biquad_casd_df1_inst_q15 *S, const q15_t *pSrc, - q15_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_df1_q15( + const arm_biquad_casd_df1_inst_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + /** * @brief Initialization function for the Q15 Biquad cascade filter. * @param[in,out] S points to an instance of the Q15 Biquad cascade structure. * @param[in] numStages number of 2nd order stages in the filter. @@ -296,40 +342,53 @@ void arm_biquad_cascade_df1_q15(const arm_biquad_casd_df1_inst_q15 *S, const q15 * @param[in] pState points to the state buffer. * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format */ -void arm_biquad_cascade_df1_init_q15(arm_biquad_casd_df1_inst_q15 *S, uint8_t numStages, - const q15_t *pCoeffs, q15_t *pState, int8_t postShift); + void arm_biquad_cascade_df1_init_q15( + arm_biquad_casd_df1_inst_q15 * S, + uint8_t numStages, + const q15_t * pCoeffs, + q15_t * pState, + int8_t postShift); -/** + /** * @brief Fast but less precise processing function for the Q15 Biquad cascade filter for Cortex-M3 and Cortex-M4. * @param[in] S points to an instance of the Q15 Biquad cascade structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_df1_fast_q15(const arm_biquad_casd_df1_inst_q15 *S, const q15_t *pSrc, - q15_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_df1_fast_q15( + const arm_biquad_casd_df1_inst_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + /** * @brief Processing function for the Q31 Biquad cascade filter * @param[in] S points to an instance of the Q31 Biquad cascade structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_df1_q31(const arm_biquad_casd_df1_inst_q31 *S, const q31_t *pSrc, - q31_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_df1_q31( + const arm_biquad_casd_df1_inst_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + /** * @brief Fast but less precise processing function for the Q31 Biquad cascade filter for Cortex-M3 and Cortex-M4. * @param[in] S points to an instance of the Q31 Biquad cascade structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_df1_fast_q31(const arm_biquad_casd_df1_inst_q31 *S, const q31_t *pSrc, - q31_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_df1_fast_q31( + const arm_biquad_casd_df1_inst_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + /** * @brief Initialization function for the Q31 Biquad cascade filter. * @param[in,out] S points to an instance of the Q31 Biquad cascade structure. * @param[in] numStages number of 2nd order stages in the filter. @@ -337,20 +396,27 @@ void arm_biquad_cascade_df1_fast_q31(const arm_biquad_casd_df1_inst_q31 *S, cons * @param[in] pState points to the state buffer. * @param[in] postShift Shift to be applied to the output. Varies according to the coefficients format */ -void arm_biquad_cascade_df1_init_q31(arm_biquad_casd_df1_inst_q31 *S, uint8_t numStages, - const q31_t *pCoeffs, q31_t *pState, int8_t postShift); + void arm_biquad_cascade_df1_init_q31( + arm_biquad_casd_df1_inst_q31 * S, + uint8_t numStages, + const q31_t * pCoeffs, + q31_t * pState, + int8_t postShift); -/** + /** * @brief Processing function for the floating-point Biquad cascade filter. * @param[in] S points to an instance of the floating-point Biquad cascade structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_df1_f32(const arm_biquad_casd_df1_inst_f32 *S, const float32_t *pSrc, - float32_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_df1_f32( + const arm_biquad_casd_df1_inst_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + /** * @brief Initialization function for the floating-point Biquad cascade filter. * @param[in,out] S points to an instance of the floating-point Biquad cascade structure. * @param[in] numStages number of 2nd order stages in the filter. @@ -359,13 +425,20 @@ void arm_biquad_cascade_df1_f32(const arm_biquad_casd_df1_inst_f32 *S, const flo * @param[in] pState points to the state buffer. */ #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_biquad_cascade_df1_mve_init_f32(arm_biquad_casd_df1_inst_f32 *S, uint8_t numStages, - const float32_t *pCoeffs, - arm_biquad_mod_coef_f32 *pCoeffsMod, float32_t *pState); + void arm_biquad_cascade_df1_mve_init_f32( + arm_biquad_casd_df1_inst_f32 * S, + uint8_t numStages, + const float32_t * pCoeffs, + arm_biquad_mod_coef_f32 * pCoeffsMod, + float32_t * pState); #endif + + void arm_biquad_cascade_df1_init_f32( + arm_biquad_casd_df1_inst_f32 * S, + uint8_t numStages, + const float32_t * pCoeffs, + float32_t * pState); -void arm_biquad_cascade_df1_init_f32(arm_biquad_casd_df1_inst_f32 *S, uint8_t numStages, - const float32_t *pCoeffs, float32_t *pState); /** * @brief Convolution of floating-point sequences. @@ -375,10 +448,15 @@ void arm_biquad_cascade_df1_init_f32(arm_biquad_casd_df1_inst_f32 *S, uint8_t nu * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. */ -void arm_conv_f32(const float32_t *pSrcA, uint32_t srcALen, const float32_t *pSrcB, - uint32_t srcBLen, float32_t *pDst); + void arm_conv_f32( + const float32_t * pSrcA, + uint32_t srcALen, + const float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst); -/** + + /** * @brief Convolution of Q15 sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -388,8 +466,15 @@ void arm_conv_f32(const float32_t *pSrcA, uint32_t srcALen, const float32_t *pSr * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). */ -void arm_conv_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, uint32_t srcBLen, - q15_t *pDst, q15_t *pScratch1, q15_t *pScratch2); + void arm_conv_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); + /** * @brief Convolution of Q15 sequences. @@ -399,10 +484,15 @@ void arm_conv_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the location where the output result is written. Length srcALen+srcBLen-1. */ -void arm_conv_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, uint32_t srcBLen, - q15_t *pDst); + void arm_conv_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); -/** + + /** * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -410,10 +500,15 @@ void arm_conv_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, uint * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. */ -void arm_conv_fast_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, uint32_t srcBLen, - q15_t *pDst); + void arm_conv_fast_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); -/** + + /** * @brief Convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -423,10 +518,17 @@ void arm_conv_fast_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, * @param[in] pScratch1 points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). */ -void arm_conv_fast_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, - uint32_t srcBLen, q15_t *pDst, q15_t *pScratch1, q15_t *pScratch2); + void arm_conv_fast_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); -/** + + /** * @brief Convolution of Q31 sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -434,10 +536,15 @@ void arm_conv_fast_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pS * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. */ -void arm_conv_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_t *pSrcB, uint32_t srcBLen, - q31_t *pDst); + void arm_conv_q31( + const q31_t * pSrcA, + uint32_t srcALen, + const q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); -/** + + /** * @brief Convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -445,10 +552,15 @@ void arm_conv_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_t *pSrcB, uint * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. */ -void arm_conv_fast_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_t *pSrcB, uint32_t srcBLen, - q31_t *pDst); + void arm_conv_fast_q31( + const q31_t * pSrcA, + uint32_t srcALen, + const q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); -/** + + /** * @brief Convolution of Q7 sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -458,10 +570,17 @@ void arm_conv_fast_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_t *pSrcB, * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). */ -void arm_conv_opt_q7(const q7_t *pSrcA, uint32_t srcALen, const q7_t *pSrcB, uint32_t srcBLen, - q7_t *pDst, q15_t *pScratch1, q15_t *pScratch2); + void arm_conv_opt_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); -/** + + /** * @brief Convolution of Q7 sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -469,10 +588,15 @@ void arm_conv_opt_q7(const q7_t *pSrcA, uint32_t srcALen, const q7_t *pSrcB, uin * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the block of output data Length srcALen+srcBLen-1. */ -void arm_conv_q7(const q7_t *pSrcA, uint32_t srcALen, const q7_t *pSrcB, uint32_t srcBLen, - q7_t *pDst); + void arm_conv_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst); -/** + + /** * @brief Partial convolution of floating-point sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -483,11 +607,17 @@ void arm_conv_q7(const q7_t *pSrcA, uint32_t srcALen, const q7_t *pSrcB, uint32_ * @param[in] numPoints is the number of output points to be computed. * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. */ -arm_status arm_conv_partial_f32(const float32_t *pSrcA, uint32_t srcALen, const float32_t *pSrcB, - uint32_t srcBLen, float32_t *pDst, uint32_t firstIndex, - uint32_t numPoints); + arm_status arm_conv_partial_f32( + const float32_t * pSrcA, + uint32_t srcALen, + const float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); -/** + + /** * @brief Partial convolution of Q15 sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -500,11 +630,19 @@ arm_status arm_conv_partial_f32(const float32_t *pSrcA, uint32_t srcALen, const * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. */ -arm_status arm_conv_partial_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, - uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, - uint32_t numPoints, q15_t *pScratch1, q15_t *pScratch2); + arm_status arm_conv_partial_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); -/** + + /** * @brief Partial convolution of Q15 sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -515,11 +653,17 @@ arm_status arm_conv_partial_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const * @param[in] numPoints is the number of output points to be computed. * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. */ -arm_status arm_conv_partial_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, - uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, - uint32_t numPoints); + arm_status arm_conv_partial_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); -/** + + /** * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -530,11 +674,17 @@ arm_status arm_conv_partial_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_ * @param[in] numPoints is the number of output points to be computed. * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. */ -arm_status arm_conv_partial_fast_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, - uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, - uint32_t numPoints); + arm_status arm_conv_partial_fast_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); -/** + + /** * @brief Partial convolution of Q15 sequences (fast version) for Cortex-M3 and Cortex-M4 * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -547,11 +697,19 @@ arm_status arm_conv_partial_fast_q15(const q15_t *pSrcA, uint32_t srcALen, const * @param[in] pScratch2 points to scratch buffer of size min(srcALen, srcBLen). * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. */ -arm_status arm_conv_partial_fast_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, - uint32_t srcBLen, q15_t *pDst, uint32_t firstIndex, - uint32_t numPoints, q15_t *pScratch1, q15_t *pScratch2); + arm_status arm_conv_partial_fast_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); -/** + + /** * @brief Partial convolution of Q31 sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -562,11 +720,17 @@ arm_status arm_conv_partial_fast_opt_q15(const q15_t *pSrcA, uint32_t srcALen, c * @param[in] numPoints is the number of output points to be computed. * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. */ -arm_status arm_conv_partial_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_t *pSrcB, - uint32_t srcBLen, q31_t *pDst, uint32_t firstIndex, - uint32_t numPoints); + arm_status arm_conv_partial_q31( + const q31_t * pSrcA, + uint32_t srcALen, + const q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); -/** + + /** * @brief Partial convolution of Q31 sequences (fast version) for Cortex-M3 and Cortex-M4 * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -577,11 +741,17 @@ arm_status arm_conv_partial_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_ * @param[in] numPoints is the number of output points to be computed. * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. */ -arm_status arm_conv_partial_fast_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_t *pSrcB, - uint32_t srcBLen, q31_t *pDst, uint32_t firstIndex, - uint32_t numPoints); + arm_status arm_conv_partial_fast_q31( + const q31_t * pSrcA, + uint32_t srcALen, + const q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); -/** + + /** * @brief Partial convolution of Q7 sequences * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -594,9 +764,17 @@ arm_status arm_conv_partial_fast_q31(const q31_t *pSrcA, uint32_t srcALen, const * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. */ -arm_status arm_conv_partial_opt_q7(const q7_t *pSrcA, uint32_t srcALen, const q7_t *pSrcB, - uint32_t srcBLen, q7_t *pDst, uint32_t firstIndex, - uint32_t numPoints, q15_t *pScratch1, q15_t *pScratch2); + arm_status arm_conv_partial_opt_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints, + q15_t * pScratch1, + q15_t * pScratch2); + /** * @brief Partial convolution of Q7 sequences. @@ -609,52 +787,108 @@ arm_status arm_conv_partial_opt_q7(const q7_t *pSrcA, uint32_t srcALen, const q7 * @param[in] numPoints is the number of output points to be computed. * @return Returns either ARM_MATH_SUCCESS if the function completed correctly or ARM_MATH_ARGUMENT_ERROR if the requested subset is not in the range [0 srcALen+srcBLen-2]. */ -arm_status arm_conv_partial_q7(const q7_t *pSrcA, uint32_t srcALen, const q7_t *pSrcB, - uint32_t srcBLen, q7_t *pDst, uint32_t firstIndex, - uint32_t numPoints); + arm_status arm_conv_partial_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + uint32_t firstIndex, + uint32_t numPoints); -/** + + /** * @brief Instance structure for the Q15 FIR decimator. */ -typedef struct { - uint8_t M; /**< decimation factor. */ - uint16_t numTaps; /**< number of coefficients in the filter. */ - const q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - q15_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ -} arm_fir_decimate_instance_q15; + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + const q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + } arm_fir_decimate_instance_q15; -/** + /** * @brief Instance structure for the Q31 FIR decimator. */ -typedef struct { - uint8_t M; /**< decimation factor. */ - uint16_t numTaps; /**< number of coefficients in the filter. */ - const q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - q31_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ -} arm_fir_decimate_instance_q31; + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + const q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + } arm_fir_decimate_instance_q31; /** - @brief Instance structure for floating-point FIR decimator. + @brief Instance structure for single precision floating-point FIR decimator. */ -typedef struct { - uint8_t M; /**< decimation factor. */ - uint16_t numTaps; /**< number of coefficients in the filter. */ - const float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - float32_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ -} arm_fir_decimate_instance_f32; - -/** +typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + const float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + } arm_fir_decimate_instance_f32; + + /** + @brief Instance structure for double precision floating-point FIR decimator. + */ + typedef struct + { + uint8_t M; /**< decimation factor. */ + uint16_t numTaps; /**< number of coefficients in the filter. */ + const float64_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + float64_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + } arm_fir_decimate_instance_f64; + + /** @brief Processing function for floating-point FIR decimator. @param[in] S points to an instance of the floating-point FIR decimator structure @param[in] pSrc points to the block of input data @param[out] pDst points to the block of output data @param[in] blockSize number of samples to process */ -void arm_fir_decimate_f32(const arm_fir_decimate_instance_f32 *S, const float32_t *pSrc, - float32_t *pDst, uint32_t blockSize); + void arm_fir_decimate_f64( + const arm_fir_decimate_instance_f64 * S, + const float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize); + + + /** + @brief Initialization function for the floating-point FIR decimator. + @param[in,out] S points to an instance of the floating-point FIR decimator structure + @param[in] numTaps number of coefficients in the filter + @param[in] M decimation factor + @param[in] pCoeffs points to the filter coefficients + @param[in] pState points to the state buffer + @param[in] blockSize number of input samples to process per call + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_LENGTH_ERROR : blockSize is not a multiple of M + */ + arm_status arm_fir_decimate_init_f64( + arm_fir_decimate_instance_f64 * S, + uint16_t numTaps, + uint8_t M, + const float64_t * pCoeffs, + float64_t * pState, + uint32_t blockSize); + + + /** + @brief Processing function for floating-point FIR decimator. + @param[in] S points to an instance of the floating-point FIR decimator structure + @param[in] pSrc points to the block of input data + @param[out] pDst points to the block of output data + @param[in] blockSize number of samples to process + */ +void arm_fir_decimate_f32( + const arm_fir_decimate_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + /** @brief Initialization function for the floating-point FIR decimator. @@ -668,31 +902,44 @@ void arm_fir_decimate_f32(const arm_fir_decimate_instance_f32 *S, const float32_ - \ref ARM_MATH_SUCCESS : Operation successful - \ref ARM_MATH_LENGTH_ERROR : blockSize is not a multiple of M */ -arm_status arm_fir_decimate_init_f32(arm_fir_decimate_instance_f32 *S, uint16_t numTaps, uint8_t M, - const float32_t *pCoeffs, float32_t *pState, - uint32_t blockSize); +arm_status arm_fir_decimate_init_f32( + arm_fir_decimate_instance_f32 * S, + uint16_t numTaps, + uint8_t M, + const float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); -/** + + /** * @brief Processing function for the Q15 FIR decimator. * @param[in] S points to an instance of the Q15 FIR decimator structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_decimate_q15(const arm_fir_decimate_instance_q15 *S, const q15_t *pSrc, q15_t *pDst, - uint32_t blockSize); + void arm_fir_decimate_q15( + const arm_fir_decimate_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Processing function for the Q15 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. * @param[in] S points to an instance of the Q15 FIR decimator structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_decimate_fast_q15(const arm_fir_decimate_instance_q15 *S, const q15_t *pSrc, - q15_t *pDst, uint32_t blockSize); + void arm_fir_decimate_fast_q15( + const arm_fir_decimate_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the Q15 FIR decimator. * @param[in,out] S points to an instance of the Q15 FIR decimator structure. * @param[in] numTaps number of coefficients in the filter. @@ -703,30 +950,43 @@ void arm_fir_decimate_fast_q15(const arm_fir_decimate_instance_q15 *S, const q15 * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if * blockSize is not a multiple of M. */ -arm_status arm_fir_decimate_init_q15(arm_fir_decimate_instance_q15 *S, uint16_t numTaps, uint8_t M, - const q15_t *pCoeffs, q15_t *pState, uint32_t blockSize); + arm_status arm_fir_decimate_init_q15( + arm_fir_decimate_instance_q15 * S, + uint16_t numTaps, + uint8_t M, + const q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); -/** + + /** * @brief Processing function for the Q31 FIR decimator. * @param[in] S points to an instance of the Q31 FIR decimator structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_decimate_q31(const arm_fir_decimate_instance_q31 *S, const q31_t *pSrc, q31_t *pDst, - uint32_t blockSize); + void arm_fir_decimate_q31( + const arm_fir_decimate_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + /** * @brief Processing function for the Q31 FIR decimator (fast variant) for Cortex-M3 and Cortex-M4. * @param[in] S points to an instance of the Q31 FIR decimator structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_decimate_fast_q31(const arm_fir_decimate_instance_q31 *S, const q31_t *pSrc, - q31_t *pDst, uint32_t blockSize); + void arm_fir_decimate_fast_q31( + const arm_fir_decimate_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the Q31 FIR decimator. * @param[in,out] S points to an instance of the Q31 FIR decimator structure. * @param[in] numTaps number of coefficients in the filter. @@ -737,56 +997,64 @@ void arm_fir_decimate_fast_q31(const arm_fir_decimate_instance_q31 *S, const q31 * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if * blockSize is not a multiple of M. */ -arm_status arm_fir_decimate_init_q31(arm_fir_decimate_instance_q31 *S, uint16_t numTaps, uint8_t M, - const q31_t *pCoeffs, q31_t *pState, uint32_t blockSize); + arm_status arm_fir_decimate_init_q31( + arm_fir_decimate_instance_q31 * S, + uint16_t numTaps, + uint8_t M, + const q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); -/** + + /** * @brief Instance structure for the Q15 FIR interpolator. */ -typedef struct { - uint8_t L; /**< upsample factor. */ - uint16_t phaseLength; /**< length of each polyphase filter component. */ - const q15_t - *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ - q15_t * - pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ -} arm_fir_interpolate_instance_q15; + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + const q15_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + q15_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ + } arm_fir_interpolate_instance_q15; -/** + /** * @brief Instance structure for the Q31 FIR interpolator. */ -typedef struct { - uint8_t L; /**< upsample factor. */ - uint16_t phaseLength; /**< length of each polyphase filter component. */ - const q31_t - *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ - q31_t * - pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ -} arm_fir_interpolate_instance_q31; + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + const q31_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + q31_t *pState; /**< points to the state variable array. The array is of length blockSize+phaseLength-1. */ + } arm_fir_interpolate_instance_q31; -/** + /** * @brief Instance structure for the floating-point FIR interpolator. */ -typedef struct { - uint8_t L; /**< upsample factor. */ - uint16_t phaseLength; /**< length of each polyphase filter component. */ - const float32_t - *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ - float32_t * - pState; /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */ -} arm_fir_interpolate_instance_f32; + typedef struct + { + uint8_t L; /**< upsample factor. */ + uint16_t phaseLength; /**< length of each polyphase filter component. */ + const float32_t *pCoeffs; /**< points to the coefficient array. The array is of length L*phaseLength. */ + float32_t *pState; /**< points to the state variable array. The array is of length phaseLength+numTaps-1. */ + } arm_fir_interpolate_instance_f32; -/** + + /** * @brief Processing function for the Q15 FIR interpolator. * @param[in] S points to an instance of the Q15 FIR interpolator structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_interpolate_q15(const arm_fir_interpolate_instance_q15 *S, const q15_t *pSrc, - q15_t *pDst, uint32_t blockSize); + void arm_fir_interpolate_q15( + const arm_fir_interpolate_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the Q15 FIR interpolator. * @param[in,out] S points to an instance of the Q15 FIR interpolator structure. * @param[in] L upsample factor. @@ -797,21 +1065,30 @@ void arm_fir_interpolate_q15(const arm_fir_interpolate_instance_q15 *S, const q1 * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if * the filter length numTaps is not a multiple of the interpolation factor L. */ -arm_status arm_fir_interpolate_init_q15(arm_fir_interpolate_instance_q15 *S, uint8_t L, - uint16_t numTaps, const q15_t *pCoeffs, q15_t *pState, - uint32_t blockSize); + arm_status arm_fir_interpolate_init_q15( + arm_fir_interpolate_instance_q15 * S, + uint8_t L, + uint16_t numTaps, + const q15_t * pCoeffs, + q15_t * pState, + uint32_t blockSize); -/** + + /** * @brief Processing function for the Q31 FIR interpolator. * @param[in] S points to an instance of the Q15 FIR interpolator structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_interpolate_q31(const arm_fir_interpolate_instance_q31 *S, const q31_t *pSrc, - q31_t *pDst, uint32_t blockSize); + void arm_fir_interpolate_q31( + const arm_fir_interpolate_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the Q31 FIR interpolator. * @param[in,out] S points to an instance of the Q31 FIR interpolator structure. * @param[in] L upsample factor. @@ -822,21 +1099,30 @@ void arm_fir_interpolate_q31(const arm_fir_interpolate_instance_q31 *S, const q3 * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if * the filter length numTaps is not a multiple of the interpolation factor L. */ -arm_status arm_fir_interpolate_init_q31(arm_fir_interpolate_instance_q31 *S, uint8_t L, - uint16_t numTaps, const q31_t *pCoeffs, q31_t *pState, - uint32_t blockSize); + arm_status arm_fir_interpolate_init_q31( + arm_fir_interpolate_instance_q31 * S, + uint8_t L, + uint16_t numTaps, + const q31_t * pCoeffs, + q31_t * pState, + uint32_t blockSize); -/** + + /** * @brief Processing function for the floating-point FIR interpolator. * @param[in] S points to an instance of the floating-point FIR interpolator structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_interpolate_f32(const arm_fir_interpolate_instance_f32 *S, const float32_t *pSrc, - float32_t *pDst, uint32_t blockSize); + void arm_fir_interpolate_f32( + const arm_fir_interpolate_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the floating-point FIR interpolator. * @param[in,out] S points to an instance of the floating-point FIR interpolator structure. * @param[in] L upsample factor. @@ -847,217 +1133,268 @@ void arm_fir_interpolate_f32(const arm_fir_interpolate_instance_f32 *S, const fl * @return The function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_LENGTH_ERROR if * the filter length numTaps is not a multiple of the interpolation factor L. */ -arm_status arm_fir_interpolate_init_f32(arm_fir_interpolate_instance_f32 *S, uint8_t L, - uint16_t numTaps, const float32_t *pCoeffs, - float32_t *pState, uint32_t blockSize); + arm_status arm_fir_interpolate_init_f32( + arm_fir_interpolate_instance_f32 * S, + uint8_t L, + uint16_t numTaps, + const float32_t * pCoeffs, + float32_t * pState, + uint32_t blockSize); -/** + + /** * @brief Instance structure for the high precision Q31 Biquad cascade filter. */ -typedef struct { - uint8_t - numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - q63_t * - pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ - const q31_t - *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ - uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */ -} arm_biquad_cas_df1_32x64_ins_q31; + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + q63_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ + const q31_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + uint8_t postShift; /**< additional shift, in bits, applied to each output sample. */ + } arm_biquad_cas_df1_32x64_ins_q31; -/** + + /** * @param[in] S points to an instance of the high precision Q31 Biquad cascade filter structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of samples to process. */ -void arm_biquad_cas_df1_32x64_q31(const arm_biquad_cas_df1_32x64_ins_q31 *S, const q31_t *pSrc, - q31_t *pDst, uint32_t blockSize); + void arm_biquad_cas_df1_32x64_q31( + const arm_biquad_cas_df1_32x64_ins_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @param[in,out] S points to an instance of the high precision Q31 Biquad cascade filter structure. * @param[in] numStages number of 2nd order stages in the filter. * @param[in] pCoeffs points to the filter coefficients. * @param[in] pState points to the state buffer. * @param[in] postShift shift to be applied to the output. Varies according to the coefficients format */ -void arm_biquad_cas_df1_32x64_init_q31(arm_biquad_cas_df1_32x64_ins_q31 *S, uint8_t numStages, - const q31_t *pCoeffs, q63_t *pState, uint8_t postShift); + void arm_biquad_cas_df1_32x64_init_q31( + arm_biquad_cas_df1_32x64_ins_q31 * S, + uint8_t numStages, + const q31_t * pCoeffs, + q63_t * pState, + uint8_t postShift); -/** + + /** * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. */ -typedef struct { - uint8_t - numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float32_t * - pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ - const float32_t - *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ -} arm_biquad_cascade_df2T_instance_f32; + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ + const float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_df2T_instance_f32; -/** + /** * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. */ -typedef struct { - uint8_t - numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float32_t * - pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ - const float32_t - *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ -} arm_biquad_cascade_stereo_df2T_instance_f32; + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float32_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ + const float32_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_stereo_df2T_instance_f32; -/** + /** * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. */ -typedef struct { - uint8_t - numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float64_t * - pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ - const float64_t - *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ -} arm_biquad_cascade_df2T_instance_f64; + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float64_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ + const float64_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_df2T_instance_f64; -/** + + /** * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. * @param[in] S points to an instance of the filter data structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_df2T_f32(const arm_biquad_cascade_df2T_instance_f32 *S, - const float32_t *pSrc, float32_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_df2T_f32( + const arm_biquad_cascade_df2T_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. 2 channels * @param[in] S points to an instance of the filter data structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_stereo_df2T_f32(const arm_biquad_cascade_stereo_df2T_instance_f32 *S, - const float32_t *pSrc, float32_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_stereo_df2T_f32( + const arm_biquad_cascade_stereo_df2T_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. * @param[in] S points to an instance of the filter data structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_df2T_f64(const arm_biquad_cascade_df2T_instance_f64 *S, - const float64_t *pSrc, float64_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_df2T_f64( + const arm_biquad_cascade_df2T_instance_f64 * S, + const float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize); -#if defined(ARM_MATH_NEON) + +#if defined(ARM_MATH_NEON) /** @brief Compute new coefficient arrays for use in vectorized filter (Neon only). @param[in] numStages number of 2nd order stages in the filter. @param[in] pCoeffs points to the original filter coefficients. @param[in] pComputedCoeffs points to the new computed coefficients for the vectorized version. - @return none */ -void arm_biquad_cascade_df2T_compute_coefs_f32(uint8_t numStages, const float32_t *pCoeffs, - float32_t *pComputedCoeffs); +void arm_biquad_cascade_df2T_compute_coefs_f32( + uint8_t numStages, + const float32_t * pCoeffs, + float32_t * pComputedCoeffs); #endif -/** + /** * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. * @param[in,out] S points to an instance of the filter data structure. * @param[in] numStages number of 2nd order stages in the filter. * @param[in] pCoeffs points to the filter coefficients. * @param[in] pState points to the state buffer. */ -void arm_biquad_cascade_df2T_init_f32(arm_biquad_cascade_df2T_instance_f32 *S, uint8_t numStages, - const float32_t *pCoeffs, float32_t *pState); + void arm_biquad_cascade_df2T_init_f32( + arm_biquad_cascade_df2T_instance_f32 * S, + uint8_t numStages, + const float32_t * pCoeffs, + float32_t * pState); -/** + + /** * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. * @param[in,out] S points to an instance of the filter data structure. * @param[in] numStages number of 2nd order stages in the filter. * @param[in] pCoeffs points to the filter coefficients. * @param[in] pState points to the state buffer. */ -void arm_biquad_cascade_stereo_df2T_init_f32(arm_biquad_cascade_stereo_df2T_instance_f32 *S, - uint8_t numStages, const float32_t *pCoeffs, - float32_t *pState); + void arm_biquad_cascade_stereo_df2T_init_f32( + arm_biquad_cascade_stereo_df2T_instance_f32 * S, + uint8_t numStages, + const float32_t * pCoeffs, + float32_t * pState); -/** + + /** * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. * @param[in,out] S points to an instance of the filter data structure. * @param[in] numStages number of 2nd order stages in the filter. * @param[in] pCoeffs points to the filter coefficients. * @param[in] pState points to the state buffer. */ -void arm_biquad_cascade_df2T_init_f64(arm_biquad_cascade_df2T_instance_f64 *S, uint8_t numStages, - const float64_t *pCoeffs, float64_t *pState); + void arm_biquad_cascade_df2T_init_f64( + arm_biquad_cascade_df2T_instance_f64 * S, + uint8_t numStages, + const float64_t * pCoeffs, + float64_t * pState); -/** + + /** * @brief Instance structure for the Q15 FIR lattice filter. */ -typedef struct { - uint16_t numStages; /**< number of filter stages. */ - q15_t *pState; /**< points to the state variable array. The array is of length numStages. */ - const q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ -} arm_fir_lattice_instance_q15; + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + q15_t *pState; /**< points to the state variable array. The array is of length numStages. */ + const q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_q15; -/** + /** * @brief Instance structure for the Q31 FIR lattice filter. */ -typedef struct { - uint16_t numStages; /**< number of filter stages. */ - q31_t *pState; /**< points to the state variable array. The array is of length numStages. */ - const q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ -} arm_fir_lattice_instance_q31; + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + q31_t *pState; /**< points to the state variable array. The array is of length numStages. */ + const q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_q31; -/** + /** * @brief Instance structure for the floating-point FIR lattice filter. */ -typedef struct { - uint16_t numStages; /**< number of filter stages. */ - float32_t *pState; /**< points to the state variable array. The array is of length numStages. */ - const float32_t - *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ -} arm_fir_lattice_instance_f32; + typedef struct + { + uint16_t numStages; /**< number of filter stages. */ + float32_t *pState; /**< points to the state variable array. The array is of length numStages. */ + const float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numStages. */ + } arm_fir_lattice_instance_f32; -/** + + /** * @brief Initialization function for the Q15 FIR lattice filter. * @param[in] S points to an instance of the Q15 FIR lattice structure. * @param[in] numStages number of filter stages. * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. * @param[in] pState points to the state buffer. The array is of length numStages. */ -void arm_fir_lattice_init_q15(arm_fir_lattice_instance_q15 *S, uint16_t numStages, - const q15_t *pCoeffs, q15_t *pState); + void arm_fir_lattice_init_q15( + arm_fir_lattice_instance_q15 * S, + uint16_t numStages, + const q15_t * pCoeffs, + q15_t * pState); -/** + + /** * @brief Processing function for the Q15 FIR lattice filter. * @param[in] S points to an instance of the Q15 FIR lattice structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_fir_lattice_q15(const arm_fir_lattice_instance_q15 *S, const q15_t *pSrc, q15_t *pDst, - uint32_t blockSize); + void arm_fir_lattice_q15( + const arm_fir_lattice_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the Q31 FIR lattice filter. * @param[in] S points to an instance of the Q31 FIR lattice structure. * @param[in] numStages number of filter stages. * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. * @param[in] pState points to the state buffer. The array is of length numStages. */ -void arm_fir_lattice_init_q31(arm_fir_lattice_instance_q31 *S, uint16_t numStages, - const q31_t *pCoeffs, q31_t *pState); + void arm_fir_lattice_init_q31( + arm_fir_lattice_instance_q31 * S, + uint16_t numStages, + const q31_t * pCoeffs, + q31_t * pState); -/** + + /** * @brief Processing function for the Q31 FIR lattice filter. * @param[in] S points to an instance of the Q31 FIR lattice structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of samples to process. */ -void arm_fir_lattice_q31(const arm_fir_lattice_instance_q31 *S, const q31_t *pSrc, q31_t *pDst, - uint32_t blockSize); + void arm_fir_lattice_q31( + const arm_fir_lattice_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + /** * @brief Initialization function for the floating-point FIR lattice filter. @@ -1066,69 +1403,76 @@ void arm_fir_lattice_q31(const arm_fir_lattice_instance_q31 *S, const q31_t *pSr * @param[in] pCoeffs points to the coefficient buffer. The array is of length numStages. * @param[in] pState points to the state buffer. The array is of length numStages. */ -void arm_fir_lattice_init_f32(arm_fir_lattice_instance_f32 *S, uint16_t numStages, - const float32_t *pCoeffs, float32_t *pState); + void arm_fir_lattice_init_f32( + arm_fir_lattice_instance_f32 * S, + uint16_t numStages, + const float32_t * pCoeffs, + float32_t * pState); -/** + + /** * @brief Processing function for the floating-point FIR lattice filter. * @param[in] S points to an instance of the floating-point FIR lattice structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of samples to process. */ -void arm_fir_lattice_f32(const arm_fir_lattice_instance_f32 *S, const float32_t *pSrc, - float32_t *pDst, uint32_t blockSize); + void arm_fir_lattice_f32( + const arm_fir_lattice_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Instance structure for the Q15 IIR lattice filter. */ -typedef struct { - uint16_t numStages; /**< number of stages in the filter. */ - q15_t * - pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ - q15_t * - pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ - q15_t * - pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ -} arm_iir_lattice_instance_q15; + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + q15_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + q15_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_q15; -/** + /** * @brief Instance structure for the Q31 IIR lattice filter. */ -typedef struct { - uint16_t numStages; /**< number of stages in the filter. */ - q31_t * - pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ - q31_t * - pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ - q31_t * - pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ -} arm_iir_lattice_instance_q31; + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + q31_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + q31_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_q31; -/** + /** * @brief Instance structure for the floating-point IIR lattice filter. */ -typedef struct { - uint16_t numStages; /**< number of stages in the filter. */ - float32_t * - pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ - float32_t * - pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ - float32_t * - pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ -} arm_iir_lattice_instance_f32; + typedef struct + { + uint16_t numStages; /**< number of stages in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numStages+blockSize. */ + float32_t *pkCoeffs; /**< points to the reflection coefficient array. The array is of length numStages. */ + float32_t *pvCoeffs; /**< points to the ladder coefficient array. The array is of length numStages+1. */ + } arm_iir_lattice_instance_f32; -/** + + /** * @brief Processing function for the floating-point IIR lattice filter. * @param[in] S points to an instance of the floating-point IIR lattice structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_iir_lattice_f32(const arm_iir_lattice_instance_f32 *S, const float32_t *pSrc, - float32_t *pDst, uint32_t blockSize); + void arm_iir_lattice_f32( + const arm_iir_lattice_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the floating-point IIR lattice filter. * @param[in] S points to an instance of the floating-point IIR lattice structure. * @param[in] numStages number of stages in the filter. @@ -1137,21 +1481,30 @@ void arm_iir_lattice_f32(const arm_iir_lattice_instance_f32 *S, const float32_t * @param[in] pState points to the state buffer. The array is of length numStages+blockSize-1. * @param[in] blockSize number of samples to process. */ -void arm_iir_lattice_init_f32(arm_iir_lattice_instance_f32 *S, uint16_t numStages, - float32_t *pkCoeffs, float32_t *pvCoeffs, float32_t *pState, - uint32_t blockSize); + void arm_iir_lattice_init_f32( + arm_iir_lattice_instance_f32 * S, + uint16_t numStages, + float32_t * pkCoeffs, + float32_t * pvCoeffs, + float32_t * pState, + uint32_t blockSize); -/** + + /** * @brief Processing function for the Q31 IIR lattice filter. * @param[in] S points to an instance of the Q31 IIR lattice structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_iir_lattice_q31(const arm_iir_lattice_instance_q31 *S, const q31_t *pSrc, q31_t *pDst, - uint32_t blockSize); + void arm_iir_lattice_q31( + const arm_iir_lattice_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the Q31 IIR lattice filter. * @param[in] S points to an instance of the Q31 IIR lattice structure. * @param[in] numStages number of stages in the filter. @@ -1160,18 +1513,28 @@ void arm_iir_lattice_q31(const arm_iir_lattice_instance_q31 *S, const q31_t *pSr * @param[in] pState points to the state buffer. The array is of length numStages+blockSize. * @param[in] blockSize number of samples to process. */ -void arm_iir_lattice_init_q31(arm_iir_lattice_instance_q31 *S, uint16_t numStages, q31_t *pkCoeffs, - q31_t *pvCoeffs, q31_t *pState, uint32_t blockSize); + void arm_iir_lattice_init_q31( + arm_iir_lattice_instance_q31 * S, + uint16_t numStages, + q31_t * pkCoeffs, + q31_t * pvCoeffs, + q31_t * pState, + uint32_t blockSize); -/** + + /** * @brief Processing function for the Q15 IIR lattice filter. * @param[in] S points to an instance of the Q15 IIR lattice structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_iir_lattice_q15(const arm_iir_lattice_instance_q15 *S, const q15_t *pSrc, q15_t *pDst, - uint32_t blockSize); + void arm_iir_lattice_q15( + const arm_iir_lattice_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + /** * @brief Initialization function for the Q15 IIR lattice filter. @@ -1182,21 +1545,28 @@ void arm_iir_lattice_q15(const arm_iir_lattice_instance_q15 *S, const q15_t *pSr * @param[in] pState points to state buffer. The array is of length numStages+blockSize. * @param[in] blockSize number of samples to process per call. */ -void arm_iir_lattice_init_q15(arm_iir_lattice_instance_q15 *S, uint16_t numStages, q15_t *pkCoeffs, - q15_t *pvCoeffs, q15_t *pState, uint32_t blockSize); + void arm_iir_lattice_init_q15( + arm_iir_lattice_instance_q15 * S, + uint16_t numStages, + q15_t * pkCoeffs, + q15_t * pvCoeffs, + q15_t * pState, + uint32_t blockSize); -/** + + /** * @brief Instance structure for the floating-point LMS filter. */ -typedef struct { - uint16_t numTaps; /**< number of coefficients in the filter. */ - float32_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - float32_t mu; /**< step size that controls filter coefficient updates. */ -} arm_lms_instance_f32; + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + float32_t mu; /**< step size that controls filter coefficient updates. */ + } arm_lms_instance_f32; -/** + + /** * @brief Processing function for floating-point LMS filter. * @param[in] S points to an instance of the floating-point LMS filter structure. * @param[in] pSrc points to the block of input data. @@ -1205,10 +1575,16 @@ typedef struct { * @param[out] pErr points to the block of error data. * @param[in] blockSize number of samples to process. */ -void arm_lms_f32(const arm_lms_instance_f32 *S, const float32_t *pSrc, float32_t *pRef, - float32_t *pOut, float32_t *pErr, uint32_t blockSize); + void arm_lms_f32( + const arm_lms_instance_f32 * S, + const float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize); -/** + + /** * @brief Initialization function for floating-point LMS filter. * @param[in] S points to an instance of the floating-point LMS filter structure. * @param[in] numTaps number of filter coefficients. @@ -1217,22 +1593,29 @@ void arm_lms_f32(const arm_lms_instance_f32 *S, const float32_t *pSrc, float32_t * @param[in] mu step size that controls filter coefficient updates. * @param[in] blockSize number of samples to process. */ -void arm_lms_init_f32(arm_lms_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs, - float32_t *pState, float32_t mu, uint32_t blockSize); + void arm_lms_init_f32( + arm_lms_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize); -/** + + /** * @brief Instance structure for the Q15 LMS filter. */ -typedef struct { - uint16_t numTaps; /**< number of coefficients in the filter. */ - q15_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - q15_t mu; /**< step size that controls filter coefficient updates. */ - uint32_t postShift; /**< bit shift applied to coefficients. */ -} arm_lms_instance_q15; + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q15_t mu; /**< step size that controls filter coefficient updates. */ + uint32_t postShift; /**< bit shift applied to coefficients. */ + } arm_lms_instance_q15; -/** + + /** * @brief Initialization function for the Q15 LMS filter. * @param[in] S points to an instance of the Q15 LMS filter structure. * @param[in] numTaps number of filter coefficients. @@ -1242,10 +1625,17 @@ typedef struct { * @param[in] blockSize number of samples to process. * @param[in] postShift bit shift applied to coefficients. */ -void arm_lms_init_q15(arm_lms_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, q15_t *pState, - q15_t mu, uint32_t blockSize, uint32_t postShift); + void arm_lms_init_q15( + arm_lms_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint32_t postShift); -/** + + /** * @brief Processing function for Q15 LMS filter. * @param[in] S points to an instance of the Q15 LMS filter structure. * @param[in] pSrc points to the block of input data. @@ -1254,22 +1644,29 @@ void arm_lms_init_q15(arm_lms_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, * @param[out] pErr points to the block of error data. * @param[in] blockSize number of samples to process. */ -void arm_lms_q15(const arm_lms_instance_q15 *S, const q15_t *pSrc, q15_t *pRef, q15_t *pOut, - q15_t *pErr, uint32_t blockSize); + void arm_lms_q15( + const arm_lms_instance_q15 * S, + const q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize); -/** + + /** * @brief Instance structure for the Q31 LMS filter. */ -typedef struct { - uint16_t numTaps; /**< number of coefficients in the filter. */ - q31_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - q31_t mu; /**< step size that controls filter coefficient updates. */ - uint32_t postShift; /**< bit shift applied to coefficients. */ -} arm_lms_instance_q31; + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q31_t mu; /**< step size that controls filter coefficient updates. */ + uint32_t postShift; /**< bit shift applied to coefficients. */ + } arm_lms_instance_q31; -/** + + /** * @brief Processing function for Q31 LMS filter. * @param[in] S points to an instance of the Q15 LMS filter structure. * @param[in] pSrc points to the block of input data. @@ -1278,10 +1675,16 @@ typedef struct { * @param[out] pErr points to the block of error data. * @param[in] blockSize number of samples to process. */ -void arm_lms_q31(const arm_lms_instance_q31 *S, const q31_t *pSrc, q31_t *pRef, q31_t *pOut, - q31_t *pErr, uint32_t blockSize); + void arm_lms_q31( + const arm_lms_instance_q31 * S, + const q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize); -/** + + /** * @brief Initialization function for Q31 LMS filter. * @param[in] S points to an instance of the Q31 LMS filter structure. * @param[in] numTaps number of filter coefficients. @@ -1291,23 +1694,31 @@ void arm_lms_q31(const arm_lms_instance_q31 *S, const q31_t *pSrc, q31_t *pRef, * @param[in] blockSize number of samples to process. * @param[in] postShift bit shift applied to coefficients. */ -void arm_lms_init_q31(arm_lms_instance_q31 *S, uint16_t numTaps, q31_t *pCoeffs, q31_t *pState, - q31_t mu, uint32_t blockSize, uint32_t postShift); + void arm_lms_init_q31( + arm_lms_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint32_t postShift); -/** + + /** * @brief Instance structure for the floating-point normalized LMS filter. */ -typedef struct { - uint16_t numTaps; /**< number of coefficients in the filter. */ - float32_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - float32_t mu; /**< step size that control filter coefficient updates. */ - float32_t energy; /**< saves previous frame energy. */ - float32_t x0; /**< saves previous input sample. */ -} arm_lms_norm_instance_f32; + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + float32_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + float32_t mu; /**< step size that control filter coefficient updates. */ + float32_t energy; /**< saves previous frame energy. */ + float32_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_f32; -/** + + /** * @brief Processing function for floating-point normalized LMS filter. * @param[in] S points to an instance of the floating-point normalized LMS filter structure. * @param[in] pSrc points to the block of input data. @@ -1316,10 +1727,16 @@ typedef struct { * @param[out] pErr points to the block of error data. * @param[in] blockSize number of samples to process. */ -void arm_lms_norm_f32(arm_lms_norm_instance_f32 *S, const float32_t *pSrc, float32_t *pRef, - float32_t *pOut, float32_t *pErr, uint32_t blockSize); + void arm_lms_norm_f32( + arm_lms_norm_instance_f32 * S, + const float32_t * pSrc, + float32_t * pRef, + float32_t * pOut, + float32_t * pErr, + uint32_t blockSize); -/** + + /** * @brief Initialization function for floating-point normalized LMS filter. * @param[in] S points to an instance of the floating-point LMS filter structure. * @param[in] numTaps number of filter coefficients. @@ -1328,25 +1745,32 @@ void arm_lms_norm_f32(arm_lms_norm_instance_f32 *S, const float32_t *pSrc, float * @param[in] mu step size that controls filter coefficient updates. * @param[in] blockSize number of samples to process. */ -void arm_lms_norm_init_f32(arm_lms_norm_instance_f32 *S, uint16_t numTaps, float32_t *pCoeffs, - float32_t *pState, float32_t mu, uint32_t blockSize); + void arm_lms_norm_init_f32( + arm_lms_norm_instance_f32 * S, + uint16_t numTaps, + float32_t * pCoeffs, + float32_t * pState, + float32_t mu, + uint32_t blockSize); -/** + + /** * @brief Instance structure for the Q31 normalized LMS filter. */ -typedef struct { - uint16_t numTaps; /**< number of coefficients in the filter. */ - q31_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - q31_t mu; /**< step size that controls filter coefficient updates. */ - uint8_t postShift; /**< bit shift applied to coefficients. */ - const q31_t *recipTable; /**< points to the reciprocal initial value table. */ - q31_t energy; /**< saves previous frame energy. */ - q31_t x0; /**< saves previous input sample. */ -} arm_lms_norm_instance_q31; + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + q31_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q31_t mu; /**< step size that controls filter coefficient updates. */ + uint8_t postShift; /**< bit shift applied to coefficients. */ + const q31_t *recipTable; /**< points to the reciprocal initial value table. */ + q31_t energy; /**< saves previous frame energy. */ + q31_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_q31; -/** + + /** * @brief Processing function for Q31 normalized LMS filter. * @param[in] S points to an instance of the Q31 normalized LMS filter structure. * @param[in] pSrc points to the block of input data. @@ -1355,10 +1779,16 @@ typedef struct { * @param[out] pErr points to the block of error data. * @param[in] blockSize number of samples to process. */ -void arm_lms_norm_q31(arm_lms_norm_instance_q31 *S, const q31_t *pSrc, q31_t *pRef, q31_t *pOut, - q31_t *pErr, uint32_t blockSize); + void arm_lms_norm_q31( + arm_lms_norm_instance_q31 * S, + const q31_t * pSrc, + q31_t * pRef, + q31_t * pOut, + q31_t * pErr, + uint32_t blockSize); -/** + + /** * @brief Initialization function for Q31 normalized LMS filter. * @param[in] S points to an instance of the Q31 normalized LMS filter structure. * @param[in] numTaps number of filter coefficients. @@ -1368,25 +1798,33 @@ void arm_lms_norm_q31(arm_lms_norm_instance_q31 *S, const q31_t *pSrc, q31_t *pR * @param[in] blockSize number of samples to process. * @param[in] postShift bit shift applied to coefficients. */ -void arm_lms_norm_init_q31(arm_lms_norm_instance_q31 *S, uint16_t numTaps, q31_t *pCoeffs, - q31_t *pState, q31_t mu, uint32_t blockSize, uint8_t postShift); + void arm_lms_norm_init_q31( + arm_lms_norm_instance_q31 * S, + uint16_t numTaps, + q31_t * pCoeffs, + q31_t * pState, + q31_t mu, + uint32_t blockSize, + uint8_t postShift); -/** + + /** * @brief Instance structure for the Q15 normalized LMS filter. */ -typedef struct { - uint16_t numTaps; /**< Number of coefficients in the filter. */ - q15_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ - q15_t mu; /**< step size that controls filter coefficient updates. */ - uint8_t postShift; /**< bit shift applied to coefficients. */ - const q15_t *recipTable; /**< Points to the reciprocal initial value table. */ - q15_t energy; /**< saves previous frame energy. */ - q15_t x0; /**< saves previous input sample. */ -} arm_lms_norm_instance_q15; + typedef struct + { + uint16_t numTaps; /**< Number of coefficients in the filter. */ + q15_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + q15_t mu; /**< step size that controls filter coefficient updates. */ + uint8_t postShift; /**< bit shift applied to coefficients. */ + const q15_t *recipTable; /**< Points to the reciprocal initial value table. */ + q15_t energy; /**< saves previous frame energy. */ + q15_t x0; /**< saves previous input sample. */ + } arm_lms_norm_instance_q15; -/** + + /** * @brief Processing function for Q15 normalized LMS filter. * @param[in] S points to an instance of the Q15 normalized LMS filter structure. * @param[in] pSrc points to the block of input data. @@ -1395,10 +1833,16 @@ typedef struct { * @param[out] pErr points to the block of error data. * @param[in] blockSize number of samples to process. */ -void arm_lms_norm_q15(arm_lms_norm_instance_q15 *S, const q15_t *pSrc, q15_t *pRef, q15_t *pOut, - q15_t *pErr, uint32_t blockSize); + void arm_lms_norm_q15( + arm_lms_norm_instance_q15 * S, + const q15_t * pSrc, + q15_t * pRef, + q15_t * pOut, + q15_t * pErr, + uint32_t blockSize); -/** + + /** * @brief Initialization function for Q15 normalized LMS filter. * @param[in] S points to an instance of the Q15 normalized LMS filter structure. * @param[in] numTaps number of filter coefficients. @@ -1408,10 +1852,17 @@ void arm_lms_norm_q15(arm_lms_norm_instance_q15 *S, const q15_t *pSrc, q15_t *pR * @param[in] blockSize number of samples to process. * @param[in] postShift bit shift applied to coefficients. */ -void arm_lms_norm_init_q15(arm_lms_norm_instance_q15 *S, uint16_t numTaps, q15_t *pCoeffs, - q15_t *pState, q15_t mu, uint32_t blockSize, uint8_t postShift); + void arm_lms_norm_init_q15( + arm_lms_norm_instance_q15 * S, + uint16_t numTaps, + q15_t * pCoeffs, + q15_t * pState, + q15_t mu, + uint32_t blockSize, + uint8_t postShift); -/** + + /** * @brief Correlation of floating-point sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -1419,10 +1870,15 @@ void arm_lms_norm_init_q15(arm_lms_norm_instance_q15 *S, uint16_t numTaps, q15_t * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. */ -void arm_correlate_f32(const float32_t *pSrcA, uint32_t srcALen, const float32_t *pSrcB, - uint32_t srcBLen, float32_t *pDst); + void arm_correlate_f32( + const float32_t * pSrcA, + uint32_t srcALen, + const float32_t * pSrcB, + uint32_t srcBLen, + float32_t * pDst); -/** + + /** * @brief Correlation of floating-point sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -1430,8 +1886,13 @@ void arm_correlate_f32(const float32_t *pSrcA, uint32_t srcALen, const float32_t * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. */ -void arm_correlate_f64(const float64_t *pSrcA, uint32_t srcALen, const float64_t *pSrcB, - uint32_t srcBLen, float64_t *pDst); + void arm_correlate_f64( + const float64_t * pSrcA, + uint32_t srcALen, + const float64_t * pSrcB, + uint32_t srcBLen, + float64_t * pDst); + /** @brief Correlation of Q15 sequences @@ -1442,8 +1903,14 @@ void arm_correlate_f64(const float64_t *pSrcA, uint32_t srcALen, const float64_t @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. @param[in] pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. */ -void arm_correlate_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, - uint32_t srcBLen, q15_t *pDst, q15_t *pScratch); +void arm_correlate_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch); + /** @brief Correlation of Q15 sequences. @@ -1453,8 +1920,13 @@ void arm_correlate_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pS @param[in] srcBLen length of the second input sequence @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. */ -void arm_correlate_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, uint32_t srcBLen, - q15_t *pDst); + void arm_correlate_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + /** @brief Correlation of Q15 sequences (fast version). @@ -1463,10 +1935,14 @@ void arm_correlate_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, @param[in] pSrcB points to the second input sequence @param[in] srcBLen length of the second input sequence @param[out] pDst points to the location where the output result is written. Length 2 * max(srcALen, srcBLen) - 1. - @return none */ -void arm_correlate_fast_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, - uint32_t srcBLen, q15_t *pDst); +void arm_correlate_fast_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst); + /** @brief Correlation of Q15 sequences (fast version). @@ -1477,10 +1953,16 @@ void arm_correlate_fast_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *p @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. @param[in] pScratch points to scratch buffer of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. */ -void arm_correlate_fast_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_t *pSrcB, - uint32_t srcBLen, q15_t *pDst, q15_t *pScratch); +void arm_correlate_fast_opt_q15( + const q15_t * pSrcA, + uint32_t srcALen, + const q15_t * pSrcB, + uint32_t srcBLen, + q15_t * pDst, + q15_t * pScratch); -/** + + /** * @brief Correlation of Q31 sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -1488,8 +1970,13 @@ void arm_correlate_fast_opt_q15(const q15_t *pSrcA, uint32_t srcALen, const q15_ * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. */ -void arm_correlate_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_t *pSrcB, uint32_t srcBLen, - q31_t *pDst); + void arm_correlate_q31( + const q31_t * pSrcA, + uint32_t srcALen, + const q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); + /** @brief Correlation of Q31 sequences (fast version). @@ -1499,10 +1986,15 @@ void arm_correlate_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_t *pSrcB, @param[in] srcBLen length of the second input sequence @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. */ -void arm_correlate_fast_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_t *pSrcB, - uint32_t srcBLen, q31_t *pDst); +void arm_correlate_fast_q31( + const q31_t * pSrcA, + uint32_t srcALen, + const q31_t * pSrcB, + uint32_t srcBLen, + q31_t * pDst); -/** + + /** * @brief Correlation of Q7 sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -1512,10 +2004,17 @@ void arm_correlate_fast_q31(const q31_t *pSrcA, uint32_t srcALen, const q31_t *p * @param[in] pScratch1 points to scratch buffer(of type q15_t) of size max(srcALen, srcBLen) + 2*min(srcALen, srcBLen) - 2. * @param[in] pScratch2 points to scratch buffer (of type q15_t) of size min(srcALen, srcBLen). */ -void arm_correlate_opt_q7(const q7_t *pSrcA, uint32_t srcALen, const q7_t *pSrcB, uint32_t srcBLen, - q7_t *pDst, q15_t *pScratch1, q15_t *pScratch2); + void arm_correlate_opt_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst, + q15_t * pScratch1, + q15_t * pScratch2); -/** + + /** * @brief Correlation of Q7 sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -1523,61 +2022,68 @@ void arm_correlate_opt_q7(const q7_t *pSrcA, uint32_t srcALen, const q7_t *pSrcB * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. */ -void arm_correlate_q7(const q7_t *pSrcA, uint32_t srcALen, const q7_t *pSrcB, uint32_t srcBLen, - q7_t *pDst); + void arm_correlate_q7( + const q7_t * pSrcA, + uint32_t srcALen, + const q7_t * pSrcB, + uint32_t srcBLen, + q7_t * pDst); -/** + + /** * @brief Instance structure for the floating-point sparse FIR filter. */ -typedef struct { - uint16_t numTaps; /**< number of coefficients in the filter. */ - uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ - float32_t * - pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ - const float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ - int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ -} arm_fir_sparse_instance_f32; - -/** + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + float32_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + const float32_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_f32; + + /** * @brief Instance structure for the Q31 sparse FIR filter. */ -typedef struct { - uint16_t numTaps; /**< number of coefficients in the filter. */ - uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ - q31_t * - pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ - const q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ - int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ -} arm_fir_sparse_instance_q31; - -/** + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q31_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + const q31_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q31; + + /** * @brief Instance structure for the Q15 sparse FIR filter. */ -typedef struct { - uint16_t numTaps; /**< number of coefficients in the filter. */ - uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ - q15_t * - pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ - const q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ - int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ -} arm_fir_sparse_instance_q15; - -/** + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q15_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + const q15_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q15; + + /** * @brief Instance structure for the Q7 sparse FIR filter. */ -typedef struct { - uint16_t numTaps; /**< number of coefficients in the filter. */ - uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ - q7_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ - const q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ - uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ - int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ -} arm_fir_sparse_instance_q7; + typedef struct + { + uint16_t numTaps; /**< number of coefficients in the filter. */ + uint16_t stateIndex; /**< state buffer index. Points to the oldest sample in the state buffer. */ + q7_t *pState; /**< points to the state buffer array. The array is of length maxDelay+blockSize-1. */ + const q7_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps.*/ + uint16_t maxDelay; /**< maximum offset specified by the pTapDelay array. */ + int32_t *pTapDelay; /**< points to the array of delay values. The array is of length numTaps. */ + } arm_fir_sparse_instance_q7; -/** + + /** * @brief Processing function for the floating-point sparse FIR filter. * @param[in] S points to an instance of the floating-point sparse FIR structure. * @param[in] pSrc points to the block of input data. @@ -1585,10 +2091,15 @@ typedef struct { * @param[in] pScratchIn points to a temporary buffer of size blockSize. * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_sparse_f32(arm_fir_sparse_instance_f32 *S, const float32_t *pSrc, float32_t *pDst, - float32_t *pScratchIn, uint32_t blockSize); + void arm_fir_sparse_f32( + arm_fir_sparse_instance_f32 * S, + const float32_t * pSrc, + float32_t * pDst, + float32_t * pScratchIn, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the floating-point sparse FIR filter. * @param[in,out] S points to an instance of the floating-point sparse FIR structure. * @param[in] numTaps number of nonzero coefficients in the filter. @@ -1598,11 +2109,17 @@ void arm_fir_sparse_f32(arm_fir_sparse_instance_f32 *S, const float32_t *pSrc, f * @param[in] maxDelay maximum offset time supported. * @param[in] blockSize number of samples that will be processed per block. */ -void arm_fir_sparse_init_f32(arm_fir_sparse_instance_f32 *S, uint16_t numTaps, - const float32_t *pCoeffs, float32_t *pState, int32_t *pTapDelay, - uint16_t maxDelay, uint32_t blockSize); + void arm_fir_sparse_init_f32( + arm_fir_sparse_instance_f32 * S, + uint16_t numTaps, + const float32_t * pCoeffs, + float32_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); -/** + + /** * @brief Processing function for the Q31 sparse FIR filter. * @param[in] S points to an instance of the Q31 sparse FIR structure. * @param[in] pSrc points to the block of input data. @@ -1610,10 +2127,15 @@ void arm_fir_sparse_init_f32(arm_fir_sparse_instance_f32 *S, uint16_t numTaps, * @param[in] pScratchIn points to a temporary buffer of size blockSize. * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_sparse_q31(arm_fir_sparse_instance_q31 *S, const q31_t *pSrc, q31_t *pDst, - q31_t *pScratchIn, uint32_t blockSize); + void arm_fir_sparse_q31( + arm_fir_sparse_instance_q31 * S, + const q31_t * pSrc, + q31_t * pDst, + q31_t * pScratchIn, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the Q31 sparse FIR filter. * @param[in,out] S points to an instance of the Q31 sparse FIR structure. * @param[in] numTaps number of nonzero coefficients in the filter. @@ -1623,11 +2145,17 @@ void arm_fir_sparse_q31(arm_fir_sparse_instance_q31 *S, const q31_t *pSrc, q31_t * @param[in] maxDelay maximum offset time supported. * @param[in] blockSize number of samples that will be processed per block. */ -void arm_fir_sparse_init_q31(arm_fir_sparse_instance_q31 *S, uint16_t numTaps, const q31_t *pCoeffs, - q31_t *pState, int32_t *pTapDelay, uint16_t maxDelay, - uint32_t blockSize); + void arm_fir_sparse_init_q31( + arm_fir_sparse_instance_q31 * S, + uint16_t numTaps, + const q31_t * pCoeffs, + q31_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); -/** + + /** * @brief Processing function for the Q15 sparse FIR filter. * @param[in] S points to an instance of the Q15 sparse FIR structure. * @param[in] pSrc points to the block of input data. @@ -1636,10 +2164,16 @@ void arm_fir_sparse_init_q31(arm_fir_sparse_instance_q31 *S, uint16_t numTaps, c * @param[in] pScratchOut points to a temporary buffer of size blockSize. * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_sparse_q15(arm_fir_sparse_instance_q15 *S, const q15_t *pSrc, q15_t *pDst, - q15_t *pScratchIn, q31_t *pScratchOut, uint32_t blockSize); + void arm_fir_sparse_q15( + arm_fir_sparse_instance_q15 * S, + const q15_t * pSrc, + q15_t * pDst, + q15_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the Q15 sparse FIR filter. * @param[in,out] S points to an instance of the Q15 sparse FIR structure. * @param[in] numTaps number of nonzero coefficients in the filter. @@ -1649,11 +2183,17 @@ void arm_fir_sparse_q15(arm_fir_sparse_instance_q15 *S, const q15_t *pSrc, q15_t * @param[in] maxDelay maximum offset time supported. * @param[in] blockSize number of samples that will be processed per block. */ -void arm_fir_sparse_init_q15(arm_fir_sparse_instance_q15 *S, uint16_t numTaps, const q15_t *pCoeffs, - q15_t *pState, int32_t *pTapDelay, uint16_t maxDelay, - uint32_t blockSize); + void arm_fir_sparse_init_q15( + arm_fir_sparse_instance_q15 * S, + uint16_t numTaps, + const q15_t * pCoeffs, + q15_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); -/** + + /** * @brief Processing function for the Q7 sparse FIR filter. * @param[in] S points to an instance of the Q7 sparse FIR structure. * @param[in] pSrc points to the block of input data. @@ -1662,10 +2202,16 @@ void arm_fir_sparse_init_q15(arm_fir_sparse_instance_q15 *S, uint16_t numTaps, c * @param[in] pScratchOut points to a temporary buffer of size blockSize. * @param[in] blockSize number of input samples to process per call. */ -void arm_fir_sparse_q7(arm_fir_sparse_instance_q7 *S, const q7_t *pSrc, q7_t *pDst, - q7_t *pScratchIn, q31_t *pScratchOut, uint32_t blockSize); + void arm_fir_sparse_q7( + arm_fir_sparse_instance_q7 * S, + const q7_t * pSrc, + q7_t * pDst, + q7_t * pScratchIn, + q31_t * pScratchOut, + uint32_t blockSize); -/** + + /** * @brief Initialization function for the Q7 sparse FIR filter. * @param[in,out] S points to an instance of the Q7 sparse FIR structure. * @param[in] numTaps number of nonzero coefficients in the filter. @@ -1675,18 +2221,32 @@ void arm_fir_sparse_q7(arm_fir_sparse_instance_q7 *S, const q7_t *pSrc, q7_t *pD * @param[in] maxDelay maximum offset time supported. * @param[in] blockSize number of samples that will be processed per block. */ -void arm_fir_sparse_init_q7(arm_fir_sparse_instance_q7 *S, uint16_t numTaps, const q7_t *pCoeffs, - q7_t *pState, int32_t *pTapDelay, uint16_t maxDelay, - uint32_t blockSize); + void arm_fir_sparse_init_q7( + arm_fir_sparse_instance_q7 * S, + uint16_t numTaps, + const q7_t * pCoeffs, + q7_t * pState, + int32_t * pTapDelay, + uint16_t maxDelay, + uint32_t blockSize); -/** + + + + + + /** * @brief floating-point Circular write function. */ -__STATIC_FORCEINLINE void arm_circularWrite_f32(int32_t *circBuffer, int32_t L, - uint16_t *writeOffset, int32_t bufferInc, - const int32_t *src, int32_t srcInc, - uint32_t blockSize) -{ + __STATIC_FORCEINLINE void arm_circularWrite_f32( + int32_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const int32_t * src, + int32_t srcInc, + uint32_t blockSize) + { uint32_t i = 0U; int32_t wOffset; @@ -1697,37 +2257,46 @@ __STATIC_FORCEINLINE void arm_circularWrite_f32(int32_t *circBuffer, int32_t L, /* Loop over the blockSize */ i = blockSize; - while (i > 0U) { - /* copy the input sample to the circular buffer */ - circBuffer[wOffset] = *src; + while (i > 0U) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; - /* Update the input pointer */ - src += srcInc; + /* Update the input pointer */ + src += srcInc; - /* Circularly update wOffset. Watch out for positive and negative value */ - wOffset += bufferInc; - if (wOffset >= L) - wOffset -= L; + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if (wOffset >= L) + wOffset -= L; - /* Decrement the loop counter */ - i--; + /* Decrement the loop counter */ + i--; } /* Update the index pointer */ *writeOffset = (uint16_t)wOffset; -} + } -/** + + + /** * @brief floating-point Circular Read function. */ -__STATIC_FORCEINLINE void arm_circularRead_f32(int32_t *circBuffer, int32_t L, int32_t *readOffset, - int32_t bufferInc, int32_t *dst, int32_t *dst_base, - int32_t dst_length, int32_t dstInc, - uint32_t blockSize) -{ + __STATIC_FORCEINLINE void arm_circularRead_f32( + int32_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + int32_t * dst, + int32_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { uint32_t i = 0U; int32_t rOffset; - int32_t *dst_end; + int32_t* dst_end; /* Copy the value of Index pointer that points * to the current location from where the input samples to be read */ @@ -1737,39 +2306,48 @@ __STATIC_FORCEINLINE void arm_circularRead_f32(int32_t *circBuffer, int32_t L, i /* Loop over the blockSize */ i = blockSize; - while (i > 0U) { - /* copy the sample from the circular buffer to the destination buffer */ - *dst = circBuffer[rOffset]; + while (i > 0U) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; - /* Update the input pointer */ - dst += dstInc; + /* Update the input pointer */ + dst += dstInc; - if (dst == dst_end) { - dst = dst_base; - } + if (dst == dst_end) + { + dst = dst_base; + } - /* Circularly update rOffset. Watch out for positive and negative value */ - rOffset += bufferInc; + /* Circularly update rOffset. Watch out for positive and negative value */ + rOffset += bufferInc; - if (rOffset >= L) { - rOffset -= L; - } + if (rOffset >= L) + { + rOffset -= L; + } - /* Decrement the loop counter */ - i--; + /* Decrement the loop counter */ + i--; } /* Update the index pointer */ *readOffset = rOffset; -} + } -/** + + /** * @brief Q15 Circular write function. */ -__STATIC_FORCEINLINE void arm_circularWrite_q15(q15_t *circBuffer, int32_t L, uint16_t *writeOffset, - int32_t bufferInc, const q15_t *src, int32_t srcInc, - uint32_t blockSize) -{ + __STATIC_FORCEINLINE void arm_circularWrite_q15( + q15_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const q15_t * src, + int32_t srcInc, + uint32_t blockSize) + { uint32_t i = 0U; int32_t wOffset; @@ -1780,37 +2358,45 @@ __STATIC_FORCEINLINE void arm_circularWrite_q15(q15_t *circBuffer, int32_t L, ui /* Loop over the blockSize */ i = blockSize; - while (i > 0U) { - /* copy the input sample to the circular buffer */ - circBuffer[wOffset] = *src; + while (i > 0U) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; - /* Update the input pointer */ - src += srcInc; + /* Update the input pointer */ + src += srcInc; - /* Circularly update wOffset. Watch out for positive and negative value */ - wOffset += bufferInc; - if (wOffset >= L) - wOffset -= L; + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if (wOffset >= L) + wOffset -= L; - /* Decrement the loop counter */ - i--; + /* Decrement the loop counter */ + i--; } /* Update the index pointer */ *writeOffset = (uint16_t)wOffset; -} + } -/** + + /** * @brief Q15 Circular Read function. */ -__STATIC_FORCEINLINE void arm_circularRead_q15(q15_t *circBuffer, int32_t L, int32_t *readOffset, - int32_t bufferInc, q15_t *dst, q15_t *dst_base, - int32_t dst_length, int32_t dstInc, - uint32_t blockSize) -{ + __STATIC_FORCEINLINE void arm_circularRead_q15( + q15_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + q15_t * dst, + q15_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { uint32_t i = 0; int32_t rOffset; - q15_t *dst_end; + q15_t* dst_end; /* Copy the value of Index pointer that points * to the current location from where the input samples to be read */ @@ -1821,39 +2407,48 @@ __STATIC_FORCEINLINE void arm_circularRead_q15(q15_t *circBuffer, int32_t L, int /* Loop over the blockSize */ i = blockSize; - while (i > 0U) { - /* copy the sample from the circular buffer to the destination buffer */ - *dst = circBuffer[rOffset]; + while (i > 0U) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; - /* Update the input pointer */ - dst += dstInc; + /* Update the input pointer */ + dst += dstInc; - if (dst == dst_end) { - dst = dst_base; - } + if (dst == dst_end) + { + dst = dst_base; + } - /* Circularly update wOffset. Watch out for positive and negative value */ - rOffset += bufferInc; + /* Circularly update wOffset. Watch out for positive and negative value */ + rOffset += bufferInc; - if (rOffset >= L) { - rOffset -= L; - } + if (rOffset >= L) + { + rOffset -= L; + } - /* Decrement the loop counter */ - i--; + /* Decrement the loop counter */ + i--; } /* Update the index pointer */ *readOffset = rOffset; -} + } -/** + + /** * @brief Q7 Circular write function. */ -__STATIC_FORCEINLINE void arm_circularWrite_q7(q7_t *circBuffer, int32_t L, uint16_t *writeOffset, - int32_t bufferInc, const q7_t *src, int32_t srcInc, - uint32_t blockSize) -{ + __STATIC_FORCEINLINE void arm_circularWrite_q7( + q7_t * circBuffer, + int32_t L, + uint16_t * writeOffset, + int32_t bufferInc, + const q7_t * src, + int32_t srcInc, + uint32_t blockSize) + { uint32_t i = 0U; int32_t wOffset; @@ -1864,37 +2459,45 @@ __STATIC_FORCEINLINE void arm_circularWrite_q7(q7_t *circBuffer, int32_t L, uint /* Loop over the blockSize */ i = blockSize; - while (i > 0U) { - /* copy the input sample to the circular buffer */ - circBuffer[wOffset] = *src; + while (i > 0U) + { + /* copy the input sample to the circular buffer */ + circBuffer[wOffset] = *src; - /* Update the input pointer */ - src += srcInc; + /* Update the input pointer */ + src += srcInc; - /* Circularly update wOffset. Watch out for positive and negative value */ - wOffset += bufferInc; - if (wOffset >= L) - wOffset -= L; + /* Circularly update wOffset. Watch out for positive and negative value */ + wOffset += bufferInc; + if (wOffset >= L) + wOffset -= L; - /* Decrement the loop counter */ - i--; + /* Decrement the loop counter */ + i--; } /* Update the index pointer */ *writeOffset = (uint16_t)wOffset; -} + } -/** + + /** * @brief Q7 Circular Read function. */ -__STATIC_FORCEINLINE void arm_circularRead_q7(q7_t *circBuffer, int32_t L, int32_t *readOffset, - int32_t bufferInc, q7_t *dst, q7_t *dst_base, - int32_t dst_length, int32_t dstInc, - uint32_t blockSize) -{ + __STATIC_FORCEINLINE void arm_circularRead_q7( + q7_t * circBuffer, + int32_t L, + int32_t * readOffset, + int32_t bufferInc, + q7_t * dst, + q7_t * dst_base, + int32_t dst_length, + int32_t dstInc, + uint32_t blockSize) + { uint32_t i = 0; int32_t rOffset; - q7_t *dst_end; + q7_t* dst_end; /* Copy the value of Index pointer that points * to the current location from where the input samples to be read */ @@ -1905,31 +2508,35 @@ __STATIC_FORCEINLINE void arm_circularRead_q7(q7_t *circBuffer, int32_t L, int32 /* Loop over the blockSize */ i = blockSize; - while (i > 0U) { - /* copy the sample from the circular buffer to the destination buffer */ - *dst = circBuffer[rOffset]; + while (i > 0U) + { + /* copy the sample from the circular buffer to the destination buffer */ + *dst = circBuffer[rOffset]; - /* Update the input pointer */ - dst += dstInc; + /* Update the input pointer */ + dst += dstInc; - if (dst == dst_end) { - dst = dst_base; - } + if (dst == dst_end) + { + dst = dst_base; + } - /* Circularly update rOffset. Watch out for positive and negative value */ - rOffset += bufferInc; + /* Circularly update rOffset. Watch out for positive and negative value */ + rOffset += bufferInc; - if (rOffset >= L) { - rOffset -= L; - } + if (rOffset >= L) + { + rOffset -= L; + } - /* Decrement the loop counter */ - i--; + /* Decrement the loop counter */ + i--; } /* Update the index pointer */ *readOffset = rOffset; -} + } + /** @brief Levinson Durbin @@ -1937,9 +2544,12 @@ __STATIC_FORCEINLINE void arm_circularRead_q7(q7_t *circBuffer, int32_t L, int32 @param[out] a autoregressive coefficients @param[out] err prediction error (variance) @param[in] nbCoefs number of autoregressive coefficients - @return none */ -void arm_levinson_durbin_f32(const float32_t *phi, float32_t *a, float32_t *err, int nbCoefs); +void arm_levinson_durbin_f32(const float32_t *phi, + float32_t *a, + float32_t *err, + int nbCoefs); + /** @brief Levinson Durbin @@ -1947,11 +2557,13 @@ void arm_levinson_durbin_f32(const float32_t *phi, float32_t *a, float32_t *err, @param[out] a autoregressive coefficients @param[out] err prediction error (variance) @param[in] nbCoefs number of autoregressive coefficients - @return none */ -void arm_levinson_durbin_q31(const q31_t *phi, q31_t *a, q31_t *err, int nbCoefs); +void arm_levinson_durbin_q31(const q31_t *phi, + q31_t *a, + q31_t *err, + int nbCoefs); -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/filtering_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/filtering_functions_f16.h old mode 100644 new mode 100755 similarity index 57% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/filtering_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/filtering_functions_f16.h index f8ad957da20..655cd7e0f56 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/filtering_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/filtering_functions_f16.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _FILTERING_FUNCTIONS_F16_H_ -#define _FILTERING_FUNCTIONS_F16_H_ + +#ifndef FILTERING_FUNCTIONS_F16_H_ +#define FILTERING_FUNCTIONS_F16_H_ #include "arm_math_types_f16.h" #include "arm_math_memory.h" @@ -32,23 +33,25 @@ #include "dsp/none.h" #include "dsp/utils.h" -#ifdef __cplusplus -extern "C" { + +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) -/** + /** * @brief Instance structure for the floating-point FIR filter. */ -typedef struct { - uint16_t numTaps; /**< number of filter coefficients in the filter. */ - float16_t * - pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ - const float16_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ -} arm_fir_instance_f16; - -/** + typedef struct + { + uint16_t numTaps; /**< number of filter coefficients in the filter. */ + float16_t *pState; /**< points to the state variable array. The array is of length numTaps+blockSize-1. */ + const float16_t *pCoeffs; /**< points to the coefficient array. The array is of length numTaps. */ + } arm_fir_instance_f16; + + /** * @brief Initialization function for the floating-point FIR filter. * @param[in,out] S points to an instance of the floating-point FIR filter structure. * @param[in] numTaps Number of filter coefficients in the filter. @@ -56,127 +59,148 @@ typedef struct { * @param[in] pState points to the state buffer. * @param[in] blockSize number of samples that are processed at a time. */ -void arm_fir_init_f16(arm_fir_instance_f16 *S, uint16_t numTaps, const float16_t *pCoeffs, - float16_t *pState, uint32_t blockSize); - -/** + void arm_fir_init_f16( + arm_fir_instance_f16 * S, + uint16_t numTaps, + const float16_t * pCoeffs, + float16_t * pState, + uint32_t blockSize); + + /** * @brief Processing function for the floating-point FIR filter. * @param[in] S points to an instance of the floating-point FIR structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_fir_f16(const arm_fir_instance_f16 *S, const float16_t *pSrc, float16_t *pDst, - uint32_t blockSize); + void arm_fir_f16( + const arm_fir_instance_f16 * S, + const float16_t * pSrc, + float16_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Instance structure for the floating-point Biquad cascade filter. */ -typedef struct { - uint32_t - numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float16_t * - pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ - const float16_t - *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ -} arm_biquad_casd_df1_inst_f16; + typedef struct + { + uint32_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float16_t *pState; /**< Points to the array of state coefficients. The array is of length 4*numStages. */ + const float16_t *pCoeffs; /**< Points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_casd_df1_inst_f16; #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -/** + /** * @brief Instance structure for the modified Biquad coefs required by vectorized code. */ -typedef struct { - float16_t coeffs - [12] - [8]; /**< Points to the array of modified coefficients. The array is of length 32. There is one per stage */ -} arm_biquad_mod_coef_f16; -#endif + typedef struct + { + float16_t coeffs[12][8]; /**< Points to the array of modified coefficients. The array is of length 32. There is one per stage */ + } arm_biquad_mod_coef_f16; +#endif -/** + /** * @brief Processing function for the floating-point Biquad cascade filter. * @param[in] S points to an instance of the floating-point Biquad cascade structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_df1_f16(const arm_biquad_casd_df1_inst_f16 *S, const float16_t *pSrc, - float16_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_df1_f16( + const arm_biquad_casd_df1_inst_f16 * S, + const float16_t * pSrc, + float16_t * pDst, + uint32_t blockSize); #if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) -void arm_biquad_cascade_df1_mve_init_f16(arm_biquad_casd_df1_inst_f16 *S, uint8_t numStages, - const float16_t *pCoeffs, - arm_biquad_mod_coef_f16 *pCoeffsMod, float16_t *pState); + void arm_biquad_cascade_df1_mve_init_f16( + arm_biquad_casd_df1_inst_f16 * S, + uint8_t numStages, + const float16_t * pCoeffs, + arm_biquad_mod_coef_f16 * pCoeffsMod, + float16_t * pState); #endif -void arm_biquad_cascade_df1_init_f16(arm_biquad_casd_df1_inst_f16 *S, uint8_t numStages, - const float16_t *pCoeffs, float16_t *pState); + void arm_biquad_cascade_df1_init_f16( + arm_biquad_casd_df1_inst_f16 * S, + uint8_t numStages, + const float16_t * pCoeffs, + float16_t * pState); -/** + /** * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. */ -typedef struct { - uint8_t - numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float16_t * - pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ - const float16_t - *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ -} arm_biquad_cascade_df2T_instance_f16; - -/** + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float16_t *pState; /**< points to the array of state coefficients. The array is of length 2*numStages. */ + const float16_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_df2T_instance_f16; + + /** * @brief Instance structure for the floating-point transposed direct form II Biquad cascade filter. */ -typedef struct { - uint8_t - numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ - float16_t * - pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ - const float16_t - *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ -} arm_biquad_cascade_stereo_df2T_instance_f16; - -/** + typedef struct + { + uint8_t numStages; /**< number of 2nd order stages in the filter. Overall order is 2*numStages. */ + float16_t *pState; /**< points to the array of state coefficients. The array is of length 4*numStages. */ + const float16_t *pCoeffs; /**< points to the array of coefficients. The array is of length 5*numStages. */ + } arm_biquad_cascade_stereo_df2T_instance_f16; + + /** * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. * @param[in] S points to an instance of the filter data structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_df2T_f16(const arm_biquad_cascade_df2T_instance_f16 *S, - const float16_t *pSrc, float16_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_df2T_f16( + const arm_biquad_cascade_df2T_instance_f16 * S, + const float16_t * pSrc, + float16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Processing function for the floating-point transposed direct form II Biquad cascade filter. 2 channels * @param[in] S points to an instance of the filter data structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of samples to process. */ -void arm_biquad_cascade_stereo_df2T_f16(const arm_biquad_cascade_stereo_df2T_instance_f16 *S, - const float16_t *pSrc, float16_t *pDst, uint32_t blockSize); + void arm_biquad_cascade_stereo_df2T_f16( + const arm_biquad_cascade_stereo_df2T_instance_f16 * S, + const float16_t * pSrc, + float16_t * pDst, + uint32_t blockSize); -/** + /** * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. * @param[in,out] S points to an instance of the filter data structure. * @param[in] numStages number of 2nd order stages in the filter. * @param[in] pCoeffs points to the filter coefficients. * @param[in] pState points to the state buffer. */ -void arm_biquad_cascade_df2T_init_f16(arm_biquad_cascade_df2T_instance_f16 *S, uint8_t numStages, - const float16_t *pCoeffs, float16_t *pState); + void arm_biquad_cascade_df2T_init_f16( + arm_biquad_cascade_df2T_instance_f16 * S, + uint8_t numStages, + const float16_t * pCoeffs, + float16_t * pState); -/** + /** * @brief Initialization function for the floating-point transposed direct form II Biquad cascade filter. * @param[in,out] S points to an instance of the filter data structure. * @param[in] numStages number of 2nd order stages in the filter. * @param[in] pCoeffs points to the filter coefficients. * @param[in] pState points to the state buffer. */ -void arm_biquad_cascade_stereo_df2T_init_f16(arm_biquad_cascade_stereo_df2T_instance_f16 *S, - uint8_t numStages, const float16_t *pCoeffs, - float16_t *pState); + void arm_biquad_cascade_stereo_df2T_init_f16( + arm_biquad_cascade_stereo_df2T_instance_f16 * S, + uint8_t numStages, + const float16_t * pCoeffs, + float16_t * pState); -/** + /** * @brief Correlation of floating-point sequences. * @param[in] pSrcA points to the first input sequence. * @param[in] srcALen length of the first input sequence. @@ -184,8 +208,13 @@ void arm_biquad_cascade_stereo_df2T_init_f16(arm_biquad_cascade_stereo_df2T_inst * @param[in] srcBLen length of the second input sequence. * @param[out] pDst points to the block of output data Length 2 * max(srcALen, srcBLen) - 1. */ -void arm_correlate_f16(const float16_t *pSrcA, uint32_t srcALen, const float16_t *pSrcB, - uint32_t srcBLen, float16_t *pDst); + void arm_correlate_f16( + const float16_t * pSrcA, + uint32_t srcALen, + const float16_t * pSrcB, + uint32_t srcBLen, + float16_t * pDst); + /** @brief Levinson Durbin @@ -193,12 +222,14 @@ void arm_correlate_f16(const float16_t *pSrcA, uint32_t srcALen, const float16_t @param[out] a autoregressive coefficients @param[out] err prediction error (variance) @param[in] nbCoefs number of autoregressive coefficients - @return none */ -void arm_levinson_durbin_f16(const float16_t *phi, float16_t *a, float16_t *err, int nbCoefs); +void arm_levinson_durbin_f16(const float16_t *phi, + float16_t *a, + float16_t *err, + int nbCoefs); #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/interpolation_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/interpolation_functions.h old mode 100644 new mode 100755 similarity index 64% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/interpolation_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/interpolation_functions.h index ab4061efae4..574b73738f5 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/interpolation_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/interpolation_functions.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _INTERPOLATION_FUNCTIONS_H_ -#define _INTERPOLATION_FUNCTIONS_H_ + +#ifndef INTERPOLATION_FUNCTIONS_H_ +#define INTERPOLATION_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -32,10 +33,12 @@ #include "dsp/none.h" #include "dsp/utils.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif + /** * @defgroup groupInterpolation Interpolation Functions * These functions perform 1- and 2-dimensional interpolation of data. @@ -43,91 +46,95 @@ extern "C" { * bilinear interpolation is used for 2-dimensional data. */ -/** + + /** * @brief Instance structure for the floating-point Linear Interpolate function. */ -typedef struct { - uint32_t nValues; /**< nValues */ - float32_t x1; /**< x1 */ - float32_t xSpacing; /**< xSpacing */ - float32_t *pYData; /**< pointer to the table of Y values */ -} arm_linear_interp_instance_f32; + typedef struct + { + uint32_t nValues; /**< nValues */ + float32_t x1; /**< x1 */ + float32_t xSpacing; /**< xSpacing */ + const float32_t *pYData; /**< pointer to the table of Y values */ + } arm_linear_interp_instance_f32; -/** + /** * @brief Instance structure for the floating-point bilinear interpolation function. */ -typedef struct { - uint16_t numRows; /**< number of rows in the data table. */ - uint16_t numCols; /**< number of columns in the data table. */ - float32_t *pData; /**< points to the data table. */ -} arm_bilinear_interp_instance_f32; + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + const float32_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_f32; -/** + /** * @brief Instance structure for the Q31 bilinear interpolation function. */ -typedef struct { - uint16_t numRows; /**< number of rows in the data table. */ - uint16_t numCols; /**< number of columns in the data table. */ - q31_t *pData; /**< points to the data table. */ -} arm_bilinear_interp_instance_q31; + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + const q31_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q31; -/** + /** * @brief Instance structure for the Q15 bilinear interpolation function. */ -typedef struct { - uint16_t numRows; /**< number of rows in the data table. */ - uint16_t numCols; /**< number of columns in the data table. */ - q15_t *pData; /**< points to the data table. */ -} arm_bilinear_interp_instance_q15; + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + const q15_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q15; -/** + /** * @brief Instance structure for the Q15 bilinear interpolation function. */ -typedef struct { - uint16_t numRows; /**< number of rows in the data table. */ - uint16_t numCols; /**< number of columns in the data table. */ - q7_t *pData; /**< points to the data table. */ -} arm_bilinear_interp_instance_q7; + typedef struct + { + uint16_t numRows; /**< number of rows in the data table. */ + uint16_t numCols; /**< number of columns in the data table. */ + const q7_t *pData; /**< points to the data table. */ + } arm_bilinear_interp_instance_q7; -/** + + /** * @brief Struct for specifying cubic spline type */ -typedef enum { - ARM_SPLINE_NATURAL = 0, /**< Natural spline */ - ARM_SPLINE_PARABOLIC_RUNOUT = 1 /**< Parabolic runout spline */ -} arm_spline_type; + typedef enum + { + ARM_SPLINE_NATURAL = 0, /**< Natural spline */ + ARM_SPLINE_PARABOLIC_RUNOUT = 1 /**< Parabolic runout spline */ + } arm_spline_type; -/** + /** * @brief Instance structure for the floating-point cubic spline interpolation. */ -typedef struct { - arm_spline_type type; /**< Type (boundary conditions) */ - const float32_t *x; /**< x values */ - const float32_t *y; /**< y values */ - uint32_t n_x; /**< Number of known data points */ - float32_t *coeffs; /**< Coefficients buffer (b,c, and d) */ -} arm_spline_instance_f32; - -/** - * @ingroup groupInterpolation - */ + typedef struct + { + arm_spline_type type; /**< Type (boundary conditions) */ + const float32_t * x; /**< x values */ + const float32_t * y; /**< y values */ + uint32_t n_x; /**< Number of known data points */ + float32_t * coeffs; /**< Coefficients buffer (b,c, and d) */ + } arm_spline_instance_f32; -/** - * @addtogroup SplineInterpolate - * @{ - */ -/** + /** * @brief Processing function for the floating-point cubic spline interpolation. * @param[in] S points to an instance of the floating-point spline structure. * @param[in] xq points to the x values ot the interpolated data points. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples of output data. */ -void arm_spline_f32(arm_spline_instance_f32 *S, const float32_t *xq, float32_t *pDst, - uint32_t blockSize); + void arm_spline_f32( + arm_spline_instance_f32 * S, + const float32_t * xq, + float32_t * pDst, + uint32_t blockSize); -/** + /** * @brief Initialization function for the floating-point cubic spline interpolation. * @param[in,out] S points to an instance of the floating-point spline structure. * @param[in] type type of cubic spline interpolation (boundary conditions) @@ -137,28 +144,28 @@ void arm_spline_f32(arm_spline_instance_f32 *S, const float32_t *xq, float32_t * * @param[in] coeffs coefficients array for b, c, and d * @param[in] tempBuffer buffer array for internal computations */ -void arm_spline_init_f32(arm_spline_instance_f32 *S, arm_spline_type type, const float32_t *x, - const float32_t *y, uint32_t n, float32_t *coeffs, float32_t *tempBuffer); + void arm_spline_init_f32( + arm_spline_instance_f32 * S, + arm_spline_type type, + const float32_t * x, + const float32_t * y, + uint32_t n, + float32_t * coeffs, + float32_t * tempBuffer); -/** - * @} end of SplineInterpolate group - */ - -/** - * @addtogroup LinearInterpolate - * @{ - */ -/** + /** * @brief Process function for the floating-point Linear Interpolation Function. * @param[in,out] S is an instance of the floating-point Linear Interpolation structure * @param[in] x input sample to process * @return y processed output sample. * */ -float32_t arm_linear_interp_f32(arm_linear_interp_instance_f32 *S, float32_t x); + float32_t arm_linear_interp_f32( + const arm_linear_interp_instance_f32 * S, + float32_t x); -/** + /** * * @brief Process function for the Q31 Linear Interpolation Function. * @param[in] pYData pointer to Q31 Linear Interpolation table @@ -171,9 +178,12 @@ float32_t arm_linear_interp_f32(arm_linear_interp_instance_f32 *S, float32_t x); * This function can support maximum of table size 2^12. * */ -q31_t arm_linear_interp_q31(const q31_t *pYData, q31_t x, uint32_t nValues); + q31_t arm_linear_interp_q31( + const q31_t * pYData, + q31_t x, + uint32_t nValues); -/** + /** * * @brief Process function for the Q15 Linear Interpolation Function. * @param[in] pYData pointer to Q15 Linear Interpolation table @@ -186,9 +196,12 @@ q31_t arm_linear_interp_q31(const q31_t *pYData, q31_t x, uint32_t nValues); * This function can support maximum of table size 2^12. * */ -q15_t arm_linear_interp_q15(const q15_t *pYData, q31_t x, uint32_t nValues); + q15_t arm_linear_interp_q15( + const q15_t * pYData, + q31_t x, + uint32_t nValues); -/** + /** * * @brief Process function for the Q7 Linear Interpolation Function. * @param[in] pYData pointer to Q7 Linear Interpolation table @@ -200,62 +213,62 @@ q15_t arm_linear_interp_q15(const q15_t *pYData, q31_t x, uint32_t nValues); * Input sample x is in 12.20 format which contains 12 bits for table index and 20 bits for fractional part. * This function can support maximum of table size 2^12. */ -q7_t arm_linear_interp_q7(const q7_t *pYData, q31_t x, uint32_t nValues); +q7_t arm_linear_interp_q7( + const q7_t * pYData, + q31_t x, + uint32_t nValues); -/** - * @} end of LinearInterpolate group - */ - -/** - * @ingroup groupInterpolation - */ - -/** - * @addtogroup BilinearInterpolate - * @{ - */ - -/** + /** * @brief Floating-point bilinear interpolation. * @param[in,out] S points to an instance of the interpolation structure. * @param[in] X interpolation coordinate. * @param[in] Y interpolation coordinate. * @return out interpolated value. */ -float32_t arm_bilinear_interp_f32(const arm_bilinear_interp_instance_f32 *S, float32_t X, - float32_t Y); + float32_t arm_bilinear_interp_f32( + const arm_bilinear_interp_instance_f32 * S, + float32_t X, + float32_t Y); -/** + /** * @brief Q31 bilinear interpolation. * @param[in,out] S points to an instance of the interpolation structure. * @param[in] X interpolation coordinate in 12.20 format. * @param[in] Y interpolation coordinate in 12.20 format. * @return out interpolated value. */ -q31_t arm_bilinear_interp_q31(arm_bilinear_interp_instance_q31 *S, q31_t X, q31_t Y); + q31_t arm_bilinear_interp_q31( + arm_bilinear_interp_instance_q31 * S, + q31_t X, + q31_t Y); -/** + + /** * @brief Q15 bilinear interpolation. * @param[in,out] S points to an instance of the interpolation structure. * @param[in] X interpolation coordinate in 12.20 format. * @param[in] Y interpolation coordinate in 12.20 format. * @return out interpolated value. */ -q15_t arm_bilinear_interp_q15(arm_bilinear_interp_instance_q15 *S, q31_t X, q31_t Y); + q15_t arm_bilinear_interp_q15( + arm_bilinear_interp_instance_q15 * S, + q31_t X, + q31_t Y); -/** + /** * @brief Q7 bilinear interpolation. * @param[in,out] S points to an instance of the interpolation structure. * @param[in] X interpolation coordinate in 12.20 format. * @param[in] Y interpolation coordinate in 12.20 format. * @return out interpolated value. */ -q7_t arm_bilinear_interp_q7(arm_bilinear_interp_instance_q7 *S, q31_t X, q31_t Y); -/** - * @} end of BilinearInterpolate group - */ + q7_t arm_bilinear_interp_q7( + arm_bilinear_interp_instance_q7 * S, + q31_t X, + q31_t Y); + -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/interpolation_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/interpolation_functions_f16.h old mode 100644 new mode 100755 similarity index 70% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/interpolation_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/interpolation_functions_f16.h index 19f91b3c05d..e1f27c3cdaf --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/interpolation_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/interpolation_functions_f16.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _INTERPOLATION_FUNCTIONS_F16_H_ -#define _INTERPOLATION_FUNCTIONS_F16_H_ + +#ifndef INTERPOLATION_FUNCTIONS_F16_H_ +#define INTERPOLATION_FUNCTIONS_F16_H_ #include "arm_math_types_f16.h" #include "arm_math_memory.h" @@ -32,43 +33,50 @@ #include "dsp/none.h" #include "dsp/utils.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) -typedef struct { - uint32_t nValues; /**< nValues */ - float16_t x1; /**< x1 */ - float16_t xSpacing; /**< xSpacing */ - float16_t *pYData; /**< pointer to the table of Y values */ +/** + * @brief Instance structure for the half floating-point Linear Interpolate function. + */ +typedef struct +{ + uint32_t nValues; /**< nValues */ + float16_t x1; /**< x1 */ + float16_t xSpacing; /**< xSpacing */ + const float16_t *pYData; /**< pointer to the table of Y values */ } arm_linear_interp_instance_f16; /** * @brief Instance structure for the floating-point bilinear interpolation function. */ -typedef struct { - uint16_t numRows; /**< number of rows in the data table. */ - uint16_t numCols; /**< number of columns in the data table. */ - float16_t *pData; /**< points to the data table. */ +typedef struct +{ + uint16_t numRows;/**< number of rows in the data table. */ + uint16_t numCols;/**< number of columns in the data table. */ + const float16_t *pData; /**< points to the data table. */ } arm_bilinear_interp_instance_f16; -/** + /** * @addtogroup LinearInterpolate * @{ */ -/** + /** * @brief Process function for the floating-point Linear Interpolation Function. * @param[in,out] S is an instance of the floating-point Linear Interpolation structure * @param[in] x input sample to process * @return y processed output sample. - * */ -float16_t arm_linear_interp_f16(arm_linear_interp_instance_f16 *S, float16_t x); + float16_t arm_linear_interp_f16( + const arm_linear_interp_instance_f16 * S, + float16_t x); -/** + /** * @} end of LinearInterpolate group */ @@ -77,21 +85,24 @@ float16_t arm_linear_interp_f16(arm_linear_interp_instance_f16 *S, float16_t x); * @{ */ -/** + /** * @brief Floating-point bilinear interpolation. * @param[in,out] S points to an instance of the interpolation structure. * @param[in] X interpolation coordinate. * @param[in] Y interpolation coordinate. * @return out interpolated value. */ -float16_t arm_bilinear_interp_f16(const arm_bilinear_interp_instance_f16 *S, float16_t X, - float16_t Y); + float16_t arm_bilinear_interp_f16( + const arm_bilinear_interp_instance_f16 * S, + float16_t X, + float16_t Y); -/** + + /** * @} end of BilinearInterpolate group */ #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/matrix_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/matrix_functions.h old mode 100644 new mode 100755 similarity index 65% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/matrix_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/matrix_functions.h index e7409115e2f..175ca2fac22 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/matrix_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/matrix_functions.h @@ -1,8 +1,8 @@ /****************************************************************************** * @file matrix_functions.h * @brief Public header file for CMSIS DSP Library - * @version V1.10.0 - * @date 08 July 2021 + * @version V1.10.1 + * @date 10 August 2022 * Target Processor: Cortex-M and Cortex-A cores ******************************************************************************/ /* @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _MATRIX_FUNCTIONS_H_ -#define _MATRIX_FUNCTIONS_H_ + +#ifndef MATRIX_FUNCTIONS_H_ +#define MATRIX_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -32,8 +33,9 @@ #include "dsp/none.h" #include "dsp/utils.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif /** @@ -107,52 +109,60 @@ extern "C" { * return ARM_MATH_SUCCESS. */ -/** + #define DEFAULT_HOUSEHOLDER_THRESHOLD_F64 (1.0e-16) + #define DEFAULT_HOUSEHOLDER_THRESHOLD_F32 (1.0e-12f) + + /** * @brief Instance structure for the floating-point matrix structure. */ -typedef struct { - uint16_t numRows; /**< number of rows of the matrix. */ - uint16_t numCols; /**< number of columns of the matrix. */ - float32_t *pData; /**< points to the data of the matrix. */ -} arm_matrix_instance_f32; - -/** + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + float32_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_f32; + + /** * @brief Instance structure for the floating-point matrix structure. */ -typedef struct { - uint16_t numRows; /**< number of rows of the matrix. */ - uint16_t numCols; /**< number of columns of the matrix. */ - float64_t *pData; /**< points to the data of the matrix. */ -} arm_matrix_instance_f64; + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + float64_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_f64; -/** + /** * @brief Instance structure for the Q7 matrix structure. */ -typedef struct { - uint16_t numRows; /**< number of rows of the matrix. */ - uint16_t numCols; /**< number of columns of the matrix. */ - q7_t *pData; /**< points to the data of the matrix. */ -} arm_matrix_instance_q7; + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q7_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_q7; -/** + /** * @brief Instance structure for the Q15 matrix structure. */ -typedef struct { - uint16_t numRows; /**< number of rows of the matrix. */ - uint16_t numCols; /**< number of columns of the matrix. */ - q15_t *pData; /**< points to the data of the matrix. */ -} arm_matrix_instance_q15; + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q15_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_q15; -/** + /** * @brief Instance structure for the Q31 matrix structure. */ -typedef struct { - uint16_t numRows; /**< number of rows of the matrix. */ - uint16_t numCols; /**< number of columns of the matrix. */ - q31_t *pData; /**< points to the data of the matrix. */ -} arm_matrix_instance_q31; + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + q31_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_q31; -/** + /** * @brief Floating-point matrix addition. * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -160,10 +170,12 @@ typedef struct { * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_add_f32(const arm_matrix_instance_f32 *pSrcA, - const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst); +arm_status arm_mat_add_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); -/** + /** * @brief Q15 matrix addition. * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -171,10 +183,12 @@ arm_status arm_mat_add_f32(const arm_matrix_instance_f32 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_add_q15(const arm_matrix_instance_q15 *pSrcA, - const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst); +arm_status arm_mat_add_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst); -/** + /** * @brief Q31 matrix addition. * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -182,10 +196,12 @@ arm_status arm_mat_add_q15(const arm_matrix_instance_q15 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_add_q31(const arm_matrix_instance_q31 *pSrcA, - const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst); +arm_status arm_mat_add_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); -/** + /** * @brief Floating-point, complex, matrix multiplication. * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -193,11 +209,12 @@ arm_status arm_mat_add_q31(const arm_matrix_instance_q31 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_cmplx_mult_f32(const arm_matrix_instance_f32 *pSrcA, - const arm_matrix_instance_f32 *pSrcB, - arm_matrix_instance_f32 *pDst); +arm_status arm_mat_cmplx_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); -/** + /** * @brief Q15, complex, matrix multiplication. * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -205,11 +222,13 @@ arm_status arm_mat_cmplx_mult_f32(const arm_matrix_instance_f32 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_cmplx_mult_q15(const arm_matrix_instance_q15 *pSrcA, - const arm_matrix_instance_q15 *pSrcB, - arm_matrix_instance_q15 *pDst, q15_t *pScratch); +arm_status arm_mat_cmplx_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pScratch); -/** + /** * @brief Q31, complex, matrix multiplication. * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -217,18 +236,21 @@ arm_status arm_mat_cmplx_mult_q15(const arm_matrix_instance_q15 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_cmplx_mult_q31(const arm_matrix_instance_q31 *pSrcA, - const arm_matrix_instance_q31 *pSrcB, - arm_matrix_instance_q31 *pDst); +arm_status arm_mat_cmplx_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); -/** + /** * @brief Floating-point matrix transpose. * @param[in] pSrc points to the input matrix * @param[out] pDst points to the output matrix * @return The function returns either ARM_MATH_SIZE_MISMATCH * or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_trans_f32(const arm_matrix_instance_f32 *pSrc, arm_matrix_instance_f32 *pDst); +arm_status arm_mat_trans_f32( + const arm_matrix_instance_f32 * pSrc, + arm_matrix_instance_f32 * pDst); /** * @brief Floating-point matrix transpose. @@ -237,66 +259,78 @@ arm_status arm_mat_trans_f32(const arm_matrix_instance_f32 *pSrc, arm_matrix_ins * @return The function returns either ARM_MATH_SIZE_MISMATCH * or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_trans_f64(const arm_matrix_instance_f64 *pSrc, arm_matrix_instance_f64 *pDst); +arm_status arm_mat_trans_f64( + const arm_matrix_instance_f64 * pSrc, + arm_matrix_instance_f64 * pDst); -/** + /** * @brief Floating-point complex matrix transpose. * @param[in] pSrc points to the input matrix * @param[out] pDst points to the output matrix * @return The function returns either ARM_MATH_SIZE_MISMATCH * or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_cmplx_trans_f32(const arm_matrix_instance_f32 *pSrc, - arm_matrix_instance_f32 *pDst); +arm_status arm_mat_cmplx_trans_f32( + const arm_matrix_instance_f32 * pSrc, + arm_matrix_instance_f32 * pDst); -/** + + /** * @brief Q15 matrix transpose. * @param[in] pSrc points to the input matrix * @param[out] pDst points to the output matrix * @return The function returns either ARM_MATH_SIZE_MISMATCH * or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_trans_q15(const arm_matrix_instance_q15 *pSrc, arm_matrix_instance_q15 *pDst); +arm_status arm_mat_trans_q15( + const arm_matrix_instance_q15 * pSrc, + arm_matrix_instance_q15 * pDst); -/** + /** * @brief Q15 complex matrix transpose. * @param[in] pSrc points to the input matrix * @param[out] pDst points to the output matrix * @return The function returns either ARM_MATH_SIZE_MISMATCH * or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_cmplx_trans_q15(const arm_matrix_instance_q15 *pSrc, - arm_matrix_instance_q15 *pDst); +arm_status arm_mat_cmplx_trans_q15( + const arm_matrix_instance_q15 * pSrc, + arm_matrix_instance_q15 * pDst); -/** + /** * @brief Q7 matrix transpose. * @param[in] pSrc points to the input matrix * @param[out] pDst points to the output matrix * @return The function returns either ARM_MATH_SIZE_MISMATCH * or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_trans_q7(const arm_matrix_instance_q7 *pSrc, arm_matrix_instance_q7 *pDst); +arm_status arm_mat_trans_q7( + const arm_matrix_instance_q7 * pSrc, + arm_matrix_instance_q7 * pDst); -/** + /** * @brief Q31 matrix transpose. * @param[in] pSrc points to the input matrix * @param[out] pDst points to the output matrix * @return The function returns either ARM_MATH_SIZE_MISMATCH * or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_trans_q31(const arm_matrix_instance_q31 *pSrc, arm_matrix_instance_q31 *pDst); +arm_status arm_mat_trans_q31( + const arm_matrix_instance_q31 * pSrc, + arm_matrix_instance_q31 * pDst); -/** + /** * @brief Q31 complex matrix transpose. * @param[in] pSrc points to the input matrix * @param[out] pDst points to the output matrix * @return The function returns either ARM_MATH_SIZE_MISMATCH * or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_cmplx_trans_q31(const arm_matrix_instance_q31 *pSrc, - arm_matrix_instance_q31 *pDst); +arm_status arm_mat_cmplx_trans_q31( + const arm_matrix_instance_q31 * pSrc, + arm_matrix_instance_q31 * pDst); -/** + /** * @brief Floating-point matrix multiplication * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -304,10 +338,12 @@ arm_status arm_mat_cmplx_trans_q31(const arm_matrix_instance_q31 *pSrc, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_mult_f32(const arm_matrix_instance_f32 *pSrcA, - const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst); +arm_status arm_mat_mult_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); -/** + /** * @brief Floating-point matrix multiplication * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -315,19 +351,23 @@ arm_status arm_mat_mult_f32(const arm_matrix_instance_f32 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_mult_f64(const arm_matrix_instance_f64 *pSrcA, - const arm_matrix_instance_f64 *pSrcB, arm_matrix_instance_f64 *pDst); +arm_status arm_mat_mult_f64( + const arm_matrix_instance_f64 * pSrcA, + const arm_matrix_instance_f64 * pSrcB, + arm_matrix_instance_f64 * pDst); -/** + /** * @brief Floating-point matrix and vector multiplication * @param[in] pSrcMat points to the input matrix structure * @param[in] pVec points to vector * @param[out] pDst points to output vector */ -void arm_mat_vec_mult_f32(const arm_matrix_instance_f32 *pSrcMat, const float32_t *pVec, - float32_t *pDst); +void arm_mat_vec_mult_f32( + const arm_matrix_instance_f32 *pSrcMat, + const float32_t *pVec, + float32_t *pDst); -/** + /** * @brief Q7 matrix multiplication * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -336,18 +376,24 @@ void arm_mat_vec_mult_f32(const arm_matrix_instance_f32 *pSrcMat, const float32_ * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_mult_q7(const arm_matrix_instance_q7 *pSrcA, const arm_matrix_instance_q7 *pSrcB, - arm_matrix_instance_q7 *pDst, q7_t *pState); +arm_status arm_mat_mult_q7( + const arm_matrix_instance_q7 * pSrcA, + const arm_matrix_instance_q7 * pSrcB, + arm_matrix_instance_q7 * pDst, + q7_t * pState); -/** + /** * @brief Q7 matrix and vector multiplication * @param[in] pSrcMat points to the input matrix structure * @param[in] pVec points to vector * @param[out] pDst points to output vector */ -void arm_mat_vec_mult_q7(const arm_matrix_instance_q7 *pSrcMat, const q7_t *pVec, q7_t *pDst); +void arm_mat_vec_mult_q7( + const arm_matrix_instance_q7 *pSrcMat, + const q7_t *pVec, + q7_t *pDst); -/** + /** * @brief Q15 matrix multiplication * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -356,19 +402,24 @@ void arm_mat_vec_mult_q7(const arm_matrix_instance_q7 *pSrcMat, const q7_t *pVec * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_mult_q15(const arm_matrix_instance_q15 *pSrcA, - const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst, - q15_t *pState); +arm_status arm_mat_mult_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState); -/** + /** * @brief Q15 matrix and vector multiplication * @param[in] pSrcMat points to the input matrix structure * @param[in] pVec points to vector * @param[out] pDst points to output vector */ -void arm_mat_vec_mult_q15(const arm_matrix_instance_q15 *pSrcMat, const q15_t *pVec, q15_t *pDst); +void arm_mat_vec_mult_q15( + const arm_matrix_instance_q15 *pSrcMat, + const q15_t *pVec, + q15_t *pDst); -/** + /** * @brief Q15 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -377,11 +428,13 @@ void arm_mat_vec_mult_q15(const arm_matrix_instance_q15 *pSrcMat, const q15_t *p * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_mult_fast_q15(const arm_matrix_instance_q15 *pSrcA, - const arm_matrix_instance_q15 *pSrcB, - arm_matrix_instance_q15 *pDst, q15_t *pState); +arm_status arm_mat_mult_fast_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst, + q15_t * pState); -/** + /** * @brief Q31 matrix multiplication * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -389,10 +442,12 @@ arm_status arm_mat_mult_fast_q15(const arm_matrix_instance_q15 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_mult_q31(const arm_matrix_instance_q31 *pSrcA, - const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst); +arm_status arm_mat_mult_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); -/** + /** * @brief Q31 matrix multiplication * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -401,19 +456,24 @@ arm_status arm_mat_mult_q31(const arm_matrix_instance_q31 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_mult_opt_q31(const arm_matrix_instance_q31 *pSrcA, - const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst, - q31_t *pState); +arm_status arm_mat_mult_opt_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst, + q31_t *pState); -/** + /** * @brief Q31 matrix and vector multiplication * @param[in] pSrcMat points to the input matrix structure * @param[in] pVec points to vector * @param[out] pDst points to output vector */ -void arm_mat_vec_mult_q31(const arm_matrix_instance_q31 *pSrcMat, const q31_t *pVec, q31_t *pDst); +void arm_mat_vec_mult_q31( + const arm_matrix_instance_q31 *pSrcMat, + const q31_t *pVec, + q31_t *pDst); -/** + /** * @brief Q31 matrix multiplication (fast variant) for Cortex-M3 and Cortex-M4 * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -421,11 +481,12 @@ void arm_mat_vec_mult_q31(const arm_matrix_instance_q31 *pSrcMat, const q31_t *p * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_mult_fast_q31(const arm_matrix_instance_q31 *pSrcA, - const arm_matrix_instance_q31 *pSrcB, - arm_matrix_instance_q31 *pDst); +arm_status arm_mat_mult_fast_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); -/** + /** * @brief Floating-point matrix subtraction * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -433,10 +494,12 @@ arm_status arm_mat_mult_fast_q31(const arm_matrix_instance_q31 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_sub_f32(const arm_matrix_instance_f32 *pSrcA, - const arm_matrix_instance_f32 *pSrcB, arm_matrix_instance_f32 *pDst); +arm_status arm_mat_sub_f32( + const arm_matrix_instance_f32 * pSrcA, + const arm_matrix_instance_f32 * pSrcB, + arm_matrix_instance_f32 * pDst); -/** + /** * @brief Floating-point matrix subtraction * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -444,10 +507,12 @@ arm_status arm_mat_sub_f32(const arm_matrix_instance_f32 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_sub_f64(const arm_matrix_instance_f64 *pSrcA, - const arm_matrix_instance_f64 *pSrcB, arm_matrix_instance_f64 *pDst); +arm_status arm_mat_sub_f64( + const arm_matrix_instance_f64 * pSrcA, + const arm_matrix_instance_f64 * pSrcB, + arm_matrix_instance_f64 * pDst); -/** + /** * @brief Q15 matrix subtraction * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -455,10 +520,12 @@ arm_status arm_mat_sub_f64(const arm_matrix_instance_f64 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_sub_q15(const arm_matrix_instance_q15 *pSrcA, - const arm_matrix_instance_q15 *pSrcB, arm_matrix_instance_q15 *pDst); +arm_status arm_mat_sub_q15( + const arm_matrix_instance_q15 * pSrcA, + const arm_matrix_instance_q15 * pSrcB, + arm_matrix_instance_q15 * pDst); -/** + /** * @brief Q31 matrix subtraction * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -466,10 +533,12 @@ arm_status arm_mat_sub_q15(const arm_matrix_instance_q15 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_sub_q31(const arm_matrix_instance_q31 *pSrcA, - const arm_matrix_instance_q31 *pSrcB, arm_matrix_instance_q31 *pDst); +arm_status arm_mat_sub_q31( + const arm_matrix_instance_q31 * pSrcA, + const arm_matrix_instance_q31 * pSrcB, + arm_matrix_instance_q31 * pDst); -/** + /** * @brief Floating-point matrix scaling. * @param[in] pSrc points to the input matrix * @param[in] scale scale factor @@ -477,10 +546,12 @@ arm_status arm_mat_sub_q31(const arm_matrix_instance_q31 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_scale_f32(const arm_matrix_instance_f32 *pSrc, float32_t scale, - arm_matrix_instance_f32 *pDst); +arm_status arm_mat_scale_f32( + const arm_matrix_instance_f32 * pSrc, + float32_t scale, + arm_matrix_instance_f32 * pDst); -/** + /** * @brief Q15 matrix scaling. * @param[in] pSrc points to input matrix * @param[in] scaleFract fractional portion of the scale factor @@ -489,10 +560,13 @@ arm_status arm_mat_scale_f32(const arm_matrix_instance_f32 *pSrc, float32_t scal * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_scale_q15(const arm_matrix_instance_q15 *pSrc, q15_t scaleFract, int32_t shift, - arm_matrix_instance_q15 *pDst); +arm_status arm_mat_scale_q15( + const arm_matrix_instance_q15 * pSrc, + q15_t scaleFract, + int32_t shift, + arm_matrix_instance_q15 * pDst); -/** + /** * @brief Q31 matrix scaling. * @param[in] pSrc points to input matrix * @param[in] scaleFract fractional portion of the scale factor @@ -501,56 +575,91 @@ arm_status arm_mat_scale_q15(const arm_matrix_instance_q15 *pSrc, q15_t scaleFra * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_scale_q31(const arm_matrix_instance_q31 *pSrc, q31_t scaleFract, int32_t shift, - arm_matrix_instance_q31 *pDst); +arm_status arm_mat_scale_q31( + const arm_matrix_instance_q31 * pSrc, + q31_t scaleFract, + int32_t shift, + arm_matrix_instance_q31 * pDst); -/** + /** * @brief Q31 matrix initialization. * @param[in,out] S points to an instance of the floating-point matrix structure. * @param[in] nRows number of rows in the matrix. * @param[in] nColumns number of columns in the matrix. * @param[in] pData points to the matrix data array. */ -void arm_mat_init_q31(arm_matrix_instance_q31 *S, uint16_t nRows, uint16_t nColumns, q31_t *pData); +void arm_mat_init_q31( + arm_matrix_instance_q31 * S, + uint16_t nRows, + uint16_t nColumns, + q31_t * pData); -/** + /** * @brief Q15 matrix initialization. * @param[in,out] S points to an instance of the floating-point matrix structure. * @param[in] nRows number of rows in the matrix. * @param[in] nColumns number of columns in the matrix. * @param[in] pData points to the matrix data array. */ -void arm_mat_init_q15(arm_matrix_instance_q15 *S, uint16_t nRows, uint16_t nColumns, q15_t *pData); +void arm_mat_init_q15( + arm_matrix_instance_q15 * S, + uint16_t nRows, + uint16_t nColumns, + q15_t * pData); -/** + /** * @brief Floating-point matrix initialization. * @param[in,out] S points to an instance of the floating-point matrix structure. * @param[in] nRows number of rows in the matrix. * @param[in] nColumns number of columns in the matrix. * @param[in] pData points to the matrix data array. */ -void arm_mat_init_f32(arm_matrix_instance_f32 *S, uint16_t nRows, uint16_t nColumns, - float32_t *pData); +void arm_mat_init_f32( + arm_matrix_instance_f32 * S, + uint16_t nRows, + uint16_t nColumns, + float32_t * pData); /** + * @brief Floating-point matrix initialization. + * @param[in,out] S points to an instance of the floating-point matrix structure. + * @param[in] nRows number of rows in the matrix. + * @param[in] nColumns number of columns in the matrix. + * @param[in] pData points to the matrix data array. + */ +void arm_mat_init_f64( + arm_matrix_instance_f64 * S, + uint16_t nRows, + uint16_t nColumns, + float64_t * pData); + + + + + /** * @brief Floating-point matrix inverse. * @param[in] src points to the instance of the input floating-point matrix structure. * @param[out] dst points to the instance of the output floating-point matrix structure. * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. */ -arm_status arm_mat_inverse_f32(const arm_matrix_instance_f32 *src, arm_matrix_instance_f32 *dst); + arm_status arm_mat_inverse_f32( + const arm_matrix_instance_f32 * src, + arm_matrix_instance_f32 * dst); -/** + + /** * @brief Floating-point matrix inverse. * @param[in] src points to the instance of the input floating-point matrix structure. * @param[out] dst points to the instance of the output floating-point matrix structure. * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. */ -arm_status arm_mat_inverse_f64(const arm_matrix_instance_f64 *src, arm_matrix_instance_f64 *dst); + arm_status arm_mat_inverse_f64( + const arm_matrix_instance_f64 * src, + arm_matrix_instance_f64 * dst); -/** + /** * @brief Floating-point Cholesky decomposition of Symmetric Positive Definite Matrix. * @param[in] src points to the instance of the input floating-point matrix structure. * @param[out] dst points to the instance of the output floating-point matrix structure. @@ -559,9 +668,11 @@ arm_status arm_mat_inverse_f64(const arm_matrix_instance_f64 *src, arm_matrix_in * If the matrix is ill conditioned or only semi-definite, then it is better using the LDL^t decomposition. * The decomposition is returning a lower triangular matrix. */ -arm_status arm_mat_cholesky_f64(const arm_matrix_instance_f64 *src, arm_matrix_instance_f64 *dst); + arm_status arm_mat_cholesky_f64( + const arm_matrix_instance_f64 * src, + arm_matrix_instance_f64 * dst); -/** + /** * @brief Floating-point Cholesky decomposition of Symmetric Positive Definite Matrix. * @param[in] src points to the instance of the input floating-point matrix structure. * @param[out] dst points to the instance of the output floating-point matrix structure. @@ -570,53 +681,61 @@ arm_status arm_mat_cholesky_f64(const arm_matrix_instance_f64 *src, arm_matrix_i * If the matrix is ill conditioned or only semi-definite, then it is better using the LDL^t decomposition. * The decomposition is returning a lower triangular matrix. */ -arm_status arm_mat_cholesky_f32(const arm_matrix_instance_f32 *src, arm_matrix_instance_f32 *dst); + arm_status arm_mat_cholesky_f32( + const arm_matrix_instance_f32 * src, + arm_matrix_instance_f32 * dst); -/** + /** * @brief Solve UT . X = A where UT is an upper triangular matrix * @param[in] ut The upper triangular matrix * @param[in] a The matrix a * @param[out] dst The solution X of UT . X = A * @return The function returns ARM_MATH_SINGULAR, if the system can't be solved. */ -arm_status arm_mat_solve_upper_triangular_f32(const arm_matrix_instance_f32 *ut, - const arm_matrix_instance_f32 *a, - arm_matrix_instance_f32 *dst); + arm_status arm_mat_solve_upper_triangular_f32( + const arm_matrix_instance_f32 * ut, + const arm_matrix_instance_f32 * a, + arm_matrix_instance_f32 * dst); -/** + /** * @brief Solve LT . X = A where LT is a lower triangular matrix * @param[in] lt The lower triangular matrix * @param[in] a The matrix a * @param[out] dst The solution X of LT . X = A * @return The function returns ARM_MATH_SINGULAR, if the system can't be solved. */ -arm_status arm_mat_solve_lower_triangular_f32(const arm_matrix_instance_f32 *lt, - const arm_matrix_instance_f32 *a, - arm_matrix_instance_f32 *dst); + arm_status arm_mat_solve_lower_triangular_f32( + const arm_matrix_instance_f32 * lt, + const arm_matrix_instance_f32 * a, + arm_matrix_instance_f32 * dst); -/** + + /** * @brief Solve UT . X = A where UT is an upper triangular matrix * @param[in] ut The upper triangular matrix * @param[in] a The matrix a * @param[out] dst The solution X of UT . X = A * @return The function returns ARM_MATH_SINGULAR, if the system can't be solved. */ -arm_status arm_mat_solve_upper_triangular_f64(const arm_matrix_instance_f64 *ut, - const arm_matrix_instance_f64 *a, - arm_matrix_instance_f64 *dst); + arm_status arm_mat_solve_upper_triangular_f64( + const arm_matrix_instance_f64 * ut, + const arm_matrix_instance_f64 * a, + arm_matrix_instance_f64 * dst); -/** + /** * @brief Solve LT . X = A where LT is a lower triangular matrix * @param[in] lt The lower triangular matrix * @param[in] a The matrix a * @param[out] dst The solution X of LT . X = A * @return The function returns ARM_MATH_SINGULAR, if the system can't be solved. */ -arm_status arm_mat_solve_lower_triangular_f64(const arm_matrix_instance_f64 *lt, - const arm_matrix_instance_f64 *a, - arm_matrix_instance_f64 *dst); + arm_status arm_mat_solve_lower_triangular_f64( + const arm_matrix_instance_f64 * lt, + const arm_matrix_instance_f64 * a, + arm_matrix_instance_f64 * dst); -/** + + /** * @brief Floating-point LDL decomposition of Symmetric Positive Semi-Definite Matrix. * @param[in] src points to the instance of the input floating-point matrix structure. * @param[out] l points to the instance of the output floating-point triangular matrix structure. @@ -626,10 +745,13 @@ arm_status arm_mat_solve_lower_triangular_f64(const arm_matrix_instance_f64 *lt, * If the input matrix does not have a decomposition, then the algorithm terminates and returns error status ARM_MATH_DECOMPOSITION_FAILURE. * The decomposition is returning a lower triangular matrix. */ -arm_status arm_mat_ldlt_f32(const arm_matrix_instance_f32 *src, arm_matrix_instance_f32 *l, - arm_matrix_instance_f32 *d, uint16_t *pp); + arm_status arm_mat_ldlt_f32( + const arm_matrix_instance_f32 * src, + arm_matrix_instance_f32 * l, + arm_matrix_instance_f32 * d, + uint16_t * pp); -/** + /** * @brief Floating-point LDL decomposition of Symmetric Positive Semi-Definite Matrix. * @param[in] src points to the instance of the input floating-point matrix structure. * @param[out] l points to the instance of the output floating-point triangular matrix structure. @@ -639,10 +761,95 @@ arm_status arm_mat_ldlt_f32(const arm_matrix_instance_f32 *src, arm_matrix_insta * If the input matrix does not have a decomposition, then the algorithm terminates and returns error status ARM_MATH_DECOMPOSITION_FAILURE. * The decomposition is returning a lower triangular matrix. */ -arm_status arm_mat_ldlt_f64(const arm_matrix_instance_f64 *src, arm_matrix_instance_f64 *l, - arm_matrix_instance_f64 *d, uint16_t *pp); + arm_status arm_mat_ldlt_f64( + const arm_matrix_instance_f64 * src, + arm_matrix_instance_f64 * l, + arm_matrix_instance_f64 * d, + uint16_t * pp); + +/** + @brief QR decomposition of a m x n floating point matrix with m >= n. + @param[in] pSrc points to input matrix structure. The source matrix is modified by the function. + @param[in] threshold norm2 threshold. + @param[out] pOutR points to output R matrix structure of dimension m x n + @param[out] pOutQ points to output Q matrix structure of dimension m x m + @param[out] pOutTau points to Householder scaling factors of dimension n + @param[inout] pTmpA points to a temporary vector of dimension m. + @param[inout] pTmpB points to a temporary vector of dimension n. + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed + - \ref ARM_MATH_SINGULAR : Input matrix is found to be singular (non-invertible) + */ + +arm_status arm_mat_qr_f32( + const arm_matrix_instance_f32 * pSrc, + const float32_t threshold, + arm_matrix_instance_f32 * pOutR, + arm_matrix_instance_f32 * pOutQ, + float32_t * pOutTau, + float32_t *pTmpA, + float32_t *pTmpB + ); + +/** + @brief QR decomposition of a m x n floating point matrix with m >= n. + @param[in] pSrc points to input matrix structure. The source matrix is modified by the function. + @param[in] threshold norm2 threshold. + @param[out] pOutR points to output R matrix structure of dimension m x n + @param[out] pOutQ points to output Q matrix structure of dimension m x m + @param[out] pOutTau points to Householder scaling factors of dimension n + @param[inout] pTmpA points to a temporary vector of dimension m. + @param[inout] pTmpB points to a temporary vector of dimension n. + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed + - \ref ARM_MATH_SINGULAR : Input matrix is found to be singular (non-invertible) + */ + +arm_status arm_mat_qr_f64( + const arm_matrix_instance_f64 * pSrc, + const float64_t threshold, + arm_matrix_instance_f64 * pOutR, + arm_matrix_instance_f64 * pOutQ, + float64_t * pOutTau, + float64_t *pTmpA, + float64_t *pTmpB + ); + +/** + @brief Householder transform of a floating point vector. + @param[in] pSrc points to the input vector. + @param[in] threshold norm2 threshold. + @param[in] blockSize dimension of the vector space. + @param[outQ] pOut points to the output vector. + @return beta return the scaling factor beta + */ + +float32_t arm_householder_f32( + const float32_t * pSrc, + const float32_t threshold, + uint32_t blockSize, + float32_t * pOut + ); + +/** + @brief Householder transform of a double floating point vector. + @param[in] pSrc points to the input vector. + @param[in] threshold norm2 threshold. + @param[in] blockSize dimension of the vector space. + @param[outQ] pOut points to the output vector. + @return beta return the scaling factor beta + */ + +float64_t arm_householder_f64( + const float64_t * pSrc, + const float64_t threshold, + uint32_t blockSize, + float64_t * pOut + ); -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/matrix_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/matrix_functions_f16.h old mode 100644 new mode 100755 similarity index 61% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/matrix_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/matrix_functions_f16.h index 088ac5e2d46..39eb9a80175 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/matrix_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/matrix_functions_f16.h @@ -23,31 +23,37 @@ * limitations under the License. */ -#ifndef _MATRIX_FUNCTIONS_F16_H_ -#define _MATRIX_FUNCTIONS_F16_H_ + +#ifndef MATRIX_FUNCTIONS_F16_H_ +#define MATRIX_FUNCTIONS_F16_H_ -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif + #include "arm_math_types_f16.h" #include "arm_math_memory.h" #include "dsp/none.h" #include "dsp/utils.h" - + #if defined(ARM_FLOAT16_SUPPORTED) -/** + #define DEFAULT_HOUSEHOLDER_THRESHOLD_F16 (1.0e-3f) + + /** * @brief Instance structure for the floating-point matrix structure. */ -typedef struct { - uint16_t numRows; /**< number of rows of the matrix. */ - uint16_t numCols; /**< number of columns of the matrix. */ - float16_t *pData; /**< points to the data of the matrix. */ -} arm_matrix_instance_f16; + typedef struct + { + uint16_t numRows; /**< number of rows of the matrix. */ + uint16_t numCols; /**< number of columns of the matrix. */ + float16_t *pData; /**< points to the data of the matrix. */ + } arm_matrix_instance_f16; -/** + /** * @brief Floating-point matrix addition. * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -55,10 +61,12 @@ typedef struct { * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_add_f16(const arm_matrix_instance_f16 *pSrcA, - const arm_matrix_instance_f16 *pSrcB, arm_matrix_instance_f16 *pDst); +arm_status arm_mat_add_f16( + const arm_matrix_instance_f16 * pSrcA, + const arm_matrix_instance_f16 * pSrcB, + arm_matrix_instance_f16 * pDst); -/** + /** * @brief Floating-point, complex, matrix multiplication. * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -66,30 +74,34 @@ arm_status arm_mat_add_f16(const arm_matrix_instance_f16 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_cmplx_mult_f16(const arm_matrix_instance_f16 *pSrcA, - const arm_matrix_instance_f16 *pSrcB, - arm_matrix_instance_f16 *pDst); +arm_status arm_mat_cmplx_mult_f16( + const arm_matrix_instance_f16 * pSrcA, + const arm_matrix_instance_f16 * pSrcB, + arm_matrix_instance_f16 * pDst); -/** + /** * @brief Floating-point matrix transpose. * @param[in] pSrc points to the input matrix * @param[out] pDst points to the output matrix * @return The function returns either ARM_MATH_SIZE_MISMATCH * or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_trans_f16(const arm_matrix_instance_f16 *pSrc, arm_matrix_instance_f16 *pDst); +arm_status arm_mat_trans_f16( + const arm_matrix_instance_f16 * pSrc, + arm_matrix_instance_f16 * pDst); -/** + /** * @brief Floating-point complex matrix transpose. * @param[in] pSrc points to the input matrix * @param[out] pDst points to the output matrix * @return The function returns either ARM_MATH_SIZE_MISMATCH * or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_cmplx_trans_f16(const arm_matrix_instance_f16 *pSrc, - arm_matrix_instance_f16 *pDst); +arm_status arm_mat_cmplx_trans_f16( + const arm_matrix_instance_f16 * pSrc, + arm_matrix_instance_f16 * pDst); -/** + /** * @brief Floating-point matrix multiplication * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -97,18 +109,22 @@ arm_status arm_mat_cmplx_trans_f16(const arm_matrix_instance_f16 *pSrc, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_mult_f16(const arm_matrix_instance_f16 *pSrcA, - const arm_matrix_instance_f16 *pSrcB, arm_matrix_instance_f16 *pDst); -/** +arm_status arm_mat_mult_f16( + const arm_matrix_instance_f16 * pSrcA, + const arm_matrix_instance_f16 * pSrcB, + arm_matrix_instance_f16 * pDst); + /** * @brief Floating-point matrix and vector multiplication * @param[in] pSrcMat points to the input matrix structure * @param[in] pVec points to vector * @param[out] pDst points to output vector */ -void arm_mat_vec_mult_f16(const arm_matrix_instance_f16 *pSrcMat, const float16_t *pVec, - float16_t *pDst); +void arm_mat_vec_mult_f16( + const arm_matrix_instance_f16 *pSrcMat, + const float16_t *pVec, + float16_t *pDst); -/** + /** * @brief Floating-point matrix subtraction * @param[in] pSrcA points to the first input matrix structure * @param[in] pSrcB points to the second input matrix structure @@ -116,10 +132,12 @@ void arm_mat_vec_mult_f16(const arm_matrix_instance_f16 *pSrcMat, const float16_ * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_sub_f16(const arm_matrix_instance_f16 *pSrcA, - const arm_matrix_instance_f16 *pSrcB, arm_matrix_instance_f16 *pDst); +arm_status arm_mat_sub_f16( + const arm_matrix_instance_f16 * pSrcA, + const arm_matrix_instance_f16 * pSrcB, + arm_matrix_instance_f16 * pDst); -/** + /** * @brief Floating-point matrix scaling. * @param[in] pSrc points to the input matrix * @param[in] scale scale factor @@ -127,29 +145,38 @@ arm_status arm_mat_sub_f16(const arm_matrix_instance_f16 *pSrcA, * @return The function returns either * ARM_MATH_SIZE_MISMATCH or ARM_MATH_SUCCESS based on the outcome of size checking. */ -arm_status arm_mat_scale_f16(const arm_matrix_instance_f16 *pSrc, float16_t scale, - arm_matrix_instance_f16 *pDst); +arm_status arm_mat_scale_f16( + const arm_matrix_instance_f16 * pSrc, + float16_t scale, + arm_matrix_instance_f16 * pDst); -/** + /** * @brief Floating-point matrix initialization. * @param[in,out] S points to an instance of the floating-point matrix structure. * @param[in] nRows number of rows in the matrix. * @param[in] nColumns number of columns in the matrix. * @param[in] pData points to the matrix data array. */ -void arm_mat_init_f16(arm_matrix_instance_f16 *S, uint16_t nRows, uint16_t nColumns, - float16_t *pData); +void arm_mat_init_f16( + arm_matrix_instance_f16 * S, + uint16_t nRows, + uint16_t nColumns, + float16_t * pData); -/** + + /** * @brief Floating-point matrix inverse. * @param[in] src points to the instance of the input floating-point matrix structure. * @param[out] dst points to the instance of the output floating-point matrix structure. * @return The function returns ARM_MATH_SIZE_MISMATCH, if the dimensions do not match. * If the input matrix is singular (does not have an inverse), then the algorithm terminates and returns error status ARM_MATH_SINGULAR. */ -arm_status arm_mat_inverse_f16(const arm_matrix_instance_f16 *src, arm_matrix_instance_f16 *dst); + arm_status arm_mat_inverse_f16( + const arm_matrix_instance_f16 * src, + arm_matrix_instance_f16 * dst); -/** + + /** * @brief Floating-point Cholesky decomposition of Symmetric Positive Definite Matrix. * @param[in] src points to the instance of the input floating-point matrix structure. * @param[out] dst points to the instance of the output floating-point matrix structure. @@ -158,32 +185,76 @@ arm_status arm_mat_inverse_f16(const arm_matrix_instance_f16 *src, arm_matrix_in * If the matrix is ill conditioned or only semi-definite, then it is better using the LDL^t decomposition. * The decomposition is returning a lower triangular matrix. */ -arm_status arm_mat_cholesky_f16(const arm_matrix_instance_f16 *src, arm_matrix_instance_f16 *dst); + arm_status arm_mat_cholesky_f16( + const arm_matrix_instance_f16 * src, + arm_matrix_instance_f16 * dst); -/** + /** * @brief Solve UT . X = A where UT is an upper triangular matrix * @param[in] ut The upper triangular matrix * @param[in] a The matrix a * @param[out] dst The solution X of UT . X = A * @return The function returns ARM_MATH_SINGULAR, if the system can't be solved. */ -arm_status arm_mat_solve_upper_triangular_f16(const arm_matrix_instance_f16 *ut, - const arm_matrix_instance_f16 *a, - arm_matrix_instance_f16 *dst); + arm_status arm_mat_solve_upper_triangular_f16( + const arm_matrix_instance_f16 * ut, + const arm_matrix_instance_f16 * a, + arm_matrix_instance_f16 * dst); -/** + /** * @brief Solve LT . X = A where LT is a lower triangular matrix * @param[in] lt The lower triangular matrix * @param[in] a The matrix a * @param[out] dst The solution X of LT . X = A * @return The function returns ARM_MATH_SINGULAR, if the system can't be solved. */ -arm_status arm_mat_solve_lower_triangular_f16(const arm_matrix_instance_f16 *lt, - const arm_matrix_instance_f16 *a, - arm_matrix_instance_f16 *dst); + arm_status arm_mat_solve_lower_triangular_f16( + const arm_matrix_instance_f16 * lt, + const arm_matrix_instance_f16 * a, + arm_matrix_instance_f16 * dst); + + +/** + @brief QR decomposition of a m x n floating point matrix with m >= n. + @param[in] pSrc points to input matrix structure. The source matrix is modified by the function. + @param[in] threshold norm2 threshold. + @param[out] pOutR points to output R matrix structure of dimension m x n + @param[out] pOutQ points to output Q matrix structure of dimension m x m + @param[out] pOutTau points to Householder scaling factors of dimension n + @param[inout] pTmpA points to a temporary vector of dimension m. + @param[inout] pTmpB points to a temporary vector of dimension n. + @return execution status + - \ref ARM_MATH_SUCCESS : Operation successful + - \ref ARM_MATH_SIZE_MISMATCH : Matrix size check failed + - \ref ARM_MATH_SINGULAR : Input matrix is found to be singular (non-invertible) + */ +arm_status arm_mat_qr_f16( + const arm_matrix_instance_f16 * pSrc, + const float16_t threshold, + arm_matrix_instance_f16 * pOutR, + arm_matrix_instance_f16 * pOutQ, + float16_t * pOutTau, + float16_t *pTmpA, + float16_t *pTmpB + ); + +/** + @brief Householder transform of a half floating point vector. + @param[in] pSrc points to the input vector. + @param[in] threshold norm2 threshold. + @param[in] blockSize dimension of the vector space. + @param[outQ] pOut points to the output vector. + @return beta return the scaling factor beta + */ +float16_t arm_householder_f16( + const float16_t * pSrc, + const float16_t threshold, + uint32_t blockSize, + float16_t * pOut + ); #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/matrix_utils.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/matrix_utils.h new file mode 100755 index 00000000000..79e7f8cf103 --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/matrix_utils.h @@ -0,0 +1,640 @@ +/****************************************************************************** + * @file matrix_utils.h + * @brief Public header file for CMSIS DSP Library + * @version V1.11.0 + * @date 30 May 2022 + * Target Processor: Cortex-M and Cortex-A cores + ******************************************************************************/ +/* + * Copyright (c) 2010-2022 Arm Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef MATRIX_UTILS_H_ +#define MATRIX_UTILS_H_ + +#include "arm_math_types.h" +#include "arm_math_memory.h" + +#include "dsp/none.h" +#include "dsp/utils.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define ELEM(A,ROW,COL) &((A)->pData[(A)->numCols* (ROW) + (COL)]) + +#define SCALE_COL_T(T,CAST,A,ROW,v,i) \ +{ \ + int32_t _w; \ + T *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols; \ + const int32_t nb = (A)->numRows - ROW;\ + \ + data += i + _numCols * (ROW); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + *data *= CAST v; \ + data += _numCols; \ + } \ +} + +#define COPY_COL_T(T,A,ROW,COL,DST) \ +{ \ + uint32_t _row; \ + T *_pb=DST; \ + T *_pa = (A)->pData + ROW * (A)->numCols + COL;\ + for(_row = ROW; _row < (A)->numRows; _row ++) \ + { \ + *_pb++ = *_pa; \ + _pa += (A)->numCols; \ + } \ +} + +#if defined(ARM_FLOAT16_SUPPORTED) +#if defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) + +#define SWAP_ROWS_F16(A,COL,i,j) \ + { \ + int cnt = ((A)->numCols)-(COL); \ + int32_t _w; \ + float16_t *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols; \ + \ + for(_w=(COL);_w < _numCols; _w+=8) \ + { \ + f16x8_t tmpa,tmpb; \ + mve_pred16_t p0 = vctp16q(cnt); \ + \ + tmpa=vldrhq_z_f16(&data[i*_numCols + _w],p0);\ + tmpb=vldrhq_z_f16(&data[j*_numCols + _w],p0);\ + \ + vstrhq_p(&data[i*_numCols + _w], tmpb, p0); \ + vstrhq_p(&data[j*_numCols + _w], tmpa, p0); \ + \ + cnt -= 8; \ + } \ + } + +#define SCALE_ROW_F16(A,COL,v,i) \ +{ \ + int cnt = ((A)->numCols)-(COL); \ + int32_t _w; \ + float16_t *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols; \ + \ + for(_w=(COL);_w < _numCols; _w+=8) \ + { \ + f16x8_t tmpa; \ + mve_pred16_t p0 = vctp16q(cnt); \ + tmpa = vldrhq_z_f16(&data[i*_numCols + _w],p0);\ + tmpa = vmulq_n_f16(tmpa,(_Float16)v); \ + vstrhq_p(&data[i*_numCols + _w], tmpa, p0); \ + cnt -= 8; \ + } \ + \ +} + +#define MAC_ROW_F16(COL,A,i,v,B,j) \ +{ \ + int cnt = ((A)->numCols)-(COL); \ + int32_t _w; \ + float16_t *dataA = (A)->pData; \ + float16_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols; \ + \ + for(_w=(COL);_w < _numCols; _w+=8) \ + { \ + f16x8_t tmpa,tmpb; \ + mve_pred16_t p0 = vctp16q(cnt); \ + tmpa = vldrhq_z_f16(&dataA[i*_numCols + _w],p0);\ + tmpb = vldrhq_z_f16(&dataB[j*_numCols + _w],p0);\ + tmpa = vfmaq_n_f16(tmpa,tmpb,v); \ + vstrhq_p(&dataA[i*_numCols + _w], tmpa, p0); \ + cnt -= 8; \ + } \ + \ +} + +#define MAS_ROW_F16(COL,A,i,v,B,j) \ +{ \ + int cnt = ((A)->numCols)-(COL); \ + int32_t _w; \ + float16_t *dataA = (A)->pData; \ + float16_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols; \ + f16x8_t vec=vdupq_n_f16(v); \ + \ + for(_w=(COL);_w < _numCols; _w+=8) \ + { \ + f16x8_t tmpa,tmpb; \ + mve_pred16_t p0 = vctp16q(cnt); \ + tmpa = vldrhq_z_f16(&dataA[i*_numCols + _w],p0);\ + tmpb = vldrhq_z_f16(&dataB[j*_numCols + _w],p0);\ + tmpa = vfmsq_f16(tmpa,tmpb,vec); \ + vstrhq_p(&dataA[i*_numCols + _w], tmpa, p0); \ + cnt -= 8; \ + } \ + \ +} + +#else + + +#define SWAP_ROWS_F16(A,COL,i,j) \ +{ \ + int32_t _w; \ + float16_t *dataI = (A)->pData; \ + float16_t *dataJ = (A)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols-(COL); \ + \ + dataI += i*_numCols + (COL); \ + dataJ += j*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + float16_t tmp; \ + tmp = *dataI; \ + *dataI++ = *dataJ; \ + *dataJ++ = tmp; \ + } \ +} + +#define SCALE_ROW_F16(A,COL,v,i) \ +{ \ + int32_t _w; \ + float16_t *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols-(COL); \ + \ + data += i*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + *data++ *= (_Float16)v; \ + } \ +} + + +#define MAC_ROW_F16(COL,A,i,v,B,j) \ +{ \ + int32_t _w; \ + float16_t *dataA = (A)->pData; \ + float16_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols; \ + const int32_t nb = _numCols-(COL); \ + \ + dataA += i*_numCols + (COL); \ + dataB += j*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + *dataA++ += (_Float16)v * (_Float16)*dataB++;\ + } \ +} + +#define MAS_ROW_F16(COL,A,i,v,B,j) \ +{ \ + int32_t _w; \ + float16_t *dataA = (A)->pData; \ + float16_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols; \ + const int32_t nb = _numCols-(COL); \ + \ + dataA += i*_numCols + (COL); \ + dataB += j*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + *dataA++ -= (_Float16)v * (_Float16)*dataB++;\ + } \ +} + +#endif /*defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE)*/ + +/* Functions with only a scalar version */ +#define COPY_COL_F16(A,ROW,COL,DST) \ + COPY_COL_T(float16_t,A,ROW,COL,DST) + +#define SCALE_COL_F16(A,ROW,v,i) \ + SCALE_COL_T(float16_t,(_Float16),A,ROW,v,i) + +#endif /* defined(ARM_FLOAT16_SUPPORTED)*/ + +#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + +#define SWAP_ROWS_F32(A,COL,i,j) \ + { \ + int cnt = ((A)->numCols)-(COL); \ + float32_t *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols; \ + int32_t _w; \ + \ + for(_w=(COL);_w < _numCols; _w+=4) \ + { \ + f32x4_t tmpa,tmpb; \ + mve_pred16_t p0 = vctp32q(cnt); \ + \ + tmpa=vldrwq_z_f32(&data[i*_numCols + _w],p0);\ + tmpb=vldrwq_z_f32(&data[j*_numCols + _w],p0);\ + \ + vstrwq_p(&data[i*_numCols + _w], tmpb, p0); \ + vstrwq_p(&data[j*_numCols + _w], tmpa, p0); \ + \ + cnt -= 4; \ + } \ + } + +#define MAC_ROW_F32(COL,A,i,v,B,j) \ +{ \ + int cnt = ((A)->numCols)-(COL); \ + float32_t *dataA = (A)->pData; \ + float32_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols; \ + int32_t _w; \ + \ + for(_w=(COL);_w < _numCols; _w+=4) \ + { \ + f32x4_t tmpa,tmpb; \ + mve_pred16_t p0 = vctp32q(cnt); \ + tmpa = vldrwq_z_f32(&dataA[i*_numCols + _w],p0);\ + tmpb = vldrwq_z_f32(&dataB[j*_numCols + _w],p0);\ + tmpa = vfmaq_n_f32(tmpa,tmpb,v); \ + vstrwq_p(&dataA[i*_numCols + _w], tmpa, p0); \ + cnt -= 4; \ + } \ + \ +} + +#define MAS_ROW_F32(COL,A,i,v,B,j) \ +{ \ + int cnt = ((A)->numCols)-(COL); \ + float32_t *dataA = (A)->pData; \ + float32_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols; \ + int32_t _w; \ + f32x4_t vec=vdupq_n_f32(v); \ + \ + for(_w=(COL);_w < _numCols; _w+=4) \ + { \ + f32x4_t tmpa,tmpb; \ + mve_pred16_t p0 = vctp32q(cnt); \ + tmpa = vldrwq_z_f32(&dataA[i*_numCols + _w],p0);\ + tmpb = vldrwq_z_f32(&dataB[j*_numCols + _w],p0);\ + tmpa = vfmsq_f32(tmpa,tmpb,vec); \ + vstrwq_p(&dataA[i*_numCols + _w], tmpa, p0); \ + cnt -= 4; \ + } \ + \ +} + +#define SCALE_ROW_F32(A,COL,v,i) \ +{ \ + int cnt = ((A)->numCols)-(COL); \ + float32_t *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols; \ + int32_t _w; \ + \ + for(_w=(COL);_w < _numCols; _w+=4) \ + { \ + f32x4_t tmpa; \ + mve_pred16_t p0 = vctp32q(cnt); \ + tmpa = vldrwq_z_f32(&data[i*_numCols + _w],p0);\ + tmpa = vmulq_n_f32(tmpa,v); \ + vstrwq_p(&data[i*_numCols + _w], tmpa, p0); \ + cnt -= 4; \ + } \ + \ +} + +#elif defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) + +#define SWAP_ROWS_F32(A,COL,i,j) \ +{ \ + int32_t _w; \ + float32_t *dataI = (A)->pData; \ + float32_t *dataJ = (A)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols - COL; \ + \ + dataI += i*_numCols + (COL); \ + dataJ += j*_numCols + (COL); \ + \ + float32_t tmp; \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + tmp = *dataI; \ + *dataI++ = *dataJ; \ + *dataJ++ = tmp; \ + } \ +} + +#define MAC_ROW_F32(COL,A,i,v,B,j) \ +{ \ + float32_t *dataA = (A)->pData; \ + float32_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols - (COL); \ + int32_t nbElems; \ + f32x4_t vec = vdupq_n_f32(v); \ + \ + nbElems = nb >> 2; \ + \ + dataA += i*_numCols + (COL); \ + dataB += j*_numCols + (COL); \ + \ + while(nbElems>0) \ + { \ + f32x4_t tmpa,tmpb; \ + tmpa = vld1q_f32(dataA,p0); \ + tmpb = vld1q_f32(dataB,p0); \ + tmpa = vmlaq_f32(tmpa,tmpb,vec);\ + vst1q_f32(dataA, tmpa, p0); \ + nbElems--; \ + dataA += 4; \ + dataB += 4; \ + } \ + \ + nbElems = nb & 3; \ + while(nbElems > 0) \ + { \ + *dataA++ += v* *dataB++; \ + nbElems--; \ + } \ +} + +#define MAS_ROW_F32(COL,A,i,v,B,j) \ +{ \ + float32_t *dataA = (A)->pData; \ + float32_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols - (COL); \ + int32_t nbElems; \ + f32x4_t vec = vdupq_n_f32(v); \ + \ + nbElems = nb >> 2; \ + \ + dataA += i*_numCols + (COL); \ + dataB += j*_numCols + (COL); \ + \ + while(nbElems>0) \ + { \ + f32x4_t tmpa,tmpb; \ + tmpa = vld1q_f32(dataA); \ + tmpb = vld1q_f32(dataB); \ + tmpa = vmlsq_f32(tmpa,tmpb,vec);\ + vst1q_f32(dataA, tmpa); \ + nbElems--; \ + dataA += 4; \ + dataB += 4; \ + } \ + \ + nbElems = nb & 3; \ + while(nbElems > 0) \ + { \ + *dataA++ -= v* *dataB++; \ + nbElems--; \ + } \ +} + +#define SCALE_ROW_F32(A,COL,v,i) \ +{ \ + float32_t *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols; \ + const int32_t nb = _numCols - (COL); \ + int32_t nbElems; \ + f32x4_t vec = vdupq_n_f32(v); \ + \ + nbElems = nb >> 2; \ + \ + data += i*_numCols + (COL); \ + while(nbElems>0) \ + { \ + f32x4_t tmpa; \ + tmpa = vld1q_f32(data); \ + tmpa = vmulq_f32(tmpa,vec); \ + vst1q_f32(data, tmpa); \ + data += 4; \ + nbElems --; \ + } \ + \ + nbElems = nb & 3; \ + while(nbElems > 0) \ + { \ + *data++ *= v; \ + nbElems--; \ + } \ + \ +} + +#else + +#define SWAP_ROWS_F32(A,COL,i,j) \ +{ \ + int32_t _w; \ + float32_t tmp; \ + float32_t *dataI = (A)->pData; \ + float32_t *dataJ = (A)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols - COL; \ + \ + dataI += i*_numCols + (COL); \ + dataJ += j*_numCols + (COL); \ + \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + tmp = *dataI; \ + *dataI++ = *dataJ; \ + *dataJ++ = tmp; \ + } \ +} + +#define SCALE_ROW_F32(A,COL,v,i) \ +{ \ + int32_t _w; \ + float32_t *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols - COL; \ + \ + data += i*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + *data++ *= v; \ + } \ +} + + +#define MAC_ROW_F32(COL,A,i,v,B,j) \ +{ \ + int32_t _w; \ + float32_t *dataA = (A)->pData; \ + float32_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols-(COL); \ + \ + dataA = dataA + i*_numCols + (COL); \ + dataB = dataB + j*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + *dataA++ += v* *dataB++; \ + } \ +} + +#define MAS_ROW_F32(COL,A,i,v,B,j) \ +{ \ + int32_t _w; \ + float32_t *dataA = (A)->pData; \ + float32_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols-(COL); \ + \ + dataA = dataA + i*_numCols + (COL); \ + dataB = dataB + j*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + *dataA++ -= v* *dataB++; \ + } \ +} + +#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ + + +/* Functions _with only a scalar version */ + +#define COPY_COL_F32(A,ROW,COL,DST) \ + COPY_COL_T(float32_t,A,ROW,COL,DST) + +#define COPY_COL_F64(A,ROW,COL,DST) \ + COPY_COL_T(float64_t,A,ROW,COL,DST) + +#define SWAP_COLS_F32(A,COL,i,j) \ +{ \ + int32_t _w; \ + float32_t *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols; \ + for(_w=(COL);_w < _numCols; _w++) \ + { \ + float32_t tmp; \ + tmp = data[_w*_numCols + i]; \ + data[_w*_numCols + i] = data[_w*_numCols + j];\ + data[_w*_numCols + j] = tmp; \ + } \ +} + +#define SCALE_COL_F32(A,ROW,v,i) \ + SCALE_COL_T(float32_t,,A,ROW,v,i) + +#define SWAP_ROWS_F64(A,COL,i,j) \ +{ \ + int32_t _w; \ + float64_t *dataI = (A)->pData; \ + float64_t *dataJ = (A)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols-(COL); \ + \ + dataI += i*_numCols + (COL); \ + dataJ += j*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + float64_t tmp; \ + tmp = *dataI; \ + *dataI++ = *dataJ; \ + *dataJ++ = tmp; \ + } \ +} + +#define SWAP_COLS_F64(A,COL,i,j) \ +{ \ + int32_t _w; \ + float64_t *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols; \ + for(_w=(COL);_w < _numCols; _w++) \ + { \ + float64_t tmp; \ + tmp = data[_w*_numCols + i]; \ + data[_w*_numCols + i] = data[_w*_numCols + j];\ + data[_w*_numCols + j] = tmp; \ + } \ +} + +#define SCALE_ROW_F64(A,COL,v,i) \ +{ \ + int32_t _w; \ + float64_t *data = (A)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols-(COL); \ + \ + data += i*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + *data++ *= v; \ + } \ +} + +#define SCALE_COL_F64(A,ROW,v,i) \ + SCALE_COL_T(float64_t,,A,ROW,v,i) + +#define MAC_ROW_F64(COL,A,i,v,B,j) \ +{ \ + int32_t _w; \ + float64_t *dataA = (A)->pData; \ + float64_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols-(COL); \ + \ + dataA += i*_numCols + (COL); \ + dataB += j*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + *dataA++ += v* *dataB++; \ + } \ +} + +#define MAS_ROW_F64(COL,A,i,v,B,j) \ +{ \ + int32_t _w; \ + float64_t *dataA = (A)->pData; \ + float64_t *dataB = (B)->pData; \ + const int32_t _numCols = (A)->numCols;\ + const int32_t nb = _numCols-(COL); \ + \ + dataA += i*_numCols + (COL); \ + dataB += j*_numCols + (COL); \ + \ + for(_w=0;_w < nb; _w++) \ + { \ + *dataA++ -= v* *dataB++; \ + } \ +} + +#ifdef __cplusplus +} +#endif + +#endif /* ifndef _MATRIX_UTILS_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/none.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/none.h new file mode 100755 index 00000000000..7551ee95ed8 --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/none.h @@ -0,0 +1,576 @@ +/****************************************************************************** + * @file none.h + * @brief Intrinsincs when no DSP extension available + * @version V1.9.0 + * @date 20. July 2020 + ******************************************************************************/ +/* + * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + +Definitions in this file are allowing to reuse some versions of the +CMSIS-DSP to build on a core (M0 for instance) or a host where +DSP extension are not available. + +Ideally a pure C version should have been used instead. +But those are not always available or use a restricted set +of intrinsics. + +*/ + +#ifndef NONE_H_ +#define NONE_H_ + +#include "arm_math_types.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + + +/* + +Normally those kind of definitions are in a compiler file +in Core or Core_A. + +But for MSVC compiler it is a bit special. The goal is very specific +to CMSIS-DSP and only to allow the use of this library from other +systems like Python or Matlab. + +MSVC is not going to be used to cross-compile to ARM. So, having a MSVC +compiler file in Core or Core_A would not make sense. + +*/ +#if defined ( _MSC_VER ) || defined(__GNUC_PYTHON__) || defined(__APPLE_CC__) + __STATIC_FORCEINLINE uint8_t __CLZ(uint32_t data) + { + if (data == 0U) { return 32U; } + + uint32_t count = 0U; + uint32_t mask = 0x80000000U; + + while ((data & mask) == 0U) + { + count += 1U; + mask = mask >> 1U; + } + return count; + } + + __STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) + { + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; + } + + __STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) + { + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; + } + + /** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +#endif + +/** + * @brief Clips Q63 to Q31 values. + */ + __STATIC_FORCEINLINE q31_t clip_q63_to_q31( + q63_t x) + { + return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? + ((0x7FFFFFFF ^ ((q31_t) (x >> 63)))) : (q31_t) x; + } + + /** + * @brief Clips Q63 to Q15 values. + */ + __STATIC_FORCEINLINE q15_t clip_q63_to_q15( + q63_t x) + { + return ((q31_t) (x >> 32) != ((q31_t) x >> 31)) ? + ((0x7FFF ^ ((q15_t) (x >> 63)))) : (q15_t) (x >> 15); + } + + /** + * @brief Clips Q31 to Q7 values. + */ + __STATIC_FORCEINLINE q7_t clip_q31_to_q7( + q31_t x) + { + return ((q31_t) (x >> 24) != ((q31_t) x >> 23)) ? + ((0x7F ^ ((q7_t) (x >> 31)))) : (q7_t) x; + } + + /** + * @brief Clips Q31 to Q15 values. + */ + __STATIC_FORCEINLINE q15_t clip_q31_to_q15( + q31_t x) + { + return ((q31_t) (x >> 16) != ((q31_t) x >> 15)) ? + ((0x7FFF ^ ((q15_t) (x >> 31)))) : (q15_t) x; + } + + /** + * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format. + */ + __STATIC_FORCEINLINE q63_t mult32x64( + q63_t x, + q31_t y) + { + return ((((q63_t) (x & 0x00000000FFFFFFFF) * y) >> 32) + + (((q63_t) (x >> 32) * y) ) ); + } + +/* SMMLAR */ +#define multAcc_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((((q63_t) a) << 32) + ((q63_t) x * y) + 0x80000000LL ) >> 32) + +/* SMMLSR */ +#define multSub_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((((q63_t) a) << 32) - ((q63_t) x * y) + 0x80000000LL ) >> 32) + +/* SMMULR */ +#define mult_32x32_keep32_R(a, x, y) \ + a = (q31_t) (((q63_t) x * y + 0x80000000LL ) >> 32) + +/* SMMLA */ +#define multAcc_32x32_keep32(a, x, y) \ + a += (q31_t) (((q63_t) x * y) >> 32) + +/* SMMLS */ +#define multSub_32x32_keep32(a, x, y) \ + a -= (q31_t) (((q63_t) x * y) >> 32) + +/* SMMUL */ +#define mult_32x32_keep32(a, x, y) \ + a = (q31_t) (((q63_t) x * y ) >> 32) + +#ifndef ARM_MATH_DSP + /** + * @brief definition to pack two 16 bit values. + */ + #define __PKHBT(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | \ + (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000) ) + #define __PKHTB(ARG1, ARG2, ARG3) ( (((int32_t)(ARG1) << 0) & (int32_t)0xFFFF0000) | \ + (((int32_t)(ARG2) >> ARG3) & (int32_t)0x0000FFFF) ) +#endif + + /** + * @brief definition to pack four 8 bit values. + */ +#ifndef ARM_MATH_BIG_ENDIAN + #define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v0) << 0) & (int32_t)0x000000FF) | \ + (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | \ + (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | \ + (((int32_t)(v3) << 24) & (int32_t)0xFF000000) ) +#else + #define __PACKq7(v0,v1,v2,v3) ( (((int32_t)(v3) << 0) & (int32_t)0x000000FF) | \ + (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | \ + (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | \ + (((int32_t)(v0) << 24) & (int32_t)0xFF000000) ) +#endif + + + + +/* + * @brief C custom defined intrinsic functions + */ +#if !defined (ARM_MATH_DSP) + + + /* + * @brief C custom defined QADD8 + */ + __STATIC_FORCEINLINE uint32_t __QADD8( + uint32_t x, + uint32_t y) + { + q31_t r, s, t, u; + + r = __SSAT(((((q31_t)x << 24) >> 24) + (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; + s = __SSAT(((((q31_t)x << 16) >> 24) + (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; + t = __SSAT(((((q31_t)x << 8) >> 24) + (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; + u = __SSAT(((((q31_t)x ) >> 24) + (((q31_t)y ) >> 24)), 8) & (int32_t)0x000000FF; + + return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r ))); + } + + + /* + * @brief C custom defined QSUB8 + */ + __STATIC_FORCEINLINE uint32_t __QSUB8( + uint32_t x, + uint32_t y) + { + q31_t r, s, t, u; + + r = __SSAT(((((q31_t)x << 24) >> 24) - (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; + s = __SSAT(((((q31_t)x << 16) >> 24) - (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; + t = __SSAT(((((q31_t)x << 8) >> 24) - (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; + u = __SSAT(((((q31_t)x ) >> 24) - (((q31_t)y ) >> 24)), 8) & (int32_t)0x000000FF; + + return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r ))); + } + + + /* + * @brief C custom defined QADD16 + */ + __STATIC_FORCEINLINE uint32_t __QADD16( + uint32_t x, + uint32_t y) + { +/* q31_t r, s; without initialisation 'arm_offset_q15 test' fails but 'intrinsic' tests pass! for armCC */ + q31_t r = 0, s = 0; + + r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((q31_t)x ) >> 16) + (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined SHADD16 + */ + __STATIC_FORCEINLINE uint32_t __SHADD16( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = (((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((q31_t)x ) >> 16) + (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined QSUB16 + */ + __STATIC_FORCEINLINE uint32_t __QSUB16( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((q31_t)x ) >> 16) - (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined SHSUB16 + */ + __STATIC_FORCEINLINE uint32_t __SHSUB16( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = (((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((q31_t)x ) >> 16) - (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined QASX + */ + __STATIC_FORCEINLINE uint32_t __QASX( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((q31_t)x ) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined SHASX + */ + __STATIC_FORCEINLINE uint32_t __SHASX( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = (((((q31_t)x << 16) >> 16) - (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((q31_t)x ) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined QSAX + */ + __STATIC_FORCEINLINE uint32_t __QSAX( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y ) >> 16)), 16) & (int32_t)0x0000FFFF; + s = __SSAT(((((q31_t)x ) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined SHSAX + */ + __STATIC_FORCEINLINE uint32_t __SHSAX( + uint32_t x, + uint32_t y) + { + q31_t r, s; + + r = (((((q31_t)x << 16) >> 16) + (((q31_t)y ) >> 16)) >> 1) & (int32_t)0x0000FFFF; + s = (((((q31_t)x ) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; + + return ((uint32_t)((s << 16) | (r ))); + } + + + /* + * @brief C custom defined SMUSDX + */ + __STATIC_FORCEINLINE uint32_t __SMUSDX( + uint32_t x, + uint32_t y) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) - + ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) )); + } + + /* + * @brief C custom defined SMUADX + */ + __STATIC_FORCEINLINE uint32_t __SMUADX( + uint32_t x, + uint32_t y) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) )); + } + + + /* + * @brief C custom defined QADD + */ + __STATIC_FORCEINLINE int32_t __QADD( + int32_t x, + int32_t y) + { + return ((int32_t)(clip_q63_to_q31((q63_t)x + (q31_t)y))); + } + + + /* + * @brief C custom defined QSUB + */ + __STATIC_FORCEINLINE int32_t __QSUB( + int32_t x, + int32_t y) + { + return ((int32_t)(clip_q63_to_q31((q63_t)x - (q31_t)y))); + } + + + /* + * @brief C custom defined SMLAD + */ + __STATIC_FORCEINLINE uint32_t __SMLAD( + uint32_t x, + uint32_t y, + uint32_t sum) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) + + ( ((q31_t)sum ) ) )); + } + + + /* + * @brief C custom defined SMLADX + */ + __STATIC_FORCEINLINE uint32_t __SMLADX( + uint32_t x, + uint32_t y, + uint32_t sum) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + + ( ((q31_t)sum ) ) )); + } + + + /* + * @brief C custom defined SMLSDX + */ + __STATIC_FORCEINLINE uint32_t __SMLSDX( + uint32_t x, + uint32_t y, + uint32_t sum) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) - + ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + + ( ((q31_t)sum ) ) )); + } + + + /* + * @brief C custom defined SMLALD + */ + __STATIC_FORCEINLINE uint64_t __SMLALD( + uint32_t x, + uint32_t y, + uint64_t sum) + { +/* return (sum + ((q15_t) (x >> 16) * (q15_t) (y >> 16)) + ((q15_t) x * (q15_t) y)); */ + return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) + + ( ((q63_t)sum ) ) )); + } + + + /* + * @brief C custom defined SMLALDX + */ + __STATIC_FORCEINLINE uint64_t __SMLALDX( + uint32_t x, + uint32_t y, + uint64_t sum) + { +/* return (sum + ((q15_t) (x >> 16) * (q15_t) y)) + ((q15_t) x * (q15_t) (y >> 16)); */ + return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y ) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y << 16) >> 16)) + + ( ((q63_t)sum ) ) )); + } + + + /* + * @brief C custom defined SMUAD + */ + __STATIC_FORCEINLINE uint32_t __SMUAD( + uint32_t x, + uint32_t y) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + + ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) )); + } + + + /* + * @brief C custom defined SMUSD + */ + __STATIC_FORCEINLINE uint32_t __SMUSD( + uint32_t x, + uint32_t y) + { + return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) - + ((((q31_t)x ) >> 16) * (((q31_t)y ) >> 16)) )); + } + + + /* + * @brief C custom defined SXTB16 + */ + __STATIC_FORCEINLINE uint32_t __SXTB16( + uint32_t x) + { + return ((uint32_t)(((((q31_t)x << 24) >> 24) & (q31_t)0x0000FFFF) | + ((((q31_t)x << 8) >> 8) & (q31_t)0xFFFF0000) )); + } + + /* + * @brief C custom defined SMMLA + */ + __STATIC_FORCEINLINE int32_t __SMMLA( + int32_t x, + int32_t y, + int32_t sum) + { + return (sum + (int32_t) (((int64_t) x * y) >> 32)); + } + +#endif /* !defined (ARM_MATH_DSP) */ + + +#ifdef __cplusplus +} +#endif + +#endif /* ifndef _TRANSFORM_FUNCTIONS_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/quaternion_math_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/quaternion_math_functions.h old mode 100644 new mode 100755 similarity index 81% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/quaternion_math_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/quaternion_math_functions.h index 33cc3b0c7a2..6c823a368b6 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/quaternion_math_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/quaternion_math_functions.h @@ -24,8 +24,9 @@ * limitations under the License. */ -#ifndef _QUATERNION_MATH_FUNCTIONS_H_ -#define _QUATERNION_MATH_FUNCTIONS_H_ + +#ifndef QUATERNION_MATH_FUNCTIONS_H_ +#define QUATERNION_MATH_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -33,8 +34,10 @@ #include "dsp/none.h" #include "dsp/utils.h" -#ifdef __cplusplus -extern "C" { + +#ifdef __cplusplus +extern "C" +{ #endif /** @@ -43,56 +46,61 @@ extern "C" { * rotation and quaternion representation. */ + /** @brief Floating-point quaternion Norm. @param[in] pInputQuaternions points to the input vector of quaternions @param[out] pNorms points to the output vector of norms @param[in] nbQuaternions number of quaternions in each vector - @return none */ +void arm_quaternion_norm_f32(const float32_t *pInputQuaternions, + float32_t *pNorms, + uint32_t nbQuaternions); -void arm_quaternion_norm_f32(const float32_t *pInputQuaternions, float32_t *pNorms, - uint32_t nbQuaternions); /** @brief Floating-point quaternion inverse. @param[in] pInputQuaternions points to the input vector of quaternions @param[out] pInverseQuaternions points to the output vector of inverse quaternions @param[in] nbQuaternions number of quaternions in each vector - @return none */ +void arm_quaternion_inverse_f32(const float32_t *pInputQuaternions, + float32_t *pInverseQuaternions, + uint32_t nbQuaternions); -void arm_quaternion_inverse_f32(const float32_t *pInputQuaternions, float32_t *pInverseQuaternions, - uint32_t nbQuaternions); /** @brief Floating-point quaternion conjugates. @param[in] pInputQuaternions points to the input vector of quaternions @param[out] pConjugateQuaternions points to the output vector of conjugate quaternions @param[in] nbQuaternions number of quaternions in each vector - @return none */ -void arm_quaternion_conjugate_f32(const float32_t *inputQuaternions, - float32_t *pConjugateQuaternions, uint32_t nbQuaternions); +void arm_quaternion_conjugate_f32(const float32_t *inputQuaternions, + float32_t *pConjugateQuaternions, + uint32_t nbQuaternions); + /** @brief Floating-point normalization of quaternions. @param[in] pInputQuaternions points to the input vector of quaternions @param[out] pNormalizedQuaternions points to the output vector of normalized quaternions @param[in] nbQuaternions number of quaternions in each vector - @return none */ -void arm_quaternion_normalize_f32(const float32_t *inputQuaternions, - float32_t *pNormalizedQuaternions, uint32_t nbQuaternions); +void arm_quaternion_normalize_f32(const float32_t *inputQuaternions, + float32_t *pNormalizedQuaternions, + uint32_t nbQuaternions); + /** @brief Floating-point product of two quaternions. @param[in] qa First quaternion @param[in] qb Second quaternion @param[out] r Product of two quaternions - @return none */ -void arm_quaternion_product_single_f32(const float32_t *qa, const float32_t *qb, float32_t *r); +void arm_quaternion_product_single_f32(const float32_t *qa, + const float32_t *qb, + float32_t *r); + /** @brief Floating-point elementwise product two quaternions. @@ -100,17 +108,18 @@ void arm_quaternion_product_single_f32(const float32_t *qa, const float32_t *qb, @param[in] qb Second array of quaternions @param[out] r Elementwise product of quaternions @param[in] nbQuaternions Number of quaternions in the array - @return none */ -void arm_quaternion_product_f32(const float32_t *qa, const float32_t *qb, float32_t *r, - uint32_t nbQuaternions); +void arm_quaternion_product_f32(const float32_t *qa, + const float32_t *qb, + float32_t *r, + uint32_t nbQuaternions); + /** * @brief Conversion of quaternion to equivalent rotation matrix. * @param[in] pInputQuaternions points to an array of normalized quaternions * @param[out] pOutputRotations points to an array of 3x3 rotations (in row order) * @param[in] nbQuaternions in the array - * @return none. * * Format of rotation matrix * \par @@ -121,20 +130,23 @@ void arm_quaternion_product_f32(const float32_t *qa, const float32_t *qb, float3 * * Rotation matrix is saved in row order : R00 R01 R02 R10 R11 R12 R20 R21 R22 */ -void arm_quaternion2rotation_f32(const float32_t *pInputQuaternions, float32_t *pOutputRotations, - uint32_t nbQuaternions); +void arm_quaternion2rotation_f32(const float32_t *pInputQuaternions, + float32_t *pOutputRotations, + uint32_t nbQuaternions); + /** * @brief Conversion of a rotation matrix to equivalent quaternion. * @param[in] pInputRotations points to an array 3x3 rotation matrix (in row order) * @param[out] pOutputQuaternions points to an array of quaternions * @param[in] nbQuaternions in the array - * @return none. */ -void arm_rotation2quaternion_f32(const float32_t *pInputRotations, float32_t *pOutputQuaternions, - uint32_t nbQuaternions); +void arm_rotation2quaternion_f32(const float32_t *pInputRotations, + float32_t *pOutputQuaternions, + uint32_t nbQuaternions); + -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/statistics_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/statistics_functions.h old mode 100644 new mode 100755 similarity index 68% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/statistics_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/statistics_functions.h index e6423265468..301aadd023c --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/statistics_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/statistics_functions.h @@ -1,8 +1,8 @@ /****************************************************************************** * @file statistics_functions.h * @brief Public header file for CMSIS DSP Library - * @version V1.10.0 - * @date 08 July 2021 + * @version V1.10.1 + * @date 14 July 2022 * Target Processor: Cortex-M and Cortex-A cores ******************************************************************************/ /* @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _STATISTICS_FUNCTIONS_H_ -#define _STATISTICS_FUNCTIONS_H_ + +#ifndef STATISTICS_FUNCTIONS_H_ +#define STATISTICS_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -35,10 +36,12 @@ #include "dsp/basic_math_functions.h" #include "dsp/fast_math_functions.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif + /** * @defgroup groupStats Statistics Functions */ @@ -67,6 +70,7 @@ extern "C" { * */ + float32_t arm_logsumexp_f32(const float32_t *in, uint32_t blockSize); /** @@ -82,8 +86,11 @@ float32_t arm_logsumexp_f32(const float32_t *in, uint32_t blockSize); * */ -float32_t arm_logsumexp_dot_prod_f32(const float32_t *pSrcA, const float32_t *pSrcB, - uint32_t blockSize, float32_t *pTmpBuffer); + +float32_t arm_logsumexp_dot_prod_f32(const float32_t * pSrcA, + const float32_t * pSrcB, + uint32_t blockSize, + float32_t *pTmpBuffer); /** * @brief Entropy @@ -94,7 +101,9 @@ float32_t arm_logsumexp_dot_prod_f32(const float32_t *pSrcA, const float32_t *pS * */ -float32_t arm_entropy_f32(const float32_t *pSrcA, uint32_t blockSize); + +float32_t arm_entropy_f32(const float32_t * pSrcA,uint32_t blockSize); + /** * @brief Entropy @@ -105,7 +114,9 @@ float32_t arm_entropy_f32(const float32_t *pSrcA, uint32_t blockSize); * */ -float64_t arm_entropy_f64(const float64_t *pSrcA, uint32_t blockSize); + +float64_t arm_entropy_f64(const float64_t * pSrcA, uint32_t blockSize); + /** * @brief Kullback-Leibler @@ -116,8 +127,10 @@ float64_t arm_entropy_f64(const float64_t *pSrcA, uint32_t blockSize); * @return Kullback-Leibler Divergence D(A || B) * */ -float32_t arm_kullback_leibler_f32(const float32_t *pSrcA, const float32_t *pSrcB, - uint32_t blockSize); +float32_t arm_kullback_leibler_f32(const float32_t * pSrcA + ,const float32_t * pSrcB + ,uint32_t blockSize); + /** * @brief Kullback-Leibler @@ -128,211 +141,314 @@ float32_t arm_kullback_leibler_f32(const float32_t *pSrcA, const float32_t *pSrc * @return Kullback-Leibler Divergence D(A || B) * */ -float64_t arm_kullback_leibler_f64(const float64_t *pSrcA, const float64_t *pSrcB, - uint32_t blockSize); +float64_t arm_kullback_leibler_f64(const float64_t * pSrcA, + const float64_t * pSrcB, + uint32_t blockSize); -/** + + /** * @brief Sum of the squares of the elements of a Q31 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_power_q31(const q31_t *pSrc, uint32_t blockSize, q63_t *pResult); + void arm_power_q31( + const q31_t * pSrc, + uint32_t blockSize, + q63_t * pResult); -/** + + /** * @brief Sum of the squares of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_power_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult); + void arm_power_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); -/** + + /** * @brief Sum of the squares of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_power_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult); + void arm_power_f64( + const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult); -/** + + /** * @brief Sum of the squares of the elements of a Q15 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_power_q15(const q15_t *pSrc, uint32_t blockSize, q63_t *pResult); + void arm_power_q15( + const q15_t * pSrc, + uint32_t blockSize, + q63_t * pResult); -/** + + /** * @brief Sum of the squares of the elements of a Q7 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_power_q7(const q7_t *pSrc, uint32_t blockSize, q31_t *pResult); + void arm_power_q7( + const q7_t * pSrc, + uint32_t blockSize, + q31_t * pResult); -/** + + /** * @brief Mean value of a Q7 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_mean_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult); + void arm_mean_q7( + const q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult); -/** + + /** * @brief Mean value of a Q15 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_mean_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult); + void arm_mean_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); -/** + + /** * @brief Mean value of a Q31 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_mean_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult); + void arm_mean_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); -/** + + /** * @brief Mean value of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_mean_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult); + void arm_mean_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); -/** + + /** * @brief Mean value of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_mean_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult); + void arm_mean_f64( + const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult); -/** + + /** * @brief Variance of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_var_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult); + void arm_var_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); -/** + + /** * @brief Variance of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_var_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult); + void arm_var_f64( + const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult); -/** + + /** * @brief Variance of the elements of a Q31 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_var_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult); + void arm_var_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); -/** + + /** * @brief Variance of the elements of a Q15 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_var_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult); + void arm_var_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); -/** + + /** * @brief Root Mean Square of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_rms_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult); + void arm_rms_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); -/** + + /** * @brief Root Mean Square of the elements of a Q31 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_rms_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult); + void arm_rms_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); -/** + + /** * @brief Root Mean Square of the elements of a Q15 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_rms_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult); + void arm_rms_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); -/** + + /** * @brief Standard deviation of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_std_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult); + void arm_std_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); -/** + + /** * @brief Standard deviation of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_std_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult); + void arm_std_f64( + const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult); -/** + + /** * @brief Standard deviation of the elements of a Q31 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_std_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult); + void arm_std_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); -/** + + /** * @brief Standard deviation of the elements of a Q15 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_std_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult); + void arm_std_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); -/** + + + /** * @brief Minimum value of a Q7 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process - * @param[out] result is output pointer - * @param[in] index is the array index of the minimum value in the input buffer. + * @param[out] pResult is output pointer + * @param[in] pIndex is the array index of the minimum value in the input buffer. */ -void arm_min_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *result, uint32_t *index); + void arm_min_q7( + const q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a Q7 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process - * @param[out] result is output pointer - * @param[in] index is the array index of the minimum value in the input buffer. + * @param[out] pResult is output pointer + * @param[in] pIndex is the array index of the minimum value in the input buffer. */ -void arm_absmin_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *result, uint32_t *index); + void arm_absmin_q7( + const q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a Q7 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process - * @param[out] result is output pointer + * @param[out] pResult is output pointer */ -void arm_absmin_no_idx_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *result); + void arm_absmin_no_idx_q7( + const q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult); -/** + + /** * @brief Minimum value of a Q15 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer * @param[in] pIndex is the array index of the minimum value in the input buffer. */ -void arm_min_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t *pIndex); + void arm_min_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); /** * @brief Minimum value of absolute values of a Q15 vector. @@ -341,95 +457,137 @@ void arm_min_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t * @param[out] pResult is output pointer * @param[in] pIndex is the array index of the minimum value in the input buffer. */ -void arm_absmin_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t *pIndex); + void arm_absmin_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a Q15 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer */ -void arm_absmin_no_idx_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult); + void arm_absmin_no_idx_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); -/** + + /** * @brief Minimum value of a Q31 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer * @param[out] pIndex is the array index of the minimum value in the input buffer. */ -void arm_min_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult, uint32_t *pIndex); + void arm_min_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a Q31 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer * @param[out] pIndex is the array index of the minimum value in the input buffer. */ -void arm_absmin_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult, uint32_t *pIndex); + void arm_absmin_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a Q31 vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer */ -void arm_absmin_no_idx_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult); + void arm_absmin_no_idx_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); -/** + + /** * @brief Minimum value of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer * @param[out] pIndex is the array index of the minimum value in the input buffer. */ -void arm_min_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult, uint32_t *pIndex); + void arm_min_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer * @param[out] pIndex is the array index of the minimum value in the input buffer. */ -void arm_absmin_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult, - uint32_t *pIndex); + void arm_absmin_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer */ -void arm_absmin_no_idx_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult); + void arm_absmin_no_idx_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); -/** + + /** * @brief Minimum value of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer * @param[out] pIndex is the array index of the minimum value in the input buffer. */ -void arm_min_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult, uint32_t *pIndex); + void arm_min_f64( + const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer * @param[out] pIndex is the array index of the minimum value in the input buffer. */ -void arm_absmin_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult, - uint32_t *pIndex); + void arm_absmin_f64( + const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer */ -void arm_absmin_no_idx_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult); + void arm_absmin_no_idx_f64( + const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult); + /** * @brief Maximum value of a Q7 vector. @@ -438,7 +596,11 @@ void arm_absmin_no_idx_f64(const float64_t *pSrc, uint32_t blockSize, float64_t * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_max_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult, uint32_t *pIndex); + void arm_max_q7( + const q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex); /** * @brief Maximum value of absolute values of a Q7 vector. @@ -447,7 +609,11 @@ void arm_max_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult, uint32_t *p * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_absmax_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult, uint32_t *pIndex); + void arm_absmax_q7( + const q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult, + uint32_t * pIndex); /** * @brief Maximum value of absolute values of a Q7 vector. @@ -455,7 +621,11 @@ void arm_absmax_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult, uint32_t * @param[in] blockSize length of the input vector * @param[out] pResult maximum value returned here */ -void arm_absmax_no_idx_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult); + void arm_absmax_no_idx_q7( + const q7_t * pSrc, + uint32_t blockSize, + q7_t * pResult); + /** * @brief Maximum value of a Q15 vector. @@ -464,7 +634,11 @@ void arm_absmax_no_idx_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult); * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_max_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t *pIndex); + void arm_max_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); /** * @brief Maximum value of absolute values of a Q15 vector. @@ -473,15 +647,22 @@ void arm_max_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_absmax_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult, uint32_t *pIndex); + void arm_absmax_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Maximum value of absolute values of a Q15 vector. * @param[in] pSrc points to the input buffer * @param[in] blockSize length of the input vector * @param[out] pResult maximum value returned here */ -void arm_absmax_no_idx_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult); + void arm_absmax_no_idx_q15( + const q15_t * pSrc, + uint32_t blockSize, + q15_t * pResult); /** * @brief Maximum value of a Q31 vector. @@ -490,7 +671,11 @@ void arm_absmax_no_idx_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_max_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult, uint32_t *pIndex); + void arm_max_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); /** * @brief Maximum value of absolute values of a Q31 vector. @@ -499,15 +684,22 @@ void arm_max_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult, uint32_t * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_absmax_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult, uint32_t *pIndex); + void arm_absmax_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Maximum value of absolute values of a Q31 vector. * @param[in] pSrc points to the input buffer * @param[in] blockSize length of the input vector * @param[out] pResult maximum value returned here */ -void arm_absmax_no_idx_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult); + void arm_absmax_no_idx_q31( + const q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult); /** * @brief Maximum value of a floating-point vector. @@ -516,7 +708,11 @@ void arm_absmax_no_idx_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_max_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult, uint32_t *pIndex); + void arm_max_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); /** * @brief Maximum value of absolute values of a floating-point vector. @@ -525,16 +721,22 @@ void arm_max_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult, * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_absmax_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult, - uint32_t *pIndex); + void arm_absmax_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Maximum value of absolute values of a floating-point vector. * @param[in] pSrc points to the input buffer * @param[in] blockSize length of the input vector * @param[out] pResult maximum value returned here */ -void arm_absmax_no_idx_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult); + void arm_absmax_no_idx_f32( + const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); /** * @brief Maximum value of a floating-point vector. @@ -543,7 +745,11 @@ void arm_absmax_no_idx_f32(const float32_t *pSrc, uint32_t blockSize, float32_t * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_max_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult, uint32_t *pIndex); + void arm_max_f64( + const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult, + uint32_t * pIndex); /** * @brief Maximum value of absolute values of a floating-point vector. @@ -552,8 +758,11 @@ void arm_max_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult, * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_absmax_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult, - uint32_t *pIndex); + void arm_absmax_f64( + const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult, + uint32_t * pIndex); /** * @brief Maximum value of absolute values of a floating-point vector. @@ -561,97 +770,120 @@ void arm_absmax_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResul * @param[in] blockSize length of the input vector * @param[out] pResult maximum value returned here */ -void arm_absmax_no_idx_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult); + void arm_absmax_no_idx_f64( + const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult); -/** + /** @brief Maximum value of a floating-point vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult maximum value returned here - @return none */ -void arm_max_no_idx_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult); + void arm_max_no_idx_f32( + const float32_t *pSrc, + uint32_t blockSize, + float32_t *pResult); -/** + /** @brief Minimum value of a floating-point vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult minimum value returned here - @return none */ -void arm_min_no_idx_f32(const float32_t *pSrc, uint32_t blockSize, float32_t *pResult); + void arm_min_no_idx_f32( + const float32_t *pSrc, + uint32_t blockSize, + float32_t *pResult); -/** + /** @brief Maximum value of a floating-point vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult maximum value returned here - @return none */ -void arm_max_no_idx_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult); + void arm_max_no_idx_f64( + const float64_t *pSrc, + uint32_t blockSize, + float64_t *pResult); -/** + /** @brief Maximum value of a q31 vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult maximum value returned here - @return none */ -void arm_max_no_idx_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult); + void arm_max_no_idx_q31( + const q31_t *pSrc, + uint32_t blockSize, + q31_t *pResult); -/** + /** @brief Maximum value of a q15 vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult maximum value returned here - @return none */ -void arm_max_no_idx_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult); + void arm_max_no_idx_q15( + const q15_t *pSrc, + uint32_t blockSize, + q15_t *pResult); -/** + /** @brief Maximum value of a q7 vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult maximum value returned here - @return none */ -void arm_max_no_idx_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult); + void arm_max_no_idx_q7( + const q7_t *pSrc, + uint32_t blockSize, + q7_t *pResult); -/** + /** @brief Minimum value of a floating-point vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult minimum value returned here - @return none */ -void arm_min_no_idx_f64(const float64_t *pSrc, uint32_t blockSize, float64_t *pResult); + void arm_min_no_idx_f64( + const float64_t *pSrc, + uint32_t blockSize, + float64_t *pResult); /** @brief Minimum value of a q31 vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult minimum value returned here - @return none */ -void arm_min_no_idx_q31(const q31_t *pSrc, uint32_t blockSize, q31_t *pResult); + void arm_min_no_idx_q31( + const q31_t *pSrc, + uint32_t blockSize, + q31_t *pResult); -/** + /** @brief Minimum value of a q15 vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult minimum value returned here - @return none */ -void arm_min_no_idx_q15(const q15_t *pSrc, uint32_t blockSize, q15_t *pResult); + void arm_min_no_idx_q15( + const q15_t *pSrc, + uint32_t blockSize, + q15_t *pResult); -/** + /** @brief Minimum value of a q7 vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult minimum value returned here - @return none */ -void arm_min_no_idx_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult); +void arm_min_no_idx_q7( + const q7_t *pSrc, + uint32_t blockSize, + q7_t *pResult); /** @brief Mean square error between two Q7 vectors. @@ -659,10 +891,13 @@ void arm_min_no_idx_q7(const q7_t *pSrc, uint32_t blockSize, q7_t *pResult); @param[in] pSrcB points to the second input vector @param[in] blockSize number of samples in input vector @param[out] pResult mean square error - @return none */ - -void arm_mse_q7(const q7_t *pSrcA, const q7_t *pSrcB, uint32_t blockSize, q7_t *pResult); + +void arm_mse_q7( + const q7_t * pSrcA, + const q7_t * pSrcB, + uint32_t blockSize, + q7_t * pResult); /** @brief Mean square error between two Q15 vectors. @@ -670,10 +905,13 @@ void arm_mse_q7(const q7_t *pSrcA, const q7_t *pSrcB, uint32_t blockSize, q7_t * @param[in] pSrcB points to the second input vector @param[in] blockSize number of samples in input vector @param[out] pResult mean square error - @return none */ - -void arm_mse_q15(const q15_t *pSrcA, const q15_t *pSrcB, uint32_t blockSize, q15_t *pResult); + +void arm_mse_q15( + const q15_t * pSrcA, + const q15_t * pSrcB, + uint32_t blockSize, + q15_t * pResult); /** @brief Mean square error between two Q31 vectors. @@ -681,10 +919,13 @@ void arm_mse_q15(const q15_t *pSrcA, const q15_t *pSrcB, uint32_t blockSize, q15 @param[in] pSrcB points to the second input vector @param[in] blockSize number of samples in input vector @param[out] pResult mean square error - @return none */ - -void arm_mse_q31(const q31_t *pSrcA, const q31_t *pSrcB, uint32_t blockSize, q31_t *pResult); + +void arm_mse_q31( + const q31_t * pSrcA, + const q31_t * pSrcB, + uint32_t blockSize, + q31_t * pResult); /** @brief Mean square error between two single precision float vectors. @@ -692,11 +933,13 @@ void arm_mse_q31(const q31_t *pSrcA, const q31_t *pSrcB, uint32_t blockSize, q31 @param[in] pSrcB points to the second input vector @param[in] blockSize number of samples in input vector @param[out] pResult mean square error - @return none */ - -void arm_mse_f32(const float32_t *pSrcA, const float32_t *pSrcB, uint32_t blockSize, - float32_t *pResult); + +void arm_mse_f32( + const float32_t * pSrcA, + const float32_t * pSrcB, + uint32_t blockSize, + float32_t * pResult); /** @brief Mean square error between two double precision float vectors. @@ -704,13 +947,41 @@ void arm_mse_f32(const float32_t *pSrcA, const float32_t *pSrcB, uint32_t blockS @param[in] pSrcB points to the second input vector @param[in] blockSize number of samples in input vector @param[out] pResult mean square error - @return none */ + +void arm_mse_f64( + const float64_t * pSrcA, + const float64_t * pSrcB, + uint32_t blockSize, + float64_t * pResult); + + +/** + * @brief Accumulation value of a floating-point vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + +void arm_accumulate_f32( +const float32_t * pSrc, + uint32_t blockSize, + float32_t * pResult); + +/** + * @brief Accumulation value of a floating-point vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + +void arm_accumulate_f64( +const float64_t * pSrc, + uint32_t blockSize, + float64_t * pResult); -void arm_mse_f64(const float64_t *pSrcA, const float64_t *pSrcB, uint32_t blockSize, - float64_t *pResult); -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/statistics_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/statistics_functions_f16.h old mode 100644 new mode 100755 similarity index 70% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/statistics_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/statistics_functions_f16.h index 9898dd20144..746e8df39b8 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/statistics_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/statistics_functions_f16.h @@ -1,8 +1,8 @@ /****************************************************************************** * @file statistics_functions_f16.h * @brief Public header file for CMSIS DSP Library - * @version V1.10.0 - * @date 08 July 2021 + * @version V1.10.1 + * @date 14 July 2022 * Target Processor: Cortex-M and Cortex-A cores ******************************************************************************/ /* @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _STATISTICS_FUNCTIONS_F16_H_ -#define _STATISTICS_FUNCTIONS_F16_H_ + +#ifndef STATISTICS_FUNCTIONS_F16_H_ +#define STATISTICS_FUNCTIONS_F16_H_ #include "arm_math_types_f16.h" #include "arm_math_memory.h" @@ -35,70 +36,93 @@ #include "dsp/basic_math_functions_f16.h" #include "dsp/fast_math_functions_f16.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) -/** + /** * @brief Sum of the squares of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_power_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult); + void arm_power_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult); -/** + /** * @brief Mean value of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_mean_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult); + void arm_mean_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult); -/** + /** * @brief Variance of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_var_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult); + void arm_var_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult); -/** + /** * @brief Root Mean Square of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_rms_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult); + void arm_rms_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult); -/** + /** * @brief Standard deviation of the elements of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output value. */ -void arm_std_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult); + void arm_std_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult); -/** + /** * @brief Minimum value of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer * @param[out] pIndex is the array index of the minimum value in the input buffer. */ -void arm_min_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult, uint32_t *pIndex); + void arm_min_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer * @param[out] pIndex is the array index of the minimum value in the input buffer. */ -void arm_absmin_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult, - uint32_t *pIndex); + void arm_absmin_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult, + uint32_t * pIndex); /** * @brief Maximum value of a floating-point vector. @@ -107,7 +131,11 @@ void arm_absmin_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResul * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_max_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult, uint32_t *pIndex); + void arm_max_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult, + uint32_t * pIndex); /** * @brief Maximum value of absolute values of a floating-point vector. @@ -116,16 +144,22 @@ void arm_max_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult, * @param[out] pResult maximum value returned here * @param[out] pIndex index of maximum value returned here */ -void arm_absmax_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult, - uint32_t *pIndex); + void arm_absmax_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult, + uint32_t * pIndex); -/** + /** * @brief Minimum value of absolute values of a floating-point vector. * @param[in] pSrc is input pointer * @param[in] blockSize is the number of samples to process * @param[out] pResult is output pointer */ -void arm_absmin_no_idx_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult); + void arm_absmin_no_idx_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult); /** * @brief Maximum value of a floating-point vector. @@ -133,7 +167,11 @@ void arm_absmin_no_idx_f16(const float16_t *pSrc, uint32_t blockSize, float16_t * @param[in] blockSize length of the input vector * @param[out] pResult maximum value returned here */ -void arm_absmax_no_idx_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult); + void arm_absmax_no_idx_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult); + /** * @brief Entropy @@ -141,13 +179,13 @@ void arm_absmax_no_idx_f16(const float16_t *pSrc, uint32_t blockSize, float16_t * @param[in] pSrcA Array of input values. * @param[in] blockSize Number of samples in the input array. * @return Entropy -Sum(p ln p) - * */ +float16_t arm_entropy_f16(const float16_t * pSrcA,uint32_t blockSize); -float16_t arm_entropy_f16(const float16_t *pSrcA, uint32_t blockSize); float16_t arm_logsumexp_f16(const float16_t *in, uint32_t blockSize); + /** * @brief Dot product with log arithmetic * @@ -158,11 +196,12 @@ float16_t arm_logsumexp_f16(const float16_t *in, uint32_t blockSize); * @param[in] blockSize number of samples in each vector * @param[in] pTmpBuffer temporary buffer of length blockSize * @return The log of the dot product . - * */ +float16_t arm_logsumexp_dot_prod_f16(const float16_t * pSrcA, + const float16_t * pSrcB, + uint32_t blockSize, + float16_t *pTmpBuffer); -float16_t arm_logsumexp_dot_prod_f16(const float16_t *pSrcA, const float16_t *pSrcB, - uint32_t blockSize, float16_t *pTmpBuffer); /** * @brief Kullback-Leibler @@ -171,28 +210,35 @@ float16_t arm_logsumexp_dot_prod_f16(const float16_t *pSrcA, const float16_t *pS * @param[in] pSrcB Pointer to an array of input values for probability distribution B. * @param[in] blockSize Number of samples in the input array. * @return Kullback-Leibler Divergence D(A || B) - * */ -float16_t arm_kullback_leibler_f16(const float16_t *pSrcA, const float16_t *pSrcB, - uint32_t blockSize); +float16_t arm_kullback_leibler_f16(const float16_t * pSrcA + ,const float16_t * pSrcB + ,uint32_t blockSize); + /** @brief Maximum value of a floating-point vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult maximum value returned here - @return none */ -void arm_max_no_idx_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult); + void arm_max_no_idx_f16( + const float16_t *pSrc, + uint32_t blockSize, + float16_t *pResult); + /** @brief Minimum value of a floating-point vector. @param[in] pSrc points to the input vector @param[in] blockSize number of samples in input vector @param[out] pResult minimum value returned here - @return none */ -void arm_min_no_idx_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pResult); + void arm_min_no_idx_f16( + const float16_t *pSrc, + uint32_t blockSize, + float16_t *pResult); + /** @brief Mean square error between two half precision float vectors. @@ -200,14 +246,28 @@ void arm_min_no_idx_f16(const float16_t *pSrc, uint32_t blockSize, float16_t *pR @param[in] pSrcB points to the second input vector @param[in] blockSize number of samples in input vector @param[out] pResult mean square error - @return none */ +void arm_mse_f16( + const float16_t * pSrcA, + const float16_t * pSrcB, + uint32_t blockSize, + float16_t * pResult); + + +/** + * @brief Sum value of a floating-point vector. + * @param[in] pSrc is input pointer + * @param[in] blockSize is the number of samples to process + * @param[out] pResult is output value. + */ + void arm_accumulate_f16( + const float16_t * pSrc, + uint32_t blockSize, + float16_t * pResult); -void arm_mse_f16(const float16_t *pSrcA, const float16_t *pSrcB, uint32_t blockSize, - float16_t *pResult); #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/support_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/support_functions.h old mode 100644 new mode 100755 similarity index 52% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/support_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/support_functions.h index 3109e7338d2..928cf403f15 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/support_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/support_functions.h @@ -1,8 +1,8 @@ /****************************************************************************** * @file support_functions.h * @brief Public header file for CMSIS DSP Library - * @version V1.10.0 - * @date 08 July 2021 + * @version V1.10.1 + * @date 18 August 2022 * Target Processor: Cortex-M and Cortex-A cores ******************************************************************************/ /* @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _SUPPORT_FUNCTIONS_H_ -#define _SUPPORT_FUNCTIONS_H_ + +#ifndef SUPPORT_FUNCTIONS_H_ +#define SUPPORT_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -32,277 +33,485 @@ #include "dsp/none.h" #include "dsp/utils.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif /** * @defgroup groupSupport Support Functions */ + +/** + * @brief Converts the elements of the 64 bit floating-point vector to floating-point vector. + * @param[in] pSrc points to the floating-point 64 input vector + * @param[out] pDst points to the floating-point output vector + * @param[in] blockSize length of the input vector + */ + void arm_f64_to_float( + const float64_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + +/** + * @brief Converts the elements of the 64 bit floating-point vector to Q31 vector. + * @param[in] pSrc points to the floating-point 64 input vector + * @param[out] pDst points to the Q31 output vector + * @param[in] blockSize length of the input vector + */ + void arm_f64_to_q31( + const float64_t * pSrc, + q31_t * pDst, + uint32_t blockSize); + +/** + * @brief Converts the elements of the 64 bit floating-point vector to Q15 vector. + * @param[in] pSrc points to the floating-point 64 input vector + * @param[out] pDst points to the Q15 output vector + * @param[in] blockSize length of the input vector + */ + void arm_f64_to_q15( + const float64_t * pSrc, + q15_t * pDst, + uint32_t blockSize); + +/** + * @brief Converts the elements of the 64 bit floating-point vector to Q7 vector. + * @param[in] pSrc points to the floating-point 64 input vector + * @param[out] pDst points to the Q7 output vector + * @param[in] blockSize length of the input vector + */ + void arm_f64_to_q7( + const float64_t * pSrc, + q7_t * pDst, + uint32_t blockSize); + + + +/** + * @brief Converts the elements of the floating-point vector to 64 bit floating-point vector. + * @param[in] pSrc points to the floating-point input vector + * @param[out] pDst points to the 64 bit floating-point output vector + * @param[in] blockSize length of the input vector + */ + void arm_float_to_f64( + const float32_t * pSrc, + float64_t * pDst, + uint32_t blockSize); + /** * @brief Converts the elements of the floating-point vector to Q31 vector. * @param[in] pSrc points to the floating-point input vector * @param[out] pDst points to the Q31 output vector * @param[in] blockSize length of the input vector */ -void arm_float_to_q31(const float32_t *pSrc, q31_t *pDst, uint32_t blockSize); + void arm_float_to_q31( + const float32_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Converts the elements of the floating-point vector to Q15 vector. * @param[in] pSrc points to the floating-point input vector * @param[out] pDst points to the Q15 output vector * @param[in] blockSize length of the input vector */ -void arm_float_to_q15(const float32_t *pSrc, q15_t *pDst, uint32_t blockSize); + void arm_float_to_q15( + const float32_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Converts the elements of the floating-point vector to Q7 vector. * @param[in] pSrc points to the floating-point input vector * @param[out] pDst points to the Q7 output vector * @param[in] blockSize length of the input vector */ -void arm_float_to_q7(const float32_t *pSrc, q7_t *pDst, uint32_t blockSize); + void arm_float_to_q7( + const float32_t * pSrc, + q7_t * pDst, + uint32_t blockSize); /** + * @brief Converts the elements of the Q31 vector to 64 bit floating-point vector. + * @param[in] pSrc is input pointer + * @param[out] pDst is output pointer + * @param[in] blockSize is the number of samples to process + */ +void arm_q31_to_f64( +const q31_t * pSrc, + float64_t * pDst, + uint32_t blockSize); + + /** * @brief Converts the elements of the Q31 vector to floating-point vector. * @param[in] pSrc is input pointer * @param[out] pDst is output pointer * @param[in] blockSize is the number of samples to process */ -void arm_q31_to_float(const q31_t *pSrc, float32_t *pDst, uint32_t blockSize); + void arm_q31_to_float( + const q31_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Converts the elements of the Q31 vector to Q15 vector. * @param[in] pSrc is input pointer * @param[out] pDst is output pointer * @param[in] blockSize is the number of samples to process */ -void arm_q31_to_q15(const q31_t *pSrc, q15_t *pDst, uint32_t blockSize); + void arm_q31_to_q15( + const q31_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Converts the elements of the Q31 vector to Q7 vector. * @param[in] pSrc is input pointer * @param[out] pDst is output pointer * @param[in] blockSize is the number of samples to process */ -void arm_q31_to_q7(const q31_t *pSrc, q7_t *pDst, uint32_t blockSize); + void arm_q31_to_q7( + const q31_t * pSrc, + q7_t * pDst, + uint32_t blockSize); /** + * @brief Converts the elements of the Q15 vector to 64 bit floating-point vector. + * @param[in] pSrc is input pointer + * @param[out] pDst is output pointer + * @param[in] blockSize is the number of samples to process + */ +void arm_q15_to_f64( +const q15_t * pSrc, + float64_t * pDst, + uint32_t blockSize); + + /** * @brief Converts the elements of the Q15 vector to floating-point vector. * @param[in] pSrc is input pointer * @param[out] pDst is output pointer * @param[in] blockSize is the number of samples to process */ -void arm_q15_to_float(const q15_t *pSrc, float32_t *pDst, uint32_t blockSize); + void arm_q15_to_float( + const q15_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Converts the elements of the Q15 vector to Q31 vector. * @param[in] pSrc is input pointer * @param[out] pDst is output pointer * @param[in] blockSize is the number of samples to process */ -void arm_q15_to_q31(const q15_t *pSrc, q31_t *pDst, uint32_t blockSize); + void arm_q15_to_q31( + const q15_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Converts the elements of the Q15 vector to Q7 vector. * @param[in] pSrc is input pointer * @param[out] pDst is output pointer * @param[in] blockSize is the number of samples to process */ -void arm_q15_to_q7(const q15_t *pSrc, q7_t *pDst, uint32_t blockSize); + void arm_q15_to_q7( + const q15_t * pSrc, + q7_t * pDst, + uint32_t blockSize); /** + * @brief Converts the elements of the Q7 vector to 64 bit floating-point vector. + * @param[in] pSrc is input pointer + * @param[out] pDst is output pointer + * @param[in] blockSize is the number of samples to process + */ +void arm_q7_to_f64( +const q7_t * pSrc, + float64_t * pDst, + uint32_t blockSize); + + /** * @brief Converts the elements of the Q7 vector to floating-point vector. * @param[in] pSrc is input pointer * @param[out] pDst is output pointer * @param[in] blockSize is the number of samples to process */ -void arm_q7_to_float(const q7_t *pSrc, float32_t *pDst, uint32_t blockSize); + void arm_q7_to_float( + const q7_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Converts the elements of the Q7 vector to Q31 vector. * @param[in] pSrc input pointer * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_q7_to_q31(const q7_t *pSrc, q31_t *pDst, uint32_t blockSize); + void arm_q7_to_q31( + const q7_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Converts the elements of the Q7 vector to Q15 vector. * @param[in] pSrc input pointer * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_q7_to_q15(const q7_t *pSrc, q15_t *pDst, uint32_t blockSize); + void arm_q7_to_q15( + const q7_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + + + + + /** * @brief Struct for specifying sorting algorithm */ -typedef enum { - ARM_SORT_BITONIC = 0, - /**< Bitonic sort */ - ARM_SORT_BUBBLE = 1, - /**< Bubble sort */ - ARM_SORT_HEAP = 2, - /**< Heap sort */ + typedef enum + { + ARM_SORT_BITONIC = 0, + /**< Bitonic sort */ + ARM_SORT_BUBBLE = 1, + /**< Bubble sort */ + ARM_SORT_HEAP = 2, + /**< Heap sort */ ARM_SORT_INSERTION = 3, - /**< Insertion sort */ - ARM_SORT_QUICK = 4, - /**< Quick sort */ + /**< Insertion sort */ + ARM_SORT_QUICK = 4, + /**< Quick sort */ ARM_SORT_SELECTION = 5 - /**< Selection sort */ -} arm_sort_alg; + /**< Selection sort */ + } arm_sort_alg; -/** + /** * @brief Struct for specifying sorting algorithm */ -typedef enum { + typedef enum + { ARM_SORT_DESCENDING = 0, - /**< Descending order (9 to 0) */ + /**< Descending order (9 to 0) */ ARM_SORT_ASCENDING = 1 - /**< Ascending order (0 to 9) */ -} arm_sort_dir; + /**< Ascending order (0 to 9) */ + } arm_sort_dir; -/** + /** * @brief Instance structure for the sorting algorithms. */ -typedef struct { - arm_sort_alg alg; /**< Sorting algorithm selected */ - arm_sort_dir dir; /**< Sorting order (direction) */ -} arm_sort_instance_f32; + typedef struct + { + arm_sort_alg alg; /**< Sorting algorithm selected */ + arm_sort_dir dir; /**< Sorting order (direction) */ + } arm_sort_instance_f32; -/** + /** * @param[in] S points to an instance of the sorting structure. * @param[in] pSrc points to the block of input data. * @param[out] pDst points to the block of output data. * @param[in] blockSize number of samples to process. */ -void arm_sort_f32(const arm_sort_instance_f32 *S, float32_t *pSrc, float32_t *pDst, - uint32_t blockSize); + void arm_sort_f32( + const arm_sort_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); -/** + /** * @param[in,out] S points to an instance of the sorting structure. * @param[in] alg Selected algorithm. * @param[in] dir Sorting order. */ -void arm_sort_init_f32(arm_sort_instance_f32 *S, arm_sort_alg alg, arm_sort_dir dir); + void arm_sort_init_f32( + arm_sort_instance_f32 * S, + arm_sort_alg alg, + arm_sort_dir dir); -/** + /** * @brief Instance structure for the sorting algorithms. */ -typedef struct { - arm_sort_dir dir; /**< Sorting order (direction) */ - float32_t *buffer; /**< Working buffer */ -} arm_merge_sort_instance_f32; + typedef struct + { + arm_sort_dir dir; /**< Sorting order (direction) */ + float32_t * buffer; /**< Working buffer */ + } arm_merge_sort_instance_f32; -/** + /** * @param[in] S points to an instance of the sorting structure. * @param[in,out] pSrc points to the block of input data. * @param[out] pDst points to the block of output data * @param[in] blockSize number of samples to process. */ -void arm_merge_sort_f32(const arm_merge_sort_instance_f32 *S, float32_t *pSrc, float32_t *pDst, - uint32_t blockSize); + void arm_merge_sort_f32( + const arm_merge_sort_instance_f32 * S, + float32_t *pSrc, + float32_t *pDst, + uint32_t blockSize); -/** + /** * @param[in,out] S points to an instance of the sorting structure. * @param[in] dir Sorting order. * @param[in] buffer Working buffer. */ -void arm_merge_sort_init_f32(arm_merge_sort_instance_f32 *S, arm_sort_dir dir, float32_t *buffer); - -/** + void arm_merge_sort_init_f32( + arm_merge_sort_instance_f32 * S, + arm_sort_dir dir, + float32_t * buffer); + + + + /** * @brief Copies the elements of a floating-point vector. * @param[in] pSrc input pointer * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_copy_f32(const float32_t *pSrc, float32_t *pDst, uint32_t blockSize); - -/** + void arm_copy_f32( + const float32_t * pSrc, + float32_t * pDst, + uint32_t blockSize); + + + + /** * @brief Copies the elements of a floating-point vector. * @param[in] pSrc input pointer * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_copy_f64(const float64_t *pSrc, float64_t *pDst, uint32_t blockSize); + void arm_copy_f64( + const float64_t * pSrc, + float64_t * pDst, + uint32_t blockSize); -/** + + + /** * @brief Copies the elements of a Q7 vector. * @param[in] pSrc input pointer * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_copy_q7(const q7_t *pSrc, q7_t *pDst, uint32_t blockSize); + void arm_copy_q7( + const q7_t * pSrc, + q7_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Copies the elements of a Q15 vector. * @param[in] pSrc input pointer * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_copy_q15(const q15_t *pSrc, q15_t *pDst, uint32_t blockSize); + void arm_copy_q15( + const q15_t * pSrc, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Copies the elements of a Q31 vector. * @param[in] pSrc input pointer * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_copy_q31(const q31_t *pSrc, q31_t *pDst, uint32_t blockSize); + void arm_copy_q31( + const q31_t * pSrc, + q31_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Fills a constant value into a floating-point vector. * @param[in] value input value to be filled * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_fill_f32(float32_t value, float32_t *pDst, uint32_t blockSize); + void arm_fill_f32( + float32_t value, + float32_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Fills a constant value into a floating-point vector. * @param[in] value input value to be filled * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_fill_f64(float64_t value, float64_t *pDst, uint32_t blockSize); + void arm_fill_f64( + float64_t value, + float64_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Fills a constant value into a Q7 vector. * @param[in] value input value to be filled * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_fill_q7(q7_t value, q7_t *pDst, uint32_t blockSize); + void arm_fill_q7( + q7_t value, + q7_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Fills a constant value into a Q15 vector. * @param[in] value input value to be filled * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_fill_q15(q15_t value, q15_t *pDst, uint32_t blockSize); + void arm_fill_q15( + q15_t value, + q15_t * pDst, + uint32_t blockSize); -/** + + /** * @brief Fills a constant value into a Q31 vector. * @param[in] value input value to be filled * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_fill_q31(q31_t value, q31_t *pDst, uint32_t blockSize); + void arm_fill_q31( + q31_t value, + q31_t * pDst, + uint32_t blockSize); + + + + + + /** - * @brief Weighted sum + * @brief Weighted average * * * @param[in] *in Array of input values. * @param[in] *weigths Weights * @param[in] blockSize Number of samples in the input array. - * @return Weighted sum + * @return Weighted average * */ -float32_t arm_weighted_sum_f32(const float32_t *in, const float32_t *weigths, uint32_t blockSize); +float32_t arm_weighted_average_f32(const float32_t *in + , const float32_t *weigths + , uint32_t blockSize); + /** * @brief Barycenter @@ -313,13 +522,17 @@ float32_t arm_weighted_sum_f32(const float32_t *in, const float32_t *weigths, ui * @param[out] out Barycenter * @param[in] nbVectors Number of vectors * @param[in] vecDim Dimension of space (vector dimension) - * @return None * */ -void arm_barycenter_f32(const float32_t *in, const float32_t *weights, float32_t *out, - uint32_t nbVectors, uint32_t vecDim); +void arm_barycenter_f32(const float32_t *in + , const float32_t *weights + , float32_t *out + , uint32_t nbVectors + , uint32_t vecDim); + + -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/support_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/support_functions_f16.h old mode 100644 new mode 100755 similarity index 70% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/support_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/support_functions_f16.h index 1af398b219a..ab0c1ad7a90 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/support_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/support_functions_f16.h @@ -1,8 +1,8 @@ /****************************************************************************** * @file support_functions_f16.h * @brief Public header file for CMSIS DSP Library - * @version V1.10.0 - * @date 08 July 2021 + * @version V1.10.1 + * @date 18 August 2022 * Target Processor: Cortex-M and Cortex-A cores ******************************************************************************/ /* @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _SUPPORT_FUNCTIONS_F16_H_ -#define _SUPPORT_FUNCTIONS_F16_H_ + +#ifndef SUPPORT_FUNCTIONS_F16_H_ +#define SUPPORT_FUNCTIONS_F16_H_ #include "arm_math_types_f16.h" #include "arm_math_memory.h" @@ -32,27 +33,30 @@ #include "dsp/none.h" #include "dsp/utils.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) -/** + /** * @brief Copies the elements of a floating-point vector. * @param[in] pSrc input pointer * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_copy_f16(const float16_t *pSrc, float16_t *pDst, uint32_t blockSize); +void arm_copy_f16(const float16_t * pSrc, float16_t * pDst, uint32_t blockSize); -/** + + /** * @brief Fills a constant value into a floating-point vector. * @param[in] value input value to be filled * @param[out] pDst output pointer * @param[in] blockSize number of samples to process */ -void arm_fill_f16(float16_t value, float16_t *pDst, uint32_t blockSize); +void arm_fill_f16(float16_t value, float16_t * pDst, uint32_t blockSize); + /** * @brief Converts the elements of the floating-point vector to Q31 vector. @@ -60,7 +64,8 @@ void arm_fill_f16(float16_t value, float16_t *pDst, uint32_t blockSize); * @param[out] pDst points to the q15 output vector * @param[in] blockSize length of the input vector */ -void arm_f16_to_q15(const float16_t *pSrc, q15_t *pDst, uint32_t blockSize); +void arm_f16_to_q15(const float16_t * pSrc, q15_t * pDst, uint32_t blockSize); + /** * @brief Converts the elements of the floating-point vector to Q31 vector. @@ -68,7 +73,26 @@ void arm_f16_to_q15(const float16_t *pSrc, q15_t *pDst, uint32_t blockSize); * @param[out] pDst points to the f16 output vector * @param[in] blockSize length of the input vector */ -void arm_q15_to_f16(const q15_t *pSrc, float16_t *pDst, uint32_t blockSize); +void arm_q15_to_f16(const q15_t * pSrc, float16_t * pDst, uint32_t blockSize); + + +/** + * @brief Converts the elements of the 64 bit floating-point vector to 16 bit floating-point vector. + * @param[in] pSrc points to the f64 input vector + * @param[out] pDst points to the f16 output vector + * @param[in] blockSize length of the input vector + */ +void arm_f64_to_f16(const float64_t * pSrc, float16_t * pDst, uint32_t blockSize); + + +/** + * @brief Converts the elements of the 16 bit floating-point vector to 64 bit floating-point vector. + * @param[in] pSrc points to the f16 input vector + * @param[out] pDst points to the f64 output vector + * @param[in] blockSize length of the input vector + */ +void arm_f16_to_f64(const float16_t * pSrc, float64_t * pDst, uint32_t blockSize); + /** * @brief Converts the elements of the floating-point vector to Q31 vector. @@ -76,7 +100,8 @@ void arm_q15_to_f16(const q15_t *pSrc, float16_t *pDst, uint32_t blockSize); * @param[out] pDst points to the f16 output vector * @param[in] blockSize length of the input vector */ -void arm_float_to_f16(const float32_t *pSrc, float16_t *pDst, uint32_t blockSize); +void arm_float_to_f16(const float32_t * pSrc, float16_t * pDst, uint32_t blockSize); + /** * @brief Converts the elements of the floating-point vector to Q31 vector. @@ -84,34 +109,35 @@ void arm_float_to_f16(const float32_t *pSrc, float16_t *pDst, uint32_t blockSize * @param[out] pDst points to the f32 output vector * @param[in] blockSize length of the input vector */ -void arm_f16_to_float(const float16_t *pSrc, float32_t *pDst, uint32_t blockSize); +void arm_f16_to_float(const float16_t * pSrc, float32_t * pDst, uint32_t blockSize); + /** - * @brief Weighted sum - * - * + * @brief Weighted average * @param[in] *in Array of input values. * @param[in] *weigths Weights * @param[in] blockSize Number of samples in the input array. - * @return Weighted sum - * + * @return Weighted average */ -float16_t arm_weighted_sum_f16(const float16_t *in, const float16_t *weigths, uint32_t blockSize); +float16_t arm_weighted_average_f16(const float16_t *in + , const float16_t *weigths + , uint32_t blockSize); + /** * @brief Barycenter - * - * * @param[in] in List of vectors * @param[in] weights Weights of the vectors * @param[out] out Barycenter * @param[in] nbVectors Number of vectors * @param[in] vecDim Dimension of space (vector dimension) - * @return None - * */ -void arm_barycenter_f16(const float16_t *in, const float16_t *weights, float16_t *out, - uint32_t nbVectors, uint32_t vecDim); +void arm_barycenter_f16(const float16_t *in + , const float16_t *weights + , float16_t *out + , uint32_t nbVectors + , uint32_t vecDim); + /** @ingroup groupSupport @@ -140,9 +166,9 @@ void arm_barycenter_f16(const float16_t *in, const float16_t *weights, float16_t */ __STATIC_INLINE int16_t arm_typecast_s16_f16(float16_t x) { - int16_t res; - res = *(int16_t *)memcpy((char *)&res, (char *)&x, sizeof(float16_t)); - return (res); + int16_t res; + res=*(int16_t*)memcpy((char*)&res,(char*)&x,sizeof(float16_t)); + return(res); } /** @@ -159,17 +185,19 @@ __STATIC_INLINE int16_t arm_typecast_s16_f16(float16_t x) */ __STATIC_INLINE float16_t arm_typecast_f16_s16(int16_t x) { - float16_t res; - res = *(float16_t *)memcpy((char *)&res, (char *)&x, sizeof(int16_t)); - return (res); + float16_t res; + res=*(float16_t*)memcpy((char*)&res,(char*)&x,sizeof(int16_t)); + return(res); } + /** @} end of typecast group */ + #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/svm_defines.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/svm_defines.h old mode 100644 new mode 100755 similarity index 84% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/svm_defines.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/svm_defines.h index 3aa2de03be5..185a8a902c9 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/svm_defines.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/svm_defines.h @@ -24,21 +24,23 @@ * limitations under the License. */ -#ifndef _SVM_DEFINES_H_ -#define _SVM_DEFINES_H_ + +#ifndef SVM_DEFINES_H_ +#define SVM_DEFINES_H_ /** * @brief Struct for specifying SVM Kernel */ -typedef enum { +typedef enum +{ ARM_ML_KERNEL_LINEAR = 0, - /**< Linear kernel */ + /**< Linear kernel */ ARM_ML_KERNEL_POLYNOMIAL = 1, - /**< Polynomial kernel */ + /**< Polynomial kernel */ ARM_ML_KERNEL_RBF = 2, - /**< Radial Basis Function kernel */ + /**< Radial Basis Function kernel */ ARM_ML_KERNEL_SIGMOID = 3 - /**< Sigmoid kernel */ + /**< Sigmoid kernel */ } arm_ml_kernel_type; #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/svm_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/svm_functions.h old mode 100644 new mode 100755 similarity index 62% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/svm_functions.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/svm_functions.h index 91149b4a46d..cb00cd4f1b3 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/svm_functions.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/svm_functions.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _SVM_FUNCTIONS_H_ -#define _SVM_FUNCTIONS_H_ + +#ifndef SVM_FUNCTIONS_H_ +#define SVM_FUNCTIONS_H_ #include "arm_math_types.h" #include "arm_math_memory.h" @@ -33,8 +34,9 @@ #include "dsp/utils.h" #include "dsp/svm_defines.h" -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif #define STEP(x) (x) <= 0 ? 0 : 1 @@ -58,73 +60,82 @@ extern "C" { * @param[in] x value * @param[in] nb integer exponent >= 1 * @return x^nb - * */ __STATIC_INLINE float32_t arm_exponent_f32(float32_t x, int32_t nb) { float32_t r = x; - nb--; - while (nb > 0) { + nb --; + while(nb > 0) + { r = r * x; nb--; } - return (r); + return(r); } + /** * @brief Instance structure for linear SVM prediction function. */ -typedef struct { - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ +typedef struct +{ + uint32_t nbOfSupportVectors; /**< Number of support vectors */ + uint32_t vectorDimension; /**< Dimension of vector space */ + float32_t intercept; /**< Intercept */ + const float32_t *dualCoefficients; /**< Dual coefficients */ + const float32_t *supportVectors; /**< Support vectors */ + const int32_t *classes; /**< The two SVM classes */ } arm_svm_linear_instance_f32; + /** * @brief Instance structure for polynomial SVM prediction function. */ -typedef struct { - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - int32_t degree; /**< Polynomial degree */ - float32_t coef0; /**< Polynomial constant */ - float32_t gamma; /**< Gamma factor */ +typedef struct +{ + uint32_t nbOfSupportVectors; /**< Number of support vectors */ + uint32_t vectorDimension; /**< Dimension of vector space */ + float32_t intercept; /**< Intercept */ + const float32_t *dualCoefficients; /**< Dual coefficients */ + const float32_t *supportVectors; /**< Support vectors */ + const int32_t *classes; /**< The two SVM classes */ + int32_t degree; /**< Polynomial degree */ + float32_t coef0; /**< Polynomial constant */ + float32_t gamma; /**< Gamma factor */ } arm_svm_polynomial_instance_f32; + /** * @brief Instance structure for rbf SVM prediction function. */ -typedef struct { - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - float32_t gamma; /**< Gamma factor */ +typedef struct +{ + uint32_t nbOfSupportVectors; /**< Number of support vectors */ + uint32_t vectorDimension; /**< Dimension of vector space */ + float32_t intercept; /**< Intercept */ + const float32_t *dualCoefficients; /**< Dual coefficients */ + const float32_t *supportVectors; /**< Support vectors */ + const int32_t *classes; /**< The two SVM classes */ + float32_t gamma; /**< Gamma factor */ } arm_svm_rbf_instance_f32; + /** * @brief Instance structure for sigmoid SVM prediction function. */ -typedef struct { - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float32_t intercept; /**< Intercept */ - const float32_t *dualCoefficients; /**< Dual coefficients */ - const float32_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - float32_t coef0; /**< Independent constant */ - float32_t gamma; /**< Gamma factor */ +typedef struct +{ + uint32_t nbOfSupportVectors; /**< Number of support vectors */ + uint32_t vectorDimension; /**< Dimension of vector space */ + float32_t intercept; /**< Intercept */ + const float32_t *dualCoefficients; /**< Dual coefficients */ + const float32_t *supportVectors; /**< Support vectors */ + const int32_t *classes; /**< The two SVM classes */ + float32_t coef0; /**< Independent constant */ + float32_t gamma; /**< Gamma factor */ } arm_svm_sigmoid_instance_f32; + /** * @brief SVM linear instance init function * @param[in] S Parameters for SVM functions @@ -134,26 +145,26 @@ typedef struct { * @param[in] dualCoefficients Array of dual coefficients * @param[in] supportVectors Array of support vectors * @param[in] classes Array of 2 classes ID - * @return none. - * */ +void arm_svm_linear_init_f32(arm_svm_linear_instance_f32 *S, + uint32_t nbOfSupportVectors, + uint32_t vectorDimension, + float32_t intercept, + const float32_t *dualCoefficients, + const float32_t *supportVectors, + const int32_t *classes); -void arm_svm_linear_init_f32(arm_svm_linear_instance_f32 *S, uint32_t nbOfSupportVectors, - uint32_t vectorDimension, float32_t intercept, - const float32_t *dualCoefficients, const float32_t *supportVectors, - const int32_t *classes); /** * @brief SVM linear prediction * @param[in] S Pointer to an instance of the linear SVM structure. * @param[in] in Pointer to input vector * @param[out] pResult Decision value - * @return none. - * */ +void arm_svm_linear_predict_f32(const arm_svm_linear_instance_f32 *S, + const float32_t * in, + int32_t * pResult); -void arm_svm_linear_predict_f32(const arm_svm_linear_instance_f32 *S, const float32_t *in, - int32_t *pResult); /** * @brief SVM polynomial instance init function @@ -167,26 +178,30 @@ void arm_svm_linear_predict_f32(const arm_svm_linear_instance_f32 *S, const floa * @param[in] degree Polynomial degree * @param[in] coef0 coeff0 (scikit-learn terminology) * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * */ +void arm_svm_polynomial_init_f32(arm_svm_polynomial_instance_f32 *S, + uint32_t nbOfSupportVectors, + uint32_t vectorDimension, + float32_t intercept, + const float32_t *dualCoefficients, + const float32_t *supportVectors, + const int32_t *classes, + int32_t degree, + float32_t coef0, + float32_t gamma + ); -void arm_svm_polynomial_init_f32(arm_svm_polynomial_instance_f32 *S, uint32_t nbOfSupportVectors, - uint32_t vectorDimension, float32_t intercept, - const float32_t *dualCoefficients, const float32_t *supportVectors, - const int32_t *classes, int32_t degree, float32_t coef0, - float32_t gamma); /** * @brief SVM polynomial prediction * @param[in] S Pointer to an instance of the polynomial SVM structure. * @param[in] in Pointer to input vector * @param[out] pResult Decision value - * @return none. - * */ -void arm_svm_polynomial_predict_f32(const arm_svm_polynomial_instance_f32 *S, const float32_t *in, - int32_t *pResult); +void arm_svm_polynomial_predict_f32(const arm_svm_polynomial_instance_f32 *S, + const float32_t * in, + int32_t * pResult); + /** * @brief SVM radial basis function instance init function @@ -198,25 +213,28 @@ void arm_svm_polynomial_predict_f32(const arm_svm_polynomial_instance_f32 *S, co * @param[in] supportVectors Array of support vectors * @param[in] classes Array of 2 classes ID * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * */ +void arm_svm_rbf_init_f32(arm_svm_rbf_instance_f32 *S, + uint32_t nbOfSupportVectors, + uint32_t vectorDimension, + float32_t intercept, + const float32_t *dualCoefficients, + const float32_t *supportVectors, + const int32_t *classes, + float32_t gamma + ); -void arm_svm_rbf_init_f32(arm_svm_rbf_instance_f32 *S, uint32_t nbOfSupportVectors, - uint32_t vectorDimension, float32_t intercept, - const float32_t *dualCoefficients, const float32_t *supportVectors, - const int32_t *classes, float32_t gamma); /** * @brief SVM rbf prediction * @param[in] S Pointer to an instance of the rbf SVM structure. * @param[in] in Pointer to input vector * @param[out] pResult decision value - * @return none. - * */ -void arm_svm_rbf_predict_f32(const arm_svm_rbf_instance_f32 *S, const float32_t *in, - int32_t *pResult); +void arm_svm_rbf_predict_f32(const arm_svm_rbf_instance_f32 *S, + const float32_t * in, + int32_t * pResult); + /** * @brief SVM sigmoid instance init function @@ -229,27 +247,33 @@ void arm_svm_rbf_predict_f32(const arm_svm_rbf_instance_f32 *S, const float32_t * @param[in] classes Array of 2 classes ID * @param[in] coef0 coeff0 (scikit-learn terminology) * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * */ +void arm_svm_sigmoid_init_f32(arm_svm_sigmoid_instance_f32 *S, + uint32_t nbOfSupportVectors, + uint32_t vectorDimension, + float32_t intercept, + const float32_t *dualCoefficients, + const float32_t *supportVectors, + const int32_t *classes, + float32_t coef0, + float32_t gamma + ); -void arm_svm_sigmoid_init_f32(arm_svm_sigmoid_instance_f32 *S, uint32_t nbOfSupportVectors, - uint32_t vectorDimension, float32_t intercept, - const float32_t *dualCoefficients, const float32_t *supportVectors, - const int32_t *classes, float32_t coef0, float32_t gamma); /** * @brief SVM sigmoid prediction * @param[in] S Pointer to an instance of the rbf SVM structure. * @param[in] in Pointer to input vector * @param[out] pResult Decision value - * @return none. - * */ -void arm_svm_sigmoid_predict_f32(const arm_svm_sigmoid_instance_f32 *S, const float32_t *in, - int32_t *pResult); +void arm_svm_sigmoid_predict_f32(const arm_svm_sigmoid_instance_f32 *S, + const float32_t * in, + int32_t * pResult); + + + -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/svm_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/svm_functions_f16.h old mode 100644 new mode 100755 similarity index 61% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/svm_functions_f16.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/svm_functions_f16.h index 6c916d86065..5f757a0a10d --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/svm_functions_f16.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/svm_functions_f16.h @@ -23,8 +23,9 @@ * limitations under the License. */ -#ifndef _SVM_FUNCTIONS_F16_H_ -#define _SVM_FUNCTIONS_F16_H_ + +#ifndef SVM_FUNCTIONS_F16_H_ +#define SVM_FUNCTIONS_F16_H_ #include "arm_math_types_f16.h" #include "arm_math_memory.h" @@ -33,8 +34,10 @@ #include "dsp/utils.h" #include "dsp/svm_defines.h" -#ifdef __cplusplus -extern "C" { + +#ifdef __cplusplus +extern "C" +{ #endif #if defined(ARM_FLOAT16_SUPPORTED) @@ -55,60 +58,70 @@ extern "C" { * */ + + /** * @brief Instance structure for linear SVM prediction function. */ -typedef struct { - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float16_t intercept; /**< Intercept */ - const float16_t *dualCoefficients; /**< Dual coefficients */ - const float16_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ +typedef struct +{ + uint32_t nbOfSupportVectors; /**< Number of support vectors */ + uint32_t vectorDimension; /**< Dimension of vector space */ + float16_t intercept; /**< Intercept */ + const float16_t *dualCoefficients; /**< Dual coefficients */ + const float16_t *supportVectors; /**< Support vectors */ + const int32_t *classes; /**< The two SVM classes */ } arm_svm_linear_instance_f16; + /** * @brief Instance structure for polynomial SVM prediction function. */ -typedef struct { - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float16_t intercept; /**< Intercept */ - const float16_t *dualCoefficients; /**< Dual coefficients */ - const float16_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - int32_t degree; /**< Polynomial degree */ - float16_t coef0; /**< Polynomial constant */ - float16_t gamma; /**< Gamma factor */ +typedef struct +{ + uint32_t nbOfSupportVectors; /**< Number of support vectors */ + uint32_t vectorDimension; /**< Dimension of vector space */ + float16_t intercept; /**< Intercept */ + const float16_t *dualCoefficients; /**< Dual coefficients */ + const float16_t *supportVectors; /**< Support vectors */ + const int32_t *classes; /**< The two SVM classes */ + int32_t degree; /**< Polynomial degree */ + float16_t coef0; /**< Polynomial constant */ + float16_t gamma; /**< Gamma factor */ } arm_svm_polynomial_instance_f16; + /** * @brief Instance structure for rbf SVM prediction function. */ -typedef struct { - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float16_t intercept; /**< Intercept */ - const float16_t *dualCoefficients; /**< Dual coefficients */ - const float16_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - float16_t gamma; /**< Gamma factor */ +typedef struct +{ + uint32_t nbOfSupportVectors; /**< Number of support vectors */ + uint32_t vectorDimension; /**< Dimension of vector space */ + float16_t intercept; /**< Intercept */ + const float16_t *dualCoefficients; /**< Dual coefficients */ + const float16_t *supportVectors; /**< Support vectors */ + const int32_t *classes; /**< The two SVM classes */ + float16_t gamma; /**< Gamma factor */ } arm_svm_rbf_instance_f16; + /** * @brief Instance structure for sigmoid SVM prediction function. */ -typedef struct { - uint32_t nbOfSupportVectors; /**< Number of support vectors */ - uint32_t vectorDimension; /**< Dimension of vector space */ - float16_t intercept; /**< Intercept */ - const float16_t *dualCoefficients; /**< Dual coefficients */ - const float16_t *supportVectors; /**< Support vectors */ - const int32_t *classes; /**< The two SVM classes */ - float16_t coef0; /**< Independent constant */ - float16_t gamma; /**< Gamma factor */ +typedef struct +{ + uint32_t nbOfSupportVectors; /**< Number of support vectors */ + uint32_t vectorDimension; /**< Dimension of vector space */ + float16_t intercept; /**< Intercept */ + const float16_t *dualCoefficients; /**< Dual coefficients */ + const float16_t *supportVectors; /**< Support vectors */ + const int32_t *classes; /**< The two SVM classes */ + float16_t coef0; /**< Independent constant */ + float16_t gamma; /**< Gamma factor */ } arm_svm_sigmoid_instance_f16; + /** * @brief SVM linear instance init function * @param[in] S Parameters for SVM functions @@ -118,26 +131,25 @@ typedef struct { * @param[in] dualCoefficients Array of dual coefficients * @param[in] supportVectors Array of support vectors * @param[in] classes Array of 2 classes ID - * @return none. - * */ - -void arm_svm_linear_init_f16(arm_svm_linear_instance_f16 *S, uint32_t nbOfSupportVectors, - uint32_t vectorDimension, float16_t intercept, - const float16_t *dualCoefficients, const float16_t *supportVectors, - const int32_t *classes); +void arm_svm_linear_init_f16(arm_svm_linear_instance_f16 *S, + uint32_t nbOfSupportVectors, + uint32_t vectorDimension, + float16_t intercept, + const float16_t *dualCoefficients, + const float16_t *supportVectors, + const int32_t *classes); /** * @brief SVM linear prediction * @param[in] S Pointer to an instance of the linear SVM structure. * @param[in] in Pointer to input vector * @param[out] pResult Decision value - * @return none. - * */ +void arm_svm_linear_predict_f16(const arm_svm_linear_instance_f16 *S, + const float16_t * in, + int32_t * pResult); -void arm_svm_linear_predict_f16(const arm_svm_linear_instance_f16 *S, const float16_t *in, - int32_t *pResult); /** * @brief SVM polynomial instance init function @@ -151,26 +163,30 @@ void arm_svm_linear_predict_f16(const arm_svm_linear_instance_f16 *S, const floa * @param[in] degree Polynomial degree * @param[in] coef0 coeff0 (scikit-learn terminology) * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * */ +void arm_svm_polynomial_init_f16(arm_svm_polynomial_instance_f16 *S, + uint32_t nbOfSupportVectors, + uint32_t vectorDimension, + float16_t intercept, + const float16_t *dualCoefficients, + const float16_t *supportVectors, + const int32_t *classes, + int32_t degree, + float16_t coef0, + float16_t gamma + ); -void arm_svm_polynomial_init_f16(arm_svm_polynomial_instance_f16 *S, uint32_t nbOfSupportVectors, - uint32_t vectorDimension, float16_t intercept, - const float16_t *dualCoefficients, const float16_t *supportVectors, - const int32_t *classes, int32_t degree, float16_t coef0, - float16_t gamma); /** * @brief SVM polynomial prediction * @param[in] S Pointer to an instance of the polynomial SVM structure. * @param[in] in Pointer to input vector * @param[out] pResult Decision value - * @return none. - * */ -void arm_svm_polynomial_predict_f16(const arm_svm_polynomial_instance_f16 *S, const float16_t *in, - int32_t *pResult); +void arm_svm_polynomial_predict_f16(const arm_svm_polynomial_instance_f16 *S, + const float16_t * in, + int32_t * pResult); + /** * @brief SVM radial basis function instance init function @@ -182,25 +198,28 @@ void arm_svm_polynomial_predict_f16(const arm_svm_polynomial_instance_f16 *S, co * @param[in] supportVectors Array of support vectors * @param[in] classes Array of 2 classes ID * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * */ +void arm_svm_rbf_init_f16(arm_svm_rbf_instance_f16 *S, + uint32_t nbOfSupportVectors, + uint32_t vectorDimension, + float16_t intercept, + const float16_t *dualCoefficients, + const float16_t *supportVectors, + const int32_t *classes, + float16_t gamma + ); -void arm_svm_rbf_init_f16(arm_svm_rbf_instance_f16 *S, uint32_t nbOfSupportVectors, - uint32_t vectorDimension, float16_t intercept, - const float16_t *dualCoefficients, const float16_t *supportVectors, - const int32_t *classes, float16_t gamma); /** * @brief SVM rbf prediction * @param[in] S Pointer to an instance of the rbf SVM structure. * @param[in] in Pointer to input vector * @param[out] pResult decision value - * @return none. - * */ -void arm_svm_rbf_predict_f16(const arm_svm_rbf_instance_f16 *S, const float16_t *in, - int32_t *pResult); +void arm_svm_rbf_predict_f16(const arm_svm_rbf_instance_f16 *S, + const float16_t * in, + int32_t * pResult); + /** * @brief SVM sigmoid instance init function @@ -213,28 +232,33 @@ void arm_svm_rbf_predict_f16(const arm_svm_rbf_instance_f16 *S, const float16_t * @param[in] classes Array of 2 classes ID * @param[in] coef0 coeff0 (scikit-learn terminology) * @param[in] gamma gamma (scikit-learn terminology) - * @return none. - * */ +void arm_svm_sigmoid_init_f16(arm_svm_sigmoid_instance_f16 *S, + uint32_t nbOfSupportVectors, + uint32_t vectorDimension, + float16_t intercept, + const float16_t *dualCoefficients, + const float16_t *supportVectors, + const int32_t *classes, + float16_t coef0, + float16_t gamma + ); -void arm_svm_sigmoid_init_f16(arm_svm_sigmoid_instance_f16 *S, uint32_t nbOfSupportVectors, - uint32_t vectorDimension, float16_t intercept, - const float16_t *dualCoefficients, const float16_t *supportVectors, - const int32_t *classes, float16_t coef0, float16_t gamma); /** * @brief SVM sigmoid prediction * @param[in] S Pointer to an instance of the rbf SVM structure. * @param[in] in Pointer to input vector * @param[out] pResult Decision value - * @return none. - * */ -void arm_svm_sigmoid_predict_f16(const arm_svm_sigmoid_instance_f16 *S, const float16_t *in, - int32_t *pResult); +void arm_svm_sigmoid_predict_f16(const arm_svm_sigmoid_instance_f16 *S, + const float16_t * in, + int32_t * pResult); + + #endif /*defined(ARM_FLOAT16_SUPPORTED)*/ -#ifdef __cplusplus +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/transform_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/transform_functions.h new file mode 100755 index 00000000000..b2c13d9dfcf --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/transform_functions.h @@ -0,0 +1,1151 @@ +/****************************************************************************** + * @file transform_functions.h + * @brief Public header file for CMSIS DSP Library + * @version V1.10.0 + * @date 08 July 2021 + * Target Processor: Cortex-M and Cortex-A cores + ******************************************************************************/ +/* + * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef TRANSFORM_FUNCTIONS_H_ +#define TRANSFORM_FUNCTIONS_H_ + +#include "arm_math_types.h" +#include "arm_math_memory.h" + +#include "dsp/none.h" +#include "dsp/utils.h" + +#include "dsp/basic_math_functions.h" +#include "dsp/complex_math_functions.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** + * @defgroup groupTransforms Transform Functions + */ + + + /** + * @brief Instance structure for the Q15 CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + const q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix2_instance_q15; + +/* Deprecated */ + arm_status arm_cfft_radix2_init_q15( + arm_cfft_radix2_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_q15( + const arm_cfft_radix2_instance_q15 * S, + q15_t * pSrc); + + + /** + * @brief Instance structure for the Q15 CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + const q15_t *pTwiddle; /**< points to the twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix4_instance_q15; + +/* Deprecated */ + arm_status arm_cfft_radix4_init_q15( + arm_cfft_radix4_instance_q15 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix4_q15( + const arm_cfft_radix4_instance_q15 * S, + q15_t * pSrc); + + /** + * @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix2_instance_q31; + +/* Deprecated */ + arm_status arm_cfft_radix2_init_q31( + arm_cfft_radix2_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_q31( + const arm_cfft_radix2_instance_q31 * S, + q31_t * pSrc); + + /** + * @brief Instance structure for the Q31 CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + const q31_t *pTwiddle; /**< points to the twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + } arm_cfft_radix4_instance_q31; + +/* Deprecated */ + void arm_cfft_radix4_q31( + const arm_cfft_radix4_instance_q31 * S, + q31_t * pSrc); + +/* Deprecated */ + arm_status arm_cfft_radix4_init_q31( + arm_cfft_radix4_instance_q31 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float32_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix2_instance_f32; + + +/* Deprecated */ + arm_status arm_cfft_radix2_init_f32( + arm_cfft_radix2_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_f32( + const arm_cfft_radix2_instance_f32 * S, + float32_t * pSrc); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float32_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix4_instance_f32; + + + +/* Deprecated */ + arm_status arm_cfft_radix4_init_f32( + arm_cfft_radix4_instance_f32 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix4_f32( + const arm_cfft_radix4_instance_f32 * S, + float32_t * pSrc); + + /** + * @brief Instance structure for the fixed-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const q15_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ +#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) + const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ + const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ + const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ + const q15_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ + const q15_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ + const q15_t *rearranged_twiddle_stride3; +#endif + } arm_cfft_instance_q15; + +arm_status arm_cfft_init_4096_q15(arm_cfft_instance_q15 * S); +arm_status arm_cfft_init_2048_q15(arm_cfft_instance_q15 * S); +arm_status arm_cfft_init_1024_q15(arm_cfft_instance_q15 * S); +arm_status arm_cfft_init_512_q15(arm_cfft_instance_q15 * S); +arm_status arm_cfft_init_256_q15(arm_cfft_instance_q15 * S); +arm_status arm_cfft_init_128_q15(arm_cfft_instance_q15 * S); +arm_status arm_cfft_init_64_q15(arm_cfft_instance_q15 * S); +arm_status arm_cfft_init_32_q15(arm_cfft_instance_q15 * S); +arm_status arm_cfft_init_16_q15(arm_cfft_instance_q15 * S); + +arm_status arm_cfft_init_q15( + arm_cfft_instance_q15 * S, + uint16_t fftLen); + +void arm_cfft_q15( + const arm_cfft_instance_q15 * S, + q15_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the fixed-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ +#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) + const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ + const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ + const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ + const q31_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ + const q31_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ + const q31_t *rearranged_twiddle_stride3; +#endif + } arm_cfft_instance_q31; + +arm_status arm_cfft_init_4096_q31(arm_cfft_instance_q31 * S); +arm_status arm_cfft_init_2048_q31(arm_cfft_instance_q31 * S); +arm_status arm_cfft_init_1024_q31(arm_cfft_instance_q31 * S); +arm_status arm_cfft_init_512_q31(arm_cfft_instance_q31 * S); +arm_status arm_cfft_init_256_q31(arm_cfft_instance_q31 * S); +arm_status arm_cfft_init_128_q31(arm_cfft_instance_q31 * S); +arm_status arm_cfft_init_64_q31(arm_cfft_instance_q31 * S); +arm_status arm_cfft_init_32_q31(arm_cfft_instance_q31 * S); +arm_status arm_cfft_init_16_q31(arm_cfft_instance_q31 * S); + +arm_status arm_cfft_init_q31( + arm_cfft_instance_q31 * S, + uint16_t fftLen); + +void arm_cfft_q31( + const arm_cfft_instance_q31 * S, + q31_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ +#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ + const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ + const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ + const float32_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ + const float32_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ + const float32_t *rearranged_twiddle_stride3; +#endif + } arm_cfft_instance_f32; + + +arm_status arm_cfft_init_4096_f32(arm_cfft_instance_f32 * S); +arm_status arm_cfft_init_2048_f32(arm_cfft_instance_f32 * S); +arm_status arm_cfft_init_1024_f32(arm_cfft_instance_f32 * S); +arm_status arm_cfft_init_512_f32(arm_cfft_instance_f32 * S); +arm_status arm_cfft_init_256_f32(arm_cfft_instance_f32 * S); +arm_status arm_cfft_init_128_f32(arm_cfft_instance_f32 * S); +arm_status arm_cfft_init_64_f32(arm_cfft_instance_f32 * S); +arm_status arm_cfft_init_32_f32(arm_cfft_instance_f32 * S); +arm_status arm_cfft_init_16_f32(arm_cfft_instance_f32 * S); + + arm_status arm_cfft_init_f32( + arm_cfft_instance_f32 * S, + uint16_t fftLen); + + void arm_cfft_f32( + const arm_cfft_instance_f32 * S, + float32_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + + /** + * @brief Instance structure for the Double Precision Floating-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const float64_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ + } arm_cfft_instance_f64; + +arm_status arm_cfft_init_4096_f64(arm_cfft_instance_f64 * S); +arm_status arm_cfft_init_2048_f64(arm_cfft_instance_f64 * S); +arm_status arm_cfft_init_1024_f64(arm_cfft_instance_f64 * S); +arm_status arm_cfft_init_512_f64(arm_cfft_instance_f64 * S); +arm_status arm_cfft_init_256_f64(arm_cfft_instance_f64 * S); +arm_status arm_cfft_init_128_f64(arm_cfft_instance_f64 * S); +arm_status arm_cfft_init_64_f64(arm_cfft_instance_f64 * S); +arm_status arm_cfft_init_32_f64(arm_cfft_instance_f64 * S); +arm_status arm_cfft_init_16_f64(arm_cfft_instance_f64 * S); + + arm_status arm_cfft_init_f64( + arm_cfft_instance_f64 * S, + uint16_t fftLen); + + void arm_cfft_f64( + const arm_cfft_instance_f64 * S, + float64_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the Q15 RFFT/RIFFT function. + */ + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + const q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + const q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ +#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) + arm_cfft_instance_q15 cfftInst; +#else + const arm_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */ +#endif + } arm_rfft_instance_q15; + +arm_status arm_rfft_init_32_q15( + arm_rfft_instance_q15 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + +arm_status arm_rfft_init_64_q15( + arm_rfft_instance_q15 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + +arm_status arm_rfft_init_128_q15( + arm_rfft_instance_q15 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + +arm_status arm_rfft_init_256_q15( + arm_rfft_instance_q15 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + +arm_status arm_rfft_init_512_q15( + arm_rfft_instance_q15 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + +arm_status arm_rfft_init_1024_q15( + arm_rfft_instance_q15 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + +arm_status arm_rfft_init_2048_q15( + arm_rfft_instance_q15 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + +arm_status arm_rfft_init_4096_q15( + arm_rfft_instance_q15 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + +arm_status arm_rfft_init_8192_q15( + arm_rfft_instance_q15 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + arm_status arm_rfft_init_q15( + arm_rfft_instance_q15 * S, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_q15( + const arm_rfft_instance_q15 * S, + q15_t * pSrc, + q15_t * pDst); + + /** + * @brief Instance structure for the Q31 RFFT/RIFFT function. + */ + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + const q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + const q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ +#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) + arm_cfft_instance_q31 cfftInst; +#else + const arm_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */ +#endif + } arm_rfft_instance_q31; + + arm_status arm_rfft_init_32_q31( + arm_rfft_instance_q31 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + arm_status arm_rfft_init_64_q31( + arm_rfft_instance_q31 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + arm_status arm_rfft_init_128_q31( + arm_rfft_instance_q31 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + arm_status arm_rfft_init_256_q31( + arm_rfft_instance_q31 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + arm_status arm_rfft_init_512_q31( + arm_rfft_instance_q31 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + arm_status arm_rfft_init_1024_q31( + arm_rfft_instance_q31 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + arm_status arm_rfft_init_2048_q31( + arm_rfft_instance_q31 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + arm_status arm_rfft_init_4096_q31( + arm_rfft_instance_q31 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + arm_status arm_rfft_init_8192_q31( + arm_rfft_instance_q31 * S, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + arm_status arm_rfft_init_q31( + arm_rfft_instance_q31 * S, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_q31( + const arm_rfft_instance_q31 * S, + q31_t * pSrc, + q31_t * pDst); + + /** + * @brief Instance structure for the floating-point RFFT/RIFFT function. + */ + typedef struct + { + uint32_t fftLenReal; /**< length of the real FFT. */ + uint16_t fftLenBy2; /**< length of the complex FFT. */ + uint8_t ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ + uint8_t bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ + uint32_t twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + const float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ + const float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ + arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ + } arm_rfft_instance_f32; + + arm_status arm_rfft_init_f32( + arm_rfft_instance_f32 * S, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint32_t fftLenReal, + uint32_t ifftFlagR, + uint32_t bitReverseFlag); + + void arm_rfft_f32( + const arm_rfft_instance_f32 * S, + float32_t * pSrc, + float32_t * pDst); + + /** + * @brief Instance structure for the Double Precision Floating-point RFFT/RIFFT function. + */ +typedef struct + { + arm_cfft_instance_f64 Sint; /**< Internal CFFT structure. */ + uint16_t fftLenRFFT; /**< length of the real sequence */ + const float64_t * pTwiddleRFFT; /**< Twiddle factors real stage */ + } arm_rfft_fast_instance_f64 ; + +arm_status arm_rfft_fast_init_32_f64( arm_rfft_fast_instance_f64 * S ); +arm_status arm_rfft_fast_init_64_f64( arm_rfft_fast_instance_f64 * S ); +arm_status arm_rfft_fast_init_128_f64( arm_rfft_fast_instance_f64 * S ); +arm_status arm_rfft_fast_init_256_f64( arm_rfft_fast_instance_f64 * S ); +arm_status arm_rfft_fast_init_512_f64( arm_rfft_fast_instance_f64 * S ); +arm_status arm_rfft_fast_init_1024_f64( arm_rfft_fast_instance_f64 * S ); +arm_status arm_rfft_fast_init_2048_f64( arm_rfft_fast_instance_f64 * S ); +arm_status arm_rfft_fast_init_4096_f64( arm_rfft_fast_instance_f64 * S ); + +arm_status arm_rfft_fast_init_f64 ( + arm_rfft_fast_instance_f64 * S, + uint16_t fftLen); + + +void arm_rfft_fast_f64( + arm_rfft_fast_instance_f64 * S, + float64_t * p, float64_t * pOut, + uint8_t ifftFlag); + + + /** + * @brief Instance structure for the floating-point RFFT/RIFFT function. + */ +typedef struct + { + arm_cfft_instance_f32 Sint; /**< Internal CFFT structure. */ + uint16_t fftLenRFFT; /**< length of the real sequence */ + const float32_t * pTwiddleRFFT; /**< Twiddle factors real stage */ + } arm_rfft_fast_instance_f32 ; + +arm_status arm_rfft_fast_init_32_f32( arm_rfft_fast_instance_f32 * S ); +arm_status arm_rfft_fast_init_64_f32( arm_rfft_fast_instance_f32 * S ); +arm_status arm_rfft_fast_init_128_f32( arm_rfft_fast_instance_f32 * S ); +arm_status arm_rfft_fast_init_256_f32( arm_rfft_fast_instance_f32 * S ); +arm_status arm_rfft_fast_init_512_f32( arm_rfft_fast_instance_f32 * S ); +arm_status arm_rfft_fast_init_1024_f32( arm_rfft_fast_instance_f32 * S ); +arm_status arm_rfft_fast_init_2048_f32( arm_rfft_fast_instance_f32 * S ); +arm_status arm_rfft_fast_init_4096_f32( arm_rfft_fast_instance_f32 * S ); + +arm_status arm_rfft_fast_init_f32 ( + arm_rfft_fast_instance_f32 * S, + uint16_t fftLen); + + + void arm_rfft_fast_f32( + const arm_rfft_fast_instance_f32 * S, + float32_t * p, float32_t * pOut, + uint8_t ifftFlag); + + /** + * @brief Instance structure for the floating-point DCT4/IDCT4 function. + */ + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + float32_t normalize; /**< normalizing factor. */ + const float32_t *pTwiddle; /**< points to the twiddle factor table. */ + const float32_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_f32 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_f32; + + + /** + * @brief Initialization function for the floating-point DCT4/IDCT4. + * @param[in,out] S points to an instance of floating-point DCT4/IDCT4 structure. + * @param[in] S_RFFT points to an instance of floating-point RFFT/RIFFT structure. + * @param[in] S_CFFT points to an instance of floating-point CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported transform length. + */ + arm_status arm_dct4_init_f32( + arm_dct4_instance_f32 * S, + arm_rfft_instance_f32 * S_RFFT, + arm_cfft_radix4_instance_f32 * S_CFFT, + uint16_t N, + uint16_t Nby2, + float32_t normalize); + + + /** + * @brief Processing function for the floating-point DCT4/IDCT4. + * @param[in] S points to an instance of the floating-point DCT4/IDCT4 structure. + * @param[in] pState points to state buffer. + * @param[in,out] pInlineBuffer points to the in-place input and output buffer. + */ + void arm_dct4_f32( + const arm_dct4_instance_f32 * S, + float32_t * pState, + float32_t * pInlineBuffer); + + + /** + * @brief Instance structure for the Q31 DCT4/IDCT4 function. + */ + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + q31_t normalize; /**< normalizing factor. */ + const q31_t *pTwiddle; /**< points to the twiddle factor table. */ + const q31_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_q31; + + + /** + * @brief Initialization function for the Q31 DCT4/IDCT4. + * @param[in,out] S points to an instance of Q31 DCT4/IDCT4 structure. + * @param[in] S_RFFT points to an instance of Q31 RFFT/RIFFT structure + * @param[in] S_CFFT points to an instance of Q31 CFFT/CIFFT structure + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + */ + arm_status arm_dct4_init_q31( + arm_dct4_instance_q31 * S, + arm_rfft_instance_q31 * S_RFFT, + arm_cfft_radix4_instance_q31 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q31_t normalize); + + + /** + * @brief Processing function for the Q31 DCT4/IDCT4. + * @param[in] S points to an instance of the Q31 DCT4 structure. + * @param[in] pState points to state buffer. + * @param[in,out] pInlineBuffer points to the in-place input and output buffer. + */ + void arm_dct4_q31( + const arm_dct4_instance_q31 * S, + q31_t * pState, + q31_t * pInlineBuffer); + + + /** + * @brief Instance structure for the Q15 DCT4/IDCT4 function. + */ + typedef struct + { + uint16_t N; /**< length of the DCT4. */ + uint16_t Nby2; /**< half of the length of the DCT4. */ + q15_t normalize; /**< normalizing factor. */ + const q15_t *pTwiddle; /**< points to the twiddle factor table. */ + const q15_t *pCosFactor; /**< points to the cosFactor table. */ + arm_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */ + arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ + } arm_dct4_instance_q15; + + + /** + * @brief Initialization function for the Q15 DCT4/IDCT4. + * @param[in,out] S points to an instance of Q15 DCT4/IDCT4 structure. + * @param[in] S_RFFT points to an instance of Q15 RFFT/RIFFT structure. + * @param[in] S_CFFT points to an instance of Q15 CFFT/CIFFT structure. + * @param[in] N length of the DCT4. + * @param[in] Nby2 half of the length of the DCT4. + * @param[in] normalize normalizing factor. + * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. + */ + arm_status arm_dct4_init_q15( + arm_dct4_instance_q15 * S, + arm_rfft_instance_q15 * S_RFFT, + arm_cfft_radix4_instance_q15 * S_CFFT, + uint16_t N, + uint16_t Nby2, + q15_t normalize); + + + /** + * @brief Processing function for the Q15 DCT4/IDCT4. + * @param[in] S points to an instance of the Q15 DCT4 structure. + * @param[in] pState points to state buffer. + * @param[in,out] pInlineBuffer points to the in-place input and output buffer. + */ + void arm_dct4_q15( + const arm_dct4_instance_q15 * S, + q15_t * pState, + q15_t * pInlineBuffer); + + /** + * @brief Instance structure for the Floating-point MFCC function. + */ +typedef struct + { + const float32_t *dctCoefs; /**< Internal DCT coefficients */ + const float32_t *filterCoefs; /**< Internal Mel filter coefficients */ + const float32_t *windowCoefs; /**< Windowing coefficients */ + const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ + const uint32_t *filterLengths; /**< Internal Mel filter lengths */ + uint32_t fftLen; /**< FFT length */ + uint32_t nbMelFilters; /**< Number of Mel filters */ + uint32_t nbDctOutputs; /**< Number of DCT outputs */ +#if defined(ARM_MFCC_CFFT_BASED) + /* Implementation of the MFCC is using a CFFT */ + arm_cfft_instance_f32 cfft; /**< Internal CFFT instance */ +#else + /* Implementation of the MFCC is using a RFFT (default) */ + arm_rfft_fast_instance_f32 rfft; +#endif + } arm_mfcc_instance_f32 ; + +arm_status arm_mfcc_init_32_f32( + arm_mfcc_instance_f32 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float32_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float32_t *filterCoefs, + const float32_t *windowCoefs + ); + +arm_status arm_mfcc_init_64_f32( + arm_mfcc_instance_f32 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float32_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float32_t *filterCoefs, + const float32_t *windowCoefs + ); + +arm_status arm_mfcc_init_128_f32( + arm_mfcc_instance_f32 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float32_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float32_t *filterCoefs, + const float32_t *windowCoefs + ); + +arm_status arm_mfcc_init_256_f32( + arm_mfcc_instance_f32 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float32_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float32_t *filterCoefs, + const float32_t *windowCoefs + ); + +arm_status arm_mfcc_init_512_f32( + arm_mfcc_instance_f32 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float32_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float32_t *filterCoefs, + const float32_t *windowCoefs + ); + +arm_status arm_mfcc_init_1024_f32( + arm_mfcc_instance_f32 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float32_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float32_t *filterCoefs, + const float32_t *windowCoefs + ); + +arm_status arm_mfcc_init_2048_f32( + arm_mfcc_instance_f32 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float32_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float32_t *filterCoefs, + const float32_t *windowCoefs + ); + +arm_status arm_mfcc_init_4096_f32( + arm_mfcc_instance_f32 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float32_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float32_t *filterCoefs, + const float32_t *windowCoefs + ); + +arm_status arm_mfcc_init_f32( + arm_mfcc_instance_f32 * S, + uint32_t fftLen, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float32_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float32_t *filterCoefs, + const float32_t *windowCoefs + ); + + +/** + @brief MFCC F32 + @param[in] S points to the mfcc instance structure + @param[in] pSrc points to the input samples + @param[out] pDst points to the output MFCC values + @param[inout] pTmp points to a temporary buffer of complex + */ + void arm_mfcc_f32( + const arm_mfcc_instance_f32 * S, + float32_t *pSrc, + float32_t *pDst, + float32_t *pTmp + ); + + /** + * @brief Instance structure for the Q31 MFCC function. + */ +typedef struct + { + const q31_t *dctCoefs; /**< Internal DCT coefficients */ + const q31_t *filterCoefs; /**< Internal Mel filter coefficients */ + const q31_t *windowCoefs; /**< Windowing coefficients */ + const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ + const uint32_t *filterLengths; /**< Internal Mel filter lengths */ + uint32_t fftLen; /**< FFT length */ + uint32_t nbMelFilters; /**< Number of Mel filters */ + uint32_t nbDctOutputs; /**< Number of DCT outputs */ +#if defined(ARM_MFCC_CFFT_BASED) + /* Implementation of the MFCC is using a CFFT */ + arm_cfft_instance_q31 cfft; /**< Internal CFFT instance */ +#else + /* Implementation of the MFCC is using a RFFT (default) */ + arm_rfft_instance_q31 rfft; +#endif + } arm_mfcc_instance_q31 ; + +arm_status arm_mfcc_init_32_q31( + arm_mfcc_instance_q31 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q31_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q31_t *filterCoefs, + const q31_t *windowCoefs + ); + +arm_status arm_mfcc_init_64_q31( + arm_mfcc_instance_q31 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q31_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q31_t *filterCoefs, + const q31_t *windowCoefs + ); + +arm_status arm_mfcc_init_128_q31( + arm_mfcc_instance_q31 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q31_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q31_t *filterCoefs, + const q31_t *windowCoefs + ); + +arm_status arm_mfcc_init_256_q31( + arm_mfcc_instance_q31 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q31_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q31_t *filterCoefs, + const q31_t *windowCoefs + ); + +arm_status arm_mfcc_init_512_q31( + arm_mfcc_instance_q31 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q31_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q31_t *filterCoefs, + const q31_t *windowCoefs + ); + +arm_status arm_mfcc_init_1024_q31( + arm_mfcc_instance_q31 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q31_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q31_t *filterCoefs, + const q31_t *windowCoefs + ); + +arm_status arm_mfcc_init_2048_q31( + arm_mfcc_instance_q31 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q31_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q31_t *filterCoefs, + const q31_t *windowCoefs + ); + +arm_status arm_mfcc_init_4096_q31( + arm_mfcc_instance_q31 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q31_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q31_t *filterCoefs, + const q31_t *windowCoefs + ); + +arm_status arm_mfcc_init_q31( + arm_mfcc_instance_q31 * S, + uint32_t fftLen, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q31_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q31_t *filterCoefs, + const q31_t *windowCoefs + ); + + +/** + @brief MFCC Q31 + @param[in] S points to the mfcc instance structure + @param[in] pSrc points to the input samples + @param[out] pDst points to the output MFCC values + @param[inout] pTmp points to a temporary buffer of complex + @return error status + */ + arm_status arm_mfcc_q31( + const arm_mfcc_instance_q31 * S, + q31_t *pSrc, + q31_t *pDst, + q31_t *pTmp + ); + + /** + * @brief Instance structure for the Q15 MFCC function. + */ +typedef struct + { + const q15_t *dctCoefs; /**< Internal DCT coefficients */ + const q15_t *filterCoefs; /**< Internal Mel filter coefficients */ + const q15_t *windowCoefs; /**< Windowing coefficients */ + const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ + const uint32_t *filterLengths; /**< Internal Mel filter lengths */ + uint32_t fftLen; /**< FFT length */ + uint32_t nbMelFilters; /**< Number of Mel filters */ + uint32_t nbDctOutputs; /**< Number of DCT outputs */ +#if defined(ARM_MFCC_CFFT_BASED) + /* Implementation of the MFCC is using a CFFT */ + arm_cfft_instance_q15 cfft; /**< Internal CFFT instance */ +#else + /* Implementation of the MFCC is using a RFFT (default) */ + arm_rfft_instance_q15 rfft; +#endif + } arm_mfcc_instance_q15 ; + +arm_status arm_mfcc_init_32_q15( + arm_mfcc_instance_q15 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q15_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q15_t *filterCoefs, + const q15_t *windowCoefs + ); + +arm_status arm_mfcc_init_64_q15( + arm_mfcc_instance_q15 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q15_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q15_t *filterCoefs, + const q15_t *windowCoefs + ); + +arm_status arm_mfcc_init_128_q15( + arm_mfcc_instance_q15 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q15_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q15_t *filterCoefs, + const q15_t *windowCoefs + ); + +arm_status arm_mfcc_init_256_q15( + arm_mfcc_instance_q15 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q15_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q15_t *filterCoefs, + const q15_t *windowCoefs + ); + +arm_status arm_mfcc_init_512_q15( + arm_mfcc_instance_q15 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q15_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q15_t *filterCoefs, + const q15_t *windowCoefs + ); + +arm_status arm_mfcc_init_1024_q15( + arm_mfcc_instance_q15 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q15_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q15_t *filterCoefs, + const q15_t *windowCoefs + ); + +arm_status arm_mfcc_init_2048_q15( + arm_mfcc_instance_q15 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q15_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q15_t *filterCoefs, + const q15_t *windowCoefs + ); + +arm_status arm_mfcc_init_4096_q15( + arm_mfcc_instance_q15 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q15_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q15_t *filterCoefs, + const q15_t *windowCoefs + ); + +arm_status arm_mfcc_init_q15( + arm_mfcc_instance_q15 * S, + uint32_t fftLen, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const q15_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const q15_t *filterCoefs, + const q15_t *windowCoefs + ); + + +/** + @brief MFCC Q15 + @param[in] S points to the mfcc instance structure + @param[in] pSrc points to the input samples + @param[out] pDst points to the output MFCC values in q8.7 format + @param[inout] pTmp points to a temporary buffer of complex + @return error status + */ + arm_status arm_mfcc_q15( + const arm_mfcc_instance_q15 * S, + q15_t *pSrc, + q15_t *pDst, + q31_t *pTmp + ); + + +#ifdef __cplusplus +} +#endif + +#endif /* ifndef _TRANSFORM_FUNCTIONS_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/transform_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/transform_functions_f16.h new file mode 100755 index 00000000000..b0ca0c0d2de --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/transform_functions_f16.h @@ -0,0 +1,316 @@ +/****************************************************************************** + * @file transform_functions_f16.h + * @brief Public header file for CMSIS DSP Library + * @version V1.10.0 + * @date 08 July 2021 + * Target Processor: Cortex-M and Cortex-A cores + ******************************************************************************/ +/* + * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef TRANSFORM_FUNCTIONS_F16_H_ +#define TRANSFORM_FUNCTIONS_F16_H_ + +#include "arm_math_types_f16.h" +#include "arm_math_memory.h" + +#include "dsp/none.h" +#include "dsp/utils.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + + +#if defined(ARM_FLOAT16_SUPPORTED) + + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + const float16_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float16_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix2_instance_f16; + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + uint8_t ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ + uint8_t bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ + const float16_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ + uint16_t bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ + float16_t onebyfftLen; /**< value of 1/fftLen. */ + } arm_cfft_radix4_instance_f16; + + /** + * @brief Instance structure for the floating-point CFFT/CIFFT function. + */ + typedef struct + { + uint16_t fftLen; /**< length of the FFT. */ + const float16_t *pTwiddle; /**< points to the Twiddle factor table. */ + const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ + uint16_t bitRevLength; /**< bit reversal table length. */ +#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) + const uint32_t *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ \ + const uint32_t *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ \ + const uint32_t *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ \ + const float16_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ \ + const float16_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ \ + const float16_t *rearranged_twiddle_stride3; +#endif + } arm_cfft_instance_f16; + + +arm_status arm_cfft_init_4096_f16(arm_cfft_instance_f16 * S); +arm_status arm_cfft_init_2048_f16(arm_cfft_instance_f16 * S); +arm_status arm_cfft_init_1024_f16(arm_cfft_instance_f16 * S); +arm_status arm_cfft_init_512_f16(arm_cfft_instance_f16 * S); +arm_status arm_cfft_init_256_f16(arm_cfft_instance_f16 * S); +arm_status arm_cfft_init_128_f16(arm_cfft_instance_f16 * S); +arm_status arm_cfft_init_64_f16(arm_cfft_instance_f16 * S); +arm_status arm_cfft_init_32_f16(arm_cfft_instance_f16 * S); +arm_status arm_cfft_init_16_f16(arm_cfft_instance_f16 * S); + + + arm_status arm_cfft_init_f16( + arm_cfft_instance_f16 * S, + uint16_t fftLen); + + void arm_cfft_f16( + const arm_cfft_instance_f16 * S, + float16_t * p1, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + + /** + * @brief Instance structure for the floating-point RFFT/RIFFT function. + */ +typedef struct + { + arm_cfft_instance_f16 Sint; /**< Internal CFFT structure. */ + uint16_t fftLenRFFT; /**< length of the real sequence */ + const float16_t * pTwiddleRFFT; /**< Twiddle factors real stage */ + } arm_rfft_fast_instance_f16 ; + +arm_status arm_rfft_fast_init_32_f16( arm_rfft_fast_instance_f16 * S ); +arm_status arm_rfft_fast_init_64_f16( arm_rfft_fast_instance_f16 * S ); +arm_status arm_rfft_fast_init_128_f16( arm_rfft_fast_instance_f16 * S ); +arm_status arm_rfft_fast_init_256_f16( arm_rfft_fast_instance_f16 * S ); +arm_status arm_rfft_fast_init_512_f16( arm_rfft_fast_instance_f16 * S ); +arm_status arm_rfft_fast_init_1024_f16( arm_rfft_fast_instance_f16 * S ); +arm_status arm_rfft_fast_init_2048_f16( arm_rfft_fast_instance_f16 * S ); +arm_status arm_rfft_fast_init_4096_f16( arm_rfft_fast_instance_f16 * S ); + +arm_status arm_rfft_fast_init_f16 ( + arm_rfft_fast_instance_f16 * S, + uint16_t fftLen); + + + void arm_rfft_fast_f16( + const arm_rfft_fast_instance_f16 * S, + float16_t * p, float16_t * pOut, + uint8_t ifftFlag); + +/* Deprecated */ + arm_status arm_cfft_radix4_init_f16( + arm_cfft_radix4_instance_f16 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix4_f16( + const arm_cfft_radix4_instance_f16 * S, + float16_t * pSrc); + + +/* Deprecated */ + arm_status arm_cfft_radix2_init_f16( + arm_cfft_radix2_instance_f16 * S, + uint16_t fftLen, + uint8_t ifftFlag, + uint8_t bitReverseFlag); + +/* Deprecated */ + void arm_cfft_radix2_f16( + const arm_cfft_radix2_instance_f16 * S, + float16_t * pSrc); + + /** + * @brief Instance structure for the Floating-point MFCC function. + */ +typedef struct + { + const float16_t *dctCoefs; /**< Internal DCT coefficients */ + const float16_t *filterCoefs; /**< Internal Mel filter coefficients */ + const float16_t *windowCoefs; /**< Windowing coefficients */ + const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ + const uint32_t *filterLengths; /**< Internal Mel filter lengths */ + uint32_t fftLen; /**< FFT length */ + uint32_t nbMelFilters; /**< Number of Mel filters */ + uint32_t nbDctOutputs; /**< Number of DCT outputs */ +#if defined(ARM_MFCC_CFFT_BASED) + /* Implementation of the MFCC is using a CFFT */ + arm_cfft_instance_f16 cfft; /**< Internal CFFT instance */ +#else + /* Implementation of the MFCC is using a RFFT (default) */ + arm_rfft_fast_instance_f16 rfft; +#endif + } arm_mfcc_instance_f16 ; + +arm_status arm_mfcc_init_32_f16( + arm_mfcc_instance_f16 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float16_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float16_t *filterCoefs, + const float16_t *windowCoefs + ); + +arm_status arm_mfcc_init_64_f16( + arm_mfcc_instance_f16 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float16_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float16_t *filterCoefs, + const float16_t *windowCoefs + ); + +arm_status arm_mfcc_init_128_f16( + arm_mfcc_instance_f16 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float16_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float16_t *filterCoefs, + const float16_t *windowCoefs + ); + +arm_status arm_mfcc_init_256_f16( + arm_mfcc_instance_f16 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float16_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float16_t *filterCoefs, + const float16_t *windowCoefs + ); + +arm_status arm_mfcc_init_512_f16( + arm_mfcc_instance_f16 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float16_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float16_t *filterCoefs, + const float16_t *windowCoefs + ); + +arm_status arm_mfcc_init_1024_f16( + arm_mfcc_instance_f16 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float16_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float16_t *filterCoefs, + const float16_t *windowCoefs + ); + +arm_status arm_mfcc_init_2048_f16( + arm_mfcc_instance_f16 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float16_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float16_t *filterCoefs, + const float16_t *windowCoefs + ); + +arm_status arm_mfcc_init_4096_f16( + arm_mfcc_instance_f16 * S, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float16_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float16_t *filterCoefs, + const float16_t *windowCoefs + ); + +arm_status arm_mfcc_init_f16( + arm_mfcc_instance_f16 * S, + uint32_t fftLen, + uint32_t nbMelFilters, + uint32_t nbDctOutputs, + const float16_t *dctCoefs, + const uint32_t *filterPos, + const uint32_t *filterLengths, + const float16_t *filterCoefs, + const float16_t *windowCoefs + ); + + + +/** + @brief MFCC F16 + @param[in] S points to the mfcc instance structure + @param[in] pSrc points to the input samples + @param[out] pDst points to the output MFCC values + @param[inout] pTmp points to a temporary buffer of complex + */ + void arm_mfcc_f16( + const arm_mfcc_instance_f16 * S, + float16_t *pSrc, + float16_t *pDst, + float16_t *pTmp + ); + + +#endif /* defined(ARM_FLOAT16_SUPPORTED)*/ + +#ifdef __cplusplus +} +#endif + +#endif /* ifndef _TRANSFORM_FUNCTIONS_F16_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/utils.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/utils.h old mode 100644 new mode 100755 similarity index 56% rename from Libraries/CMSIS/5.9.0/DSP/Include/dsp/utils.h rename to Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/utils.h index d6e35356250..e0c5c90c17c --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/utils.h +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/utils.h @@ -22,40 +22,62 @@ * limitations under the License. */ -#ifndef _ARM_MATH_UTILS_H_ +#ifndef ARM_MATH_UTILS_H_ -#define _ARM_MATH_UTILS_H_ +#define ARM_MATH_UTILS_H_ #include "arm_math_types.h" +#include -#ifdef __cplusplus -extern "C" { +#ifdef __cplusplus +extern "C" +{ #endif -/** + /** * @brief Macros required for reciprocal calculation in Normalized LMS */ -#define INDEX_MASK 0x0000003F +#define INDEX_MASK 0x0000003F -#define SQ(x) ((x) * (x)) +#ifndef MIN + #define MIN(x,y) ((x) < (y) ? (x) : (y)) +#endif -#define ROUND_UP(N, S) ((((N) + (S)-1) / (S)) * (S)) +#ifndef MAX + #define MAX(x,y) ((x) > (y) ? (x) : (y)) +#endif -/** +#ifndef ARM_SQ +#define ARM_SQ(x) ((x) * (x)) +#endif + +#ifndef ARM_ROUND_UP + #define ARM_ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S)) +#endif + + + /** * @brief Function to Calculates 1/in (reciprocal) value of Q31 Data type. + It should not be used with negative values. */ -__STATIC_FORCEINLINE uint32_t arm_recip_q31(q31_t in, q31_t *dst, const q31_t *pRecipTable) -{ + __STATIC_FORCEINLINE uint32_t arm_recip_q31( + q31_t in, + q31_t * dst, + const q31_t * pRecipTable) + { q31_t out; uint32_t tempVal; uint32_t index, i; uint32_t signBits; - if (in > 0) { - signBits = ((uint32_t)(__CLZ(in) - 1)); - } else { - signBits = ((uint32_t)(__CLZ(-in) - 1)); + if (in > 0) + { + signBits = ((uint32_t) (__CLZ( (uint32_t)in) - 1)); + } + else + { + signBits = ((uint32_t) (__CLZ((uint32_t)(-in)) - 1)); } /* Convert input sample to 1.31 format */ @@ -70,12 +92,13 @@ __STATIC_FORCEINLINE uint32_t arm_recip_q31(q31_t in, q31_t *dst, const q31_t *p /* calculation of reciprocal value */ /* running approximation for two iterations */ - for (i = 0U; i < 2U; i++) { - tempVal = (uint32_t)(((q63_t)in * out) >> 31); - tempVal = 0x7FFFFFFFu - tempVal; - /* 1.31 with exp 1 */ - /* out = (q31_t) (((q63_t) out * tempVal) >> 30); */ - out = clip_q63_to_q31(((q63_t)out * tempVal) >> 30); + for (i = 0U; i < 2U; i++) + { + tempVal = (uint32_t) (((q63_t) in * out) >> 31); + tempVal = 0x7FFFFFFFu - tempVal; + /* 1.31 with exp 1 */ + /* out = (q31_t) (((q63_t) out * tempVal) >> 30); */ + out = clip_q63_to_q31(((q63_t) out * tempVal) >> 30); } /* write output */ @@ -83,29 +106,37 @@ __STATIC_FORCEINLINE uint32_t arm_recip_q31(q31_t in, q31_t *dst, const q31_t *p /* return num of signbits of out = 1/in value */ return (signBits + 1U); -} + } -/** + + /** * @brief Function to Calculates 1/in (reciprocal) value of Q15 Data type. + It should not be used with negative values. */ -__STATIC_FORCEINLINE uint32_t arm_recip_q15(q15_t in, q15_t *dst, const q15_t *pRecipTable) -{ + __STATIC_FORCEINLINE uint32_t arm_recip_q15( + q15_t in, + q15_t * dst, + const q15_t * pRecipTable) + { q15_t out = 0; - uint32_t tempVal = 0; + int32_t tempVal = 0; uint32_t index = 0, i = 0; uint32_t signBits = 0; - if (in > 0) { - signBits = ((uint32_t)(__CLZ(in) - 17)); - } else { - signBits = ((uint32_t)(__CLZ(-in) - 17)); + if (in > 0) + { + signBits = ((uint32_t)(__CLZ( (uint32_t)in) - 17)); + } + else + { + signBits = ((uint32_t)(__CLZ((uint32_t)(-in)) - 17)); } /* Convert input sample to 1.15 format */ - in = (in << signBits); + in = (q15_t)(in << signBits); /* calculation of index for initial approximated Val */ - index = (uint32_t)(in >> 8); + index = (uint32_t)(in >> 8); index = (index & INDEX_MASK); /* 1.15 with exp 1 */ @@ -113,12 +144,13 @@ __STATIC_FORCEINLINE uint32_t arm_recip_q15(q15_t in, q15_t *dst, const q15_t *p /* calculation of reciprocal value */ /* running approximation for two iterations */ - for (i = 0U; i < 2U; i++) { - tempVal = (uint32_t)(((q31_t)in * out) >> 15); - tempVal = 0x7FFFu - tempVal; - /* 1.15 with exp 1 */ - out = (q15_t)(((q31_t)out * tempVal) >> 14); - /* out = clip_q31_to_q15(((q31_t) out * tempVal) >> 14); */ + for (i = 0U; i < 2U; i++) + { + tempVal = (((q31_t) in * out) >> 15); + tempVal = 0x7FFF - tempVal; + /* 1.15 with exp 1 */ + out = (q15_t) (((q31_t) out * tempVal) >> 14); + /* out = clip_q31_to_q15(((q31_t) out * tempVal) >> 14); */ } /* write output */ @@ -126,7 +158,8 @@ __STATIC_FORCEINLINE uint32_t arm_recip_q15(q15_t in, q15_t *dst, const q15_t *p /* return num of signbits of out = 1/in value */ return (signBits + 1); -} + } + /** * @brief 64-bit to 32-bit unsigned normalization @@ -134,32 +167,37 @@ __STATIC_FORCEINLINE uint32_t arm_recip_q15(q15_t in, q15_t *dst, const q15_t *p * @param[out] normalized is the 32-bit normalized value * @param[out] norm is norm scale */ -__STATIC_INLINE void arm_norm_64_to_32u(uint64_t in, int32_t *normalized, int32_t *norm) +__STATIC_INLINE void arm_norm_64_to_32u(uint64_t in, int32_t * normalized, int32_t *norm) { - int32_t n1; - int32_t hi = (int32_t)(in >> 32); - int32_t lo = (int32_t)((in << 32) >> 32); + int32_t n1; + int32_t hi = (int32_t) (in >> 32); + int32_t lo = (int32_t) ((in << 32) >> 32); - n1 = __CLZ(hi) - 32; - if (!n1) { + n1 = __CLZ((uint32_t)hi) - 32; + if (!n1) + { /* * input fits in 32-bit */ - n1 = __CLZ(lo); - if (!n1) { + n1 = __CLZ((uint32_t)lo); + if (!n1) + { /* * MSB set, need to scale down by 1 */ *norm = -1; - *normalized = (((uint32_t)lo) >> 1); - } else { - if (n1 == 32) { + *normalized = (((uint32_t) lo) >> 1); + } else + { + if (n1 == 32) + { /* * input is zero */ *norm = 0; *normalized = 0; - } else { + } else + { /* * 32-bit normalization */ @@ -167,7 +205,8 @@ __STATIC_INLINE void arm_norm_64_to_32u(uint64_t in, int32_t *normalized, int32_ *normalized = lo << *norm; } } - } else { + } else + { /* * input fits in 64-bit */ @@ -176,38 +215,47 @@ __STATIC_INLINE void arm_norm_64_to_32u(uint64_t in, int32_t *normalized, int32_ /* * 64 bit normalization */ - *normalized = (((uint32_t)lo) >> n1) | (hi << (32 - n1)); + *normalized = (int32_t)(((uint32_t)lo) >> n1) | (hi << (32 - n1)); } } -__STATIC_INLINE q31_t arm_div_q63_to_q31(q63_t num, q31_t den) +__STATIC_INLINE int32_t arm_div_int64_to_int32(int64_t num, int32_t den) { - q31_t result; - uint64_t absNum; - int32_t normalized; - int32_t norm; + int32_t result; + uint64_t absNum; + int32_t normalized; + int32_t norm; /* * if sum fits in 32bits * avoid costly 64-bit division */ - absNum = num > 0 ? num : -num; + if (num == (int64_t)LONG_MIN) + { + absNum = LONG_MAX; + } + else + { + absNum = (uint64_t) (num > 0 ? num : -num); + } arm_norm_64_to_32u(absNum, &normalized, &norm); if (norm > 0) /* * 32-bit division */ - result = (q31_t)num / den; + result = (int32_t) num / den; else /* * 64-bit division */ - result = (q31_t)(num / den); + result = (int32_t) (num / den); return result; } -#ifdef __cplusplus +#undef INDEX_MASK + +#ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/window_functions.h b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/window_functions.h new file mode 100644 index 00000000000..27f05a73964 --- /dev/null +++ b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Include/dsp/window_functions.h @@ -0,0 +1,812 @@ +/****************************************************************************** + * @file window_functions.h + * @brief Public header file for CMSIS DSP Library + * @version v1.15.0 + * @date 15 December 2022 + * Target Processor: Cortex-M and Cortex-A cores + ******************************************************************************/ +/* + * Copyright (c) 2010-2022 Arm Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef WINDOW_FUNCTIONS_H_ +#define WINDOW_FUNCTIONS_H_ + +#include "arm_math_types.h" +#include "arm_math_memory.h" + +#include "dsp/none.h" +#include "dsp/utils.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** + * @defgroup groupWindow Window Functions + */ + + /** + * @brief Welch window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 21.3 dB | + * | Normalized equivalent noise bandwidth | 1.2 bins | + * | Flatness | -2.2248 dB | + * | Recommended overlap | 29.3 % | + * + */ + void arm_welch_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Welch window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 21.3 dB | + * | Normalized equivalent noise bandwidth | 1.2 bins | + * | Flatness | -2.2248 dB | + * | Recommended overlap | 29.3 % | + * + * + */ + void arm_welch_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Bartlett window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 26.5 dB | + * | Normalized equivalent noise bandwidth | 1.3333 bins | + * | Flatness | -1.8242 dB | + * | Recommended overlap | 50.0 % | + * + */ + void arm_bartlett_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Bartlett window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 26.5 dB | + * | Normalized equivalent noise bandwidth | 1.3333 bins | + * | Flatness | -1.8242 dB | + * | Recommended overlap | 50.0 % | + * + * + */ + void arm_bartlett_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Hamming window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 42.7 dB | + * | Normalized equivalent noise bandwidth | 1.3628 bins | + * | Flatness | -1.7514 dB | + * | Recommended overlap | 50 % | + * + */ + void arm_hamming_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Hamming window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 42.7 dB | + * | Normalized equivalent noise bandwidth | 1.3628 bins | + * | Flatness | -1.7514 dB | + * | Recommended overlap | 50 % | + * + * + */ + void arm_hamming_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Hanning window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 31.5 dB | + * | Normalized equivalent noise bandwidth | 1.5 bins | + * | Flatness | -1.4236 dB | + * | Recommended overlap | 50 % | + * + */ + void arm_hanning_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Hanning window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 31.5 dB | + * | Normalized equivalent noise bandwidth | 1.5 bins | + * | Flatness | -1.4236 dB | + * | Recommended overlap | 50 % | + * + * + */ + void arm_hanning_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Nuttall3 window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 46.7 dB | + * | Normalized equivalent noise bandwidth | 1.9444 bins | + * | Flatness | -0.863 dB | + * | Recommended overlap | 64.7 % | + * + */ + void arm_nuttall3_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Nuttall3 window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 46.7 dB | + * | Normalized equivalent noise bandwidth | 1.9444 bins | + * | Flatness | -0.863 dB | + * | Recommended overlap | 64.7 % | + * + * + */ + void arm_nuttall3_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Nuttall4 window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 60.9 dB | + * | Normalized equivalent noise bandwidth | 2.31 bins | + * | Flatness | -0.6184 dB | + * | Recommended overlap | 70.5 % | + * + */ + void arm_nuttall4_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Nuttall4 window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 60.9 dB | + * | Normalized equivalent noise bandwidth | 2.31 bins | + * | Flatness | -0.6184 dB | + * | Recommended overlap | 70.5 % | + * + * + */ + void arm_nuttall4_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Nuttall3a window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 64.2 dB | + * | Normalized equivalent noise bandwidth | 1.7721 bins | + * | Flatness | -1.0453 dB | + * | Recommended overlap | 61.2 % | + * + */ + void arm_nuttall3a_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Nuttall3a window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 64.2 dB | + * | Normalized equivalent noise bandwidth | 1.7721 bins | + * | Flatness | -1.0453 dB | + * | Recommended overlap | 61.2 % | + * + * + */ + void arm_nuttall3a_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Nuttall3b window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 71.5 dB | + * | Normalized equivalent noise bandwidth | 1.7037 bins | + * | Flatness | -1.1352 dB | + * | Recommended overlap | 59.8 % | + * + */ + void arm_nuttall3b_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Nuttall3b window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 71.5 dB | + * | Normalized equivalent noise bandwidth | 1.7037 bins | + * | Flatness | -1.1352 dB | + * | Recommended overlap | 59.8 % | + * + * + */ + void arm_nuttall3b_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Nuttall4a window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 82.6 dB | + * | Normalized equivalent noise bandwidth | 2.1253 bins | + * | Flatness | -0.7321 dB | + * | Recommended overlap | 68.0 % | + * + */ + void arm_nuttall4a_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Nuttall4a window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 82.6 dB | + * | Normalized equivalent noise bandwidth | 2.1253 bins | + * | Flatness | -0.7321 dB | + * | Recommended overlap | 68.0 % | + * + * + */ + void arm_nuttall4a_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief 92 db blackman harris window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 92.0 dB | + * | Normalized equivalent noise bandwidth | 2.0044 bins | + * | Flatness | -0.8256 dB | + * | Recommended overlap | 66.1 % | + * + */ + void arm_blackman_harris_92db_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief 92 db blackman harris window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 92.0 dB | + * | Normalized equivalent noise bandwidth | 2.0044 bins | + * | Flatness | -0.8256 dB | + * | Recommended overlap | 66.1 % | + * + * + */ + void arm_blackman_harris_92db_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Nuttall4b window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 93.3 dB | + * | Normalized equivalent noise bandwidth | 2.0212 bins | + * | Flatness | -0.8118 dB | + * | Recommended overlap | 66.3 % | + * + */ + void arm_nuttall4b_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Nuttall4b window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 93.3 dB | + * | Normalized equivalent noise bandwidth | 2.0212 bins | + * | Flatness | -0.8118 dB | + * | Recommended overlap | 66.3 % | + * + * + */ + void arm_nuttall4b_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Nuttall4c window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 98.1 dB | + * | Normalized equivalent noise bandwidth | 1.9761 bins | + * | Flatness | -0.8506 dB | + * | Recommended overlap | 65.6 % | + * + */ + void arm_nuttall4c_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Nuttall4c window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 98.1 dB | + * | Normalized equivalent noise bandwidth | 1.9761 bins | + * | Flatness | -0.8506 dB | + * | Recommended overlap | 65.6 % | + * + * + */ + void arm_nuttall4c_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Hft90d window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 90.2 dB | + * | Normalized equivalent noise bandwidth | 3.8832 bins | + * | Flatness | -0.0039 dB | + * | Recommended overlap | 76.0 % | + * + */ + void arm_hft90d_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Hft90d window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 90.2 dB | + * | Normalized equivalent noise bandwidth | 3.8832 bins | + * | Flatness | -0.0039 dB | + * | Recommended overlap | 76.0 % | + * + * + */ + void arm_hft90d_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Hft95 window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 95.0 dB | + * | Normalized equivalent noise bandwidth | 3.8112 bins | + * | Flatness | 0.0044 dB | + * | Recommended overlap | 75.6 % | + * + */ + void arm_hft95_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Hft95 window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 95.0 dB | + * | Normalized equivalent noise bandwidth | 3.8112 bins | + * | Flatness | 0.0044 dB | + * | Recommended overlap | 75.6 % | + * + * + */ + void arm_hft95_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Hft116d window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 116.8 dB | + * | Normalized equivalent noise bandwidth | 4.2186 bins | + * | Flatness | -0.0028 dB | + * | Recommended overlap | 78.2 % | + * + */ + void arm_hft116d_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Hft116d window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 116.8 dB | + * | Normalized equivalent noise bandwidth | 4.2186 bins | + * | Flatness | -0.0028 dB | + * | Recommended overlap | 78.2 % | + * + * + */ + void arm_hft116d_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Hft144d window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 144.1 dB | + * | Normalized equivalent noise bandwidth | 4.5386 bins | + * | Flatness | 0.0021 dB | + * | Recommended overlap | 79.9 % | + * + */ + void arm_hft144d_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Hft144d window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 144.1 dB | + * | Normalized equivalent noise bandwidth | 4.5386 bins | + * | Flatness | 0.0021 dB | + * | Recommended overlap | 79.9 % | + * + * + */ + void arm_hft144d_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Hft169d window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 169.5 dB | + * | Normalized equivalent noise bandwidth | 4.8347 bins | + * | Flatness | 0.0017 dB | + * | Recommended overlap | 81.2 % | + * + */ + void arm_hft169d_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Hft169d window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 169.5 dB | + * | Normalized equivalent noise bandwidth | 4.8347 bins | + * | Flatness | 0.0017 dB | + * | Recommended overlap | 81.2 % | + * + * + */ + void arm_hft169d_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Hft196d window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 196.2 dB | + * | Normalized equivalent noise bandwidth | 5.1134 bins | + * | Flatness | 0.0013 dB | + * | Recommended overlap | 82.3 % | + * + */ + void arm_hft196d_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Hft196d window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 196.2 dB | + * | Normalized equivalent noise bandwidth | 5.1134 bins | + * | Flatness | 0.0013 dB | + * | Recommended overlap | 82.3 % | + * + * + */ + void arm_hft196d_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Hft223d window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 223.0 dB | + * | Normalized equivalent noise bandwidth | 5.3888 bins | + * | Flatness | 0.0011 dB | + * | Recommended overlap | 83.3 % | + * + */ + void arm_hft223d_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Hft223d window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 223.0 dB | + * | Normalized equivalent noise bandwidth | 5.3888 bins | + * | Flatness | 0.0011 dB | + * | Recommended overlap | 83.3 % | + * + * + */ + void arm_hft223d_f32( + float32_t * pDst, + uint32_t blockSize); + /** + * @brief Hft248d window (double). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 248.4 dB | + * | Normalized equivalent noise bandwidth | 5.6512 bins | + * | Flatness | 0.0009 dB | + * | Recommended overlap | 84.1 % | + * + */ + void arm_hft248d_f64( + float64_t * pDst, + uint32_t blockSize); + + /** + * @brief Hft248d window (float). + * @param[out] pDst points to the output generated window + * @param[in] blockSize number of samples in the window + * + * @par Parameters of the window + * + * | Parameter | Value | + * | ------------------------------------: | -----------------: | + * | Peak sidelobe level | 248.4 dB | + * | Normalized equivalent noise bandwidth | 5.6512 bins | + * | Flatness | 0.0009 dB | + * | Recommended overlap | 84.1 % | + * + * + */ + void arm_hft248d_f32( + float32_t * pDst, + uint32_t blockSize); + + +#ifdef __cplusplus +} +#endif + +#endif /* ifndef _BASIC_MATH_FUNCTIONS_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Lib/libarm_cortexM4l_math.a b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Lib/libarm_cortexM4l_math.a new file mode 100644 index 00000000000..04ec56d0f75 Binary files /dev/null and b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Lib/libarm_cortexM4l_math.a differ diff --git a/Libraries/CMSIS/5.9.0/DSP/1.16.2/Lib/libarm_cortexM4lf_math.a b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Lib/libarm_cortexM4lf_math.a new file mode 100644 index 00000000000..ef65b59511b Binary files /dev/null and b/Libraries/CMSIS/5.9.0/DSP/1.16.2/Lib/libarm_cortexM4lf_math.a differ diff --git a/Libraries/CMSIS/5.9.0/DSP/CMSIS-DSP.mk b/Libraries/CMSIS/5.9.0/DSP/CMSIS-DSP.mk index 7121c0873de..5e039a17eb5 100644 --- a/Libraries/CMSIS/5.9.0/DSP/CMSIS-DSP.mk +++ b/Libraries/CMSIS/5.9.0/DSP/CMSIS-DSP.mk @@ -1,12 +1,41 @@ +############################################################################## + # + # Copyright 2023-2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## # Makefile for linking against the CMSIS-DSP library. ifeq "$(CMSIS_ROOT)" "" CMSIS_ROOT=../../ endif +ifeq "$(CMSIS_DSP_DIR)" "" +# If PERIPH_DRIVER_DIR is not specified, this Makefile will locate itself. +CMSIS_DSP_DIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST)))) +endif + +CMSIS_DSP_VERSION ?= 1.16.2 +ifeq ("$(wildcard $(CMSIS_DSP_DIR)/$(CMSIS_DSP_VERSION))","") +$(error Unsupported CMSIS-DSP version '$(CMSIS_DSP_VERSION)'. Searched $(CMSIS_DSP_DIR)) +endif + +$(info Enabled CMSIS-DSP v$(CMSIS_DSP_VERSION)) + # Include paths... # DSP files -IPATH += $(CMSIS_ROOT)/5.9.0/DSP/Include +IPATH += $(CMSIS_DSP_DIR)/$(CMSIS_DSP_VERSION)/Include # Some newer CMSIS5 core include files, such as cmsis_compiler.h, etc. IPATH += $(CMSIS_ROOT)/5.9.0/Core/Include @@ -18,7 +47,7 @@ PROJ_CFLAGS+=-DARM_MATH_CM4 PROJ_CFLAGS+=-D__FPU_PRESENT # Where to find the DSP library file -PROJ_LDFLAGS += -L$(CMSIS_ROOT)/5.9.0/DSP/Lib +PROJ_LDFLAGS += -L$(CMSIS_DSP_DIR)/$(CMSIS_DSP_VERSION)/Lib ifeq "$(MFLOAT_ABI)" "" $(warning ***The 'MFLOAT_ABI' Makefile variable is not set!*** Using softfp CMSIS-DSP instructions by default.) diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_common_tables.h b/Libraries/CMSIS/5.9.0/DSP/Include/arm_common_tables.h deleted file mode 100644 index 44b19ca71a1..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_common_tables.h +++ /dev/null @@ -1,630 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_common_tables.h - * Description: Extern declaration for common tables - * - * @version V1.10.0 - * @date 08 July 2021 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_COMMON_TABLES_H -#define _ARM_COMMON_TABLES_H - -#include "arm_math_types.h" -#include "dsp/fast_math_functions.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) -/* Double Precision Float CFFT twiddles */ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || defined(ARM_TABLE_BITREV_1024) -extern const uint16_t armBitRevTable[1024]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F64_16) -extern const uint64_t twiddleCoefF64_16[32]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F64_32) -extern const uint64_t twiddleCoefF64_32[64]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F64_64) -extern const uint64_t twiddleCoefF64_64[128]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F64_128) -extern const uint64_t twiddleCoefF64_128[256]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F64_256) -extern const uint64_t twiddleCoefF64_256[512]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F64_512) -extern const uint64_t twiddleCoefF64_512[1024]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F64_1024) -extern const uint64_t twiddleCoefF64_1024[2048]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F64_2048) -extern const uint64_t twiddleCoefF64_2048[4096]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F64_4096) -extern const uint64_t twiddleCoefF64_4096[8192]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_16) -extern const float32_t twiddleCoef_16[32]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_32) -extern const float32_t twiddleCoef_32[64]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_64) -extern const float32_t twiddleCoef_64[128]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_128) -extern const float32_t twiddleCoef_128[256]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_256) -extern const float32_t twiddleCoef_256[512]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_512) -extern const float32_t twiddleCoef_512[1024]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_1024) -extern const float32_t twiddleCoef_1024[2048]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_2048) -extern const float32_t twiddleCoef_2048[4096]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_4096) -extern const float32_t twiddleCoef_4096[8192]; -#define twiddleCoef twiddleCoef_4096 -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -/* Q31 */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_16) -extern const q31_t twiddleCoef_16_q31[24]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_32) -extern const q31_t twiddleCoef_32_q31[48]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_64) -extern const q31_t twiddleCoef_64_q31[96]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_128) -extern const q31_t twiddleCoef_128_q31[192]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_256) -extern const q31_t twiddleCoef_256_q31[384]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_512) -extern const q31_t twiddleCoef_512_q31[768]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) -extern const q31_t twiddleCoef_1024_q31[1536]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) -extern const q31_t twiddleCoef_2048_q31[3072]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) -extern const q31_t twiddleCoef_4096_q31[6144]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_16) -extern const q15_t twiddleCoef_16_q15[24]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_32) -extern const q15_t twiddleCoef_32_q15[48]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_64) -extern const q15_t twiddleCoef_64_q15[96]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_128) -extern const q15_t twiddleCoef_128_q15[192]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_256) -extern const q15_t twiddleCoef_256_q15[384]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_512) -extern const q15_t twiddleCoef_512_q15[768]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) -extern const q15_t twiddleCoef_1024_q15[1536]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) -extern const q15_t twiddleCoef_2048_q15[3072]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) -extern const q15_t twiddleCoef_4096_q15[6144]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -/* Double Precision Float RFFT twiddles */ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_32) -extern const uint64_t twiddleCoefF64_rfft_32[32]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_64) -extern const uint64_t twiddleCoefF64_rfft_64[64]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_128) -extern const uint64_t twiddleCoefF64_rfft_128[128]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_256) -extern const uint64_t twiddleCoefF64_rfft_256[256]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_512) -extern const uint64_t twiddleCoefF64_rfft_512[512]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_1024) -extern const uint64_t twiddleCoefF64_rfft_1024[1024]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_2048) -extern const uint64_t twiddleCoefF64_rfft_2048[2048]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F64_4096) -extern const uint64_t twiddleCoefF64_rfft_4096[4096]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_32) -extern const float32_t twiddleCoef_rfft_32[32]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_64) -extern const float32_t twiddleCoef_rfft_64[64]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_128) -extern const float32_t twiddleCoef_rfft_128[128]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_256) -extern const float32_t twiddleCoef_rfft_256[256]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_512) -extern const float32_t twiddleCoef_rfft_512[512]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_1024) -extern const float32_t twiddleCoef_rfft_1024[1024]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_2048) -extern const float32_t twiddleCoef_rfft_2048[2048]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F32_4096) -extern const float32_t twiddleCoef_rfft_4096[4096]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -/* Double precision floating-point bit reversal tables */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT64_16) -#define ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH ((uint16_t)12) -extern const uint16_t armBitRevIndexTableF64_16[ARMBITREVINDEXTABLEF64_16_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT64_32) -#define ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH ((uint16_t)24) -extern const uint16_t armBitRevIndexTableF64_32[ARMBITREVINDEXTABLEF64_32_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT64_64) -#define ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH ((uint16_t)56) -extern const uint16_t armBitRevIndexTableF64_64[ARMBITREVINDEXTABLEF64_64_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT64_128) -#define ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH ((uint16_t)112) -extern const uint16_t armBitRevIndexTableF64_128[ARMBITREVINDEXTABLEF64_128_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT64_256) -#define ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH ((uint16_t)240) -extern const uint16_t armBitRevIndexTableF64_256[ARMBITREVINDEXTABLEF64_256_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT64_512) -#define ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH ((uint16_t)480) -extern const uint16_t armBitRevIndexTableF64_512[ARMBITREVINDEXTABLEF64_512_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT64_1024) -#define ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH ((uint16_t)992) -extern const uint16_t armBitRevIndexTableF64_1024[ARMBITREVINDEXTABLEF64_1024_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT64_2048) -#define ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH ((uint16_t)1984) -extern const uint16_t armBitRevIndexTableF64_2048[ARMBITREVINDEXTABLEF64_2048_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT64_4096) -#define ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH ((uint16_t)4032) -extern const uint16_t armBitRevIndexTableF64_4096[ARMBITREVINDEXTABLEF64_4096_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ -/* floating-point bit reversal tables */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT_16) -#define ARMBITREVINDEXTABLE_16_TABLE_LENGTH ((uint16_t)20) -extern const uint16_t armBitRevIndexTable16[ARMBITREVINDEXTABLE_16_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT_32) -#define ARMBITREVINDEXTABLE_32_TABLE_LENGTH ((uint16_t)48) -extern const uint16_t armBitRevIndexTable32[ARMBITREVINDEXTABLE_32_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT_64) -#define ARMBITREVINDEXTABLE_64_TABLE_LENGTH ((uint16_t)56) -extern const uint16_t armBitRevIndexTable64[ARMBITREVINDEXTABLE_64_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT_128) -#define ARMBITREVINDEXTABLE_128_TABLE_LENGTH ((uint16_t)208) -extern const uint16_t armBitRevIndexTable128[ARMBITREVINDEXTABLE_128_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT_256) -#define ARMBITREVINDEXTABLE_256_TABLE_LENGTH ((uint16_t)440) -extern const uint16_t armBitRevIndexTable256[ARMBITREVINDEXTABLE_256_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT_512) -#define ARMBITREVINDEXTABLE_512_TABLE_LENGTH ((uint16_t)448) -extern const uint16_t armBitRevIndexTable512[ARMBITREVINDEXTABLE_512_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT_1024) -#define ARMBITREVINDEXTABLE_1024_TABLE_LENGTH ((uint16_t)1800) -extern const uint16_t armBitRevIndexTable1024[ARMBITREVINDEXTABLE_1024_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT_2048) -#define ARMBITREVINDEXTABLE_2048_TABLE_LENGTH ((uint16_t)3808) -extern const uint16_t armBitRevIndexTable2048[ARMBITREVINDEXTABLE_2048_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FLT_4096) -#define ARMBITREVINDEXTABLE_4096_TABLE_LENGTH ((uint16_t)4032) -extern const uint16_t armBitRevIndexTable4096[ARMBITREVINDEXTABLE_4096_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -/* fixed-point bit reversal tables */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FXT_16) -#define ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH ((uint16_t)12) -extern const uint16_t armBitRevIndexTable_fixed_16[ARMBITREVINDEXTABLE_FIXED_16_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FXT_32) -#define ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH ((uint16_t)24) -extern const uint16_t armBitRevIndexTable_fixed_32[ARMBITREVINDEXTABLE_FIXED_32_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FXT_64) -#define ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH ((uint16_t)56) -extern const uint16_t armBitRevIndexTable_fixed_64[ARMBITREVINDEXTABLE_FIXED_64_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FXT_128) -#define ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH ((uint16_t)112) -extern const uint16_t armBitRevIndexTable_fixed_128[ARMBITREVINDEXTABLE_FIXED_128_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FXT_256) -#define ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH ((uint16_t)240) -extern const uint16_t armBitRevIndexTable_fixed_256[ARMBITREVINDEXTABLE_FIXED_256_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FXT_512) -#define ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH ((uint16_t)480) -extern const uint16_t armBitRevIndexTable_fixed_512[ARMBITREVINDEXTABLE_FIXED_512_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FXT_1024) -#define ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH ((uint16_t)992) -extern const uint16_t armBitRevIndexTable_fixed_1024[ARMBITREVINDEXTABLE_FIXED_1024_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FXT_2048) -#define ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH ((uint16_t)1984) -extern const uint16_t armBitRevIndexTable_fixed_2048[ARMBITREVINDEXTABLE_FIXED_2048_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_BITREVIDX_FXT_4096) -#define ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH ((uint16_t)4032) -extern const uint16_t armBitRevIndexTable_fixed_4096[ARMBITREVINDEXTABLE_FIXED_4096_TABLE_LENGTH]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_REALCOEF_F32) -extern const float32_t realCoefA[8192]; -extern const float32_t realCoefB[8192]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_REALCOEF_Q31) -extern const q31_t realCoefAQ31[8192]; -extern const q31_t realCoefBQ31[8192]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_REALCOEF_Q15) -extern const q15_t realCoefAQ15[8192]; -extern const q15_t realCoefBQ15[8192]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_F32_128) -extern const float32_t Weights_128[256]; -extern const float32_t cos_factors_128[128]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_F32_512) -extern const float32_t Weights_512[1024]; -extern const float32_t cos_factors_512[512]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_F32_2048) -extern const float32_t Weights_2048[4096]; -extern const float32_t cos_factors_2048[2048]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_F32_8192) -extern const float32_t Weights_8192[16384]; -extern const float32_t cos_factors_8192[8192]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_Q15_128) -extern const q15_t WeightsQ15_128[256]; -extern const q15_t cos_factorsQ15_128[128]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_Q15_512) -extern const q15_t WeightsQ15_512[1024]; -extern const q15_t cos_factorsQ15_512[512]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_Q15_2048) -extern const q15_t WeightsQ15_2048[4096]; -extern const q15_t cos_factorsQ15_2048[2048]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_Q15_8192) -extern const q15_t WeightsQ15_8192[16384]; -extern const q15_t cos_factorsQ15_8192[8192]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_Q31_128) -extern const q31_t WeightsQ31_128[256]; -extern const q31_t cos_factorsQ31_128[128]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_Q31_512) -extern const q31_t WeightsQ31_512[1024]; -extern const q31_t cos_factorsQ31_512[512]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_Q31_2048) -extern const q31_t WeightsQ31_2048[4096]; -extern const q31_t cos_factorsQ31_2048[2048]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_DCT4_Q31_8192) -extern const q31_t WeightsQ31_8192[16384]; -extern const q31_t cos_factorsQ31_8192[8192]; -#endif - -#endif /* if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FAST_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_RECIP_Q15) -extern const q15_t armRecipTableQ15[64]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_RECIP_Q31) -extern const q31_t armRecipTableQ31[64]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - -/* Tables for Fast Math Sine and Cosine */ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_F32) -extern const float32_t sinTable_f32[FAST_MATH_TABLE_SIZE + 1]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_Q31) -extern const q31_t sinTable_q31[FAST_MATH_TABLE_SIZE + 1]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SIN_Q15) -extern const q15_t sinTable_q15[FAST_MATH_TABLE_SIZE + 1]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ - -/* Fast vector sqrt */ -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || \ - defined(ARM_TABLE_FAST_SQRT_Q31_MVE) -extern const q31_t sqrtTable_Q31[256]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ -#endif - -/* Accurate scalar sqrt */ -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SQRT_Q31) -extern const q31_t sqrt_initial_lut_q31[32]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || defined(ARM_TABLE_SQRT_Q15) -extern const q15_t sqrt_initial_lut_q15[16]; -#endif - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FAST_TABLES) || \ - defined(ARM_TABLE_FAST_SQRT_Q15_MVE) -extern const q15_t sqrtTable_Q15[256]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) defined(ARM_ALL_FAST_TABLES) */ -#endif - -#endif /* if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FAST_TABLES) */ - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) -extern const float32_t exp_tab[8]; -extern const float32_t __logf_lut_f32[8]; -#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -#if (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) -extern const unsigned char hwLUT[256]; -#endif /* (defined(ARM_MATH_MVEI) || defined(ARM_MATH_HELIUM)) */ - -#ifdef __cplusplus -} -#endif - -#endif /* ARM_COMMON_TABLES_H */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_common_tables_f16.h b/Libraries/CMSIS/5.9.0/DSP/Include/arm_common_tables_f16.h deleted file mode 100644 index 7755fd4a3a1..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_common_tables_f16.h +++ /dev/null @@ -1,144 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_common_tables_f16.h - * Description: Extern declaration for common tables - * - * @version V1.10.0 - * @date 08 July 2021 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_COMMON_TABLES_F16_H -#define _ARM_COMMON_TABLES_F16_H - -#include "arm_math_types_f16.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -/* F16 */ -#if !defined(__CC_ARM) && defined(ARM_FLOAT16_SUPPORTED) -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_16) -extern const float16_t twiddleCoefF16_16[32]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_32) -extern const float16_t twiddleCoefF16_32[64]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_64) -extern const float16_t twiddleCoefF16_64[128]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_128) -extern const float16_t twiddleCoefF16_128[256]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_256) -extern const float16_t twiddleCoefF16_256[512]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_512) -extern const float16_t twiddleCoefF16_512[1024]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_1024) -extern const float16_t twiddleCoefF16_1024[2048]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_2048) -extern const float16_t twiddleCoefF16_2048[4096]; -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_4096) -extern const float16_t twiddleCoefF16_4096[8192]; -#define twiddleCoefF16 twiddleCoefF16_4096 -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) */ - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F16_32) -extern const float16_t twiddleCoefF16_rfft_32[32]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F16_64) -extern const float16_t twiddleCoefF16_rfft_64[64]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F16_128) -extern const float16_t twiddleCoefF16_rfft_128[128]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F16_256) -extern const float16_t twiddleCoefF16_rfft_256[256]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F16_512) -extern const float16_t twiddleCoefF16_rfft_512[512]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F16_1024) -extern const float16_t twiddleCoefF16_rfft_1024[1024]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F16_2048) -extern const float16_t twiddleCoefF16_rfft_2048[2048]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_RFFT_F16_4096) -extern const float16_t twiddleCoefF16_rfft_4096[4096]; -#endif - -#endif /* ARMAC5 */ - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#if !defined(__CC_ARM) && defined(ARM_FLOAT16_SUPPORTED) - -#if (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) -extern const float16_t exp_tab_f16[8]; -extern const float16_t __logf_lut_f16[8]; -#endif /* (defined(ARM_MATH_MVEF) || defined(ARM_MATH_HELIUM)) && !defined(ARM_MATH_AUTOVECTORIZE) */ -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* _ARM_COMMON_TABLES_F16_H */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_const_structs.h b/Libraries/CMSIS/5.9.0/DSP/Include/arm_const_structs.h deleted file mode 100644 index 5f983f30798..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_const_structs.h +++ /dev/null @@ -1,84 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_const_structs.h - * Description: Constant structs that are initialized for user convenience. - * For example, some can be given as arguments to the arm_cfft_f32() function. - * - * @version V1.10.0 - * @date 08 July 2021 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_CONST_STRUCTS_H -#define _ARM_CONST_STRUCTS_H - -#include "arm_math_types.h" -#include "arm_common_tables.h" -#include "dsp/transform_functions.h" - -#ifdef __cplusplus -extern "C" { -#endif -extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len16; -extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len32; -extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len64; -extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len128; -extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len256; -extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len512; -extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len1024; -extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len2048; -extern const arm_cfft_instance_f64 arm_cfft_sR_f64_len4096; - -extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len16; -extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len32; -extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len64; -extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len128; -extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len256; -extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len512; -extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len1024; -extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len2048; -extern const arm_cfft_instance_f32 arm_cfft_sR_f32_len4096; - -extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len16; -extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len32; -extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len64; -extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len128; -extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len256; -extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len512; -extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len1024; -extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len2048; -extern const arm_cfft_instance_q31 arm_cfft_sR_q31_len4096; - -extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len16; -extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len32; -extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len64; -extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len128; -extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len256; -extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len512; -extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len1024; -extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len2048; -extern const arm_cfft_instance_q15 arm_cfft_sR_q15_len4096; - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_const_structs_f16.h b/Libraries/CMSIS/5.9.0/DSP/Include/arm_const_structs_f16.h deleted file mode 100644 index c7a7ffa740c..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_const_structs_f16.h +++ /dev/null @@ -1,85 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_const_structs_f16.h - * Description: Constant structs that are initialized for user convenience. - * For example, some can be given as arguments to the arm_cfft_f16() function. - * - * @version V1.10.0 - * @date 08 July 2021 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_CONST_STRUCTS_F16_H -#define _ARM_CONST_STRUCTS_F16_H - -#include "arm_math_types_f16.h" -#include "arm_common_tables.h" -#include "arm_common_tables_f16.h" -#include "dsp/transform_functions_f16.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if !defined(__CC_ARM) && defined(ARM_FLOAT16_SUPPORTED) -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - (defined(ARM_TABLE_TWIDDLECOEF_F16_16) && defined(ARM_TABLE_BITREVIDX_FLT_16)) -extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len16; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - (defined(ARM_TABLE_TWIDDLECOEF_F16_32) && defined(ARM_TABLE_BITREVIDX_FLT_32)) -extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len32; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - (defined(ARM_TABLE_TWIDDLECOEF_F16_64) && defined(ARM_TABLE_BITREVIDX_FLT_64)) -extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len64; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - (defined(ARM_TABLE_TWIDDLECOEF_F16_128) && defined(ARM_TABLE_BITREVIDX_FLT_128)) -extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len128; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - (defined(ARM_TABLE_TWIDDLECOEF_F16_256) && defined(ARM_TABLE_BITREVIDX_FLT_256)) -extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len256; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - (defined(ARM_TABLE_TWIDDLECOEF_F16_512) && defined(ARM_TABLE_BITREVIDX_FLT_512)) -extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len512; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - (defined(ARM_TABLE_TWIDDLECOEF_F16_1024) && defined(ARM_TABLE_BITREVIDX_FLT_1024)) -extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len1024; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - (defined(ARM_TABLE_TWIDDLECOEF_F16_2048) && defined(ARM_TABLE_BITREVIDX_FLT_2048)) -extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len2048; -#endif -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - (defined(ARM_TABLE_TWIDDLECOEF_F16_4096) && defined(ARM_TABLE_BITREVIDX_FLT_4096)) -extern const arm_cfft_instance_f16 arm_cfft_sR_f16_len4096; -#endif -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_math.h b/Libraries/CMSIS/5.9.0/DSP/Include/arm_math.h deleted file mode 100644 index a4edf0d8c45..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_math.h +++ /dev/null @@ -1,210 +0,0 @@ -/****************************************************************************** - * @file arm_math.h - * @brief Public header file for CMSIS DSP Library - * @version V1.10.0 - * @date 08 July 2021 - * Target Processor: Cortex-M and Cortex-A cores - ******************************************************************************/ -/* - * Copyright (c) 2010-2021 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - \mainpage CMSIS DSP Software Library - * - * \section intro Introduction - * - * This user manual describes the CMSIS DSP software library, - * a suite of common signal processing functions for use on Cortex-M and Cortex-A processor - * based devices. - * - * The library is divided into a number of functions each covering a specific category: - * - Basic math functions - * - Fast math functions - * - Complex math functions - * - Filtering functions - * - Matrix functions - * - Transform functions - * - Motor control functions - * - Statistical functions - * - Support functions - * - Interpolation functions - * - Support Vector Machine functions (SVM) - * - Bayes classifier functions - * - Distance functions - * - Quaternion functions - * - * The library has generally separate functions for operating on 8-bit integers, 16-bit integers, - * 32-bit integer and 32-bit floating-point values. - * - * The library is providing vectorized versions of most algorthms for Helium - * and of most f32 algorithms for Neon. - * - * When using a vectorized version, provide a little bit of padding after the end of - * a buffer (3 words) because the vectorized code may read a little bit after the end - * of a buffer. You don't have to modify your buffers but just ensure that the - * end of buffer + padding is not outside of a memory region. - * - * \section using Using the Library - * - * The library is released in source form. It is strongly advised to compile the library using -Ofast to - * have the best performances. - * - * The library functions are declared in the public file arm_math.h which is placed in the Include folder. - * Simply include this file. If you don't want to include everything, you can also rely - * on headers in Include/dsp folder and use only what you need. - * - * \section example Examples - * - * The library ships with a number of examples which demonstrate how to use the library functions. - * - * \section toolchain Toolchain Support - * - * The library is now tested on Fast Models building with cmake. - * Core M0, M4, M7, M33, M55, A32 are tested. - * - * - * \section preprocessor Preprocessor Macros - * - * Each library project have different preprocessor macros. - * - * - ARM_MATH_BIG_ENDIAN: - * - * Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets. - * - * - ARM_MATH_MATRIX_CHECK: - * - * Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices - * - * - ARM_MATH_ROUNDING: - * - * Define macro ARM_MATH_ROUNDING for rounding on support functions - * - * - ARM_MATH_LOOPUNROLL: - * - * Define macro ARM_MATH_LOOPUNROLL to enable manual loop unrolling in DSP functions - * - * - ARM_MATH_NEON: - * - * Define macro ARM_MATH_NEON to enable Neon versions of the DSP functions. - * It is not enabled by default when Neon is available because performances are - * dependent on the compiler and target architecture. - * - * - ARM_MATH_NEON_EXPERIMENTAL: - * - * Define macro ARM_MATH_NEON_EXPERIMENTAL to enable experimental Neon versions of - * of some DSP functions. Experimental Neon versions currently do not have better - * performances than the scalar versions. - * - * - ARM_MATH_HELIUM: - * - * It implies the flags ARM_MATH_MVEF and ARM_MATH_MVEI and ARM_MATH_MVE_FLOAT16. - * - * - ARM_MATH_HELIUM_EXPERIMENTAL: - * - * Only taken into account when ARM_MATH_MVEF, ARM_MATH_MVEI or ARM_MATH_MVE_FLOAT16 are defined. - * Enable some vector versions which may have worse performance than scalar - * depending on the core / compiler configuration. - * - * - ARM_MATH_MVEF: - * - * Select Helium versions of the f32 algorithms. - * It implies ARM_MATH_FLOAT16 and ARM_MATH_MVEI. - * - * - ARM_MATH_MVEI: - * - * Select Helium versions of the int and fixed point algorithms. - * - * - ARM_MATH_MVE_FLOAT16: - * - * MVE Float16 implementations of some algorithms (Requires MVE extension). - * - * - DISABLEFLOAT16: - * - * Disable float16 algorithms when __fp16 is not supported for a - * specific compiler / core configuration. - * This is only valid for scalar. When vector architecture is - * supporting f16 then it can't be disabled. - * - * - ARM_MATH_AUTOVECTORIZE: - * - * With Helium or Neon, disable the use of vectorized code with C intrinsics - * and use pure C instead. The vectorization is then done by the compiler. - * - *
- * \section pack CMSIS-DSP in ARM::CMSIS Pack - * - * The following files relevant to CMSIS-DSP are present in the ARM::CMSIS Pack directories: - * |File/Folder |Content | - * |---------------------------------|------------------------------------------------------------------------| - * |\b CMSIS\\Documentation\\DSP | This documentation | - * |\b CMSIS\\DSP\\Examples | Example projects demonstrating the usage of the library functions | - * |\b CMSIS\\DSP\\Include | DSP_Lib include files for using and building the lib - * |\b CMSIS\\DSP\\PrivateInclude | DSP_Lib private include files for building the lib | - * |\b CMSIS\\DSP\\Lib | DSP_Lib binaries | - * |\b CMSIS\\DSP\\Source | DSP_Lib source files | - * - *
- * \section rev Revision History of CMSIS-DSP - * Please refer to \ref ChangeLog_pg. - */ - -/** - * @defgroup groupExamples Examples - */ - -#ifndef _ARM_MATH_H -#define _ARM_MATH_H - -#include "arm_math_types.h" -#include "arm_math_memory.h" - -#include "dsp/none.h" -#include "dsp/utils.h" - -#include "dsp/basic_math_functions.h" -#include "dsp/interpolation_functions.h" -#include "dsp/bayes_functions.h" -#include "dsp/matrix_functions.h" -#include "dsp/complex_math_functions.h" -#include "dsp/statistics_functions.h" -#include "dsp/controller_functions.h" -#include "dsp/support_functions.h" -#include "dsp/distance_functions.h" -#include "dsp/svm_functions.h" -#include "dsp/fast_math_functions.h" -#include "dsp/transform_functions.h" -#include "dsp/filtering_functions.h" -#include "dsp/quaternion_math_functions.h" - -#ifdef __cplusplus -extern "C" { -#endif - -//#define TABLE_SPACING_Q31 0x400000 -//#define TABLE_SPACING_Q15 0x80 - -#ifdef __cplusplus -} -#endif - -#endif /* _ARM_MATH_H */ - -/** - * - * End of file. - */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_math_types.h b/Libraries/CMSIS/5.9.0/DSP/Include/arm_math_types.h deleted file mode 100644 index c55a3826524..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_math_types.h +++ /dev/null @@ -1,581 +0,0 @@ -/****************************************************************************** - * @file arm_math_types.h - * @brief Public header file for CMSIS DSP Library - * @version V1.10.0 - * @date 08 July 2021 - * Target Processor: Cortex-M and Cortex-A cores - ******************************************************************************/ -/* - * Copyright (c) 2010-2021 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_MATH_TYPES_H_ - -#define _ARM_MATH_TYPES_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/* Compiler specific diagnostic adjustment */ -#if defined(__CC_ARM) - -#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - -#elif defined(__APPLE_CC__) -#pragma GCC diagnostic ignored "-Wold-style-cast" - -#elif defined(__GNUC__) -#pragma GCC diagnostic push -#pragma GCC diagnostic ignored "-Wsign-conversion" -#pragma GCC diagnostic ignored "-Wconversion" -#pragma GCC diagnostic ignored "-Wunused-parameter" - -#elif defined(__ICCARM__) - -#elif defined(__TI_ARM__) - -#elif defined(__CSMC__) - -#elif defined(__TASKING__) - -#elif defined(_MSC_VER) - -#else -#error Unknown compiler -#endif - -/* Included for instrinsics definitions */ -#if defined(_MSC_VER) -#include -#define __STATIC_FORCEINLINE static __forceinline -#define __STATIC_INLINE static __inline -#define __ALIGNED(x) __declspec(align(x)) -#elif defined(__APPLE_CC__) -#include -#define __ALIGNED(x) __attribute__((aligned(x))) -#define __STATIC_FORCEINLINE static inline __attribute__((always_inline)) -#define __STATIC_INLINE static inline -#elif defined(__GNUC_PYTHON__) -#include -#define __ALIGNED(x) __attribute__((aligned(x))) -#define __STATIC_FORCEINLINE static inline __attribute__((always_inline)) -#define __STATIC_INLINE static inline - -#else -#include "cmsis_compiler.h" -#endif - -#include -#include -#include -#include - -/* evaluate ARM DSP feature */ -#if (defined(__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) -#define ARM_MATH_DSP 1 -#endif - -#if defined(ARM_MATH_NEON) -#if defined(_MSC_VER) && defined(_M_ARM64EC) -#include -#else -#include -#endif -#if defined(__ARM_FEATURE_FP16_VECTOR_ARITHMETIC) && __ARM_FEATURE_FP16_VECTOR_ARITHMETIC -#if !defined(ARM_MATH_NEON_FLOAT16) -#define ARM_MATH_NEON_FLOAT16 -#endif -#endif -#endif - -#if !defined(ARM_MATH_AUTOVECTORIZE) - -#if defined(__ARM_FEATURE_MVE) -#if __ARM_FEATURE_MVE -#if !defined(ARM_MATH_MVEI) -#define ARM_MATH_MVEI -#endif -#endif - -#if (__ARM_FEATURE_MVE & 2) -#if !defined(ARM_MATH_MVEF) -#define ARM_MATH_MVEF -#endif -#if !defined(ARM_MATH_MVE_FLOAT16) -#define ARM_MATH_MVE_FLOAT16 -#endif -#endif - -#endif /*defined(__ARM_FEATURE_MVE)*/ -#endif /*!defined(ARM_MATH_AUTOVECTORIZE)*/ - -#if defined(ARM_MATH_HELIUM) -#if !defined(ARM_MATH_MVEF) -#define ARM_MATH_MVEF -#endif - -#if !defined(ARM_MATH_MVEI) -#define ARM_MATH_MVEI -#endif - -#if !defined(ARM_MATH_MVE_FLOAT16) -#define ARM_MATH_MVE_FLOAT16 -#endif -#endif - -#if defined(__CC_ARM) -/* Enter low optimization region - place directly above function definition */ -#if defined(__ARM_ARCH_7EM__) -#define LOW_OPTIMIZATION_ENTER _Pragma("push") _Pragma("O1") -#else -#define LOW_OPTIMIZATION_ENTER -#endif - -/* Exit low optimization region - place directly after end of function definition */ -#if defined(__ARM_ARCH_7EM__) -#define LOW_OPTIMIZATION_EXIT _Pragma("pop") -#else -#define LOW_OPTIMIZATION_EXIT -#endif - -/* Enter low optimization region - place directly above function definition */ -#define IAR_ONLY_LOW_OPTIMIZATION_ENTER - -/* Exit low optimization region - place directly after end of function definition */ -#define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) -#define LOW_OPTIMIZATION_ENTER -#define LOW_OPTIMIZATION_EXIT -#define IAR_ONLY_LOW_OPTIMIZATION_ENTER -#define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined(__APPLE_CC__) -#define LOW_OPTIMIZATION_ENTER -#define LOW_OPTIMIZATION_EXIT -#define IAR_ONLY_LOW_OPTIMIZATION_ENTER -#define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined(__GNUC__) -#define LOW_OPTIMIZATION_ENTER __attribute__((optimize("-O1"))) -#define LOW_OPTIMIZATION_EXIT -#define IAR_ONLY_LOW_OPTIMIZATION_ENTER -#define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined(__ICCARM__) -/* Enter low optimization region - place directly above function definition */ -#if defined(__ARM_ARCH_7EM__) -#define LOW_OPTIMIZATION_ENTER _Pragma("optimize=low") -#else -#define LOW_OPTIMIZATION_ENTER -#endif - -/* Exit low optimization region - place directly after end of function definition */ -#define LOW_OPTIMIZATION_EXIT - -/* Enter low optimization region - place directly above function definition */ -#if defined(__ARM_ARCH_7EM__) -#define IAR_ONLY_LOW_OPTIMIZATION_ENTER _Pragma("optimize=low") -#else -#define IAR_ONLY_LOW_OPTIMIZATION_ENTER -#endif - -/* Exit low optimization region - place directly after end of function definition */ -#define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined(__TI_ARM__) -#define LOW_OPTIMIZATION_ENTER -#define LOW_OPTIMIZATION_EXIT -#define IAR_ONLY_LOW_OPTIMIZATION_ENTER -#define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined(__CSMC__) -#define LOW_OPTIMIZATION_ENTER -#define LOW_OPTIMIZATION_EXIT -#define IAR_ONLY_LOW_OPTIMIZATION_ENTER -#define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined(__TASKING__) -#define LOW_OPTIMIZATION_ENTER -#define LOW_OPTIMIZATION_EXIT -#define IAR_ONLY_LOW_OPTIMIZATION_ENTER -#define IAR_ONLY_LOW_OPTIMIZATION_EXIT - -#elif defined(_MSC_VER) || defined(__GNUC_PYTHON__) -#define LOW_OPTIMIZATION_ENTER -#define LOW_OPTIMIZATION_EXIT -#define IAR_ONLY_LOW_OPTIMIZATION_ENTER -#define IAR_ONLY_LOW_OPTIMIZATION_EXIT -#endif - -/* Compiler specific diagnostic adjustment */ -#if defined(__CC_ARM) - -#elif defined(__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) - -#elif defined(__APPLE_CC__) - -#elif defined(__GNUC__) -#pragma GCC diagnostic pop - -#elif defined(__ICCARM__) - -#elif defined(__TI_ARM__) - -#elif defined(__CSMC__) - -#elif defined(__TASKING__) - -#elif defined(_MSC_VER) - -#else -#error Unknown compiler -#endif - -#ifdef __cplusplus -} -#endif - -#if defined(__ARM_FEATURE_MVE) && __ARM_FEATURE_MVE -#include -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief 8-bit fractional data type in 1.7 format. - */ -typedef int8_t q7_t; - -/** - * @brief 16-bit fractional data type in 1.15 format. - */ -typedef int16_t q15_t; - -/** - * @brief 32-bit fractional data type in 1.31 format. - */ -typedef int32_t q31_t; - -/** - * @brief 64-bit fractional data type in 1.63 format. - */ -typedef int64_t q63_t; - -/** - * @brief 32-bit floating-point type definition. - */ -#if !defined(__ICCARM__) || !(__ARM_FEATURE_MVE & 2) -typedef float float32_t; -#endif - -/** - * @brief 64-bit floating-point type definition. - */ -typedef double float64_t; - -/** - * @brief vector types - */ -#if defined(ARM_MATH_NEON) || (defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE)) -/** - * @brief 64-bit fractional 128-bit vector data type in 1.63 format - */ -typedef int64x2_t q63x2_t; - -/** - * @brief 32-bit fractional 128-bit vector data type in 1.31 format. - */ -typedef int32x4_t q31x4_t; - -/** - * @brief 16-bit fractional 128-bit vector data type with 16-bit alignment in 1.15 format. - */ -typedef __ALIGNED(2) int16x8_t q15x8_t; - -/** - * @brief 8-bit fractional 128-bit vector data type with 8-bit alignment in 1.7 format. - */ -typedef __ALIGNED(1) int8x16_t q7x16_t; - -/** - * @brief 32-bit fractional 128-bit vector pair data type in 1.31 format. - */ -typedef int32x4x2_t q31x4x2_t; - -/** - * @brief 32-bit fractional 128-bit vector quadruplet data type in 1.31 format. - */ -typedef int32x4x4_t q31x4x4_t; - -/** - * @brief 16-bit fractional 128-bit vector pair data type in 1.15 format. - */ -typedef int16x8x2_t q15x8x2_t; - -/** - * @brief 16-bit fractional 128-bit vector quadruplet data type in 1.15 format. - */ -typedef int16x8x4_t q15x8x4_t; - -/** - * @brief 8-bit fractional 128-bit vector pair data type in 1.7 format. - */ -typedef int8x16x2_t q7x16x2_t; - -/** - * @brief 8-bit fractional 128-bit vector quadruplet data type in 1.7 format. - */ -typedef int8x16x4_t q7x16x4_t; - -/** - * @brief 32-bit fractional data type in 9.23 format. - */ -typedef int32_t q23_t; - -/** - * @brief 32-bit fractional 128-bit vector data type in 9.23 format. - */ -typedef int32x4_t q23x4_t; - -/** - * @brief 64-bit status 128-bit vector data type. - */ -typedef int64x2_t status64x2_t; - -/** - * @brief 32-bit status 128-bit vector data type. - */ -typedef int32x4_t status32x4_t; - -/** - * @brief 16-bit status 128-bit vector data type. - */ -typedef int16x8_t status16x8_t; - -/** - * @brief 8-bit status 128-bit vector data type. - */ -typedef int8x16_t status8x16_t; - -#endif - -#if defined(ARM_MATH_NEON) || \ - (defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE)) /* floating point vector*/ -/** - * @brief 32-bit floating-point 128-bit vector type - */ -typedef float32x4_t f32x4_t; - -/** - * @brief 32-bit floating-point 128-bit vector pair data type - */ -typedef float32x4x2_t f32x4x2_t; - -/** - * @brief 32-bit floating-point 128-bit vector quadruplet data type - */ -typedef float32x4x4_t f32x4x4_t; - -/** - * @brief 32-bit ubiquitous 128-bit vector data type - */ -typedef union _any32x4_t { - float32x4_t f; - int32x4_t i; -} any32x4_t; - -#endif - -#if defined(ARM_MATH_NEON) -/** - * @brief 32-bit fractional 64-bit vector data type in 1.31 format. - */ -typedef int32x2_t q31x2_t; - -/** - * @brief 16-bit fractional 64-bit vector data type in 1.15 format. - */ -typedef __ALIGNED(2) int16x4_t q15x4_t; - -/** - * @brief 8-bit fractional 64-bit vector data type in 1.7 format. - */ -typedef __ALIGNED(1) int8x8_t q7x8_t; - -/** - * @brief 32-bit float 64-bit vector data type. - */ -typedef float32x2_t f32x2_t; - -/** - * @brief 32-bit floating-point 128-bit vector triplet data type - */ -typedef float32x4x3_t f32x4x3_t; - -/** - * @brief 32-bit fractional 128-bit vector triplet data type in 1.31 format - */ -typedef int32x4x3_t q31x4x3_t; - -/** - * @brief 16-bit fractional 128-bit vector triplet data type in 1.15 format - */ -typedef int16x8x3_t q15x8x3_t; - -/** - * @brief 8-bit fractional 128-bit vector triplet data type in 1.7 format - */ -typedef int8x16x3_t q7x16x3_t; - -/** - * @brief 32-bit floating-point 64-bit vector pair data type - */ -typedef float32x2x2_t f32x2x2_t; - -/** - * @brief 32-bit floating-point 64-bit vector triplet data type - */ -typedef float32x2x3_t f32x2x3_t; - -/** - * @brief 32-bit floating-point 64-bit vector quadruplet data type - */ -typedef float32x2x4_t f32x2x4_t; - -/** - * @brief 32-bit fractional 64-bit vector pair data type in 1.31 format - */ -typedef int32x2x2_t q31x2x2_t; - -/** - * @brief 32-bit fractional 64-bit vector triplet data type in 1.31 format - */ -typedef int32x2x3_t q31x2x3_t; - -/** - * @brief 32-bit fractional 64-bit vector quadruplet data type in 1.31 format - */ -typedef int32x4x3_t q31x2x4_t; - -/** - * @brief 16-bit fractional 64-bit vector pair data type in 1.15 format - */ -typedef int16x4x2_t q15x4x2_t; - -/** - * @brief 16-bit fractional 64-bit vector triplet data type in 1.15 format - */ -typedef int16x4x2_t q15x4x3_t; - -/** - * @brief 16-bit fractional 64-bit vector quadruplet data type in 1.15 format - */ -typedef int16x4x3_t q15x4x4_t; - -/** - * @brief 8-bit fractional 64-bit vector pair data type in 1.7 format - */ -typedef int8x8x2_t q7x8x2_t; - -/** - * @brief 8-bit fractional 64-bit vector triplet data type in 1.7 format - */ -typedef int8x8x3_t q7x8x3_t; - -/** - * @brief 8-bit fractional 64-bit vector quadruplet data type in 1.7 format - */ -typedef int8x8x4_t q7x8x4_t; - -/** - * @brief 32-bit ubiquitous 64-bit vector data type - */ -typedef union _any32x2_t { - float32x2_t f; - int32x2_t i; -} any32x2_t; - -/** - * @brief 32-bit status 64-bit vector data type. - */ -typedef int32x4_t status32x2_t; - -/** - * @brief 16-bit status 64-bit vector data type. - */ -typedef int16x8_t status16x4_t; - -/** - * @brief 8-bit status 64-bit vector data type. - */ -typedef int8x16_t status8x8_t; - -#endif - -#define F64_MAX ((float64_t)DBL_MAX) -#define F32_MAX ((float32_t)FLT_MAX) - -#define F64_MIN (-DBL_MAX) -#define F32_MIN (-FLT_MAX) - -#define F64_ABSMAX ((float64_t)DBL_MAX) -#define F32_ABSMAX ((float32_t)FLT_MAX) - -#define F64_ABSMIN ((float64_t)0.0) -#define F32_ABSMIN ((float32_t)0.0) - -#define Q31_MAX ((q31_t)(0x7FFFFFFFL)) -#define Q15_MAX ((q15_t)(0x7FFF)) -#define Q7_MAX ((q7_t)(0x7F)) -#define Q31_MIN ((q31_t)(0x80000000L)) -#define Q15_MIN ((q15_t)(0x8000)) -#define Q7_MIN ((q7_t)(0x80)) - -#define Q31_ABSMAX ((q31_t)(0x7FFFFFFFL)) -#define Q15_ABSMAX ((q15_t)(0x7FFF)) -#define Q7_ABSMAX ((q7_t)(0x7F)) -#define Q31_ABSMIN ((q31_t)0) -#define Q15_ABSMIN ((q15_t)0) -#define Q7_ABSMIN ((q7_t)0) - -/* Dimension C vector space */ -#define CMPLX_DIM 2 - -/** - * @brief Error status returned by some functions in the library. - */ - -typedef enum { - ARM_MATH_SUCCESS = 0, /**< No error */ - ARM_MATH_ARGUMENT_ERROR = -1, /**< One or more arguments are incorrect */ - ARM_MATH_LENGTH_ERROR = -2, /**< Length of data buffer is incorrect */ - ARM_MATH_SIZE_MISMATCH = -3, /**< Size of matrices is not compatible with the operation */ - ARM_MATH_NANINF = -4, /**< Not-a-number (NaN) or infinity is generated */ - ARM_MATH_SINGULAR = -5, /**< Input matrix is singular and cannot be inverted */ - ARM_MATH_TEST_FAILURE = -6, /**< Test Failed */ - ARM_MATH_DECOMPOSITION_FAILURE = -7 /**< Decomposition Failed */ -} arm_status; - -#ifdef __cplusplus -} -#endif - -#endif /*ifndef _ARM_MATH_TYPES_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_mve_tables.h b/Libraries/CMSIS/5.9.0/DSP/Include/arm_mve_tables.h deleted file mode 100644 index 742674174bb..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_mve_tables.h +++ /dev/null @@ -1,232 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mve_tables.h - * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc - * used for MVE implementation only - * - * @version V1.10.0 - * @date 04 October 2021 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_MVE_TABLES_H -#define _ARM_MVE_TABLES_H - -#include "arm_math_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_16) || defined(ARM_TABLE_TWIDDLECOEF_F32_32) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_16_f32[2]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_16_f32[2]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_16_f32[2]; -extern float32_t rearranged_twiddle_stride1_16_f32[8]; -extern float32_t rearranged_twiddle_stride2_16_f32[8]; -extern float32_t rearranged_twiddle_stride3_16_f32[8]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_64) || defined(ARM_TABLE_TWIDDLECOEF_F32_128) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_64_f32[3]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_64_f32[3]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_64_f32[3]; -extern float32_t rearranged_twiddle_stride1_64_f32[40]; -extern float32_t rearranged_twiddle_stride2_64_f32[40]; -extern float32_t rearranged_twiddle_stride3_64_f32[40]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_256) || defined(ARM_TABLE_TWIDDLECOEF_F32_512) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_256_f32[4]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_256_f32[4]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_256_f32[4]; -extern float32_t rearranged_twiddle_stride1_256_f32[168]; -extern float32_t rearranged_twiddle_stride2_256_f32[168]; -extern float32_t rearranged_twiddle_stride3_256_f32[168]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_1024) || defined(ARM_TABLE_TWIDDLECOEF_F32_2048) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_f32[5]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_f32[5]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_f32[5]; -extern float32_t rearranged_twiddle_stride1_1024_f32[680]; -extern float32_t rearranged_twiddle_stride2_1024_f32[680]; -extern float32_t rearranged_twiddle_stride3_1024_f32[680]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F32_4096) || defined(ARM_TABLE_TWIDDLECOEF_F32_8192) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_f32[6]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_f32[6]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_f32[6]; -extern float32_t rearranged_twiddle_stride1_4096_f32[2728]; -extern float32_t rearranged_twiddle_stride2_4096_f32[2728]; -extern float32_t rearranged_twiddle_stride3_4096_f32[2728]; -#endif - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_16) || defined(ARM_TABLE_TWIDDLECOEF_Q31_32) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_16_q31[2]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_16_q31[2]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_16_q31[2]; -extern q31_t rearranged_twiddle_stride1_16_q31[8]; -extern q31_t rearranged_twiddle_stride2_16_q31[8]; -extern q31_t rearranged_twiddle_stride3_16_q31[8]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_64) || defined(ARM_TABLE_TWIDDLECOEF_Q31_128) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_64_q31[3]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_64_q31[3]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_64_q31[3]; -extern q31_t rearranged_twiddle_stride1_64_q31[40]; -extern q31_t rearranged_twiddle_stride2_64_q31[40]; -extern q31_t rearranged_twiddle_stride3_64_q31[40]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_256) || defined(ARM_TABLE_TWIDDLECOEF_Q31_512) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_256_q31[4]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_256_q31[4]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_256_q31[4]; -extern q31_t rearranged_twiddle_stride1_256_q31[168]; -extern q31_t rearranged_twiddle_stride2_256_q31[168]; -extern q31_t rearranged_twiddle_stride3_256_q31[168]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_1024) || defined(ARM_TABLE_TWIDDLECOEF_Q31_2048) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_q31[5]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_q31[5]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_q31[5]; -extern q31_t rearranged_twiddle_stride1_1024_q31[680]; -extern q31_t rearranged_twiddle_stride2_1024_q31[680]; -extern q31_t rearranged_twiddle_stride3_1024_q31[680]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q31_4096) || defined(ARM_TABLE_TWIDDLECOEF_Q31_8192) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_q31[6]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_q31[6]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_q31[6]; -extern q31_t rearranged_twiddle_stride1_4096_q31[2728]; -extern q31_t rearranged_twiddle_stride2_4096_q31[2728]; -extern q31_t rearranged_twiddle_stride3_4096_q31[2728]; -#endif - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEI) */ - -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_16) || defined(ARM_TABLE_TWIDDLECOEF_Q15_32) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_16_q15[2]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_16_q15[2]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_16_q15[2]; -extern q15_t rearranged_twiddle_stride1_16_q15[8]; -extern q15_t rearranged_twiddle_stride2_16_q15[8]; -extern q15_t rearranged_twiddle_stride3_16_q15[8]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_64) || defined(ARM_TABLE_TWIDDLECOEF_Q15_128) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_64_q15[3]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_64_q15[3]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_64_q15[3]; -extern q15_t rearranged_twiddle_stride1_64_q15[40]; -extern q15_t rearranged_twiddle_stride2_64_q15[40]; -extern q15_t rearranged_twiddle_stride3_64_q15[40]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_256) || defined(ARM_TABLE_TWIDDLECOEF_Q15_512) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_256_q15[4]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_256_q15[4]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_256_q15[4]; -extern q15_t rearranged_twiddle_stride1_256_q15[168]; -extern q15_t rearranged_twiddle_stride2_256_q15[168]; -extern q15_t rearranged_twiddle_stride3_256_q15[168]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_1024) || defined(ARM_TABLE_TWIDDLECOEF_Q15_2048) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_q15[5]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_q15[5]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_q15[5]; -extern q15_t rearranged_twiddle_stride1_1024_q15[680]; -extern q15_t rearranged_twiddle_stride2_1024_q15[680]; -extern q15_t rearranged_twiddle_stride3_1024_q15[680]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_Q15_4096) || defined(ARM_TABLE_TWIDDLECOEF_Q15_8192) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_q15[6]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_q15[6]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_q15[6]; -extern q15_t rearranged_twiddle_stride1_4096_q15[2728]; -extern q15_t rearranged_twiddle_stride2_4096_q15[2728]; -extern q15_t rearranged_twiddle_stride3_4096_q15[2728]; -#endif - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVEI) */ - -#ifdef __cplusplus -} -#endif - -#endif /*_ARM_MVE_TABLES_H*/ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/arm_mve_tables_f16.h b/Libraries/CMSIS/5.9.0/DSP/Include/arm_mve_tables_f16.h deleted file mode 100644 index 474fedcb950..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/arm_mve_tables_f16.h +++ /dev/null @@ -1,106 +0,0 @@ -/* ---------------------------------------------------------------------- - * Project: CMSIS DSP Library - * Title: arm_mve_tables_f16.h - * Description: common tables like fft twiddle factors, Bitreverse, reciprocal etc - * used for MVE implementation only - * - * @version V1.10.0 - * @date 04 October 2021 - * - * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _ARM_MVE_TABLES_F16_H -#define _ARM_MVE_TABLES_F16_H - -#include "arm_math_types_f16.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_16) || defined(ARM_TABLE_TWIDDLECOEF_F16_32) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_16_f16[2]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_16_f16[2]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_16_f16[2]; -extern float16_t rearranged_twiddle_stride1_16_f16[8]; -extern float16_t rearranged_twiddle_stride2_16_f16[8]; -extern float16_t rearranged_twiddle_stride3_16_f16[8]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_64) || defined(ARM_TABLE_TWIDDLECOEF_F16_128) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_64_f16[3]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_64_f16[3]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_64_f16[3]; -extern float16_t rearranged_twiddle_stride1_64_f16[40]; -extern float16_t rearranged_twiddle_stride2_64_f16[40]; -extern float16_t rearranged_twiddle_stride3_64_f16[40]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_256) || defined(ARM_TABLE_TWIDDLECOEF_F16_512) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_256_f16[4]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_256_f16[4]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_256_f16[4]; -extern float16_t rearranged_twiddle_stride1_256_f16[168]; -extern float16_t rearranged_twiddle_stride2_256_f16[168]; -extern float16_t rearranged_twiddle_stride3_256_f16[168]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_1024) || defined(ARM_TABLE_TWIDDLECOEF_F16_2048) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_1024_f16[5]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_1024_f16[5]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_1024_f16[5]; -extern float16_t rearranged_twiddle_stride1_1024_f16[680]; -extern float16_t rearranged_twiddle_stride2_1024_f16[680]; -extern float16_t rearranged_twiddle_stride3_1024_f16[680]; -#endif - -#if !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_ALL_FFT_TABLES) || \ - defined(ARM_TABLE_TWIDDLECOEF_F16_4096) || defined(ARM_TABLE_TWIDDLECOEF_F16_8192) - -extern uint32_t rearranged_twiddle_tab_stride1_arr_4096_f16[6]; -extern uint32_t rearranged_twiddle_tab_stride2_arr_4096_f16[6]; -extern uint32_t rearranged_twiddle_tab_stride3_arr_4096_f16[6]; -extern float16_t rearranged_twiddle_stride1_4096_f16[2728]; -extern float16_t rearranged_twiddle_stride2_4096_f16[2728]; -extern float16_t rearranged_twiddle_stride3_4096_f16[2728]; -#endif - -#endif /* !defined(ARM_DSP_CONFIG_TABLES) || defined(ARM_FFT_ALLOW_TABLES) */ - -#endif /* defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -#ifdef __cplusplus -} -#endif - -#endif /*_ARM_MVE_TABLES_F16_H*/ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/matrix_utils.h b/Libraries/CMSIS/5.9.0/DSP/Include/dsp/matrix_utils.h deleted file mode 100644 index de87ab1417b..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/matrix_utils.h +++ /dev/null @@ -1,569 +0,0 @@ -/****************************************************************************** - * @file matrix_utils.h - * @brief Public header file for CMSIS DSP Library - * @version V1.11.0 - * @date 30 May 2022 - * Target Processor: Cortex-M and Cortex-A cores - ******************************************************************************/ -/* - * Copyright (c) 2010-2022 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _MATRIX_UTILS_H_ -#define _MATRIX_UTILS_H_ - -#include "arm_math_types.h" -#include "arm_math_memory.h" - -#include "dsp/none.h" -#include "dsp/utils.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define ELEM(A, ROW, COL) &((A)->pData[(A)->numCols * (ROW) + (COL)]) - -#define SCALE_COL_T(T, CAST, A, ROW, v, i) \ - { \ - int32_t w; \ - T *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = (A)->numRows - ROW; \ - \ - data += i + numCols * (ROW); \ - \ - for (w = 0; w < nb; w++) { \ - *data *= CAST v; \ - data += numCols; \ - } \ - } - -#if defined(ARM_FLOAT16_SUPPORTED) -#if defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE) - -#define SWAP_ROWS_F16(A, COL, i, j) \ - { \ - int cnt = ((A)->numCols) - (COL); \ - int32_t w; \ - float16_t *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - \ - for (w = (COL); w < numCols; w += 8) { \ - f16x8_t tmpa, tmpb; \ - mve_pred16_t p0 = vctp16q(cnt); \ - \ - tmpa = vldrhq_z_f16(&data[i * numCols + w], p0); \ - tmpb = vldrhq_z_f16(&data[j * numCols + w], p0); \ - \ - vstrhq_p(&data[i * numCols + w], tmpb, p0); \ - vstrhq_p(&data[j * numCols + w], tmpa, p0); \ - \ - cnt -= 8; \ - } \ - } - -#define SCALE_ROW_F16(A, COL, v, i) \ - { \ - int cnt = ((A)->numCols) - (COL); \ - int32_t w; \ - float16_t *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - \ - for (w = (COL); w < numCols; w += 8) { \ - f16x8_t tmpa; \ - mve_pred16_t p0 = vctp16q(cnt); \ - tmpa = vldrhq_z_f16(&data[i * numCols + w], p0); \ - tmpa = vmulq_n_f16(tmpa, (_Float16)v); \ - vstrhq_p(&data[i * numCols + w], tmpa, p0); \ - cnt -= 8; \ - } \ - } - -#define MAC_ROW_F16(COL, A, i, v, B, j) \ - { \ - int cnt = ((A)->numCols) - (COL); \ - int32_t w; \ - float16_t *dataA = (A)->pData; \ - float16_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - \ - for (w = (COL); w < numCols; w += 8) { \ - f16x8_t tmpa, tmpb; \ - mve_pred16_t p0 = vctp16q(cnt); \ - tmpa = vldrhq_z_f16(&dataA[i * numCols + w], p0); \ - tmpb = vldrhq_z_f16(&dataB[j * numCols + w], p0); \ - tmpa = vfmaq_n_f16(tmpa, tmpb, v); \ - vstrhq_p(&dataA[i * numCols + w], tmpa, p0); \ - cnt -= 8; \ - } \ - } - -#define MAS_ROW_F16(COL, A, i, v, B, j) \ - { \ - int cnt = ((A)->numCols) - (COL); \ - int32_t w; \ - float16_t *dataA = (A)->pData; \ - float16_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - f16x8_t vec = vdupq_n_f16(v); \ - \ - for (w = (COL); w < numCols; w += 8) { \ - f16x8_t tmpa, tmpb; \ - mve_pred16_t p0 = vctp16q(cnt); \ - tmpa = vldrhq_z_f16(&dataA[i * numCols + w], p0); \ - tmpb = vldrhq_z_f16(&dataB[j * numCols + w], p0); \ - tmpa = vfmsq_f16(tmpa, tmpb, vec); \ - vstrhq_p(&dataA[i * numCols + w], tmpa, p0); \ - cnt -= 8; \ - } \ - } - -#else - -#define SWAP_ROWS_F16(A, COL, i, j) \ - { \ - int32_t w; \ - float16_t *dataI = (A)->pData; \ - float16_t *dataJ = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - \ - dataI += i * numCols + (COL); \ - dataJ += j * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - float16_t tmp; \ - tmp = *dataI; \ - *dataI++ = *dataJ; \ - *dataJ++ = tmp; \ - } \ - } - -#define SCALE_ROW_F16(A, COL, v, i) \ - { \ - int32_t w; \ - float16_t *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - \ - data += i * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - *data++ *= (_Float16)v; \ - } \ - } - -#define MAC_ROW_F16(COL, A, i, v, B, j) \ - { \ - int32_t w; \ - float16_t *dataA = (A)->pData; \ - float16_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - \ - dataA += i * numCols + (COL); \ - dataB += j * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - *dataA++ += (_Float16)v * (_Float16)*dataB++; \ - } \ - } - -#define MAS_ROW_F16(COL, A, i, v, B, j) \ - { \ - int32_t w; \ - float16_t *dataA = (A)->pData; \ - float16_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - \ - dataA += i * numCols + (COL); \ - dataB += j * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - *dataA++ -= (_Float16)v * (_Float16)*dataB++; \ - } \ - } - -#endif /*defined(ARM_MATH_MVE_FLOAT16) && !defined(ARM_MATH_AUTOVECTORIZE)*/ - -#define SCALE_COL_F16(A, ROW, v, i) SCALE_COL_T(float16_t, (_Float16), A, ROW, v, i) - -#endif /* defined(ARM_FLOAT16_SUPPORTED)*/ - -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - -#define SWAP_ROWS_F32(A, COL, i, j) \ - { \ - int cnt = ((A)->numCols) - (COL); \ - float32_t *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - int32_t w; \ - \ - for (w = (COL); w < numCols; w += 4) { \ - f32x4_t tmpa, tmpb; \ - mve_pred16_t p0 = vctp32q(cnt); \ - \ - tmpa = vldrwq_z_f32(&data[i * numCols + w], p0); \ - tmpb = vldrwq_z_f32(&data[j * numCols + w], p0); \ - \ - vstrwq_p(&data[i * numCols + w], tmpb, p0); \ - vstrwq_p(&data[j * numCols + w], tmpa, p0); \ - \ - cnt -= 4; \ - } \ - } - -#define MAC_ROW_F32(COL, A, i, v, B, j) \ - { \ - int cnt = ((A)->numCols) - (COL); \ - float32_t *dataA = (A)->pData; \ - float32_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - int32_t w; \ - \ - for (w = (COL); w < numCols; w += 4) { \ - f32x4_t tmpa, tmpb; \ - mve_pred16_t p0 = vctp32q(cnt); \ - tmpa = vldrwq_z_f32(&dataA[i * numCols + w], p0); \ - tmpb = vldrwq_z_f32(&dataB[j * numCols + w], p0); \ - tmpa = vfmaq_n_f32(tmpa, tmpb, v); \ - vstrwq_p(&dataA[i * numCols + w], tmpa, p0); \ - cnt -= 4; \ - } \ - } - -#define MAS_ROW_F32(COL, A, i, v, B, j) \ - { \ - int cnt = ((A)->numCols) - (COL); \ - float32_t *dataA = (A)->pData; \ - float32_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - int32_t w; \ - f32x4_t vec = vdupq_n_f32(v); \ - \ - for (w = (COL); w < numCols; w += 4) { \ - f32x4_t tmpa, tmpb; \ - mve_pred16_t p0 = vctp32q(cnt); \ - tmpa = vldrwq_z_f32(&dataA[i * numCols + w], p0); \ - tmpb = vldrwq_z_f32(&dataB[j * numCols + w], p0); \ - tmpa = vfmsq_f32(tmpa, tmpb, vec); \ - vstrwq_p(&dataA[i * numCols + w], tmpa, p0); \ - cnt -= 4; \ - } \ - } - -#define SCALE_ROW_F32(A, COL, v, i) \ - { \ - int cnt = ((A)->numCols) - (COL); \ - float32_t *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - int32_t w; \ - \ - for (w = (COL); w < numCols; w += 4) { \ - f32x4_t tmpa; \ - mve_pred16_t p0 = vctp32q(cnt); \ - tmpa = vldrwq_z_f32(&data[i * numCols + w], p0); \ - tmpa = vmulq_n_f32(tmpa, v); \ - vstrwq_p(&data[i * numCols + w], tmpa, p0); \ - cnt -= 4; \ - } \ - } - -#elif defined(ARM_MATH_NEON) && !defined(ARM_MATH_AUTOVECTORIZE) - -#define SWAP_ROWS_F32(A, COL, i, j) \ - { \ - int32_t w; \ - float32_t *dataI = (A)->pData; \ - float32_t *dataJ = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - COL; \ - \ - dataI += i * numCols + (COL); \ - dataJ += j * numCols + (COL); \ - \ - float32_t tmp; \ - \ - for (w = 0; w < nb; w++) { \ - tmp = *dataI; \ - *dataI++ = *dataJ; \ - *dataJ++ = tmp; \ - } \ - } - -#define MAC_ROW_F32(COL, A, i, v, B, j) \ - { \ - float32_t *dataA = (A)->pData; \ - float32_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - int32_t nbElems; \ - f32x4_t vec = vdupq_n_f32(v); \ - \ - nbElems = nb >> 2; \ - \ - dataA += i * numCols + (COL); \ - dataB += j * numCols + (COL); \ - \ - while (nbElems > 0) { \ - f32x4_t tmpa, tmpb; \ - tmpa = vld1q_f32(dataA, p0); \ - tmpb = vld1q_f32(dataB, p0); \ - tmpa = vmlaq_f32(tmpa, tmpb, vec); \ - vst1q_f32(dataA, tmpa, p0); \ - nbElems--; \ - dataA += 4; \ - dataB += 4; \ - } \ - \ - nbElems = nb & 3; \ - while (nbElems > 0) { \ - *dataA++ += v * *dataB++; \ - nbElems--; \ - } \ - } - -#define MAS_ROW_F32(COL, A, i, v, B, j) \ - { \ - float32_t *dataA = (A)->pData; \ - float32_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - int32_t nbElems; \ - f32x4_t vec = vdupq_n_f32(v); \ - \ - nbElems = nb >> 2; \ - \ - dataA += i * numCols + (COL); \ - dataB += j * numCols + (COL); \ - \ - while (nbElems > 0) { \ - f32x4_t tmpa, tmpb; \ - tmpa = vld1q_f32(dataA); \ - tmpb = vld1q_f32(dataB); \ - tmpa = vmlsq_f32(tmpa, tmpb, vec); \ - vst1q_f32(dataA, tmpa); \ - nbElems--; \ - dataA += 4; \ - dataB += 4; \ - } \ - \ - nbElems = nb & 3; \ - while (nbElems > 0) { \ - *dataA++ -= v * *dataB++; \ - nbElems--; \ - } \ - } - -#define SCALE_ROW_F32(A, COL, v, i) \ - { \ - float32_t *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - int32_t nbElems; \ - f32x4_t vec = vdupq_n_f32(v); \ - \ - nbElems = nb >> 2; \ - \ - data += i * numCols + (COL); \ - while (nbElems > 0) { \ - f32x4_t tmpa; \ - tmpa = vld1q_f32(data); \ - tmpa = vmulq_f32(tmpa, vec); \ - vst1q_f32(data, tmpa); \ - data += 4; \ - nbElems--; \ - } \ - \ - nbElems = nb & 3; \ - while (nbElems > 0) { \ - *data++ *= v; \ - nbElems--; \ - } \ - } - -#else - -#define SWAP_ROWS_F32(A, COL, i, j) \ - { \ - int32_t w; \ - float32_t tmp; \ - float32_t *dataI = (A)->pData; \ - float32_t *dataJ = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - COL; \ - \ - dataI += i * numCols + (COL); \ - dataJ += j * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - tmp = *dataI; \ - *dataI++ = *dataJ; \ - *dataJ++ = tmp; \ - } \ - } - -#define SCALE_ROW_F32(A, COL, v, i) \ - { \ - int32_t w; \ - float32_t *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - COL; \ - \ - data += i * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - *data++ *= v; \ - } \ - } - -#define MAC_ROW_F32(COL, A, i, v, B, j) \ - { \ - int32_t w; \ - float32_t *dataA = (A)->pData; \ - float32_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - \ - dataA = dataA + i * numCols + (COL); \ - dataB = dataB + j * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - *dataA++ += v * *dataB++; \ - } \ - } - -#define MAS_ROW_F32(COL, A, i, v, B, j) \ - { \ - int32_t w; \ - float32_t *dataA = (A)->pData; \ - float32_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - \ - dataA = dataA + i * numCols + (COL); \ - dataB = dataB + j * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - *dataA++ -= v * *dataB++; \ - } \ - } - -#endif /* defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) */ - -#define SWAP_COLS_F32(A, COL, i, j) \ - { \ - int32_t w; \ - float32_t *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - for (w = (COL); w < numCols; w++) { \ - float32_t tmp; \ - tmp = data[w * numCols + i]; \ - data[w * numCols + i] = data[w * numCols + j]; \ - data[w * numCols + j] = tmp; \ - } \ - } - -#define SCALE_COL_F32(A, ROW, v, i) SCALE_COL_T(float32_t, , A, ROW, v, i) - -#define SWAP_ROWS_F64(A, COL, i, j) \ - { \ - int32_t w; \ - float64_t *dataI = (A)->pData; \ - float64_t *dataJ = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - \ - dataI += i * numCols + (COL); \ - dataJ += j * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - float64_t tmp; \ - tmp = *dataI; \ - *dataI++ = *dataJ; \ - *dataJ++ = tmp; \ - } \ - } - -#define SWAP_COLS_F64(A, COL, i, j) \ - { \ - int32_t w; \ - float64_t *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - for (w = (COL); w < numCols; w++) { \ - float64_t tmp; \ - tmp = data[w * numCols + i]; \ - data[w * numCols + i] = data[w * numCols + j]; \ - data[w * numCols + j] = tmp; \ - } \ - } - -#define SCALE_ROW_F64(A, COL, v, i) \ - { \ - int32_t w; \ - float64_t *data = (A)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - \ - data += i * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - *data++ *= v; \ - } \ - } - -#define SCALE_COL_F64(A, ROW, v, i) SCALE_COL_T(float64_t, , A, ROW, v, i) - -#define MAC_ROW_F64(COL, A, i, v, B, j) \ - { \ - int32_t w; \ - float64_t *dataA = (A)->pData; \ - float64_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - \ - dataA += i * numCols + (COL); \ - dataB += j * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - *dataA++ += v * *dataB++; \ - } \ - } - -#define MAS_ROW_F64(COL, A, i, v, B, j) \ - { \ - int32_t w; \ - float64_t *dataA = (A)->pData; \ - float64_t *dataB = (B)->pData; \ - const int32_t numCols = (A)->numCols; \ - const int32_t nb = numCols - (COL); \ - \ - dataA += i * numCols + (COL); \ - dataB += j * numCols + (COL); \ - \ - for (w = 0; w < nb; w++) { \ - *dataA++ -= v * *dataB++; \ - } \ - } - -#ifdef __cplusplus -} -#endif - -#endif /* ifndef _MATRIX_UTILS_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/none.h b/Libraries/CMSIS/5.9.0/DSP/Include/dsp/none.h deleted file mode 100644 index 45042dafc9a..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/none.h +++ /dev/null @@ -1,471 +0,0 @@ -/****************************************************************************** - * @file none.h - * @brief Intrinsincs when no DSP extension available - * @version V1.9.0 - * @date 20. July 2020 - ******************************************************************************/ -/* - * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* - -Definitions in this file are allowing to reuse some versions of the -CMSIS-DSP to build on a core (M0 for instance) or a host where -DSP extension are not available. - -Ideally a pure C version should have been used instead. -But those are not always available or use a restricted set -of intrinsics. - -*/ - -#ifndef _NONE_H_ -#define _NONE_H_ - -#include "arm_math_types.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* - -Normally those kind of definitions are in a compiler file -in Core or Core_A. - -But for MSVC compiler it is a bit special. The goal is very specific -to CMSIS-DSP and only to allow the use of this library from other -systems like Python or Matlab. - -MSVC is not going to be used to cross-compile to ARM. So, having a MSVC -compiler file in Core or Core_A would not make sense. - -*/ -#if defined(_MSC_VER) || defined(__GNUC_PYTHON__) || defined(__APPLE_CC__) -__STATIC_FORCEINLINE uint8_t __CLZ(uint32_t data) -{ - if (data == 0U) { - return 32U; - } - - uint32_t count = 0U; - uint32_t mask = 0x80000000U; - - while ((data & mask) == 0U) { - count += 1U; - mask = mask >> 1U; - } - return count; -} - -__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) -{ - if ((sat >= 1U) && (sat <= 32U)) { - const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); - const int32_t min = -1 - max; - if (val > max) { - return max; - } else if (val < min) { - return min; - } - } - return val; -} - -__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) -{ - if (sat <= 31U) { - const uint32_t max = ((1U << sat) - 1U); - if (val > (int32_t)max) { - return max; - } else if (val < 0) { - return 0U; - } - } - return (uint32_t)val; -} - -/** - \brief Rotate Right in unsigned value (32 bit) - \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. - \param [in] op1 Value to rotate - \param [in] op2 Number of Bits to rotate - \return Rotated value - */ -__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) -{ - op2 %= 32U; - if (op2 == 0U) { - return op1; - } - return (op1 >> op2) | (op1 << (32U - op2)); -} - -#endif - -/** - * @brief Clips Q63 to Q31 values. - */ -__STATIC_FORCEINLINE q31_t clip_q63_to_q31(q63_t x) -{ - return ((q31_t)(x >> 32) != ((q31_t)x >> 31)) ? ((0x7FFFFFFF ^ ((q31_t)(x >> 63)))) : (q31_t)x; -} - -/** - * @brief Clips Q63 to Q15 values. - */ -__STATIC_FORCEINLINE q15_t clip_q63_to_q15(q63_t x) -{ - return ((q31_t)(x >> 32) != ((q31_t)x >> 31)) ? ((0x7FFF ^ ((q15_t)(x >> 63)))) : - (q15_t)(x >> 15); -} - -/** - * @brief Clips Q31 to Q7 values. - */ -__STATIC_FORCEINLINE q7_t clip_q31_to_q7(q31_t x) -{ - return ((q31_t)(x >> 24) != ((q31_t)x >> 23)) ? ((0x7F ^ ((q7_t)(x >> 31)))) : (q7_t)x; -} - -/** - * @brief Clips Q31 to Q15 values. - */ -__STATIC_FORCEINLINE q15_t clip_q31_to_q15(q31_t x) -{ - return ((q31_t)(x >> 16) != ((q31_t)x >> 15)) ? ((0x7FFF ^ ((q15_t)(x >> 31)))) : (q15_t)x; -} - -/** - * @brief Multiplies 32 X 64 and returns 32 bit result in 2.30 format. - */ -__STATIC_FORCEINLINE q63_t mult32x64(q63_t x, q31_t y) -{ - return ((((q63_t)(x & 0x00000000FFFFFFFF) * y) >> 32) + (((q63_t)(x >> 32) * y))); -} - -/* SMMLAR */ -#define multAcc_32x32_keep32_R(a, x, y) \ - a = (q31_t)(((((q63_t)a) << 32) + ((q63_t)x * y) + 0x80000000LL) >> 32) - -/* SMMLSR */ -#define multSub_32x32_keep32_R(a, x, y) \ - a = (q31_t)(((((q63_t)a) << 32) - ((q63_t)x * y) + 0x80000000LL) >> 32) - -/* SMMULR */ -#define mult_32x32_keep32_R(a, x, y) a = (q31_t)(((q63_t)x * y + 0x80000000LL) >> 32) - -/* SMMLA */ -#define multAcc_32x32_keep32(a, x, y) a += (q31_t)(((q63_t)x * y) >> 32) - -/* SMMLS */ -#define multSub_32x32_keep32(a, x, y) a -= (q31_t)(((q63_t)x * y) >> 32) - -/* SMMUL */ -#define mult_32x32_keep32(a, x, y) a = (q31_t)(((q63_t)x * y) >> 32) - -#ifndef ARM_MATH_DSP -/** - * @brief definition to pack two 16 bit values. - */ -#define __PKHBT(ARG1, ARG2, ARG3) \ - ((((int32_t)(ARG1) << 0) & (int32_t)0x0000FFFF) | \ - (((int32_t)(ARG2) << ARG3) & (int32_t)0xFFFF0000)) -#define __PKHTB(ARG1, ARG2, ARG3) \ - ((((int32_t)(ARG1) << 0) & (int32_t)0xFFFF0000) | \ - (((int32_t)(ARG2) >> ARG3) & (int32_t)0x0000FFFF)) -#endif - -/** - * @brief definition to pack four 8 bit values. - */ -#ifndef ARM_MATH_BIG_ENDIAN -#define __PACKq7(v0, v1, v2, v3) \ - ((((int32_t)(v0) << 0) & (int32_t)0x000000FF) | (((int32_t)(v1) << 8) & (int32_t)0x0000FF00) | \ - (((int32_t)(v2) << 16) & (int32_t)0x00FF0000) | \ - (((int32_t)(v3) << 24) & (int32_t)0xFF000000)) -#else -#define __PACKq7(v0, v1, v2, v3) \ - ((((int32_t)(v3) << 0) & (int32_t)0x000000FF) | (((int32_t)(v2) << 8) & (int32_t)0x0000FF00) | \ - (((int32_t)(v1) << 16) & (int32_t)0x00FF0000) | \ - (((int32_t)(v0) << 24) & (int32_t)0xFF000000)) -#endif - -/* - * @brief C custom defined intrinsic functions - */ -#if !defined(ARM_MATH_DSP) - -/* - * @brief C custom defined QADD8 - */ -__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t x, uint32_t y) -{ - q31_t r, s, t, u; - - r = __SSAT(((((q31_t)x << 24) >> 24) + (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; - s = __SSAT(((((q31_t)x << 16) >> 24) + (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; - t = __SSAT(((((q31_t)x << 8) >> 24) + (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; - u = __SSAT(((((q31_t)x) >> 24) + (((q31_t)y) >> 24)), 8) & (int32_t)0x000000FF; - - return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r))); -} - -/* - * @brief C custom defined QSUB8 - */ -__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t x, uint32_t y) -{ - q31_t r, s, t, u; - - r = __SSAT(((((q31_t)x << 24) >> 24) - (((q31_t)y << 24) >> 24)), 8) & (int32_t)0x000000FF; - s = __SSAT(((((q31_t)x << 16) >> 24) - (((q31_t)y << 16) >> 24)), 8) & (int32_t)0x000000FF; - t = __SSAT(((((q31_t)x << 8) >> 24) - (((q31_t)y << 8) >> 24)), 8) & (int32_t)0x000000FF; - u = __SSAT(((((q31_t)x) >> 24) - (((q31_t)y) >> 24)), 8) & (int32_t)0x000000FF; - - return ((uint32_t)((u << 24) | (t << 16) | (s << 8) | (r))); -} - -/* - * @brief C custom defined QADD16 - */ -__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t x, uint32_t y) -{ - /* q31_t r, s; without initialisation 'arm_offset_q15 test' fails but 'intrinsic' tests pass! for armCC */ - q31_t r = 0, s = 0; - - r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; - s = __SSAT(((((q31_t)x) >> 16) + (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r))); -} - -/* - * @brief C custom defined SHADD16 - */ -__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t x, uint32_t y) -{ - q31_t r, s; - - r = (((((q31_t)x << 16) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; - s = (((((q31_t)x) >> 16) + (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r))); -} - -/* - * @brief C custom defined QSUB16 - */ -__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t x, uint32_t y) -{ - q31_t r, s; - - r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; - s = __SSAT(((((q31_t)x) >> 16) - (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r))); -} - -/* - * @brief C custom defined SHSUB16 - */ -__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t x, uint32_t y) -{ - q31_t r, s; - - r = (((((q31_t)x << 16) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; - s = (((((q31_t)x) >> 16) - (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r))); -} - -/* - * @brief C custom defined QASX - */ -__STATIC_FORCEINLINE uint32_t __QASX(uint32_t x, uint32_t y) -{ - q31_t r, s; - - r = __SSAT(((((q31_t)x << 16) >> 16) - (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF; - s = __SSAT(((((q31_t)x) >> 16) + (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r))); -} - -/* - * @brief C custom defined SHASX - */ -__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t x, uint32_t y) -{ - q31_t r, s; - - r = (((((q31_t)x << 16) >> 16) - (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF; - s = (((((q31_t)x) >> 16) + (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r))); -} - -/* - * @brief C custom defined QSAX - */ -__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t x, uint32_t y) -{ - q31_t r, s; - - r = __SSAT(((((q31_t)x << 16) >> 16) + (((q31_t)y) >> 16)), 16) & (int32_t)0x0000FFFF; - s = __SSAT(((((q31_t)x) >> 16) - (((q31_t)y << 16) >> 16)), 16) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r))); -} - -/* - * @brief C custom defined SHSAX - */ -__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t x, uint32_t y) -{ - q31_t r, s; - - r = (((((q31_t)x << 16) >> 16) + (((q31_t)y) >> 16)) >> 1) & (int32_t)0x0000FFFF; - s = (((((q31_t)x) >> 16) - (((q31_t)y << 16) >> 16)) >> 1) & (int32_t)0x0000FFFF; - - return ((uint32_t)((s << 16) | (r))); -} - -/* - * @brief C custom defined SMUSDX - */ -__STATIC_FORCEINLINE uint32_t __SMUSDX(uint32_t x, uint32_t y) -{ - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) - - ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)))); -} - -/* - * @brief C custom defined SMUADX - */ -__STATIC_FORCEINLINE uint32_t __SMUADX(uint32_t x, uint32_t y) -{ - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) + - ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)))); -} - -/* - * @brief C custom defined QADD - */ -__STATIC_FORCEINLINE int32_t __QADD(int32_t x, int32_t y) -{ - return ((int32_t)(clip_q63_to_q31((q63_t)x + (q31_t)y))); -} - -/* - * @brief C custom defined QSUB - */ -__STATIC_FORCEINLINE int32_t __QSUB(int32_t x, int32_t y) -{ - return ((int32_t)(clip_q63_to_q31((q63_t)x - (q31_t)y))); -} - -/* - * @brief C custom defined SMLAD - */ -__STATIC_FORCEINLINE uint32_t __SMLAD(uint32_t x, uint32_t y, uint32_t sum) -{ - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + - ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)) + (((q31_t)sum)))); -} - -/* - * @brief C custom defined SMLADX - */ -__STATIC_FORCEINLINE uint32_t __SMLADX(uint32_t x, uint32_t y, uint32_t sum) -{ - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) + - ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)) + (((q31_t)sum)))); -} - -/* - * @brief C custom defined SMLSDX - */ -__STATIC_FORCEINLINE uint32_t __SMLSDX(uint32_t x, uint32_t y, uint32_t sum) -{ - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) - - ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)) + (((q31_t)sum)))); -} - -/* - * @brief C custom defined SMLALD - */ -__STATIC_FORCEINLINE uint64_t __SMLALD(uint32_t x, uint32_t y, uint64_t sum) -{ - /* return (sum + ((q15_t) (x >> 16) * (q15_t) (y >> 16)) + ((q15_t) x * (q15_t) y)); */ - return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + - ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)) + (((q63_t)sum)))); -} - -/* - * @brief C custom defined SMLALDX - */ -__STATIC_FORCEINLINE uint64_t __SMLALDX(uint32_t x, uint32_t y, uint64_t sum) -{ - /* return (sum + ((q15_t) (x >> 16) * (q15_t) y)) + ((q15_t) x * (q15_t) (y >> 16)); */ - return ((uint64_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y) >> 16)) + - ((((q31_t)x) >> 16) * (((q31_t)y << 16) >> 16)) + (((q63_t)sum)))); -} - -/* - * @brief C custom defined SMUAD - */ -__STATIC_FORCEINLINE uint32_t __SMUAD(uint32_t x, uint32_t y) -{ - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) + - ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)))); -} - -/* - * @brief C custom defined SMUSD - */ -__STATIC_FORCEINLINE uint32_t __SMUSD(uint32_t x, uint32_t y) -{ - return ((uint32_t)(((((q31_t)x << 16) >> 16) * (((q31_t)y << 16) >> 16)) - - ((((q31_t)x) >> 16) * (((q31_t)y) >> 16)))); -} - -/* - * @brief C custom defined SXTB16 - */ -__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t x) -{ - return ((uint32_t)(((((q31_t)x << 24) >> 24) & (q31_t)0x0000FFFF) | - ((((q31_t)x << 8) >> 8) & (q31_t)0xFFFF0000))); -} - -/* - * @brief C custom defined SMMLA - */ -__STATIC_FORCEINLINE int32_t __SMMLA(int32_t x, int32_t y, int32_t sum) -{ - return (sum + (int32_t)(((int64_t)x * y) >> 32)); -} - -#endif /* !defined (ARM_MATH_DSP) */ - -#ifdef __cplusplus -} -#endif - -#endif /* ifndef _TRANSFORM_FUNCTIONS_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/transform_functions.h b/Libraries/CMSIS/5.9.0/DSP/Include/dsp/transform_functions.h deleted file mode 100644 index cef55bda62e..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/transform_functions.h +++ /dev/null @@ -1,597 +0,0 @@ -/****************************************************************************** - * @file transform_functions.h - * @brief Public header file for CMSIS DSP Library - * @version V1.10.0 - * @date 08 July 2021 - * Target Processor: Cortex-M and Cortex-A cores - ******************************************************************************/ -/* - * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _TRANSFORM_FUNCTIONS_H_ -#define _TRANSFORM_FUNCTIONS_H_ - -#include "arm_math_types.h" -#include "arm_math_memory.h" - -#include "dsp/none.h" -#include "dsp/utils.h" - -#include "dsp/basic_math_functions.h" -#include "dsp/complex_math_functions.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @defgroup groupTransforms Transform Functions - */ - -/** - * @brief Instance structure for the Q15 CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t - ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t - bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - const q15_t *pTwiddle; /**< points to the Sin twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t - twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t - bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ -} arm_cfft_radix2_instance_q15; - -/* Deprecated */ -arm_status arm_cfft_radix2_init_q15(arm_cfft_radix2_instance_q15 *S, uint16_t fftLen, - uint8_t ifftFlag, uint8_t bitReverseFlag); - -/* Deprecated */ -void arm_cfft_radix2_q15(const arm_cfft_radix2_instance_q15 *S, q15_t *pSrc); - -/** - * @brief Instance structure for the Q15 CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t - ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t - bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - const q15_t *pTwiddle; /**< points to the twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t - twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t - bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ -} arm_cfft_radix4_instance_q15; - -/* Deprecated */ -arm_status arm_cfft_radix4_init_q15(arm_cfft_radix4_instance_q15 *S, uint16_t fftLen, - uint8_t ifftFlag, uint8_t bitReverseFlag); - -/* Deprecated */ -void arm_cfft_radix4_q15(const arm_cfft_radix4_instance_q15 *S, q15_t *pSrc); - -/** - * @brief Instance structure for the Radix-2 Q31 CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t - ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t - bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t - twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t - bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ -} arm_cfft_radix2_instance_q31; - -/* Deprecated */ -arm_status arm_cfft_radix2_init_q31(arm_cfft_radix2_instance_q31 *S, uint16_t fftLen, - uint8_t ifftFlag, uint8_t bitReverseFlag); - -/* Deprecated */ -void arm_cfft_radix2_q31(const arm_cfft_radix2_instance_q31 *S, q31_t *pSrc); - -/** - * @brief Instance structure for the Q31 CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t - ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t - bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - const q31_t *pTwiddle; /**< points to the twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t - twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t - bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ -} arm_cfft_radix4_instance_q31; - -/* Deprecated */ -void arm_cfft_radix4_q31(const arm_cfft_radix4_instance_q31 *S, q31_t *pSrc); - -/* Deprecated */ -arm_status arm_cfft_radix4_init_q31(arm_cfft_radix4_instance_q31 *S, uint16_t fftLen, - uint8_t ifftFlag, uint8_t bitReverseFlag); - -/** - * @brief Instance structure for the floating-point CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t - ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t - bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t - twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t - bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ - float32_t onebyfftLen; /**< value of 1/fftLen. */ -} arm_cfft_radix2_instance_f32; - -/* Deprecated */ -arm_status arm_cfft_radix2_init_f32(arm_cfft_radix2_instance_f32 *S, uint16_t fftLen, - uint8_t ifftFlag, uint8_t bitReverseFlag); - -/* Deprecated */ -void arm_cfft_radix2_f32(const arm_cfft_radix2_instance_f32 *S, float32_t *pSrc); - -/** - * @brief Instance structure for the floating-point CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t - ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t - bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t - twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t - bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ - float32_t onebyfftLen; /**< value of 1/fftLen. */ -} arm_cfft_radix4_instance_f32; - -/* Deprecated */ -arm_status arm_cfft_radix4_init_f32(arm_cfft_radix4_instance_f32 *S, uint16_t fftLen, - uint8_t ifftFlag, uint8_t bitReverseFlag); - -/* Deprecated */ -void arm_cfft_radix4_f32(const arm_cfft_radix4_instance_f32 *S, float32_t *pSrc); - -/** - * @brief Instance structure for the fixed-point CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - const q15_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t bitRevLength; /**< bit reversal table length. */ -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - const uint32_t - *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ - const uint32_t - *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ - const uint32_t - *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ - const q15_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ - const q15_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ - const q15_t *rearranged_twiddle_stride3; -#endif -} arm_cfft_instance_q15; - -arm_status arm_cfft_init_q15(arm_cfft_instance_q15 *S, uint16_t fftLen); - -void arm_cfft_q15(const arm_cfft_instance_q15 *S, q15_t *p1, uint8_t ifftFlag, - uint8_t bitReverseFlag); - -/** - * @brief Instance structure for the fixed-point CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - const q31_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t bitRevLength; /**< bit reversal table length. */ -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - const uint32_t - *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ - const uint32_t - *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ - const uint32_t - *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ - const q31_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ - const q31_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ - const q31_t *rearranged_twiddle_stride3; -#endif -} arm_cfft_instance_q31; - -arm_status arm_cfft_init_q31(arm_cfft_instance_q31 *S, uint16_t fftLen); - -void arm_cfft_q31(const arm_cfft_instance_q31 *S, q31_t *p1, uint8_t ifftFlag, - uint8_t bitReverseFlag); - -/** - * @brief Instance structure for the floating-point CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - const float32_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t bitRevLength; /**< bit reversal table length. */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - const uint32_t - *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ - const uint32_t - *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ - const uint32_t - *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ - const float32_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ - const float32_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ - const float32_t *rearranged_twiddle_stride3; -#endif -} arm_cfft_instance_f32; - -arm_status arm_cfft_init_f32(arm_cfft_instance_f32 *S, uint16_t fftLen); - -void arm_cfft_f32(const arm_cfft_instance_f32 *S, float32_t *p1, uint8_t ifftFlag, - uint8_t bitReverseFlag); - -/** - * @brief Instance structure for the Double Precision Floating-point CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - const float64_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t bitRevLength; /**< bit reversal table length. */ -} arm_cfft_instance_f64; - -arm_status arm_cfft_init_f64(arm_cfft_instance_f64 *S, uint16_t fftLen); - -void arm_cfft_f64(const arm_cfft_instance_f64 *S, float64_t *p1, uint8_t ifftFlag, - uint8_t bitReverseFlag); - -/** - * @brief Instance structure for the Q15 RFFT/RIFFT function. - */ -typedef struct { - uint32_t fftLenReal; /**< length of the real FFT. */ - uint8_t - ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ - uint8_t - bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ - uint32_t - twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - const q15_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - const q15_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - arm_cfft_instance_q15 cfftInst; -#else - const arm_cfft_instance_q15 *pCfft; /**< points to the complex FFT instance. */ -#endif -} arm_rfft_instance_q15; - -arm_status arm_rfft_init_q15(arm_rfft_instance_q15 *S, uint32_t fftLenReal, uint32_t ifftFlagR, - uint32_t bitReverseFlag); - -void arm_rfft_q15(const arm_rfft_instance_q15 *S, q15_t *pSrc, q15_t *pDst); - -/** - * @brief Instance structure for the Q31 RFFT/RIFFT function. - */ -typedef struct { - uint32_t fftLenReal; /**< length of the real FFT. */ - uint8_t - ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ - uint8_t - bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ - uint32_t - twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - const q31_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - const q31_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ -#if defined(ARM_MATH_MVEI) && !defined(ARM_MATH_AUTOVECTORIZE) - arm_cfft_instance_q31 cfftInst; -#else - const arm_cfft_instance_q31 *pCfft; /**< points to the complex FFT instance. */ -#endif -} arm_rfft_instance_q31; - -arm_status arm_rfft_init_q31(arm_rfft_instance_q31 *S, uint32_t fftLenReal, uint32_t ifftFlagR, - uint32_t bitReverseFlag); - -void arm_rfft_q31(const arm_rfft_instance_q31 *S, q31_t *pSrc, q31_t *pDst); - -/** - * @brief Instance structure for the floating-point RFFT/RIFFT function. - */ -typedef struct { - uint32_t fftLenReal; /**< length of the real FFT. */ - uint16_t fftLenBy2; /**< length of the complex FFT. */ - uint8_t - ifftFlagR; /**< flag that selects forward (ifftFlagR=0) or inverse (ifftFlagR=1) transform. */ - uint8_t - bitReverseFlagR; /**< flag that enables (bitReverseFlagR=1) or disables (bitReverseFlagR=0) bit reversal of output. */ - uint32_t - twidCoefRModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - const float32_t *pTwiddleAReal; /**< points to the real twiddle factor table. */ - const float32_t *pTwiddleBReal; /**< points to the imag twiddle factor table. */ - arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ -} arm_rfft_instance_f32; - -arm_status arm_rfft_init_f32(arm_rfft_instance_f32 *S, arm_cfft_radix4_instance_f32 *S_CFFT, - uint32_t fftLenReal, uint32_t ifftFlagR, uint32_t bitReverseFlag); - -void arm_rfft_f32(const arm_rfft_instance_f32 *S, float32_t *pSrc, float32_t *pDst); - -/** - * @brief Instance structure for the Double Precision Floating-point RFFT/RIFFT function. - */ -typedef struct { - arm_cfft_instance_f64 Sint; /**< Internal CFFT structure. */ - uint16_t fftLenRFFT; /**< length of the real sequence */ - const float64_t *pTwiddleRFFT; /**< Twiddle factors real stage */ -} arm_rfft_fast_instance_f64; - -arm_status arm_rfft_fast_init_f64(arm_rfft_fast_instance_f64 *S, uint16_t fftLen); - -void arm_rfft_fast_f64(arm_rfft_fast_instance_f64 *S, float64_t *p, float64_t *pOut, - uint8_t ifftFlag); - -/** - * @brief Instance structure for the floating-point RFFT/RIFFT function. - */ -typedef struct { - arm_cfft_instance_f32 Sint; /**< Internal CFFT structure. */ - uint16_t fftLenRFFT; /**< length of the real sequence */ - const float32_t *pTwiddleRFFT; /**< Twiddle factors real stage */ -} arm_rfft_fast_instance_f32; - -arm_status arm_rfft_fast_init_f32(arm_rfft_fast_instance_f32 *S, uint16_t fftLen); - -void arm_rfft_fast_f32(const arm_rfft_fast_instance_f32 *S, float32_t *p, float32_t *pOut, - uint8_t ifftFlag); - -/** - * @brief Instance structure for the floating-point DCT4/IDCT4 function. - */ -typedef struct { - uint16_t N; /**< length of the DCT4. */ - uint16_t Nby2; /**< half of the length of the DCT4. */ - float32_t normalize; /**< normalizing factor. */ - const float32_t *pTwiddle; /**< points to the twiddle factor table. */ - const float32_t *pCosFactor; /**< points to the cosFactor table. */ - arm_rfft_instance_f32 *pRfft; /**< points to the real FFT instance. */ - arm_cfft_radix4_instance_f32 *pCfft; /**< points to the complex FFT instance. */ -} arm_dct4_instance_f32; - -/** - * @brief Initialization function for the floating-point DCT4/IDCT4. - * @param[in,out] S points to an instance of floating-point DCT4/IDCT4 structure. - * @param[in] S_RFFT points to an instance of floating-point RFFT/RIFFT structure. - * @param[in] S_CFFT points to an instance of floating-point CFFT/CIFFT structure. - * @param[in] N length of the DCT4. - * @param[in] Nby2 half of the length of the DCT4. - * @param[in] normalize normalizing factor. - * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if fftLenReal is not a supported transform length. - */ -arm_status arm_dct4_init_f32(arm_dct4_instance_f32 *S, arm_rfft_instance_f32 *S_RFFT, - arm_cfft_radix4_instance_f32 *S_CFFT, uint16_t N, uint16_t Nby2, - float32_t normalize); - -/** - * @brief Processing function for the floating-point DCT4/IDCT4. - * @param[in] S points to an instance of the floating-point DCT4/IDCT4 structure. - * @param[in] pState points to state buffer. - * @param[in,out] pInlineBuffer points to the in-place input and output buffer. - */ -void arm_dct4_f32(const arm_dct4_instance_f32 *S, float32_t *pState, float32_t *pInlineBuffer); - -/** - * @brief Instance structure for the Q31 DCT4/IDCT4 function. - */ -typedef struct { - uint16_t N; /**< length of the DCT4. */ - uint16_t Nby2; /**< half of the length of the DCT4. */ - q31_t normalize; /**< normalizing factor. */ - const q31_t *pTwiddle; /**< points to the twiddle factor table. */ - const q31_t *pCosFactor; /**< points to the cosFactor table. */ - arm_rfft_instance_q31 *pRfft; /**< points to the real FFT instance. */ - arm_cfft_radix4_instance_q31 *pCfft; /**< points to the complex FFT instance. */ -} arm_dct4_instance_q31; - -/** - * @brief Initialization function for the Q31 DCT4/IDCT4. - * @param[in,out] S points to an instance of Q31 DCT4/IDCT4 structure. - * @param[in] S_RFFT points to an instance of Q31 RFFT/RIFFT structure - * @param[in] S_CFFT points to an instance of Q31 CFFT/CIFFT structure - * @param[in] N length of the DCT4. - * @param[in] Nby2 half of the length of the DCT4. - * @param[in] normalize normalizing factor. - * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. - */ -arm_status arm_dct4_init_q31(arm_dct4_instance_q31 *S, arm_rfft_instance_q31 *S_RFFT, - arm_cfft_radix4_instance_q31 *S_CFFT, uint16_t N, uint16_t Nby2, - q31_t normalize); - -/** - * @brief Processing function for the Q31 DCT4/IDCT4. - * @param[in] S points to an instance of the Q31 DCT4 structure. - * @param[in] pState points to state buffer. - * @param[in,out] pInlineBuffer points to the in-place input and output buffer. - */ -void arm_dct4_q31(const arm_dct4_instance_q31 *S, q31_t *pState, q31_t *pInlineBuffer); - -/** - * @brief Instance structure for the Q15 DCT4/IDCT4 function. - */ -typedef struct { - uint16_t N; /**< length of the DCT4. */ - uint16_t Nby2; /**< half of the length of the DCT4. */ - q15_t normalize; /**< normalizing factor. */ - const q15_t *pTwiddle; /**< points to the twiddle factor table. */ - const q15_t *pCosFactor; /**< points to the cosFactor table. */ - arm_rfft_instance_q15 *pRfft; /**< points to the real FFT instance. */ - arm_cfft_radix4_instance_q15 *pCfft; /**< points to the complex FFT instance. */ -} arm_dct4_instance_q15; - -/** - * @brief Initialization function for the Q15 DCT4/IDCT4. - * @param[in,out] S points to an instance of Q15 DCT4/IDCT4 structure. - * @param[in] S_RFFT points to an instance of Q15 RFFT/RIFFT structure. - * @param[in] S_CFFT points to an instance of Q15 CFFT/CIFFT structure. - * @param[in] N length of the DCT4. - * @param[in] Nby2 half of the length of the DCT4. - * @param[in] normalize normalizing factor. - * @return arm_status function returns ARM_MATH_SUCCESS if initialization is successful or ARM_MATH_ARGUMENT_ERROR if N is not a supported transform length. - */ -arm_status arm_dct4_init_q15(arm_dct4_instance_q15 *S, arm_rfft_instance_q15 *S_RFFT, - arm_cfft_radix4_instance_q15 *S_CFFT, uint16_t N, uint16_t Nby2, - q15_t normalize); - -/** - * @brief Processing function for the Q15 DCT4/IDCT4. - * @param[in] S points to an instance of the Q15 DCT4 structure. - * @param[in] pState points to state buffer. - * @param[in,out] pInlineBuffer points to the in-place input and output buffer. - */ -void arm_dct4_q15(const arm_dct4_instance_q15 *S, q15_t *pState, q15_t *pInlineBuffer); - -/** - * @brief Instance structure for the Floating-point MFCC function. - */ -typedef struct { - const float32_t *dctCoefs; /**< Internal DCT coefficients */ - const float32_t *filterCoefs; /**< Internal Mel filter coefficients */ - const float32_t *windowCoefs; /**< Windowing coefficients */ - const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ - const uint32_t *filterLengths; /**< Internal Mel filter lengths */ - uint32_t fftLen; /**< FFT length */ - uint32_t nbMelFilters; /**< Number of Mel filters */ - uint32_t nbDctOutputs; /**< Number of DCT outputs */ -#if defined(ARM_MFCC_CFFT_BASED) - /* Implementation of the MFCC is using a CFFT */ - arm_cfft_instance_f32 cfft; /**< Internal CFFT instance */ -#else - /* Implementation of the MFCC is using a RFFT (default) */ - arm_rfft_fast_instance_f32 rfft; -#endif -} arm_mfcc_instance_f32; - -arm_status arm_mfcc_init_f32(arm_mfcc_instance_f32 *S, uint32_t fftLen, uint32_t nbMelFilters, - uint32_t nbDctOutputs, const float32_t *dctCoefs, - const uint32_t *filterPos, const uint32_t *filterLengths, - const float32_t *filterCoefs, const float32_t *windowCoefs); - -/** - @brief MFCC F32 - @param[in] S points to the mfcc instance structure - @param[in] pSrc points to the input samples - @param[out] pDst points to the output MFCC values - @param[inout] pTmp points to a temporary buffer of complex - @return none - */ -void arm_mfcc_f32(const arm_mfcc_instance_f32 *S, float32_t *pSrc, float32_t *pDst, - float32_t *pTmp); - -typedef struct { - const q31_t *dctCoefs; /**< Internal DCT coefficients */ - const q31_t *filterCoefs; /**< Internal Mel filter coefficients */ - const q31_t *windowCoefs; /**< Windowing coefficients */ - const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ - const uint32_t *filterLengths; /**< Internal Mel filter lengths */ - uint32_t fftLen; /**< FFT length */ - uint32_t nbMelFilters; /**< Number of Mel filters */ - uint32_t nbDctOutputs; /**< Number of DCT outputs */ -#if defined(ARM_MFCC_CFFT_BASED) - /* Implementation of the MFCC is using a CFFT */ - arm_cfft_instance_q31 cfft; /**< Internal CFFT instance */ -#else - /* Implementation of the MFCC is using a RFFT (default) */ - arm_rfft_instance_q31 rfft; -#endif -} arm_mfcc_instance_q31; - -arm_status arm_mfcc_init_q31(arm_mfcc_instance_q31 *S, uint32_t fftLen, uint32_t nbMelFilters, - uint32_t nbDctOutputs, const q31_t *dctCoefs, - const uint32_t *filterPos, const uint32_t *filterLengths, - const q31_t *filterCoefs, const q31_t *windowCoefs); - -/** - @brief MFCC Q31 - @param[in] S points to the mfcc instance structure - @param[in] pSrc points to the input samples - @param[out] pDst points to the output MFCC values - @param[inout] pTmp points to a temporary buffer of complex - @return none - */ -arm_status arm_mfcc_q31(const arm_mfcc_instance_q31 *S, q31_t *pSrc, q31_t *pDst, q31_t *pTmp); - -typedef struct { - const q15_t *dctCoefs; /**< Internal DCT coefficients */ - const q15_t *filterCoefs; /**< Internal Mel filter coefficients */ - const q15_t *windowCoefs; /**< Windowing coefficients */ - const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ - const uint32_t *filterLengths; /**< Internal Mel filter lengths */ - uint32_t fftLen; /**< FFT length */ - uint32_t nbMelFilters; /**< Number of Mel filters */ - uint32_t nbDctOutputs; /**< Number of DCT outputs */ -#if defined(ARM_MFCC_CFFT_BASED) - /* Implementation of the MFCC is using a CFFT */ - arm_cfft_instance_q15 cfft; /**< Internal CFFT instance */ -#else - /* Implementation of the MFCC is using a RFFT (default) */ - arm_rfft_instance_q15 rfft; -#endif -} arm_mfcc_instance_q15; - -arm_status arm_mfcc_init_q15(arm_mfcc_instance_q15 *S, uint32_t fftLen, uint32_t nbMelFilters, - uint32_t nbDctOutputs, const q15_t *dctCoefs, - const uint32_t *filterPos, const uint32_t *filterLengths, - const q15_t *filterCoefs, const q15_t *windowCoefs); - -/** - @brief MFCC Q15 - @param[in] S points to the mfcc instance structure - @param[in] pSrc points to the input samples - @param[out] pDst points to the output MFCC values in q8.7 format - @param[inout] pTmp points to a temporary buffer of complex - @return error status - */ -arm_status arm_mfcc_q15(const arm_mfcc_instance_q15 *S, q15_t *pSrc, q15_t *pDst, q31_t *pTmp); - -#ifdef __cplusplus -} -#endif - -#endif /* ifndef _TRANSFORM_FUNCTIONS_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/transform_functions_f16.h b/Libraries/CMSIS/5.9.0/DSP/Include/dsp/transform_functions_f16.h deleted file mode 100644 index 53090bc91bb..00000000000 --- a/Libraries/CMSIS/5.9.0/DSP/Include/dsp/transform_functions_f16.h +++ /dev/null @@ -1,174 +0,0 @@ -/****************************************************************************** - * @file transform_functions_f16.h - * @brief Public header file for CMSIS DSP Library - * @version V1.10.0 - * @date 08 July 2021 - * Target Processor: Cortex-M and Cortex-A cores - ******************************************************************************/ -/* - * Copyright (c) 2010-2020 Arm Limited or its affiliates. All rights reserved. - * - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the License); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _TRANSFORM_FUNCTIONS_F16_H_ -#define _TRANSFORM_FUNCTIONS_F16_H_ - -#include "arm_math_types_f16.h" -#include "arm_math_memory.h" - -#include "dsp/none.h" -#include "dsp/utils.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(ARM_FLOAT16_SUPPORTED) - -/** - * @brief Instance structure for the floating-point CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t - ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t - bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - const float16_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t - twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t - bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ - float16_t onebyfftLen; /**< value of 1/fftLen. */ -} arm_cfft_radix2_instance_f16; - -/** - * @brief Instance structure for the floating-point CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - uint8_t - ifftFlag; /**< flag that selects forward (ifftFlag=0) or inverse (ifftFlag=1) transform. */ - uint8_t - bitReverseFlag; /**< flag that enables (bitReverseFlag=1) or disables (bitReverseFlag=0) bit reversal of output. */ - const float16_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t - twidCoefModifier; /**< twiddle coefficient modifier that supports different size FFTs with the same twiddle factor table. */ - uint16_t - bitRevFactor; /**< bit reversal modifier that supports different size FFTs with the same bit reversal table. */ - float16_t onebyfftLen; /**< value of 1/fftLen. */ -} arm_cfft_radix4_instance_f16; - -/** - * @brief Instance structure for the floating-point CFFT/CIFFT function. - */ -typedef struct { - uint16_t fftLen; /**< length of the FFT. */ - const float16_t *pTwiddle; /**< points to the Twiddle factor table. */ - const uint16_t *pBitRevTable; /**< points to the bit reversal table. */ - uint16_t bitRevLength; /**< bit reversal table length. */ -#if defined(ARM_MATH_MVEF) && !defined(ARM_MATH_AUTOVECTORIZE) - const uint32_t - *rearranged_twiddle_tab_stride1_arr; /**< Per stage reordered twiddle pointer (offset 1) */ - const uint32_t - *rearranged_twiddle_tab_stride2_arr; /**< Per stage reordered twiddle pointer (offset 2) */ - const uint32_t - *rearranged_twiddle_tab_stride3_arr; /**< Per stage reordered twiddle pointer (offset 3) */ - const float16_t *rearranged_twiddle_stride1; /**< reordered twiddle offset 1 storage */ - const float16_t *rearranged_twiddle_stride2; /**< reordered twiddle offset 2 storage */ - const float16_t *rearranged_twiddle_stride3; -#endif -} arm_cfft_instance_f16; - -arm_status arm_cfft_init_f16(arm_cfft_instance_f16 *S, uint16_t fftLen); - -void arm_cfft_f16(const arm_cfft_instance_f16 *S, float16_t *p1, uint8_t ifftFlag, - uint8_t bitReverseFlag); - -/** - * @brief Instance structure for the floating-point RFFT/RIFFT function. - */ -typedef struct { - arm_cfft_instance_f16 Sint; /**< Internal CFFT structure. */ - uint16_t fftLenRFFT; /**< length of the real sequence */ - const float16_t *pTwiddleRFFT; /**< Twiddle factors real stage */ -} arm_rfft_fast_instance_f16; - -arm_status arm_rfft_fast_init_f16(arm_rfft_fast_instance_f16 *S, uint16_t fftLen); - -void arm_rfft_fast_f16(const arm_rfft_fast_instance_f16 *S, float16_t *p, float16_t *pOut, - uint8_t ifftFlag); - -/* Deprecated */ -arm_status arm_cfft_radix4_init_f16(arm_cfft_radix4_instance_f16 *S, uint16_t fftLen, - uint8_t ifftFlag, uint8_t bitReverseFlag); - -/* Deprecated */ -void arm_cfft_radix4_f16(const arm_cfft_radix4_instance_f16 *S, float16_t *pSrc); - -/* Deprecated */ -arm_status arm_cfft_radix2_init_f16(arm_cfft_radix2_instance_f16 *S, uint16_t fftLen, - uint8_t ifftFlag, uint8_t bitReverseFlag); - -/* Deprecated */ -void arm_cfft_radix2_f16(const arm_cfft_radix2_instance_f16 *S, float16_t *pSrc); - -/** - * @brief Instance structure for the Floating-point MFCC function. - */ -typedef struct { - const float16_t *dctCoefs; /**< Internal DCT coefficients */ - const float16_t *filterCoefs; /**< Internal Mel filter coefficients */ - const float16_t *windowCoefs; /**< Windowing coefficients */ - const uint32_t *filterPos; /**< Internal Mel filter positions in spectrum */ - const uint32_t *filterLengths; /**< Internal Mel filter lengths */ - uint32_t fftLen; /**< FFT length */ - uint32_t nbMelFilters; /**< Number of Mel filters */ - uint32_t nbDctOutputs; /**< Number of DCT outputs */ -#if defined(ARM_MFCC_CFFT_BASED) - /* Implementation of the MFCC is using a CFFT */ - arm_cfft_instance_f16 cfft; /**< Internal CFFT instance */ -#else - /* Implementation of the MFCC is using a RFFT (default) */ - arm_rfft_fast_instance_f16 rfft; -#endif -} arm_mfcc_instance_f16; - -arm_status arm_mfcc_init_f16(arm_mfcc_instance_f16 *S, uint32_t fftLen, uint32_t nbMelFilters, - uint32_t nbDctOutputs, const float16_t *dctCoefs, - const uint32_t *filterPos, const uint32_t *filterLengths, - const float16_t *filterCoefs, const float16_t *windowCoefs); - -/** - @brief MFCC F16 - @param[in] S points to the mfcc instance structure - @param[in] pSrc points to the input samples - @param[out] pDst points to the output MFCC values - @param[inout] pTmp points to a temporary buffer of complex - @return none - */ -void arm_mfcc_f16(const arm_mfcc_instance_f16 *S, float16_t *pSrc, float16_t *pDst, - float16_t *pTmp); - -#endif /* defined(ARM_FLOAT16_SUPPORTED)*/ - -#ifdef __cplusplus -} -#endif - -#endif /* ifndef _TRANSFORM_FUNCTIONS_F16_H_ */ diff --git a/Libraries/CMSIS/5.9.0/DSP/Lib/libarm_cortexM4l_math.a b/Libraries/CMSIS/5.9.0/DSP/Lib/libarm_cortexM4l_math.a deleted file mode 100644 index f991257c870..00000000000 Binary files a/Libraries/CMSIS/5.9.0/DSP/Lib/libarm_cortexM4l_math.a and /dev/null differ diff --git a/Libraries/CMSIS/5.9.0/DSP/Lib/libarm_cortexM4lf_math.a b/Libraries/CMSIS/5.9.0/DSP/Lib/libarm_cortexM4lf_math.a deleted file mode 100644 index c8ff8077daf..00000000000 Binary files a/Libraries/CMSIS/5.9.0/DSP/Lib/libarm_cortexM4lf_math.a and /dev/null differ diff --git a/Libraries/CMSIS/Device/Maxim/GCC/gcc.mk b/Libraries/CMSIS/Device/Maxim/GCC/gcc.mk index d820251a6ed..95b19648373 100644 --- a/Libraries/CMSIS/Device/Maxim/GCC/gcc.mk +++ b/Libraries/CMSIS/Device/Maxim/GCC/gcc.mk @@ -256,35 +256,84 @@ endif MCPU ?= cortex-m4 ifeq "$(MCPU)" "cortex-m33" + +# Build a project with TrustZone. +# Acceptable values are +# - 0 (default) : The project builds as a Secure-only project (development similar to Cortex-M4 examples). +# - 1 : The project builds with both Secure and Non-Secure context. +# +# When "0" is selected, the project will build as a Secure-only project with no TrustZone features enabled. +# Development is similar to other Cortex-M4 examples. +# +# When "1" is selected, the build system will build a Secure and Non-Secure project separately, then link +# the two images into one combined image. +TRUSTZONE ?= 0 + # Security mode for the target processor. # Acceptable values are # - SECURE # - NONSECURE # +# The core, by default, starts up in Secure mode. +# # When "SECURE" is selected, the build system will link the program binary into the secure # memory sections and map peripheral instances onto their corresponding secure # address aliases. "MSECURITY_MODE_SECURE" will be defined at compile time. # -# When "NONSCURE" is selected, the program binary will be linked into the non-secure memory +# When "NONSECURE" is selected, the program binary will be linked into the non-secure memory # sections and peripherals will be mapped onto the non-secure address aliases. # It should be noted that the M33 will boot into secure mode by default, which has access to # both the secure and non-secure addresses and aliases. "MSECURITY_MODE_NONSECURE" will be defined # at compile time. MSECURITY_MODE ?= SECURE +# Not accessible in {device}_files.mk without this. +export MSECURITY_MODE + +ifeq "$(MSECURITY_MODE)" "SECURE" +# Align with Zephyr flags. +PROJ_AFLAGS += -DCONFIG_TRUSTED_EXECUTION_SECURE=1 +PROJ_CFLAGS += -DCONFIG_TRUSTED_EXECUTION_SECURE=1 + +# Leaving these to support initial development. +PROJ_AFLAGS += -DIS_SECURE_ENVIRONMENT=1 +PROJ_CFLAGS += -DIS_SECURE_ENVIRONMENT=1 +else +# Align with Zephyr flags. +# Must be defined for the BLE build system. +PROJ_AFLAGS += -DCONFIG_TRUSTED_EXECUTION_SECURE=0 +PROJ_CFLAGS += -DCONFIG_TRUSTED_EXECUTION_SECURE=0 + +# Leaving these to support initial development. +PROJ_AFLAGS += -DIS_SECURE_ENVIRONMENT=0 +PROJ_CFLAGS += -DIS_SECURE_ENVIRONMENT=0 +endif + +ifeq ($(TRUSTZONE),1) + +# Select whether the CMSE importlib object file is generated. +# - 0 (default) : Do no generate object file. +# - 1 : Generate object file. +# +# The Secure project needs to generate the object file with empty definitions of +# secure symbols at the right locations. The Non-Secure project needs to be linked +# with the generated object file. +GEN_CMSE_IMPLIB_OBJ ?= 0 + ifeq "$(MSECURITY_MODE)" "SECURE" # Tell the compiler we are building a secure project. This is required to satisfy the requirements # defined in "Armv8-M Security Extension: Requirements on Developments Tools" # https://developer.arm.com/documentation/ecm0359818/latest PROJ_CFLAGS += -mcmse -PROJ_AFLAGS += -DIS_SECURE_ENVIRONMENT - -# Tell the linker we are building a secure project. This defines the "SECURE_LINK" symbol which the -# linker uses to set the secure FLASH/SRAM memory address ranges. -PROJ_LDFLAGS += -Xlinker --defsym=SECURE_LINK=1 -endif -endif +# Generate an object file with empty definitions of the secure image symbols at the correct locations. +# The object file needs to be linked with the non-secure image. +ifeq ($(GEN_CMSE_IMPLIB_OBJ),1) +PROJ_LDFLAGS := -Xlinker --cmse-implib -Xlinker --out-implib=$(CURDIR)/build/build_s/secure_implib.o +endif # GEN_CMSE_IMPLIB_OBJ +endif # MSECUIRTY_MODE +endif # TRUSTZONE +endif # MCPU # Float ABI options: # See https://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html (-mfloat-abi) @@ -740,9 +789,9 @@ SUPPRESS_HELP := 1 endif .PHONY: query query: + @echo ifneq "$(QUERY_VAR)" "" - @echo $(QUERY_VAR)=$($(QUERY_VAR)) + $(foreach QUERY_VAR,$(QUERY_VAR),$(info $(QUERY_VAR)=$($(QUERY_VAR)))) else $(MAKE) debug endif - diff --git a/Libraries/CMSIS/Device/Maxim/GCC/gcc_riscv.mk b/Libraries/CMSIS/Device/Maxim/GCC/gcc_riscv.mk index 91de21b1e33..c64ef43fe66 100644 --- a/Libraries/CMSIS/Device/Maxim/GCC/gcc_riscv.mk +++ b/Libraries/CMSIS/Device/Maxim/GCC/gcc_riscv.mk @@ -698,9 +698,9 @@ SUPPRESS_HELP := 1 endif .PHONY: query query: + @echo ifneq "$(QUERY_VAR)" "" - @echo $(QUERY_VAR)=$($(QUERY_VAR)) + $(foreach QUERY_VAR,$(QUERY_VAR),$(info $(QUERY_VAR)=$($(QUERY_VAR)))) else - $(MAKE) debug + $(MAKE) debug endif - diff --git a/Libraries/CMSIS/Device/Maxim/GCC/mxc_version.mk b/Libraries/CMSIS/Device/Maxim/GCC/mxc_version.mk index 6a910da3fea..a517a803062 100644 --- a/Libraries/CMSIS/Device/Maxim/GCC/mxc_version.mk +++ b/Libraries/CMSIS/Device/Maxim/GCC/mxc_version.mk @@ -16,9 +16,9 @@ # ############################################################################## # Autogenerated version info for build system. -MSDK_VERSION_STRING := v2023_10-172-gd3f8669fd6 -MSDK_VERSION_YEAR := 2023 -MSDK_VERSION_MONTH := 10 +MSDK_VERSION_STRING := v2024_02-149-gb9966ca6d8 +MSDK_VERSION_YEAR := 2024 +MSDK_VERSION_MONTH := 2 # Add root MAXIM_PATH to IPATH so compiler can locate msdk_version.h IPATH += $(MAXIM_PATH) diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655.mk b/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655.mk index a918cc4a9e6..2f4ca126294 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655.mk +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655.mk @@ -107,7 +107,7 @@ PROJ_OBJS = ${RISCV_APP_OBJ} .PHONY: rvapp rvapp: $(RISCV_APP_BIN) -$(RISCV_APP_BIN): +$(RISCV_APP_BIN): FORCE $(MAKE) -C ${RISCV_APP} BUILD_DIR=$(RISCV_BUILD_DIR) RISCV_CORE=1 RISCV_LOAD=0 PROJECT=riscv HOST_PROJECT=$(PROJECT) $(MAKE) -C ${RISCV_APP} BUILD_DIR=$(RISCV_BUILD_DIR) $(RISCV_APP_BIN) RISCV_CORE=1 RISCV_LOAD=0 diff --git a/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655_memory.mk b/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655_memory.mk index 273168b321a..87cc115adec 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655_memory.mk +++ b/Libraries/CMSIS/Device/Maxim/MAX32655/Source/GCC/max32655_memory.mk @@ -28,7 +28,7 @@ PROJ_AFLAGS += -DSRAM_ORIGIN=0x20000000 # Will work with small MAILBOX_SIZE, cores will experience more interrupts # and higher communication latency. # Minimum value is 16 -MAILBOX_SIZE = 64 +MAILBOX_SIZE ?= 64 ifneq ($(RISCV_CORE),) # RISCV core diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/boost_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/boost_regs.h new file mode 100644 index 00000000000..f501eddd823 --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/boost_regs.h @@ -0,0 +1,220 @@ +/** + * @file boost_regs.h + * @brief Registers, Bit Masks and Bit Positions for the BOOST Peripheral Module. + * @note This file is @generated. + * @ingroup boost_registers + */ + +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_BOOST_REGS_H_ +#define LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_BOOST_REGS_H_ + +/* **** Includes **** */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined (__ICCARM__) + #pragma system_include +#endif + +#if defined (__CC_ARM) + #pragma anon_unions +#endif +/// @cond +/* + If types are not defined elsewhere (CMSIS) define them here +*/ +#ifndef __IO +#define __IO volatile +#endif +#ifndef __I +#define __I volatile const +#endif +#ifndef __O +#define __O volatile +#endif +#ifndef __R +#define __R volatile const +#endif +/// @endcond + +/* **** Definitions **** */ + +/** + * @ingroup boost + * @defgroup boost_registers BOOST_Registers + * @brief Registers, Bit Masks and Bit Positions for the BOOST Peripheral Module. + * @details Boost Controller + */ + +/** + * @ingroup boost_registers + * Structure type to access the BOOST Registers. + */ +typedef struct { + __IO uint32_t disable; /**< \b 0x000: BOOST DISABLE Register */ + __IO uint32_t vregctrl; /**< \b 0x004: BOOST VREGCTRL Register */ + __I uint32_t ipeak; /**< \b 0x008: BOOST IPEAK Register */ + __I uint32_t maxton; /**< \b 0x00C: BOOST MAXTON Register */ + __I uint32_t iload; /**< \b 0x010: BOOST ILOAD Register */ + __IO uint32_t alert; /**< \b 0x014: BOOST ALERT Register */ + __I uint32_t rdy; /**< \b 0x018: BOOST RDY Register */ + __I uint32_t zxcal; /**< \b 0x01C: BOOST ZXCAL Register */ + __IO uint32_t inten; /**< \b 0x020: BOOST INTEN Register */ + __IO uint32_t intfl; /**< \b 0x024: BOOST INTFL Register */ +} mxc_boost_regs_t; + +/* Register offsets for module BOOST */ +/** + * @ingroup boost_registers + * @defgroup BOOST_Register_Offsets Register Offsets + * @brief BOOST Peripheral Register Offsets from the BOOST Base Peripheral Address. + * @{ + */ +#define MXC_R_BOOST_DISABLE ((uint32_t)0x00000000UL) /**< Offset from BOOST Base Address: 0x0000 */ +#define MXC_R_BOOST_VREGCTRL ((uint32_t)0x00000004UL) /**< Offset from BOOST Base Address: 0x0004 */ +#define MXC_R_BOOST_IPEAK ((uint32_t)0x00000008UL) /**< Offset from BOOST Base Address: 0x0008 */ +#define MXC_R_BOOST_MAXTON ((uint32_t)0x0000000CUL) /**< Offset from BOOST Base Address: 0x000C */ +#define MXC_R_BOOST_ILOAD ((uint32_t)0x00000010UL) /**< Offset from BOOST Base Address: 0x0010 */ +#define MXC_R_BOOST_ALERT ((uint32_t)0x00000014UL) /**< Offset from BOOST Base Address: 0x0014 */ +#define MXC_R_BOOST_RDY ((uint32_t)0x00000018UL) /**< Offset from BOOST Base Address: 0x0018 */ +#define MXC_R_BOOST_ZXCAL ((uint32_t)0x0000001CUL) /**< Offset from BOOST Base Address: 0x001C */ +#define MXC_R_BOOST_INTEN ((uint32_t)0x00000020UL) /**< Offset from BOOST Base Address: 0x0020 */ +#define MXC_R_BOOST_INTFL ((uint32_t)0x00000024UL) /**< Offset from BOOST Base Address: 0x0024 */ +/**@} end of group boost_registers */ + +/** + * @ingroup boost_registers + * @defgroup BOOST_DISABLE BOOST_DISABLE + * @brief Boost Disable Register. + * @{ + */ +#define MXC_F_BOOST_DISABLE_DIS_POS 0 /**< DISABLE_DIS Position */ +#define MXC_F_BOOST_DISABLE_DIS ((uint32_t)(0x1UL << MXC_F_BOOST_DISABLE_DIS_POS)) /**< DISABLE_DIS Mask */ + +/**@} end of group BOOST_DISABLE_Register */ + +/** + * @ingroup boost_registers + * @defgroup BOOST_VREGCTRL BOOST_VREGCTRL + * @brief Boost Voltage Regulator Control Register. + * @{ + */ +#define MXC_F_BOOST_VREGCTRL_SET_POS 0 /**< VREGCTRL_SET Position */ +#define MXC_F_BOOST_VREGCTRL_SET ((uint32_t)(0x1FUL << MXC_F_BOOST_VREGCTRL_SET_POS)) /**< VREGCTRL_SET Mask */ + +/**@} end of group BOOST_VREGCTRL_Register */ + +/** + * @ingroup boost_registers + * @defgroup BOOST_IPEAK BOOST_IPEAK + * @brief Low Side FET Peak Current Register. + * @{ + */ +#define MXC_F_BOOST_IPEAK_SET_POS 0 /**< IPEAK_SET Position */ +#define MXC_F_BOOST_IPEAK_SET ((uint32_t)(0x7UL << MXC_F_BOOST_IPEAK_SET_POS)) /**< IPEAK_SET Mask */ + +/**@} end of group BOOST_IPEAK_Register */ + +/** + * @ingroup boost_registers + * @defgroup BOOST_MAXTON BOOST_MAXTON + * @brief Maximum Low Side FET Time-On Register. + * @{ + */ +#define MXC_F_BOOST_MAXTON_THD_POS 0 /**< MAXTON_THD Position */ +#define MXC_F_BOOST_MAXTON_THD ((uint32_t)(0xFUL << MXC_F_BOOST_MAXTON_THD_POS)) /**< MAXTON_THD Mask */ + +/**@} end of group BOOST_MAXTON_Register */ + +/** + * @ingroup boost_registers + * @defgroup BOOST_ILOAD BOOST_ILOAD + * @brief Boost Cycle Count Register. + * @{ + */ +#define MXC_F_BOOST_ILOAD_CNT_POS 0 /**< ILOAD_CNT Position */ +#define MXC_F_BOOST_ILOAD_CNT ((uint32_t)(0xFFUL << MXC_F_BOOST_ILOAD_CNT_POS)) /**< ILOAD_CNT Mask */ + +/**@} end of group BOOST_ILOAD_Register */ + +/** + * @ingroup boost_registers + * @defgroup BOOST_ALERT BOOST_ALERT + * @brief Boost Cycle Count Alert Register. + * @{ + */ +#define MXC_F_BOOST_ALERT_THD_POS 0 /**< ALERT_THD Position */ +#define MXC_F_BOOST_ALERT_THD ((uint32_t)(0xFFUL << MXC_F_BOOST_ALERT_THD_POS)) /**< ALERT_THD Mask */ + +/**@} end of group BOOST_ALERT_Register */ + +/** + * @ingroup boost_registers + * @defgroup BOOST_RDY BOOST_RDY + * @brief Boost Output Ready Register. + * @{ + */ +#define MXC_F_BOOST_RDY_OUT_POS 0 /**< RDY_OUT Position */ +#define MXC_F_BOOST_RDY_OUT ((uint32_t)(0x1UL << MXC_F_BOOST_RDY_OUT_POS)) /**< RDY_OUT Mask */ + +/**@} end of group BOOST_RDY_Register */ + +/** + * @ingroup boost_registers + * @defgroup BOOST_ZXCAL BOOST_ZXCAL + * @brief Zero Cross Calibration Register. + * @{ + */ +#define MXC_F_BOOST_ZXCAL_VAL_POS 0 /**< ZXCAL_VAL Position */ +#define MXC_F_BOOST_ZXCAL_VAL ((uint32_t)(0x1FUL << MXC_F_BOOST_ZXCAL_VAL_POS)) /**< ZXCAL_VAL Mask */ + +/**@} end of group BOOST_ZXCAL_Register */ + +/** + * @ingroup boost_registers + * @defgroup BOOST_INTEN BOOST_INTEN + * @brief Boost Alert Interrupt Enable Register. + * @{ + */ +#define MXC_F_BOOST_INTEN_ALERT_POS 0 /**< INTEN_ALERT Position */ +#define MXC_F_BOOST_INTEN_ALERT ((uint32_t)(0x1UL << MXC_F_BOOST_INTEN_ALERT_POS)) /**< INTEN_ALERT Mask */ + +/**@} end of group BOOST_INTEN_Register */ + +/** + * @ingroup boost_registers + * @defgroup BOOST_INTFL BOOST_INTFL + * @brief Boost Alert Interrupt Status Register. + * @{ + */ +#define MXC_F_BOOST_INTFL_ALERT_POS 0 /**< INTFL_ALERT Position */ +#define MXC_F_BOOST_INTFL_ALERT ((uint32_t)(0x1UL << MXC_F_BOOST_INTFL_ALERT_POS)) /**< INTFL_ALERT Mask */ + +/**@} end of group BOOST_INTFL_Register */ + +#ifdef __cplusplus +} +#endif + +#endif // LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_BOOST_REGS_H_ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/crc_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/crc_regs.h index 1cbe04b2618..8f2430af694 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/crc_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/crc_regs.h @@ -78,7 +78,6 @@ typedef struct { __IO uint16_t datain16; /**< \b 0x0004: CRC DATAIN16 Register */ __IO uint8_t datain8; /**< \b 0x0004: CRC DATAIN8 Register */ }; - __R uint8_t rsv_0x5_0x7[3]; __IO uint32_t poly; /**< \b 0x0008: CRC POLY Register */ __IO uint32_t val; /**< \b 0x000C: CRC VAL Register */ } mxc_crc_regs_t; diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/dma_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/dma_regs.h index 0d77fc7711d..7c196348590 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/dma_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/dma_regs.h @@ -176,22 +176,26 @@ typedef struct { #define MXC_F_DMA_CTRL_REQUEST ((uint32_t)(0x3FUL << MXC_F_DMA_CTRL_REQUEST_POS)) /**< CTRL_REQUEST Mask */ #define MXC_V_DMA_CTRL_REQUEST_MEMTOMEM ((uint32_t)0x0UL) /**< CTRL_REQUEST_MEMTOMEM Value */ #define MXC_S_DMA_CTRL_REQUEST_MEMTOMEM (MXC_V_DMA_CTRL_REQUEST_MEMTOMEM << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_MEMTOMEM Setting */ +#define MXC_V_DMA_CTRL_REQUEST_SPIRX ((uint32_t)0x1UL) /**< CTRL_REQUEST_SPIRX Value */ +#define MXC_S_DMA_CTRL_REQUEST_SPIRX (MXC_V_DMA_CTRL_REQUEST_SPIRX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_SPIRX Setting */ #define MXC_V_DMA_CTRL_REQUEST_UARTRX ((uint32_t)0x4UL) /**< CTRL_REQUEST_UARTRX Value */ #define MXC_S_DMA_CTRL_REQUEST_UARTRX (MXC_V_DMA_CTRL_REQUEST_UARTRX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_UARTRX Setting */ -#define MXC_V_DMA_CTRL_REQUEST_I3CRX ((uint32_t)0x7UL) /**< CTRL_REQUEST_I3CRX Value */ -#define MXC_S_DMA_CTRL_REQUEST_I3CRX (MXC_V_DMA_CTRL_REQUEST_I3CRX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_I3CRX Setting */ -#define MXC_V_DMA_CTRL_REQUEST_SPIRX ((uint32_t)0xFUL) /**< CTRL_REQUEST_SPIRX Value */ -#define MXC_S_DMA_CTRL_REQUEST_SPIRX (MXC_V_DMA_CTRL_REQUEST_SPIRX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_SPIRX Setting */ +#define MXC_V_DMA_CTRL_REQUEST_I3CRX_CONT ((uint32_t)0x7UL) /**< CTRL_REQUEST_I3CRX_CONT Value */ +#define MXC_S_DMA_CTRL_REQUEST_I3CRX_CONT (MXC_V_DMA_CTRL_REQUEST_I3CRX_CONT << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_I3CRX_CONT Setting */ +#define MXC_V_DMA_CTRL_REQUEST_I3CRX_TARG ((uint32_t)0x8UL) /**< CTRL_REQUEST_I3CRX_TARG Value */ +#define MXC_S_DMA_CTRL_REQUEST_I3CRX_TARG (MXC_V_DMA_CTRL_REQUEST_I3CRX_TARG << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_I3CRX_TARG Setting */ #define MXC_V_DMA_CTRL_REQUEST_AESRX ((uint32_t)0x10UL) /**< CTRL_REQUEST_AESRX Value */ #define MXC_S_DMA_CTRL_REQUEST_AESRX (MXC_V_DMA_CTRL_REQUEST_AESRX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_AESRX Setting */ +#define MXC_V_DMA_CTRL_REQUEST_SPITX ((uint32_t)0x21UL) /**< CTRL_REQUEST_SPITX Value */ +#define MXC_S_DMA_CTRL_REQUEST_SPITX (MXC_V_DMA_CTRL_REQUEST_SPITX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_SPITX Setting */ #define MXC_V_DMA_CTRL_REQUEST_UARTTX ((uint32_t)0x24UL) /**< CTRL_REQUEST_UARTTX Value */ #define MXC_S_DMA_CTRL_REQUEST_UARTTX (MXC_V_DMA_CTRL_REQUEST_UARTTX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_UARTTX Setting */ -#define MXC_V_DMA_CTRL_REQUEST_I3CTX ((uint32_t)0x27UL) /**< CTRL_REQUEST_I3CTX Value */ -#define MXC_S_DMA_CTRL_REQUEST_I3CTX (MXC_V_DMA_CTRL_REQUEST_I3CTX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_I3CTX Setting */ +#define MXC_V_DMA_CTRL_REQUEST_I3CTX_CONT ((uint32_t)0x27UL) /**< CTRL_REQUEST_I3CTX_CONT Value */ +#define MXC_S_DMA_CTRL_REQUEST_I3CTX_CONT (MXC_V_DMA_CTRL_REQUEST_I3CTX_CONT << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_I3CTX_CONT Setting */ +#define MXC_V_DMA_CTRL_REQUEST_I3CTX_TARG ((uint32_t)0x28UL) /**< CTRL_REQUEST_I3CTX_TARG Value */ +#define MXC_S_DMA_CTRL_REQUEST_I3CTX_TARG (MXC_V_DMA_CTRL_REQUEST_I3CTX_TARG << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_I3CTX_TARG Setting */ #define MXC_V_DMA_CTRL_REQUEST_CRCTX ((uint32_t)0x2CUL) /**< CTRL_REQUEST_CRCTX Value */ #define MXC_S_DMA_CTRL_REQUEST_CRCTX (MXC_V_DMA_CTRL_REQUEST_CRCTX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_CRCTX Setting */ -#define MXC_V_DMA_CTRL_REQUEST_SPITX ((uint32_t)0x2FUL) /**< CTRL_REQUEST_SPITX Value */ -#define MXC_S_DMA_CTRL_REQUEST_SPITX (MXC_V_DMA_CTRL_REQUEST_SPITX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_SPITX Setting */ #define MXC_V_DMA_CTRL_REQUEST_AESTX ((uint32_t)0x30UL) /**< CTRL_REQUEST_AESTX Value */ #define MXC_S_DMA_CTRL_REQUEST_AESTX (MXC_V_DMA_CTRL_REQUEST_AESTX << MXC_F_DMA_CTRL_REQUEST_POS) /**< CTRL_REQUEST_AESTX Setting */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/fcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/fcr_regs.h index 01f4cd18d34..da7cb86b8e8 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/fcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/fcr_regs.h @@ -72,12 +72,19 @@ extern "C" { * Structure type to access the FCR Registers. */ typedef struct { - __IO uint32_t fctrl0; /**< \b 0x00: FCR FCTRL0 Register */ - __IO uint32_t fctrl1; /**< \b 0x04: FCR FCTRL1 Register */ - __IO uint32_t fctrl2; /**< \b 0x08: FCR FCTRL2 Register */ - __IO uint32_t fctrl3; /**< \b 0x0C: FCR FCTRL3 Register */ + __IO uint32_t ctrl; /**< \b 0x00: FCR CTRL Register */ + __IO uint32_t autocal0; /**< \b 0x04: FCR AUTOCAL0 Register */ + __IO uint32_t autocal1; /**< \b 0x08: FCR AUTOCAL1 Register */ + __IO uint32_t autocal2; /**< \b 0x0C: FCR AUTOCAL2 Register */ __R uint32_t rsv_0x10_0x17[2]; __IO uint32_t erfoks; /**< \b 0x18: FCR ERFOKS Register */ + __IO uint32_t intfl; /**< \b 0x1C: FCR INTFL Register */ + __IO uint32_t inten; /**< \b 0x20: FCR INTEN Register */ + __R uint32_t rsv_0x24; + __IO uint32_t frqcntctrl; /**< \b 0x28: FCR FRQCNTCTRL Register */ + __IO uint32_t frqcntcmp; /**< \b 0x2C: FCR FRQCNTCMP Register */ + __I uint32_t refclk; /**< \b 0x30: FCR REFCLK Register */ + __I uint32_t cmpclk; /**< \b 0x34: FCR CMPCLK Register */ } mxc_fcr_regs_t; /* Register offsets for module FCR */ @@ -87,86 +94,92 @@ typedef struct { * @brief FCR Peripheral Register Offsets from the FCR Base Peripheral Address. * @{ */ -#define MXC_R_FCR_FCTRL0 ((uint32_t)0x00000000UL) /**< Offset from FCR Base Address: 0x0000 */ -#define MXC_R_FCR_FCTRL1 ((uint32_t)0x00000004UL) /**< Offset from FCR Base Address: 0x0004 */ -#define MXC_R_FCR_FCTRL2 ((uint32_t)0x00000008UL) /**< Offset from FCR Base Address: 0x0008 */ -#define MXC_R_FCR_FCTRL3 ((uint32_t)0x0000000CUL) /**< Offset from FCR Base Address: 0x000C */ +#define MXC_R_FCR_CTRL ((uint32_t)0x00000000UL) /**< Offset from FCR Base Address: 0x0000 */ +#define MXC_R_FCR_AUTOCAL0 ((uint32_t)0x00000004UL) /**< Offset from FCR Base Address: 0x0004 */ +#define MXC_R_FCR_AUTOCAL1 ((uint32_t)0x00000008UL) /**< Offset from FCR Base Address: 0x0008 */ +#define MXC_R_FCR_AUTOCAL2 ((uint32_t)0x0000000CUL) /**< Offset from FCR Base Address: 0x000C */ #define MXC_R_FCR_ERFOKS ((uint32_t)0x00000018UL) /**< Offset from FCR Base Address: 0x0018 */ +#define MXC_R_FCR_INTFL ((uint32_t)0x0000001CUL) /**< Offset from FCR Base Address: 0x001C */ +#define MXC_R_FCR_INTEN ((uint32_t)0x00000020UL) /**< Offset from FCR Base Address: 0x0020 */ +#define MXC_R_FCR_FRQCNTCTRL ((uint32_t)0x00000028UL) /**< Offset from FCR Base Address: 0x0028 */ +#define MXC_R_FCR_FRQCNTCMP ((uint32_t)0x0000002CUL) /**< Offset from FCR Base Address: 0x002C */ +#define MXC_R_FCR_REFCLK ((uint32_t)0x00000030UL) /**< Offset from FCR Base Address: 0x0030 */ +#define MXC_R_FCR_CMPCLK ((uint32_t)0x00000034UL) /**< Offset from FCR Base Address: 0x0034 */ /**@} end of group fcr_registers */ /** * @ingroup fcr_registers - * @defgroup FCR_FCTRL0 FCR_FCTRL0 - * @brief Register 0. + * @defgroup FCR_CTRL FCR_CTRL + * @brief Function Control 0 Register. * @{ */ -#define MXC_F_FCR_FCTRL0_BTLELDO_TX_POS 0 /**< FCTRL0_BTLELDO_TX Position */ -#define MXC_F_FCR_FCTRL0_BTLELDO_TX ((uint32_t)(0x1FUL << MXC_F_FCR_FCTRL0_BTLELDO_TX_POS)) /**< FCTRL0_BTLELDO_TX Mask */ +#define MXC_F_FCR_CTRL_BTLELDO_RF_POS 0 /**< CTRL_BTLELDO_RF Position */ +#define MXC_F_FCR_CTRL_BTLELDO_RF ((uint32_t)(0x1FUL << MXC_F_FCR_CTRL_BTLELDO_RF_POS)) /**< CTRL_BTLELDO_RF Mask */ -#define MXC_F_FCR_FCTRL0_BTLELDO_RX_POS 8 /**< FCTRL0_BTLELDO_RX Position */ -#define MXC_F_FCR_FCTRL0_BTLELDO_RX ((uint32_t)(0x1FUL << MXC_F_FCR_FCTRL0_BTLELDO_RX_POS)) /**< FCTRL0_BTLELDO_RX Mask */ +#define MXC_F_FCR_CTRL_BTLELDO_BB_POS 8 /**< CTRL_BTLELDO_BB Position */ +#define MXC_F_FCR_CTRL_BTLELDO_BB ((uint32_t)(0x1FUL << MXC_F_FCR_CTRL_BTLELDO_BB_POS)) /**< CTRL_BTLELDO_BB Mask */ -#define MXC_F_FCR_FCTRL0_I3CDGEN0_POS 20 /**< FCTRL0_I3CDGEN0 Position */ -#define MXC_F_FCR_FCTRL0_I3CDGEN0 ((uint32_t)(0x1UL << MXC_F_FCR_FCTRL0_I3CDGEN0_POS)) /**< FCTRL0_I3CDGEN0 Mask */ +#define MXC_F_FCR_CTRL_I3CDGEN0_POS 20 /**< CTRL_I3CDGEN0 Position */ +#define MXC_F_FCR_CTRL_I3CDGEN0 ((uint32_t)(0x1UL << MXC_F_FCR_CTRL_I3CDGEN0_POS)) /**< CTRL_I3CDGEN0 Mask */ -#define MXC_F_FCR_FCTRL0_I3CDGEN1_POS 21 /**< FCTRL0_I3CDGEN1 Position */ -#define MXC_F_FCR_FCTRL0_I3CDGEN1 ((uint32_t)(0x1UL << MXC_F_FCR_FCTRL0_I3CDGEN1_POS)) /**< FCTRL0_I3CDGEN1 Mask */ +#define MXC_F_FCR_CTRL_I3CDGEN1_POS 21 /**< CTRL_I3CDGEN1 Position */ +#define MXC_F_FCR_CTRL_I3CDGEN1 ((uint32_t)(0x1UL << MXC_F_FCR_CTRL_I3CDGEN1_POS)) /**< CTRL_I3CDGEN1 Mask */ -/**@} end of group FCR_FCTRL0_Register */ +/**@} end of group FCR_CTRL_Register */ /** * @ingroup fcr_registers - * @defgroup FCR_FCTRL1 FCR_FCTRL1 - * @brief Register 1. + * @defgroup FCR_AUTOCAL0 FCR_AUTOCAL0 + * @brief Automatic Calibration 0 Register. * @{ */ -#define MXC_F_FCR_FCTRL1_AC_EN_POS 0 /**< FCTRL1_AC_EN Position */ -#define MXC_F_FCR_FCTRL1_AC_EN ((uint32_t)(0x1UL << MXC_F_FCR_FCTRL1_AC_EN_POS)) /**< FCTRL1_AC_EN Mask */ +#define MXC_F_FCR_AUTOCAL0_EN_POS 0 /**< AUTOCAL0_EN Position */ +#define MXC_F_FCR_AUTOCAL0_EN ((uint32_t)(0x1UL << MXC_F_FCR_AUTOCAL0_EN_POS)) /**< AUTOCAL0_EN Mask */ -#define MXC_F_FCR_FCTRL1_AC_RUN_POS 1 /**< FCTRL1_AC_RUN Position */ -#define MXC_F_FCR_FCTRL1_AC_RUN ((uint32_t)(0x1UL << MXC_F_FCR_FCTRL1_AC_RUN_POS)) /**< FCTRL1_AC_RUN Mask */ +#define MXC_F_FCR_AUTOCAL0_RUN_POS 1 /**< AUTOCAL0_RUN Position */ +#define MXC_F_FCR_AUTOCAL0_RUN ((uint32_t)(0x1UL << MXC_F_FCR_AUTOCAL0_RUN_POS)) /**< AUTOCAL0_RUN Mask */ -#define MXC_F_FCR_FCTRL1_LOAD_TRIM_POS 2 /**< FCTRL1_LOAD_TRIM Position */ -#define MXC_F_FCR_FCTRL1_LOAD_TRIM ((uint32_t)(0x1UL << MXC_F_FCR_FCTRL1_LOAD_TRIM_POS)) /**< FCTRL1_LOAD_TRIM Mask */ +#define MXC_F_FCR_AUTOCAL0_LOAD_TRIM_POS 2 /**< AUTOCAL0_LOAD_TRIM Position */ +#define MXC_F_FCR_AUTOCAL0_LOAD_TRIM ((uint32_t)(0x1UL << MXC_F_FCR_AUTOCAL0_LOAD_TRIM_POS)) /**< AUTOCAL0_LOAD_TRIM Mask */ -#define MXC_F_FCR_FCTRL1_GAIN_INV_POS 3 /**< FCTRL1_GAIN_INV Position */ -#define MXC_F_FCR_FCTRL1_GAIN_INV ((uint32_t)(0x1UL << MXC_F_FCR_FCTRL1_GAIN_INV_POS)) /**< FCTRL1_GAIN_INV Mask */ +#define MXC_F_FCR_AUTOCAL0_GAIN_INV_POS 3 /**< AUTOCAL0_GAIN_INV Position */ +#define MXC_F_FCR_AUTOCAL0_GAIN_INV ((uint32_t)(0x1UL << MXC_F_FCR_AUTOCAL0_GAIN_INV_POS)) /**< AUTOCAL0_GAIN_INV Mask */ -#define MXC_F_FCR_FCTRL1_ATOMIC_POS 4 /**< FCTRL1_ATOMIC Position */ -#define MXC_F_FCR_FCTRL1_ATOMIC ((uint32_t)(0x1UL << MXC_F_FCR_FCTRL1_ATOMIC_POS)) /**< FCTRL1_ATOMIC Mask */ +#define MXC_F_FCR_AUTOCAL0_ATOMIC_POS 4 /**< AUTOCAL0_ATOMIC Position */ +#define MXC_F_FCR_AUTOCAL0_ATOMIC ((uint32_t)(0x1UL << MXC_F_FCR_AUTOCAL0_ATOMIC_POS)) /**< AUTOCAL0_ATOMIC Mask */ -#define MXC_F_FCR_FCTRL1_MU_POS 8 /**< FCTRL1_MU Position */ -#define MXC_F_FCR_FCTRL1_MU ((uint32_t)(0xFFFUL << MXC_F_FCR_FCTRL1_MU_POS)) /**< FCTRL1_MU Mask */ +#define MXC_F_FCR_AUTOCAL0_MU_POS 8 /**< AUTOCAL0_MU Position */ +#define MXC_F_FCR_AUTOCAL0_MU ((uint32_t)(0xFFFUL << MXC_F_FCR_AUTOCAL0_MU_POS)) /**< AUTOCAL0_MU Mask */ -#define MXC_F_FCR_FCTRL1_AC_TRIM_OUT_POS 23 /**< FCTRL1_AC_TRIM_OUT Position */ -#define MXC_F_FCR_FCTRL1_AC_TRIM_OUT ((uint32_t)(0x1FFUL << MXC_F_FCR_FCTRL1_AC_TRIM_OUT_POS)) /**< FCTRL1_AC_TRIM_OUT Mask */ +#define MXC_F_FCR_AUTOCAL0_TRIM_OUT_POS 23 /**< AUTOCAL0_TRIM_OUT Position */ +#define MXC_F_FCR_AUTOCAL0_TRIM_OUT ((uint32_t)(0x1FFUL << MXC_F_FCR_AUTOCAL0_TRIM_OUT_POS)) /**< AUTOCAL0_TRIM_OUT Mask */ -/**@} end of group FCR_FCTRL1_Register */ +/**@} end of group FCR_AUTOCAL0_Register */ /** * @ingroup fcr_registers - * @defgroup FCR_FCTRL2 FCR_FCTRL2 - * @brief Register 2. + * @defgroup FCR_AUTOCAL1 FCR_AUTOCAL1 + * @brief Automatic Calibration 1 Register. * @{ */ -#define MXC_F_FCR_FCTRL2_AC_INIT_TRIM_POS 0 /**< FCTRL2_AC_INIT_TRIM Position */ -#define MXC_F_FCR_FCTRL2_AC_INIT_TRIM ((uint32_t)(0x1FFUL << MXC_F_FCR_FCTRL2_AC_INIT_TRIM_POS)) /**< FCTRL2_AC_INIT_TRIM Mask */ +#define MXC_F_FCR_AUTOCAL1_INIT_TRIM_POS 0 /**< AUTOCAL1_INIT_TRIM Position */ +#define MXC_F_FCR_AUTOCAL1_INIT_TRIM ((uint32_t)(0x1FFUL << MXC_F_FCR_AUTOCAL1_INIT_TRIM_POS)) /**< AUTOCAL1_INIT_TRIM Mask */ -/**@} end of group FCR_FCTRL2_Register */ +/**@} end of group FCR_AUTOCAL1_Register */ /** * @ingroup fcr_registers - * @defgroup FCR_FCTRL3 FCR_FCTRL3 - * @brief Register 3. + * @defgroup FCR_AUTOCAL2 FCR_AUTOCAL2 + * @brief Automatic Calibration 2 Register. * @{ */ -#define MXC_F_FCR_FCTRL3_AC_RUNTIME_POS 0 /**< FCTRL3_AC_RUNTIME Position */ -#define MXC_F_FCR_FCTRL3_AC_RUNTIME ((uint32_t)(0xFFUL << MXC_F_FCR_FCTRL3_AC_RUNTIME_POS)) /**< FCTRL3_AC_RUNTIME Mask */ +#define MXC_F_FCR_AUTOCAL2_RUNTIME_POS 0 /**< AUTOCAL2_RUNTIME Position */ +#define MXC_F_FCR_AUTOCAL2_RUNTIME ((uint32_t)(0xFFUL << MXC_F_FCR_AUTOCAL2_RUNTIME_POS)) /**< AUTOCAL2_RUNTIME Mask */ -#define MXC_F_FCR_FCTRL3_AC_DIV_POS 8 /**< FCTRL3_AC_DIV Position */ -#define MXC_F_FCR_FCTRL3_AC_DIV ((uint32_t)(0x1FFFUL << MXC_F_FCR_FCTRL3_AC_DIV_POS)) /**< FCTRL3_AC_DIV Mask */ +#define MXC_F_FCR_AUTOCAL2_DIV_POS 8 /**< AUTOCAL2_DIV Position */ +#define MXC_F_FCR_AUTOCAL2_DIV ((uint32_t)(0x1FFFUL << MXC_F_FCR_AUTOCAL2_DIV_POS)) /**< AUTOCAL2_DIV Mask */ -/**@} end of group FCR_FCTRL3_Register */ +/**@} end of group FCR_AUTOCAL2_Register */ /** * @ingroup fcr_registers @@ -195,6 +208,87 @@ typedef struct { /**@} end of group FCR_ERFOKS_Register */ +/** + * @ingroup fcr_registers + * @defgroup FCR_INTFL FCR_INTFL + * @brief Interrupt Flag Register. + * @{ + */ +#define MXC_F_FCR_INTFL_ERTOC_RDY_POS 0 /**< INTFL_ERTOC_RDY Position */ +#define MXC_F_FCR_INTFL_ERTOC_RDY ((uint32_t)(0x1UL << MXC_F_FCR_INTFL_ERTOC_RDY_POS)) /**< INTFL_ERTOC_RDY Mask */ + +#define MXC_F_FCR_INTFL_FRQCNT_POS 1 /**< INTFL_FRQCNT Position */ +#define MXC_F_FCR_INTFL_FRQCNT ((uint32_t)(0x1UL << MXC_F_FCR_INTFL_FRQCNT_POS)) /**< INTFL_FRQCNT Mask */ + +/**@} end of group FCR_INTFL_Register */ + +/** + * @ingroup fcr_registers + * @defgroup FCR_INTEN FCR_INTEN + * @brief Interrupt Enable Register. + * @{ + */ +#define MXC_F_FCR_INTEN_ERTOC_RDY_POS 0 /**< INTEN_ERTOC_RDY Position */ +#define MXC_F_FCR_INTEN_ERTOC_RDY ((uint32_t)(0x1UL << MXC_F_FCR_INTEN_ERTOC_RDY_POS)) /**< INTEN_ERTOC_RDY Mask */ + +#define MXC_F_FCR_INTEN_FRQCNT_POS 1 /**< INTEN_FRQCNT Position */ +#define MXC_F_FCR_INTEN_FRQCNT ((uint32_t)(0x1UL << MXC_F_FCR_INTEN_FRQCNT_POS)) /**< INTEN_FRQCNT Mask */ + +/**@} end of group FCR_INTEN_Register */ + +/** + * @ingroup fcr_registers + * @defgroup FCR_FRQCNTCTRL FCR_FRQCNTCTRL + * @brief Frequency Counter Control Register. + * @{ + */ +#define MXC_F_FCR_FRQCNTCTRL_START_POS 0 /**< FRQCNTCTRL_START Position */ +#define MXC_F_FCR_FRQCNTCTRL_START ((uint32_t)(0x1UL << MXC_F_FCR_FRQCNTCTRL_START_POS)) /**< FRQCNTCTRL_START Mask */ + +#define MXC_F_FCR_FRQCNTCTRL_CMP_CLKSEL_POS 1 /**< FRQCNTCTRL_CMP_CLKSEL Position */ +#define MXC_F_FCR_FRQCNTCTRL_CMP_CLKSEL ((uint32_t)(0x3UL << MXC_F_FCR_FRQCNTCTRL_CMP_CLKSEL_POS)) /**< FRQCNTCTRL_CMP_CLKSEL Mask */ +#define MXC_V_FCR_FRQCNTCTRL_CMP_CLKSEL_RTC ((uint32_t)0x0UL) /**< FRQCNTCTRL_CMP_CLKSEL_RTC Value */ +#define MXC_S_FCR_FRQCNTCTRL_CMP_CLKSEL_RTC (MXC_V_FCR_FRQCNTCTRL_CMP_CLKSEL_RTC << MXC_F_FCR_FRQCNTCTRL_CMP_CLKSEL_POS) /**< FRQCNTCTRL_CMP_CLKSEL_RTC Setting */ +#define MXC_V_FCR_FRQCNTCTRL_CMP_CLKSEL_EXT_GPIO ((uint32_t)0x2UL) /**< FRQCNTCTRL_CMP_CLKSEL_EXT_GPIO Value */ +#define MXC_S_FCR_FRQCNTCTRL_CMP_CLKSEL_EXT_GPIO (MXC_V_FCR_FRQCNTCTRL_CMP_CLKSEL_EXT_GPIO << MXC_F_FCR_FRQCNTCTRL_CMP_CLKSEL_POS) /**< FRQCNTCTRL_CMP_CLKSEL_EXT_GPIO Setting */ +#define MXC_V_FCR_FRQCNTCTRL_CMP_CLKSEL_INRO ((uint32_t)0x3UL) /**< FRQCNTCTRL_CMP_CLKSEL_INRO Value */ +#define MXC_S_FCR_FRQCNTCTRL_CMP_CLKSEL_INRO (MXC_V_FCR_FRQCNTCTRL_CMP_CLKSEL_INRO << MXC_F_FCR_FRQCNTCTRL_CMP_CLKSEL_POS) /**< FRQCNTCTRL_CMP_CLKSEL_INRO Setting */ + +/**@} end of group FCR_FRQCNTCTRL_Register */ + +/** + * @ingroup fcr_registers + * @defgroup FCR_FRQCNTCMP FCR_FRQCNTCMP + * @brief Frequency Counter Compared Target Register. + * @{ + */ +#define MXC_F_FCR_FRQCNTCMP_TARGET_POS 0 /**< FRQCNTCMP_TARGET Position */ +#define MXC_F_FCR_FRQCNTCMP_TARGET ((uint32_t)(0x3FFFUL << MXC_F_FCR_FRQCNTCMP_TARGET_POS)) /**< FRQCNTCMP_TARGET Mask */ + +/**@} end of group FCR_FRQCNTCMP_Register */ + +/** + * @ingroup fcr_registers + * @defgroup FCR_REFCLK FCR_REFCLK + * @brief Reference Clock Result Register. + * @{ + */ +#define MXC_F_FCR_REFCLK_RESULT_POS 0 /**< REFCLK_RESULT Position */ +#define MXC_F_FCR_REFCLK_RESULT ((uint32_t)(0xFFFFFUL << MXC_F_FCR_REFCLK_RESULT_POS)) /**< REFCLK_RESULT Mask */ + +/**@} end of group FCR_REFCLK_Register */ + +/** + * @ingroup fcr_registers + * @defgroup FCR_CMPCLK FCR_CMPCLK + * @brief Compared Clock Result Register. + * @{ + */ +#define MXC_F_FCR_CMPCLK_RESULT_POS 0 /**< CMPCLK_RESULT Position */ +#define MXC_F_FCR_CMPCLK_RESULT ((uint32_t)(0x3FFFUL << MXC_F_FCR_CMPCLK_RESULT_POS)) /**< CMPCLK_RESULT Mask */ + +/**@} end of group FCR_CMPCLK_Register */ + #ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/flc_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/flc_regs.h index 0027d3c335b..491a95737d0 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/flc_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/flc_regs.h @@ -81,14 +81,6 @@ typedef struct { __IO uint32_t eccdata; /**< \b 0x2C: FLC ECCDATA Register */ __IO uint32_t data[4]; /**< \b 0x30: FLC DATA Register */ __O uint32_t actrl; /**< \b 0x40: FLC ACTRL Register */ - __R uint32_t rsv_0x44_0x7f[15]; - __IO uint32_t welr0; /**< \b 0x80: FLC WELR0 Register */ - __R uint32_t rsv_0x84; - __IO uint32_t welr1; /**< \b 0x88: FLC WELR1 Register */ - __R uint32_t rsv_0x8c; - __IO uint32_t rlr0; /**< \b 0x90: FLC RLR0 Register */ - __R uint32_t rsv_0x94; - __IO uint32_t rlr1; /**< \b 0x98: FLC RLR1 Register */ } mxc_flc_regs_t; /* Register offsets for module FLC */ @@ -105,10 +97,6 @@ typedef struct { #define MXC_R_FLC_ECCDATA ((uint32_t)0x0000002CUL) /**< Offset from FLC Base Address: 0x002C */ #define MXC_R_FLC_DATA ((uint32_t)0x00000030UL) /**< Offset from FLC Base Address: 0x0030 */ #define MXC_R_FLC_ACTRL ((uint32_t)0x00000040UL) /**< Offset from FLC Base Address: 0x0040 */ -#define MXC_R_FLC_WELR0 ((uint32_t)0x00000080UL) /**< Offset from FLC Base Address: 0x0080 */ -#define MXC_R_FLC_WELR1 ((uint32_t)0x00000088UL) /**< Offset from FLC Base Address: 0x0088 */ -#define MXC_R_FLC_RLR0 ((uint32_t)0x00000090UL) /**< Offset from FLC Base Address: 0x0090 */ -#define MXC_R_FLC_RLR1 ((uint32_t)0x00000098UL) /**< Offset from FLC Base Address: 0x0098 */ /**@} end of group flc_registers */ /** @@ -233,50 +221,6 @@ typedef struct { /**@} end of group FLC_ACTRL_Register */ -/** - * @ingroup flc_registers - * @defgroup FLC_WELR0 FLC_WELR0 - * @brief WELR0 - * @{ - */ -#define MXC_F_FLC_WELR0_WELR0_POS 0 /**< WELR0_WELR0 Position */ -#define MXC_F_FLC_WELR0_WELR0 ((uint32_t)(0xFFFFFFFFUL << MXC_F_FLC_WELR0_WELR0_POS)) /**< WELR0_WELR0 Mask */ - -/**@} end of group FLC_WELR0_Register */ - -/** - * @ingroup flc_registers - * @defgroup FLC_WELR1 FLC_WELR1 - * @brief WELR1 - * @{ - */ -#define MXC_F_FLC_WELR1_WELR1_POS 0 /**< WELR1_WELR1 Position */ -#define MXC_F_FLC_WELR1_WELR1 ((uint32_t)(0xFFFFFFFFUL << MXC_F_FLC_WELR1_WELR1_POS)) /**< WELR1_WELR1 Mask */ - -/**@} end of group FLC_WELR1_Register */ - -/** - * @ingroup flc_registers - * @defgroup FLC_RLR0 FLC_RLR0 - * @brief RLR0 - * @{ - */ -#define MXC_F_FLC_RLR0_RLR0_POS 0 /**< RLR0_RLR0 Position */ -#define MXC_F_FLC_RLR0_RLR0 ((uint32_t)(0xFFFFFFFFUL << MXC_F_FLC_RLR0_RLR0_POS)) /**< RLR0_RLR0 Mask */ - -/**@} end of group FLC_RLR0_Register */ - -/** - * @ingroup flc_registers - * @defgroup FLC_RLR1 FLC_RLR1 - * @brief RLR1 - * @{ - */ -#define MXC_F_FLC_RLR1_RLR1_POS 0 /**< RLR1_RLR1 Position */ -#define MXC_F_FLC_RLR1_RLR1 ((uint32_t)(0xFFFFFFFFUL << MXC_F_FLC_RLR1_RLR1_POS)) /**< RLR1_RLR1 Mask */ - -/**@} end of group FLC_RLR1_Register */ - #ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/gcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/gcr_regs.h index 817963f7fc1..3b2350d72fc 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/gcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/gcr_regs.h @@ -91,11 +91,13 @@ typedef struct { __IO uint32_t sysinten; /**< \b 0x54: GCR SYSINTEN Register */ __R uint32_t rsv_0x58_0x63[3]; __IO uint32_t eccerr; /**< \b 0x64: GCR ECCERR Register */ - __R uint32_t rsv_0x68; + __IO uint32_t eccced; /**< \b 0x68: GCR ECCCED Register */ __IO uint32_t eccinten; /**< \b 0x6C: GCR ECCINTEN Register */ __IO uint32_t eccaddr; /**< \b 0x70: GCR ECCADDR Register */ __IO uint32_t btleldoctrl; /**< \b 0x74: GCR BTLELDOCTRL Register */ __IO uint32_t btleldodly; /**< \b 0x78: GCR BTLELDODLY Register */ + __R uint32_t rsv_0x7c; + __IO uint32_t gpr; /**< \b 0x80: GCR GPR Register */ } mxc_gcr_regs_t; /* Register offsets for module GCR */ @@ -120,10 +122,12 @@ typedef struct { #define MXC_R_GCR_REVISION ((uint32_t)0x00000050UL) /**< Offset from GCR Base Address: 0x0050 */ #define MXC_R_GCR_SYSINTEN ((uint32_t)0x00000054UL) /**< Offset from GCR Base Address: 0x0054 */ #define MXC_R_GCR_ECCERR ((uint32_t)0x00000064UL) /**< Offset from GCR Base Address: 0x0064 */ +#define MXC_R_GCR_ECCCED ((uint32_t)0x00000068UL) /**< Offset from GCR Base Address: 0x0068 */ #define MXC_R_GCR_ECCINTEN ((uint32_t)0x0000006CUL) /**< Offset from GCR Base Address: 0x006C */ #define MXC_R_GCR_ECCADDR ((uint32_t)0x00000070UL) /**< Offset from GCR Base Address: 0x0070 */ #define MXC_R_GCR_BTLELDOCTRL ((uint32_t)0x00000074UL) /**< Offset from GCR Base Address: 0x0074 */ #define MXC_R_GCR_BTLELDODLY ((uint32_t)0x00000078UL) /**< Offset from GCR Base Address: 0x0078 */ +#define MXC_R_GCR_GPR ((uint32_t)0x00000080UL) /**< Offset from GCR Base Address: 0x0080 */ /**@} end of group gcr_registers */ /** @@ -191,9 +195,6 @@ typedef struct { #define MXC_F_GCR_RST0_RTC_POS 17 /**< RST0_RTC Position */ #define MXC_F_GCR_RST0_RTC ((uint32_t)(0x1UL << MXC_F_GCR_RST0_RTC_POS)) /**< RST0_RTC Mask */ -#define MXC_F_GCR_RST0_BTLE_POS 18 /**< RST0_BTLE Position */ -#define MXC_F_GCR_RST0_BTLE ((uint32_t)(0x1UL << MXC_F_GCR_RST0_BTLE_POS)) /**< RST0_BTLE Mask */ - #define MXC_F_GCR_RST0_TRNG_POS 24 /**< RST0_TRNG Position */ #define MXC_F_GCR_RST0_TRNG ((uint32_t)(0x1UL << MXC_F_GCR_RST0_TRNG_POS)) /**< RST0_TRNG Mask */ @@ -296,7 +297,7 @@ typedef struct { #define MXC_F_GCR_PM_MODE ((uint32_t)(0xFUL << MXC_F_GCR_PM_MODE_POS)) /**< PM_MODE Mask */ #define MXC_V_GCR_PM_MODE_ACTIVE ((uint32_t)0x0UL) /**< PM_MODE_ACTIVE Value */ #define MXC_S_GCR_PM_MODE_ACTIVE (MXC_V_GCR_PM_MODE_ACTIVE << MXC_F_GCR_PM_MODE_POS) /**< PM_MODE_ACTIVE Setting */ -#define MXC_V_GCR_PM_MODE_BACKUP ((uint32_t)0x9UL) /**< PM_MODE_BACKUP Value */ +#define MXC_V_GCR_PM_MODE_BACKUP ((uint32_t)0x4UL) /**< PM_MODE_BACKUP Value */ #define MXC_S_GCR_PM_MODE_BACKUP (MXC_V_GCR_PM_MODE_BACKUP << MXC_F_GCR_PM_MODE_POS) /**< PM_MODE_BACKUP Setting */ #define MXC_V_GCR_PM_MODE_PDM ((uint32_t)0xAUL) /**< PM_MODE_PDM Value */ #define MXC_S_GCR_PM_MODE_PDM (MXC_V_GCR_PM_MODE_PDM << MXC_F_GCR_PM_MODE_POS) /**< PM_MODE_PDM Setting */ @@ -427,6 +428,12 @@ typedef struct { #define MXC_F_GCR_RST1_AES_POS 10 /**< RST1_AES Position */ #define MXC_F_GCR_RST1_AES ((uint32_t)(0x1UL << MXC_F_GCR_RST1_AES_POS)) /**< RST1_AES Mask */ +#define MXC_F_GCR_RST1_AUTOCAL_POS 12 /**< RST1_AUTOCAL Position */ +#define MXC_F_GCR_RST1_AUTOCAL ((uint32_t)(0x1UL << MXC_F_GCR_RST1_AUTOCAL_POS)) /**< RST1_AUTOCAL Mask */ + +#define MXC_F_GCR_RST1_BTLE_POS 18 /**< RST1_BTLE Position */ +#define MXC_F_GCR_RST1_BTLE ((uint32_t)(0x1UL << MXC_F_GCR_RST1_BTLE_POS)) /**< RST1_BTLE Mask */ + /**@} end of group GCR_RST1_Register */ /** @@ -444,9 +451,6 @@ typedef struct { #define MXC_F_GCR_PCLKDIS1_AES_POS 15 /**< PCLKDIS1_AES Position */ #define MXC_F_GCR_PCLKDIS1_AES ((uint32_t)(0x1UL << MXC_F_GCR_PCLKDIS1_AES_POS)) /**< PCLKDIS1_AES Mask */ -#define MXC_F_GCR_PCLKDIS1_SPI_POS 16 /**< PCLKDIS1_SPI Position */ -#define MXC_F_GCR_PCLKDIS1_SPI ((uint32_t)(0x1UL << MXC_F_GCR_PCLKDIS1_SPI_POS)) /**< PCLKDIS1_SPI Mask */ - #define MXC_F_GCR_PCLKDIS1_DMA1_POS 21 /**< PCLKDIS1_DMA1 Position */ #define MXC_F_GCR_PCLKDIS1_DMA1 ((uint32_t)(0x1UL << MXC_F_GCR_PCLKDIS1_DMA1_POS)) /**< PCLKDIS1_DMA1 Mask */ @@ -505,13 +509,24 @@ typedef struct { /**@} end of group GCR_ECCERR_Register */ +/** + * @ingroup gcr_registers + * @defgroup GCR_ECCCED GCR_ECCCED + * @brief ECC Correctable Error Detect Register. + * @{ + */ +#define MXC_F_GCR_ECCCED_FLASH_POS 0 /**< ECCCED_FLASH Position */ +#define MXC_F_GCR_ECCCED_FLASH ((uint32_t)(0x1UL << MXC_F_GCR_ECCCED_FLASH_POS)) /**< ECCCED_FLASH Mask */ + +/**@} end of group GCR_ECCCED_Register */ + /** * @ingroup gcr_registers * @defgroup GCR_ECCINTEN GCR_ECCINTEN * @brief ECC Interrupt Enable Register * @{ */ -#define MXC_F_GCR_ECCINTEN_FLASH_POS 11 /**< ECCINTEN_FLASH Position */ +#define MXC_F_GCR_ECCINTEN_FLASH_POS 0 /**< ECCINTEN_FLASH Position */ #define MXC_F_GCR_ECCINTEN_FLASH ((uint32_t)(0x1UL << MXC_F_GCR_ECCINTEN_FLASH_POS)) /**< ECCINTEN_FLASH Mask */ /**@} end of group GCR_ECCINTEN_Register */ @@ -548,47 +563,47 @@ typedef struct { * @brief BTLE LDO Control Register * @{ */ -#define MXC_F_GCR_BTLELDOCTRL_TX_EN_POS 0 /**< BTLELDOCTRL_TX_EN Position */ -#define MXC_F_GCR_BTLELDOCTRL_TX_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_TX_EN_POS)) /**< BTLELDOCTRL_TX_EN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_RF_EN_POS 0 /**< BTLELDOCTRL_RF_EN Position */ +#define MXC_F_GCR_BTLELDOCTRL_RF_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RF_EN_POS)) /**< BTLELDOCTRL_RF_EN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_TX_PD_EN_POS 1 /**< BTLELDOCTRL_TX_PD_EN Position */ -#define MXC_F_GCR_BTLELDOCTRL_TX_PD_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_TX_PD_EN_POS)) /**< BTLELDOCTRL_TX_PD_EN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_RF_PD_EN_POS 1 /**< BTLELDOCTRL_RF_PD_EN Position */ +#define MXC_F_GCR_BTLELDOCTRL_RF_PD_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RF_PD_EN_POS)) /**< BTLELDOCTRL_RF_PD_EN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_TX_VSEL_POS 2 /**< BTLELDOCTRL_TX_VSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_TX_VSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_TX_VSEL_POS)) /**< BTLELDOCTRL_TX_VSEL Mask */ +#define MXC_F_GCR_BTLELDOCTRL_RF_VSEL_POS 2 /**< BTLELDOCTRL_RF_VSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_RF_VSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_RF_VSEL_POS)) /**< BTLELDOCTRL_RF_VSEL Mask */ -#define MXC_F_GCR_BTLELDOCTRL_RX_EN_POS 4 /**< BTLELDOCTRL_RX_EN Position */ -#define MXC_F_GCR_BTLELDOCTRL_RX_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RX_EN_POS)) /**< BTLELDOCTRL_RX_EN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_BB_EN_POS 4 /**< BTLELDOCTRL_BB_EN Position */ +#define MXC_F_GCR_BTLELDOCTRL_BB_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_BB_EN_POS)) /**< BTLELDOCTRL_BB_EN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_RX_PD_EN_POS 5 /**< BTLELDOCTRL_RX_PD_EN Position */ -#define MXC_F_GCR_BTLELDOCTRL_RX_PD_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RX_PD_EN_POS)) /**< BTLELDOCTRL_RX_PD_EN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_BB_PD_EN_POS 5 /**< BTLELDOCTRL_BB_PD_EN Position */ +#define MXC_F_GCR_BTLELDOCTRL_BB_PD_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_BB_PD_EN_POS)) /**< BTLELDOCTRL_BB_PD_EN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_RX_VSEL_POS 6 /**< BTLELDOCTRL_RX_VSEL Position */ -#define MXC_F_GCR_BTLELDOCTRL_RX_VSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_RX_VSEL_POS)) /**< BTLELDOCTRL_RX_VSEL Mask */ +#define MXC_F_GCR_BTLELDOCTRL_BB_VSEL_POS 6 /**< BTLELDOCTRL_BB_VSEL Position */ +#define MXC_F_GCR_BTLELDOCTRL_BB_VSEL ((uint32_t)(0x3UL << MXC_F_GCR_BTLELDOCTRL_BB_VSEL_POS)) /**< BTLELDOCTRL_BB_VSEL Mask */ -#define MXC_F_GCR_BTLELDOCTRL_RX_BP_EN_POS 8 /**< BTLELDOCTRL_RX_BP_EN Position */ -#define MXC_F_GCR_BTLELDOCTRL_RX_BP_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RX_BP_EN_POS)) /**< BTLELDOCTRL_RX_BP_EN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_BB_BP_EN_POS 8 /**< BTLELDOCTRL_BB_BP_EN Position */ +#define MXC_F_GCR_BTLELDOCTRL_BB_BP_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_BB_BP_EN_POS)) /**< BTLELDOCTRL_BB_BP_EN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_RX_DISCH_POS 9 /**< BTLELDOCTRL_RX_DISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_RX_DISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RX_DISCH_POS)) /**< BTLELDOCTRL_RX_DISCH Mask */ +#define MXC_F_GCR_BTLELDOCTRL_BB_DISCH_POS 9 /**< BTLELDOCTRL_BB_DISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_BB_DISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_BB_DISCH_POS)) /**< BTLELDOCTRL_BB_DISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_TX_BP_EN_POS 10 /**< BTLELDOCTRL_TX_BP_EN Position */ -#define MXC_F_GCR_BTLELDOCTRL_TX_BP_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_TX_BP_EN_POS)) /**< BTLELDOCTRL_TX_BP_EN Mask */ +#define MXC_F_GCR_BTLELDOCTRL_RF_BP_EN_POS 10 /**< BTLELDOCTRL_RF_BP_EN Position */ +#define MXC_F_GCR_BTLELDOCTRL_RF_BP_EN ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RF_BP_EN_POS)) /**< BTLELDOCTRL_RF_BP_EN Mask */ -#define MXC_F_GCR_BTLELDOCTRL_TX_DISCH_POS 11 /**< BTLELDOCTRL_TX_DISCH Position */ -#define MXC_F_GCR_BTLELDOCTRL_TX_DISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_TX_DISCH_POS)) /**< BTLELDOCTRL_TX_DISCH Mask */ +#define MXC_F_GCR_BTLELDOCTRL_RF_DISCH_POS 11 /**< BTLELDOCTRL_RF_DISCH Position */ +#define MXC_F_GCR_BTLELDOCTRL_RF_DISCH ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RF_DISCH_POS)) /**< BTLELDOCTRL_RF_DISCH Mask */ -#define MXC_F_GCR_BTLELDOCTRL_TX_EN_DLY_POS 12 /**< BTLELDOCTRL_TX_EN_DLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_TX_EN_DLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_TX_EN_DLY_POS)) /**< BTLELDOCTRL_TX_EN_DLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_RF_EN_DLY_POS 12 /**< BTLELDOCTRL_RF_EN_DLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_RF_EN_DLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RF_EN_DLY_POS)) /**< BTLELDOCTRL_RF_EN_DLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_RX_EN_DLY_POS 13 /**< BTLELDOCTRL_RX_EN_DLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_RX_EN_DLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RX_EN_DLY_POS)) /**< BTLELDOCTRL_RX_EN_DLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_BB_EN_DLY_POS 13 /**< BTLELDOCTRL_BB_EN_DLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_BB_EN_DLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_BB_EN_DLY_POS)) /**< BTLELDOCTRL_BB_EN_DLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_RX_BP_EN_DLY_POS 14 /**< BTLELDOCTRL_RX_BP_EN_DLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_RX_BP_EN_DLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RX_BP_EN_DLY_POS)) /**< BTLELDOCTRL_RX_BP_EN_DLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_BB_BP_EN_DLY_POS 14 /**< BTLELDOCTRL_BB_BP_EN_DLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_BB_BP_EN_DLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_BB_BP_EN_DLY_POS)) /**< BTLELDOCTRL_BB_BP_EN_DLY Mask */ -#define MXC_F_GCR_BTLELDOCTRL_TX_BP_EN_DLY_POS 15 /**< BTLELDOCTRL_TX_BP_EN_DLY Position */ -#define MXC_F_GCR_BTLELDOCTRL_TX_BP_EN_DLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_TX_BP_EN_DLY_POS)) /**< BTLELDOCTRL_TX_BP_EN_DLY Mask */ +#define MXC_F_GCR_BTLELDOCTRL_RF_BP_EN_DLY_POS 15 /**< BTLELDOCTRL_RF_BP_EN_DLY Position */ +#define MXC_F_GCR_BTLELDOCTRL_RF_BP_EN_DLY ((uint32_t)(0x1UL << MXC_F_GCR_BTLELDOCTRL_RF_BP_EN_DLY_POS)) /**< BTLELDOCTRL_RF_BP_EN_DLY Mask */ /**@} end of group GCR_BTLELDOCTRL_Register */ @@ -601,11 +616,11 @@ typedef struct { #define MXC_F_GCR_BTLELDODLY_BP_CNT_POS 0 /**< BTLELDODLY_BP_CNT Position */ #define MXC_F_GCR_BTLELDODLY_BP_CNT ((uint32_t)(0xFFUL << MXC_F_GCR_BTLELDODLY_BP_CNT_POS)) /**< BTLELDODLY_BP_CNT Mask */ -#define MXC_F_GCR_BTLELDODLY_RX_CNT_POS 8 /**< BTLELDODLY_RX_CNT Position */ -#define MXC_F_GCR_BTLELDODLY_RX_CNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_RX_CNT_POS)) /**< BTLELDODLY_RX_CNT Mask */ +#define MXC_F_GCR_BTLELDODLY_BB_CNT_POS 8 /**< BTLELDODLY_BB_CNT Position */ +#define MXC_F_GCR_BTLELDODLY_BB_CNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_BB_CNT_POS)) /**< BTLELDODLY_BB_CNT Mask */ -#define MXC_F_GCR_BTLELDODLY_TX_CNT_POS 20 /**< BTLELDODLY_TX_CNT Position */ -#define MXC_F_GCR_BTLELDODLY_TX_CNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_TX_CNT_POS)) /**< BTLELDODLY_TX_CNT Mask */ +#define MXC_F_GCR_BTLELDODLY_RF_CNT_POS 20 /**< BTLELDODLY_RF_CNT Position */ +#define MXC_F_GCR_BTLELDODLY_RF_CNT ((uint32_t)(0x1FFUL << MXC_F_GCR_BTLELDODLY_RF_CNT_POS)) /**< BTLELDODLY_RF_CNT Mask */ /**@} end of group GCR_BTLELDODLY_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/icc_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/icc_regs.h index 4a64475eb77..e7691d55499 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/icc_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/icc_regs.h @@ -84,8 +84,8 @@ typedef struct { __R uint32_t rsv_0x104_0x1ff[63]; __IO uint32_t way; /**< \b 0x0200: ICC WAY Register */ __IO uint32_t regctrl; /**< \b 0x0204: ICC REGCTRL Register */ - __IO mxc_icc_reg_regs_t region[15]; /**< \b 0x0208: ICC REGION Register */ - __R uint32_t rsv_0x244_0x2ff[47]; + __IO mxc_icc_reg_regs_t region[4]; /**< \b 0x0208: ICC REGION Register */ + __R uint32_t rsv_0x228_0x2ff[54]; __IO uint32_t pfmctrl; /**< \b 0x0300: ICC PFMCTRL Register */ __IO uint32_t pfmcnt; /**< \b 0x0304: ICC PFMCNT Register */ __R uint32_t rsv_0x308_0x6ff[254]; @@ -164,7 +164,13 @@ typedef struct { * @{ */ #define MXC_F_ICC_WAY_WAY_POS 0 /**< WAY_WAY Position */ -#define MXC_F_ICC_WAY_WAY ((uint32_t)(0x1UL << MXC_F_ICC_WAY_WAY_POS)) /**< WAY_WAY Mask */ +#define MXC_F_ICC_WAY_WAY ((uint32_t)(0x7UL << MXC_F_ICC_WAY_WAY_POS)) /**< WAY_WAY Mask */ +#define MXC_V_ICC_WAY_WAY_1 ((uint32_t)0x1UL) /**< WAY_WAY_1 Value */ +#define MXC_S_ICC_WAY_WAY_1 (MXC_V_ICC_WAY_WAY_1 << MXC_F_ICC_WAY_WAY_POS) /**< WAY_WAY_1 Setting */ +#define MXC_V_ICC_WAY_WAY_2 ((uint32_t)0x2UL) /**< WAY_WAY_2 Value */ +#define MXC_S_ICC_WAY_WAY_2 (MXC_V_ICC_WAY_WAY_2 << MXC_F_ICC_WAY_WAY_POS) /**< WAY_WAY_2 Setting */ +#define MXC_V_ICC_WAY_WAY_4 ((uint32_t)0x4UL) /**< WAY_WAY_4 Value */ +#define MXC_S_ICC_WAY_WAY_4 (MXC_V_ICC_WAY_WAY_4 << MXC_F_ICC_WAY_WAY_POS) /**< WAY_WAY_4 Setting */ /**@} end of group ICC_WAY_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/max32657.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/max32657.h index 7a0956884b3..5b38135c1b5 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/max32657.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/max32657.h @@ -123,11 +123,11 @@ typedef enum { BTLE_RX_AES_IRQn, /* 0x3B 0x00EC 59: BTLE RX AES Done */ BTLE_INV_APB_ADDR_IRQn, /* 0x3C 0x00F0 60: BTLE Invalid APB Address */ BTLE_IQ_DATA_VALID_IRQn, /* 0x3D 0x00F4 61:BTLE IQ Data Valid */ - BTLE_XXXX_IRQn, /* 0x3E 0x00F8 62: BTLE XXXX TODO(ME30): Verify BTLE IRQs */ + BTLE_RX_CRC_IRQn, /* 0x3E 0x00F8 62: BTLE RX CRC */ RSV47_IRQn, /* 0x3F 0x00FC 63: Reserved */ MPC_IRQn, /* 0x40 0x0100 64: MPC Combined (Secure) */ PPC_IRQn, /* 0x41 0x0104 65: PPC Combined (Secure) */ - RSV50_IRQn, /* 0x42 0x0108 66: Reserved */ + FRQCNT_IRQn, /* 0x42 0x0108 66: Frequency Counter */ RSV51_IRQn, /* 0x43 0x010C 67: Reserved */ RSV52_IRQn, /* 0x44 0x0110 68: Reserved */ RSV53_IRQn, /* 0x45 0x0114 69: Reserved */ @@ -148,58 +148,85 @@ typedef enum { #define __SAUREGION_PRESENT 1U /**< Presence of FPU */ #define __TZ_PRESENT 1U /**< Presence of TrustZone */ #define __VTOR_PRESENT 1U /**< Presence of VTOR register in SCB */ -#define __NVIC_PRIO_BITS 4U /**< NVIC interrupt priority bits */ +#define __NVIC_PRIO_BITS 3U /**< NVIC interrupt priority bits */ #define __Vendor_SysTickConfig 0U /**< Is 1 if different SysTick counter is used */ #include +#if (__CM_CMSIS_VERSION == 0x60000) +/* If CMSIS version 6.0 use cmsis_gcc_m.h */ +#include +#else +#include +#endif #include + +#if defined(__GNUC__) #if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) -#define IS_SECURE_ENVIRONMENT 1 -#else -#define IS_SECURE_ENVIRONMENT 0 +// Type used for secure code to call non-secure code. +#define __ns_call __attribute((cmse_nonsecure_call)) +typedef void __ns_call (*mxc_ns_call_t)(void); +// Type used for non-secure code to call secure code. +#define __ns_entry __attribute((cmse_nonsecure_entry)) +#endif #endif /* ================================================================================ */ /* ================== Device Specific Memory Section ================== */ /* ================================================================================ */ -/* Non-secure Regions */ -#define MXC_FLASH_NS_MEM_BASE 0x01000000UL -#define MXC_FLASH_NS_PAGE_SIZE 0x00002000UL -#define MXC_FLASH_NS_MEM_SIZE 0x00100000UL -#define MXC_SRAM_NS_MEM_BASE 0x20000000UL -#define MXC_SRAM_NS_MEM_SIZE 0x00040000UL +/* Physical Memory Definitions */ +/* Bit 28 (security alias bit) of address is cleared. */ +#define MXC_PHY_FLASH_MEM_BASE 0x01000000UL +#define MXC_PHY_FLASH_MEM_SIZE 0x00100000UL +#define MXC_PHY_FLASH_PAGE_SIZE 0x00002000UL + +#define MXC_PHY_SRAM_MEM_BASE 0x20000000UL +#define MXC_PHY_SRAM_MEM_SIZE 0x00040000UL + +#define MXC_PHY_SRAM0_MEM_BASE 0x20000000UL +#define MXC_PHY_SRAM0_MEM_SIZE 0x00008000UL // 32KB +#define MXC_PHY_SRAM1_MEM_BASE 0x20008000UL +#define MXC_PHY_SRAM1_MEM_SIZE 0x00008000UL // 32KB +#define MXC_PHY_SRAM2_MEM_BASE 0x20010000UL +#define MXC_PHY_SRAM2_MEM_SIZE 0x00010000UL // 64KB +#define MXC_PHY_SRAM3_MEM_BASE 0x20020000UL +#define MXC_PHY_SRAM3_MEM_SIZE 0x00010000UL // 64KB +#define MXC_PHY_SRAM4_MEM_BASE 0x20030000UL +#define MXC_PHY_SRAM4_MEM_SIZE 0x00010000UL // 64KB + +/** + * Memory settings are defined accordingly by build system: max32657_memory.mk + * + * Definitions that start with the '__' are defined by the build system. + * For example, '__MXC_FLASH_MEM_BASE' + */ + +#if CONFIG_TRUSTED_EXECUTION_SECURE +/* Non-secure Regions that secure code knows about. */ +#define MXC_FLASH_NS_MEM_BASE __MXC_FLASH_NS_MEM_BASE +#define MXC_FLASH_NS_PAGE_SIZE MXC_PHY_FLASH_PAGE_SIZE +#define MXC_FLASH_NS_MEM_SIZE __MXC_FLASH_NS_MEM_SIZE +#define MXC_SRAM_NS_MEM_BASE __MXC_SRAM_NS_MEM_BASE +#define MXC_SRAM_NS_MEM_SIZE __MXC_SRAM_NS_MEM_SIZE /* Secure Regions */ /* ROM is always in secure region. */ #define MXC_ROM_MEM_BASE 0x00000000UL #define MXC_ROM_MEM_SIZE 0x00010000UL -#define MXC_FLASH_S_MEM_BASE 0x11000000UL -#define MXC_FLASH_S_PAGE_SIZE 0x00002000UL -#define MXC_FLASH_S_MEM_SIZE 0x00100000UL /* Flash info is always in secure region */ #define MXC_INFO_S_MEM_BASE 0x12000000UL #define MXC_INFO_S_MEM_SIZE 0x00004000UL -#define MXC_SRAM_S_MEM_BASE 0x30000000UL -#define MXC_SRAM_S_MEM_SIZE 0x00040000UL #define MXC_INFO_MEM_BASE MXC_INFO_S_MEM_BASE #define MXC_INFO_MEM_SIZE MXC_INFO_S_MEM_SIZE - -#if IS_SECURE_ENVIRONMENT -#define MXC_FLASH_MEM_BASE MXC_FLASH_S_MEM_BASE -#define MXC_FLASH_PAGE_SIZE MXC_FLASH_S_PAGE_SIZE -#define MXC_FLASH_MEM_SIZE MXC_FLASH_S_MEM_SIZE -#define MXC_SRAM_MEM_BASE MXC_SRAM_S_MEM_BASE -#define MXC_SRAM_MEM_SIZE MXC_SRAM_S_MEM_SIZE -#else -#define MXC_FLASH_MEM_BASE MXC_FLASH_NS_MEM_BASE -#define MXC_FLASH_PAGE_SIZE MXC_FLASH_NS_PAGE_SIZE -#define MXC_FLASH_MEM_SIZE MXC_FLASH_NS_MEM_SIZE -#define MXC_SRAM_MEM_BASE MXC_SRAM_NS_MEM_BASE -#define MXC_SRAM_MEM_SIZE MXC_SRAM_NS_MEM_SIZE #endif +#define MXC_FLASH_MEM_BASE __MXC_FLASH_MEM_BASE +#define MXC_FLASH_PAGE_SIZE MXC_PHY_FLASH_PAGE_SIZE +#define MXC_FLASH_MEM_SIZE __MXC_FLASH_MEM_SIZE +#define MXC_SRAM_MEM_BASE __MXC_SRAM_MEM_BASE +#define MXC_SRAM_MEM_SIZE __MXC_SRAM_MEM_SIZE + /* ================================================================================ */ /* ================ Device Specific Peripheral Section ================ */ /* ================================================================================ */ @@ -219,7 +246,7 @@ typedef enum { #define MXC_BASE_GCR_S ((uint32_t)0x50000000UL) #define MXC_GCR_S ((mxc_gcr_regs_t *)MXC_BASE_GCR_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_GCR MXC_GCR_S #else #define MXC_GCR MXC_GCR_NS @@ -236,7 +263,7 @@ typedef enum { #define MXC_BASE_SIR_S ((uint32_t)0x50000400UL) #define MXC_SIR_S ((mxc_sir_regs_t *)MXC_BASE_SIR_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_SIR MXC_BASE_SIR_S #define MXC_SIR MXC_SIR_S #else @@ -255,7 +282,7 @@ typedef enum { #define MXC_BASE_FCR_S ((uint32_t)0x50000800UL) #define MXC_FCR_S ((mxc_fcr_regs_t *)MXC_BASE_FCR_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_FCR MXC_BASE_FCR_S #define MXC_FCR MXC_FCR_S #else @@ -275,7 +302,7 @@ typedef enum { #define MXC_BASE_WDT_S ((uint32_t)0x50003000UL) #define MXC_WDT_S ((mxc_wdt_regs_t *)MXC_BASE_WDT_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_WDT MXC_BASE_WDT_S #define MXC_WDT MXC_WDT_S #else @@ -284,22 +311,22 @@ typedef enum { #endif /******************************************************************************/ -/* SVM Controller */ +/* RSTZ Controller */ /* Non-secure Mapping */ -#define MXC_BASE_SVM_NS ((uint32_t)0x40004800UL) -#define MXC_SVM_NS 0 //TODO(ME30): Add SVM controller registers. +#define MXC_BASE_RSTZ_NS ((uint32_t)0x40004800UL) +#define MXC_RSTZ_NS ((mxc_rstz_regs_t *)MXC_BASE_RSTZ_NS) /* Secure Mapping */ -#define MXC_BASE_SVM_S ((uint32_t)0x50004800UL) -#define MXC_SVM_S 0 //TODO(ME30): Add SVM controller registers. +#define MXC_BASE_RSTZ_S ((uint32_t)0x50004800UL) +#define MXC_RSTZ_S ((mxc_rstz_regs_t *)MXC_BASE_RSTZ_S) -#if IS_SECURE_ENVIRONMENT -#define MXC_BASE_SVM MXC_BASE_SVM_S -#define MXC_SVM MXC_SVM_S //TODO(ME30): Add SVM controller registers +#if CONFIG_TRUSTED_EXECUTION_SECURE +#define MXC_BASE_RSTZ MXC_BASE_RSTZ_S +#define MXC_RSTZ MXC_RSTZ_S //TODO(ME30): Add SVM controller registers #else -#define MXC_BASE_SVM MXC_BASE_SVM_NS -#define MXC_SVM MXC_SVM_NS +#define MXC_BASE_RSTZ MXC_BASE_RSTZ_NS +#define MXC_RSTZ MXC_RSTZ_NS #endif /******************************************************************************/ @@ -307,13 +334,13 @@ typedef enum { /* Non-secure Mapping */ #define MXC_BASE_BOOST_NS ((uint32_t)0x40004C00UL) -#define MXC_BOOST_NS 0 //TODO(ME30): Add Boost controller registers. +#define MXC_BOOST_NS ((mxc_boost_regs_t *)MXC_BASE_BOOST_NS) /* Secure Mapping */ #define MXC_BASE_BOOST_S ((uint32_t)0x50004C00UL) -#define MXC_BOOST_S 0 //TODO(ME30): Add Boost controller registers. +#define MXC_BOOST_S ((mxc_boost_regs_t *)MXC_BASE_BOOST_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_BOOST MXC_BASE_BOOST_S #define MXC_BOOST MXC_BOOST_S #else @@ -332,7 +359,7 @@ typedef enum { #define MXC_BASE_TRIMSIR_S ((uint32_t)0x50005400UL) #define MXC_TRIMSIR_S ((mxc_trimsir_regs_t *)MXC_BASE_TRIMSIR_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_TRIMSIR MXC_BASE_TRIMSIR_S #define MXC_TRIMSIR MXC_TRIMSIR_S #else @@ -351,7 +378,7 @@ typedef enum { #define MXC_BASE_RTC_S ((uint32_t)0x50006000UL) #define MXC_RTC_S ((mxc_rtc_regs_t *)MXC_BASE_RTC_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_RTC MXC_BASE_RTC_S #define MXC_RTC MXC_RTC_S #else @@ -375,7 +402,7 @@ typedef enum { #define MXC_BASE_WUT1_S ((uint32_t)0x50006600UL) #define MXC_WUT1_S ((mxc_wut_regs_t *)MXC_BASE_WUT1_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_WUT0 MXC_BASE_WUT0_S #define MXC_WUT0 MXC_WUT0_S #define MXC_BASE_WUT1 MXC_BASE_WUT1_S @@ -398,7 +425,7 @@ typedef enum { #define MXC_BASE_PWRSEQ_S ((uint32_t)0x50006800UL) #define MXC_PWRSEQ_S ((mxc_pwrseq_regs_t *)MXC_BASE_PWRSEQ_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_PWRSEQ MXC_BASE_PWRSEQ_S #define MXC_PWRSEQ MXC_PWRSEQ_S #else @@ -417,7 +444,7 @@ typedef enum { #define MXC_BASE_MCR_S ((uint32_t)0x50006C00UL) #define MXC_MCR_S ((mxc_mcr_regs_t *)MXC_BASE_MCR_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_MCR MXC_BASE_MCR_S #define MXC_MCR MXC_MCR_S #else @@ -434,9 +461,9 @@ typedef enum { /* Secure Mapping */ #define MXC_BASE_AES_S ((uint32_t)0x50007400UL) -#define MXC_AES_S ((mxc_aes_regs_t *)MXC_BASE_AES_NS) +#define MXC_AES_S ((mxc_aes_regs_t *)MXC_BASE_AES_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_AES MXC_BASE_AES_S #define MXC_AES MXC_AES_S #else @@ -455,7 +482,7 @@ typedef enum { #define MXC_BASE_AESKEYS_S ((uint32_t)0x50007800UL) #define MXC_AESKEYS_S ((mxc_aeskeys_regs_t *)MXC_BASE_AESKEYS_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_AESKEYS MXC_BASE_AESKEYS_S #define MXC_AESKEYS MXC_AESKEYS_S #else @@ -479,7 +506,7 @@ typedef enum { #define MXC_BASE_GPIO0_S ((uint32_t)0x50008000UL) #define MXC_GPIO0_S ((mxc_gpio_regs_t *)MXC_BASE_GPIO0_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_GPIO0 MXC_BASE_GPIO0_S #define MXC_GPIO0 MXC_GPIO0_S #else @@ -509,7 +536,7 @@ We may want to handle GET_IRQ better... #define MXC_BASE_CRC_S ((uint32_t)0x5000F000UL) #define MXC_CRC_S ((mxc_crc_regs_t *)MXC_BASE_CRC_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_CRC MXC_BASE_CRC_S #define MXC_CRC MXC_CRC_S #else @@ -553,7 +580,7 @@ We may want to handle GET_IRQ better... #define MXC_BASE_TMR5_S ((uint32_t)0x50015000UL) #define MXC_TMR5_S ((mxc_tmr_regs_t *)MXC_BASE_TMR5_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_TMR0 MXC_TMR0_S #define MXC_TMR1 MXC_TMR1_S #define MXC_TMR2 MXC_TMR2_S @@ -611,14 +638,14 @@ We may want to handle GET_IRQ better... #define MXC_I3C_FIFO_DEPTH (8) /* Non-secure Mapping */ -#define MXC_BASE_I3C_NS ((uint32_t)0x4001D000UL) +#define MXC_BASE_I3C_NS ((uint32_t)0x40018000UL) #define MXC_I3C_NS ((mxc_i3c_regs_t *)MXC_BASE_I3C_NS) /* Secure Mapping */ -#define MXC_BASE_I3C_S ((uint32_t)0x5001D000UL) +#define MXC_BASE_I3C_S ((uint32_t)0x50018000UL) #define MXC_I3C_S ((mxc_i3c_regs_t *)MXC_BASE_I3C_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_I3C MXC_BASE_I3C_S #define MXC_I3C MXC_I3C_S #else @@ -634,68 +661,66 @@ We may want to handle GET_IRQ better... /******************************************************************************/ /* DMA */ #define MXC_DMA_CHANNELS (4) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_DMA_INSTANCES (2) #else #define MXC_DMA_INSTANCES (1) #endif /* Non-secure Mapping */ +/* DMA0 Security Attribution hardwired to Non-Secure and not configurable via SPC. */ #define MXC_BASE_DMA0_NS ((uint32_t)0x40028000UL) #define MXC_DMA0_NS ((mxc_dma_regs_t *)MXC_BASE_DMA0_NS) /* Secure Mapping */ -// TODO(ME30): Is there actuall a secure mapping for DMA0? -// -Yes, DMA0 can be accessed from secure mode. Realizing this, I think -// we would still have to define two DMA instances. -// DMA0 can only access the non-secure mappings of the peripherals, -// but DMA0 can be accessed in both Non-secure and Secure code. -// DMA1 can access both secure and non-secure addresses of the peripherals, -// but DMA1 can Only be accessed in Secure code. -#define MXC_BASE_DMA0_S ((uint32_t)0x50028000UL) -#define MXC_DMA0_S ((mxc_dma_regs_t *)MXC_BASE_DMA0_S) +/* DMA1 Security Attribution hardwired to Secure and not configurable via SPC. */ #define MXC_BASE_DMA1_S ((uint32_t)0x50035000UL) #define MXC_DMA1_S ((mxc_dma_regs_t *)MXC_BASE_DMA1_S) -#if IS_SECURE_ENVIRONMENT -#define MXC_BASE_DMA0 MXC_BASE_DMA0_S -#define MXC_DMA0 MXC_DMA0_S +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_DMA1 MXC_BASE_DMA1_S #define MXC_DMA1 MXC_DMA1_S +/** + * MXC_DMA0 is not defined because DMA0 has no Secure mapping. + * Following ARM naming convention: if Secure world wants to access Non-Secure DMA (DMAO), + * then use MXC_DMA0_NS. Similar to how the Secure world accesses the Non-Secure MSP + * and VTOR registers using 'MSP_NS' and 'VTOR_NS', respectively. + */ +#ifdef MXC_DMA0 +#warning "Non-Secure DMA (DMA0) has no secure mapping. Please use MXC_DMA0_NS from Secure world." +#endif -#define MXC_DMA_CH_GET_IRQ(p, i) \ - ((IRQn_Type)(((p) == MXC_DMA0 && (i) == 0) ? DMA0_CH0_IRQn : \ - ((p) == MXC_DMA0 && (i) == 1) ? DMA0_CH1_IRQn : \ - ((p) == MXC_DMA0 && (i) == 2) ? DMA0_CH2_IRQn : \ - ((p) == MXC_DMA0 && (i) == 3) ? DMA0_CH3_IRQn : \ - ((p) == MXC_DMA1 && (i) == 0) ? DMA1_CH0_IRQn : \ - ((p) == MXC_DMA1 && (i) == 1) ? DMA1_CH1_IRQn : \ - ((p) == MXC_DMA1 && (i) == 2) ? DMA1_CH2_IRQn : \ - ((p) == MXC_DMA1 && (i) == 3) ? DMA1_CH3_IRQn : \ - 0)) +#define MXC_DMA_CH_GET_IRQ(p, i) \ + ((IRQn_Type)(((p) == MXC_DMA0_NS && (i) == 0) ? DMA0_CH0_IRQn : \ + ((p) == MXC_DMA0_NS && (i) == 1) ? DMA0_CH1_IRQn : \ + ((p) == MXC_DMA0_NS && (i) == 2) ? DMA0_CH2_IRQn : \ + ((p) == MXC_DMA0_NS && (i) == 3) ? DMA0_CH3_IRQn : \ + ((p) == MXC_DMA1_S && (i) == 0) ? DMA1_CH0_IRQn : \ + ((p) == MXC_DMA1_S && (i) == 1) ? DMA1_CH1_IRQn : \ + ((p) == MXC_DMA1_S && (i) == 2) ? DMA1_CH2_IRQn : \ + ((p) == MXC_DMA1_S && (i) == 3) ? DMA1_CH3_IRQn : \ + 0)) #else #define MXC_BASE_DMA0 MXC_BASE_DMA0_NS #define MXC_DMA0 MXC_DMA0_NS -// TODO(DMA1): Not entirely show how to handle access to MXC_DMA1 in non-secure mode. -// A secure fault should be generated when non-secure code accesses -// a secure peripheral mapping, so it'd be best if a build time warning -// or error was thrown when using MXCX_DMA1. -#define MXC_BASE_DMA1 0 -#define MXC_DMA1 0 +/* MXC_DMA1 is not defined because Non-Secure Code can only access DMA0. */ +#if MXC_DMA1 +#warning "Secure DMA (DMA1) is not accessible from Non-Secure world." +#endif /* DMA1 IRQs not usable in Non-Secure state. */ -#define MXC_DMA_CH_GET_IRQ(p, i) \ - ((IRQn_Type)(((p) == MXC_DMA0 && (i) == 0) ? DMA0_CH0_IRQn : \ - ((p) == MXC_DMA0 && (i) == 1) ? DMA0_CH1_IRQn : \ - ((p) == MXC_DMA0 && (i) == 2) ? DMA0_CH2_IRQn : \ - ((p) == MXC_DMA0 && (i) == 3) ? DMA0_CH3_IRQn : \ - 0)) -#endif // IS_SECURE_ENVIRONMENT +#define MXC_DMA_CH_GET_IRQ(p, i) \ + ((IRQn_Type)(((p) == MXC_DMA0_NS && (i) == 0) ? DMA0_CH0_IRQn : \ + ((p) == MXC_DMA0_NS && (i) == 1) ? DMA0_CH1_IRQn : \ + ((p) == MXC_DMA0_NS && (i) == 2) ? DMA0_CH2_IRQn : \ + ((p) == MXC_DMA0_NS && (i) == 3) ? DMA0_CH3_IRQn : \ + 0)) +#endif // CONFIG_TRUSTED_EXECUTION_SECURE -#define MXC_DMA_GET_BASE(i) ((i) == MXC_BASE_DMA0 ? 0 : (p) == MXC_BASE_DMA1 ? 1 : -1) +#define MXC_DMA_GET_BASE(i) ((i) == MXC_BASE_DMA0_NS ? 0 : (p) == MXC_BASE_DMA1_S ? 1 : -1) -#define MXC_DMA_GET_IDX(p) ((p) == MXC_DMA0 ? 0 : (p) == MXC_DMA1 ? 1 : -1) +#define MXC_DMA_GET_IDX(p) ((p) == MXC_DMA0_NS ? 0 : (p) == MXC_DMA1_S ? 1 : -1) /******************************************************************************/ /* Flash Controller */ @@ -740,7 +765,7 @@ We may want to handle GET_IRQ better... #define MXC_BASE_UART_S ((uint32_t)0x50042000UL) #define MXC_UART_S ((mxc_uart_regs_t *)MXC_BASE_UART_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_UART MXC_BASE_UART_S #define MXC_UART MXC_UART_S #else @@ -767,7 +792,7 @@ We may want to handle GET_IRQ better... #define MXC_BASE_SPI_S ((uint32_t)0x50046000UL) #define MXC_SPI_S ((mxc_spi_regs_t *)MXC_BASE_SPI_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_SPI MXC_BASE_SPI_S #define MXC_SPI MXC_SPI_S #else @@ -791,7 +816,7 @@ We may want to handle GET_IRQ better... #define MXC_BASE_TRNG_S ((uint32_t)0x5004D000UL) #define MXC_TRNG_S ((mxc_trng_regs_t *)MXC_BASE_TRNG_S) -#if IS_SECURE_ENVIRONMENT +#if CONFIG_TRUSTED_EXECUTION_SECURE #define MXC_BASE_TRNG MXC_BASE_TRNG_S #define MXC_TRNG MXC_TRNG_S #else @@ -800,64 +825,90 @@ We may want to handle GET_IRQ better... #endif /******************************************************************************/ -/* BTLE */ -// TODO(ME30): Verify with bluetooth team. This section does not exist in our prev -// bluetooth-supported parts. -/* Non-secure Mapping */ -#define MXC_BASE_BTLE_NS ((uint32_t)0x40050000UL) -#define MXC_BTLE_NS // TODO(ME30): Add BTLE related registers? This section doesn't exist for ME17. - -/* Secure Mapping */ -#define MXC_BASE_BTLE_S ((uint32_t)0x50050000UL) -#define MXC_BTLE_S // TODO(ME30): Add BTLE related registers? This section doesn't exist for ME17. - -#if IS_SECURE_ENVIRONMENT -// TODO(ME30): Does this have registers? -#define MXC_BASE_BTLE MXC_BASE_BTLE_S -#define MXC_BTLE MXC_BTLE_S -#else -#define MXC_BASE_BTLE MXC_BASE_BTLE_NS -#define MXC_BTLE MXC_BTLE_NS -#endif +/* Non-Secure and Secure Privilege Controller (NSPC/SPC TZ) */ -/******************************************************************************/ -/* Secure Privilege Control (SPC TZ) */ +#if CONFIG_TRUSTED_EXECUTION_SECURE /* Secure Mapping Only */ #define MXC_BASE_SPC ((uint32_t)0x50090000UL) -#define MXC_SPC // TODO(ME30): Does this have registers? -#define MXC_SPC_S // TODO(ME30): Does this have registers? +#define MXC_SPC ((mxc_spc_regs_t *)MXC_BASE_SPC) +#define MXC_SPC_S MXC_SPC + +#endif + +/* Non-Secure Mapping Only */ +#define MXC_BASE_NSPC ((uint32_t)0x40090000UL) +#define MXC_NSPC ((mxc_nspc_regs_t *)MXC_BASE_NSPC) +#define MXC_NSPC_NS MXC_NSPC /******************************************************************************/ /* MPC */ /* Secure Mapping Only */ #define MXC_BASE_MPC_SRAM0 ((uint32_t)0x50091000UL) -#define MXC_MPC_SRAM0 // TODO(ME30): Does this have registers? +#define MXC_MPC_SRAM0 ((mxc_mpc_regs_t *)MXC_BASE_MPC_SRAM0) #define MXC_BASE_MPC_SRAM1 ((uint32_t)0x50092000UL) -#define MXC_MPC_SRAM1 // TODO(ME30): Does this have registers? +#define MXC_MPC_SRAM1 ((mxc_mpc_regs_t *)MXC_BASE_MPC_SRAM1) #define MXC_BASE_MPC_SRAM2 ((uint32_t)0x50093000UL) -#define MXC_MPC_SRAM2 // TODO(ME30): Does this have registers? +#define MXC_MPC_SRAM2 ((mxc_mpc_regs_t *)MXC_BASE_MPC_SRAM2) #define MXC_BASE_MPC_SRAM3 ((uint32_t)0x50094000UL) -#define MXC_MPC_SRAM3 // TODO(ME30): Does this have registers? +#define MXC_MPC_SRAM3 ((mxc_mpc_regs_t *)MXC_BASE_MPC_SRAM3) #define MXC_BASE_MPC_SRAM4 ((uint32_t)0x50095000UL) -#define MXC_MPC_SRAM4 // TODO(ME30): Does this have registers? +#define MXC_MPC_SRAM4 ((mxc_mpc_regs_t *)MXC_BASE_MPC_SRAM4) #define MXC_BASE_MPC_FLASH ((uint32_t)0x50096000UL) -#define MXC_MPC_FLASH // TODO(ME30): Does this have registers? +#define MXC_MPC_FLASH ((mxc_mpc_regs_t *)MXC_BASE_MPC_FLASH) /* Added for consistency and explicitness */ #define MXC_BASE_MPC_SRAM0_S MXC_BASE_MPC_SRAM0 -#define MXC_MPC_SRAM0_S // TODO(ME30): Does this have registers? +#define MXC_MPC_SRAM0_S MXC_MPC_SRAM0 #define MXC_BASE_MPC_SRAM1_S MXC_BASE_MPC_SRAM1 -#define MXC_MPC_SRAM1_S // TODO(ME30): Does this have registers? +#define MXC_MPC_SRAM1_S MXC_MPC_SRAM1 #define MXC_BASE_MPC_SRAM2_S MXC_BASE_MPC_SRAM2 -#define MXC_MPC_SRAM2_S // TODO(ME30): Does this have registers? +#define MXC_MPC_SRAM2_S MXC_MPC_SRAM2 #define MXC_BASE_MPC_SRAM3_S MXC_BASE_MPC_SRAM3 -#define MXC_MPC_SRAM3_S // TODO(ME30): Does this have registers? +#define MXC_MPC_SRAM3_S MXC_MPC_SRAM3 #define MXC_BASE_MPC_SRAM4_S MXC_BASE_MPC_SRAM4 -#define MXC_MPC_SRAM4_S // TODO(ME30): Does this have registers? +#define MXC_MPC_SRAM4_S MXC_MPC_SRAM4 #define MXC_BASE_MPC_FLASH_S MXC_BASE_MPC_FLASH -#define MXC_MPC_FLASH_S // TODO(ME30): Does this have registers? +#define MXC_MPC_FLASH_S MXC_MPC_FLASH + +/* Grab the index associated with each memory region. */ +#define MXC_MPC_GET_PHY_MEM_BASE(p) \ + ((p) == MXC_MPC_FLASH ? MXC_PHY_FLASH_MEM_BASE : \ + (p) == MXC_MPC_SRAM0 ? MXC_PHY_SRAM0_MEM_BASE : \ + (p) == MXC_MPC_SRAM1 ? MXC_PHY_SRAM1_MEM_BASE : \ + (p) == MXC_MPC_SRAM2 ? MXC_PHY_SRAM2_MEM_BASE : \ + (p) == MXC_MPC_SRAM3 ? MXC_PHY_SRAM3_MEM_BASE : \ + (p) == MXC_MPC_SRAM4 ? MXC_PHY_SRAM4_MEM_BASE : \ + 0) + +#define MXC_MPC_GET_PHY_MEM_SIZE(p) \ + ((p) == MXC_MPC_FLASH ? MXC_PHY_FLASH_MEM_SIZE : \ + (p) == MXC_MPC_SRAM0 ? MXC_PHY_SRAM0_MEM_SIZE : \ + (p) == MXC_MPC_SRAM1 ? MXC_PHY_SRAM1_MEM_SIZE : \ + (p) == MXC_MPC_SRAM2 ? MXC_PHY_SRAM2_MEM_SIZE : \ + (p) == MXC_MPC_SRAM3 ? MXC_PHY_SRAM3_MEM_SIZE : \ + (p) == MXC_MPC_SRAM4 ? MXC_PHY_SRAM4_MEM_SIZE : \ + 0) + +#define MXC_MPC_GET_IDX(p) \ + ((p) == MXC_MPC_FLASH ? 0 : \ + (p) == MXC_MPC_SRAM0 ? 0 : \ + (p) == MXC_MPC_SRAM1 ? 1 : \ + (p) == MXC_MPC_SRAM2 ? 2 : \ + (p) == MXC_MPC_SRAM3 ? 3 : \ + (p) == MXC_MPC_SRAM4 ? 4 : \ + -1) + +#define MXC_MPC_FLASH_GET_BASE(i) ((i) == 0 ? MXC_MPC_FLASH : 0) + +#define MXC_MPC_SRAM_GET_BASE(i) \ + ((i) == 0 ? MXC_MPC_SRAM0 : \ + (i) == 1 ? MXC_MPC_SRAM1 : \ + (i) == 2 ? MXC_MPC_SRAM2 : \ + (i) == 3 ? MXC_MPC_SRAM3 : \ + (i) == 4 ? MXC_MPC_SRAM4 : \ + 0) /******************************************************************************/ /* Bit Shifting */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/max32657.svd b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/max32657.svd index 224e007b628..b9ee605e4ec 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/max32657.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/max32657.svd @@ -25,7 +25,7 @@ AESKEYS AES Key Registers. - 0x40007800 + 0x50007800 0x00 0x400 @@ -86,7 +86,7 @@ AES AES Keys. - 0x40007400 + 0x50007400 0x00 0x400 @@ -293,10 +293,165 @@ + + BOOST + Boost Controller + 0x50004C00 + + 0x00 + 0x400 + registers + + + BOOST + 46 + + + + DISABLE + Boost Disable Register. + 0x000 + 32 + + + DIS + This bit allows softwaree to disable the boost regulator for the VDD18 supply. + [0:0] + read-write + + + + + VREGCTRL + Boost Voltage Regulator Control Register. + 0x004 + + + SET + Sets the target voltage for the boost regulator output. + [4:0] + read-write + + + + + IPEAK + Low Side FET Peak Current Register. + 0x008 + read-only + + + SET + Sets the peak current threshold for the regulator. + [2:0] + read-only + + + + + MAXTON + Maximum Low Side FET Time-On Register. + 0x00C + read-only + + + THD + Sets a threshold for when time-on out toggles. + [3:0] + read-only + + + + + ILOAD + Boost Cycle Count Register. + 0x010 + read-only + + + CNT + Indicates the last load cycle count value. + [7:0] + read-only + + + + + ALERT + Boost Cycle Count Alert Register. + 0x014 + + + THD + Determines the threshold for when the boost alert interruptis fired. + [7:0] + read-write + + + + + RDY + Boost Output Ready Register. + 0x018 + read-only + + + OUT + Indicates ready out status for boost regulator. + [0:0] + read-only + + + + + ZXCAL + Zero Cross Calibration Register. + 0x01C + read-only + + + VAL + Read back of auto-calibration values. + [4:0] + read-only + + + + + INTEN + Boost Alert Interrupt Enable Register. + 0x020 + read-write + + + ALERT + Boost alert enable/ + [0:0] + read-write + + + + + INTFL + Boost Alert Interrupt Status Register. + 0x024 + read-write + + + ALERT + Boost alert has occurred. + [0:0] + read-write + + + + + + CRC CRC Registers. - 0x4000F000 + 0x5000F000 0x00 0x1000 @@ -424,7 +579,7 @@ DMA DMA Controller Fully programmable, chaining capable DMA channels. - 0x40028000 + 0x50028000 32 0x00 @@ -432,20 +587,20 @@ registers - DMA0 - 28 + DMA0_CH0 + 32 - DMA1 - 29 + DMA0_CH1 + 33 - DMA2 - 30 + DMA0_CH2 + 34 - DMA3 - 31 + DMA0_CH3 + 35 @@ -620,46 +775,56 @@ Memory To Memory 0x00 + + SPIRX + SPI RX + 0x01 + UARTRX UART RX 0x04 - I3CRX - I3C RX + I3CRX_CONT + I3C RX Controller 0x07 - SPIRX - SPI RX - 0x0F + I3CRX_TARG + I3C RX Target + 0x08 AESRX AES RX 0x10 + + SPITX + SPI TX + 0x21 + UARTTX UART TX 0x24 - I3CTX + I3CTX_CONT I3C TX 0x27 + + I3CTX_TARG + I3C TX + 0x28 + CRCTX CRC TX 0x2C - - SPITX - SPI TX - 0x2F - AESTX AES TX @@ -1058,10 +1223,36 @@ + + DMA1 + DMA Controller Fully programmable, chaining capable DMA channels. 1 + 0x50035000 + + DMA1_CH0 + DMA1_CH0 + 36 + + + DMA1_CH1 + DMA1_CH1 + 37 + + + DMA1_CH2 + DMA1_CH2 + 38 + + + DMA1_CH3 + DMA1_CH3 + 39 + + + FCR Function Control Register. - 0x40000800 + 0x50000800 0x00 0x400 @@ -1069,20 +1260,20 @@ - FCTRL0 - Register 0. + CTRL + Function Control 0 Register. 0x00 read-write - BTLELDO_TX - BTLE LDO TX Trim. + BTLELDO_RF + BTLE LDO RF Trim. 0 5 - BTLELDO_RX - BTLE LDO RX Trim. + BTLELDO_BB + BTLE LDO BB Trim. 8 5 @@ -1125,13 +1316,13 @@ - FCTRL1 - Register 1. + AUTOCAL0 + Automatic Calibration 0 Register. 0x04 read-write - AC_EN + EN Auto-calibration Enable. 0 1 @@ -1149,7 +1340,7 @@ - AC_RUN + RUN Autocalibration Run. 1 1 @@ -1215,7 +1406,7 @@ 12 - AC_TRIM_OUT + TRIM_OUT IPO Auto Calibration Trim 23 9 @@ -1223,13 +1414,13 @@ - FCTRL2 - Register 2. + AUTOCAL1 + Automatic Calibration 1 Register. 0x08 read-write - AC_INIT_TRIM + INIT_TRIM IPO Trim Automatic Calibration Initial Trim. 0 9 @@ -1237,19 +1428,19 @@ - FCTRL3 - Register 3. + AUTOCAL2 + Automatic Calibration 2 Register. 0x0C read-write - AC_RUNTIME + RUNTIME IPO Trim Autocal Run Time 0 8 - AC_DIV + DIV IPO Trim Automatic Calibration Divide Factor. 8 13 @@ -1306,6 +1497,125 @@ + + INTFL + Interrupt Flag Register. + 0x1C + read-write + + + ERTOC_RDY + ERTCO 32K Ready. + 0 + 1 + + + FRQCNT + Frequency Counter Interrupt Flag. + 1 + 1 + + + + + INTEN + Interrupt Enable Register. + 0x20 + read-write + + + ERTOC_RDY + ERTCO 32K Ready Interrupt Enable. + 0 + 1 + + + FRQCNT + Frequency Counter Interrupt Enable. + 1 + 1 + + + + + FRQCNTCTRL + Frequency Counter Control Register. + 0x28 + read-write + + + START + Start Compare. + 0 + 1 + + + CMP_CLKSEL + Compared Clock Select. + 1 + 2 + + + RTC + RTC. + 0 + + + EXT_GPIO + External GPIO. + 2 + + + INRO + INRO. + 3 + + + + + + + FRQCNTCMP + Frequency Counter Compared Target Register. + 0x2C + read-write + + + TARGET + Compared Clock Target. + 0 + 14 + + + + + REFCLK + Reference Clock Result Register. + 0x30 + read-only + + + RESULT + Reference Clock Result. + 0 + 20 + + + + + CMPCLK + Compared Clock Result Register. + 0x34 + read-only + + + RESULT + Compared Clock Result. + 0 + 14 + + + @@ -1313,15 +1623,16 @@ FLC Flash Memory Control. FLSH_ - 0x40029000 + 0x50029000 0x00 0x400 registers - Flash_Controller - Flash Controller interrupt. + FLC + + FLC Interrupt. 23 @@ -1572,76 +1883,24 @@ + + + + + GCR + Global Control Registers. + 0x50000000 + + 0 + 0x400 + registers + + - WELR0 - WELR0 - 0x80 - - - WELR0 - Access control. - 0 - 32 - - - - - WELR1 - WELR1 - 0x88 - - - WELR1 - Access control. - 0 - 32 - - - - - RLR0 - RLR0 - 0x90 - - - RLR0 - Access control. - 0 - 32 - - - - - RLR1 - RLR1 - 0x98 - - - RLR1 - Access control. - 0 - 32 - - - - - - - - GCR - Global Control Registers. - 0x40000000 - - 0 - 0x400 - registers - - - - SYSCTRL - System Control. - 0x00 - 0xFFFFFFFE + SYSCTRL + System Control. + 0x00 + 0xFFFFFFFE ICC_FLUSH @@ -1788,12 +2047,6 @@ 17 1 - - BTLE - BTLE Reset. - 18 - 1 - TRNG TRNG Reset. @@ -2036,14 +2289,14 @@ 4 - active + ACTIVE Active Mode. 0 - backup + BACKUP Backup Mode. - 9 + 4 PDM @@ -2298,6 +2551,18 @@ 10 1 + + AUTOCAL + Auto calibration Reset. + 12 + 1 + + + BTLE + BTLE Reset. + 18 + 1 + @@ -2335,12 +2600,6 @@ 15 1 - - SPI - SPI Clock Disable - 16 - 1 - DMA1 DMA1 Clock Disable @@ -2432,6 +2691,19 @@ + + ECCCED + ECC Correctable Error Detect Register. + 0x68 + + + FLASH + ECC Correctable Error Detect Flag for Flash. Write 1 to clear. + 0 + 1 + + + ECCINTEN ECC Interrupt Enable Register @@ -2440,7 +2712,7 @@ FLASH ECC Flash0 Interrupt Enable. - 11 + 0 1 @@ -2494,86 +2766,86 @@ 0x74 - TX_EN - LDOTX enable. + RF_EN + LDO RF enable. 0 1 - TX_PD_EN - LDOTX Pull Down. + RF_PD_EN + LDO RF Pull Down. 1 1 - TX_VSEL - Voltage Selection for NFC LDO + RF_VSEL + Voltage Selection for RF LDO 2 2 - RX_EN - LDORX enable. + BB_EN + LDOBB enable. 4 1 - RX_PD_EN - LDORX Pull DOwn. + BB_PD_EN + LDO BB Pull DOwn. 5 1 - RX_VSEL - LDORX Voltage Setting. + BB_VSEL + LDO BB Voltage Setting. 6 2 - RX_BP_EN - LDORX Bypass Enable. + BB_BP_EN + LDO BB Bypass Enable. 8 1 - RX_DISCH - LDORX Discharge. + BB_DISCH + LDO BB Discharge. 9 1 - TX_BP_EN - LDOTX Bypass Enable. + RF_BP_EN + LDO RF Bypass Enable. 10 1 - TX_DISCH - LDOTX Discharge. + RF_DISCH + LDO RF Discharge. 11 1 - TX_EN_DLY - LDOTX Enable Delay. + RF_EN_DLY + LDO RF Enable Delay. 12 1 - RX_EN_DLY - LDORX Enable Delay. + BB_EN_DLY + LDO BB Enable Delay. 13 1 - RX_BP_EN_DLY - LDORX Bypass Enable Delay. + BB_BP_EN_DLY + LDO BB Bypass Enable Delay. 14 1 - TX_BP_EN_DLY - LDOTX Bypass Enable Delay. + RF_BP_EN_DLY + LDO RF Bypass Enable Delay. 15 1 @@ -2591,19 +2863,24 @@ 8 - RX_CNT - RX delay count. + BB_CNT + BB delay count. 8 9 - TX_CNT - TX delay count. + RF_CNT + RF delay count. 20 9 + + GPR + General Purpose Register 0. + 0x80 + @@ -2611,7 +2888,7 @@ GPIO0 Individual I/O for each GPIO GPIO - 0x40008000 + 0x50008000 0x00 0x1000 @@ -5774,162 +6051,2619 @@ 0x4002A000 0x00 - 0x800 + 0x1000 registers + + I3C0 + I3C0 IRQ + 26 + - INFO - Cache ID Register. - 0x0000 - read-only - - - RELNUM - Release Number. Identifies the RTL release version. - 0 - 6 - - - PARTNUM - Part Number. This field reflects the value of C_ID_PART_NUMBER configuration parameter. - 6 - 4 - - - ID - Cache ID. This field reflects the value of the C_ID_CACHEID configuration parameter. - 10 - 6 - - - - - SZ - Memory Configuration Register. - 0x0004 - read-only - 0x00080008 - - - CCH - Cache Size. Indicates total size in Kbytes of cache. - 0 - 16 - - - MEM - Main Memory Size. Indicates the total size, in units of 128 Kbytes, of code memory accessible to the cache controller. - 16 - 16 - - - - - CTRL - Cache Control and Status Register. - 0x0100 + CONT_CTRL0 + Controller Control 0 (Configuration) Register. + 0x000 EN - Cache Enable. Controls whether the cache is bypassed or is in use. Changing the state of this bit will cause the instruction cache to be flushed and its contents invalidated. - 0 - 1 + I3C Device Enable. + [1:0] + read-write - dis - Cache Bypassed. Instruction data is stored in the line fill buffer but is not written to main cache memory array. + OFF + Off. 0 - en - Cache Enabled. + ON + On. 1 + + CAP + I23 Bug Target with secondary controller capability. + 2 + - RDY - Cache Ready flag. Cleared by hardware when at any time the cache as a whole is invalidated (including a system reset). When this bit is 0, the cache is effectively in bypass mode (instruction fetches will come from main memory or from the line fill buffer). Set by hardware when the invalidate operation is complete and the cache is ready. - 16 - 1 - read-only + TO_DIS + Disable Timeout error. + [3:3] + read-write + + + HKEEP + High-keepr implementation. + [5:4] + read-write - notReady - Not Ready. + OFF + No high-keeper support. 0 - ready - Ready. + ON_CHIP + On-chip high-keeper support. 1 + + EXT_SDA + External high-keeper support for SDA. + 2 + + + EXT_SCL_SDA + External high-keeper support for SCL and SDA. + 3 + - - - - WAY - Cache Way Control Register. - 0x0200 - - WAY - Number of cache way, default is always 2. Allowed values are 1,2,4. - 0 - 1 + OD_STOP + Use open-drain speed for STOP. + [6:6] + read-write + + + PP_BAUD + SCL Frequency for push-pull drive. + [11:8] + read-write - 1 - 1 + 1_FCLK + SCL High Period is one FCLK Period. 0 - 2 - 2 + 2_FCLK + SCL High Period is two FLCK Periods. 1 - 4 - 4 + 3_FCLK + SCL High Period is three FCLK Period. 2 - - - - - - REGCTRL - Regional Control Register. - 0x0204 - - - EN - Enable the regional high andlow bound compare, cache the data only if the TAG content between the high and low bound. - 0 - 8 - - - EXC - Cache the data only if the TAG content is excluded in the high and low bound. - 8 - 8 - - - - - 15 - 0x20 - REGION[%s] - Regional Low and High Bound Registers. - icc_reg - 0x0208 - read-write + + 4_FCLK + SCL High Period is four FCLK Period. + 3 + + + 5_FCLK + SCL High Period is five FCLK Period. + 4 + + + 6_FCLK + SCL High Period is six FCLK Period. + 5 + + + 7_FCLK + SCL High Period is seven FCLK Period. + 6 + + + 8_FCLK + SCL High Period is eight FCLK Period. + 7 + + + 9_FCLK + SCL High Period is nine FCLK Period. + 8 + + + 10_FCLK + SCL High Period is ten FCLK Period. + 9 + + + 11_FCLK + SCL High Period is eleven FCLK Period. + 10 + + + 12_FCLK + SCL High Period is twelve FCLK Period. + 11 + + + 13_FCLK + SCL High Period is thirteen FCLK Period. + 12 + + + 14_FCLK + SCL High Period is fourteen FCLK Period. + 13 + + + 15_FCLK + SCL High Period is fifthteen FCLK Period. + 14 + + + 16_FCLK + SCL High Period is sixteen FCLK Period. + 15 + + + + + PP_ADD_LBAUD + Number of FCLK periods to add to the base of SCL low period. + [15:12] + read-write + + + 0_FCLK + Adds zero FCLK periods to the SCL low period. + 0 + + + 1_FCLK + Adds one FCLK period to the SCL low period. + 1 + + + 2_FCLK + Adds two FCLK periods to the SCL low period. + 2 + + + 3_FCLK + Adds three FCLK periods to the SCL low period. + 3 + + + 4_FCLK + Adds four FCLK periods to the SCL low period. + 4 + + + 5_FCLK + Adds five FCLK periods to the SCL low period. + 5 + + + 6_FCLK + Adds six FCLK periods to the SCL low period. + 6 + + + 7_FCLK + Adds seven FCLK periods to the SCL low period. + 7 + + + 8_FCLK + Adds eight FCLK periods to the SCL low period. + 8 + + + 9_FCLK + Adds nine FCLK periods to the SCL low period. + 9 + + + 10_FCLK + Adds ten FCLK periods to the SCL low period. + 10 + + + 11_FCLK + Adds eleven FCLK periods to the SCL low period. + 11 + + + 12_FCLK + Adds twelve FCLK periods to the SCL low period. + 12 + + + 13_FCLK + Adds thirteen FCLK periods to the SCL low period. + 13 + + + 14_FCLK + Adds fourteen FCLK periods to the SCL low period. + 14 + + + 15_FCLK + Adds fifthteen FCLK periods to the SCL low period. + 15 + + + + + OD_LBAUD + Number of PP_BAUD periods minus 1 to make one SCL low period for I3C open-dran periods. + [23:16] + read-write + + + OD_HP + Controls SCL high period for I3C oepn-drain operation. + [24:24] + read-write + + + PP_SKEW + Number of FCLK periods to delay the SDA value change from the SCL edge for I3C push-pull operation. + [27:25] + read-write + + + I2C_BAUD + Detyermines SCL high and low pweriods for I2C mode, in units of OD_BAUD period. + [31:28] + read-write + + + + + TARG_CTRL0 + Target Control 0 (Configuration) Register. + 0x004 + + + EN + Target device enable. + [0:0] + read-write + + + MATCHSS + Match STOP and START. + [2:2] + read-write + + + TO_IGN + Ignore Timeout Errors. + [3:3] + read-write + + + OFFLINE + Rejoin I3C bus with existing dynamic address. + [9:9] + read-write + + + + + TARG_STATUS + Target Status Register. + 0x008 + + + BUSY + Not stopped. + [0:0] + read-only + + + LIST_RESP + Message status - listening/responding or not. + [1:1] + read-only + + + CCCH + CCC is being handled. + [2:2] + read-only + + + RX_SDR + SDR Read. + [3:3] + + + TX_SDR + SDR Write. + [4:4] + + + DAA + Dynamic Address Assignment Mode. + [5:5] + read-only + + + HDR + HDR Mode. + [6:6] + read-only + + + START + START Detected. + [8:8] + read-write + + + ADDRMATCH + Address Matched. + [9:9] + read-write + + + STOP + STOP Detected. + [10:10] + read-write + + + RX_RDY + Receive data ready. + [11:11] + read-only + + + TX_NFULL + TX FIFO is not full, ready to accept more data. + [12:12] + read-write + + + DYNADDR_CHG + Dynamic address changed. + [13:13] + read-write + + + CCC + CCC received. + [14:14] + read-write + + + ERRWARN + An error or warning has occurred. + [15:15] + read-only + + + CCCH_DONE + CCC Handled. + [17:17] + read-write + + + EVENT_REQ + Event Requested. + [18:18] + read-write + + + TARG_RST + Target Reset. + [19:19] + read-write + + + EVENT + Event Status. + [21:20] + read-only + + + NONE + No event. + 0 + + + REQ_PEND + Request not yet sent. + 1 + + + REQ_NACK + Request was sent and NACKed and will be tried again. + 2 + + + REQ_ACK + Request was sent and ACKed. + 3 + + + + + IBI_DIS + Indicates whether IBI events are disabled. + [24:24] + read-only + + + CONTREQ_DIS + Indicates whether bus controller request events are disabled. + [25:25] + read-only + + + HJ_DIS + Indicates whether Hot-Joinevents are disabled. + [27:27] + read-only + + + ACTSTATE + Holds the current activity state. + [29:28] + read-only + + + NORMAL + No latency, normal bus operation. + 0 + + + 1MS_LAT + 1 ms latency. + 1 + + + 100MS_LAT + 100 ms latency. + 2 + + + 10S_LAT + 10 s latency. + 3 + + + + + TIMECTRL + Time Control mode. + [31:30] + read-only + + + DIS + No timing control mode is enabled. + 0 + + + SYNC + Synchronous Mode is enabled. + 1 + + + ASYNC + Asynchronous Mode is enabled. + 2 + + + BOTH + Both synchronous and asynchronous modes are enabled. + 3 + + + + + + + TARG_CTRL1 + Target Control 1 Register. + 0x00C + + + EVENT + Sets respecive I3C target event request. + [1:0] + read-write + + + NORMAL + Normal mode. + 0 + + + IBI + Generate an IBI on the I3C bus. + 1 + + + CONTREQ + Request control of the I3C bus. + 2 + + + HJ + Generate a Hot-Join request. + 3 + + + + + EXTIBI + Indicates there are extended IBI data bytes. + [3:3] + read-write + + + DYNADDR_IDX + Index of dynamic address for the current IBI request. + [7:4] + read-write + + + IBIDATA + Contains the mandatory data byte to be sent when generating an IBI. + [15:8] + read-write + + + + + TARG_INTEN + Target Interrupt Enable Register. + 0x010 + read-write + + + START + START detected. + [8:8] + + + ADDRMATCH + Address matched interrupt. + [9:9] + + + STOP + STOP detected. + [10:10] + + + RX_RDY + Receive data ready. + [11:11] + + + TX_NFULL + Ready for transmit data, + [12:12] + + + DYNADDR_CHG + Dynamic Address Changed interrupt enable. + [13:13] + + + CCC + CCC Reveived Interrupt. + [14:14] + + + ERRWARN + Error or warning interrupt. + [15:15] + + + CCCH_DONE + CCC Handled Interrupt. + [17:17] + + + EVENT_REQ + Event Reqeusted Interrupt. + [18:18] + + + TARG_RST + I3C Target Reset Interrupt. + [19:19] + + + + + TARG_INTCLR + Target Interrupt Clear Register. + 0x014 + write-only + + + START + START detected. + [8:8] + + + ADDRMATCH + Address matched interrupt. + [9:9] + + + STOP + STOP detected. + [10:10] + + + RX_RDY + Receive data ready. + [11:11] + + + TX_NFULL + Ready for transmit data, + [12:12] + + + DYNADDR_CHG + Dynamic Address Changed interrupt enable. + [13:13] + + + CCC + CCC Reveived Interrupt. + [14:14] + + + ERRWARN + Error or warning interrupt. + [15:15] + + + CCCH_DONE + CCC Handled Interrupt. + [17:17] + + + EVENT_REQ + Event Reqeusted Interrupt. + [18:18] + + + TARG_RST + I3C Target Reset Interrupt. + [19:19] + + + + + TARG_INTFL + Target Interrupt Flag Register. + 0x018 + read-only + + + START + START detected. + [8:8] + + + ADDRMATCH + Address matched interrupt. + [9:9] + + + STOP + STOP detected. + [10:10] + + + RX_RDY + Receive data ready. + [11:11] + + + TX_NFULL + Ready for transmit data, + [12:12] + + + DYNADDR_CHG + Dynamic Address Changed interrupt enable. + [13:13] + + + CCC + CCC Reveived Interrupt. + [14:14] + + + ERRWARN + Error or warning interrupt. + [15:15] + + + CCCH_DONE + CCC Handled Interrupt. + [17:17] + + + EVENT_REQ + Event Reqeusted Interrupt. + [18:18] + + + TARG_RST + I3C Target Reset Interrupt. + [19:19] + + + + + TARG_ERRWARN + Target Error and Warning Register. + 0x01C + read-write + + + OVR + Internal FIFO overrun flag. + [0:0] + + + UNR + Internal FIFO underrun flag. + [1:1] + + + UNR_NACK + I3C or I2C mode address emitted by the IP was NACKed by the targets. + [2:2] + + + CONT_RX_TERM + Controller terminated read in message mode. + [3:3] + + + INVSTART + Invalid START. + [4:4] + + + SDR_PAR + SDR Parity Error. + [8:8] + + + TO + Timeout Error. + [11:11] + + + RX_UNR + Read data underrun. + [16:16] + + + TX_OVR + Write data overrun. + [17:17] + + + + + TARG_DMACTRL + Target DMA Control Register. + 0x020 + read-write + + + RX_EN + DMA read enable. + [1:0] + + + DIS + Disable DMA. + 0 + + + ONE_FR + Enable DMA for one frame. + 1 + + + EN + Enable DMA until disabled by setting this field to 0b00. + 2 + + + + + TX_EN + DMA write enable. + [3:2] + + + DIS + Disable DMA. + 0 + + + ONE_FR + Enable DMA for one frame. + 1 + + + EN + Enable DMA until disabled by setting this field to 0b00. + 2 + + + + + WIDTH + Selects the data width for DMA transfers. + [5:4] + + + BYTE + Byte size. + 0 + + + HALFWORD + Halfword size. + 2 + + + + + + + TARG_FIFOCTRL + Target FIFO Control Register. + 0x02C + + + TX_FLUSH + Flush TX FIFO. + [0:0] + write-only + + + RX_FLUSH + Flush RX FIFO. + [1:1] + write-only + + + UNLOCK + Unlock FIFO Triggers. + [3:3] + write-only + + + TX_THD_LVL + TX FIFO trigger level. + [5:4] + read-write + + + EMPTY + Trigger when empty. + 0 + + + QUARTER_FULL + Trigger when quarter full or less. + 1 + + + HALF_FULL + Trigger when half full or less. + 2 + + + ALMOST_FULL + Trigger when almost full or less. + 3 + + + + + RX_THD_LVL + RX FIFO trigger level. + [7:6] + read-write + + + NOT_EMPTY + Trigger when empty. + 0 + + + QUARTER_FULL + Trigger when quarter full or less. + 1 + + + HALF_FULL + Trigger when half full or less. + 2 + + + 3_QUARTER_FULL + Trigger when 3 quarters full or less. + 3 + + + + + TX_LVL + Number of messages in TX FIFO. + [21:16] + read-only + + + RX_LVL + Number of messages in RX FIFO. + [29:24] + read-only + + + TX_FULL + TX FIFO Full flag. + [30:30] + read-only + + + RX_EM + RX FIFO Empty Flag. + [31:31] + read-only + + + + + TARG_TXFIFO8 + Target Write Byte Data Register. + 0x030 + write-only + + + DATA + Data byte to send. + [7:0] + + + END + End of data. + [8:8] + + + END2 + End of data. + [16:16] + + + + + TARG_TXFIFO8E + Target Write Byte Data as End Register. + 0x034 + write-only + + + DATA + Data is read from or written to this location. Transmit and receive FIFO are separate but both are addressed at this location. + [7:0] + + + + + TARG_TXFIFO16 + Target Write Half-Word Data Register. + 0x038 + write-only + + + DATA + Data halfword to send. + [15:0] + + + END + End of data. + [16:16] + + + + + TARG_TXFIFO16E + Target Write Half-Word Data as End Register. + 0x03C + write-only + + + DATA + Data halfword to send. + [15:0] + + + + + TARG_RXFIFO8 + Target Read Byte Data Register. + 0x040 + read-only + + + DATA + Read data byte from RX FIFO. + [7:0] + + + + + TARG_RXFIFO16 + Target Read Half-Word Data Register. + 0x048 + read-only + + + DATA + Read data hyalfword from RX FIFO. + [15:0] + + + + + TARG_TXFIFO8O + Target Byte-Only Write Byte Data Register. + 0x054 + write-only + + + DATA + Data byte to send. + [7:0] + + + + + TARG_CAP0 + Target Capabilities 0 Register. + 0x05C + read-only + + + MAPCNT + Number of mapped target addresses supported. + [3:0] + + + I2C_10BADDR + I2C 10-bit address support. + [4:4] + + + I2C_SWRST + I2C Software Reset Support. + [5:5] + + + I2C_DEVID + I2C Device ID Support. + [6:6] + + + FIFO32_REG + FIFO 32 registers available. + [7:7] + + + EXTIBI + Extended IBI data support. + [8:8] + + + EXTIBI_REG + Extended IBI data register support. + [9:9] + + + HDRBT_LANES + Multi-lane support for HDR-BT mode. + [13:12] + + + CCC_V1_1 + CCC V1.1 Support. + [16:16] + + + TARG_RST + Target Reset Support. + [17:17] + + + GROUPADDR + Group address support. + [19:18] + + + AASA_CCC + SETAASA CCC Support. + [21:21] + + + T2T_SUBSC + Target-to-target subscriber support. + [22:22] + + + T2T_WR + Target-to-target write support. + [23:23] + + + + + TARG_CAP1 + TARG_Capabilities 1 Register. + 0x060 + read-only + + + PROVID + Provisioned ID implementation. + [1:0] + + + PROVID_REG + Provision ID, Bus Characteristics, Device Characteristics implementation. + [5:2] + + + HDR_MODES + Supported HDR modes. + [8:6] + + + CONT + Controller mode capable. + [9:9] + + + STATADDR + I2C-style static address implementation. + [11:10] + + + CCCH + CCC Handled by IP. + [15:12] + + + BASIC + Basic CCCs. + 1 + + + LIMITS + CCCs related to maximum transfer lengths and speed. + 2 + + + INTACT + Pending Interrupt and Activity Mode fields of GETSTATUS CCC. + 4 + + + VENDOR + Vendor Reserved field of GETSTATUS CCC. + 8 + + + + + IBI_EVENTS + Supported IBI events. + [20:16] + + + IBI + IBI support. + 1 + + + PAYLOAD + IBI has payload. + 2 + + + CONTREQ + Controller request support. + 4 + + + HJ + Hot-Join support. + 8 + + + BAMATCH + Use BAMATCH field of CONFIG register to measure 1us Bus Available timing. + 16 + + + + + TIMECTRL + Timing Control Support. + [21:21] + + + EXTFIFO + External FIFO configuration. + [25:23] + + + TXFIFO_CFG + TX FIFO configuration. + [27:26] + + + RXFIFO_CFG + RX FIFO configuration. + [29:28] + + + INTR + Interrupt support. + [30:30] + + + DMA + DMA support. + [31:31] + + + + + TARG_DYNADDR + Target Dynamic Address Register. + 0x064 + read-write + + + VALID + Address valid check. + [0:0] + + + ADDR + The assigned dynamic address. + [7:1] + + + CAUSE + Indicates how the last primary dynnamic address value change occurred. + [10:8] + + + + + TARG_MAXLIMITS + Maximum Limits Register. + 0x068 + read-write + + + RX + The maximum number of bytes that the I3C controller may read from this I3C target device per message. + [11:0] + + + TX + The maximum number of bytes that the I3C controller may write from this I3C target device per message. + [27:16] + + + + + TARG_IDEXT + ID Extension Register. + 0x070 + read-write + + + DEVCHAR + Device Characteristics Register. + [15:8] + + + BUSCHAR + Bus Characteristics Register. + [23:16] + + + + + TARG_MSGLAST + Target Matching Address Index Register. + 0x07C + read-only + + + IDX + Index or group number of last matched address. + [3:0] + + + STATADDR + Last matched address was a I2C static address. + [4:4] + + + GROUP + Last matched address was a group address. + [5:5] + + + MODE + Indicates the mode of the last access. + [7:6] + + + DYN_STAT_ADDR + I3C SDR or I2C + 0 + + + HDR_DDR + HDR-DDR. + 1 + + + HDR_BT + HDR-BT. + 2 + + + + + PREV_IDX + Index or group number of previous matched address. + [11:8] + + + PREV_GROUP + Last matched address was a previous group address. + [13:13] + + + PREV_MODE + Indicates the mode of the previous access. + [15:14] + + + DYN_STAT_ADDR + I3C SDR or I2C + 0 + + + HDR_DDR + HDR-DDR. + 1 + + + HDR_BT + HDR-BT. + 2 + + + + + SECPREV_IDX + Index or group number of secondary previous matched address. + [19:16] + + + SECPREV_GROUP + Last matched address was a secondary previous group address. + [21:21] + + + SECPREV_MODE + Indicates the mode of the secondary previous access. + [23:22] + + + DYN_STAT_ADDR + I3C SDR or I2C + 0 + + + HDR_DDR + HDR-DDR. + 1 + + + HDR_BT + HDR-BT. + 2 + + + + + + + CONT_CTRL1 + Controller Control 1 Register. + 0x084 + + + REQ + Requests an I3C or I2C bus operation. + [2:0] + read-write + + + NONE + None operation. + 0 + + + EMIT_START + Emit a START with address and read-write bit from stopped state or in the middle of an SDR message. + 1 + + + EMIT_STOP + Emit a STOP. + 2 + + + IBI_ACKNACK + Manually ACK or NACK an IBI. + 3 + + + PROCESS_DAA + Process Dynamic Address Assignment. + 4 + + + EXIT_RST + Emit HDR Exit Pattern or Target Reset pattern. + 6 + + + AUTO_IBI + Automatic IBI response. + 7 + + + + + TYPE + Controls type of operation for REQ field. + [5:4] + read-write + + + IBIRESP + Response to use when an IBI occurs. + [7:6] + read-write + + + RDWR_DIR + Direction of the transfer. + [8:8] + read-write + + + ADDR + Address to send with START. + [15:9] + read-write + + + TERM_RD + Termination count for read. + [23:16] + read-write + + + + + CONT_STATUS + Controller Status Register. + 0x088 + + + STATE + Current working state. + [2:0] + read-only + + + IDLE + Bus Idle. + 0 + + + TARG_REQ + I3C Bus i stopped and a target is holding SDA low. + 1 + + + SDR_TXSDRMSG + SDR Message Mode using SDRMSG registers. + 2 + + + SDR_NORM + Normal SDR message mode. + 3 + + + DDR + DDR Message mode + 4 + + + DAA + Dynamic Address Assignment mode. + 5 + + + IBI_ACKNACK + IP is waiting for the application to provide an ACK or NACK decision. + 6 + + + IBI_RX + IP is receiving an IBI. + 7 + + + + + WAIT + Depending on STATE, WAIT is 1 when it's waiting in an intermediary state. + [4:4] + read-only + + + NACK + Address was NACKed. + [5:5] + read-only + + + IBITYPE + The type of event for which arbitration was last won. + [7:6] + + + NONE + None. + 0 + + + IBI + In-band Interrupt. + 1 + + + CONT_REQ + Controller request. + 2 + + + HOTJOIN_REQ + Hot-Join request. + 3 + + + + + TARG_START + Target START detected. + [8:8] + + + REQ_DONE + CTRL1 Request completed. + [9:9] + read-only + + + DONE + Message completed. + [10:10] + read-write + + + RX_RDY + Receive data ready. + [11:11] + read-only + + + TX_NFULL + TX FIFO Not Full flag. + [12:12] + read-only + + + IBI_WON + IBI Arbitration won. + [13:13] + read-write + + + ERRWARN + Error or warning status. + [15:15] + read-only + + + CONT_TRANS + IP transitioned from I3C target to controller. + [19:19] + read-write + + + IBI_ADDR + The address of a received IBI or dcontroller request. + [30:24] + read-only + + + + + CONT_IBIRULES + Controller IBI Registry and Rules Register. + 0x08C + + + ADDR0 + Target 0 dynamic address. + [5:0] + read-write + + + ADDR1 + Target 1 dynamic address. + [11:6] + read-write + + + ADDR2 + Target 2 dynamic address. + [17:12] + read-write + + + ADDR3 + Target 3 dynamic address. + [23:18] + read-write + + + ADDR4 + Target 4 dynamic address. + [29:24] + read-write + + + MSB0 + Implementation of MSb for I3C dynamic addresses. + [30:30] + read-write + + + NOBYTE + Specifies the function of ADDR0 to ADDR4 + [31:31] + read-write + + + + + CONT_INTEN + Controller Interrupt Enable Register. + 0x090 + read-write + + + TARG_START + Target Start Detected. + [8:8] + + + REQ_DONE + CTRL request completed. + [9:9] + + + DONE + Message complete. + [10:10] + + + RX_RDY + Receive data ready. + [11:11] + + + TX_NFULL + Ready for transmit data, + [12:12] + + + IBI_WON + IBI arbitration won. + [13:13] + + + ERRWARN + Error or warning interrupt. + [15:15] + + + NOW_CONT + The IP transitioned from I3C bus target to I3C bus controller. + [19:19] + + + + + CONT_INTCLR + Controller Interrupt Clear Register. + 0x094 + write-only + + + TARG_START + Target Start Detected. + [8:8] + + + REQ_DONE + CTRL request completed. + [9:9] + + + DONE + Message complete. + [10:10] + + + RX_RDY + Receive data ready. + [11:11] + + + TX_NFULL + Ready for transmit data, + [12:12] + + + IBI_WON + IBI arbitration won. + [13:13] + + + ERRWARN + Error or warning interrupt. + [15:15] + + + NOW_CONT + The IP transitioned from I3C bus target to I3C bus controller. + [19:19] + + + + + CONT_INTFL + Controller Interrupt Flag Register. + 0x098 + read-only + + + TARG_START + Target Start Detected. + [8:8] + + + REQ_DONE + CTRL request completed. + [9:9] + + + DONE + Message complete. + [10:10] + + + RX_RDY + Receive data ready. + [11:11] + + + TX_NFULL + Ready for transmit data, + [12:12] + + + IBI_WON + IBI arbitration won. + [13:13] + + + ERRWARN + Error or warning interrupt. + [15:15] + + + NOW_CONT + The IP transitioned from I3C bus target to I3C bus controller. + [19:19] + + + + + CONT_ERRWARN + Controller Error and Warning Register. + 0x09C + read-write + + + NACK + I3C or I2C mode address emitted by the IP was NACKed by the targets. + [2:2] + + + TX_ABT + Write aborted due to data NACK. + [3:3] + + + RX_TERM + Controller terminated read in messaage mode. + [4:4] + + + HDR_PAR + HDR Parity Error. + [9:9] + + + HDR_CRC + HDR-DDR CRC Error. + [10:10] + + + RX_UNR + Read data underrun. + [16:16] + + + TX_OVR + Write data overrun. + [17:17] + + + MSG + Message mode error. + [18:18] + + + INV_REQ + Invalid use of request from CTRL register. + [19:19] + + + TO + Timeout error. + [20:20] + + + + + CONT_DMACTRL + Controller DMA Control Register. + 0x0A0 + read-write + + + RX_EN + DMA read enable. + [1:0] + + + DIS + Disable DMA. + 0 + + + ONE_FR + Enable DMA for one frame. + 1 + + + EN + Enable DMA until disabled by setting this field to 0b00. + 2 + + + + + TX_EN + DMA write enable. + [3:2] + + + DIS + Disable DMA. + 0 + + + ONE_FR + Enable DMA for one frame. + 1 + + + EN + Enable DMA until disabled by setting this field to 0b00. + 2 + + + + + WIDTH + Selects the data width for DMA transfers. + [5:4] + + + BYTE + Byte size. + 0 + + + HALFWORD + Halfword size. + 2 + + + + + + + CONT_FIFOCTRL + Controller FIFO Control Register. + 0x0AC + + + TX_FLUSH + Flush TX FIFO. + [0:0] + write-only + + + RX_FLUSH + Flush RX FIFO. + [1:1] + write-only + + + UNLOCK + Unlock FIFO Triggers. + [3:3] + write-only + + + TX_THD_LVL + TX FIFO trigger level. + [5:4] + read-write + + + EMPTY + Trigger when empty. + 0 + + + QUARTER_FULL + Trigger when quarter full or less. + 1 + + + HALF_FULL + Trigger when half full or less. + 2 + + + ALMOST_FULL + Trigger when almost full or less. + 3 + + + + + RX_THD_LVL + RX FIFO trigger level. + [7:6] + read-write + + + NOT_EMPTY + Trigger when empty. + 0 + + + QUARTER_FULL + Trigger when quarter full or less. + 1 + + + HALF_FULL + Trigger when half full or less. + 2 + + + 3_QUARTER_FULL + Trigger when 3 quarters full or less. + 3 + + + + + TX_LVL + Number of messages in TX FIFO. + [21:16] + read-only + + + RX_LVL + Number of messages in RX FIFO. + [29:24] + read-only + + + TX_FULL + TX FIFO Full flag. + [30:30] + read-only + + + RX_EM + RX FIFO Empty Flag. + [31:31] + read-only + + + + + CONT_TXFIFO8 + Controller Write Byte Data Register. + 0x0B0 + write-only + + + DATA + Data byte to send. + [7:0] + + + END + End of data. + [8:8] + + + END2 + End of data. + [16:16] + + + + + CONT_TXFIFO8E + Controller Write Byte Data as End Register. + 0x0B4 + write-only + + + DATA + Data is read from or written to this location. Transmit and receive FIFO are separate but both are addressed at this location. + [7:0] + + + + + CONT_TXFIFO16 + Controller Write Half-Word Data Register. + 0x0B8 + write-only + + + DATA + Data halfword to send. + [15:0] + + + END + End of data. + [16:16] + + + + + CONT_TXFIFO16E + Controller Write Half-Word Data as End Register. + 0x0BC + write-only + + + DATA + Data halfword to send. + [15:0] + + + + + CONT_RXFIFO8 + Controller Read Byte Data Register. + 0x0C0 + read-only + + + DATA + Read data byte from RX FIFO. + [7:0] + + + + + CONT_RXFIFO16 + Controller Read Half-Word Data Register. + 0x0C8 + read-only + + + DATA + Read data hyalfword from RX FIFO. + [15:0] + + + + + CONT_TXFIFO8O + Controller Byte-Only Write Byte Data Register. + 0x0CC + write-only + + + DATA + Data byte to send. + [7:0] + + + + + CONT_TXSDRMSG_CTRL + Controller Start or Continue SDR Message Register. + 0x0D0 + read-write + + + RDWR_DIR + Direction of the transfer. + [0:0] + + + ADDR + Destination address of message. + [7:1] + + + END + Select how to end message. + [8:8] + + + I2C_EN + I2C Mode Enable. + [10:10] + + + LEN + Message length in bytes. + [15:11] + + + + + CONT_TXSDRMSG_FIFO + Controller Start or Continue SDR Message Register. + 0x0D0 + write-only + + + DATA + Data for SDR write message after control information has been written. + [15:0] + + + + + CONT_RXSDRMSG + Controller Read SDR Message Data Register. + 0x0D4 + read-only + + + DATA + Data for SDR write message after control information has been written. + [15:0] + + + + + CONT_TXDDRMSG + Controller Start or Continue DDR Message Register. + 0x0D8 + write-only + + + MSG + Data, address/command, and control information. + [15:0] + + + + + CONT_RXDDR16 + Controller Read DDR Message Data Register. + 0x0DC + read-only + + + DATA + Read data (16bits). + [15:0] + + + + + CONT_DYNADDR + Controller Dynamic Address Register. + 0x0E4 + read-write + + + ADDR + The assigned dynamic address. + [7:1] + + + VALID + Address valid check. + [8:8] + + + + + TARG_GROUPDEF + Target Group Definition Register. + 0x114 + read-only + + + ADDR_EN + Group Address enable. + [0:0] + + + ADDR + Group Address . + [7:1] + + + + + TARG_MAPCTRL0 + Target Primary Map Control Register. + 0x11C + read-write + + + DYNADDR_EN + Dynamic address is enabled. + [0:0] + + + DYNADDR + Dynamic address. + [7:1] + + + CAUSE + Indicates how the last primary dynamic address value change occurred. + [10:8] + + + + + TARG_MAPCTRL1 + Target Map Control 1 Register. + 0x120 + read-write + + + EN + Mapped address slot is enabled. + [0:0] + + + ADDR + Static or Dynamic address. + [7:1] + + + STATADDR_EN + ADDR field contains the I2C static address if enabled. + [8:8] + + + STATADDR_10B + Contains the upper 3 bits of a 10-bit I2C Static Address. + [11:9] + + + NACK + Indicates how the last primary dynamic address value change occurred. + [12:12] + + + + + TARG_MAPCTRL2 + Target Map Control 2 Register. + 0x124 + read-write + + + EN + Mapped address slot is enabled. + [0:0] + + + ADDR + Static or Dynamic address. + [7:1] + + + STATADDR_EN + ADDR field contains the I2C static address if enabled. + [8:8] + + + NACK + Indicates how the last primary dynamic address value change occurred. + [12:12] + + + AUTO_EN + Enable slot for automatic dynamic address assignment. + [13:13] + + + PID + Indicates how the last primary dynamic address value change occurred. + [31:14] + + + + + + + + ICC + Instruction Cache Controller Registers + 0x5002A000 + + 0x00 + 0x1000 + registers + + + + INFO + Cache ID Register. + 0x0000 + read-only + 32 + + + RELNUM + Release Number. Identifies the RTL release version. + 0 + 6 + + + PARTNUM + Part Number. This field reflects the value of C_ID_PART_NUMBER configuration parameter. + 6 + 4 + + + ID + Cache ID. This field reflects the value of the C_ID_CACHEID configuration parameter. + 10 + 6 + + + + + SZ + Memory Configuration Register. + 0x0004 + read-only + 0x00080008 + 32 + + + CCH + Cache Size. Indicates total size in Kbytes of cache. + 0 + 16 + + + MEM + Main Memory Size. Indicates the total size, in units of 128 Kbytes, of code memory accessible to the cache controller. + 16 + 16 + + + + + CTRL + Cache Control and Status Register. + 0x0100 + 32 + + + EN + Cache Enable. Controls whether the cache is bypassed or is in use. Changing the state of this bit will cause the instruction cache to be flushed and its contents invalidated. + 0 + 1 + + + dis + Cache Bypassed. Instruction data is stored in the line fill buffer but is not written to main cache memory array. + 0 + + + en + Cache Enabled. + 1 + + + + + RDY + Cache Ready flag. Cleared by hardware when at any time the cache as a whole is invalidated (including a system reset). When this bit is 0, the cache is effectively in bypass mode (instruction fetches will come from main memory or from the line fill buffer). Set by hardware when the invalidate operation is complete and the cache is ready. + 16 + 1 + read-only + + + notReady + Not Ready. + 0 + + + ready + Ready. + 1 + + + + + + + WAY + Cache Way Control Register. + 0x0200 + 32 + + + WAY + Number of cache way, default is always 2. Allowed values are 1,2,4. + 0 + 3 + + + 1 + 1 + 1 + + + 2 + 2 + 2 + + + 4 + 4 + 4 + + + + + + + REGCTRL + Regional Control Register. + 0x0204 + 32 + + + EN + Enable the regional high andlow bound compare, cache the data only if the TAG content between the high and low bound. + 0 + 8 + + + EXC + Cache the data only if the TAG content is excluded in the high and low bound. + 8 + 8 + + + + + 4 + 8 + REGION[%s] + Regional Low and High Bound Registers. + icc_reg + 0x0208 + 64 + read-write LBOUND Regional Low Bound Register. 0x0000 + 32 BOUND @@ -5943,6 +8677,7 @@ HBOUND DMA Channel Status Register. 0x004 + 32 BOUND @@ -5957,6 +8692,7 @@ PFMCTRL Performance Control Register. 0x0300 + 32 EN @@ -5970,6 +8706,7 @@ PFMCNT Performance Counter Register. 0x0304 + 32 CNT @@ -5984,6 +8721,7 @@ Invalidate All Registers. 0x0700 read-write + 32 INVALID @@ -5999,7 +8737,7 @@ MCR Misc Control. - 0x40006C00 + 0x50006C00 0x00 0x400 @@ -6007,16 +8745,22 @@ - ECCEN - ECC Enable Register - 0x00 + RST + Reset Register. + 0x04 - FLASH - ECC Flash Enable. + BOOST + Reset BOOST Controller. 0 1 + + RSTZ + Reset RSTZ Controller. + 1 + 1 + @@ -6030,12 +8774,6 @@ 0 1 - - PDOWN_EN - Power Down Output Enable. - 1 - 1 - @@ -6044,92 +8782,61 @@ 0x10 - ERTCO_EN - Enable ERTCO 4KHz. - 3 - 1 + CLKSEL + Clock select for RTC, WUTs, and Timers. + 0 + 2 + + + ERTCO + ERTCO as clock source. + 0 + + + INRO + INRO as clock source. + 1 + + + EXTCLK + P0.12 div 8 as clock source. + 2 + + ERTCO_32KHZ_EN Enable ERTCO 32KHz while ERTCO_EN. - 5 - 1 - - - - - GPIO1_CTRL - GPIO1 Pin Control Register. - 0x20 - - - P1_0_OUT - GPIO1 Pin 0 Data Output. - 0 - 1 - - - P1_0_OUTEN - GPIO1 Pin 0 Output Enable. - 1 - 1 - - - P1_0_PUPEN - GPIO1 Pin 0 Pull-up Enable. - 2 - 1 - - - P1_0_IN - GPIO1 Pin 0 Input Status. 3 1 - P1_1_OUT - GPIO1 Pin 1 Data Output. - 4 - 1 - - - P1_1_OUTEN - GPIO1 Pin 1 Output Enable. + ERTCO_EN + Enable ERTCO 4KHz. 5 1 - - P1_1_PUPEN - GPIO1 Pin 1 Pull-up Enable. - 6 - 1 - - - P1_1_IN - GPIO1 Pin 1 Input Status. - 7 - 1 - - RTCTRIM - User RTC Trim Register. - 0x24 - - - X2 - RTC X2 Trim. - 0 - 5 - - - X1 - RTC X1 Trim. - 5 - 5 - - + BBREG0 + Battery Back Reg0. + 0x30 + + + BBREG1 + Battery Back Reg1. + 0x34 + + + BBDATA0 + Battery Back Data0 Register. + 0x40 + + + BBDATA1 + Battery Back Data1 Register. + 0x44 @@ -6137,7 +8844,7 @@ PWRSEQ Power Sequencer / Low Power Control Register. - 0x40006800 + 0x50006800 0x00 0x400 @@ -6156,37 +8863,55 @@ 5 - FAST - Fast mode. - 8 + BG_DIS + Bandgap OFF. This controls the System Bandgap in DeepSleep mode. + 11 + 1 + + + on + Bandgap is always ON. + 0 + + + off + Bandgap is OFF in DeepSleep mode (default). + 1 + + + + + RETLDO_EN + Retention LDO Enable. + 12 1 dis - Disabled. + Disable. 0 en - Enabled. + Enable. 1 - BG_DIS - Bandgap OFF. This controls the System Bandgap in DeepSleep mode. - 11 + LDO_EN_DLY + Core LDO Enable Delay. + 13 1 - on - Bandgap is always ON. + dis + Disable. 0 - off - Bandgap is OFF in DeepSleep mode (default). + en + Enable delay LDO power up to smooth LDO voltage drop. 1 @@ -6225,32 +8950,6 @@ - - LPWKFL1 - Low Power I/O Wakeup Status Register 1. This register indicates the low power wakeup status for GPIO1. - 0x0C - - - PINS - Wakeup Flags. - 0 - 12 - - - - - LPWKEN1 - Low Power I/O Wakeup Enable Register 1. This register enables low power wakeup functionality for GPIO1. - 0x10 - - - PINS - Enable wakeup. These bits allow wakeup from the corresponding GPIO pin (s) on transition (s) from low to high or high to low when PM.GPIOWKEN is set. Wakeup status is indicated in PPWKST register. - 0 - 2 - - - LPPWST Low Power Peripheral Wakeup Status Register. @@ -6284,686 +8983,934 @@ - RTC - Real Time Clock and Alarm. - 0x40006000 + MPC + Memory Protection Controller. + 0x50091000 0x00 - 0x400 + 0x1000 registers - - RTC - RTC interrupt. - 3 - - SEC - RTC Second Counter. This register contains the 32-bit second counter. - 0x00 - 0x00000000 + CTRL + Control Register. + 0x0000 + 32 - SEC - Seconds Counter. + SEC_ERR + Security Error Response COnfiguration. + 4 + 1 + + + DATAIF_REQ + Data interface gating request. + 6 + 1 + + + DATAIF_ACK + Data interface gating acknowledged. + 7 + 1 + + + AUTO_INC + Auto-increment. + 8 + 1 + + + SEC_LOCKDOWN + Security Lockdown. + 31 + 1 + + + + + BLK_MAX + Maximum value of block-based index register. + 0x0010 + 32 + read-only + + + VAL + Maximum value of block-based index register. 0 32 - SSEC - RTC Sub-second Counter. This counter increments at 256Hz. RTC_SEC is incremented when this register rolls over from 0xFF to 0x00. - 0x04 - 0x00000000 + BLK_CFG + Block Control Register. + 0x0014 + 32 + read-only - SSEC - Sub-Seconds Counter (12-bit). + SIZE + Block Size. 0 - 12 + 4 + + + INIT_ST + Initialization in progress. + 31 + 1 - TODA - Time-of-day Alarm. - 0x08 - 0x00000000 + BLK_IDX + Block Index Register. + 0x0018 - TOD_ALARM - Time-of-day Alarm. + IDX + Index value for accessing block-based lookup table. 0 - 20 + 32 - SSECA - RTC sub-second alarm. This register contains the reload value for the sub-second alarm. - 0x0C - 0x00000000 + BLK_LUT + Block-based gating Look Up Table Register. + 0x001C - SSEC_ALARM - This register contains the reload value for the sub-second alarm. + ACCESS + Each bit indicates one block, based on the index pointed by the BLKIDX register. 0 32 - CTRL - RTC Control Register. - 0x10 - 0x00000008 - 0xFFFFFF38 + INT_STAT + Interrupt Flag Register. + 0x0020 + read-only - EN - Real Time Clock Enable. This bit enables the Real Time Clock. This bit can only be written when WE=1 and BUSY =0. Change to this bit is effective only after BUSY is cleared from 1 to 0. + MPC_IRQ + MPC IRQ triggered. + 0 + 1 + + + + + INT_CLEAR + Interrupt Clear Register. + 0x0024 + write-only + + + MPC_IRQ + MPC IRQ Clear. + 0 + 1 + + + + + INT_EN + Interrupt Enable Register. + 0x0028 + + + MPC_IRQ + MPC IRQ Enable. + 0 + 1 + + + + + INT_INFO1 + Interrupt Info 1 Register. + 0x002C + read-only + + + HADDR + AHB bus signals: Address bus. + 0 + 32 + + + + + INT_INFO2 + Interrupt Info 2 Register. + 0x0030 + read-only + + + HMASTER + AHB bus signals: Master Select. + 0 + 16 + + + HNONSEC + AHB bus signals: Indicates the current transfer is either a Non-Secure or Secure transfer. + 16 + 1 + + + CFG_NS + Security state. + 17 + 1 + + + + + INT_SET + Interrupt Set Debug Register. + 0x0034 + write-only + + + MPC_IRQ + MPC IRQ Set. 0 1 - - - dis - Disable. - 0 - - - en - Enable. - 1 - - + + + + PIDR4 + Peripheral ID 4 Register. + 0x0FD0 + read-only + + + PIDR5 + Peripheral ID 5 Register. + 0x0FD4 + read-only + + + PIDR6 + Peripheral ID 6 Register. + 0x0FD8 + read-only + + + PIDR7 + Peripheral ID 6 Register. + 0x0FDC + read-only + + + PIDR0 + Peripheral ID 0 Register. + 0x0FE0 + read-only + + + PIDR1 + Peripheral ID 1 Register. + 0x0FE4 + read-only + + + PIDR2 + Peripheral ID 2 Register. + 0x0FE8 + read-only + + + PIDR3 + Peripheral ID 3 Register. + 0x0FEC + read-only + + + CIDR0 + Component ID register. + 0x0FF0 + read-only + + + CIDR1 + Component ID register. + 0x0FF4 + read-only + + + CIDR2 + Component ID register. + 0x0FF8 + read-only + + + CIDR3 + Component ID register. + 0x0FFC + read-only + + + + + + MPC1 + Memory Protection Controller. 1 + 0x50092000 + + + + MPC2 + Memory Protection Controller. 2 + 0x50093000 + + + + MPC3 + Memory Protection Controller. 3 + 0x50094000 + + + + MPC4 + Memory Protection Controller. 4 + 0x50095000 + + + + MPC5 + Memory Protection Controller. 5 + 0x50096000 + + + + NSPC + Non-Secure Privilege Controller. + 0x40090000 + + 0x00 + 0x1000 + registers + + + + APBPRIV + APB Tartet Privileged/Non-privileged PPC Access Register. + 0x0160 + - TOD_ALARM_IE - Alarm Time-of-Day Interrupt Enable. Change to this bit is effective only after BUSY is cleared from 1 to 0. - 1 - 1 + PERIPH + Each bit configures the APB PPC to enforce the security access allowed for an individual peripheral. + 0 + 32 - dis - Disable. - 0 + GCR + Privilege setting for GCR. + 0x01 - en - Enable. - 1 + SIR + Privilege setting for SIR. + 0x02 - - - - SSEC_ALARM_IE - Alarm Sub-second Interrupt Enable. Change to this bit is effective only after BUSY is cleared from 1 to 0. - 2 - 1 - - dis - Disable. - 0 + FCR + Privilege setting for FCR. + 0x04 - en - Enable. - 1 + WDT + Privilege setting for WDT. + 0x08 - - - - BUSY - RTC Busy. This bit is set to 1 by hardware when changes to RTC registers required a synchronized version of the register to be in place. This bit is automatically cleared by hardware. - 3 - 1 - read-only - - idle - Idle. - 0 + AES + Privilege setting for AES. + 0x010 - busy - Busy. - 1 + AESKEYS + Privilege setting for AESKEYS. + 0x020 - - - - RDY - RTC Ready. This bit is set to 1 by hardware when the RTC count registers update. It can be cleared to 0 by software at any time. It will also be cleared to 0 by hardware just prior to an update of the RTC count register. - 4 - 1 - - busy - Register has not updated. - 0 + CRC + Privilege setting for CRC. + 0x040 - ready - Ready. - 1 + GPIO0 + Privilege setting for GPIO0. + 0x080 - - - - RDY_IE - RTC Ready Interrupt Enable. - 5 - 1 - - dis - Disable. - 0 + TMR0 + Privilege setting for TMR0. + 0x0100 - en - Enable. - 1 + TMR1 + Privilege setting for TMR1. + 0x0200 - - - - TOD_ALARM_IF - Time-of-Day Alarm Interrupt Flag. This alarm is qualified as wake-up source to the processor. - 6 - 1 - read-only - - inactive - Not active. - 0 + TMR2 + Privilege setting for TMR2. + 0x0400 - pending - Active. - 1 + TMR3 + Privilege setting for TMR3. + 0x0800 - - - - SSEC_ALARM_IF - Sub-second Alarm Interrupt Flag. This alarm is qualified as wake-up source to the processor. - 7 - 1 - read-only - - inactive - Not active. - 0 + TMR4 + Privilege setting for TMR4. + 0x01000 - pending - Active. - 1 + TMR5 + Privilege setting for TMR5. + 0x02000 - - - - SQW_EN - Square Wave Output Enable. - 8 - 1 - - dis - Disable. - 0 + I3C + Privilege setting for I3C. + 0x04000 - en - Enable. - 1 + UART + Privilege setting for UART. + 0x08000 - - - - SQW_SEL - Frequency Output Selection. When SQE=1, these bits specify the output frequency on the SQW pin. - 9 - 2 - - freq1Hz - 1 Hz (Compensated). - 0 + SPI + Privilege setting for SPI. + 0x010000 - freq512Hz - 512 Hz (Compensated). - 1 + TRNG + Privilege setting for TRNG. + 0x020000 - freq4KHz - 4 KHz. - 2 + BTLE_DBB + Privilege setting for BTLE DBB. + 0x040000 - - - - RD_EN - Asynchronous Counter Read Enable. - 14 - 1 - - sync - Synchronous. - 0 + BTLE_RFFE + Privilege setting for BTLE RFFE. + 0x080000 - async - Asynchronous. - 1 + RSTZ + Privilege setting for RSTZ. + 0x0100000 - - - - WR_EN - Write Enable. This register bit serves as a protection mechanism against unintentional writes to critical RTC bits. - 15 - 1 - - ignore - Ignored. - 0 + BOOST + Privilege setting for Boost Controller. + 0x0200000 - allow - Allowed. - 1 + TRIMSIR + Privilege setting for TRIMSIR. + 0x0400000 - - - - - - TRIM - RTC Trim Register. - 0x14 - 0x00000000 - - - TRIM - RTC Trim. This register contains the 2's complement value that specifies the trim resolution. Each increment or decrement of the bit adds or subtracts 1ppm at each 4KHz clock value, with a maximum correction of +/- 127ppm. - 0 - 8 - - - VBAT_TMR - VBAT Timer Value. When RTC is running off of VBAT, this field is incremented every 32 seconds. - 8 - 24 - - - - - OSCCTRL - RTC Oscillator Control Register. - 0x18 - 0x00000000 - - - FILTER_EN - Enable Filter. - 0 - 1 - - - IBIAS_SEL - IBIAS Select. - 1 - 1 - - 2x - 2x - 0 + RTC + Privilege setting for RTC. + 0x01000000 - 4x - 4x - 1 + WUT0 + Privilege setting for WUT0. + 0x02000000 - - - - HYST_EN - RTC Hysteresis Enable. - 2 - 1 - - - IBIAS_EN - RTC IBIAS Enable. - 3 - 1 - - - BYPASS - RTC Crystal Bypass - 4 - 1 - - dis - Disable. - 0 + WUT1 + Privilege setting for WUT1. + 0x04000000 - en - Enable. - 1 + PWRSEQ + Privilege setting for Power Sequencer. + 0x08000000 - - - - SQW_32K - RTC 32kHz Square Wave Output - 5 - 1 - - dis - Disable. - 0 + MCR + Privilege setting for MCR. + 0x10000000 - en - Enable. - 1 + ALL + Privilege setting for all peripherals. + 0x1F7FFFFF + + AHBMPRIV + AHB Privileged/Non-Privileged Non-Secure DMA Access Register. + 0x0170 + + + DMA + Control access for transactions coming from the Non-Secure DMA. + 1 + 1 + + + - SEMA - The Semaphore peripheral allows multiple cores in a system to cooperate when accessing shred resources. - The peripheral contains eight semaphores that can be atomically set and cleared. It is left to the discretion of the software - architect to decide how and when the semaphores are used and how they are allocated. Existing hardware does not have to be - - modified for this type of cooperative sharing, and the use of semaphores is exclusively within the software domain. - 0x4003E000 + RSTZ + RSTZ Controller + 0x50004800 0x00 - 0x1000 + 0x400 registers - 8 - 4 - SEMAPHORES[%s] - Read to test and set, returns prior value. Write 0 to clear semaphore. - 0x00 + CTRL + RSTZ Control Register. + 0x000 32 - sema - 0 - 1 + EN + Enable channels. + [0:0] + read-write + + + SVC_EN + Enable the SVC. + [1:1] + read-write + + + CH_SEL + Channel Select. + [4:2] + read-write + + + CAL_EN + Calibration mode enable. + [5:5] + read-write + + + DMEASURE_EN + Direct Measure mode enable. + [6:6] + read-write + + + OFFTR_P + Offset Trim for positive comparator. + [11:7] + read-write + + + OFFTR_N + Offset Trim for negative comparator. + [16:12] + read-write + + + DOUT + Comparator Result. + [17:17] + read-write + + + CAL_DOUT_POL + Calibration DOUT Polarity. + [18:18] + read-write + + + NUM_SAMP + Number of captures per sample. + [27:24] + read-write + + + TRIP_TOL + Number of failed DOUT captures (tolerance) before corresponding RSTZ signal is tripped. + [31:28] + read-write - irq0 - Semaphore IRQ0 register. - 0x40 - 32 + BOOST_CLKCTRL + Boost Clock Control Register. + 0x004 - en - 0 - 1 + EXIT_NUM_SAMP + Defines how many samples needed of boost output channel to perform when exiting low-power mode before returning to normal active operation. + [1:0] + read-write - cm4_irq - 16 - 1 + CH_SEL + Select when channel the output of the boost converter is monitored on. + [4:2] + read-write - mail0 - Semaphore Mailbox 0 register. - 0x44 + 8 + 4 + STATUS_CH[%s] + Channel X Status Register. + 0x028 32 + read-write - data + RSTZ + Result of most recent sample result. + [0:0] + read-only + + + DOUT + Store the most recent DOUT capture for a given channel. + [1:1] + read-only + + + RSTZ_FL + RSTZ Flag indicates the RSTZ was tripped at some point since the last time being cleared. + [31:31] + read-write + + + + + + + + RTC + Real Time Clock and Alarm. + 0x50006000 + + 0x00 + 0x400 + registers + + + RTC + RTC interrupt. + 3 + + + + SEC + RTC Second Counter. This register contains the 32-bit second counter. + 0x00 + 0x00000000 + + + SEC + Seconds Counter. 0 32 - irq1 - Semaphore IRQ1 register. - 0x48 - 32 + SSEC + RTC Sub-second Counter. This counter increments at 256Hz. RTC_SEC is incremented when this register rolls over from 0xFF to 0x00. + 0x04 + 0x00000000 - en + SSEC + Sub-Seconds Counter (12-bit). 0 - 1 + 12 + + + + TODA + Time-of-day Alarm. + 0x08 + 0x00000000 + - rv32_irq - 16 - 1 + TOD_ALARM + Time-of-day Alarm. + 0 + 20 - mail1 - Semaphore Mailbox 1 register. - 0x4C - 32 + SSECA + RTC sub-second alarm. This register contains the reload value for the sub-second alarm. + 0x0C + 0x00000000 - data + SSEC_ALARM + This register contains the reload value for the sub-second alarm. 0 32 - status - Semaphore status bits. 0 indicates the semaphore is free, 1 indicates taken. - 0x100 - 32 + CTRL + RTC Control Register. + 0x10 + 0x00000008 + 0xFFFFFF38 - status0 + EN + Real Time Clock Enable. This bit enables the Real Time Clock. This bit can only be written when WE=1 and BUSY =0. Change to this bit is effective only after BUSY is cleared from 1 to 0. 0 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + - status1 + TOD_ALARM_IE + Alarm Time-of-Day Interrupt Enable. Change to this bit is effective only after BUSY is cleared from 1 to 0. 1 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + - status2 + SSEC_ALARM_IE + Alarm Sub-second Interrupt Enable. Change to this bit is effective only after BUSY is cleared from 1 to 0. 2 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + - status3 + BUSY + RTC Busy. This bit is set to 1 by hardware when changes to RTC registers required a synchronized version of the register to be in place. This bit is automatically cleared by hardware. 3 1 + read-only + + + idle + Idle. + 0 + + + busy + Busy. + 1 + + - status4 + RDY + RTC Ready. This bit is set to 1 by hardware when the RTC count registers update. It can be cleared to 0 by software at any time. It will also be cleared to 0 by hardware just prior to an update of the RTC count register. 4 1 + + + busy + Register has not updated. + 0 + + + ready + Ready. + 1 + + - status5 + RDY_IE + RTC Ready Interrupt Enable. 5 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + - status6 + TOD_ALARM_IF + Time-of-Day Alarm Interrupt Flag. This alarm is qualified as wake-up source to the processor. 6 1 + read-only + + + inactive + Not active. + 0 + + + pending + Active. + 1 + + - status7 - 7 - 1 - - - - - - - - SIMO - Single Inductor Multiple Output Switching Converter - 0x40004400 - - 0x00 - 0x400 - registers - - - - VREGO_A - Buck Voltage Regulator A Control Register - 0x0004 - read-write - - - VSETA - Regulator Output Voltage Setting - 0 - 7 - - - RANGEA - Regulator Output Range Set + SSEC_ALARM_IF + Sub-second Alarm Interrupt Flag. This alarm is qualified as wake-up source to the processor. 7 1 + read-only - low - Low output voltage range + inactive + Not active. 0 - high - High output voltage range + pending + Active. 1 - - - - VREGO_B - Buck Voltage Regulator B Control Register - 0x0008 - read-write - - - VSETB - Regulator Output Voltage Setting - 0 - 7 - - RANGEB - Regulator Output Range Set - 7 + SQW_EN + Square Wave Output Enable. + 8 1 - low - Low output voltage range + dis + Disable. 0 - high - High output voltage range + en + Enable. 1 - - - - VREGO_C - Buck Voltage Regulator C Control Register - 0x000C - read-write - - VSETC - Regulator Output Voltage Setting - 0 - 7 + SQW_SEL + Frequency Output Selection. When SQE=1, these bits specify the output frequency on the SQW pin. + 9 + 2 + + + freq1Hz + 1 Hz (Compensated). + 0 + + + freq512Hz + 512 Hz (Compensated). + 1 + + + freq4KHz + 4 KHz. + 2 + + - RANGEC - Regulator Output Range Set - 7 + RD_EN + Asynchronous Counter Read Enable. + 14 1 - low - Low output voltage range + sync + Synchronous. 0 - high - High output voltage range + async + Asynchronous. 1 - - - - VREGO_D - Buck Voltage Regulator D Control Register - 0x0010 - read-write - - - VSETD - Regulator Output Voltage Setting - 0 - 7 - - RANGED - Regulator Output Range Set - 7 + WR_EN + Write Enable. This register bit serves as a protection mechanism against unintentional writes to critical RTC bits. + 15 1 - low - Low output voltage range + ignore + Ignored. 0 - high - High output voltage range + allow + Allowed. 1 @@ -6971,269 +9918,103 @@ - IPKA - High Side FET Peak Current VREGO_A/VREGO_B Register - 0x0014 - read-write - - - IPKSETA - Voltage Regulator Peak Current Setting - 0 - 4 - - - IPKSETB - Voltage Regulator Peak Current Setting - 4 - 4 - - - - - IPKB - High Side FET Peak Current VREGO_C/VREGO_D Register - 0x0018 - read-write - - - IPKSETC - Voltage Regulator Peak Current Setting - 0 - 4 - - - IPKSETD - Voltage Regulator Peak Current Setting - 4 - 4 - - - - - MAXTON - Maximum High Side FET Time On Register - 0x001C - read-write - - - TONSET - Sets the maximum on time for the high side FET, each increment represents 500ns - 0 - 4 - - - - - ILOAD_A - Buck Cycle Count VREGO_A Register - 0x0020 - read-only - - - ILOADA - Number of buck cycles that occur within the cycle clock - 0 - 8 - - - - - ILOAD_B - Buck Cycle Count VREGO_B Register - 0x0024 - read-only + TRIM + RTC Trim Register. + 0x14 + 0x00000000 - ILOADB - Number of buck cycles that occur within the cycle clock + TRIM + RTC Trim. This register contains the 2's complement value that specifies the trim resolution. Each increment or decrement of the bit adds or subtracts 1ppm at each 4KHz clock value, with a maximum correction of +/- 127ppm. 0 8 - - - - ILOAD_C - Buck Cycle Count VREGO_C Register - 0x0028 - read-only - - ILOADC - Number of buck cycles that occur within the cycle clock - 0 - 8 + VBAT_TMR + VBAT Timer Value. When RTC is running off of VBAT, this field is incremented every 32 seconds. + 8 + 24 - ILOAD_D - Buck Cycle Count VREGO_D Register - 0x002C - read-only + OSCCTRL + RTC Oscillator Control Register. + 0x18 + 0x00000000 - ILOADD - Number of buck cycles that occur within the cycle clock + FILTER_EN + Enable Filter. 0 - 8 + 1 - - - - BUCK_ALERT_THR_A - Buck Cycle Count Alert VERGO_A Register - 0x0030 - read-write - - BUCKTHRA - Threshold for ILOADA to generate the BUCK_ALERT - 0 - 8 + IBIAS_SEL + IBIAS Select. + 1 + 1 + + + 2x + 2x + 0 + + + 4x + 4x + 1 + + - - - - BUCK_ALERT_THR_B - Buck Cycle Count Alert VERGO_B Register - 0x0034 - read-write - - BUCKTHRB - Threshold for ILOADB to generate the BUCK_ALERT - 0 - 8 + HYST_EN + RTC Hysteresis Enable. + 2 + 1 - - - - BUCK_ALERT_THR_C - Buck Cycle Count Alert VERGO_C Register - 0x0038 - read-write - - BUCKTHRC - Threshold for ILOADC to generate the BUCK_ALERT - 0 - 8 + IBIAS_EN + RTC IBIAS Enable. + 3 + 1 - - - - BUCK_ALERT_THR_D - Buck Cycle Count Alert VERGO_D Register - 0x003C - read-write - - BUCKTHRD - Threshold for ILOADD to generate the BUCK_ALERT - 0 - 8 + BYPASS + RTC Crystal Bypass + 4 + 1 + + + dis + Disable. + 0 + + + en + Enable. + 1 + + - - - - BUCK_OUT_READY - Buck Regulator Output Ready Register - 0x0040 - read-only - - BUCKOUTRDYA - When set, indicates that the output voltage has reached its regulated value - 0 + SQW_32K + RTC 32kHz Square Wave Output + 5 1 - notrdy - Output voltage not in range + dis + Disable. 0 - rdy - Output voltage in range + en + Enable. 1 - - BUCKOUTRDYB - When set, indicates that the output voltage has reached its regulated value - 1 - 1 - - - BUCKOUTRDYC - When set, indicates that the output voltage has reached its regulated value - 2 - 1 - - - BUCKOUTRDYD - When set, indicates that the output voltage has reached its regulated value - 3 - 1 - - - - - ZERO_CROSS_CAL_A - Zero Cross Calibration VERGO_A Register - 0x0044 - read-only - - - ZXCALA - Zero Cross Calibrartion Value VREGO_A - 0 - 4 - - - - - ZERO_CROSS_CAL_B - Zero Cross Calibration VERGO_B Register - 0x0048 - read-only - - - ZXCALB - Zero Cross Calibrartion Value VREGO_B - 0 - 4 - - - - - ZERO_CROSS_CAL_C - Zero Cross Calibration VERGO_C Register - 0x004C - read-only - - - ZXCALC - Zero Cross Calibrartion Value VREGO_C - 0 - 4 - - - - - ZERO_CROSS_CAL_D - Zero Cross Calibration VERGO_D Register - 0x0050 - read-only - - - ZXCALD - Zero Cross Calibrartion Value VREGO_D - 0 - 4 - @@ -7242,7 +10023,7 @@ SIR System Initialization Registers. - 0x40000400 + 0x50000400 read-only 0x00 @@ -7253,7 +10034,7 @@ SISTAT System Initialization Status Register. - 0x00 + 0x000 read-only @@ -7301,7 +10082,7 @@ ADDR Read-only field set by the SIB block if a CRC error occurs during the read of the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). - 0x04 + 0x004 read-only @@ -7311,6 +10092,32 @@ + + BTLELDO_BB + BTLE LDO TRIM BB Register. + 0x01C + + + TRIM + Target 0.9V. VDDA BB Voltage Trim. + 0 + 5 + + + + + BTLELDO_RF + BTLE LDO TRIM RF Register. + 0x002C + + + TRIM + Target 0.9V. VDDA RF Voltage Trim. + 0 + 5 + + + SFSTAT Security function status register. @@ -7470,7 +10277,7 @@ APBPPC Interrupt Status of APB PPC for targets on APB bus. Each bit ties to an individual PPC in the system. 0 - 2 + 4 @@ -7484,7 +10291,7 @@ APBPPC Interrupt Clear of APB PPC for targets on the APB bus. Each bit ties to an individual PPC in the system. 0 - 2 + 4 @@ -7497,7 +10304,7 @@ APBPPC Interrupt Enable for APB PPC for targets on the APB bus. Each bit ties to an individual PPC in the system. 0 - 2 + 4 @@ -7554,18 +10361,6 @@ Lock Security Attribution Unit (SAU). 4 1 - - - DIS - TX DMA requests are disabled, andy pending DMA requests are cleared. - 0 - - - en - TX DMA requests are enabled. - 1 - - @@ -7579,6 +10374,153 @@ Each bit configures the APB PPC to enforce the security access allowed for an individual peripheral. 0 32 + + + GCR + Security Access for GCR. + 0x01 + + + SIR + Security Access for SIR. + 0x02 + + + FCR + Security Access for FCR. + 0x04 + + + WDT + Security Access for WDT. + 0x08 + + + AES + Security Access for AES. + 0x010 + + + AESKEYS + Security Access for AESKEYS. + 0x020 + + + CRC + Security Access for CRC. + 0x040 + + + GPIO0 + Security Access for GPIO0. + 0x080 + + + TMR0 + Security Access for TMR0. + 0x0100 + + + TMR1 + Security Access for TMR1. + 0x0200 + + + TMR2 + Security Access for TMR2. + 0x0400 + + + TMR3 + Security Access for TMR3. + 0x0800 + + + TMR4 + Security Access for TMR4. + 0x01000 + + + TMR5 + Security Access for TMR5. + 0x02000 + + + I3C + Security Access for I3C. + 0x04000 + + + UART + Security Access for UART. + 0x08000 + + + SPI + Security Access for SPI. + 0x010000 + + + TRNG + Security Access for TRNG. + 0x020000 + + + BTLE_DBB + Security Access for BTLE DBB. + 0x040000 + + + BTLE_RFFE + Security Access for BTLE RFFE. + 0x080000 + + + RSTZ + Security Access for RSTZ. + 0x0100000 + + + BOOST + Security Access for Boost Controller. + 0x0200000 + + + TRIMSIR + Security Access for TRIMSIR. + 0x0400000 + + + RTC + Security Access for RTC. + 0x01000000 + + + WUT0 + Security Access for WUT0. + 0x02000000 + + + WUT1 + Security Access for WUT1. + 0x04000000 + + + PWRSEQ + Security Access for Power Sequencer. + 0x08000000 + + + MCR + Security Access for MCR. + 0x10000000 + + + ALL + Security Access for all peripherals. + 0x1F7FFFFF + + @@ -7592,58 +10534,179 @@ Each bit configures the APB PPC to enforce the security access allowed for an individual peripheral. 0 32 + + + GCR + Privilege setting for GCR. + 0x01 + + + SIR + Privilege setting for SIR. + 0x02 + + + FCR + Privilege setting for FCR. + 0x04 + + + WDT + Privilege setting for WDT. + 0x08 + + + AES + Privilege setting for AES. + 0x010 + + + AESKEYS + Privilege setting for AESKEYS. + 0x020 + + + CRC + Privilege setting for CRC. + 0x040 + + + GPIO0 + Privilege setting for GPIO0. + 0x080 + + + TMR0 + Privilege setting for TMR0. + 0x0100 + + + TMR1 + Privilege setting for TMR1. + 0x0200 + + + TMR2 + Privilege setting for TMR2. + 0x0400 + + + TMR3 + Privilege setting for TMR3. + 0x0800 + + + TMR4 + Privilege setting for TMR4. + 0x01000 + + + TMR5 + Privilege setting for TMR5. + 0x02000 + + + I3C + Privilege setting for I3C. + 0x04000 + + + UART + Privilege setting for UART. + 0x08000 + + + SPI + Privilege setting for SPI. + 0x010000 + + + TRNG + Privilege setting for TRNG. + 0x020000 + + + BTLE_DBB + Privilege setting for BTLE DBB. + 0x040000 + + + BTLE_RFFE + Privilege setting for BTLE RFFE. + 0x080000 + + + RSTZ + Privilege setting for RSTZ. + 0x0100000 + + + BOOST + Privilege setting for Boost Controller. + 0x0200000 + + + TRIMSIR + Privilege setting for TRIMSIR. + 0x0400000 + + + RTC + Privilege setting for RTC. + 0x01000000 + + + WUT0 + Privilege setting for WUT0. + 0x02000000 + + + WUT1 + Privilege setting for WUT1. + 0x04000000 + + + PWRSEQ + Privilege setting for Power Sequencer. + 0x08000000 + + + MCR + Privilege setting for MCR. + 0x10000000 + + + ALL + Privilege setting for all peripherals. + 0x1F7FFFFF + + - GPIO0 - Secure GPIO0 Configuration Register. - 0x0180 + AHBMPRIV + AHB Privileged/Non-privileged Secure DMA Access. + 0x0170 - PINS - Each bit configures a GPIO pin as secore or non-secure on GPIO Port 0. Secure GPIO pins prevent software from reading GPIO Data In pin states. + DMA + Controls access of transactions coming from the Secure DMA. 0 - 12 + 1 - GPIO1 - Secure GPIO1 Configuration Register. - 0x0184 + GPIO0 + Secure GPIO0 Configuration Register. + 0x0180 PINS - Each bit configures a GPIO pin as secore or non-secure on GPIO Port 0. Secure GPIO pins prevent software from reading GPIO Data In pin states. - 0 - 2 - - - - - - - - NSPC - Non-Secure Privilege Controller. - 0x40090000 - - 0x00 - 0x1000 - registers - - - - APBPRIV - APB Tartet Privileged/Non-privileged PPC Access Register. - 0x0160 - - - PERIPH - Each bit configures the APB PPC to enforce the security access allowed for an individual peripheral. + Each bit configures a GPIO pin as secure or non-secure on GPIO Port 0. Secure GPIO pins prevent software from reading GPIO Data In pin states. 0 - 32 + 14 @@ -7653,7 +10716,7 @@ SPI SPI peripheral. - 0x400BE000 + 0x500BE000 0x00 0x1000 @@ -7740,7 +10803,7 @@ - CTRLR_MODE + CONT_MODE Controller Mode Enable. 1 1 @@ -8407,7 +11470,7 @@ - CTRLR_DONE + CONT_DONE Controller Done, set when SPI Controller has completed any transactions. 11 1 @@ -8624,7 +11687,7 @@ - CTRLR_DONE + CONT_DONE Controller Done interrupt enable. 11 1 @@ -8887,7 +11950,7 @@ TMR Low-Power Configurable Timer - 0x40010000 + 0x50010000 0x00 0x1000 @@ -9544,7 +12607,7 @@ TMR1 Low-Power Configurable Timer 1 - 0x40011000 + 0x50011000 TMR1 TMR1 IRQ @@ -9555,7 +12618,7 @@ TMR2 Low-Power Configurable Timer 2 - 0x40012000 + 0x50012000 TMR2 TMR2 IRQ @@ -9566,7 +12629,7 @@ TMR3 Low-Power Configurable Timer 3 - 0x40013000 + 0x50013000 TMR3 TMR3 IRQ @@ -9577,7 +12640,7 @@ TMR4 Low-Power Configurable Timer 4 - 0x40080C00 + 0x50080C00 TMR4 TMR4 IRQ @@ -9588,7 +12651,7 @@ TMR5 Low-Power Configurable Timer 5 - 0x40081000 + 0x50081000 TMR5 TMR5 IRQ @@ -9599,7 +12662,7 @@ TRIMSIR Trim System Initilazation Registers - 0x40005400 + 0x50005400 0x00 0x400 @@ -9777,7 +12840,7 @@ TRNG Random Number Generator. - 0x4004D000 + 0x5004D000 0x00 0x1000 @@ -10123,7 +13186,7 @@ UART UART Low Power Registers - 0x40042000 + 0x50042000 0x00 0x1000 @@ -10236,25 +13299,15 @@ 2 - Peripheral_Clock - apb clock + PERIPHERAL_CLOCK + APB Clock. 0 - External_Clock - Clock 1 + CLK1 + IBRO clock. 1 - - CLK2 - Clock 2 - 2 - - - CLK3 - Clock 3 - 3 - @@ -10602,7 +13655,7 @@ WDT Windowed Watchdog Timer - 0x40003000 + 0x50003000 0x00 0x0400 @@ -11193,7 +14246,7 @@ WUT 32-bit reloadable timer that can be used for timing and wakeup. - 0x40006400 + 0x50006400 0x00 0x400 diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/mcr_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/mcr_regs.h index e019ecbf94b..0334c6801eb 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/mcr_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/mcr_regs.h @@ -72,14 +72,17 @@ extern "C" { * Structure type to access the MCR Registers. */ typedef struct { - __IO uint32_t eccen; /**< \b 0x00: MCR ECCEN Register */ - __R uint32_t rsv_0x4; + __R uint32_t rsv_0x0; + __IO uint32_t rst; /**< \b 0x04: MCR RST Register */ __IO uint32_t outen; /**< \b 0x08: MCR OUTEN Register */ __R uint32_t rsv_0xc; __IO uint32_t ctrl; /**< \b 0x10: MCR CTRL Register */ - __R uint32_t rsv_0x14_0x1f[3]; - __IO uint32_t gpio1_ctrl; /**< \b 0x20: MCR GPIO1_CTRL Register */ - __IO uint32_t rtctrim; /**< \b 0x24: MCR RTCTRIM Register */ + __R uint32_t rsv_0x14_0x2f[7]; + __IO uint32_t bbreg0; /**< \b 0x30: MCR BBREG0 Register */ + __IO uint32_t bbreg1; /**< \b 0x34: MCR BBREG1 Register */ + __R uint32_t rsv_0x38_0x3f[2]; + __IO uint32_t bbdata0; /**< \b 0x40: MCR BBDATA0 Register */ + __IO uint32_t bbdata1; /**< \b 0x44: MCR BBDATA1 Register */ } mxc_mcr_regs_t; /* Register offsets for module MCR */ @@ -89,23 +92,28 @@ typedef struct { * @brief MCR Peripheral Register Offsets from the MCR Base Peripheral Address. * @{ */ -#define MXC_R_MCR_ECCEN ((uint32_t)0x00000000UL) /**< Offset from MCR Base Address: 0x0000 */ +#define MXC_R_MCR_RST ((uint32_t)0x00000004UL) /**< Offset from MCR Base Address: 0x0004 */ #define MXC_R_MCR_OUTEN ((uint32_t)0x00000008UL) /**< Offset from MCR Base Address: 0x0008 */ #define MXC_R_MCR_CTRL ((uint32_t)0x00000010UL) /**< Offset from MCR Base Address: 0x0010 */ -#define MXC_R_MCR_GPIO1_CTRL ((uint32_t)0x00000020UL) /**< Offset from MCR Base Address: 0x0020 */ -#define MXC_R_MCR_RTCTRIM ((uint32_t)0x00000024UL) /**< Offset from MCR Base Address: 0x0024 */ +#define MXC_R_MCR_BBREG0 ((uint32_t)0x00000030UL) /**< Offset from MCR Base Address: 0x0030 */ +#define MXC_R_MCR_BBREG1 ((uint32_t)0x00000034UL) /**< Offset from MCR Base Address: 0x0034 */ +#define MXC_R_MCR_BBDATA0 ((uint32_t)0x00000040UL) /**< Offset from MCR Base Address: 0x0040 */ +#define MXC_R_MCR_BBDATA1 ((uint32_t)0x00000044UL) /**< Offset from MCR Base Address: 0x0044 */ /**@} end of group mcr_registers */ /** * @ingroup mcr_registers - * @defgroup MCR_ECCEN MCR_ECCEN - * @brief ECC Enable Register + * @defgroup MCR_RST MCR_RST + * @brief Reset Register. * @{ */ -#define MXC_F_MCR_ECCEN_FLASH_POS 0 /**< ECCEN_FLASH Position */ -#define MXC_F_MCR_ECCEN_FLASH ((uint32_t)(0x1UL << MXC_F_MCR_ECCEN_FLASH_POS)) /**< ECCEN_FLASH Mask */ +#define MXC_F_MCR_RST_BOOST_POS 0 /**< RST_BOOST Position */ +#define MXC_F_MCR_RST_BOOST ((uint32_t)(0x1UL << MXC_F_MCR_RST_BOOST_POS)) /**< RST_BOOST Mask */ -/**@} end of group MCR_ECCEN_Register */ +#define MXC_F_MCR_RST_RSTZ_POS 1 /**< RST_RSTZ Position */ +#define MXC_F_MCR_RST_RSTZ ((uint32_t)(0x1UL << MXC_F_MCR_RST_RSTZ_POS)) /**< RST_RSTZ Mask */ + +/**@} end of group MCR_RST_Register */ /** * @ingroup mcr_registers @@ -116,9 +124,6 @@ typedef struct { #define MXC_F_MCR_OUTEN_SQWOUT_EN_POS 0 /**< OUTEN_SQWOUT_EN Position */ #define MXC_F_MCR_OUTEN_SQWOUT_EN ((uint32_t)(0x1UL << MXC_F_MCR_OUTEN_SQWOUT_EN_POS)) /**< OUTEN_SQWOUT_EN Mask */ -#define MXC_F_MCR_OUTEN_PDOWN_EN_POS 1 /**< OUTEN_PDOWN_EN Position */ -#define MXC_F_MCR_OUTEN_PDOWN_EN ((uint32_t)(0x1UL << MXC_F_MCR_OUTEN_PDOWN_EN_POS)) /**< OUTEN_PDOWN_EN Mask */ - /**@} end of group MCR_OUTEN_Register */ /** @@ -127,59 +132,22 @@ typedef struct { * @brief Control Register * @{ */ -#define MXC_F_MCR_CTRL_ERTCO_EN_POS 3 /**< CTRL_ERTCO_EN Position */ -#define MXC_F_MCR_CTRL_ERTCO_EN ((uint32_t)(0x1UL << MXC_F_MCR_CTRL_ERTCO_EN_POS)) /**< CTRL_ERTCO_EN Mask */ - -#define MXC_F_MCR_CTRL_ERTCO_32KHZ_EN_POS 5 /**< CTRL_ERTCO_32KHZ_EN Position */ +#define MXC_F_MCR_CTRL_CLKSEL_POS 0 /**< CTRL_CLKSEL Position */ +#define MXC_F_MCR_CTRL_CLKSEL ((uint32_t)(0x3UL << MXC_F_MCR_CTRL_CLKSEL_POS)) /**< CTRL_CLKSEL Mask */ +#define MXC_V_MCR_CTRL_CLKSEL_ERTCO ((uint32_t)0x0UL) /**< CTRL_CLKSEL_ERTCO Value */ +#define MXC_S_MCR_CTRL_CLKSEL_ERTCO (MXC_V_MCR_CTRL_CLKSEL_ERTCO << MXC_F_MCR_CTRL_CLKSEL_POS) /**< CTRL_CLKSEL_ERTCO Setting */ +#define MXC_V_MCR_CTRL_CLKSEL_INRO ((uint32_t)0x1UL) /**< CTRL_CLKSEL_INRO Value */ +#define MXC_S_MCR_CTRL_CLKSEL_INRO (MXC_V_MCR_CTRL_CLKSEL_INRO << MXC_F_MCR_CTRL_CLKSEL_POS) /**< CTRL_CLKSEL_INRO Setting */ +#define MXC_V_MCR_CTRL_CLKSEL_EXTCLK ((uint32_t)0x2UL) /**< CTRL_CLKSEL_EXTCLK Value */ +#define MXC_S_MCR_CTRL_CLKSEL_EXTCLK (MXC_V_MCR_CTRL_CLKSEL_EXTCLK << MXC_F_MCR_CTRL_CLKSEL_POS) /**< CTRL_CLKSEL_EXTCLK Setting */ + +#define MXC_F_MCR_CTRL_ERTCO_32KHZ_EN_POS 3 /**< CTRL_ERTCO_32KHZ_EN Position */ #define MXC_F_MCR_CTRL_ERTCO_32KHZ_EN ((uint32_t)(0x1UL << MXC_F_MCR_CTRL_ERTCO_32KHZ_EN_POS)) /**< CTRL_ERTCO_32KHZ_EN Mask */ -/**@} end of group MCR_CTRL_Register */ - -/** - * @ingroup mcr_registers - * @defgroup MCR_GPIO1_CTRL MCR_GPIO1_CTRL - * @brief GPIO1 Pin Control Register. - * @{ - */ -#define MXC_F_MCR_GPIO1_CTRL_P1_0_OUT_POS 0 /**< GPIO1_CTRL_P1_0_OUT Position */ -#define MXC_F_MCR_GPIO1_CTRL_P1_0_OUT ((uint32_t)(0x1UL << MXC_F_MCR_GPIO1_CTRL_P1_0_OUT_POS)) /**< GPIO1_CTRL_P1_0_OUT Mask */ - -#define MXC_F_MCR_GPIO1_CTRL_P1_0_OUTEN_POS 1 /**< GPIO1_CTRL_P1_0_OUTEN Position */ -#define MXC_F_MCR_GPIO1_CTRL_P1_0_OUTEN ((uint32_t)(0x1UL << MXC_F_MCR_GPIO1_CTRL_P1_0_OUTEN_POS)) /**< GPIO1_CTRL_P1_0_OUTEN Mask */ - -#define MXC_F_MCR_GPIO1_CTRL_P1_0_PUPEN_POS 2 /**< GPIO1_CTRL_P1_0_PUPEN Position */ -#define MXC_F_MCR_GPIO1_CTRL_P1_0_PUPEN ((uint32_t)(0x1UL << MXC_F_MCR_GPIO1_CTRL_P1_0_PUPEN_POS)) /**< GPIO1_CTRL_P1_0_PUPEN Mask */ - -#define MXC_F_MCR_GPIO1_CTRL_P1_0_IN_POS 3 /**< GPIO1_CTRL_P1_0_IN Position */ -#define MXC_F_MCR_GPIO1_CTRL_P1_0_IN ((uint32_t)(0x1UL << MXC_F_MCR_GPIO1_CTRL_P1_0_IN_POS)) /**< GPIO1_CTRL_P1_0_IN Mask */ - -#define MXC_F_MCR_GPIO1_CTRL_P1_1_OUT_POS 4 /**< GPIO1_CTRL_P1_1_OUT Position */ -#define MXC_F_MCR_GPIO1_CTRL_P1_1_OUT ((uint32_t)(0x1UL << MXC_F_MCR_GPIO1_CTRL_P1_1_OUT_POS)) /**< GPIO1_CTRL_P1_1_OUT Mask */ - -#define MXC_F_MCR_GPIO1_CTRL_P1_1_OUTEN_POS 5 /**< GPIO1_CTRL_P1_1_OUTEN Position */ -#define MXC_F_MCR_GPIO1_CTRL_P1_1_OUTEN ((uint32_t)(0x1UL << MXC_F_MCR_GPIO1_CTRL_P1_1_OUTEN_POS)) /**< GPIO1_CTRL_P1_1_OUTEN Mask */ - -#define MXC_F_MCR_GPIO1_CTRL_P1_1_PUPEN_POS 6 /**< GPIO1_CTRL_P1_1_PUPEN Position */ -#define MXC_F_MCR_GPIO1_CTRL_P1_1_PUPEN ((uint32_t)(0x1UL << MXC_F_MCR_GPIO1_CTRL_P1_1_PUPEN_POS)) /**< GPIO1_CTRL_P1_1_PUPEN Mask */ - -#define MXC_F_MCR_GPIO1_CTRL_P1_1_IN_POS 7 /**< GPIO1_CTRL_P1_1_IN Position */ -#define MXC_F_MCR_GPIO1_CTRL_P1_1_IN ((uint32_t)(0x1UL << MXC_F_MCR_GPIO1_CTRL_P1_1_IN_POS)) /**< GPIO1_CTRL_P1_1_IN Mask */ - -/**@} end of group MCR_GPIO1_CTRL_Register */ - -/** - * @ingroup mcr_registers - * @defgroup MCR_RTCTRIM MCR_RTCTRIM - * @brief User RTC Trim Register. - * @{ - */ -#define MXC_F_MCR_RTCTRIM_X2_POS 0 /**< RTCTRIM_X2 Position */ -#define MXC_F_MCR_RTCTRIM_X2 ((uint32_t)(0x1FUL << MXC_F_MCR_RTCTRIM_X2_POS)) /**< RTCTRIM_X2 Mask */ - -#define MXC_F_MCR_RTCTRIM_X1_POS 5 /**< RTCTRIM_X1 Position */ -#define MXC_F_MCR_RTCTRIM_X1 ((uint32_t)(0x1FUL << MXC_F_MCR_RTCTRIM_X1_POS)) /**< RTCTRIM_X1 Mask */ +#define MXC_F_MCR_CTRL_ERTCO_EN_POS 5 /**< CTRL_ERTCO_EN Position */ +#define MXC_F_MCR_CTRL_ERTCO_EN ((uint32_t)(0x1UL << MXC_F_MCR_CTRL_ERTCO_EN_POS)) /**< CTRL_ERTCO_EN Mask */ -/**@} end of group MCR_RTCTRIM_Register */ +/**@} end of group MCR_CTRL_Register */ #ifdef __cplusplus } diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/mpc_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/mpc_regs.h new file mode 100644 index 00000000000..5944ce49d4e --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/mpc_regs.h @@ -0,0 +1,280 @@ +/** + * @file mpc_regs.h + * @brief Registers, Bit Masks and Bit Positions for the MPC Peripheral Module. + * @note This file is @generated. + * @ingroup mpc_registers + */ + +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_MPC_REGS_H_ +#define LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_MPC_REGS_H_ + +/* **** Includes **** */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined (__ICCARM__) + #pragma system_include +#endif + +#if defined (__CC_ARM) + #pragma anon_unions +#endif +/// @cond +/* + If types are not defined elsewhere (CMSIS) define them here +*/ +#ifndef __IO +#define __IO volatile +#endif +#ifndef __I +#define __I volatile const +#endif +#ifndef __O +#define __O volatile +#endif +#ifndef __R +#define __R volatile const +#endif +/// @endcond + +/* **** Definitions **** */ + +/** + * @ingroup mpc + * @defgroup mpc_registers MPC_Registers + * @brief Registers, Bit Masks and Bit Positions for the MPC Peripheral Module. + * @details Memory Protection Controller. + */ + +/** + * @ingroup mpc_registers + * Structure type to access the MPC Registers. + */ +typedef struct { + __IO uint32_t ctrl; /**< \b 0x0000: MPC CTRL Register */ + __R uint32_t rsv_0x4_0xf[3]; + __I uint32_t blk_max; /**< \b 0x0010: MPC BLK_MAX Register */ + __I uint32_t blk_cfg; /**< \b 0x0014: MPC BLK_CFG Register */ + __IO uint32_t blk_idx; /**< \b 0x0018: MPC BLK_IDX Register */ + __IO uint32_t blk_lut; /**< \b 0x001C: MPC BLK_LUT Register */ + __I uint32_t int_stat; /**< \b 0x0020: MPC INT_STAT Register */ + __O uint32_t int_clear; /**< \b 0x0024: MPC INT_CLEAR Register */ + __IO uint32_t int_en; /**< \b 0x0028: MPC INT_EN Register */ + __I uint32_t int_info1; /**< \b 0x002C: MPC INT_INFO1 Register */ + __I uint32_t int_info2; /**< \b 0x0030: MPC INT_INFO2 Register */ + __O uint32_t int_set; /**< \b 0x0034: MPC INT_SET Register */ + __R uint32_t rsv_0x38_0xfcf[998]; + __I uint32_t pidr4; /**< \b 0x0FD0: MPC PIDR4 Register */ + __I uint32_t pidr5; /**< \b 0x0FD4: MPC PIDR5 Register */ + __I uint32_t pidr6; /**< \b 0x0FD8: MPC PIDR6 Register */ + __I uint32_t pidr7; /**< \b 0x0FDC: MPC PIDR7 Register */ + __I uint32_t pidr0; /**< \b 0x0FE0: MPC PIDR0 Register */ + __I uint32_t pidr1; /**< \b 0x0FE4: MPC PIDR1 Register */ + __I uint32_t pidr2; /**< \b 0x0FE8: MPC PIDR2 Register */ + __I uint32_t pidr3; /**< \b 0x0FEC: MPC PIDR3 Register */ + __I uint32_t cidr0; /**< \b 0x0FF0: MPC CIDR0 Register */ + __I uint32_t cidr1; /**< \b 0x0FF4: MPC CIDR1 Register */ + __I uint32_t cidr2; /**< \b 0x0FF8: MPC CIDR2 Register */ + __I uint32_t cidr3; /**< \b 0x0FFC: MPC CIDR3 Register */ +} mxc_mpc_regs_t; + +/* Register offsets for module MPC */ +/** + * @ingroup mpc_registers + * @defgroup MPC_Register_Offsets Register Offsets + * @brief MPC Peripheral Register Offsets from the MPC Base Peripheral Address. + * @{ + */ +#define MXC_R_MPC_CTRL ((uint32_t)0x00000000UL) /**< Offset from MPC Base Address: 0x0000 */ +#define MXC_R_MPC_BLK_MAX ((uint32_t)0x00000010UL) /**< Offset from MPC Base Address: 0x0010 */ +#define MXC_R_MPC_BLK_CFG ((uint32_t)0x00000014UL) /**< Offset from MPC Base Address: 0x0014 */ +#define MXC_R_MPC_BLK_IDX ((uint32_t)0x00000018UL) /**< Offset from MPC Base Address: 0x0018 */ +#define MXC_R_MPC_BLK_LUT ((uint32_t)0x0000001CUL) /**< Offset from MPC Base Address: 0x001C */ +#define MXC_R_MPC_INT_STAT ((uint32_t)0x00000020UL) /**< Offset from MPC Base Address: 0x0020 */ +#define MXC_R_MPC_INT_CLEAR ((uint32_t)0x00000024UL) /**< Offset from MPC Base Address: 0x0024 */ +#define MXC_R_MPC_INT_EN ((uint32_t)0x00000028UL) /**< Offset from MPC Base Address: 0x0028 */ +#define MXC_R_MPC_INT_INFO1 ((uint32_t)0x0000002CUL) /**< Offset from MPC Base Address: 0x002C */ +#define MXC_R_MPC_INT_INFO2 ((uint32_t)0x00000030UL) /**< Offset from MPC Base Address: 0x0030 */ +#define MXC_R_MPC_INT_SET ((uint32_t)0x00000034UL) /**< Offset from MPC Base Address: 0x0034 */ +#define MXC_R_MPC_PIDR4 ((uint32_t)0x00000FD0UL) /**< Offset from MPC Base Address: 0x0FD0 */ +#define MXC_R_MPC_PIDR5 ((uint32_t)0x00000FD4UL) /**< Offset from MPC Base Address: 0x0FD4 */ +#define MXC_R_MPC_PIDR6 ((uint32_t)0x00000FD8UL) /**< Offset from MPC Base Address: 0x0FD8 */ +#define MXC_R_MPC_PIDR7 ((uint32_t)0x00000FDCUL) /**< Offset from MPC Base Address: 0x0FDC */ +#define MXC_R_MPC_PIDR0 ((uint32_t)0x00000FE0UL) /**< Offset from MPC Base Address: 0x0FE0 */ +#define MXC_R_MPC_PIDR1 ((uint32_t)0x00000FE4UL) /**< Offset from MPC Base Address: 0x0FE4 */ +#define MXC_R_MPC_PIDR2 ((uint32_t)0x00000FE8UL) /**< Offset from MPC Base Address: 0x0FE8 */ +#define MXC_R_MPC_PIDR3 ((uint32_t)0x00000FECUL) /**< Offset from MPC Base Address: 0x0FEC */ +#define MXC_R_MPC_CIDR0 ((uint32_t)0x00000FF0UL) /**< Offset from MPC Base Address: 0x0FF0 */ +#define MXC_R_MPC_CIDR1 ((uint32_t)0x00000FF4UL) /**< Offset from MPC Base Address: 0x0FF4 */ +#define MXC_R_MPC_CIDR2 ((uint32_t)0x00000FF8UL) /**< Offset from MPC Base Address: 0x0FF8 */ +#define MXC_R_MPC_CIDR3 ((uint32_t)0x00000FFCUL) /**< Offset from MPC Base Address: 0x0FFC */ +/**@} end of group mpc_registers */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_CTRL MPC_CTRL + * @brief Control Register. + * @{ + */ +#define MXC_F_MPC_CTRL_SEC_ERR_POS 4 /**< CTRL_SEC_ERR Position */ +#define MXC_F_MPC_CTRL_SEC_ERR ((uint32_t)(0x1UL << MXC_F_MPC_CTRL_SEC_ERR_POS)) /**< CTRL_SEC_ERR Mask */ + +#define MXC_F_MPC_CTRL_DATAIF_REQ_POS 6 /**< CTRL_DATAIF_REQ Position */ +#define MXC_F_MPC_CTRL_DATAIF_REQ ((uint32_t)(0x1UL << MXC_F_MPC_CTRL_DATAIF_REQ_POS)) /**< CTRL_DATAIF_REQ Mask */ + +#define MXC_F_MPC_CTRL_DATAIF_ACK_POS 7 /**< CTRL_DATAIF_ACK Position */ +#define MXC_F_MPC_CTRL_DATAIF_ACK ((uint32_t)(0x1UL << MXC_F_MPC_CTRL_DATAIF_ACK_POS)) /**< CTRL_DATAIF_ACK Mask */ + +#define MXC_F_MPC_CTRL_AUTO_INC_POS 8 /**< CTRL_AUTO_INC Position */ +#define MXC_F_MPC_CTRL_AUTO_INC ((uint32_t)(0x1UL << MXC_F_MPC_CTRL_AUTO_INC_POS)) /**< CTRL_AUTO_INC Mask */ + +#define MXC_F_MPC_CTRL_SEC_LOCKDOWN_POS 31 /**< CTRL_SEC_LOCKDOWN Position */ +#define MXC_F_MPC_CTRL_SEC_LOCKDOWN ((uint32_t)(0x1UL << MXC_F_MPC_CTRL_SEC_LOCKDOWN_POS)) /**< CTRL_SEC_LOCKDOWN Mask */ + +/**@} end of group MPC_CTRL_Register */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_BLK_MAX MPC_BLK_MAX + * @brief Maximum value of block-based index register. + * @{ + */ +#define MXC_F_MPC_BLK_MAX_VAL_POS 0 /**< BLK_MAX_VAL Position */ +#define MXC_F_MPC_BLK_MAX_VAL ((uint32_t)(0xFFFFFFFFUL << MXC_F_MPC_BLK_MAX_VAL_POS)) /**< BLK_MAX_VAL Mask */ + +/**@} end of group MPC_BLK_MAX_Register */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_BLK_CFG MPC_BLK_CFG + * @brief Block Control Register. + * @{ + */ +#define MXC_F_MPC_BLK_CFG_SIZE_POS 0 /**< BLK_CFG_SIZE Position */ +#define MXC_F_MPC_BLK_CFG_SIZE ((uint32_t)(0xFUL << MXC_F_MPC_BLK_CFG_SIZE_POS)) /**< BLK_CFG_SIZE Mask */ + +#define MXC_F_MPC_BLK_CFG_INIT_ST_POS 31 /**< BLK_CFG_INIT_ST Position */ +#define MXC_F_MPC_BLK_CFG_INIT_ST ((uint32_t)(0x1UL << MXC_F_MPC_BLK_CFG_INIT_ST_POS)) /**< BLK_CFG_INIT_ST Mask */ + +/**@} end of group MPC_BLK_CFG_Register */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_BLK_IDX MPC_BLK_IDX + * @brief Block Index Register. + * @{ + */ +#define MXC_F_MPC_BLK_IDX_IDX_POS 0 /**< BLK_IDX_IDX Position */ +#define MXC_F_MPC_BLK_IDX_IDX ((uint32_t)(0xFFFFFFFFUL << MXC_F_MPC_BLK_IDX_IDX_POS)) /**< BLK_IDX_IDX Mask */ + +/**@} end of group MPC_BLK_IDX_Register */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_BLK_LUT MPC_BLK_LUT + * @brief Block-based gating Look Up Table Register. + * @{ + */ +#define MXC_F_MPC_BLK_LUT_ACCESS_POS 0 /**< BLK_LUT_ACCESS Position */ +#define MXC_F_MPC_BLK_LUT_ACCESS ((uint32_t)(0xFFFFFFFFUL << MXC_F_MPC_BLK_LUT_ACCESS_POS)) /**< BLK_LUT_ACCESS Mask */ + +/**@} end of group MPC_BLK_LUT_Register */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_INT_STAT MPC_INT_STAT + * @brief Interrupt Flag Register. + * @{ + */ +#define MXC_F_MPC_INT_STAT_MPC_IRQ_POS 0 /**< INT_STAT_MPC_IRQ Position */ +#define MXC_F_MPC_INT_STAT_MPC_IRQ ((uint32_t)(0x1UL << MXC_F_MPC_INT_STAT_MPC_IRQ_POS)) /**< INT_STAT_MPC_IRQ Mask */ + +/**@} end of group MPC_INT_STAT_Register */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_INT_CLEAR MPC_INT_CLEAR + * @brief Interrupt Clear Register. + * @{ + */ +#define MXC_F_MPC_INT_CLEAR_MPC_IRQ_POS 0 /**< INT_CLEAR_MPC_IRQ Position */ +#define MXC_F_MPC_INT_CLEAR_MPC_IRQ ((uint32_t)(0x1UL << MXC_F_MPC_INT_CLEAR_MPC_IRQ_POS)) /**< INT_CLEAR_MPC_IRQ Mask */ + +/**@} end of group MPC_INT_CLEAR_Register */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_INT_EN MPC_INT_EN + * @brief Interrupt Enable Register. + * @{ + */ +#define MXC_F_MPC_INT_EN_MPC_IRQ_POS 0 /**< INT_EN_MPC_IRQ Position */ +#define MXC_F_MPC_INT_EN_MPC_IRQ ((uint32_t)(0x1UL << MXC_F_MPC_INT_EN_MPC_IRQ_POS)) /**< INT_EN_MPC_IRQ Mask */ + +/**@} end of group MPC_INT_EN_Register */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_INT_INFO1 MPC_INT_INFO1 + * @brief Interrupt Info 1 Register. + * @{ + */ +#define MXC_F_MPC_INT_INFO1_HADDR_POS 0 /**< INT_INFO1_HADDR Position */ +#define MXC_F_MPC_INT_INFO1_HADDR ((uint32_t)(0xFFFFFFFFUL << MXC_F_MPC_INT_INFO1_HADDR_POS)) /**< INT_INFO1_HADDR Mask */ + +/**@} end of group MPC_INT_INFO1_Register */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_INT_INFO2 MPC_INT_INFO2 + * @brief Interrupt Info 2 Register. + * @{ + */ +#define MXC_F_MPC_INT_INFO2_HMASTER_POS 0 /**< INT_INFO2_HMASTER Position */ +#define MXC_F_MPC_INT_INFO2_HMASTER ((uint32_t)(0xFFFFUL << MXC_F_MPC_INT_INFO2_HMASTER_POS)) /**< INT_INFO2_HMASTER Mask */ + +#define MXC_F_MPC_INT_INFO2_HNONSEC_POS 16 /**< INT_INFO2_HNONSEC Position */ +#define MXC_F_MPC_INT_INFO2_HNONSEC ((uint32_t)(0x1UL << MXC_F_MPC_INT_INFO2_HNONSEC_POS)) /**< INT_INFO2_HNONSEC Mask */ + +#define MXC_F_MPC_INT_INFO2_CFG_NS_POS 17 /**< INT_INFO2_CFG_NS Position */ +#define MXC_F_MPC_INT_INFO2_CFG_NS ((uint32_t)(0x1UL << MXC_F_MPC_INT_INFO2_CFG_NS_POS)) /**< INT_INFO2_CFG_NS Mask */ + +/**@} end of group MPC_INT_INFO2_Register */ + +/** + * @ingroup mpc_registers + * @defgroup MPC_INT_SET MPC_INT_SET + * @brief Interrupt Set Debug Register. + * @{ + */ +#define MXC_F_MPC_INT_SET_MPC_IRQ_POS 0 /**< INT_SET_MPC_IRQ Position */ +#define MXC_F_MPC_INT_SET_MPC_IRQ ((uint32_t)(0x1UL << MXC_F_MPC_INT_SET_MPC_IRQ_POS)) /**< INT_SET_MPC_IRQ Mask */ + +/**@} end of group MPC_INT_SET_Register */ + +#ifdef __cplusplus +} +#endif + +#endif // LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_MPC_REGS_H_ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/nspc_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/nspc_regs.h index b5505f3d114..fd2b7bb166f 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/nspc_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/nspc_regs.h @@ -74,6 +74,8 @@ extern "C" { typedef struct { __R uint32_t rsv_0x0_0x15f[88]; __IO uint32_t apbpriv; /**< \b 0x0160: NSPC APBPRIV Register */ + __R uint32_t rsv_0x164_0x16f[3]; + __IO uint32_t ahbmpriv; /**< \b 0x0170: NSPC AHBMPRIV Register */ } mxc_nspc_regs_t; /* Register offsets for module NSPC */ @@ -84,6 +86,7 @@ typedef struct { * @{ */ #define MXC_R_NSPC_APBPRIV ((uint32_t)0x00000160UL) /**< Offset from NSPC Base Address: 0x0160 */ +#define MXC_R_NSPC_AHBMPRIV ((uint32_t)0x00000170UL) /**< Offset from NSPC Base Address: 0x0170 */ /**@} end of group nspc_registers */ /** @@ -94,9 +97,78 @@ typedef struct { */ #define MXC_F_NSPC_APBPRIV_PERIPH_POS 0 /**< APBPRIV_PERIPH Position */ #define MXC_F_NSPC_APBPRIV_PERIPH ((uint32_t)(0xFFFFFFFFUL << MXC_F_NSPC_APBPRIV_PERIPH_POS)) /**< APBPRIV_PERIPH Mask */ +#define MXC_V_NSPC_APBPRIV_PERIPH_GCR ((uint32_t)0x1UL) /**< APBPRIV_PERIPH_GCR Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_GCR (MXC_V_NSPC_APBPRIV_PERIPH_GCR << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_GCR Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_SIR ((uint32_t)0x2UL) /**< APBPRIV_PERIPH_SIR Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_SIR (MXC_V_NSPC_APBPRIV_PERIPH_SIR << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_SIR Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_FCR ((uint32_t)0x4UL) /**< APBPRIV_PERIPH_FCR Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_FCR (MXC_V_NSPC_APBPRIV_PERIPH_FCR << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_FCR Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_WDT ((uint32_t)0x8UL) /**< APBPRIV_PERIPH_WDT Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_WDT (MXC_V_NSPC_APBPRIV_PERIPH_WDT << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_WDT Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_AES ((uint32_t)0x10UL) /**< APBPRIV_PERIPH_AES Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_AES (MXC_V_NSPC_APBPRIV_PERIPH_AES << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_AES Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_AESKEYS ((uint32_t)0x20UL) /**< APBPRIV_PERIPH_AESKEYS Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_AESKEYS (MXC_V_NSPC_APBPRIV_PERIPH_AESKEYS << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_AESKEYS Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_CRC ((uint32_t)0x40UL) /**< APBPRIV_PERIPH_CRC Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_CRC (MXC_V_NSPC_APBPRIV_PERIPH_CRC << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_CRC Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_GPIO0 ((uint32_t)0x80UL) /**< APBPRIV_PERIPH_GPIO0 Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_GPIO0 (MXC_V_NSPC_APBPRIV_PERIPH_GPIO0 << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_GPIO0 Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_TMR0 ((uint32_t)0x100UL) /**< APBPRIV_PERIPH_TMR0 Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_TMR0 (MXC_V_NSPC_APBPRIV_PERIPH_TMR0 << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR0 Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_TMR1 ((uint32_t)0x200UL) /**< APBPRIV_PERIPH_TMR1 Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_TMR1 (MXC_V_NSPC_APBPRIV_PERIPH_TMR1 << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR1 Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_TMR2 ((uint32_t)0x400UL) /**< APBPRIV_PERIPH_TMR2 Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_TMR2 (MXC_V_NSPC_APBPRIV_PERIPH_TMR2 << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR2 Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_TMR3 ((uint32_t)0x800UL) /**< APBPRIV_PERIPH_TMR3 Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_TMR3 (MXC_V_NSPC_APBPRIV_PERIPH_TMR3 << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR3 Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_TMR4 ((uint32_t)0x1000UL) /**< APBPRIV_PERIPH_TMR4 Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_TMR4 (MXC_V_NSPC_APBPRIV_PERIPH_TMR4 << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR4 Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_TMR5 ((uint32_t)0x2000UL) /**< APBPRIV_PERIPH_TMR5 Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_TMR5 (MXC_V_NSPC_APBPRIV_PERIPH_TMR5 << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR5 Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_I3C ((uint32_t)0x4000UL) /**< APBPRIV_PERIPH_I3C Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_I3C (MXC_V_NSPC_APBPRIV_PERIPH_I3C << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_I3C Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_UART ((uint32_t)0x8000UL) /**< APBPRIV_PERIPH_UART Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_UART (MXC_V_NSPC_APBPRIV_PERIPH_UART << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_UART Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_SPI ((uint32_t)0x10000UL) /**< APBPRIV_PERIPH_SPI Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_SPI (MXC_V_NSPC_APBPRIV_PERIPH_SPI << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_SPI Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_TRNG ((uint32_t)0x20000UL) /**< APBPRIV_PERIPH_TRNG Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_TRNG (MXC_V_NSPC_APBPRIV_PERIPH_TRNG << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TRNG Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_BTLE_DBB ((uint32_t)0x40000UL) /**< APBPRIV_PERIPH_BTLE_DBB Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_BTLE_DBB (MXC_V_NSPC_APBPRIV_PERIPH_BTLE_DBB << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_BTLE_DBB Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_BTLE_RFFE ((uint32_t)0x80000UL) /**< APBPRIV_PERIPH_BTLE_RFFE Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_BTLE_RFFE (MXC_V_NSPC_APBPRIV_PERIPH_BTLE_RFFE << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_BTLE_RFFE Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_RSTZ ((uint32_t)0x100000UL) /**< APBPRIV_PERIPH_RSTZ Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_RSTZ (MXC_V_NSPC_APBPRIV_PERIPH_RSTZ << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_RSTZ Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_BOOST ((uint32_t)0x200000UL) /**< APBPRIV_PERIPH_BOOST Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_BOOST (MXC_V_NSPC_APBPRIV_PERIPH_BOOST << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_BOOST Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_TRIMSIR ((uint32_t)0x400000UL) /**< APBPRIV_PERIPH_TRIMSIR Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_TRIMSIR (MXC_V_NSPC_APBPRIV_PERIPH_TRIMSIR << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TRIMSIR Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_RTC ((uint32_t)0x1000000UL) /**< APBPRIV_PERIPH_RTC Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_RTC (MXC_V_NSPC_APBPRIV_PERIPH_RTC << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_RTC Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_WUT0 ((uint32_t)0x2000000UL) /**< APBPRIV_PERIPH_WUT0 Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_WUT0 (MXC_V_NSPC_APBPRIV_PERIPH_WUT0 << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_WUT0 Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_WUT1 ((uint32_t)0x4000000UL) /**< APBPRIV_PERIPH_WUT1 Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_WUT1 (MXC_V_NSPC_APBPRIV_PERIPH_WUT1 << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_WUT1 Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_PWRSEQ ((uint32_t)0x8000000UL) /**< APBPRIV_PERIPH_PWRSEQ Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_PWRSEQ (MXC_V_NSPC_APBPRIV_PERIPH_PWRSEQ << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_PWRSEQ Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_MCR ((uint32_t)0x10000000UL) /**< APBPRIV_PERIPH_MCR Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_MCR (MXC_V_NSPC_APBPRIV_PERIPH_MCR << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_MCR Setting */ +#define MXC_V_NSPC_APBPRIV_PERIPH_ALL ((uint32_t)0x1F7FFFFFUL) /**< APBPRIV_PERIPH_ALL Value */ +#define MXC_S_NSPC_APBPRIV_PERIPH_ALL (MXC_V_NSPC_APBPRIV_PERIPH_ALL << MXC_F_NSPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_ALL Setting */ /**@} end of group NSPC_APBPRIV_Register */ +/** + * @ingroup nspc_registers + * @defgroup NSPC_AHBMPRIV NSPC_AHBMPRIV + * @brief AHB Privileged/Non-Privileged Non-Secure DMA Access Register. + * @{ + */ +#define MXC_F_NSPC_AHBMPRIV_DMA_POS 1 /**< AHBMPRIV_DMA Position */ +#define MXC_F_NSPC_AHBMPRIV_DMA ((uint32_t)(0x1UL << MXC_F_NSPC_AHBMPRIV_DMA_POS)) /**< AHBMPRIV_DMA Mask */ + +/**@} end of group NSPC_AHBMPRIV_Register */ + #ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/pwrseq_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/pwrseq_regs.h index 2998417c6f6..216ede9b620 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/pwrseq_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/pwrseq_regs.h @@ -75,9 +75,7 @@ typedef struct { __IO uint32_t lpctrl; /**< \b 0x00: PWRSEQ LPCTRL Register */ __IO uint32_t lpwkfl0; /**< \b 0x04: PWRSEQ LPWKFL0 Register */ __IO uint32_t lpwken0; /**< \b 0x08: PWRSEQ LPWKEN0 Register */ - __IO uint32_t lpwkfl1; /**< \b 0x0C: PWRSEQ LPWKFL1 Register */ - __IO uint32_t lpwken1; /**< \b 0x10: PWRSEQ LPWKEN1 Register */ - __R uint32_t rsv_0x14_0x2f[7]; + __R uint32_t rsv_0xc_0x2f[9]; __IO uint32_t lppwst; /**< \b 0x30: PWRSEQ LPPWST Register */ __R uint32_t rsv_0x34_0x47[5]; __IO uint32_t gp0; /**< \b 0x48: PWRSEQ GP0 Register */ @@ -94,8 +92,6 @@ typedef struct { #define MXC_R_PWRSEQ_LPCTRL ((uint32_t)0x00000000UL) /**< Offset from PWRSEQ Base Address: 0x0000 */ #define MXC_R_PWRSEQ_LPWKFL0 ((uint32_t)0x00000004UL) /**< Offset from PWRSEQ Base Address: 0x0004 */ #define MXC_R_PWRSEQ_LPWKEN0 ((uint32_t)0x00000008UL) /**< Offset from PWRSEQ Base Address: 0x0008 */ -#define MXC_R_PWRSEQ_LPWKFL1 ((uint32_t)0x0000000CUL) /**< Offset from PWRSEQ Base Address: 0x000C */ -#define MXC_R_PWRSEQ_LPWKEN1 ((uint32_t)0x00000010UL) /**< Offset from PWRSEQ Base Address: 0x0010 */ #define MXC_R_PWRSEQ_LPPWST ((uint32_t)0x00000030UL) /**< Offset from PWRSEQ Base Address: 0x0030 */ #define MXC_R_PWRSEQ_GP0 ((uint32_t)0x00000048UL) /**< Offset from PWRSEQ Base Address: 0x0048 */ #define MXC_R_PWRSEQ_GP1 ((uint32_t)0x0000004CUL) /**< Offset from PWRSEQ Base Address: 0x004C */ @@ -110,12 +106,15 @@ typedef struct { #define MXC_F_PWRSEQ_LPCTRL_SRAMRET_EN_POS 0 /**< LPCTRL_SRAMRET_EN Position */ #define MXC_F_PWRSEQ_LPCTRL_SRAMRET_EN ((uint32_t)(0x1FUL << MXC_F_PWRSEQ_LPCTRL_SRAMRET_EN_POS)) /**< LPCTRL_SRAMRET_EN Mask */ -#define MXC_F_PWRSEQ_LPCTRL_FAST_POS 8 /**< LPCTRL_FAST Position */ -#define MXC_F_PWRSEQ_LPCTRL_FAST ((uint32_t)(0x1UL << MXC_F_PWRSEQ_LPCTRL_FAST_POS)) /**< LPCTRL_FAST Mask */ - #define MXC_F_PWRSEQ_LPCTRL_BG_DIS_POS 11 /**< LPCTRL_BG_DIS Position */ #define MXC_F_PWRSEQ_LPCTRL_BG_DIS ((uint32_t)(0x1UL << MXC_F_PWRSEQ_LPCTRL_BG_DIS_POS)) /**< LPCTRL_BG_DIS Mask */ +#define MXC_F_PWRSEQ_LPCTRL_RETLDO_EN_POS 12 /**< LPCTRL_RETLDO_EN Position */ +#define MXC_F_PWRSEQ_LPCTRL_RETLDO_EN ((uint32_t)(0x1UL << MXC_F_PWRSEQ_LPCTRL_RETLDO_EN_POS)) /**< LPCTRL_RETLDO_EN Mask */ + +#define MXC_F_PWRSEQ_LPCTRL_LDO_EN_DLY_POS 13 /**< LPCTRL_LDO_EN_DLY Position */ +#define MXC_F_PWRSEQ_LPCTRL_LDO_EN_DLY ((uint32_t)(0x1UL << MXC_F_PWRSEQ_LPCTRL_LDO_EN_DLY_POS)) /**< LPCTRL_LDO_EN_DLY Mask */ + #define MXC_F_PWRSEQ_LPCTRL_LPWKFL_CLR_POS 31 /**< LPCTRL_LPWKFL_CLR Position */ #define MXC_F_PWRSEQ_LPCTRL_LPWKFL_CLR ((uint32_t)(0x1UL << MXC_F_PWRSEQ_LPCTRL_LPWKFL_CLR_POS)) /**< LPCTRL_LPWKFL_CLR Mask */ @@ -145,30 +144,6 @@ typedef struct { /**@} end of group PWRSEQ_LPWKEN0_Register */ -/** - * @ingroup pwrseq_registers - * @defgroup PWRSEQ_LPWKFL1 PWRSEQ_LPWKFL1 - * @brief Low Power I/O Wakeup Status Register 1. This register indicates the low power - * wakeup status for GPIO1. - * @{ - */ -#define MXC_F_PWRSEQ_LPWKFL1_PINS_POS 0 /**< LPWKFL1_PINS Position */ -#define MXC_F_PWRSEQ_LPWKFL1_PINS ((uint32_t)(0xFFFUL << MXC_F_PWRSEQ_LPWKFL1_PINS_POS)) /**< LPWKFL1_PINS Mask */ - -/**@} end of group PWRSEQ_LPWKFL1_Register */ - -/** - * @ingroup pwrseq_registers - * @defgroup PWRSEQ_LPWKEN1 PWRSEQ_LPWKEN1 - * @brief Low Power I/O Wakeup Enable Register 1. This register enables low power wakeup - * functionality for GPIO1. - * @{ - */ -#define MXC_F_PWRSEQ_LPWKEN1_PINS_POS 0 /**< LPWKEN1_PINS Position */ -#define MXC_F_PWRSEQ_LPWKEN1_PINS ((uint32_t)(0x3UL << MXC_F_PWRSEQ_LPWKEN1_PINS_POS)) /**< LPWKEN1_PINS Mask */ - -/**@} end of group PWRSEQ_LPWKEN1_Register */ - /** * @ingroup pwrseq_registers * @defgroup PWRSEQ_LPPWST PWRSEQ_LPPWST diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/rstz_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/rstz_regs.h new file mode 100644 index 00000000000..5920d77a627 --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/rstz_regs.h @@ -0,0 +1,169 @@ +/** + * @file rstz_regs.h + * @brief Registers, Bit Masks and Bit Positions for the RSTZ Peripheral Module. + * @note This file is @generated. + * @ingroup rstz_registers + */ + +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_RSTZ_REGS_H_ +#define LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_RSTZ_REGS_H_ + +/* **** Includes **** */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined (__ICCARM__) + #pragma system_include +#endif + +#if defined (__CC_ARM) + #pragma anon_unions +#endif +/// @cond +/* + If types are not defined elsewhere (CMSIS) define them here +*/ +#ifndef __IO +#define __IO volatile +#endif +#ifndef __I +#define __I volatile const +#endif +#ifndef __O +#define __O volatile +#endif +#ifndef __R +#define __R volatile const +#endif +/// @endcond + +/* **** Definitions **** */ + +/** + * @ingroup rstz + * @defgroup rstz_registers RSTZ_Registers + * @brief Registers, Bit Masks and Bit Positions for the RSTZ Peripheral Module. + * @details RSTZ Controller + */ + +/** + * @ingroup rstz_registers + * Structure type to access the RSTZ Registers. + */ +typedef struct { + __IO uint32_t ctrl; /**< \b 0x000: RSTZ CTRL Register */ + __IO uint32_t boost_clkctrl; /**< \b 0x004: RSTZ BOOST_CLKCTRL Register */ + __R uint32_t rsv_0x8_0x27[8]; + __IO uint32_t status_ch[8]; /**< \b 0x028: RSTZ STATUS_CH Register */ +} mxc_rstz_regs_t; + +/* Register offsets for module RSTZ */ +/** + * @ingroup rstz_registers + * @defgroup RSTZ_Register_Offsets Register Offsets + * @brief RSTZ Peripheral Register Offsets from the RSTZ Base Peripheral Address. + * @{ + */ +#define MXC_R_RSTZ_CTRL ((uint32_t)0x00000000UL) /**< Offset from RSTZ Base Address: 0x0000 */ +#define MXC_R_RSTZ_BOOST_CLKCTRL ((uint32_t)0x00000004UL) /**< Offset from RSTZ Base Address: 0x0004 */ +#define MXC_R_RSTZ_STATUS_CH ((uint32_t)0x00000028UL) /**< Offset from RSTZ Base Address: 0x0028 */ +/**@} end of group rstz_registers */ + +/** + * @ingroup rstz_registers + * @defgroup RSTZ_CTRL RSTZ_CTRL + * @brief RSTZ Control Register. + * @{ + */ +#define MXC_F_RSTZ_CTRL_EN_POS 0 /**< CTRL_EN Position */ +#define MXC_F_RSTZ_CTRL_EN ((uint32_t)(0x1UL << MXC_F_RSTZ_CTRL_EN_POS)) /**< CTRL_EN Mask */ + +#define MXC_F_RSTZ_CTRL_SVC_EN_POS 1 /**< CTRL_SVC_EN Position */ +#define MXC_F_RSTZ_CTRL_SVC_EN ((uint32_t)(0x1UL << MXC_F_RSTZ_CTRL_SVC_EN_POS)) /**< CTRL_SVC_EN Mask */ + +#define MXC_F_RSTZ_CTRL_CH_SEL_POS 2 /**< CTRL_CH_SEL Position */ +#define MXC_F_RSTZ_CTRL_CH_SEL ((uint32_t)(0x7UL << MXC_F_RSTZ_CTRL_CH_SEL_POS)) /**< CTRL_CH_SEL Mask */ + +#define MXC_F_RSTZ_CTRL_CAL_EN_POS 5 /**< CTRL_CAL_EN Position */ +#define MXC_F_RSTZ_CTRL_CAL_EN ((uint32_t)(0x1UL << MXC_F_RSTZ_CTRL_CAL_EN_POS)) /**< CTRL_CAL_EN Mask */ + +#define MXC_F_RSTZ_CTRL_DMEASURE_EN_POS 6 /**< CTRL_DMEASURE_EN Position */ +#define MXC_F_RSTZ_CTRL_DMEASURE_EN ((uint32_t)(0x1UL << MXC_F_RSTZ_CTRL_DMEASURE_EN_POS)) /**< CTRL_DMEASURE_EN Mask */ + +#define MXC_F_RSTZ_CTRL_OFFTR_P_POS 7 /**< CTRL_OFFTR_P Position */ +#define MXC_F_RSTZ_CTRL_OFFTR_P ((uint32_t)(0x1FUL << MXC_F_RSTZ_CTRL_OFFTR_P_POS)) /**< CTRL_OFFTR_P Mask */ + +#define MXC_F_RSTZ_CTRL_OFFTR_N_POS 12 /**< CTRL_OFFTR_N Position */ +#define MXC_F_RSTZ_CTRL_OFFTR_N ((uint32_t)(0x1FUL << MXC_F_RSTZ_CTRL_OFFTR_N_POS)) /**< CTRL_OFFTR_N Mask */ + +#define MXC_F_RSTZ_CTRL_DOUT_POS 17 /**< CTRL_DOUT Position */ +#define MXC_F_RSTZ_CTRL_DOUT ((uint32_t)(0x1UL << MXC_F_RSTZ_CTRL_DOUT_POS)) /**< CTRL_DOUT Mask */ + +#define MXC_F_RSTZ_CTRL_CAL_DOUT_POL_POS 18 /**< CTRL_CAL_DOUT_POL Position */ +#define MXC_F_RSTZ_CTRL_CAL_DOUT_POL ((uint32_t)(0x1UL << MXC_F_RSTZ_CTRL_CAL_DOUT_POL_POS)) /**< CTRL_CAL_DOUT_POL Mask */ + +#define MXC_F_RSTZ_CTRL_NUM_SAMP_POS 24 /**< CTRL_NUM_SAMP Position */ +#define MXC_F_RSTZ_CTRL_NUM_SAMP ((uint32_t)(0xFUL << MXC_F_RSTZ_CTRL_NUM_SAMP_POS)) /**< CTRL_NUM_SAMP Mask */ + +#define MXC_F_RSTZ_CTRL_TRIP_TOL_POS 28 /**< CTRL_TRIP_TOL Position */ +#define MXC_F_RSTZ_CTRL_TRIP_TOL ((uint32_t)(0xFUL << MXC_F_RSTZ_CTRL_TRIP_TOL_POS)) /**< CTRL_TRIP_TOL Mask */ + +/**@} end of group RSTZ_CTRL_Register */ + +/** + * @ingroup rstz_registers + * @defgroup RSTZ_BOOST_CLKCTRL RSTZ_BOOST_CLKCTRL + * @brief Boost Clock Control Register. + * @{ + */ +#define MXC_F_RSTZ_BOOST_CLKCTRL_EXIT_NUM_SAMP_POS 0 /**< BOOST_CLKCTRL_EXIT_NUM_SAMP Position */ +#define MXC_F_RSTZ_BOOST_CLKCTRL_EXIT_NUM_SAMP ((uint32_t)(0x3UL << MXC_F_RSTZ_BOOST_CLKCTRL_EXIT_NUM_SAMP_POS)) /**< BOOST_CLKCTRL_EXIT_NUM_SAMP Mask */ + +#define MXC_F_RSTZ_BOOST_CLKCTRL_CH_SEL_POS 2 /**< BOOST_CLKCTRL_CH_SEL Position */ +#define MXC_F_RSTZ_BOOST_CLKCTRL_CH_SEL ((uint32_t)(0x7UL << MXC_F_RSTZ_BOOST_CLKCTRL_CH_SEL_POS)) /**< BOOST_CLKCTRL_CH_SEL Mask */ + +/**@} end of group RSTZ_BOOST_CLKCTRL_Register */ + +/** + * @ingroup rstz_registers + * @defgroup RSTZ_STATUS_CH RSTZ_STATUS_CH + * @brief Channel X Status Register. + * @{ + */ +#define MXC_F_RSTZ_STATUS_CH_RSTZ_POS 0 /**< STATUS_CH_RSTZ Position */ +#define MXC_F_RSTZ_STATUS_CH_RSTZ ((uint32_t)(0x1UL << MXC_F_RSTZ_STATUS_CH_RSTZ_POS)) /**< STATUS_CH_RSTZ Mask */ + +#define MXC_F_RSTZ_STATUS_CH_DOUT_POS 1 /**< STATUS_CH_DOUT Position */ +#define MXC_F_RSTZ_STATUS_CH_DOUT ((uint32_t)(0x1UL << MXC_F_RSTZ_STATUS_CH_DOUT_POS)) /**< STATUS_CH_DOUT Mask */ + +#define MXC_F_RSTZ_STATUS_CH_RSTZ_FL_POS 31 /**< STATUS_CH_RSTZ_FL Position */ +#define MXC_F_RSTZ_STATUS_CH_RSTZ_FL ((uint32_t)(0x1UL << MXC_F_RSTZ_STATUS_CH_RSTZ_FL_POS)) /**< STATUS_CH_RSTZ_FL Mask */ + +/**@} end of group RSTZ_STATUS_CH_Register */ + +#ifdef __cplusplus +} +#endif + +#endif // LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_RSTZ_REGS_H_ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/sema_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/sema_regs.h deleted file mode 100644 index e9b763a0c1e..00000000000 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/sema_regs.h +++ /dev/null @@ -1,201 +0,0 @@ -/** - * @file sema_regs.h - * @brief Registers, Bit Masks and Bit Positions for the SEMA Peripheral Module. - * @note This file is @generated. - * @ingroup sema_registers - */ - -/****************************************************************************** - * - * Copyright (C) 2024 Analog Devices, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -#ifndef LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_SEMA_REGS_H_ -#define LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_SEMA_REGS_H_ - -/* **** Includes **** */ -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined (__ICCARM__) - #pragma system_include -#endif - -#if defined (__CC_ARM) - #pragma anon_unions -#endif -/// @cond -/* - If types are not defined elsewhere (CMSIS) define them here -*/ -#ifndef __IO -#define __IO volatile -#endif -#ifndef __I -#define __I volatile const -#endif -#ifndef __O -#define __O volatile -#endif -#ifndef __R -#define __R volatile const -#endif -/// @endcond - -/* **** Definitions **** */ - -/** - * @ingroup sema - * @defgroup sema_registers SEMA_Registers - * @brief Registers, Bit Masks and Bit Positions for the SEMA Peripheral Module. - * @details The Semaphore peripheral allows multiple cores in a system to cooperate when accessing shred resources. - The peripheral contains eight semaphores that can be atomically set and cleared. It is left to the discretion of the software - architect to decide how and when the semaphores are used and how they are allocated. Existing hardware does not have to be - - modified for this type of cooperative sharing, and the use of semaphores is exclusively within the software domain. - */ - -/** - * @ingroup sema_registers - * Structure type to access the SEMA Registers. - */ -typedef struct { - __IO uint32_t semaphores[8]; /**< \b 0x00: SEMA SEMAPHORES Register */ - __R uint32_t rsv_0x20_0x3f[8]; - __IO uint32_t irq0; /**< \b 0x40: SEMA IRQ0 Register */ - __IO uint32_t mail0; /**< \b 0x44: SEMA MAIL0 Register */ - __IO uint32_t irq1; /**< \b 0x48: SEMA IRQ1 Register */ - __IO uint32_t mail1; /**< \b 0x4C: SEMA MAIL1 Register */ - __R uint32_t rsv_0x50_0xff[44]; - __IO uint32_t status; /**< \b 0x100: SEMA STATUS Register */ -} mxc_sema_regs_t; - -/* Register offsets for module SEMA */ -/** - * @ingroup sema_registers - * @defgroup SEMA_Register_Offsets Register Offsets - * @brief SEMA Peripheral Register Offsets from the SEMA Base Peripheral Address. - * @{ - */ -#define MXC_R_SEMA_SEMAPHORES ((uint32_t)0x00000000UL) /**< Offset from SEMA Base Address: 0x0000 */ -#define MXC_R_SEMA_IRQ0 ((uint32_t)0x00000040UL) /**< Offset from SEMA Base Address: 0x0040 */ -#define MXC_R_SEMA_MAIL0 ((uint32_t)0x00000044UL) /**< Offset from SEMA Base Address: 0x0044 */ -#define MXC_R_SEMA_IRQ1 ((uint32_t)0x00000048UL) /**< Offset from SEMA Base Address: 0x0048 */ -#define MXC_R_SEMA_MAIL1 ((uint32_t)0x0000004CUL) /**< Offset from SEMA Base Address: 0x004C */ -#define MXC_R_SEMA_STATUS ((uint32_t)0x00000100UL) /**< Offset from SEMA Base Address: 0x0100 */ -/**@} end of group sema_registers */ - -/** - * @ingroup sema_registers - * @defgroup SEMA_SEMAPHORES SEMA_SEMAPHORES - * @brief Read to test and set, returns prior value. Write 0 to clear semaphore. - * @{ - */ -#define MXC_F_SEMA_SEMAPHORES_SEMA_POS 0 /**< SEMAPHORES_SEMA Position */ -#define MXC_F_SEMA_SEMAPHORES_SEMA ((uint32_t)(0x1UL << MXC_F_SEMA_SEMAPHORES_SEMA_POS)) /**< SEMAPHORES_SEMA Mask */ - -/**@} end of group SEMA_SEMAPHORES_Register */ - -/** - * @ingroup sema_registers - * @defgroup SEMA_IRQ0 SEMA_IRQ0 - * @brief Semaphore IRQ0 register. - * @{ - */ -#define MXC_F_SEMA_IRQ0_EN_POS 0 /**< IRQ0_EN Position */ -#define MXC_F_SEMA_IRQ0_EN ((uint32_t)(0x1UL << MXC_F_SEMA_IRQ0_EN_POS)) /**< IRQ0_EN Mask */ - -#define MXC_F_SEMA_IRQ0_CM4_IRQ_POS 16 /**< IRQ0_CM4_IRQ Position */ -#define MXC_F_SEMA_IRQ0_CM4_IRQ ((uint32_t)(0x1UL << MXC_F_SEMA_IRQ0_CM4_IRQ_POS)) /**< IRQ0_CM4_IRQ Mask */ - -/**@} end of group SEMA_IRQ0_Register */ - -/** - * @ingroup sema_registers - * @defgroup SEMA_MAIL0 SEMA_MAIL0 - * @brief Semaphore Mailbox 0 register. - * @{ - */ -#define MXC_F_SEMA_MAIL0_DATA_POS 0 /**< MAIL0_DATA Position */ -#define MXC_F_SEMA_MAIL0_DATA ((uint32_t)(0xFFFFFFFFUL << MXC_F_SEMA_MAIL0_DATA_POS)) /**< MAIL0_DATA Mask */ - -/**@} end of group SEMA_MAIL0_Register */ - -/** - * @ingroup sema_registers - * @defgroup SEMA_IRQ1 SEMA_IRQ1 - * @brief Semaphore IRQ1 register. - * @{ - */ -#define MXC_F_SEMA_IRQ1_EN_POS 0 /**< IRQ1_EN Position */ -#define MXC_F_SEMA_IRQ1_EN ((uint32_t)(0x1UL << MXC_F_SEMA_IRQ1_EN_POS)) /**< IRQ1_EN Mask */ - -#define MXC_F_SEMA_IRQ1_RV32_IRQ_POS 16 /**< IRQ1_RV32_IRQ Position */ -#define MXC_F_SEMA_IRQ1_RV32_IRQ ((uint32_t)(0x1UL << MXC_F_SEMA_IRQ1_RV32_IRQ_POS)) /**< IRQ1_RV32_IRQ Mask */ - -/**@} end of group SEMA_IRQ1_Register */ - -/** - * @ingroup sema_registers - * @defgroup SEMA_MAIL1 SEMA_MAIL1 - * @brief Semaphore Mailbox 1 register. - * @{ - */ -#define MXC_F_SEMA_MAIL1_DATA_POS 0 /**< MAIL1_DATA Position */ -#define MXC_F_SEMA_MAIL1_DATA ((uint32_t)(0xFFFFFFFFUL << MXC_F_SEMA_MAIL1_DATA_POS)) /**< MAIL1_DATA Mask */ - -/**@} end of group SEMA_MAIL1_Register */ - -/** - * @ingroup sema_registers - * @defgroup SEMA_STATUS SEMA_STATUS - * @brief Semaphore status bits. 0 indicates the semaphore is free, 1 indicates taken. - * @{ - */ -#define MXC_F_SEMA_STATUS_STATUS0_POS 0 /**< STATUS_STATUS0 Position */ -#define MXC_F_SEMA_STATUS_STATUS0 ((uint32_t)(0x1UL << MXC_F_SEMA_STATUS_STATUS0_POS)) /**< STATUS_STATUS0 Mask */ - -#define MXC_F_SEMA_STATUS_STATUS1_POS 1 /**< STATUS_STATUS1 Position */ -#define MXC_F_SEMA_STATUS_STATUS1 ((uint32_t)(0x1UL << MXC_F_SEMA_STATUS_STATUS1_POS)) /**< STATUS_STATUS1 Mask */ - -#define MXC_F_SEMA_STATUS_STATUS2_POS 2 /**< STATUS_STATUS2 Position */ -#define MXC_F_SEMA_STATUS_STATUS2 ((uint32_t)(0x1UL << MXC_F_SEMA_STATUS_STATUS2_POS)) /**< STATUS_STATUS2 Mask */ - -#define MXC_F_SEMA_STATUS_STATUS3_POS 3 /**< STATUS_STATUS3 Position */ -#define MXC_F_SEMA_STATUS_STATUS3 ((uint32_t)(0x1UL << MXC_F_SEMA_STATUS_STATUS3_POS)) /**< STATUS_STATUS3 Mask */ - -#define MXC_F_SEMA_STATUS_STATUS4_POS 4 /**< STATUS_STATUS4 Position */ -#define MXC_F_SEMA_STATUS_STATUS4 ((uint32_t)(0x1UL << MXC_F_SEMA_STATUS_STATUS4_POS)) /**< STATUS_STATUS4 Mask */ - -#define MXC_F_SEMA_STATUS_STATUS5_POS 5 /**< STATUS_STATUS5 Position */ -#define MXC_F_SEMA_STATUS_STATUS5 ((uint32_t)(0x1UL << MXC_F_SEMA_STATUS_STATUS5_POS)) /**< STATUS_STATUS5 Mask */ - -#define MXC_F_SEMA_STATUS_STATUS6_POS 6 /**< STATUS_STATUS6 Position */ -#define MXC_F_SEMA_STATUS_STATUS6 ((uint32_t)(0x1UL << MXC_F_SEMA_STATUS_STATUS6_POS)) /**< STATUS_STATUS6 Mask */ - -#define MXC_F_SEMA_STATUS_STATUS7_POS 7 /**< STATUS_STATUS7 Position */ -#define MXC_F_SEMA_STATUS_STATUS7 ((uint32_t)(0x1UL << MXC_F_SEMA_STATUS_STATUS7_POS)) /**< STATUS_STATUS7 Mask */ - -/**@} end of group SEMA_STATUS_Register */ - -#ifdef __cplusplus -} -#endif - -#endif // LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_SEMA_REGS_H_ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/simo_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/simo_regs.h deleted file mode 100644 index d6cfc8ccd04..00000000000 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/simo_regs.h +++ /dev/null @@ -1,378 +0,0 @@ -/** - * @file simo_regs.h - * @brief Registers, Bit Masks and Bit Positions for the SIMO Peripheral Module. - * @note This file is @generated. - * @ingroup simo_registers - */ - -/****************************************************************************** - * - * Copyright (C) 2024 Analog Devices, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -#ifndef LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_SIMO_REGS_H_ -#define LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_SIMO_REGS_H_ - -/* **** Includes **** */ -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined (__ICCARM__) - #pragma system_include -#endif - -#if defined (__CC_ARM) - #pragma anon_unions -#endif -/// @cond -/* - If types are not defined elsewhere (CMSIS) define them here -*/ -#ifndef __IO -#define __IO volatile -#endif -#ifndef __I -#define __I volatile const -#endif -#ifndef __O -#define __O volatile -#endif -#ifndef __R -#define __R volatile const -#endif -/// @endcond - -/* **** Definitions **** */ - -/** - * @ingroup simo - * @defgroup simo_registers SIMO_Registers - * @brief Registers, Bit Masks and Bit Positions for the SIMO Peripheral Module. - * @details Single Inductor Multiple Output Switching Converter - */ - -/** - * @ingroup simo_registers - * Structure type to access the SIMO Registers. - */ -typedef struct { - __R uint32_t rsv_0x0; - __IO uint32_t vrego_a; /**< \b 0x0004: SIMO VREGO_A Register */ - __IO uint32_t vrego_b; /**< \b 0x0008: SIMO VREGO_B Register */ - __IO uint32_t vrego_c; /**< \b 0x000C: SIMO VREGO_C Register */ - __IO uint32_t vrego_d; /**< \b 0x0010: SIMO VREGO_D Register */ - __IO uint32_t ipka; /**< \b 0x0014: SIMO IPKA Register */ - __IO uint32_t ipkb; /**< \b 0x0018: SIMO IPKB Register */ - __IO uint32_t maxton; /**< \b 0x001C: SIMO MAXTON Register */ - __I uint32_t iload_a; /**< \b 0x0020: SIMO ILOAD_A Register */ - __I uint32_t iload_b; /**< \b 0x0024: SIMO ILOAD_B Register */ - __I uint32_t iload_c; /**< \b 0x0028: SIMO ILOAD_C Register */ - __I uint32_t iload_d; /**< \b 0x002C: SIMO ILOAD_D Register */ - __IO uint32_t buck_alert_thr_a; /**< \b 0x0030: SIMO BUCK_ALERT_THR_A Register */ - __IO uint32_t buck_alert_thr_b; /**< \b 0x0034: SIMO BUCK_ALERT_THR_B Register */ - __IO uint32_t buck_alert_thr_c; /**< \b 0x0038: SIMO BUCK_ALERT_THR_C Register */ - __IO uint32_t buck_alert_thr_d; /**< \b 0x003C: SIMO BUCK_ALERT_THR_D Register */ - __I uint32_t buck_out_ready; /**< \b 0x0040: SIMO BUCK_OUT_READY Register */ - __I uint32_t zero_cross_cal_a; /**< \b 0x0044: SIMO ZERO_CROSS_CAL_A Register */ - __I uint32_t zero_cross_cal_b; /**< \b 0x0048: SIMO ZERO_CROSS_CAL_B Register */ - __I uint32_t zero_cross_cal_c; /**< \b 0x004C: SIMO ZERO_CROSS_CAL_C Register */ - __I uint32_t zero_cross_cal_d; /**< \b 0x0050: SIMO ZERO_CROSS_CAL_D Register */ -} mxc_simo_regs_t; - -/* Register offsets for module SIMO */ -/** - * @ingroup simo_registers - * @defgroup SIMO_Register_Offsets Register Offsets - * @brief SIMO Peripheral Register Offsets from the SIMO Base Peripheral Address. - * @{ - */ -#define MXC_R_SIMO_VREGO_A ((uint32_t)0x00000004UL) /**< Offset from SIMO Base Address: 0x0004 */ -#define MXC_R_SIMO_VREGO_B ((uint32_t)0x00000008UL) /**< Offset from SIMO Base Address: 0x0008 */ -#define MXC_R_SIMO_VREGO_C ((uint32_t)0x0000000CUL) /**< Offset from SIMO Base Address: 0x000C */ -#define MXC_R_SIMO_VREGO_D ((uint32_t)0x00000010UL) /**< Offset from SIMO Base Address: 0x0010 */ -#define MXC_R_SIMO_IPKA ((uint32_t)0x00000014UL) /**< Offset from SIMO Base Address: 0x0014 */ -#define MXC_R_SIMO_IPKB ((uint32_t)0x00000018UL) /**< Offset from SIMO Base Address: 0x0018 */ -#define MXC_R_SIMO_MAXTON ((uint32_t)0x0000001CUL) /**< Offset from SIMO Base Address: 0x001C */ -#define MXC_R_SIMO_ILOAD_A ((uint32_t)0x00000020UL) /**< Offset from SIMO Base Address: 0x0020 */ -#define MXC_R_SIMO_ILOAD_B ((uint32_t)0x00000024UL) /**< Offset from SIMO Base Address: 0x0024 */ -#define MXC_R_SIMO_ILOAD_C ((uint32_t)0x00000028UL) /**< Offset from SIMO Base Address: 0x0028 */ -#define MXC_R_SIMO_ILOAD_D ((uint32_t)0x0000002CUL) /**< Offset from SIMO Base Address: 0x002C */ -#define MXC_R_SIMO_BUCK_ALERT_THR_A ((uint32_t)0x00000030UL) /**< Offset from SIMO Base Address: 0x0030 */ -#define MXC_R_SIMO_BUCK_ALERT_THR_B ((uint32_t)0x00000034UL) /**< Offset from SIMO Base Address: 0x0034 */ -#define MXC_R_SIMO_BUCK_ALERT_THR_C ((uint32_t)0x00000038UL) /**< Offset from SIMO Base Address: 0x0038 */ -#define MXC_R_SIMO_BUCK_ALERT_THR_D ((uint32_t)0x0000003CUL) /**< Offset from SIMO Base Address: 0x003C */ -#define MXC_R_SIMO_BUCK_OUT_READY ((uint32_t)0x00000040UL) /**< Offset from SIMO Base Address: 0x0040 */ -#define MXC_R_SIMO_ZERO_CROSS_CAL_A ((uint32_t)0x00000044UL) /**< Offset from SIMO Base Address: 0x0044 */ -#define MXC_R_SIMO_ZERO_CROSS_CAL_B ((uint32_t)0x00000048UL) /**< Offset from SIMO Base Address: 0x0048 */ -#define MXC_R_SIMO_ZERO_CROSS_CAL_C ((uint32_t)0x0000004CUL) /**< Offset from SIMO Base Address: 0x004C */ -#define MXC_R_SIMO_ZERO_CROSS_CAL_D ((uint32_t)0x00000050UL) /**< Offset from SIMO Base Address: 0x0050 */ -/**@} end of group simo_registers */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_VREGO_A SIMO_VREGO_A - * @brief Buck Voltage Regulator A Control Register - * @{ - */ -#define MXC_F_SIMO_VREGO_A_VSETA_POS 0 /**< VREGO_A_VSETA Position */ -#define MXC_F_SIMO_VREGO_A_VSETA ((uint32_t)(0x7FUL << MXC_F_SIMO_VREGO_A_VSETA_POS)) /**< VREGO_A_VSETA Mask */ - -#define MXC_F_SIMO_VREGO_A_RANGEA_POS 7 /**< VREGO_A_RANGEA Position */ -#define MXC_F_SIMO_VREGO_A_RANGEA ((uint32_t)(0x1UL << MXC_F_SIMO_VREGO_A_RANGEA_POS)) /**< VREGO_A_RANGEA Mask */ - -/**@} end of group SIMO_VREGO_A_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_VREGO_B SIMO_VREGO_B - * @brief Buck Voltage Regulator B Control Register - * @{ - */ -#define MXC_F_SIMO_VREGO_B_VSETB_POS 0 /**< VREGO_B_VSETB Position */ -#define MXC_F_SIMO_VREGO_B_VSETB ((uint32_t)(0x7FUL << MXC_F_SIMO_VREGO_B_VSETB_POS)) /**< VREGO_B_VSETB Mask */ - -#define MXC_F_SIMO_VREGO_B_RANGEB_POS 7 /**< VREGO_B_RANGEB Position */ -#define MXC_F_SIMO_VREGO_B_RANGEB ((uint32_t)(0x1UL << MXC_F_SIMO_VREGO_B_RANGEB_POS)) /**< VREGO_B_RANGEB Mask */ - -/**@} end of group SIMO_VREGO_B_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_VREGO_C SIMO_VREGO_C - * @brief Buck Voltage Regulator C Control Register - * @{ - */ -#define MXC_F_SIMO_VREGO_C_VSETC_POS 0 /**< VREGO_C_VSETC Position */ -#define MXC_F_SIMO_VREGO_C_VSETC ((uint32_t)(0x7FUL << MXC_F_SIMO_VREGO_C_VSETC_POS)) /**< VREGO_C_VSETC Mask */ - -#define MXC_F_SIMO_VREGO_C_RANGEC_POS 7 /**< VREGO_C_RANGEC Position */ -#define MXC_F_SIMO_VREGO_C_RANGEC ((uint32_t)(0x1UL << MXC_F_SIMO_VREGO_C_RANGEC_POS)) /**< VREGO_C_RANGEC Mask */ - -/**@} end of group SIMO_VREGO_C_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_VREGO_D SIMO_VREGO_D - * @brief Buck Voltage Regulator D Control Register - * @{ - */ -#define MXC_F_SIMO_VREGO_D_VSETD_POS 0 /**< VREGO_D_VSETD Position */ -#define MXC_F_SIMO_VREGO_D_VSETD ((uint32_t)(0x7FUL << MXC_F_SIMO_VREGO_D_VSETD_POS)) /**< VREGO_D_VSETD Mask */ - -#define MXC_F_SIMO_VREGO_D_RANGED_POS 7 /**< VREGO_D_RANGED Position */ -#define MXC_F_SIMO_VREGO_D_RANGED ((uint32_t)(0x1UL << MXC_F_SIMO_VREGO_D_RANGED_POS)) /**< VREGO_D_RANGED Mask */ - -/**@} end of group SIMO_VREGO_D_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_IPKA SIMO_IPKA - * @brief High Side FET Peak Current VREGO_A/VREGO_B Register - * @{ - */ -#define MXC_F_SIMO_IPKA_IPKSETA_POS 0 /**< IPKA_IPKSETA Position */ -#define MXC_F_SIMO_IPKA_IPKSETA ((uint32_t)(0xFUL << MXC_F_SIMO_IPKA_IPKSETA_POS)) /**< IPKA_IPKSETA Mask */ - -#define MXC_F_SIMO_IPKA_IPKSETB_POS 4 /**< IPKA_IPKSETB Position */ -#define MXC_F_SIMO_IPKA_IPKSETB ((uint32_t)(0xFUL << MXC_F_SIMO_IPKA_IPKSETB_POS)) /**< IPKA_IPKSETB Mask */ - -/**@} end of group SIMO_IPKA_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_IPKB SIMO_IPKB - * @brief High Side FET Peak Current VREGO_C/VREGO_D Register - * @{ - */ -#define MXC_F_SIMO_IPKB_IPKSETC_POS 0 /**< IPKB_IPKSETC Position */ -#define MXC_F_SIMO_IPKB_IPKSETC ((uint32_t)(0xFUL << MXC_F_SIMO_IPKB_IPKSETC_POS)) /**< IPKB_IPKSETC Mask */ - -#define MXC_F_SIMO_IPKB_IPKSETD_POS 4 /**< IPKB_IPKSETD Position */ -#define MXC_F_SIMO_IPKB_IPKSETD ((uint32_t)(0xFUL << MXC_F_SIMO_IPKB_IPKSETD_POS)) /**< IPKB_IPKSETD Mask */ - -/**@} end of group SIMO_IPKB_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_MAXTON SIMO_MAXTON - * @brief Maximum High Side FET Time On Register - * @{ - */ -#define MXC_F_SIMO_MAXTON_TONSET_POS 0 /**< MAXTON_TONSET Position */ -#define MXC_F_SIMO_MAXTON_TONSET ((uint32_t)(0xFUL << MXC_F_SIMO_MAXTON_TONSET_POS)) /**< MAXTON_TONSET Mask */ - -/**@} end of group SIMO_MAXTON_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_ILOAD_A SIMO_ILOAD_A - * @brief Buck Cycle Count VREGO_A Register - * @{ - */ -#define MXC_F_SIMO_ILOAD_A_ILOADA_POS 0 /**< ILOAD_A_ILOADA Position */ -#define MXC_F_SIMO_ILOAD_A_ILOADA ((uint32_t)(0xFFUL << MXC_F_SIMO_ILOAD_A_ILOADA_POS)) /**< ILOAD_A_ILOADA Mask */ - -/**@} end of group SIMO_ILOAD_A_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_ILOAD_B SIMO_ILOAD_B - * @brief Buck Cycle Count VREGO_B Register - * @{ - */ -#define MXC_F_SIMO_ILOAD_B_ILOADB_POS 0 /**< ILOAD_B_ILOADB Position */ -#define MXC_F_SIMO_ILOAD_B_ILOADB ((uint32_t)(0xFFUL << MXC_F_SIMO_ILOAD_B_ILOADB_POS)) /**< ILOAD_B_ILOADB Mask */ - -/**@} end of group SIMO_ILOAD_B_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_ILOAD_C SIMO_ILOAD_C - * @brief Buck Cycle Count VREGO_C Register - * @{ - */ -#define MXC_F_SIMO_ILOAD_C_ILOADC_POS 0 /**< ILOAD_C_ILOADC Position */ -#define MXC_F_SIMO_ILOAD_C_ILOADC ((uint32_t)(0xFFUL << MXC_F_SIMO_ILOAD_C_ILOADC_POS)) /**< ILOAD_C_ILOADC Mask */ - -/**@} end of group SIMO_ILOAD_C_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_ILOAD_D SIMO_ILOAD_D - * @brief Buck Cycle Count VREGO_D Register - * @{ - */ -#define MXC_F_SIMO_ILOAD_D_ILOADD_POS 0 /**< ILOAD_D_ILOADD Position */ -#define MXC_F_SIMO_ILOAD_D_ILOADD ((uint32_t)(0xFFUL << MXC_F_SIMO_ILOAD_D_ILOADD_POS)) /**< ILOAD_D_ILOADD Mask */ - -/**@} end of group SIMO_ILOAD_D_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_BUCK_ALERT_THR_A SIMO_BUCK_ALERT_THR_A - * @brief Buck Cycle Count Alert VERGO_A Register - * @{ - */ -#define MXC_F_SIMO_BUCK_ALERT_THR_A_BUCKTHRA_POS 0 /**< BUCK_ALERT_THR_A_BUCKTHRA Position */ -#define MXC_F_SIMO_BUCK_ALERT_THR_A_BUCKTHRA ((uint32_t)(0xFFUL << MXC_F_SIMO_BUCK_ALERT_THR_A_BUCKTHRA_POS)) /**< BUCK_ALERT_THR_A_BUCKTHRA Mask */ - -/**@} end of group SIMO_BUCK_ALERT_THR_A_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_BUCK_ALERT_THR_B SIMO_BUCK_ALERT_THR_B - * @brief Buck Cycle Count Alert VERGO_B Register - * @{ - */ -#define MXC_F_SIMO_BUCK_ALERT_THR_B_BUCKTHRB_POS 0 /**< BUCK_ALERT_THR_B_BUCKTHRB Position */ -#define MXC_F_SIMO_BUCK_ALERT_THR_B_BUCKTHRB ((uint32_t)(0xFFUL << MXC_F_SIMO_BUCK_ALERT_THR_B_BUCKTHRB_POS)) /**< BUCK_ALERT_THR_B_BUCKTHRB Mask */ - -/**@} end of group SIMO_BUCK_ALERT_THR_B_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_BUCK_ALERT_THR_C SIMO_BUCK_ALERT_THR_C - * @brief Buck Cycle Count Alert VERGO_C Register - * @{ - */ -#define MXC_F_SIMO_BUCK_ALERT_THR_C_BUCKTHRC_POS 0 /**< BUCK_ALERT_THR_C_BUCKTHRC Position */ -#define MXC_F_SIMO_BUCK_ALERT_THR_C_BUCKTHRC ((uint32_t)(0xFFUL << MXC_F_SIMO_BUCK_ALERT_THR_C_BUCKTHRC_POS)) /**< BUCK_ALERT_THR_C_BUCKTHRC Mask */ - -/**@} end of group SIMO_BUCK_ALERT_THR_C_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_BUCK_ALERT_THR_D SIMO_BUCK_ALERT_THR_D - * @brief Buck Cycle Count Alert VERGO_D Register - * @{ - */ -#define MXC_F_SIMO_BUCK_ALERT_THR_D_BUCKTHRD_POS 0 /**< BUCK_ALERT_THR_D_BUCKTHRD Position */ -#define MXC_F_SIMO_BUCK_ALERT_THR_D_BUCKTHRD ((uint32_t)(0xFFUL << MXC_F_SIMO_BUCK_ALERT_THR_D_BUCKTHRD_POS)) /**< BUCK_ALERT_THR_D_BUCKTHRD Mask */ - -/**@} end of group SIMO_BUCK_ALERT_THR_D_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_BUCK_OUT_READY SIMO_BUCK_OUT_READY - * @brief Buck Regulator Output Ready Register - * @{ - */ -#define MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYA_POS 0 /**< BUCK_OUT_READY_BUCKOUTRDYA Position */ -#define MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYA ((uint32_t)(0x1UL << MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYA_POS)) /**< BUCK_OUT_READY_BUCKOUTRDYA Mask */ - -#define MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYB_POS 1 /**< BUCK_OUT_READY_BUCKOUTRDYB Position */ -#define MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYB ((uint32_t)(0x1UL << MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYB_POS)) /**< BUCK_OUT_READY_BUCKOUTRDYB Mask */ - -#define MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYC_POS 2 /**< BUCK_OUT_READY_BUCKOUTRDYC Position */ -#define MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYC ((uint32_t)(0x1UL << MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYC_POS)) /**< BUCK_OUT_READY_BUCKOUTRDYC Mask */ - -#define MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYD_POS 3 /**< BUCK_OUT_READY_BUCKOUTRDYD Position */ -#define MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYD ((uint32_t)(0x1UL << MXC_F_SIMO_BUCK_OUT_READY_BUCKOUTRDYD_POS)) /**< BUCK_OUT_READY_BUCKOUTRDYD Mask */ - -/**@} end of group SIMO_BUCK_OUT_READY_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_ZERO_CROSS_CAL_A SIMO_ZERO_CROSS_CAL_A - * @brief Zero Cross Calibration VERGO_A Register - * @{ - */ -#define MXC_F_SIMO_ZERO_CROSS_CAL_A_ZXCALA_POS 0 /**< ZERO_CROSS_CAL_A_ZXCALA Position */ -#define MXC_F_SIMO_ZERO_CROSS_CAL_A_ZXCALA ((uint32_t)(0xFUL << MXC_F_SIMO_ZERO_CROSS_CAL_A_ZXCALA_POS)) /**< ZERO_CROSS_CAL_A_ZXCALA Mask */ - -/**@} end of group SIMO_ZERO_CROSS_CAL_A_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_ZERO_CROSS_CAL_B SIMO_ZERO_CROSS_CAL_B - * @brief Zero Cross Calibration VERGO_B Register - * @{ - */ -#define MXC_F_SIMO_ZERO_CROSS_CAL_B_ZXCALB_POS 0 /**< ZERO_CROSS_CAL_B_ZXCALB Position */ -#define MXC_F_SIMO_ZERO_CROSS_CAL_B_ZXCALB ((uint32_t)(0xFUL << MXC_F_SIMO_ZERO_CROSS_CAL_B_ZXCALB_POS)) /**< ZERO_CROSS_CAL_B_ZXCALB Mask */ - -/**@} end of group SIMO_ZERO_CROSS_CAL_B_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_ZERO_CROSS_CAL_C SIMO_ZERO_CROSS_CAL_C - * @brief Zero Cross Calibration VERGO_C Register - * @{ - */ -#define MXC_F_SIMO_ZERO_CROSS_CAL_C_ZXCALC_POS 0 /**< ZERO_CROSS_CAL_C_ZXCALC Position */ -#define MXC_F_SIMO_ZERO_CROSS_CAL_C_ZXCALC ((uint32_t)(0xFUL << MXC_F_SIMO_ZERO_CROSS_CAL_C_ZXCALC_POS)) /**< ZERO_CROSS_CAL_C_ZXCALC Mask */ - -/**@} end of group SIMO_ZERO_CROSS_CAL_C_Register */ - -/** - * @ingroup simo_registers - * @defgroup SIMO_ZERO_CROSS_CAL_D SIMO_ZERO_CROSS_CAL_D - * @brief Zero Cross Calibration VERGO_D Register - * @{ - */ -#define MXC_F_SIMO_ZERO_CROSS_CAL_D_ZXCALD_POS 0 /**< ZERO_CROSS_CAL_D_ZXCALD Position */ -#define MXC_F_SIMO_ZERO_CROSS_CAL_D_ZXCALD ((uint32_t)(0xFUL << MXC_F_SIMO_ZERO_CROSS_CAL_D_ZXCALD_POS)) /**< ZERO_CROSS_CAL_D_ZXCALD Mask */ - -/**@} end of group SIMO_ZERO_CROSS_CAL_D_Register */ - -#ifdef __cplusplus -} -#endif - -#endif // LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_INCLUDE_SIMO_REGS_H_ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/sir_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/sir_regs.h index 400ce986434..8be7861a5a4 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/sir_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/sir_regs.h @@ -72,9 +72,13 @@ extern "C" { * Structure type to access the SIR Registers. */ typedef struct { - __I uint32_t sistat; /**< \b 0x00: SIR SISTAT Register */ - __I uint32_t addr; /**< \b 0x04: SIR ADDR Register */ - __R uint32_t rsv_0x8_0x103[63]; + __I uint32_t sistat; /**< \b 0x000: SIR SISTAT Register */ + __I uint32_t addr; /**< \b 0x004: SIR ADDR Register */ + __R uint32_t rsv_0x8_0x1b[5]; + __IO uint32_t btleldo_bb; /**< \b 0x01C: SIR BTLELDO_BB Register */ + __R uint32_t rsv_0x20_0x2b[3]; + __IO uint32_t btleldo_rf; /**< \b 0x002C: SIR BTLELDO_RF Register */ + __R uint32_t rsv_0x30_0x103[53]; __I uint32_t sfstat; /**< \b 0x104: SIR SFSTAT Register */ } mxc_sir_regs_t; @@ -87,6 +91,8 @@ typedef struct { */ #define MXC_R_SIR_SISTAT ((uint32_t)0x00000000UL) /**< Offset from SIR Base Address: 0x0000 */ #define MXC_R_SIR_ADDR ((uint32_t)0x00000004UL) /**< Offset from SIR Base Address: 0x0004 */ +#define MXC_R_SIR_BTLELDO_BB ((uint32_t)0x0000001CUL) /**< Offset from SIR Base Address: 0x001C */ +#define MXC_R_SIR_BTLELDO_RF ((uint32_t)0x0000002CUL) /**< Offset from SIR Base Address: 0x002C */ #define MXC_R_SIR_SFSTAT ((uint32_t)0x00000104UL) /**< Offset from SIR Base Address: 0x0104 */ /**@} end of group sir_registers */ @@ -117,6 +123,28 @@ typedef struct { /**@} end of group SIR_ADDR_Register */ +/** + * @ingroup sir_registers + * @defgroup SIR_BTLELDO_BB SIR_BTLELDO_BB + * @brief BTLE LDO TRIM BB Register. + * @{ + */ +#define MXC_F_SIR_BTLELDO_BB_TRIM_POS 0 /**< BTLELDO_BB_TRIM Position */ +#define MXC_F_SIR_BTLELDO_BB_TRIM ((uint32_t)(0x1FUL << MXC_F_SIR_BTLELDO_BB_TRIM_POS)) /**< BTLELDO_BB_TRIM Mask */ + +/**@} end of group SIR_BTLELDO_BB_Register */ + +/** + * @ingroup sir_registers + * @defgroup SIR_BTLELDO_RF SIR_BTLELDO_RF + * @brief BTLE LDO TRIM RF Register. + * @{ + */ +#define MXC_F_SIR_BTLELDO_RF_TRIM_POS 0 /**< BTLELDO_RF_TRIM Position */ +#define MXC_F_SIR_BTLELDO_RF_TRIM ((uint32_t)(0x1FUL << MXC_F_SIR_BTLELDO_RF_TRIM_POS)) /**< BTLELDO_RF_TRIM Mask */ + +/**@} end of group SIR_BTLELDO_RF_Register */ + /** * @ingroup sir_registers * @defgroup SIR_SFSTAT SIR_SFSTAT diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/spc_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/spc_regs.h index 0ad6d991de8..69408b70f41 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/spc_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/spc_regs.h @@ -91,9 +91,10 @@ typedef struct { __IO uint32_t apbsec; /**< \b 0x0120: SPC APBSEC Register */ __R uint32_t rsv_0x124_0x15f[15]; __IO uint32_t apbpriv; /**< \b 0x0160: SPC APBPRIV Register */ - __R uint32_t rsv_0x164_0x17f[7]; + __R uint32_t rsv_0x164_0x16f[3]; + __IO uint32_t ahbmpriv; /**< \b 0x0170: SPC AHBMPRIV Register */ + __R uint32_t rsv_0x174_0x17f[3]; __IO uint32_t gpio0; /**< \b 0x0180: SPC GPIO0 Register */ - __IO uint32_t gpio1; /**< \b 0x0184: SPC GPIO1 Register */ } mxc_spc_regs_t; /* Register offsets for module SPC */ @@ -114,8 +115,8 @@ typedef struct { #define MXC_R_SPC_M33LOCK ((uint32_t)0x00000090UL) /**< Offset from SPC Base Address: 0x0090 */ #define MXC_R_SPC_APBSEC ((uint32_t)0x00000120UL) /**< Offset from SPC Base Address: 0x0120 */ #define MXC_R_SPC_APBPRIV ((uint32_t)0x00000160UL) /**< Offset from SPC Base Address: 0x0160 */ +#define MXC_R_SPC_AHBMPRIV ((uint32_t)0x00000170UL) /**< Offset from SPC Base Address: 0x0170 */ #define MXC_R_SPC_GPIO0 ((uint32_t)0x00000180UL) /**< Offset from SPC Base Address: 0x0180 */ -#define MXC_R_SPC_GPIO1 ((uint32_t)0x00000184UL) /**< Offset from SPC Base Address: 0x0184 */ /**@} end of group spc_registers */ /** @@ -199,7 +200,7 @@ typedef struct { * @{ */ #define MXC_F_SPC_PPC_STATUS_APBPPC_POS 0 /**< PPC_STATUS_APBPPC Position */ -#define MXC_F_SPC_PPC_STATUS_APBPPC ((uint32_t)(0x3UL << MXC_F_SPC_PPC_STATUS_APBPPC_POS)) /**< PPC_STATUS_APBPPC Mask */ +#define MXC_F_SPC_PPC_STATUS_APBPPC ((uint32_t)(0xFUL << MXC_F_SPC_PPC_STATUS_APBPPC_POS)) /**< PPC_STATUS_APBPPC Mask */ /**@} end of group SPC_PPC_STATUS_Register */ @@ -210,7 +211,7 @@ typedef struct { * @{ */ #define MXC_F_SPC_PPC_INTCLR_APBPPC_POS 0 /**< PPC_INTCLR_APBPPC Position */ -#define MXC_F_SPC_PPC_INTCLR_APBPPC ((uint32_t)(0x3UL << MXC_F_SPC_PPC_INTCLR_APBPPC_POS)) /**< PPC_INTCLR_APBPPC Mask */ +#define MXC_F_SPC_PPC_INTCLR_APBPPC ((uint32_t)(0xFUL << MXC_F_SPC_PPC_INTCLR_APBPPC_POS)) /**< PPC_INTCLR_APBPPC Mask */ /**@} end of group SPC_PPC_INTCLR_Register */ @@ -221,7 +222,7 @@ typedef struct { * @{ */ #define MXC_F_SPC_PPC_INTEN_APBPPC_POS 0 /**< PPC_INTEN_APBPPC Position */ -#define MXC_F_SPC_PPC_INTEN_APBPPC ((uint32_t)(0x3UL << MXC_F_SPC_PPC_INTEN_APBPPC_POS)) /**< PPC_INTEN_APBPPC Mask */ +#define MXC_F_SPC_PPC_INTEN_APBPPC ((uint32_t)(0xFUL << MXC_F_SPC_PPC_INTEN_APBPPC_POS)) /**< PPC_INTEN_APBPPC Mask */ /**@} end of group SPC_PPC_INTEN_Register */ @@ -270,6 +271,64 @@ typedef struct { */ #define MXC_F_SPC_APBSEC_PERIPH_POS 0 /**< APBSEC_PERIPH Position */ #define MXC_F_SPC_APBSEC_PERIPH ((uint32_t)(0xFFFFFFFFUL << MXC_F_SPC_APBSEC_PERIPH_POS)) /**< APBSEC_PERIPH Mask */ +#define MXC_V_SPC_APBSEC_PERIPH_GCR ((uint32_t)0x1UL) /**< APBSEC_PERIPH_GCR Value */ +#define MXC_S_SPC_APBSEC_PERIPH_GCR (MXC_V_SPC_APBSEC_PERIPH_GCR << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_GCR Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_SIR ((uint32_t)0x2UL) /**< APBSEC_PERIPH_SIR Value */ +#define MXC_S_SPC_APBSEC_PERIPH_SIR (MXC_V_SPC_APBSEC_PERIPH_SIR << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_SIR Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_FCR ((uint32_t)0x4UL) /**< APBSEC_PERIPH_FCR Value */ +#define MXC_S_SPC_APBSEC_PERIPH_FCR (MXC_V_SPC_APBSEC_PERIPH_FCR << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_FCR Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_WDT ((uint32_t)0x8UL) /**< APBSEC_PERIPH_WDT Value */ +#define MXC_S_SPC_APBSEC_PERIPH_WDT (MXC_V_SPC_APBSEC_PERIPH_WDT << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_WDT Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_AES ((uint32_t)0x10UL) /**< APBSEC_PERIPH_AES Value */ +#define MXC_S_SPC_APBSEC_PERIPH_AES (MXC_V_SPC_APBSEC_PERIPH_AES << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_AES Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_AESKEYS ((uint32_t)0x20UL) /**< APBSEC_PERIPH_AESKEYS Value */ +#define MXC_S_SPC_APBSEC_PERIPH_AESKEYS (MXC_V_SPC_APBSEC_PERIPH_AESKEYS << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_AESKEYS Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_CRC ((uint32_t)0x40UL) /**< APBSEC_PERIPH_CRC Value */ +#define MXC_S_SPC_APBSEC_PERIPH_CRC (MXC_V_SPC_APBSEC_PERIPH_CRC << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_CRC Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_GPIO0 ((uint32_t)0x80UL) /**< APBSEC_PERIPH_GPIO0 Value */ +#define MXC_S_SPC_APBSEC_PERIPH_GPIO0 (MXC_V_SPC_APBSEC_PERIPH_GPIO0 << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_GPIO0 Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_TMR0 ((uint32_t)0x100UL) /**< APBSEC_PERIPH_TMR0 Value */ +#define MXC_S_SPC_APBSEC_PERIPH_TMR0 (MXC_V_SPC_APBSEC_PERIPH_TMR0 << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_TMR0 Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_TMR1 ((uint32_t)0x200UL) /**< APBSEC_PERIPH_TMR1 Value */ +#define MXC_S_SPC_APBSEC_PERIPH_TMR1 (MXC_V_SPC_APBSEC_PERIPH_TMR1 << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_TMR1 Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_TMR2 ((uint32_t)0x400UL) /**< APBSEC_PERIPH_TMR2 Value */ +#define MXC_S_SPC_APBSEC_PERIPH_TMR2 (MXC_V_SPC_APBSEC_PERIPH_TMR2 << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_TMR2 Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_TMR3 ((uint32_t)0x800UL) /**< APBSEC_PERIPH_TMR3 Value */ +#define MXC_S_SPC_APBSEC_PERIPH_TMR3 (MXC_V_SPC_APBSEC_PERIPH_TMR3 << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_TMR3 Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_TMR4 ((uint32_t)0x1000UL) /**< APBSEC_PERIPH_TMR4 Value */ +#define MXC_S_SPC_APBSEC_PERIPH_TMR4 (MXC_V_SPC_APBSEC_PERIPH_TMR4 << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_TMR4 Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_TMR5 ((uint32_t)0x2000UL) /**< APBSEC_PERIPH_TMR5 Value */ +#define MXC_S_SPC_APBSEC_PERIPH_TMR5 (MXC_V_SPC_APBSEC_PERIPH_TMR5 << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_TMR5 Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_I3C ((uint32_t)0x4000UL) /**< APBSEC_PERIPH_I3C Value */ +#define MXC_S_SPC_APBSEC_PERIPH_I3C (MXC_V_SPC_APBSEC_PERIPH_I3C << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_I3C Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_UART ((uint32_t)0x8000UL) /**< APBSEC_PERIPH_UART Value */ +#define MXC_S_SPC_APBSEC_PERIPH_UART (MXC_V_SPC_APBSEC_PERIPH_UART << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_UART Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_SPI ((uint32_t)0x10000UL) /**< APBSEC_PERIPH_SPI Value */ +#define MXC_S_SPC_APBSEC_PERIPH_SPI (MXC_V_SPC_APBSEC_PERIPH_SPI << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_SPI Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_TRNG ((uint32_t)0x20000UL) /**< APBSEC_PERIPH_TRNG Value */ +#define MXC_S_SPC_APBSEC_PERIPH_TRNG (MXC_V_SPC_APBSEC_PERIPH_TRNG << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_TRNG Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_BTLE_DBB ((uint32_t)0x40000UL) /**< APBSEC_PERIPH_BTLE_DBB Value */ +#define MXC_S_SPC_APBSEC_PERIPH_BTLE_DBB (MXC_V_SPC_APBSEC_PERIPH_BTLE_DBB << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_BTLE_DBB Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_BTLE_RFFE ((uint32_t)0x80000UL) /**< APBSEC_PERIPH_BTLE_RFFE Value */ +#define MXC_S_SPC_APBSEC_PERIPH_BTLE_RFFE (MXC_V_SPC_APBSEC_PERIPH_BTLE_RFFE << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_BTLE_RFFE Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_RSTZ ((uint32_t)0x100000UL) /**< APBSEC_PERIPH_RSTZ Value */ +#define MXC_S_SPC_APBSEC_PERIPH_RSTZ (MXC_V_SPC_APBSEC_PERIPH_RSTZ << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_RSTZ Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_BOOST ((uint32_t)0x200000UL) /**< APBSEC_PERIPH_BOOST Value */ +#define MXC_S_SPC_APBSEC_PERIPH_BOOST (MXC_V_SPC_APBSEC_PERIPH_BOOST << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_BOOST Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_TRIMSIR ((uint32_t)0x400000UL) /**< APBSEC_PERIPH_TRIMSIR Value */ +#define MXC_S_SPC_APBSEC_PERIPH_TRIMSIR (MXC_V_SPC_APBSEC_PERIPH_TRIMSIR << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_TRIMSIR Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_RTC ((uint32_t)0x1000000UL) /**< APBSEC_PERIPH_RTC Value */ +#define MXC_S_SPC_APBSEC_PERIPH_RTC (MXC_V_SPC_APBSEC_PERIPH_RTC << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_RTC Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_WUT0 ((uint32_t)0x2000000UL) /**< APBSEC_PERIPH_WUT0 Value */ +#define MXC_S_SPC_APBSEC_PERIPH_WUT0 (MXC_V_SPC_APBSEC_PERIPH_WUT0 << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_WUT0 Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_WUT1 ((uint32_t)0x4000000UL) /**< APBSEC_PERIPH_WUT1 Value */ +#define MXC_S_SPC_APBSEC_PERIPH_WUT1 (MXC_V_SPC_APBSEC_PERIPH_WUT1 << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_WUT1 Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_PWRSEQ ((uint32_t)0x8000000UL) /**< APBSEC_PERIPH_PWRSEQ Value */ +#define MXC_S_SPC_APBSEC_PERIPH_PWRSEQ (MXC_V_SPC_APBSEC_PERIPH_PWRSEQ << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_PWRSEQ Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_MCR ((uint32_t)0x10000000UL) /**< APBSEC_PERIPH_MCR Value */ +#define MXC_S_SPC_APBSEC_PERIPH_MCR (MXC_V_SPC_APBSEC_PERIPH_MCR << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_MCR Setting */ +#define MXC_V_SPC_APBSEC_PERIPH_ALL ((uint32_t)0x1F7FFFFFUL) /**< APBSEC_PERIPH_ALL Value */ +#define MXC_S_SPC_APBSEC_PERIPH_ALL (MXC_V_SPC_APBSEC_PERIPH_ALL << MXC_F_SPC_APBSEC_PERIPH_POS) /**< APBSEC_PERIPH_ALL Setting */ /**@} end of group SPC_APBSEC_Register */ @@ -281,30 +340,88 @@ typedef struct { */ #define MXC_F_SPC_APBPRIV_PERIPH_POS 0 /**< APBPRIV_PERIPH Position */ #define MXC_F_SPC_APBPRIV_PERIPH ((uint32_t)(0xFFFFFFFFUL << MXC_F_SPC_APBPRIV_PERIPH_POS)) /**< APBPRIV_PERIPH Mask */ +#define MXC_V_SPC_APBPRIV_PERIPH_GCR ((uint32_t)0x1UL) /**< APBPRIV_PERIPH_GCR Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_GCR (MXC_V_SPC_APBPRIV_PERIPH_GCR << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_GCR Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_SIR ((uint32_t)0x2UL) /**< APBPRIV_PERIPH_SIR Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_SIR (MXC_V_SPC_APBPRIV_PERIPH_SIR << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_SIR Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_FCR ((uint32_t)0x4UL) /**< APBPRIV_PERIPH_FCR Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_FCR (MXC_V_SPC_APBPRIV_PERIPH_FCR << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_FCR Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_WDT ((uint32_t)0x8UL) /**< APBPRIV_PERIPH_WDT Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_WDT (MXC_V_SPC_APBPRIV_PERIPH_WDT << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_WDT Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_AES ((uint32_t)0x10UL) /**< APBPRIV_PERIPH_AES Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_AES (MXC_V_SPC_APBPRIV_PERIPH_AES << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_AES Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_AESKEYS ((uint32_t)0x20UL) /**< APBPRIV_PERIPH_AESKEYS Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_AESKEYS (MXC_V_SPC_APBPRIV_PERIPH_AESKEYS << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_AESKEYS Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_CRC ((uint32_t)0x40UL) /**< APBPRIV_PERIPH_CRC Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_CRC (MXC_V_SPC_APBPRIV_PERIPH_CRC << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_CRC Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_GPIO0 ((uint32_t)0x80UL) /**< APBPRIV_PERIPH_GPIO0 Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_GPIO0 (MXC_V_SPC_APBPRIV_PERIPH_GPIO0 << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_GPIO0 Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_TMR0 ((uint32_t)0x100UL) /**< APBPRIV_PERIPH_TMR0 Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_TMR0 (MXC_V_SPC_APBPRIV_PERIPH_TMR0 << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR0 Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_TMR1 ((uint32_t)0x200UL) /**< APBPRIV_PERIPH_TMR1 Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_TMR1 (MXC_V_SPC_APBPRIV_PERIPH_TMR1 << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR1 Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_TMR2 ((uint32_t)0x400UL) /**< APBPRIV_PERIPH_TMR2 Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_TMR2 (MXC_V_SPC_APBPRIV_PERIPH_TMR2 << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR2 Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_TMR3 ((uint32_t)0x800UL) /**< APBPRIV_PERIPH_TMR3 Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_TMR3 (MXC_V_SPC_APBPRIV_PERIPH_TMR3 << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR3 Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_TMR4 ((uint32_t)0x1000UL) /**< APBPRIV_PERIPH_TMR4 Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_TMR4 (MXC_V_SPC_APBPRIV_PERIPH_TMR4 << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR4 Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_TMR5 ((uint32_t)0x2000UL) /**< APBPRIV_PERIPH_TMR5 Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_TMR5 (MXC_V_SPC_APBPRIV_PERIPH_TMR5 << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TMR5 Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_I3C ((uint32_t)0x4000UL) /**< APBPRIV_PERIPH_I3C Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_I3C (MXC_V_SPC_APBPRIV_PERIPH_I3C << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_I3C Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_UART ((uint32_t)0x8000UL) /**< APBPRIV_PERIPH_UART Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_UART (MXC_V_SPC_APBPRIV_PERIPH_UART << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_UART Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_SPI ((uint32_t)0x10000UL) /**< APBPRIV_PERIPH_SPI Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_SPI (MXC_V_SPC_APBPRIV_PERIPH_SPI << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_SPI Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_TRNG ((uint32_t)0x20000UL) /**< APBPRIV_PERIPH_TRNG Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_TRNG (MXC_V_SPC_APBPRIV_PERIPH_TRNG << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TRNG Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_BTLE_DBB ((uint32_t)0x40000UL) /**< APBPRIV_PERIPH_BTLE_DBB Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_BTLE_DBB (MXC_V_SPC_APBPRIV_PERIPH_BTLE_DBB << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_BTLE_DBB Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_BTLE_RFFE ((uint32_t)0x80000UL) /**< APBPRIV_PERIPH_BTLE_RFFE Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_BTLE_RFFE (MXC_V_SPC_APBPRIV_PERIPH_BTLE_RFFE << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_BTLE_RFFE Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_RSTZ ((uint32_t)0x100000UL) /**< APBPRIV_PERIPH_RSTZ Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_RSTZ (MXC_V_SPC_APBPRIV_PERIPH_RSTZ << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_RSTZ Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_BOOST ((uint32_t)0x200000UL) /**< APBPRIV_PERIPH_BOOST Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_BOOST (MXC_V_SPC_APBPRIV_PERIPH_BOOST << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_BOOST Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_TRIMSIR ((uint32_t)0x400000UL) /**< APBPRIV_PERIPH_TRIMSIR Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_TRIMSIR (MXC_V_SPC_APBPRIV_PERIPH_TRIMSIR << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_TRIMSIR Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_RTC ((uint32_t)0x1000000UL) /**< APBPRIV_PERIPH_RTC Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_RTC (MXC_V_SPC_APBPRIV_PERIPH_RTC << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_RTC Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_WUT0 ((uint32_t)0x2000000UL) /**< APBPRIV_PERIPH_WUT0 Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_WUT0 (MXC_V_SPC_APBPRIV_PERIPH_WUT0 << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_WUT0 Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_WUT1 ((uint32_t)0x4000000UL) /**< APBPRIV_PERIPH_WUT1 Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_WUT1 (MXC_V_SPC_APBPRIV_PERIPH_WUT1 << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_WUT1 Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_PWRSEQ ((uint32_t)0x8000000UL) /**< APBPRIV_PERIPH_PWRSEQ Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_PWRSEQ (MXC_V_SPC_APBPRIV_PERIPH_PWRSEQ << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_PWRSEQ Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_MCR ((uint32_t)0x10000000UL) /**< APBPRIV_PERIPH_MCR Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_MCR (MXC_V_SPC_APBPRIV_PERIPH_MCR << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_MCR Setting */ +#define MXC_V_SPC_APBPRIV_PERIPH_ALL ((uint32_t)0x1F7FFFFFUL) /**< APBPRIV_PERIPH_ALL Value */ +#define MXC_S_SPC_APBPRIV_PERIPH_ALL (MXC_V_SPC_APBPRIV_PERIPH_ALL << MXC_F_SPC_APBPRIV_PERIPH_POS) /**< APBPRIV_PERIPH_ALL Setting */ /**@} end of group SPC_APBPRIV_Register */ /** * @ingroup spc_registers - * @defgroup SPC_GPIO0 SPC_GPIO0 - * @brief Secure GPIO0 Configuration Register. + * @defgroup SPC_AHBMPRIV SPC_AHBMPRIV + * @brief AHB Privileged/Non-privileged Secure DMA Access. * @{ */ -#define MXC_F_SPC_GPIO0_PINS_POS 0 /**< GPIO0_PINS Position */ -#define MXC_F_SPC_GPIO0_PINS ((uint32_t)(0xFFFUL << MXC_F_SPC_GPIO0_PINS_POS)) /**< GPIO0_PINS Mask */ +#define MXC_F_SPC_AHBMPRIV_DMA_POS 0 /**< AHBMPRIV_DMA Position */ +#define MXC_F_SPC_AHBMPRIV_DMA ((uint32_t)(0x1UL << MXC_F_SPC_AHBMPRIV_DMA_POS)) /**< AHBMPRIV_DMA Mask */ -/**@} end of group SPC_GPIO0_Register */ +/**@} end of group SPC_AHBMPRIV_Register */ /** * @ingroup spc_registers - * @defgroup SPC_GPIO1 SPC_GPIO1 - * @brief Secure GPIO1 Configuration Register. + * @defgroup SPC_GPIO0 SPC_GPIO0 + * @brief Secure GPIO0 Configuration Register. * @{ */ -#define MXC_F_SPC_GPIO1_PINS_POS 0 /**< GPIO1_PINS Position */ -#define MXC_F_SPC_GPIO1_PINS ((uint32_t)(0x3UL << MXC_F_SPC_GPIO1_PINS_POS)) /**< GPIO1_PINS Mask */ +#define MXC_F_SPC_GPIO0_PINS_POS 0 /**< GPIO0_PINS Position */ +#define MXC_F_SPC_GPIO0_PINS ((uint32_t)(0x3FFFUL << MXC_F_SPC_GPIO0_PINS_POS)) /**< GPIO0_PINS Mask */ -/**@} end of group SPC_GPIO1_Register */ +/**@} end of group SPC_GPIO0_Register */ #ifdef __cplusplus } diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/spi_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/spi_regs.h index e965112191c..c9443d1da82 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/spi_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/spi_regs.h @@ -156,8 +156,8 @@ typedef struct { #define MXC_F_SPI_CTRL0_EN_POS 0 /**< CTRL0_EN Position */ #define MXC_F_SPI_CTRL0_EN ((uint32_t)(0x1UL << MXC_F_SPI_CTRL0_EN_POS)) /**< CTRL0_EN Mask */ -#define MXC_F_SPI_CTRL0_CTRLR_MODE_POS 1 /**< CTRL0_CTRLR_MODE Position */ -#define MXC_F_SPI_CTRL0_CTRLR_MODE ((uint32_t)(0x1UL << MXC_F_SPI_CTRL0_CTRLR_MODE_POS)) /**< CTRL0_CTRLR_MODE Mask */ +#define MXC_F_SPI_CTRL0_CONT_MODE_POS 1 /**< CTRL0_CONT_MODE Position */ +#define MXC_F_SPI_CTRL0_CONT_MODE ((uint32_t)(0x1UL << MXC_F_SPI_CTRL0_CONT_MODE_POS)) /**< CTRL0_CONT_MODE Mask */ #define MXC_F_SPI_CTRL0_TS_IO_POS 4 /**< CTRL0_TS_IO Position */ #define MXC_F_SPI_CTRL0_TS_IO ((uint32_t)(0x1UL << MXC_F_SPI_CTRL0_TS_IO_POS)) /**< CTRL0_TS_IO Mask */ @@ -383,8 +383,8 @@ typedef struct { #define MXC_F_SPI_INTFL_ABORT_POS 9 /**< INTFL_ABORT Position */ #define MXC_F_SPI_INTFL_ABORT ((uint32_t)(0x1UL << MXC_F_SPI_INTFL_ABORT_POS)) /**< INTFL_ABORT Mask */ -#define MXC_F_SPI_INTFL_CTRLR_DONE_POS 11 /**< INTFL_CTRLR_DONE Position */ -#define MXC_F_SPI_INTFL_CTRLR_DONE ((uint32_t)(0x1UL << MXC_F_SPI_INTFL_CTRLR_DONE_POS)) /**< INTFL_CTRLR_DONE Mask */ +#define MXC_F_SPI_INTFL_CONT_DONE_POS 11 /**< INTFL_CONT_DONE Position */ +#define MXC_F_SPI_INTFL_CONT_DONE ((uint32_t)(0x1UL << MXC_F_SPI_INTFL_CONT_DONE_POS)) /**< INTFL_CONT_DONE Mask */ #define MXC_F_SPI_INTFL_TX_OV_POS 12 /**< INTFL_TX_OV Position */ #define MXC_F_SPI_INTFL_TX_OV ((uint32_t)(0x1UL << MXC_F_SPI_INTFL_TX_OV_POS)) /**< INTFL_TX_OV Mask */ @@ -430,8 +430,8 @@ typedef struct { #define MXC_F_SPI_INTEN_ABORT_POS 9 /**< INTEN_ABORT Position */ #define MXC_F_SPI_INTEN_ABORT ((uint32_t)(0x1UL << MXC_F_SPI_INTEN_ABORT_POS)) /**< INTEN_ABORT Mask */ -#define MXC_F_SPI_INTEN_CTRLR_DONE_POS 11 /**< INTEN_CTRLR_DONE Position */ -#define MXC_F_SPI_INTEN_CTRLR_DONE ((uint32_t)(0x1UL << MXC_F_SPI_INTEN_CTRLR_DONE_POS)) /**< INTEN_CTRLR_DONE Mask */ +#define MXC_F_SPI_INTEN_CONT_DONE_POS 11 /**< INTEN_CONT_DONE Position */ +#define MXC_F_SPI_INTEN_CONT_DONE ((uint32_t)(0x1UL << MXC_F_SPI_INTEN_CONT_DONE_POS)) /**< INTEN_CONT_DONE Mask */ #define MXC_F_SPI_INTEN_TX_OV_POS 12 /**< INTEN_TX_OV Position */ #define MXC_F_SPI_INTEN_TX_OV ((uint32_t)(0x1UL << MXC_F_SPI_INTEN_TX_OV_POS)) /**< INTEN_TX_OV Mask */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/system_max32657.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/system_max32657.h index a0a5f81ca15..0a086a133b4 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/system_max32657.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/system_max32657.h @@ -84,6 +84,24 @@ void SystemInit(void); */ void SystemCoreClockUpdate(void); +#if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + * @brief This function is called in Secure code just before control + * is transferred to non-secure world. Only available when + * trustzone feature is used. + * + * You may over-ride this function in your program by defining a custom + * NonSecure_Init(), but care should be taken to reproduce the initialization + * steps to non-secure code. + * + * Caller must be aware of configuring MPC, SPC, and NSPC before this + * function is called. + * + * @return Should not return if successful. If Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int NonSecure_Init(void); +#endif + #ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/uart_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/uart_regs.h index 7b4b85265a4..831c2a57deb 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Include/uart_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Include/uart_regs.h @@ -162,12 +162,8 @@ typedef struct { #define MXC_F_UART_CTRL_CLK_SEL ((uint32_t)(0x3UL << MXC_F_UART_CTRL_CLK_SEL_POS)) /**< CTRL_CLK_SEL Mask */ #define MXC_V_UART_CTRL_CLK_SEL_PERIPHERAL_CLOCK ((uint32_t)0x0UL) /**< CTRL_CLK_SEL_PERIPHERAL_CLOCK Value */ #define MXC_S_UART_CTRL_CLK_SEL_PERIPHERAL_CLOCK (MXC_V_UART_CTRL_CLK_SEL_PERIPHERAL_CLOCK << MXC_F_UART_CTRL_CLK_SEL_POS) /**< CTRL_CLK_SEL_PERIPHERAL_CLOCK Setting */ -#define MXC_V_UART_CTRL_CLK_SEL_EXTERNAL_CLOCK ((uint32_t)0x1UL) /**< CTRL_CLK_SEL_EXTERNAL_CLOCK Value */ -#define MXC_S_UART_CTRL_CLK_SEL_EXTERNAL_CLOCK (MXC_V_UART_CTRL_CLK_SEL_EXTERNAL_CLOCK << MXC_F_UART_CTRL_CLK_SEL_POS) /**< CTRL_CLK_SEL_EXTERNAL_CLOCK Setting */ -#define MXC_V_UART_CTRL_CLK_SEL_CLK2 ((uint32_t)0x2UL) /**< CTRL_CLK_SEL_CLK2 Value */ -#define MXC_S_UART_CTRL_CLK_SEL_CLK2 (MXC_V_UART_CTRL_CLK_SEL_CLK2 << MXC_F_UART_CTRL_CLK_SEL_POS) /**< CTRL_CLK_SEL_CLK2 Setting */ -#define MXC_V_UART_CTRL_CLK_SEL_CLK3 ((uint32_t)0x3UL) /**< CTRL_CLK_SEL_CLK3 Value */ -#define MXC_S_UART_CTRL_CLK_SEL_CLK3 (MXC_V_UART_CTRL_CLK_SEL_CLK3 << MXC_F_UART_CTRL_CLK_SEL_POS) /**< CTRL_CLK_SEL_CLK3 Setting */ +#define MXC_V_UART_CTRL_CLK_SEL_CLK1 ((uint32_t)0x1UL) /**< CTRL_CLK_SEL_CLK1 Value */ +#define MXC_S_UART_CTRL_CLK_SEL_CLK1 (MXC_V_UART_CTRL_CLK_SEL_CLK1 << MXC_F_UART_CTRL_CLK_SEL_POS) /**< CTRL_CLK_SEL_CLK1 Setting */ #define MXC_F_UART_CTRL_CLK_RDY_POS 19 /**< CTRL_CLK_RDY Position */ #define MXC_F_UART_CTRL_CLK_RDY ((uint32_t)(0x1UL << MXC_F_UART_CTRL_CLK_RDY_POS)) /**< CTRL_CLK_RDY Mask */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657.ld b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657.ld index 7a02a14948e..f7895a805b6 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657.ld +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657.ld @@ -17,25 +17,12 @@ ******************************************************************************/ MEMORY { - ROM_S (rx) : ORIGIN = 0x00000000, LENGTH = 0x00010000 /* 64kB secure ROM (ROM always secure) */ - FLASH (rx) : ORIGIN = DEFINED(SECURE_LINK) ? 0x11000000 : 0x01000000, LENGTH = 0x00100000 /* 1MB Flash */ + FLASH (rx) : ORIGIN = 0x11000000, LENGTH = 0x00100000 /* 1MB Flash */ FLASH_INFO_S (rx) : ORIGIN = 0x12000000, LENGTH = 0x00010000 /* 16KB secure Flash Info */ - SRAM (rwx) : ORIGIN = DEFINED(SECURE_LINK) ? 0x30000000 : 0x20000000, LENGTH = 0x00040000 /* 256KB SRAM */ + SRAM (rwx) : ORIGIN = 0x30000000, LENGTH = 0x00040000 /* 256KB SRAM */ } -/* Note(JC): "SECURE_LINK" is a symbol defined at link-time by Libraries/CMSIS/Device/Maxim/GCC/gcc.mk - * It's only defined for when building secure binaries (which is the default). - * When it's defined, the FLASH and SRAM memory addresses will use the secure ranges. Otherwise, the - * non-secure ranges will be used. This mechanism allows secure and non-secure binaries to be linked - * without having to maintain a separate copy of the linkerfile. - */ SECTIONS { - .rom : - { - KEEP(*(.rom_vector)) - *(.rom_handlers*) - } > ROM_S - .text : { _text = .; @@ -65,45 +52,25 @@ SECTIONS { _etext = .; } > FLASH - - /* - * Secure Gatway (SG) veneers. - * All SG veneers are placed in the special output section .gnu.sgstubs. - */ - .gnu.sgstubs : - { - _sg_veneers = .; - *(.gnu.sgstubs*) - _esg_veneers = .; - } > FLASH - .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > FLASH - - .rom_code : - { - . = ALIGN(16); - _sran_code = .; - *(.rom_code_section) - _esran_code = .; - } > ROM_S .flash_code : { . = ALIGN(16); - _sran_code = .; + _flash_code = .; *(.flash_code_section) - _esran_code = .; + _eflash_code = .; } > FLASH .sram_code : { . = ALIGN(16); - _sran_code = .; + _sram_code = .; *(.sram_code_section) - _esran_code = .; + _esram_code = .; } > SRAM /* it's used for C++ exception handling */ @@ -155,18 +122,6 @@ SECTIONS { _ebss = ALIGN(., 4); } > SRAM - /** - * Stack Seal section is required for secure builds. Stack sealing protects - * secure stack from illegal access by non-secure code. - */ - .stackseal (COPY): - { - . = ALIGN(8); - __StackSeal = .; - . = . + 8; - . = ALIGN(8); - } > SRAM - /** * Set stack top to end of RAM, and stack limit move down by * size of stack_dummy section. @@ -182,7 +137,6 @@ SECTIONS { .stack_dummy (COPY): { KEEP(*(.stack*)) - *(.stackseal*) } > SRAM .heap (COPY): diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657.mk b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657.mk index 69ff32192f5..f238fb96075 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657.mk +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657.mk @@ -27,11 +27,7 @@ TARGET_LC:=max32657 # The build directory ifeq "$(BUILD_DIR)" "" -ifeq "$(RISCV_CORE)" "" BUILD_DIR=$(CURDIR)/build -else -BUILD_DIR=$(CURDIR)/buildrv -endif endif STARTUPFILE ?= startup_$(TARGET_LC).S @@ -82,9 +78,6 @@ endif ################################################################################ -# Default linkerfile -LINKERFILE ?= $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(TARGET_LC).ld - # Default entry-point ENTRY ?= Reset_Handler @@ -101,19 +94,129 @@ SRCS += heap.c SRCS += system_$(TARGET_LC).c endif +# Use proper linker files as a Secure-only vs Secure/Non-Secure-combined project. +ifeq "$(LINKERFILE)" "" + +ifeq ($(TRUSTZONE),1) + +ifeq ($(USE_CUSTOM_MEMORY_SETTINGS),1) + +ifeq "$(MSECURITY_MODE)" "SECURE" +LINKERFILE=$(abspath ${SECURE_CODE_DIR})/$(TARGET_LC)_s.ld +else # MSECURITY_MODE=NONSECURE +LINKERFILE=$(abspath ${NONSECURE_CODE_DIR})/$(TARGET_LC)_ns.ld +endif # MSECURITY_MODE + +else # USE_CUSTOM_MEMORY_SETTINGS=0 + +ifeq "$(MSECURITY_MODE)" "SECURE" +LINKERFILE=$(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(TARGET_LC)_s.ld +else # MSECURITY_MODE=NONSECURE +LINKERFILE=$(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(TARGET_LC)_ns.ld +endif # MSECURITY_MODE + +endif # USE_CUSTOM_MEMORY_SETTINGS + +else # TRUSTZONE=0 + +# Default linkerfile +LINKERFILE ?= $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(TARGET_LC).ld + +endif # TRUSTZONE +endif # LINKERFILE + +################################################################################ +# Compile both Secure and Non-Secure projects and link them into a combined +# image. +# Configuration Variables: +# - TRUSTZONE : Set to 1 to build and combine both Secure and Non-Secure projects. +# - MSECURITY_MODE : Set the security context of the project. +################################################################################ +ifeq ($(TRUSTZONE),1) + +# Project-owner must set these variables in project.mk +# Absolute paths will be used when these are used. +NONSECURE_CODE_DIR ?= $(CMSIS_ROOT)/../../Examples/$(TARGET_UC)/Hello_World_TZ/NonSecure +SECURE_CODE_DIR ?= $(CMSIS_ROOT)/../../Examples/$(TARGET_UC)/Hello_World_TZ/Secure + +ifeq "$(MSECURITY_MODE)" "SECURE" +ifeq "$(GEN_CMSE_IMPLIB_OBJ)" "" + +LOADER_ASM := $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/nonsecure_load.S + +# Build the Secure and Non-Secure project inside of the Secure project so that +# "make clean" will catch it automatically. +NONSECURE_BUILD_DIR := $(CURDIR)/build/build_ns +SECURE_BUILD_DIR := $(CURDIR)/build/build_s + +# Binary name for Non-Secure code. +NONSECURE_CODE_BIN = $(NONSECURE_BUILD_DIR)/nonsecure.bin +NONSECURE_CODE_OBJ = $(NONSECURE_BUILD_DIR)/nonsecure.o + +# CMSE object file needed for non-secure builds - contains the Non-Secure Callable +# symbols with empty definitions at right locations +SECURE_IMPLIB_OBJ := $(SECURE_BUILD_DIR)/secure_implib.o + +# Add the Non-Secure project object to the build. This is the critical +# line that will get the linker to bring it into the .elf file. +PROJ_OBJS = ${NONSECURE_CODE_OBJ} + +.PHONY: secure_implib_obj +secure_implib_obj: + @echo "" + @echo "****************************************************************************" + @echo "* Generate the CMSE importlib object file with empty definitions of" + @echo "* Secure symbols at the correct locations." + @echo "*" + @echo "* The generated CMSE importlib object file needs to be linked with" + @echo "* Non-Secure Code image." + @echo "****************************************************************************" + $(MAKE) -C ${SECURE_CODE_DIR} BUILD_DIR=$(SECURE_BUILD_DIR) PROJECT=secure GEN_CMSE_IMPLIB_OBJ=1 + +# Build non-secure code when secure code is updated (dependent on generated +# CMSE implib.o file). +$(NONSECURE_CODE_BIN): secure_implib_obj + @echo "" + @echo "****************************************************************************" + @echo "* Building Non-Secure Code with generated CMSE importlib object file." + @echo "****************************************************************************" + $(MAKE) -C ${NONSECURE_CODE_DIR} BUILD_DIR=$(NONSECURE_BUILD_DIR) PROJECT=nonsecure NS_FLASH_START=$(NS_FLASH_START) NS_FLASH_SIZE=$(NS_FLASH_SIZE) NS_SRAM_START=$(NS_SRAM_START) NS_SRAM_SIZE=$(NS_SRAM_SIZE) + $(MAKE) -C ${NONSECURE_CODE_DIR} BUILD_DIR=$(NONSECURE_BUILD_DIR) $(NONSECURE_CODE_BIN) + @echo "" + @echo "****************************************************************************" + @echo "* Linking Secure and Non-Secure images together." + @echo "****************************************************************************" + +${NONSECURE_CODE_OBJ}: $(LOADER_ASM) ${NONSECURE_CODE_BIN} + @${CC} ${AFLAGS} -o ${@} -c $(LOADER_ASM) + +endif # GEN_CMSE_IMPLIB_OBJ +endif # MSECURITY_MODE + +ifeq "$(MSECURITY_MODE)" "NONSECURE" +SECURE_BUILD_DIR := $(CURDIR)/../Secure/build/build_s +SECURE_IMPLIB_OBJ := $(SECURE_BUILD_DIR)/secure_implib.o + +PROJ_OBJS += $(SECURE_IMPLIB_OBJ) + +endif # MSECURITY_MODE +endif # TRUSTZONE + +################################################################################ + # Add target specific CMSIS source directories -VPATH+=$(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC -VPATH+=$(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +VPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source # Add target specific CMSIS include directories -IPATH+=$(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Include +IPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Include # Add CMSIS Core files CMSIS_VER ?= 5.9.0 -IPATH+=$(CMSIS_ROOT)/$(CMSIS_VER)/Core/Include +IPATH += $(CMSIS_ROOT)/$(CMSIS_VER)/Core/Include # Add directory with linker include file -LIBPATH+=$(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC +LIBPATH += $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC # Set target architecture MCPU := cortex-m33 @@ -127,5 +230,8 @@ MFPU := fpv5-sp-d16 # Include the rules and goals for building include $(CMSIS_ROOT)/Device/Maxim/GCC/gcc.mk +# Include memory definitions +include $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/$(TARGET_LC)_memory.mk + # Include rules for flashing include $(CMSIS_ROOT)/../../Tools/Flash/flash.mk diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_memory.mk b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_memory.mk new file mode 100644 index 00000000000..f61c318469a --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_memory.mk @@ -0,0 +1,301 @@ +############################################################################### + # + # Copyright (C) 2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +# This file helps set up the memory settings for the project. +# Due to the nature of TrustZone, this was added to help +# project-owners conveniently set up their project's memory +# settings in their project.mk file to meet their application +# requirements without having to go into multiple files: +# - {device}.h +# - linker files +# - partition_{device}.h +# +# Of course, at the cost of more overhead. + +# Physical Memory Settings +PHY_FLASH_START ?= 0x01000000 +PHY_FLASH_SIZE ?= 0x00100000 # 1MiB + +PHY_SRAM_START ?= 0x20000000 +PHY_SRAM_SIZE ?= 0x00040000 # 256KiB + +############################################################################### +# Required arguments that user must set in project.mk if they choose to +# use their own memory settings. +# + +USE_CUSTOM_MEMORY_SETTINGS ?= 0 + +# These four are required if USE_CUSTOM_MEMORY_SETTING is set to 1. +# The sum of the Flash region sizes must equal +# the total physical Flash size (1MiB). +S_FLASH_SIZE ?= 0x00080000 # Secure Region default: 512KiB +NS_FLASH_SIZE ?= 0x00080000 # Non-Secure Region default: 512KiB + +# The sum of the SRAM region sizes must equal +# the total physical SRAM size (256KiB). +S_SRAM_SIZE ?= 0x00020000 # Secure Region default: 128KiB +NS_SRAM_SIZE ?= 0x00020000 # Non-Secure Region default: 128KiB + +# Sets which type of memory the main code executes from. +# Only possible options with this is: FLASH or SRAM. +EXECUTE_CODE_MEM ?= FLASH + +############################################################################### +# Optional add-on arguments that the user can set in project.mk +# for finer memory control if USE_CUSTOM_MEMORY_SETTINGS is set to 1. +# +# Extra overhead, but this is setup so the project-owners can just set up +# the sizes, if they don't need this much control with memory +# +# The project-owner does not have to set these arguments if they choose +# not to; however, if one of these are set, then they ALL must be set. +# +# The integer arguments are set to 0 by default, so the setup_memory_tz.py +# script knows if the user has updates these settings or not. +# + +S_FLASH_START ?= 0 +NS_FLASH_START ?= 0 + +S_SRAM_START ?= 0 +NS_SRAM_START ?= 0 + +# Size of Non-Secure Callable Region. +# This region will be placed at the end of the Secure Region. +# Which Secure Region memory type (Flash or SRAM) the NSC +# will be in is determined by EXECUTE_CODE_MEM +# The NSC region is still considered part of the Secure Region. +# NSC_SIZE determines how much space of the Secure Region that +# the NSC region will use. +NSC_SIZE ?= 0 + +############################################################################### +# Generate linker scripts and partition_max32657.h if project-owner decides +# to use custom memory settings. +# +# +ifeq ($(TRUSTZONE),1) + +# This is added to prevent the script from running twice because the "Secure" +# project is re-built in order to generate the CMSE import library object file. +# The Secure project needs to fully build to generate the CMSE import +# library object file that Non-Secure code requires. +ifeq ($(GEN_CMSE_IMPLIB_OBJ),0) + +ifeq ($(USE_CUSTOM_MEMORY_SETTINGS),1) + +ifneq "$(PYTHON_CMD)" "none" + +# For formatting python script output. Do not change contents of this define!! +define NEWLINE + + +endef + +# This section was not placed in a recipe because the partition_max32657.h file needs to be +# generated/updated before the entired project builds. This is the order which +# TrustZone-enabled projects build: +# 1. Generate/Update Linker Scripts and partition_max32657.h +# 2. Compile the Secure project as the "Host" project, but do not call linker. +# That is done at the end. +# 3. Fully build the Secure project (compile AND link) individually to generate +# the CMSE import library object file required for Non-Secure Code. +# The CMSE import library object file is generated when the linker is called. +# 4. Compile the Non-Secure project as the "Target" project, and call the linker +# with the CMSE import library object file to create the Non-Secure code image. +# 5. Call the linker to combine the Secure and Non-Secure images together. +# +# Downside is that this script will be called when you run "make clean" when the project +# is set up to use custom memory settings. +TZ_SCRIPT = $(CMSIS_ROOT)/Device/Maxim/$(TARGET_UC)/Source/GCC/setup_memory_tz.py + +TZ_SCRIPT_ARGS = $(MAXIM_PATH) $(abspath $(SECURE_CODE_DIR)) $(abspath $(NONSECURE_CODE_DIR)) $(S_FLASH_SIZE) $(NS_FLASH_SIZE) $(S_SRAM_SIZE) $(NS_SRAM_SIZE) $(NSC_SIZE) $(S_FLASH_START) $(NS_FLASH_START) $(S_SRAM_START) $(NS_SRAM_START) $(EXECUTE_CODE_MEM) + +TZ_SCRIPT_OUTPUT := $(shell $(PYTHON_CMD) $(TZ_SCRIPT) $(TZ_SCRIPT_ARGS)) + +$(info $(subst > ,$(NEWLINE),$(TZ_SCRIPT_OUTPUT))) + +TZ_SCRIPT_ERROR = $(findstring ERROR,$(TZ_SCRIPT_OUTPUT)) +ifneq "$(TZ_SCRIPT_ERROR)" "" +$(error Error preparing linker scripts and partition_max32657.h file. Check memory settings in project.mk) +endif # TZ_SCRIPT_ERROR + +else # PYTHON_CMD +$(error $(PYTHON_CMD) No Python installation detected on your system! Could not auto-generate custom linker scripts. Please manually update the linker scripts) +endif # PYTHON_CMD + +endif # USE_CUSTOM_MEMORY_SETTINGS +endif # GEN_CMSE_IMPLIB_OBJ +endif # TRUSTZONE + +############################################################################### +# Setup Device Memory Settings (usually in max32657.h). +# + +# For secure/non-secure partitioned projects. +ifeq ($(TRUSTZONE),1) + +ifeq "$(MSECURITY_MODE)" "SECURE" + +ifeq ($(USE_CUSTOM_MEMORY_SETTINGS),1) +# After script is done, write the final memory settings to be used as definitions in your project. +# This is done afterwards so the script knows when to use default arguments (*_START variables). +# If default settings are used (no *_START variable is set in project.mk), then, like the TZ_SCRIPT +# the secure regions will start at the lower half of memory. +# Note, all *_START variables must be set by user (not default 0 value) or an error is thrown. +REGION_START_TOTAL = $(shell echo $$(( $(S_FLASH_START) + $(NS_FLASH_START) + $(S_SRAM_START) + $(NS_SRAM_START) ))) +ifeq ($(REGION_START_TOTAL),0) + +S_FLASH_START := $(shell echo $$(( $(PHY_FLASH_START) | (1<<28) ))) + +NS_FLASH_START := $(shell echo $$(( $(PHY_FLASH_START) + $(S_FLASH_SIZE) ))) + +S_SRAM_START := $(shell echo $$(( $(PHY_SRAM_START) | (1<<28) ))) + +NS_SRAM_START := $(shell echo $$(( $(PHY_SRAM_START) + $(S_SRAM_SIZE) ))) + +endif # REGION_START_TOTAL + +# If user configured all settings, then they should already be prepared to store in PROJ_CFLAGS. + +else # !USE_CUSTOM_MEMORY_SETTINGS (not configured by user.) + +# Do not use custom memory settings, use the default. +S_FLASH_START := $(shell echo $$(( $(PHY_FLASH_START) | (1<<28) ))) +S_FLASH_SIZE := $(shell echo $$(( $(PHY_FLASH_SIZE) / 2 ))) + +NS_FLASH_START := $(shell echo $$(( $(PHY_FLASH_START) + $(S_FLASH_SIZE) ))) +NS_FLASH_SIZE := $(shell echo $$(( $(PHY_FLASH_SIZE) / 2 ))) + +S_SRAM_START := $(shell echo $$(( $(PHY_SRAM_START) | (1<<28) ))) +S_SRAM_START := $(shell printf "0x%x" $(S_SRAM_START)) +S_SRAM_SIZE := $(shell echo $$(( $(PHY_SRAM_SIZE) / 2 ))) + +NS_SRAM_START := $(shell echo $$(( $(PHY_SRAM_START) + $(S_SRAM_SIZE) ))) +NS_SRAM_SIZE := $(shell echo $$(( $(PHY_SRAM_SIZE) / 2 ))) + +endif # USE_CUSTOM_MEMORY_SETTINGS + +# Prepare definitions to store in PROJ_CFLAGS. +S_FLASH_START := $(shell printf "0x%x" $(S_FLASH_START)) +S_FLASH_SIZE := $(shell printf "0x%x" $(S_FLASH_SIZE)) + +NS_FLASH_START := $(shell printf "0x%x" $(NS_FLASH_START)) +NS_FLASH_SIZE := $(shell printf "0x%x" $(NS_FLASH_SIZE)) + +S_SRAM_START := $(shell printf "0x%x" $(S_SRAM_START)) +S_SRAM_SIZE := $(shell printf "0x%x" $(S_SRAM_SIZE)) + +NS_SRAM_START := $(shell printf "0x%x" $(NS_SRAM_START)) +NS_SRAM_SIZE := $(shell printf "0x%x" $(NS_SRAM_SIZE)) + +# Set up definitions that will be used in max32657.h +__MXC_FLASH_MEM_BASE=$(S_FLASH_START) +__MXC_FLASH_MEM_SIZE=$(S_FLASH_SIZE) + +__MXC_SRAM_MEM_BASE=$(S_SRAM_START) +__MXC_SRAM_MEM_SIZE=$(S_SRAM_SIZE) + +# Secure code can have knowledge of Non-Secure regions. +__MXC_FLASH_NS_MEM_BASE=$(NS_FLASH_START) +__MXC_FLASH_NS_MEM_SIZE=$(NS_FLASH_SIZE) + +__MXC_SRAM_NS_MEM_BASE=$(NS_SRAM_START) +__MXC_SRAM_NS_MEM_SIZE=$(NS_SRAM_SIZE) + +# Set non-secure definitons for Secure code. +PROJ_CFLAGS += -D__MXC_FLASH_NS_MEM_BASE=$(__MXC_FLASH_NS_MEM_BASE) +PROJ_CFLAGS += -D__MXC_FLASH_NS_MEM_SIZE=$(__MXC_FLASH_NS_MEM_SIZE) + +PROJ_CFLAGS += -D__MXC_SRAM_NS_MEM_BASE=$(__MXC_SRAM_NS_MEM_BASE) +PROJ_CFLAGS += -D__MXC_SRAM_NS_MEM_SIZE=$(__MXC_SRAM_NS_MEM_SIZE) + +else # MSECURITY_MODE=NONSECURE + +# Formatting to hex for readability sake. +NS_FLASH_START := $(shell printf "0x%x" $(NS_FLASH_START)) +NS_FLASH_SIZE := $(shell printf "0x%x" $(NS_FLASH_SIZE)) + +NS_SRAM_START := $(shell printf "0x%x" $(NS_SRAM_START)) +NS_SRAM_SIZE := $(shell printf "0x%x" $(NS_SRAM_SIZE)) + +# Check max32657.mk +# When non-secure project builds, the "host" secure project passes in these +# variables (NS_*_START and NS_*_SIZE). +__MXC_FLASH_MEM_BASE=$(NS_FLASH_START) +__MXC_FLASH_MEM_SIZE=$(NS_FLASH_SIZE) + +__MXC_SRAM_MEM_BASE=$(NS_SRAM_START) +__MXC_SRAM_MEM_SIZE=$(NS_SRAM_SIZE) + +endif # MSECURITY_MODE + +else # TRUSTZONE disabled + +# bit 28 of address indicates the security access. +# 0: Non-Secure +# 1: Secure +# Default, startup state is Secure +__MXC_FLASH_MEM_BASE := $(shell echo $$(( $(PHY_FLASH_START) | (1<<28) ))) +__MXC_FLASH_MEM_BASE := $(shell printf "0x%x" $(__MXC_FLASH_MEM_BASE)) +__MXC_FLASH_MEM_SIZE := $(shell printf "0x%x" $(PHY_FLASH_SIZE)) + +__MXC_SRAM_MEM_BASE := $(shell echo $$(( $(PHY_SRAM_START) | (1<<28) ))) +__MXC_SRAM_MEM_BASE := $(shell printf "0x%x" $(__MXC_SRAM_MEM_BASE)) +__MXC_SRAM_MEM_SIZE := $(shell printf "0x%x" $(PHY_SRAM_SIZE)) + +endif + +# Set the definitions +PROJ_CFLAGS += -D__MXC_FLASH_MEM_BASE=$(__MXC_FLASH_MEM_BASE) +PROJ_CFLAGS += -D__MXC_FLASH_MEM_SIZE=$(__MXC_FLASH_MEM_SIZE) + +PROJ_CFLAGS += -D__MXC_SRAM_MEM_BASE=$(__MXC_SRAM_MEM_BASE) +PROJ_CFLAGS += -D__MXC_SRAM_MEM_SIZE=$(__MXC_SRAM_MEM_SIZE) + +# Should only be run from the host "Secure" project +.PHONY: debug_tz_mem_from_host_proj +debug_tz_mem_from_host_proj: + @echo + @echo 'debug_tz_mem_from_host_proj' only works from "Host" or "Secure" project. + @echo + @echo S_FLASH_START = ${S_FLASH_START} + @echo S_FLASH_SIZE = ${S_FLASH_SIZE} + @echo + @echo NS_FLASH_START = ${NS_FLASH_START} + @echo NS_FLASH_SIZE = ${NS_FLASH_SIZE} + @echo + @echo S_SRAM_START = ${S_SRAM_START} + @echo S_SRAM_SIZE = ${S_SRAM_SIZE} + @echo + @echo NS_SRAM_START = ${NS_SRAM_START} + @echo NS_SRAM_SIZE = ${NS_SRAM_SIZE} + @echo + @echo NSC_SIZE = ${NSC_SIZE} + @echo + @echo EXECUTE_CODE_MEM = ${EXECUTE_CODE_MEM} + @echo + @echo USE_CUSTOM_MEMORY_SETTINGS = ${USE_CUSTOM_MEMORY_SETTINGS} + @echo GEN_CMSE_IMPLIB_OBJ = ${GEN_CMSE_IMPLIB_OBJ} + @echo MSECURITY_MODE = ${MSECURITY_MODE} + @echo TRUSTZONE = ${TRUSTZONE} + @echo + @echo SECURE_CODE_DIR = $(abspath ${SECURE_CODE_DIR}) + @echo NONSECURE_CODE_DIR = $(abspath ${NONSECURE_CODE_DIR}) + @echo LINKERFILE = $(abspath $(LINKERFILE)) diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_ns.ld b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_ns.ld new file mode 100644 index 00000000000..5c6ce3c53d3 --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_ns.ld @@ -0,0 +1,164 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * 1MB Total Physical Flash Size + * 256KB Total Physical SRAM Size + * - SRAM0 (32KB) + * - SRAM1 (32KB) + * - SRAM2 (64KB) + * - SRAM3 (64KB) + * - SRAM4 (64KB) + */ + +ENTRY(Reset_Handler) + +MEMORY { + FLASH (rx) : ORIGIN = 0x01080000, LENGTH = 0x00080000 /* User-selected Non-Secure Flash settings */ + SRAM (rwx) : ORIGIN = 0x20020000, LENGTH = 0x00020000 /* User-selected Non-Secure SRAM settings */ +} + +SECTIONS { + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) /* Program code */ + *(.rodata*) /* read-only data: "const" */ + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + /* C++ Exception handling */ + KEEP(*(.eh_frame*)) + _etext = .; + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + .flash_code : + { + . = ALIGN(16); + _flash_code = .; + *(.flash_code_section) + _eflash_code = .; + } > FLASH + + .sram_code : + { + . = ALIGN(16); + _sram_code = .; + *(.sram_code_section) + _esram_code = .; + } > SRAM + + /* it's used for C++ exception handling */ + /* we need to keep this to avoid overlapping */ + .ARM.exidx : + { + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + __exidx_end = .; + } > FLASH + + .data : + { + _data = ALIGN(., 4); + *(vtable) + *(.data*) /*read-write initialized data: initialized global variable*/ + *(.flashprog*) /* Flash program */ + + /* These array sections are used by __libc_init_array to call static C++ constructors */ + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + _edata = ALIGN(., 4); + } > SRAM AT>FLASH + __load_data = LOADADDR(.data); + + .bss : + { + . = ALIGN(4); + _bss = .; + *(.bss*) /*read-write zero initialized data: uninitialzed global variable*/ + _ebss = ALIGN(., 4); + } > SRAM + + /** + * Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section. + */ + __StackTop = ORIGIN(SRAM) + LENGTH(SRAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + + /** + * .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later. + */ + .stack_dummy (COPY): + { + KEEP(*(.stack*)) + } > SRAM + + .heap (COPY): + { + . = ALIGN(4); + *(.heap*) + __HeapLimit = ABSOLUTE(__StackLimit); + } > SRAM + + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= _ebss, "region RAM overflowed with stack") +} diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_s.ld b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_s.ld new file mode 100644 index 00000000000..dcbd99f71ff --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_s.ld @@ -0,0 +1,199 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * 1MB Total Physical Flash Size + * 256KB Total Physical SRAM Size + * - SRAM0 (32KB) + * - SRAM1 (32KB) + * - SRAM2 (64KB) + * - SRAM3 (64KB) + * - SRAM4 (64KB) + */ + +MEMORY { + FLASH (rx) : ORIGIN = 0x11000000, LENGTH = 0x00078000 /* User-selected Secure Flash */ + FLASH_NS (rx) : ORIGIN = 0x01080000, LENGTH = 0x00080000 /* User-selected Non-Secure Flash */ + SRAM (rwx) : ORIGIN = 0x30000000, LENGTH = 0x00020000 /* User-selected Secure SRAM */ + SRAM_NS (rwx) : ORIGIN = 0x20020000, LENGTH = 0x00020000 /* User-selected Non-Secure SRAM */ + + NSC_REGION (rx) : ORIGIN = 0x11078000, LENGTH = 0x11078000 /* User-selected Non-Secure Callable Region */ +} + +SECTIONS { + .nonsecure_flash : + { + /* Non-Secure Code must be aligned with this memory's block size. */ + _nonsecure_start = ALIGN(., 0x8000); + KEEP(*nonsecure.o) /* Non-Secure program code */ + _nonsecure_end = ALIGN(., 0x8000) - 1; /* -1 for last accessible address, not start of next block */ + } > FLASH_NS + + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) /* Program code */ + *(.rodata*) /* read-only data: "const" */ + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + /* C++ Exception handling */ + KEEP(*(.eh_frame*)) + _etext = .; + } > FLASH + + /* + * Secure Gatway (SG) veneers. + * All SG veneers are placed in the special output section .gnu.sgstubs. + * Must be placed in Non-Secure Callable Region. + */ + .gnu.sgstubs : + { + _sg_veneers = .; + *(.gnu.sgstubs*) + _esg_veneers = .; + } > NSC_REGION + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + .flash_code : + { + . = ALIGN(16); + _flash_code = .; + *(.flash_code_section) + _eflash_code = .; + } > FLASH + + .sram_code : + { + . = ALIGN(16); + _sram_code = .; + *(.sram_code_section) + _esram_code = .; + } > SRAM + + /* it's used for C++ exception handling */ + /* we need to keep this to avoid overlapping */ + .ARM.exidx : + { + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + __exidx_end = .; + } > FLASH + + .data : + { + _data = ALIGN(., 4); + *(vtable) + *(.data*) /* read-write initialized data: initialized global variable */ + *(.flashprog*) /* Flash program */ + + /* These array sections are used by __libc_init_array to call static C++ constructors */ + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + _edata = ALIGN(., 4); + } > SRAM AT>FLASH + __load_data = LOADADDR(.data); + + .bss : + { + . = ALIGN(4); + _bss = .; + *(.bss*) /* read-write zero initialized data: uninitialzed global variable */ + _ebss = ALIGN(., 4); + } > SRAM + + /** + * Stack Seal section is required for secure builds. Stack sealing protects + * secure stack from illegal access by non-secure code. + */ + .stackseal (COPY): + { + . = ALIGN(8); + __StackSeal = .; + . = . + 8; + . = ALIGN(8); + } > SRAM + + /** + * Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section. + */ + __StackTop = ORIGIN(SRAM) + LENGTH(SRAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + + /** + * .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later. + */ + .stack_dummy (COPY): + { + KEEP(*(.stack*)) + KEEP(*(.stackseal*)) + } > SRAM + + .heap (COPY): + { + . = ALIGN(4); + *(.heap*) + __HeapLimit = ABSOLUTE(__StackLimit); + } > SRAM + + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= _ebss, "region RAM overflowed with stack") +} diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_sla.ld b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_sla.ld new file mode 100644 index 00000000000..8712c0220ae --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/max32657_sla.ld @@ -0,0 +1,183 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +MEMORY { + FLASH (rx) : ORIGIN = 0x11000000, LENGTH = 0x00080000 /* 1MB Flash */ + FLASH_INFO_S (rx) : ORIGIN = 0x12000000, LENGTH = 0x00010000 /* 16KB secure Flash Info */ + SRAM (rwx) : ORIGIN = 0x30000000, LENGTH = 0x00040000 /* 256KB SRAM */ +} + +SECTIONS { + .text : + { + _text = .; + KEEP(*(.isr_vector)) + . = ALIGN(1024); /* Authentication header is 1024 byte aligned. */ + KEEP(*(.sla_header)) /* authentication header */ + *(.text*) /* Program code */ + *(.rodata*) /* read-only data: "const" */ + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + /* C++ Exception handling */ + KEEP(*(.eh_frame*)) + _etext = .; + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + .flash_code : + { + . = ALIGN(16); + _flash_code = .; + *(.flash_code_section) + _eflash_code = .; + } > FLASH + + .sram_code : + { + . = ALIGN(16); + _sram_code = .; + *(.sram_code_section) + _esram_code = .; + } > SRAM + + /* it's used for C++ exception handling */ + /* we need to keep this to avoid overlapping */ + .ARM.exidx : + { + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + __exidx_end = .; + } > FLASH + + .data : + { + _data = ALIGN(., 4); + *(vtable) + *(.data*) /*read-write initialized data: initialized global variable*/ + *(.flashprog*) /* Flash program */ + + /* These array sections are used by __libc_init_array to call static C++ constructors */ + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + _edata = ALIGN(., 4); + } > SRAM AT>FLASH + __load_data = LOADADDR(.data); + + .bss : + { + . = ALIGN(4); + _bss = .; + *(.bss*) /*read-write zero initialized data: uninitialzed global variable*/ + _ebss = ALIGN(., 4); + } > SRAM + + /** + * Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section. + */ + __StackTop = ORIGIN(SRAM) + LENGTH(SRAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + + /** + * .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later. + */ + .stack_dummy (COPY): + { + KEEP(*(.stack*)) + } > SRAM + + .heap (COPY): + { + . = ALIGN(4); + *(.heap*) + __HeapLimit = ABSOLUTE(__StackLimit); + } > SRAM + + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= _ebss, "region RAM overflowed with stack") + + /* End of flash image. */ + /* This segment is required during the signing operation to + * enforce any padding in previous FLASH segments. + * When using objdump -R .sig, the .sig section is excluded, but + * also any padding from the previous section is ignored. + */ + .end_of_flash_image : + { + FILL(0xFF) + KEEP(*(.end_of_flash_image)) + /* End marker. */ + LONG(0x55AA55AA); + _application_end = .; + } > FLASH + + /* ECDSA256 Signature Section. */ + .sig : + { + /* End of flash image. Beginning of signature. */ + KEEP(*(.sig)) + /* Placeholder value to be replaced after signature operation. */ + LONG(0x55502A2A); + LONG(0x49532054); + LONG(0x45482047); + LONG(0x2A2A4552); + } > FLASH + +} diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/nonsecure_load.S b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/nonsecure_load.S new file mode 100644 index 00000000000..c373667dc7f --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/nonsecure_load.S @@ -0,0 +1,27 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +.section .nonsecure_flash + +/* Include the non-secure binary file, include global symbols we can use at link time */ +_binary_nonsecure_bin_start: +.incbin "build/build_ns/nonsecure.bin" +_binary_nonsecure_bin_end: + +.globl _binary_nonsecure_bin_start +.globl _binary_nonsecure_bin_end diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/setup_memory_tz.py b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/setup_memory_tz.py new file mode 100644 index 00000000000..e7ef4f5dcfa --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/setup_memory_tz.py @@ -0,0 +1,731 @@ +############################################################################### + # + # Copyright (C) 2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + + +# This script 1) allows the user to select their memory settings for their +# Secure & Non-Secure projects (TrustZone) in their project.mk file, +# and 2) it will generate the appropriate linker scripts and +# partion_{device}.h file into their project directory. +# +# This script is not run by the users, but a part of the MSDK build system. + +# NOTE: This script was written with minimal dependencies to libraries that +# customers have to install. If future support is added, try not to add +# libraries that are not default to a simple python install. Users should +# expect to install the MSDK and not have to install any additional +# components. +# + +import sys +import argparse +import re +import shutil +import os + + +# Notes for future maintainers: +# 1. Each print statement starts with "> " to help format the output +# in the build system {device}_memory.mk + +############################################################################### +# +# SDK MAINTAINER MUST EDIT THIS SECTION FOR EACH PART. +# +############################################################################### +# +# Setup device's default physical memory definitons. +# +# Note for the MAX32657 (ME30), bit 28 of an address indicates the security +# status. Clear this bit to get the physical address. Use the virtual +# address during development. +# address[28] = 1 -Secure +# address[28] = 0 -Non-Secure +# +# Too many definitions to make th +# +################################################################################ + +TARGET = "MAX32657" + +# Flash Settings. +PHY_FLASH_INST_NUM = 1 + +# Total Flash. +PHY_FLASH_BASE = 0x01000000 +PHY_FLASH_SIZE = 0x00100000 + +# Individual Flash. +# Adding to support future parts that could potentially have more than +# one Flash region. +PHY_FLASH_BASE_INST = [ + 0x01000000 # Flash 0 +] + +PHY_FLASH_SIZE_INST = [ + 0x00100000 # Flash 0 - 1MiB +] + +# Memory Protection Controller (MPC) Flash Block Size. +# This variable is setup this way for future compatibility +# because each Memory Region has its own MPC, and each +# MPC can potentially have varying block sizes (though +# unlikely). +MPC_FLASH_BLOCK_SIZE = [ + 0x00008000 # MPC Flash 0 Block Size (32KiB) +] + +# SRAM Settings. +PHY_SRAM_INST_NUM = 5 + +# Total SRAM. +PHY_SRAM_BASE = 0x20000000 +PHY_SRAM_SIZE = 0x00040000 + +# Individual SRAM. +PHY_SRAM_BASE_INST = [ + 0x20000000, # SRAM0 + 0x20008000, # SRAM1 + 0x20010000, # SRAM2 + 0x20020000, # SRAM3 + 0x20030000 # SRAM4 +] + +PHY_SRAM_SIZE_INST = [ + 0x00008000, # SRAM0 - 32KiB + 0x00008000, # SRAM1 - 32KiB + 0x00010000, # SRAM2 - 64KiB + 0x00010000, # SRAM3 - 64KiB + 0x00010000 # SRAM4 - 64KiB +] + +# Memory Protection Controller (MPC) SRAM Block Size. +# This variable is setup this way for future compatibility +# because each Memory Region has its own MPC, and each +# MPC can potentially have varying block sizes (though +# unlikely). +# At the time this was written (MAX32657), the SRAM MPCs all +# had the same block sizes. +MPC_SRAM_BLOCK_SIZE = [ + 0x00001000, # MPC SRAM0 Block Size (4KiB) + 0x00001000, # MPC SRAM1 Block Size (4KiB) + 0x00001000, # MPC SRAM2 Block Size (4KiB) + 0x00001000, # MPC SRAM3 Block Size (4KiB) + 0x00001000 # MPC SRAM4 Block Size (4KiB) +] + +# Location of template linker scripts from MAXIM_PATH environment variable. +SECURE_PARTITION_TEMPLATE_PATH = f"Libraries/CMSIS/Device/Maxim/{TARGET.upper()}/Source/Template/partition_max32657.h" +SECURE_LINKER_TEMPLATE_PATH = f"Libraries/CMSIS/Device/Maxim/{TARGET.upper()}/Source/Template/max32657_s.ld" +NONSECURE_LINKER_TEMPLATE_PATH = f"Libraries/CMSIS/Device/Maxim/{TARGET.upper()}/Source/Template/max32657_ns.ld" + +############################################################################### + +# Dictionary for conversions to bytes. Use lower case to make +# parsing easier since we're using binary prefixes. +# SI prefixes treated as binary prefixes. +units_byte_conversions = { + 'b': 1, + 'kb': 1024, + 'kib': 1024, + 'mb': 1024*1024, + 'mib': 1024*1024, + # Add more if needed. +} + +def string_to_integer_bytes(string_hex_or_units): + try: + number_bytes = int(string_hex_or_units, 16) + return number_bytes + except ValueError: + # Consistent with conversion dictionary. + string_units = string_hex_or_units.lower() + + # Shouldn't happen, but remove spaces just in case since + # string should be a number with units (32KB, 64B, 1MB). + string_units = string_units.replace(" ", "") + + # Find location of last number before units begin. + for i, char in enumerate(string_units): + if not char.isdigit(): + break + + number = int(string_units[:i]) + units = string_units[i:] + + # Defaults conversion factor to bytes if unit was not specified. + byte_conversion_factor = units_byte_conversions.get(units, 1) + + number_bytes = number * byte_conversion_factor + + return number_bytes + +def subtract_kib_string_units(big_int, small_int): + # Shouldn't happen, but remove spaces just in case since + # string should be a number with units (32KB, 64B, 1MB). + big_int = big_int.replace(" ", "") + small_int = small_int.replace(" ", "") + + # Find location of last number before units begin. + for i, char in enumerate(big_int): + if not char.isdigit(): + break + + for j, char in enumerate(small_int): + if not char.isdigit(): + break + + big = int(big_int[:i]) + big_units = big_int[i:] + + small = int(small_int[:j]) + small_units = small_int[j:] + + if big_units != small_units: + return "Subtraction Error" + + result = big - small + + result = str(result) + big_units + + return result + +def remove_decimal_0_from_number_string(number: str): + if "." in number: + return number.rstrip('0').rstrip('.') + else: + # do nothing + return number + +def integer_bytes_to_string_KiB(integer_bytes): + integer_bytes /= units_byte_conversions.get('kib') + + string_KiB = remove_decimal_0_from_number_string(str(integer_bytes)) + "KiB" + + return string_KiB + +############################################################################### + +class MemorySettings: + # Constructor. + def __init__(self, type: str, # Type of memory. Two string options: FLASH or SRAM) + num_instances: int, # Number of memory instances. + starts: list, sizes: list, # For array of individual memory instance settings. + mpc_blk_sizes: list, # block sizes for each MPC that is paired with each instance. + execute_code_here: bool # Execute code from this memory type. + ): + self.type = type.upper() + self.instances = num_instances + self.execute_code_here = execute_code_here + + # Size of entire physical memory region. + self.phy_size = 0x00000000 + + # Ensure physical addresses are used by clearing bit 28 (security state alias + # bit) and get total physical size. + for i in range(num_instances): + starts[i] &= ~(1<<28) + self.phy_size += sizes[i] + + # Verify user-configure settings match physical memory constraints above. + if type.upper() == "FLASH": + if self.phy_size != PHY_FLASH_SIZE: + print(f"> [ERROR]: Memory Regions in FLASH must total to '{PHY_FLASH_SIZE}'") + sys.exit(1) + if type.upper() == "SRAM": + if self.phy_size != PHY_SRAM_SIZE: + print(f"> [ERROR]: Memory Regions in SRAM must total to '{PHY_SRAM_SIZE}'") + sys.exit(1) + + # Starting address of entire physical memory region. + # Region 0 is first instance, so use that for starting + # address of physical memory. + self.phy_start = starts[0] + + # Attributes for phyiscal memory settings. + self.phy_inst_starts = starts + self.phy_inst_sizes = sizes + self.mpc_inst_blk_sizes = mpc_blk_sizes + + # Attributes for Project-defined Memory Regions (arguments of this script). + self.are_regions_set = False + self.s_start = None # Secure Region. + self.s_size = None + self.ns_start = None # Non-Secure Region. + self.ns_size = None + self.nsc_size = None # Non-Secure Callable Region. + self.nsc_region_present = False + + def __get_mem_inst(self, address): + for inst in range(self.instances): + if address in range(self.phy_inst_starts[inst], self.phy_inst_starts[inst] + self.phy_inst_sizes[inst]): + return inst + + # Only for private use, checks region is aligned to MPC block size. + # Doesn't do anything if regions aren't set (setRegions method). + # This method checks whether the "Non-Secure" region shares the same block as the + # "Secure/Non-Secure Callable" regions. The "Secure/Non-Secure Callable" regions + # are consided secure type for the MPC. + # + # Return: True if everything is aligned, False if not. + def __check_region_alignment_to_mpc(self): + if self.are_regions_set: + starts = [] + sizes = [] + + # Use physical addressing for arithmetic. + s_start = self.s_start & ~(1<<28) + ns_start = self.ns_start & ~(1<<28) + + starts.append(s_start) + sizes.append(self.total_s_nsc_size) # S and NSC regions are combined (if NSC region exists in this memory type). + starts.append(ns_start) + sizes.append(self.ns_size) + + mpc_regions = {starts[i]: sizes[i] for i in range(len(starts))} + + # For easier allocation, order the regions from least to greatest starting addresses. + # Note, by nature, dictionaries are not sorted. + sorted_mpc_regions = dict(sorted(mpc_regions.items())) + + # First region is always expected to start at beginning of physical memory due to constructor + # checking if all of memory was used. + # For loop and logic below exists for future parts in case more than 2 SAU regions are available + # in this memory type. + for curr_start, curr_size in sorted_mpc_regions.items(): + # Don't go to first element since we're comparing the current and previous region. + if curr_start != list(sorted_mpc_regions.keys())[0]: + # Make sure the curr and prev regions aren't secure and non-secure callable regions since + # to the MPC, they're both considered as secure and can be ignored with this check. + if self.is_nonsecurecall_present: + # If current and previous region is either non-secure, then do the MPC block check. + if prev_start == ns_start or curr_start == ns_start: + # Save the border between secure and nonsecure regions. + prev_region_end_mem_inst = self.__get_mem_inst(prev_start + prev_size - 1) # -1 for index starting 0. + curr_region_start_mem_inst = self.__get_mem_inst(curr_start) + else: + # Save current region before proceeding to next iteration. + prev_start = curr_start + prev_size = prev_size + continue + + else: # Only two possible regions: NS and S, so a check must be done. + prev_region_end_mem_inst = self.__get_mem_inst(prev_start + prev_size - 1) # -1 for index starting 0. + curr_region_start_mem_inst = self.__get_mem_inst(curr_start) + + # If it reaches here, then there is a Non-Secure/Secure boundary that must be checked. + # Region 0 and Region 1 share the same memory instance. There's a chance they could share + # the same block which is not possible with the granularity of the MPC blocks. + if prev_region_end_mem_inst == curr_region_start_mem_inst: + # Check MPC alignment. + block, remainder = divmod(self.phy_inst_sizes[curr_region_start_mem_inst] - curr_start, self.mpc_inst_blk_sizes[curr_region_start_mem_inst]) + + if remainder != 0: + MPC_BLK_SIZE = integer_bytes_to_string_KiB(self.mpc_inst_blk_sizes[curr_region_start_mem_inst]) + print(f"> [ERROR]: Incorrect '{self.type}' Memory Region Alignment. The memory regions must be aligned with the corresponding '{self.type}' Memory Protection Controller (MPC) Block Size: '{MPC_BLK_SIZE}'") + sys.exit(1) + + # Save current region before proceeding to next iteration. + prev_start = curr_start + prev_size = curr_size + + # Set up Security regions. + def setRegions(self, secure_start, secure_size, + nonsecure_start, nonsecure_size, + nonsecurecall_start, nonsecurecall_size, is_nonsecurecall_present): + + # Constructor only checks for physical memory constraints. + # This checks for user configured memory settings. + starting_region_start = min(secure_start & ~(1<<28), nonsecure_start) + if (starting_region_start) != self.phy_start: + # Save bit 28 state for error message + if (secure_start & ~(1<<28)) == starting_region_start: + bit28_security = (1 << 28) + else: + bit28_security = 0 + + print(f"> [ERROR]: Lowest Memory Region does not start at the beginning of '{self.type}': '{hex(self.phy_start | bit28_security)}'") + sys.exit(1) + + self.s_start = secure_start + self.s_size = secure_size + self.ns_start = nonsecure_start + self.ns_size = nonsecure_size + + self.are_regions_set = True + self.is_nonsecurecall_present = is_nonsecurecall_present + + # The NSC region is a subset of the Secure region. Treat it holistically - if NSC is present in this memory type. + self.total_s_nsc_size = secure_size + + # Leave as default (None) set by constructor if NSC region not present in this memory type. + if is_nonsecurecall_present: + self.nsc_start = nonsecurecall_start + self.nsc_size = nonsecurecall_size + self.total_s_size = secure_size + nonsecurecall_size + + self.__check_region_alignment_to_mpc() + + +############################################################################### +# +# Instantiate the argument parser. +# + +program_description = '''Generates the linker scripts and partiton_{device}.h with +project-defined memory settings. + +NOTE: This script uses binary prefix notation for units when not used by build system +For example: Kilobytes (KB) will be treated as Kibibytes (KiB). + +Note: All these arguments will be set with default values according to the {device}.mk file. +If any of these values deviate from the default values (typically '0'), then this +script will assume it was changed by the project-owner. +''' + +parser = argparse.ArgumentParser(description=program_description) + +# Add required arguments. +parser.add_argument('maxim_path', type=str, help=f'Path to MSDK.') +parser.add_argument('secure_proj_path', type=str, help=f'Path to secure project to store generated secure linker script and partition_{TARGET.lower()}.h.') +parser.add_argument('nonsecure_proj_path', type=str, help='Path to non-secure project to store generated non-secure linker script.') +parser.add_argument('secure_flash_size', + type=str, + help='Size of Secure Flash as a hexadecimal.') +parser.add_argument('nonsecure_flash_size', + type=str, + help='Size of Non-Secure Flash as a hexadecimal.') +parser.add_argument('secure_sram_size', + type=str, + help='Size of Secure SRAM as a hexadecimal.') +parser.add_argument('nonsecure_sram_size', + type=str, + help='Size of Non-Secure SRAM as a hexadecimal.') + +# Add option positional arguments if user wants more fine-grain control. +parser.add_argument('nonsecurecall_region_size', + type=str, + help='Size of Non-Secure Callable Region as a hexadecimal.') +parser.add_argument('secure_flash_start', + type=str, + help='Starting address of Secure Flash as a hexadecimal.') +parser.add_argument('nonsecure_flash_start', + type=str, + help='Starting address of Non-Secure Flashas a hexadecimal.') +parser.add_argument('secure_sram_start', + type=str, + help='Starting address of Secure SRAM as a hexadecimal.') +parser.add_argument('nonsecure_sram_start', + type=str, + help='Starting address of Non-Secure SRAM as a hexadecimal.') +parser.add_argument('execute_code_mem', + type=str, + help='Execute code from Flash or SRAM. Two possible options: "FLASH" or "SRAM"', + default="FLASH") + +# Parse incoming arguments. +args = parser.parse_args() + +############################################################################### +# +# Format console output. +# +print(f"> ****************************************************************************") +print(f"> * Project-owner is using custom memory settings set in project.mk:") +print(f"> * USE_CUSTOM_MEMORY_SETTINGS=1") +print(f"> *") +print(f"> * Preparing (generate/update) Linker Scripts and partition_{TARGET.lower()}.h") +print(f"> * file with user-configured memory settings in project.mk") +print(f"> ****************************************************************************") + + +############################################################################### +# +# Check arguments and set up memory settings required for generated files. +# +# Prepare sizes for easier calculation checks. +# + +# Required arguments +SECURE_FLASH_SIZE = string_to_integer_bytes(args.secure_flash_size) +NONSECURE_FLASH_SIZE = string_to_integer_bytes(args.nonsecure_flash_size) +SECURE_SRAM_SIZE = string_to_integer_bytes(args.secure_sram_size) +NONSECURE_SRAM_SIZE = string_to_integer_bytes(args.nonsecure_sram_size) + +# If one memory start argument was set (not '0'), then all of them must be set. +start_check = [string_to_integer_bytes(args.secure_flash_start), string_to_integer_bytes(args.nonsecure_flash_start), string_to_integer_bytes(args.secure_sram_start), string_to_integer_bytes(args.nonsecure_sram_start)] +check_flag = 0 +for start in start_check: + if start != 0: + check_flag += 1 + +if check_flag != 0 and check_flag != len(start_check): + print(f"> [ERROR]: All the starting addresses of Secure/Non-Secure regions must be set by developer in project.mk: S_FLASH_START, NS_FLASH_START, S_SRAM_START, NS_SRAM_START") + sys.exit(1) + +# Save starting adddresses of each region. +if check_flag != 0: + SECURE_FLASH_START = string_to_integer_bytes(args.secure_flash_start) + NONSECURE_FLASH_START = string_to_integer_bytes(args.nonsecure_flash_start) + SECURE_SRAM_START = string_to_integer_bytes(args.secure_sram_start) + NONSECURE_SRAM_START = string_to_integer_bytes(args.nonsecure_sram_start) +else: + SECURE_FLASH_START = 0x11000000 # Will occupy Flash first with lower starting address. + NONSECURE_FLASH_START = (SECURE_FLASH_START + SECURE_FLASH_SIZE) & ~(1<<28) # Occupies second half of Flash. + SECURE_SRAM_START = 0x30000000 # Occupies SRAM0-2. + NONSECURE_SRAM_START = (SECURE_SRAM_START + SECURE_SRAM_SIZE) & ~(1<<28) # Occupies SRAM3-4. + +# Check memory constraints. +if (SECURE_FLASH_SIZE + NONSECURE_FLASH_SIZE) != PHY_FLASH_SIZE: + print(f"> [ERROR]: Total Secure and Non-Secure Flash Region sizes exceed entire physical Flash size: {integer_bytes_to_string_KiB(PHY_FLASH_SIZE)}") + sys.exit(1) + +if (SECURE_SRAM_SIZE + NONSECURE_SRAM_SIZE) != PHY_SRAM_SIZE: + print(f"> [ERROR]: Total Secure and Non-Secure SRAM Region sizes exceed entire physical SRAM size: {integer_bytes_to_string_KiB(PHY_SRAM_SIZE)}") + sys.exit(1) + +# Might be future support to select if NSC would be in same memory type as main code, +# but for now, they are lumped together. +EXECUTE_CODE_FROM_FLASH = False +IS_NSC_REGION_IN_FLASH = False +EXECUTE_CODE_FROM_SRAM = False +IS_NSC_REGION_IN_SRAM = False + +if args.execute_code_mem == "FLASH": + EXECUTE_CODE_FROM_FLASH = True + IS_NSC_REGION_IN_FLASH = True + print(f"> - Main code will execute from Flash.") + +elif args.execute_code_mem == "SRAM": + EXECUTE_CODE_FROM_SRAM = True + IS_NSC_REGION_IN_SRAM = True + print(f"> - Main code will execute from SRAM.") + +else: + print(f"> [ERROR]: EXECUTE_CODE_MEM not properly set. Possible options are: FLASH or SRAM") + sys.exit(1) + +# NSC Size. Check to see if project owner set the NSC size. +if string_to_integer_bytes(args.nonsecurecall_region_size) != 0: + NONSECURECALL_REGION_SIZE = string_to_integer_bytes(args.nonsecurecall_region_size) +else: # if not set by user, then set NSC region size to 8KiB. + NONSECURECALL_REGION_SIZE = string_to_integer_bytes("8KiB") + print(f"> - Size for Non-Secure Callable (NSC) Region was not set in project.mk: NSC_SIZE") + print(f"> - Defaulting size to 8KiB.") + +# NSC Region Information that users should be aware of. +NONSECURECALL_FLASH_START = 0 +NONSECURECALL_SRAM_START = 0 + +if args.execute_code_mem == "FLASH": + print(f"> - Placing NSC Region at the end of Secure Flash Region.") + print(f"> - Usable Secure Flash Region size is now {integer_bytes_to_string_KiB(NONSECURECALL_REGION_SIZE)} smaller.") + NONSECURECALL_FLASH_START = SECURE_FLASH_START + SECURE_FLASH_SIZE - NONSECURECALL_REGION_SIZE + SECURE_FLASH_SIZE = SECURE_FLASH_SIZE - NONSECURECALL_REGION_SIZE + +elif args.execute_code_mem == "SRAM": + print(f"> - Placing NSC Region at the end of Secure SRAM Region.") + print(f"> - Usable Secure SRAM Region size is now {integer_bytes_to_string_KiB(NONSECURECALL_REGION_SIZE)} smaller.") + NONSECURECALL_SRAM_START = SECURE_SRAM_START + SECURE_SRAM_SIZE - NONSECURECALL_REGION_SIZE + SECURE_SRAM_SIZE = SECURE_SRAM_SIZE - NONSECURECALL_REGION_SIZE + +############################################################################### +# +# Verify Flash and SRAM settings. +# + +FLASH = MemorySettings("FLASH", PHY_FLASH_INST_NUM, PHY_FLASH_BASE_INST, PHY_FLASH_SIZE_INST, MPC_FLASH_BLOCK_SIZE, EXECUTE_CODE_FROM_FLASH) + +SRAM = MemorySettings("SRAM", PHY_SRAM_INST_NUM, PHY_SRAM_BASE_INST, PHY_SRAM_SIZE_INST, MPC_SRAM_BLOCK_SIZE, EXECUTE_CODE_FROM_SRAM) + +NONSECURECALL_FLASH_SIZE = 0 +NONSECURECALL_SRAM_SIZE = 0 + +# If future support is added, set which type of memory NSC region is located. +# IS_NSC_REGION_IN_{Memory_Type} configured above. +# This section helps with setting up the memory objects. +if IS_NSC_REGION_IN_FLASH: + NONSECURECALL_FLASH_SIZE = NONSECURECALL_REGION_SIZE + NONSECURECALL_REGION_START = NONSECURECALL_FLASH_START +elif IS_NSC_REGION_IN_SRAM: + NONSECURECALL_SRAM_SIZE = NONSECURECALL_REGION_SIZE + NONSECURECALL_REGION_START = NONSECURECALL_SRAM_START +else: + # Should never reach here due to default settings. + print(f"> [ERROR]: Non-Secure Callable Region does not exist.") + sys.exit(1) + +# More checks happen in this method to make sure everything is aligned. +FLASH.setRegions(SECURE_FLASH_START, SECURE_FLASH_SIZE, NONSECURE_FLASH_START, NONSECURE_FLASH_SIZE, NONSECURECALL_FLASH_START, NONSECURECALL_FLASH_SIZE, IS_NSC_REGION_IN_FLASH) +SRAM.setRegions(SECURE_SRAM_START, SECURE_SRAM_SIZE, NONSECURE_SRAM_START, NONSECURE_SRAM_SIZE, NONSECURECALL_SRAM_START, NONSECURECALL_SRAM_SIZE, IS_NSC_REGION_IN_SRAM) + +############################################################################### +# +# Copy the template linker scripts/partion_{device}.h to their appropriate +# destinations and update them with updated memory settings. +# + +def copy_template(source, destination): + try: + shutil.copy(source, destination) + except FileNotFoundError: + print(f"> [ERROR]: File '{source}' not found.") + except PermissionError: + print(f"> [ERROR]: Permission denied. Unable to copy template file over.") + except Exception as e: + print(f"> [ERROR]: Exception: {e}") + +def replace_string_in_file(path_to_file, dictionary_strings): + with open(path_to_file, 'r') as file: + contents = file.read() + + for template_string, mem_setting in dictionary_strings.items(): + regex = re.compile(re.escape(template_string)) + contents = re.sub(regex, mem_setting, contents) + + with open(path_to_file, 'w') as file: + file.write(contents) + +try: + SECURE_PARTITION_PATH = os.path.abspath(f"{args.secure_proj_path}/partition_{TARGET.lower()}.h") + SECURE_LINKER_PATH = os.path.abspath(f"{args.secure_proj_path}/{TARGET.lower()}_s.ld") + NONSECURE_LINKER_PATH = os.path.abspath(f"{args.nonsecure_proj_path}/{TARGET.lower()}_ns.ld") + + # Check which files exists already. If none exists and there is an error, then + # remove them. + SECURE_PARTITION_ALREADY_EXISTED = False + if os.path.exists(SECURE_PARTITION_PATH): + SECURE_PARTITION_ALREADY_EXISTED = True + + SECURE_LINKER_ALREADY_EXISTED = False + if os.path.exists(SECURE_LINKER_PATH): + SECURE_LINKER_ALREADY_EXISTED = True + + NONSECURE_LINKER_ALREADY_EXISTED = False + if os.path.exists(NONSECURE_LINKER_PATH): + NONSECURE_LINKER_ALREADY_EXISTED = True + + SECURE_PARTITION_TEMPLATE_PATH = os.path.abspath(f"{args.maxim_path}/{SECURE_PARTITION_TEMPLATE_PATH}") + SECURE_LINKER_TEMPLATE_PATH = os.path.abspath(f"{args.maxim_path}/{SECURE_LINKER_TEMPLATE_PATH}") + NONSECURE_LINKER_TEMPLATE_PATH = os.path.abspath(f"{args.maxim_path}/{NONSECURE_LINKER_TEMPLATE_PATH}") + + copy_template(SECURE_PARTITION_TEMPLATE_PATH, SECURE_PARTITION_PATH) + copy_template(SECURE_LINKER_TEMPLATE_PATH, SECURE_LINKER_PATH) + copy_template(NONSECURE_LINKER_TEMPLATE_PATH, NONSECURE_LINKER_PATH) + + # Update memory settings. + regex_replace = { + # Secure Flash + r'$FLASH_ORIGIN_S$' : f"0x{FLASH.s_start:08x}", + r'$FLASH_END_S$' : f"0x{(FLASH.s_start + FLASH.s_size - 1):08x}", + r'$FLASH_SIZE_S$' : f"0x{FLASH.s_size:08x}", + + # Non-Secure Flash + r'$FLASH_ORIGIN_NS$': f"0x{FLASH.ns_start:08x}", + r'$FLASH_END_NS$' : f"0x{(FLASH.ns_start + FLASH.ns_size - 1):08x}", + r'$FLASH_SIZE_NS$' : f"0x{FLASH.ns_size:08x}", + + # Secure SRAM + r'$SRAM_ORIGIN_S$' : f"0x{SRAM.s_start:08x}", + r'$SRAM_END_S$' : f"0x{SRAM.s_start + SRAM.s_size - 1:08x}", + r'$SRAM_SIZE_S$' : f"0x{SRAM.s_size:08x}", + + # Non-Secure SRAM + r'$SRAM_ORIGIN_NS$' : f"0x{SRAM.ns_start:08x}", + r'$SRAM_END_NS$' : f"0x{(SRAM.ns_start + SRAM.ns_size - 1):08x}", + r'$SRAM_SIZE_NS$' : f"0x{SRAM.ns_size:08x}" + } + + # Mainly for linker script + if FLASH.is_nonsecurecall_present: + regex_replace[r'$MEM_ORIGIN_NSC$'] = f"0x{FLASH.nsc_start:08x}" + regex_replace[r'$MEM_SIZE_NSC$'] = f"0x{FLASH.nsc_start:08x}" + regex_replace[r'$perm$'] = f" (rx)" + regex_replace[r'$FLASH_END_S$'] = f"0x{(FLASH.s_start + FLASH.s_size + FLASH.nsc_size - 1):08x}" + elif SRAM.is_nonsecurecall_present: + regex_replace[r'$MEM_ORIGIN_NSC$'] = f"0x{SRAM.nsc_start:08x}" + regex_replace[r'$MEM_SIZE_NSC$'] = f"0x{SRAM.nsc_start:08x}" + regex_replace[r'$perm$'] = f"(rwx)" + regex_replace[r'$SRAM_END_S$'] = f"0x{SRAM.s_start + SRAM.s_size + SRAM.nsc_size - 1:08x}" + else: + raise ValueError("Unexpected problem with updating NSC regions in linker scripts.") + + # Mainly for linker script + if FLASH.execute_code_here: + regex_replace[r'$CODE_MEM_TYPE$'] = f"FLASH" + # NSC region at the end of FLASH for this string in the linkers + regex_replace[r'$MPC_BLOCK_SIZE$'] = f"0x{FLASH.mpc_inst_blk_sizes[-1]:x}" + elif SRAM.execute_code_here: + regex_replace[r'$MPC_BLOCK_SIZE$'] = f"FLASH" + # NSC region at the end of FLASH for this string in the linkers + regex_replace[r'$MPC_BLOCK_SIZE$'] = f"0x{SRAM.mpc_inst_blk_sizes[-1]:x}" + else: + raise ValueError("Unexpected problem with updating sections in linker scripts.") + + # Update templates + # Update partition file. + replace_string_in_file(SECURE_PARTITION_PATH, regex_replace) + + # Update secure linker script. + replace_string_in_file(SECURE_LINKER_PATH, regex_replace) + + # Update non-secure linker script. + replace_string_in_file(NONSECURE_LINKER_PATH, regex_replace) + +except ValueError as ve: + print(f"> [ERROR]: {ve}") +except Exception: + print(f"> [ERROR]: Failed to update templates.") + + # Remove files if they did not exist before. + if SECURE_PARTITION_ALREADY_EXISTED == False: + os.remove(SECURE_PARTITION_PATH) + if SECURE_LINKER_ALREADY_EXISTED == False: + os.remove(SECURE_LINKER_PATH) + if NONSECURE_LINKER_ALREADY_EXISTED == False: + os.remove(NONSECURE_LINKER_PATH) + + sys.exit(1) + +############################################################################### +# +# Print memory settings for user. +# + +if FLASH.is_nonsecurecall_present: + PRINT_NONSECURECALL_REGION_START = FLASH.nsc_start + PRINT_NONSECURECALL_REGION_SIZE = FLASH.nsc_size +elif SRAM.is_nonsecurecall_present: + PRINT_NONSECURECALL_REGION_START = SRAM.nsc_start + PRINT_NONSECURECALL_REGION_SIZE = SRAM.nsc_size + +print(f"> ----------------------------------------------------------------------------") +print(f"> Memory Settings") +print(f"> ----------------------------------------------------------------------------") +print(f"> Secure Flash Start (S_FLASH_START) : 0x{FLASH.s_start:08x}") +print(f"> Secure Flash Size (S_FLASH_SIZE) : 0x{FLASH.s_size:08x}") +print(f"> Non-Secure Flash Start (NS_FLASH_START) : 0x{FLASH.ns_start:08x}") +print(f"> Non-Secure Flash Size (NS_FLASH_SIZE) : 0x{FLASH.ns_size:08x}") +print(f"> ") +print(f"> Secure SRAM Start (S_SRAM_START) : 0x{SRAM.s_start:08x}") +print(f"> Secure SRAM Size (S_SRAM_SIZE) : 0x{SRAM.s_size:08x}") +print(f"> Non-Secure SRAM Start (NS_START) : 0x{SRAM.ns_start:08x}") +print(f"> Non-Secure SRAM Size (NS_SRAM_SIZE) : 0x{SRAM.ns_size:08x}") +print(f"> ") +print(f"> Non-Secure Callable Region Start : 0x{PRINT_NONSECURECALL_REGION_START:08x}") +print(f"> Non-Secure Callable Region Size (NSC_SIZE) : 0x{PRINT_NONSECURECALL_REGION_SIZE:08x}") +print(f"> ") diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/startup_max32657.S b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/startup_max32657.S index 7c869bf8928..a0e3af0ab3c 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/startup_max32657.S +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/startup_max32657.S @@ -29,7 +29,7 @@ #endif .globl __StackTop .globl __StackLimit -#if IS_SECURE_ENVIRONMENT +#if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) // __StackSeal defined in linker script .equ __STACK_SEAL, __StackSeal .globl __StackSeal @@ -58,7 +58,6 @@ __HeapBase: __HeapLimit: .size __HeapLimit, . - __HeapLimit - # TODO: Validate arch-specific handler layout .section .isr_vector .align 9 /* must be aligned to 512 byte boundary. VTOR requirement */ .globl __isr_vector @@ -102,14 +101,14 @@ __isr_vector: .long FLC_IRQHandler /* 0x1D 0x0074 29: FLC */ .long GPIO0_IRQHandler /* 0x1E 0x0078 30: GPIO0 */ .long RSV15_IRQHandler /* 0x1F 0x007C 31: Reserved */ - .long DMA0_CH0_IRQHandler /* 0x20 0x0080 32: DMA0 Channel 0 */ - .long DMA0_CH1_IRQHandler /* 0x21 0x0084 33: DMA0 Channel 1 */ - .long DMA0_CH2_IRQHandler /* 0x22 0x0088 34: DMA0 Channel 2 */ - .long DMA0_CH3_IRQHandler /* 0x23 0x008C 35: DMA0 Channel 3 */ - .long DMA1_CH0_IRQHandler /* 0x24 0x0090 36: DMA1 Channel 0 */ - .long DMA1_CH1_IRQHandler /* 0x25 0x0094 37: DMA1 Channel 1 */ - .long DMA1_CH2_IRQHandler /* 0x26 0x0098 38: DMA1 Channel 2 */ - .long DMA1_CH3_IRQHandler /* 0x27 0x009C 39: DMA1 Channel 3 */ + .long DMA0_CH0_IRQHandler /* 0x20 0x0080 32: DMA0 Channel 0 (Non-Secure) */ + .long DMA0_CH1_IRQHandler /* 0x21 0x0084 33: DMA0 Channel 1 (Non-Secure) */ + .long DMA0_CH2_IRQHandler /* 0x22 0x0088 34: DMA0 Channel 2 (Non-Secure) */ + .long DMA0_CH3_IRQHandler /* 0x23 0x008C 35: DMA0 Channel 3 (Non-Secure) */ + .long DMA1_CH0_IRQHandler /* 0x24 0x0090 36: DMA1 Channel 0 (Secure) */ + .long DMA1_CH1_IRQHandler /* 0x25 0x0094 37: DMA1 Channel 1 (Secure) */ + .long DMA1_CH2_IRQHandler /* 0x26 0x0098 38: DMA1 Channel 2 (Secure) */ + .long DMA1_CH3_IRQHandler /* 0x27 0x009C 39: DMA1 Channel 3 (Secure) */ .long WUT0_IRQHandler /* 0x28 0x00A0 40: Wakeup Timer 0 */ .long WUT1_IRQHandler /* 0x29 0x00A4 41: Wakeup Timer 1 */ .long GPIOWAKE_IRQHandler /* 0x2A 0x00A8 42: GPIO Wakeup */ @@ -118,26 +117,25 @@ __isr_vector: .long ERFO_IRQHandler /* 0x2D 0x00B4 45: ERFO Ready */ .long BOOST_IRQHandler /* 0x2E 0x00B8 46: Boost Controller */ .long ECC_IRQHandler /* 0x2F 0x00BC 47: ECC */ -/* TODO(Bluetooth): Confirm BTLE IRQ Handler Names */ - .long BTLE_XXXX0_IRQHandler /* 0x30 0x00C0 48: BTLE XXXX0 */ - .long BTLE_XXXX1_IRQHandler /* 0x31 0x00C4 49: BTLE XXXX1 */ - .long BTLE_XXXX2_IRQHandler /* 0x32 0x00C8 50: BTLE XXXX2 */ - .long BTLE_XXXX3_IRQHandler /* 0x33 0x00CC 51: BTLE XXXX3 */ - .long BTLE_XXXX4_IRQHandler /* 0x34 0x00D0 52: BTLE XXXX4 */ - .long BTLE_XXXX5_IRQHandler /* 0x35 0x00D4 53: BTLE XXXX5 */ - .long BTLE_XXXX6_IRQHandler /* 0x36 0x00D8 54: BTLE XXXX6 */ - .long BTLE_XXXX7_IRQHandler /* 0x37 0x00DC 55: BTLE XXXX7 */ - .long BTLE_XXXX8_IRQHandler /* 0x38 0x00E0 56: BTLE XXXX8 */ - .long BTLE_XXXX9_IRQHandler /* 0x39 0x00E4 57: BTLE XXXX9 */ - .long BTLE_XXXXA_IRQHandler /* 0x3A 0x00E8 58: BTLE XXXXA */ - .long BTLE_XXXXB_IRQHandler /* 0x3B 0x00EC 59: BTLE XXXXB */ - .long BTLE_XXXXC_IRQHandler /* 0x3C 0x00F0 60: BTLE XXXXC */ - .long BTLE_XXXXD_IRQHandler /* 0x3D 0x00F4 61: BTLE XXXXD */ - .long BTLE_XXXXE_IRQHandler /* 0x3E 0x00F8 62: BTLE XXXXE */ + .long BTLE_TX_DONE_IRQHandler /* 0x30 0x00C0 48: BTLE TX Done */ + .long BTLE_RX_RCVD_IRQHandler /* 0x31 0x00C4 49: BTLE RX Received */ + .long BTLE_RX_ENG_DET_IRQHandler /* 0x32 0x00C8 50: BTLE RX Energy Detected */ + .long BTLE_SFD_DET_IRQHandler /* 0x33 0x00CC 51: BTLE SFD Detected */ + .long BTLE_SFD_TO_IRQHandler /* 0x34 0x00D0 52: BTLE SFD Timeout */ + .long BTLE_GP_EVENT_IRQHandler /* 0x35 0x00D4 53: BTLE Timestamp */ + .long BTLE_CFO_IRQHandler /* 0x36 0x00D8 54: BTLE CFO Done */ + .long BTLE_SIG_DET_IRQHandler /* 0x37 0x00DC 55: BTLE Signal Detected */ + .long BTLE_AGC_EVENT_IRQHandler /* 0x38 0x00E0 56: BTLE AGC Event */ + .long BTLE_RFFE_SPIM_IRQHandler /* 0x39 0x00E4 57: BTLE RFFE SPIM Done */ + .long BTLE_TX_AES_IRQHandler /* 0x3A 0x00E8 58: BTLE TX AES Done */ + .long BTLE_RX_AES_IRQHandler /* 0x3B 0x00EC 59: BTLE RX AES Done */ + .long BTLE_INV_APB_ADDR_IRQHandler /* 0x3C 0x00F0 60: BTLE Invalid APB Address */ + .long BTLE_IQ_DATA_VALID_IRQHandler /* 0x3D 0x00F4 61: BTLE IQ Data Valid */ + .long BTLE_RX_CRC_IRQHandler /* 0x3E 0x00F8 62: BTLE RX CRC */ .long RSV47_IRQHandler /* 0x3F 0x00FC 63: Reserved */ .long MPC_IRQHandler /* 0x40 0x0100 64: MPC Combined (Secure) */ .long PPC_IRQHandler /* 0x44 0x0104 65: PPC Combined (Secure) */ - .long RSV50_IRQHandler /* 0x48 0x0108 66: Reserved */ + .long FRQCNT_IRQHandler /* 0x48 0x0108 66: Frequency Counter */ .long RSV51_IRQHandler /* 0x49 0x010C 67: Reserved */ .long RSV52_IRQHandler /* 0x4A 0x0110 68: Reserved */ .long RSV53_IRQHandler /* 0x4B 0x0114 69: Reserved */ @@ -152,9 +150,9 @@ Reset_Handler: ldr r0, =__StackTop mov sp, r0 -#if IS_SECURE_ENVIRONMENT +#if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) /* Set limit on Main and Process SP */ - ldr r0, =__STACK_LIMIT + ldr r0, =__StackLimit msr msplim, r0 msr psplim, r0 @@ -285,14 +283,14 @@ Reset_Handler: def_irq_handler FLC_IRQHandler /* 0x1D 0x0074 29: FLC */ def_irq_handler GPIO0_IRQHandler /* 0x1E 0x0078 30: GPIO0 */ def_irq_handler RSV15_IRQHandler /* 0x1F 0x007C 31: Reserved */ - def_irq_handler DMA0_CH0_IRQHandler /* 0x20 0x0080 32: DMA0 Channel 0 */ - def_irq_handler DMA0_CH1_IRQHandler /* 0x21 0x0084 33: DMA0 Channel 1 */ - def_irq_handler DMA0_CH2_IRQHandler /* 0x22 0x0088 34: DMA0 Channel 2 */ - def_irq_handler DMA0_CH3_IRQHandler /* 0x23 0x008C 35: DMA0 Channel 3 */ - def_irq_handler DMA1_CH0_IRQHandler /* 0x24 0x0090 36: DMA1 Channel 0 */ - def_irq_handler DMA1_CH1_IRQHandler /* 0x25 0x0094 37: DMA1 Channel 1 */ - def_irq_handler DMA1_CH2_IRQHandler /* 0x26 0x0098 38: DMA1 Channel 2 */ - def_irq_handler DMA1_CH3_IRQHandler /* 0x27 0x009C 39: DMA1 Channel 3 */ + def_irq_handler DMA0_CH0_IRQHandler /* 0x20 0x0080 32: DMA0 Channel 0 (Non-Secure) */ + def_irq_handler DMA0_CH1_IRQHandler /* 0x21 0x0084 33: DMA0 Channel 1 (Non-Secure) */ + def_irq_handler DMA0_CH2_IRQHandler /* 0x22 0x0088 34: DMA0 Channel 2 (Non-Secure) */ + def_irq_handler DMA0_CH3_IRQHandler /* 0x23 0x008C 35: DMA0 Channel 3 (Non-Secure) */ + def_irq_handler DMA1_CH0_IRQHandler /* 0x24 0x0090 36: DMA1 Channel 0 (Secure) */ + def_irq_handler DMA1_CH1_IRQHandler /* 0x25 0x0094 37: DMA1 Channel 1 (Secure) */ + def_irq_handler DMA1_CH2_IRQHandler /* 0x26 0x0098 38: DMA1 Channel 2 (Secure) */ + def_irq_handler DMA1_CH3_IRQHandler /* 0x27 0x009C 39: DMA1 Channel 3 (Secure) */ def_irq_handler WUT0_IRQHandler /* 0x28 0x00A0 40: Wakeup Timer 0 */ def_irq_handler WUT1_IRQHandler /* 0x29 0x00A4 41: Wakeup Timer 1 */ def_irq_handler GPIOWAKE_IRQHandler /* 0x2A 0x00A8 42: GPIO Wakeup */ @@ -301,26 +299,25 @@ Reset_Handler: def_irq_handler ERFO_IRQHandler /* 0x2D 0x00B4 45: ERFO Ready */ def_irq_handler BOOST_IRQHandler /* 0x2E 0x00B8 46: Boost Controller */ def_irq_handler ECC_IRQHandler /* 0x2F 0x00BC 47: ECC */ -/* TODO(Bluetooth): Confirm BTLE IRQ Handler Names */ - def_irq_handler BTLE_XXXX0_IRQHandler /* 0x30 0x00C0 48: BTLE XXXX0 */ - def_irq_handler BTLE_XXXX1_IRQHandler /* 0x31 0x00C4 49: BTLE XXXX1 */ - def_irq_handler BTLE_XXXX2_IRQHandler /* 0x32 0x00C8 50: BTLE XXXX2 */ - def_irq_handler BTLE_XXXX3_IRQHandler /* 0x33 0x00CC 51: BTLE XXXX3 */ - def_irq_handler BTLE_XXXX4_IRQHandler /* 0x34 0x00D0 52: BTLE XXXX4 */ - def_irq_handler BTLE_XXXX5_IRQHandler /* 0x35 0x00D4 53: BTLE XXXX5 */ - def_irq_handler BTLE_XXXX6_IRQHandler /* 0x36 0x00D8 54: BTLE XXXX6 */ - def_irq_handler BTLE_XXXX7_IRQHandler /* 0x37 0x00DC 55: BTLE XXXX7 */ - def_irq_handler BTLE_XXXX8_IRQHandler /* 0x38 0x00E0 56: BTLE XXXX8 */ - def_irq_handler BTLE_XXXX9_IRQHandler /* 0x39 0x00E4 57: BTLE XXXX9 */ - def_irq_handler BTLE_XXXXA_IRQHandler /* 0x3A 0x00E8 58: BTLE XXXXA */ - def_irq_handler BTLE_XXXXB_IRQHandler /* 0x3B 0x00EC 59: BTLE XXXXB */ - def_irq_handler BTLE_XXXXC_IRQHandler /* 0x3C 0x00F0 60: BTLE XXXXC */ - def_irq_handler BTLE_XXXXD_IRQHandler /* 0x3D 0x00F4 61: BTLE XXXXD */ - def_irq_handler BTLE_XXXXE_IRQHandler /* 0x3E 0x00F8 62: BTLE XXXXE */ + def_irq_handler BTLE_TX_DONE_IRQHandler /* 0x30 0x00C0 48: BTLE TX Done */ + def_irq_handler BTLE_RX_RCVD_IRQHandler /* 0x31 0x00C4 49: BTLE RX Received */ + def_irq_handler BTLE_RX_ENG_DET_IRQHandler /* 0x32 0x00C8 50: BTLE RX Energy Detected */ + def_irq_handler BTLE_SFD_DET_IRQHandler /* 0x33 0x00CC 51: BTLE SFD Detected */ + def_irq_handler BTLE_SFD_TO_IRQHandler /* 0x34 0x00D0 52: BTLE SFD Timeout */ + def_irq_handler BTLE_GP_EVENT_IRQHandler /* 0x35 0x00D4 53: BTLE Timestamp */ + def_irq_handler BTLE_CFO_IRQHandler /* 0x36 0x00D8 54: BTLE CFO Done */ + def_irq_handler BTLE_SIG_DET_IRQHandler /* 0x37 0x00DC 55: BTLE Signal Detected */ + def_irq_handler BTLE_AGC_EVENT_IRQHandler /* 0x38 0x00E0 56: BTLE AGC Event */ + def_irq_handler BTLE_RFFE_SPIM_IRQHandler /* 0x39 0x00E4 57: BTLE RFFE SPIM Done */ + def_irq_handler BTLE_TX_AES_IRQHandler /* 0x3A 0x00E8 58: BTLE TX AES Done */ + def_irq_handler BTLE_RX_AES_IRQHandler /* 0x3B 0x00EC 59: BTLE RX AES Done */ + def_irq_handler BTLE_INV_APB_ADDR_IRQHandler /* 0x3C 0x00F0 60: BTLE Invalid APB Address */ + def_irq_handler BTLE_IQ_DATA_VALID_IRQHandler /* 0x3D 0x00F4 61: BTLE IQ Data Valid */ + def_irq_handler BTLE_RX_CRC_IRQHandler /* 0x3E 0x00F8 62: BTLE RX CRC */ def_irq_handler RSV47_IRQHandler /* 0x3F 0x00FC 63: Reserved */ def_irq_handler MPC_IRQHandler /* 0x40 0x0100 64: MPC Combined (Secure) */ def_irq_handler PPC_IRQHandler /* 0x44 0x0104 65: PPC Combined (Secure) */ - def_irq_handler RSV50_IRQHandler /* 0x48 0x0108 66: Reserved */ + def_irq_handler FRQCNT_IRQHandler /* 0x48 0x0108 66: Frequency Counter */ def_irq_handler RSV51_IRQHandler /* 0x49 0x010C 67: Reserved */ def_irq_handler RSV52_IRQHandler /* 0x4A 0x0110 68: Reserved */ def_irq_handler RSV53_IRQHandler /* 0x4B 0x0114 69: Reserved */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/Template/max32657_ns.ld b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/Template/max32657_ns.ld new file mode 100644 index 00000000000..5df3d4c9670 --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/Template/max32657_ns.ld @@ -0,0 +1,164 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * 1MB Total Physical Flash Size + * 256KB Total Physical SRAM Size + * - SRAM0 (32KB) + * - SRAM1 (32KB) + * - SRAM2 (64KB) + * - SRAM3 (64KB) + * - SRAM4 (64KB) + */ + +ENTRY(Reset_Handler) + +MEMORY { + FLASH (rx) : ORIGIN = $FLASH_ORIGIN_NS$, LENGTH = $FLASH_SIZE_NS$ /* User-selected Non-Secure Flash settings */ + SRAM (rwx) : ORIGIN = $SRAM_ORIGIN_NS$, LENGTH = $SRAM_SIZE_NS$ /* User-selected Non-Secure SRAM settings */ +} + +SECTIONS { + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) /* Program code */ + *(.rodata*) /* read-only data: "const" */ + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + /* C++ Exception handling */ + KEEP(*(.eh_frame*)) + _etext = .; + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + .flash_code : + { + . = ALIGN(16); + _flash_code = .; + *(.flash_code_section) + _eflash_code = .; + } > FLASH + + .sram_code : + { + . = ALIGN(16); + _sram_code = .; + *(.sram_code_section) + _esram_code = .; + } > SRAM + + /* it's used for C++ exception handling */ + /* we need to keep this to avoid overlapping */ + .ARM.exidx : + { + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + __exidx_end = .; + } > FLASH + + .data : + { + _data = ALIGN(., 4); + *(vtable) + *(.data*) /*read-write initialized data: initialized global variable*/ + *(.flashprog*) /* Flash program */ + + /* These array sections are used by __libc_init_array to call static C++ constructors */ + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + _edata = ALIGN(., 4); + } > SRAM AT>FLASH + __load_data = LOADADDR(.data); + + .bss : + { + . = ALIGN(4); + _bss = .; + *(.bss*) /*read-write zero initialized data: uninitialzed global variable*/ + _ebss = ALIGN(., 4); + } > SRAM + + /** + * Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section. + */ + __StackTop = ORIGIN(SRAM) + LENGTH(SRAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + + /** + * .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later. + */ + .stack_dummy (COPY): + { + KEEP(*(.stack*)) + } > SRAM + + .heap (COPY): + { + . = ALIGN(4); + *(.heap*) + __HeapLimit = ABSOLUTE(__StackLimit); + } > SRAM + + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= _ebss, "region RAM overflowed with stack") +} diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/Template/max32657_s.ld b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/Template/max32657_s.ld new file mode 100644 index 00000000000..9814e0c3ae3 --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/Template/max32657_s.ld @@ -0,0 +1,199 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * 1MB Total Physical Flash Size + * 256KB Total Physical SRAM Size + * - SRAM0 (32KB) + * - SRAM1 (32KB) + * - SRAM2 (64KB) + * - SRAM3 (64KB) + * - SRAM4 (64KB) + */ + +MEMORY { + FLASH (rx) : ORIGIN = $FLASH_ORIGIN_S$, LENGTH = $FLASH_SIZE_S$ /* User-selected Secure Flash */ + FLASH_NS (rx) : ORIGIN = $FLASH_ORIGIN_NS$, LENGTH = $FLASH_SIZE_NS$ /* User-selected Non-Secure Flash */ + SRAM (rwx) : ORIGIN = $SRAM_ORIGIN_S$, LENGTH = $SRAM_SIZE_S$ /* User-selected Secure SRAM */ + SRAM_NS (rwx) : ORIGIN = $SRAM_ORIGIN_NS$, LENGTH = $SRAM_SIZE_NS$ /* User-selected Non-Secure SRAM */ + + NSC_REGION $perm$ : ORIGIN = $MEM_ORIGIN_NSC$, LENGTH = $MEM_SIZE_NSC$ /* User-selected Non-Secure Callable Region */ +} + +SECTIONS { + .nonsecure_flash : + { + /* Non-Secure Code must be aligned with this memory's block size. */ + _nonsecure_start = ALIGN(., $MPC_BLOCK_SIZE$); + KEEP(*nonsecure.o) /* Non-Secure program code */ + _nonsecure_end = ALIGN(., $MPC_BLOCK_SIZE$) - 1; /* -1 for last accessible address, not start of next block */ + } > $CODE_MEM_TYPE$_NS + + .text : + { + _text = .; + KEEP(*(.isr_vector)) + *(.text*) /* Program code */ + *(.rodata*) /* read-only data: "const" */ + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + /* C++ Exception handling */ + KEEP(*(.eh_frame*)) + _etext = .; + } > $CODE_MEM_TYPE$ + + /* + * Secure Gatway (SG) veneers. + * All SG veneers are placed in the special output section .gnu.sgstubs. + * Must be placed in Non-Secure Callable Region. + */ + .gnu.sgstubs : + { + _sg_veneers = .; + *(.gnu.sgstubs*) + _esg_veneers = .; + } > NSC_REGION + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > $CODE_MEM_TYPE$ + + .flash_code : + { + . = ALIGN(16); + _flash_code = .; + *(.flash_code_section) + _eflash_code = .; + } > FLASH + + .sram_code : + { + . = ALIGN(16); + _sram_code = .; + *(.sram_code_section) + _esram_code = .; + } > SRAM + + /* it's used for C++ exception handling */ + /* we need to keep this to avoid overlapping */ + .ARM.exidx : + { + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + __exidx_end = .; + } > $CODE_MEM_TYPE$ + + .data : + { + _data = ALIGN(., 4); + *(vtable) + *(.data*) /* read-write initialized data: initialized global variable */ + *(.flashprog*) /* Flash program */ + + /* These array sections are used by __libc_init_array to call static C++ constructors */ + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + _edata = ALIGN(., 4); + } > SRAM AT>$CODE_MEM_TYPE$ + __load_data = LOADADDR(.data); + + .bss : + { + . = ALIGN(4); + _bss = .; + *(.bss*) /* read-write zero initialized data: uninitialzed global variable */ + _ebss = ALIGN(., 4); + } > SRAM + + /** + * Stack Seal section is required for secure builds. Stack sealing protects + * secure stack from illegal access by non-secure code. + */ + .stackseal (COPY): + { + . = ALIGN(8); + __StackSeal = .; + . = . + 8; + . = ALIGN(8); + } > SRAM + + /** + * Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section. + */ + __StackTop = ORIGIN(SRAM) + LENGTH(SRAM); + __StackLimit = __StackTop - SIZEOF(.stack_dummy); + + /** + * .stack_dummy section doesn't contains any symbols. It is only + * used for linker to calculate size of stack sections, and assign + * values to stack symbols later. + */ + .stack_dummy (COPY): + { + KEEP(*(.stack*)) + KEEP(*(.stackseal*)) + } > SRAM + + .heap (COPY): + { + . = ALIGN(4); + *(.heap*) + __HeapLimit = ABSOLUTE(__StackLimit); + } > SRAM + + PROVIDE(__stack = __StackTop); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(__StackLimit >= _ebss, "region RAM overflowed with stack") +} diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/Template/partition_max32657.h b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/Template/partition_max32657.h new file mode 100644 index 00000000000..09095504c37 --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/Template/partition_max32657.h @@ -0,0 +1,1298 @@ +/***************************************************************************** + * @file partition_max32657.h + * @brief CMSIS-Core(M) Device Initial Setup for Secure/Non-Secure Zones for + * MAX32657 + * @version V1.0.0 + * @date 20. January 2021 + *****************************************************************************/ +/* + * Copyright (c) 2009-2021 Arm Limited. All rights reserved. + * + * Portions Copyright (C) 2024 Analog Devices, Inc. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_SOURCE_TEMPLATE_PARTITION_MAX32657_H_ +#define LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_SOURCE_TEMPLATE_PARTITION_MAX32657_H_ + +#include "mxc_device.h" + +// clang-format off +#if CONFIG_TRUSTED_EXECUTION_SECURE + +/* +//-------- <<< Use Configuration Wizard in Context Menu >>> ----------------- +*/ + +/* +// Enable SAU +// Value for SAU->CTRL register bit ENABLE +*/ +#define SAU_INIT_CTRL_ENABLE 1 + +/* +// When SAU is disabled +// <0=> All Memory is Secure +// <1=> All Memory is Non-Secure +// Value for SAU->CTRL register bit ALLNS +// When all Memory is Non-Secure (ALLNS is 1), IDAU can override memory map configuration. +*/ +#define SAU_INIT_CTRL_ALLNS 0 + +/* +//
+*/ + +/* +// Initialize Security Attribution Unit (SAU) Address Regions +// SAU configuration specifies regions to be one of: +// - Secure and Non-Secure Callable +// - Non-Secure +// Note: All memory regions not configured by SAU are Secure +*/ +/** + * Analog Devices, Inc. + * 4 Memory Spaces in the MAX32657. + * 1. Non-Secure Flash + * 2. Secure Flash + * 3. Non-Secure SRAM + * 4. Secure SRAM + * + * Finer grain control can be achieved depending on the application + * requirements by updating the regions of this file. + * + * Non-Secure Flash (1MB) 0x0100.0000 - 0x010F.FFFF + * Non-Secure SRAM0 (32kB) 0x2000.0000 - 0x2000.7FFF + * Non-Secure SRAM1 (32kB) 0x2000.8000 - 0x2000.FFFF + * Non-Secure SRAM2 (64kB) 0x2001.0000 - 0x2001.FFFF + * Non-Secure SRAM3 (64kB) 0x2002.0000 - 0x2002.FFFF + * Non-Secure SRAM4 (64kB) 0x2003.0000 - 0x2003.FFFF + * + * Secure Flash (1MB) 0x1100.0000 - 0x110F.FFFF + * Secure SRAM0 (32kB) 0x3000.0000 - 0x3000.7FFF + * Secure SRAM1 (32kB) 0x3000.8000 - 0x3000.FFFF + * Secure SRAM2 (64kB) 0x3001.0000 - 0x3001.FFFF + * Secure SRAM3 (64kB) 0x3002.0000 - 0x3002.FFFF + * Secure SRAM4 (64kB) 0x3003.0000 - 0x3003.FFFF + * + * Note: The total physical space for Flash is 1MB, and SRAM is 256KB. + * The total size between the non-secure and secure Flash regions + * should be 1MB. + * The total size between the non-secure and secure SRAM regions + * should be 256KB. + * - By default, this file sets the following regions: + * Secure Flash (504KB): 0x1100.0000 - 0x1107.DFFF + * Non-Secure Callable Flash (8KB): 0x1107.E000 - 0x1107.FFFF + * Non-Secure Flash (512KB): 0x0108.0000 - 0x010F.FFFF + * Secure SRAM (0-2) (128KB): 0x3000.0000 - 0x3001.FFFF + * Non-Secure SRAM (3-4) (128KB): 0x2002.0000 - 0x2003.FFFF + */ +#define SAU_REGIONS_MAX 4 /* Max. number of SAU regions */ + +/* +// Initialize SAU Region 0 (Secure Flash) +// Setup SAU Region 0 memory attributes +*/ +#define SAU_INIT_REGION0 1 + +/* +// Start Address <0-0xFFFFFFE0> +*/ +#define SAU_INIT_START0 $FLASH_ORIGIN_S$ /* start address of SAU region 0 (ROM) */ + +/* +// End Address <0x1F-0xFFFFFFFF> +*/ +#define SAU_INIT_END0 $FLASH_END_S$ /* end address of SAU region 0 */ + +/* +// Region is +// <0=>Non-Secure +// <1=>Secure, Non-Secure Callable +*/ +#define SAU_INIT_NSC0 1 +/* +// +*/ + +/* +// Initialize SAU Region 1 (Non-Secure Flash) +// Setup SAU Region 1 memory attributes +*/ +#define SAU_INIT_REGION1 1 + +/* +// Start Address <0-0xFFFFFFE0> +*/ +#define SAU_INIT_START1 $FLASH_ORIGIN_NS$ + +/* +// End Address <0x1F-0xFFFFFFFF> +*/ +#define SAU_INIT_END1 $FLASH_END_NS$ + +/* +// Region is +// <0=>Non-Secure +// <1=>Secure, Non-Secure Callable +*/ +#define SAU_INIT_NSC1 0 +/* +// +*/ + +/* +// Initialize SAU Region 2 (Secure SRAM (0-2)) +// Setup SAU Region 2 memory attributes +*/ +#define SAU_INIT_REGION2 1 + +/* +// Start Address <0-0xFFFFFFE0> +*/ +#define SAU_INIT_START2 $SRAM_ORIGIN_S$ + +/* +// End Address <0x1F-0xFFFFFFFF> +*/ +#define SAU_INIT_END2 $SRAM_END_S$ + +/* +// Region is +// <0=>Non-Secure +// <1=>Secure, Non-Secure Callable +*/ +#define SAU_INIT_NSC2 1 +/* +// +*/ + +/* +// Initialize SAU Region 3 (Non-Secure SRAM (3-4)) +// Setup SAU Region 3 memory attributes +*/ +#define SAU_INIT_REGION3 1 + +/* +// Start Address <0-0xFFFFFFE0> +*/ +#define SAU_INIT_START3 $SRAM_ORIGIN_NS$ + +/* +// End Address <0x1F-0xFFFFFFFF> +*/ +#define SAU_INIT_END3 $SRAM_END_NS$ + +/* +// Region is +// <0=>Non-Secure +// <1=>Secure, Non-Secure Callable +*/ +#define SAU_INIT_NSC3 0 +/* +// +*/ + +/* +// Initialize SAU Region 4 (Non-Secure SRAM) +// Setup SAU Region 4 memory attributes +*/ +#define SAU_INIT_REGION4 0 + +/* +// Start Address <0-0xFFFFFFE0> +*/ +#define SAU_INIT_START4 0x00000000 /* start address of SAU region 4 */ + +/* +// End Address <0x1F-0xFFFFFFFF> +*/ +#define SAU_INIT_END4 0x00000000 /* end address of SAU region 4 */ + +/* +// Region is +// <0=>Non-Secure +// <1=>Secure, Non-Secure Callable +*/ +#define SAU_INIT_NSC4 0 +/* +// +*/ + +/* +// Initialize SAU Region 5 +// Setup SAU Region 5 memory attributes +*/ +#define SAU_INIT_REGION5 0 + +/* +// Start Address <0-0xFFFFFFE0> +*/ +#define SAU_INIT_START5 0x00000000 + +/* +// End Address <0x1F-0xFFFFFFFF> +*/ +#define SAU_INIT_END5 0x00000000 + +/* +// Region is +// <0=>Non-Secure +// <1=>Secure, Non-Secure Callable +*/ +#define SAU_INIT_NSC5 0 +/* +// +*/ + +/* +// Initialize SAU Region 6 +// Setup SAU Region 6 memory attributes +*/ +#define SAU_INIT_REGION6 0 + +/* +// Start Address <0-0xFFFFFFE0> +*/ +#define SAU_INIT_START6 0x00000000 + +/* +// End Address <0x1F-0xFFFFFFFF> +*/ +#define SAU_INIT_END6 0x00000000 + +/* +// Region is +// <0=>Non-Secure +// <1=>Secure, Non-Secure Callable +*/ +#define SAU_INIT_NSC6 0 +/* +// +*/ + +/* +// Initialize SAU Region 7 +// Setup SAU Region 7 memory attributes +*/ +#define SAU_INIT_REGION7 0 + +/* +// Start Address <0-0xFFFFFFE0> +*/ +#define SAU_INIT_START7 0x00000000 + +/* +// End Address <0x1F-0xFFFFFFFF> +*/ +#define SAU_INIT_END7 0x00000000 + +/* +// Region is +// <0=>Non-Secure +// <1=>Secure, Non-Secure Callable +*/ +#define SAU_INIT_NSC7 0 +/* +// +*/ + +/* +// +*/ + +/* +// Setup behaviour of Sleep and Exception Handling +*/ +#define SCB_CSR_AIRCR_INIT 1 + +/* +// Deep Sleep can be enabled by +// <0=>Secure and Non-Secure state +// <1=>Secure state only +// Value for SCB->CSR register bit DEEPSLEEPS +*/ +#define SCB_CSR_DEEPSLEEPS_VAL 1 + +/* +// System reset request accessible from +// <0=> Secure and Non-Secure state +// <1=> Secure state only +// Value for SCB->AIRCR register bit SYSRESETREQS +*/ +#define SCB_AIRCR_SYSRESETREQS_VAL 1 + +/* +// Priority of Non-Secure exceptions is +// <0=> Not altered +// <1=> Lowered to 0x80-0xFF +// Value for SCB->AIRCR register bit PRIS +*/ +#define SCB_AIRCR_PRIS_VAL 1 + +/* +// BusFault, HardFault, and NMI target +// <0=> Secure state +// <1=> Non-Secure state +// Value for SCB->AIRCR register bit BFHFNMINS +*/ +#define SCB_AIRCR_BFHFNMINS_VAL 0 + +/* +// +*/ + +/* +// Setup behaviour of Floating Point and Vector Unit (FPU/MVE) +*/ +#define TZ_FPU_NS_USAGE 1 + +/* +// Floating Point and Vector Unit usage +// <0=> Secure state only +// <3=> Secure and Non-Secure state +// Value for SCB->NSACR register bits CP10, CP11 +*/ +#define SCB_NSACR_CP10_11_VAL 3 + +/* +// Treat floating-point registers as Secure +// <0=> Disabled +// <1=> Enabled +// Value for FPU->FPCCR register bit TS +*/ +#define FPU_FPCCR_TS_VAL 0 + +/* +// Clear on return (CLRONRET) accessibility +// <0=> Secure and Non-Secure state +// <1=> Secure state only +// Value for FPU->FPCCR register bit CLRONRETS +*/ +#define FPU_FPCCR_CLRONRETS_VAL 0 + +/* +// Clear floating-point caller saved registers on exception return +// <0=> Disabled +// <1=> Enabled +// Value for FPU->FPCCR register bit CLRONRET +*/ +#define FPU_FPCCR_CLRONRET_VAL 1 + +/* +// +*/ + +/* +// Setup Interrupt Target +*/ + +/* +// Initialize ITNS 0 (Interrupts 0..31) +*/ +#define NVIC_INIT_ITNS0 1 + +/* +// Interrupts 0..31 +// ICE Unlock <0=> Secure state <1=> Non-Secure state +// Watchdog Timer <0=> Secure state <1=> Non-Secure state +// Real Time Clock <0=> Secure state <1=> Non-Secure state +// True Random Number Generator <0=> Secure state <1=> Non-Secure state +// Timer 0 <0=> Secure state <1=> Non-Secure state +// Timer 1 <0=> Secure state <1=> Non-Secure state +// Timer 2 <0=> Secure state <1=> Non-Secure state +// Timer 3 <0=> Secure state <1=> Non-Secure state +// Timer 4 <0=> Secure state <1=> Non-Secure state +// Timer 5 <0=> Secure state <1=> Non-Secure state +// I3C <0=> Secure state <1=> Non-Secure state +// UART <0=> Secure state <1=> Non-Secure state +// SPI <0=> Secure state <1=> Non-Secure state +// Flash Controller <0=> Secure state <1=> Non-Secure state +// GPIO0 <0=> Secure state <1=> Non-Secure state +// Reserved (15) <0=> Secure state <1=> Non-Secure state +// DMA0 Channel 0 <0=> Secure state <1=> Non-Secure state +// DMA0 Channel 1 <0=> Secure state <1=> Non-Secure state +// DMA0 Channel 2 <0=> Secure state <1=> Non-Secure state +// DMA0 Channel 3 <0=> Secure state <1=> Non-Secure state +// DMA1 Channel 0 <0=> Secure state <1=> Non-Secure state +// DMA1 Channel 1 <0=> Secure state <1=> Non-Secure state +// DMA1 Channel 2 <0=> Secure state <1=> Non-Secure state +// DMA1 Channel 3 <0=> Secure state <1=> Non-Secure state +// Wakeup Timer 0 <0=> Secure state <1=> Non-Secure state +// Wakeup Timer 1 <0=> Secure state <1=> Non-Secure state +// GPIO Wake <0=> Secure state <1=> Non-Secure state +// CRC <0=> Secure state <1=> Non-Secure state +// AES <0=> Secure state <1=> Non-Secure state +// ERFO Ready <0=> Secure state <1=> Non-Secure state +// Boost Controller <0=> Secure state <1=> Non-Secure state +// ECC <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS0_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 1 (Interrupts 32..63) +*/ +#define NVIC_INIT_ITNS1 1 + +/* +// Interrupts 32..63 +// BTLE XXXX0 <0=> Secure state <1=> Non-Secure state +// BTLE XXXX1 <0=> Secure state <1=> Non-Secure state +// BTLE XXXX2 <0=> Secure state <1=> Non-Secure state +// BTLE XXXX3 <0=> Secure state <1=> Non-Secure state +// BTLE XXXX4 <0=> Secure state <1=> Non-Secure state +// BTLE XXXX5 <0=> Secure state <1=> Non-Secure state +// BTLE XXXX6 <0=> Secure state <1=> Non-Secure state +// BTLE XXXX7 <0=> Secure state <1=> Non-Secure state +// BTLE XXXX8 <0=> Secure state <1=> Non-Secure state +// BTLE XXXX9 <0=> Secure state <1=> Non-Secure state +// BTLE XXXXA <0=> Secure state <1=> Non-Secure state +// BTLE XXXXB <0=> Secure state <1=> Non-Secure state +// BTLE XXXXC <0=> Secure state <1=> Non-Secure state +// BTLE XXXXD <0=> Secure state <1=> Non-Secure state +// BTLE XXXXE <0=> Secure state <1=> Non-Secure state +// Reserved (47) <0=> Secure state <1=> Non-Secure state +// MPC Combined (Secure) <0=> Secure state <1=> Non-Secure state +// PPC Combined (Secure) <0=> Secure state <1=> Non-Secure state +// Reserved (50) <0=> Secure state <1=> Non-Secure state +// Reserved (51) <0=> Secure state <1=> Non-Secure state +// Reserved (52) <0=> Secure state <1=> Non-Secure state +// Reserved (53) <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS1_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 2 (Interrupts 64..95) +*/ +#define NVIC_INIT_ITNS2 0 + +/* +// Interrupts 64..95 +// Interrupt 64 <0=> Secure state <1=> Non-Secure state +// Interrupt 65 <0=> Secure state <1=> Non-Secure state +// Interrupt 66 <0=> Secure state <1=> Non-Secure state +// Interrupt 67 <0=> Secure state <1=> Non-Secure state +// Interrupt 68 <0=> Secure state <1=> Non-Secure state +// Interrupt 69 <0=> Secure state <1=> Non-Secure state +// Interrupt 70 <0=> Secure state <1=> Non-Secure state +// Interrupt 71 <0=> Secure state <1=> Non-Secure state +// Interrupt 72 <0=> Secure state <1=> Non-Secure state +// Interrupt 73 <0=> Secure state <1=> Non-Secure state +// Interrupt 74 <0=> Secure state <1=> Non-Secure state +// Interrupt 75 <0=> Secure state <1=> Non-Secure state +// Interrupt 76 <0=> Secure state <1=> Non-Secure state +// Interrupt 77 <0=> Secure state <1=> Non-Secure state +// Interrupt 78 <0=> Secure state <1=> Non-Secure state +// Interrupt 79 <0=> Secure state <1=> Non-Secure state +// Interrupt 80 <0=> Secure state <1=> Non-Secure state +// Interrupt 81 <0=> Secure state <1=> Non-Secure state +// Interrupt 82 <0=> Secure state <1=> Non-Secure state +// Interrupt 83 <0=> Secure state <1=> Non-Secure state +// Interrupt 84 <0=> Secure state <1=> Non-Secure state +// Interrupt 85 <0=> Secure state <1=> Non-Secure state +// Interrupt 86 <0=> Secure state <1=> Non-Secure state +// Interrupt 87 <0=> Secure state <1=> Non-Secure state +// Interrupt 88 <0=> Secure state <1=> Non-Secure state +// Interrupt 89 <0=> Secure state <1=> Non-Secure state +// Interrupt 90 <0=> Secure state <1=> Non-Secure state +// Interrupt 91 <0=> Secure state <1=> Non-Secure state +// Interrupt 92 <0=> Secure state <1=> Non-Secure state +// Interrupt 93 <0=> Secure state <1=> Non-Secure state +// Interrupt 94 <0=> Secure state <1=> Non-Secure state +// Interrupt 95 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS2_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 3 (Interrupts 96..127) +*/ +#define NVIC_INIT_ITNS3 0 + +/* +// Interrupts 96..127 +// Interrupt 96 <0=> Secure state <1=> Non-Secure state +// Interrupt 97 <0=> Secure state <1=> Non-Secure state +// Interrupt 98 <0=> Secure state <1=> Non-Secure state +// Interrupt 99 <0=> Secure state <1=> Non-Secure state +// Interrupt 100 <0=> Secure state <1=> Non-Secure state +// Interrupt 101 <0=> Secure state <1=> Non-Secure state +// Interrupt 102 <0=> Secure state <1=> Non-Secure state +// Interrupt 103 <0=> Secure state <1=> Non-Secure state +// Interrupt 104 <0=> Secure state <1=> Non-Secure state +// Interrupt 105 <0=> Secure state <1=> Non-Secure state +// Interrupt 106 <0=> Secure state <1=> Non-Secure state +// Interrupt 107 <0=> Secure state <1=> Non-Secure state +// Interrupt 108 <0=> Secure state <1=> Non-Secure state +// Interrupt 109 <0=> Secure state <1=> Non-Secure state +// Interrupt 110 <0=> Secure state <1=> Non-Secure state +// Interrupt 111 <0=> Secure state <1=> Non-Secure state +// Interrupt 112 <0=> Secure state <1=> Non-Secure state +// Interrupt 113 <0=> Secure state <1=> Non-Secure state +// Interrupt 114 <0=> Secure state <1=> Non-Secure state +// Interrupt 115 <0=> Secure state <1=> Non-Secure state +// Interrupt 116 <0=> Secure state <1=> Non-Secure state +// Interrupt 117 <0=> Secure state <1=> Non-Secure state +// Interrupt 118 <0=> Secure state <1=> Non-Secure state +// Interrupt 119 <0=> Secure state <1=> Non-Secure state +// Interrupt 120 <0=> Secure state <1=> Non-Secure state +// Interrupt 121 <0=> Secure state <1=> Non-Secure state +// Interrupt 122 <0=> Secure state <1=> Non-Secure state +// Interrupt 123 <0=> Secure state <1=> Non-Secure state +// Interrupt 124 <0=> Secure state <1=> Non-Secure state +// Interrupt 125 <0=> Secure state <1=> Non-Secure state +// Interrupt 126 <0=> Secure state <1=> Non-Secure state +// Interrupt 127 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS3_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 4 (Interrupts 128..159) +*/ +#define NVIC_INIT_ITNS4 0 + +/* +// Interrupts 128..159 +// Interrupt 128 <0=> Secure state <1=> Non-Secure state +// Interrupt 129 <0=> Secure state <1=> Non-Secure state +// Interrupt 130 <0=> Secure state <1=> Non-Secure state +// Interrupt 131 <0=> Secure state <1=> Non-Secure state +// Interrupt 132 <0=> Secure state <1=> Non-Secure state +// Interrupt 133 <0=> Secure state <1=> Non-Secure state +// Interrupt 134 <0=> Secure state <1=> Non-Secure state +// Interrupt 135 <0=> Secure state <1=> Non-Secure state +// Interrupt 136 <0=> Secure state <1=> Non-Secure state +// Interrupt 137 <0=> Secure state <1=> Non-Secure state +// Interrupt 138 <0=> Secure state <1=> Non-Secure state +// Interrupt 139 <0=> Secure state <1=> Non-Secure state +// Interrupt 140 <0=> Secure state <1=> Non-Secure state +// Interrupt 141 <0=> Secure state <1=> Non-Secure state +// Interrupt 142 <0=> Secure state <1=> Non-Secure state +// Interrupt 143 <0=> Secure state <1=> Non-Secure state +// Interrupt 144 <0=> Secure state <1=> Non-Secure state +// Interrupt 145 <0=> Secure state <1=> Non-Secure state +// Interrupt 146 <0=> Secure state <1=> Non-Secure state +// Interrupt 147 <0=> Secure state <1=> Non-Secure state +// Interrupt 148 <0=> Secure state <1=> Non-Secure state +// Interrupt 149 <0=> Secure state <1=> Non-Secure state +// Interrupt 150 <0=> Secure state <1=> Non-Secure state +// Interrupt 151 <0=> Secure state <1=> Non-Secure state +// Interrupt 152 <0=> Secure state <1=> Non-Secure state +// Interrupt 153 <0=> Secure state <1=> Non-Secure state +// Interrupt 154 <0=> Secure state <1=> Non-Secure state +// Interrupt 155 <0=> Secure state <1=> Non-Secure state +// Interrupt 156 <0=> Secure state <1=> Non-Secure state +// Interrupt 157 <0=> Secure state <1=> Non-Secure state +// Interrupt 158 <0=> Secure state <1=> Non-Secure state +// Interrupt 159 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS4_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 5 (Interrupts 160..191) +*/ +#define NVIC_INIT_ITNS5 0 + +/* +// Interrupts 160..191 +// Interrupt 160 <0=> Secure state <1=> Non-Secure state +// Interrupt 161 <0=> Secure state <1=> Non-Secure state +// Interrupt 162 <0=> Secure state <1=> Non-Secure state +// Interrupt 163 <0=> Secure state <1=> Non-Secure state +// Interrupt 164 <0=> Secure state <1=> Non-Secure state +// Interrupt 165 <0=> Secure state <1=> Non-Secure state +// Interrupt 166 <0=> Secure state <1=> Non-Secure state +// Interrupt 167 <0=> Secure state <1=> Non-Secure state +// Interrupt 168 <0=> Secure state <1=> Non-Secure state +// Interrupt 169 <0=> Secure state <1=> Non-Secure state +// Interrupt 170 <0=> Secure state <1=> Non-Secure state +// Interrupt 171 <0=> Secure state <1=> Non-Secure state +// Interrupt 172 <0=> Secure state <1=> Non-Secure state +// Interrupt 173 <0=> Secure state <1=> Non-Secure state +// Interrupt 174 <0=> Secure state <1=> Non-Secure state +// Interrupt 175 <0=> Secure state <1=> Non-Secure state +// Interrupt 176 <0=> Secure state <1=> Non-Secure state +// Interrupt 177 <0=> Secure state <1=> Non-Secure state +// Interrupt 178 <0=> Secure state <1=> Non-Secure state +// Interrupt 179 <0=> Secure state <1=> Non-Secure state +// Interrupt 180 <0=> Secure state <1=> Non-Secure state +// Interrupt 181 <0=> Secure state <1=> Non-Secure state +// Interrupt 182 <0=> Secure state <1=> Non-Secure state +// Interrupt 183 <0=> Secure state <1=> Non-Secure state +// Interrupt 184 <0=> Secure state <1=> Non-Secure state +// Interrupt 185 <0=> Secure state <1=> Non-Secure state +// Interrupt 186 <0=> Secure state <1=> Non-Secure state +// Interrupt 187 <0=> Secure state <1=> Non-Secure state +// Interrupt 188 <0=> Secure state <1=> Non-Secure state +// Interrupt 189 <0=> Secure state <1=> Non-Secure state +// Interrupt 190 <0=> Secure state <1=> Non-Secure state +// Interrupt 191 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS5_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 6 (Interrupts 192..223) +*/ +#define NVIC_INIT_ITNS6 0 + +/* +// Interrupts 192..223 +// Interrupt 192 <0=> Secure state <1=> Non-Secure state +// Interrupt 193 <0=> Secure state <1=> Non-Secure state +// Interrupt 194 <0=> Secure state <1=> Non-Secure state +// Interrupt 195 <0=> Secure state <1=> Non-Secure state +// Interrupt 196 <0=> Secure state <1=> Non-Secure state +// Interrupt 197 <0=> Secure state <1=> Non-Secure state +// Interrupt 198 <0=> Secure state <1=> Non-Secure state +// Interrupt 199 <0=> Secure state <1=> Non-Secure state +// Interrupt 200 <0=> Secure state <1=> Non-Secure state +// Interrupt 201 <0=> Secure state <1=> Non-Secure state +// Interrupt 202 <0=> Secure state <1=> Non-Secure state +// Interrupt 203 <0=> Secure state <1=> Non-Secure state +// Interrupt 204 <0=> Secure state <1=> Non-Secure state +// Interrupt 205 <0=> Secure state <1=> Non-Secure state +// Interrupt 206 <0=> Secure state <1=> Non-Secure state +// Interrupt 207 <0=> Secure state <1=> Non-Secure state +// Interrupt 208 <0=> Secure state <1=> Non-Secure state +// Interrupt 209 <0=> Secure state <1=> Non-Secure state +// Interrupt 210 <0=> Secure state <1=> Non-Secure state +// Interrupt 211 <0=> Secure state <1=> Non-Secure state +// Interrupt 212 <0=> Secure state <1=> Non-Secure state +// Interrupt 213 <0=> Secure state <1=> Non-Secure state +// Interrupt 214 <0=> Secure state <1=> Non-Secure state +// Interrupt 215 <0=> Secure state <1=> Non-Secure state +// Interrupt 216 <0=> Secure state <1=> Non-Secure state +// Interrupt 217 <0=> Secure state <1=> Non-Secure state +// Interrupt 218 <0=> Secure state <1=> Non-Secure state +// Interrupt 219 <0=> Secure state <1=> Non-Secure state +// Interrupt 220 <0=> Secure state <1=> Non-Secure state +// Interrupt 221 <0=> Secure state <1=> Non-Secure state +// Interrupt 222 <0=> Secure state <1=> Non-Secure state +// Interrupt 223 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS6_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 7 (Interrupts 224..255) +*/ +#define NVIC_INIT_ITNS7 0 + +/* +// Interrupts 224..255 +// Interrupt 224 <0=> Secure state <1=> Non-Secure state +// Interrupt 225 <0=> Secure state <1=> Non-Secure state +// Interrupt 226 <0=> Secure state <1=> Non-Secure state +// Interrupt 227 <0=> Secure state <1=> Non-Secure state +// Interrupt 228 <0=> Secure state <1=> Non-Secure state +// Interrupt 229 <0=> Secure state <1=> Non-Secure state +// Interrupt 230 <0=> Secure state <1=> Non-Secure state +// Interrupt 231 <0=> Secure state <1=> Non-Secure state +// Interrupt 232 <0=> Secure state <1=> Non-Secure state +// Interrupt 233 <0=> Secure state <1=> Non-Secure state +// Interrupt 234 <0=> Secure state <1=> Non-Secure state +// Interrupt 235 <0=> Secure state <1=> Non-Secure state +// Interrupt 236 <0=> Secure state <1=> Non-Secure state +// Interrupt 237 <0=> Secure state <1=> Non-Secure state +// Interrupt 238 <0=> Secure state <1=> Non-Secure state +// Interrupt 239 <0=> Secure state <1=> Non-Secure state +// Interrupt 240 <0=> Secure state <1=> Non-Secure state +// Interrupt 241 <0=> Secure state <1=> Non-Secure state +// Interrupt 242 <0=> Secure state <1=> Non-Secure state +// Interrupt 243 <0=> Secure state <1=> Non-Secure state +// Interrupt 244 <0=> Secure state <1=> Non-Secure state +// Interrupt 245 <0=> Secure state <1=> Non-Secure state +// Interrupt 246 <0=> Secure state <1=> Non-Secure state +// Interrupt 247 <0=> Secure state <1=> Non-Secure state +// Interrupt 248 <0=> Secure state <1=> Non-Secure state +// Interrupt 249 <0=> Secure state <1=> Non-Secure state +// Interrupt 250 <0=> Secure state <1=> Non-Secure state +// Interrupt 251 <0=> Secure state <1=> Non-Secure state +// Interrupt 252 <0=> Secure state <1=> Non-Secure state +// Interrupt 253 <0=> Secure state <1=> Non-Secure state +// Interrupt 254 <0=> Secure state <1=> Non-Secure state +// Interrupt 255 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS7_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 8 (Interrupts 256..287) +*/ +#define NVIC_INIT_ITNS8 0 + +/* +// Interrupts 256..287 +// Interrupt 256 <0=> Secure state <1=> Non-Secure state +// Interrupt 257 <0=> Secure state <1=> Non-Secure state +// Interrupt 258 <0=> Secure state <1=> Non-Secure state +// Interrupt 259 <0=> Secure state <1=> Non-Secure state +// Interrupt 260 <0=> Secure state <1=> Non-Secure state +// Interrupt 261 <0=> Secure state <1=> Non-Secure state +// Interrupt 262 <0=> Secure state <1=> Non-Secure state +// Interrupt 263 <0=> Secure state <1=> Non-Secure state +// Interrupt 264 <0=> Secure state <1=> Non-Secure state +// Interrupt 265 <0=> Secure state <1=> Non-Secure state +// Interrupt 266 <0=> Secure state <1=> Non-Secure state +// Interrupt 267 <0=> Secure state <1=> Non-Secure state +// Interrupt 268 <0=> Secure state <1=> Non-Secure state +// Interrupt 269 <0=> Secure state <1=> Non-Secure state +// Interrupt 270 <0=> Secure state <1=> Non-Secure state +// Interrupt 271 <0=> Secure state <1=> Non-Secure state +// Interrupt 272 <0=> Secure state <1=> Non-Secure state +// Interrupt 273 <0=> Secure state <1=> Non-Secure state +// Interrupt 274 <0=> Secure state <1=> Non-Secure state +// Interrupt 275 <0=> Secure state <1=> Non-Secure state +// Interrupt 276 <0=> Secure state <1=> Non-Secure state +// Interrupt 277 <0=> Secure state <1=> Non-Secure state +// Interrupt 278 <0=> Secure state <1=> Non-Secure state +// Interrupt 279 <0=> Secure state <1=> Non-Secure state +// Interrupt 280 <0=> Secure state <1=> Non-Secure state +// Interrupt 281 <0=> Secure state <1=> Non-Secure state +// Interrupt 282 <0=> Secure state <1=> Non-Secure state +// Interrupt 283 <0=> Secure state <1=> Non-Secure state +// Interrupt 284 <0=> Secure state <1=> Non-Secure state +// Interrupt 285 <0=> Secure state <1=> Non-Secure state +// Interrupt 286 <0=> Secure state <1=> Non-Secure state +// Interrupt 287 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS8_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 9 (Interrupts 288..319) +*/ +#define NVIC_INIT_ITNS9 0 + +/* +// Interrupts 288..319 +// Interrupt 288 <0=> Secure state <1=> Non-Secure state +// Interrupt 289 <0=> Secure state <1=> Non-Secure state +// Interrupt 290 <0=> Secure state <1=> Non-Secure state +// Interrupt 291 <0=> Secure state <1=> Non-Secure state +// Interrupt 292 <0=> Secure state <1=> Non-Secure state +// Interrupt 293 <0=> Secure state <1=> Non-Secure state +// Interrupt 294 <0=> Secure state <1=> Non-Secure state +// Interrupt 295 <0=> Secure state <1=> Non-Secure state +// Interrupt 296 <0=> Secure state <1=> Non-Secure state +// Interrupt 297 <0=> Secure state <1=> Non-Secure state +// Interrupt 298 <0=> Secure state <1=> Non-Secure state +// Interrupt 299 <0=> Secure state <1=> Non-Secure state +// Interrupt 300 <0=> Secure state <1=> Non-Secure state +// Interrupt 301 <0=> Secure state <1=> Non-Secure state +// Interrupt 302 <0=> Secure state <1=> Non-Secure state +// Interrupt 303 <0=> Secure state <1=> Non-Secure state +// Interrupt 304 <0=> Secure state <1=> Non-Secure state +// Interrupt 305 <0=> Secure state <1=> Non-Secure state +// Interrupt 306 <0=> Secure state <1=> Non-Secure state +// Interrupt 307 <0=> Secure state <1=> Non-Secure state +// Interrupt 308 <0=> Secure state <1=> Non-Secure state +// Interrupt 309 <0=> Secure state <1=> Non-Secure state +// Interrupt 310 <0=> Secure state <1=> Non-Secure state +// Interrupt 311 <0=> Secure state <1=> Non-Secure state +// Interrupt 312 <0=> Secure state <1=> Non-Secure state +// Interrupt 313 <0=> Secure state <1=> Non-Secure state +// Interrupt 314 <0=> Secure state <1=> Non-Secure state +// Interrupt 315 <0=> Secure state <1=> Non-Secure state +// Interrupt 316 <0=> Secure state <1=> Non-Secure state +// Interrupt 317 <0=> Secure state <1=> Non-Secure state +// Interrupt 318 <0=> Secure state <1=> Non-Secure state +// Interrupt 319 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS9_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 10 (Interrupts 320..351) +*/ +#define NVIC_INIT_ITNS10 0 + +/* +// Interrupts 320..351 +// Interrupt 320 <0=> Secure state <1=> Non-Secure state +// Interrupt 321 <0=> Secure state <1=> Non-Secure state +// Interrupt 322 <0=> Secure state <1=> Non-Secure state +// Interrupt 323 <0=> Secure state <1=> Non-Secure state +// Interrupt 324 <0=> Secure state <1=> Non-Secure state +// Interrupt 325 <0=> Secure state <1=> Non-Secure state +// Interrupt 326 <0=> Secure state <1=> Non-Secure state +// Interrupt 327 <0=> Secure state <1=> Non-Secure state +// Interrupt 328 <0=> Secure state <1=> Non-Secure state +// Interrupt 329 <0=> Secure state <1=> Non-Secure state +// Interrupt 330 <0=> Secure state <1=> Non-Secure state +// Interrupt 331 <0=> Secure state <1=> Non-Secure state +// Interrupt 332 <0=> Secure state <1=> Non-Secure state +// Interrupt 333 <0=> Secure state <1=> Non-Secure state +// Interrupt 334 <0=> Secure state <1=> Non-Secure state +// Interrupt 335 <0=> Secure state <1=> Non-Secure state +// Interrupt 336 <0=> Secure state <1=> Non-Secure state +// Interrupt 337 <0=> Secure state <1=> Non-Secure state +// Interrupt 338 <0=> Secure state <1=> Non-Secure state +// Interrupt 339 <0=> Secure state <1=> Non-Secure state +// Interrupt 340 <0=> Secure state <1=> Non-Secure state +// Interrupt 341 <0=> Secure state <1=> Non-Secure state +// Interrupt 342 <0=> Secure state <1=> Non-Secure state +// Interrupt 343 <0=> Secure state <1=> Non-Secure state +// Interrupt 344 <0=> Secure state <1=> Non-Secure state +// Interrupt 345 <0=> Secure state <1=> Non-Secure state +// Interrupt 346 <0=> Secure state <1=> Non-Secure state +// Interrupt 347 <0=> Secure state <1=> Non-Secure state +// Interrupt 348 <0=> Secure state <1=> Non-Secure state +// Interrupt 349 <0=> Secure state <1=> Non-Secure state +// Interrupt 350 <0=> Secure state <1=> Non-Secure state +// Interrupt 351 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS10_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 11 (Interrupts 352..383) +*/ +#define NVIC_INIT_ITNS11 0 + +/* +// Interrupts 352..383 +// Interrupt 352 <0=> Secure state <1=> Non-Secure state +// Interrupt 353 <0=> Secure state <1=> Non-Secure state +// Interrupt 354 <0=> Secure state <1=> Non-Secure state +// Interrupt 355 <0=> Secure state <1=> Non-Secure state +// Interrupt 356 <0=> Secure state <1=> Non-Secure state +// Interrupt 357 <0=> Secure state <1=> Non-Secure state +// Interrupt 358 <0=> Secure state <1=> Non-Secure state +// Interrupt 359 <0=> Secure state <1=> Non-Secure state +// Interrupt 360 <0=> Secure state <1=> Non-Secure state +// Interrupt 361 <0=> Secure state <1=> Non-Secure state +// Interrupt 362 <0=> Secure state <1=> Non-Secure state +// Interrupt 363 <0=> Secure state <1=> Non-Secure state +// Interrupt 364 <0=> Secure state <1=> Non-Secure state +// Interrupt 365 <0=> Secure state <1=> Non-Secure state +// Interrupt 366 <0=> Secure state <1=> Non-Secure state +// Interrupt 367 <0=> Secure state <1=> Non-Secure state +// Interrupt 368 <0=> Secure state <1=> Non-Secure state +// Interrupt 369 <0=> Secure state <1=> Non-Secure state +// Interrupt 370 <0=> Secure state <1=> Non-Secure state +// Interrupt 371 <0=> Secure state <1=> Non-Secure state +// Interrupt 372 <0=> Secure state <1=> Non-Secure state +// Interrupt 373 <0=> Secure state <1=> Non-Secure state +// Interrupt 374 <0=> Secure state <1=> Non-Secure state +// Interrupt 375 <0=> Secure state <1=> Non-Secure state +// Interrupt 376 <0=> Secure state <1=> Non-Secure state +// Interrupt 377 <0=> Secure state <1=> Non-Secure state +// Interrupt 378 <0=> Secure state <1=> Non-Secure state +// Interrupt 379 <0=> Secure state <1=> Non-Secure state +// Interrupt 380 <0=> Secure state <1=> Non-Secure state +// Interrupt 381 <0=> Secure state <1=> Non-Secure state +// Interrupt 382 <0=> Secure state <1=> Non-Secure state +// Interrupt 383 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS11_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 12 (Interrupts 384..415) +*/ +#define NVIC_INIT_ITNS12 0 + +/* +// Interrupts 384..415 +// Interrupt 384 <0=> Secure state <1=> Non-Secure state +// Interrupt 385 <0=> Secure state <1=> Non-Secure state +// Interrupt 386 <0=> Secure state <1=> Non-Secure state +// Interrupt 387 <0=> Secure state <1=> Non-Secure state +// Interrupt 388 <0=> Secure state <1=> Non-Secure state +// Interrupt 389 <0=> Secure state <1=> Non-Secure state +// Interrupt 390 <0=> Secure state <1=> Non-Secure state +// Interrupt 391 <0=> Secure state <1=> Non-Secure state +// Interrupt 392 <0=> Secure state <1=> Non-Secure state +// Interrupt 393 <0=> Secure state <1=> Non-Secure state +// Interrupt 394 <0=> Secure state <1=> Non-Secure state +// Interrupt 395 <0=> Secure state <1=> Non-Secure state +// Interrupt 396 <0=> Secure state <1=> Non-Secure state +// Interrupt 397 <0=> Secure state <1=> Non-Secure state +// Interrupt 398 <0=> Secure state <1=> Non-Secure state +// Interrupt 399 <0=> Secure state <1=> Non-Secure state +// Interrupt 400 <0=> Secure state <1=> Non-Secure state +// Interrupt 401 <0=> Secure state <1=> Non-Secure state +// Interrupt 402 <0=> Secure state <1=> Non-Secure state +// Interrupt 403 <0=> Secure state <1=> Non-Secure state +// Interrupt 404 <0=> Secure state <1=> Non-Secure state +// Interrupt 405 <0=> Secure state <1=> Non-Secure state +// Interrupt 406 <0=> Secure state <1=> Non-Secure state +// Interrupt 407 <0=> Secure state <1=> Non-Secure state +// Interrupt 408 <0=> Secure state <1=> Non-Secure state +// Interrupt 409 <0=> Secure state <1=> Non-Secure state +// Interrupt 410 <0=> Secure state <1=> Non-Secure state +// Interrupt 411 <0=> Secure state <1=> Non-Secure state +// Interrupt 412 <0=> Secure state <1=> Non-Secure state +// Interrupt 413 <0=> Secure state <1=> Non-Secure state +// Interrupt 414 <0=> Secure state <1=> Non-Secure state +// Interrupt 415 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS12_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 13 (Interrupts 416..447) +*/ +#define NVIC_INIT_ITNS13 0 + +/* +// Interrupts 416..447 +// Interrupt 416 <0=> Secure state <1=> Non-Secure state +// Interrupt 417 <0=> Secure state <1=> Non-Secure state +// Interrupt 418 <0=> Secure state <1=> Non-Secure state +// Interrupt 419 <0=> Secure state <1=> Non-Secure state +// Interrupt 420 <0=> Secure state <1=> Non-Secure state +// Interrupt 421 <0=> Secure state <1=> Non-Secure state +// Interrupt 422 <0=> Secure state <1=> Non-Secure state +// Interrupt 423 <0=> Secure state <1=> Non-Secure state +// Interrupt 424 <0=> Secure state <1=> Non-Secure state +// Interrupt 425 <0=> Secure state <1=> Non-Secure state +// Interrupt 426 <0=> Secure state <1=> Non-Secure state +// Interrupt 427 <0=> Secure state <1=> Non-Secure state +// Interrupt 428 <0=> Secure state <1=> Non-Secure state +// Interrupt 429 <0=> Secure state <1=> Non-Secure state +// Interrupt 430 <0=> Secure state <1=> Non-Secure state +// Interrupt 431 <0=> Secure state <1=> Non-Secure state +// Interrupt 432 <0=> Secure state <1=> Non-Secure state +// Interrupt 433 <0=> Secure state <1=> Non-Secure state +// Interrupt 434 <0=> Secure state <1=> Non-Secure state +// Interrupt 435 <0=> Secure state <1=> Non-Secure state +// Interrupt 436 <0=> Secure state <1=> Non-Secure state +// Interrupt 437 <0=> Secure state <1=> Non-Secure state +// Interrupt 438 <0=> Secure state <1=> Non-Secure state +// Interrupt 439 <0=> Secure state <1=> Non-Secure state +// Interrupt 440 <0=> Secure state <1=> Non-Secure state +// Interrupt 441 <0=> Secure state <1=> Non-Secure state +// Interrupt 442 <0=> Secure state <1=> Non-Secure state +// Interrupt 443 <0=> Secure state <1=> Non-Secure state +// Interrupt 444 <0=> Secure state <1=> Non-Secure state +// Interrupt 445 <0=> Secure state <1=> Non-Secure state +// Interrupt 446 <0=> Secure state <1=> Non-Secure state +// Interrupt 447 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS13_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 14 (Interrupts 448..479) +*/ +#define NVIC_INIT_ITNS14 0 + +/* +// Interrupts 448..479 +// Interrupt 448 <0=> Secure state <1=> Non-Secure state +// Interrupt 449 <0=> Secure state <1=> Non-Secure state +// Interrupt 450 <0=> Secure state <1=> Non-Secure state +// Interrupt 451 <0=> Secure state <1=> Non-Secure state +// Interrupt 452 <0=> Secure state <1=> Non-Secure state +// Interrupt 453 <0=> Secure state <1=> Non-Secure state +// Interrupt 454 <0=> Secure state <1=> Non-Secure state +// Interrupt 455 <0=> Secure state <1=> Non-Secure state +// Interrupt 456 <0=> Secure state <1=> Non-Secure state +// Interrupt 457 <0=> Secure state <1=> Non-Secure state +// Interrupt 458 <0=> Secure state <1=> Non-Secure state +// Interrupt 459 <0=> Secure state <1=> Non-Secure state +// Interrupt 460 <0=> Secure state <1=> Non-Secure state +// Interrupt 461 <0=> Secure state <1=> Non-Secure state +// Interrupt 462 <0=> Secure state <1=> Non-Secure state +// Interrupt 463 <0=> Secure state <1=> Non-Secure state +// Interrupt 464 <0=> Secure state <1=> Non-Secure state +// Interrupt 465 <0=> Secure state <1=> Non-Secure state +// Interrupt 466 <0=> Secure state <1=> Non-Secure state +// Interrupt 467 <0=> Secure state <1=> Non-Secure state +// Interrupt 468 <0=> Secure state <1=> Non-Secure state +// Interrupt 469 <0=> Secure state <1=> Non-Secure state +// Interrupt 470 <0=> Secure state <1=> Non-Secure state +// Interrupt 471 <0=> Secure state <1=> Non-Secure state +// Interrupt 472 <0=> Secure state <1=> Non-Secure state +// Interrupt 473 <0=> Secure state <1=> Non-Secure state +// Interrupt 474 <0=> Secure state <1=> Non-Secure state +// Interrupt 475 <0=> Secure state <1=> Non-Secure state +// Interrupt 476 <0=> Secure state <1=> Non-Secure state +// Interrupt 477 <0=> Secure state <1=> Non-Secure state +// Interrupt 478 <0=> Secure state <1=> Non-Secure state +// Interrupt 479 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS14_VAL 0x00000000 + +/* +// +*/ + +/* +// Initialize ITNS 15 (Interrupts 480..511) +*/ +#define NVIC_INIT_ITNS15 0 + +/* +// Interrupts 480..511 +// Interrupt 480 <0=> Secure state <1=> Non-Secure state +// Interrupt 481 <0=> Secure state <1=> Non-Secure state +// Interrupt 482 <0=> Secure state <1=> Non-Secure state +// Interrupt 483 <0=> Secure state <1=> Non-Secure state +// Interrupt 484 <0=> Secure state <1=> Non-Secure state +// Interrupt 485 <0=> Secure state <1=> Non-Secure state +// Interrupt 486 <0=> Secure state <1=> Non-Secure state +// Interrupt 487 <0=> Secure state <1=> Non-Secure state +// Interrupt 488 <0=> Secure state <1=> Non-Secure state +// Interrupt 489 <0=> Secure state <1=> Non-Secure state +// Interrupt 490 <0=> Secure state <1=> Non-Secure state +// Interrupt 491 <0=> Secure state <1=> Non-Secure state +// Interrupt 492 <0=> Secure state <1=> Non-Secure state +// Interrupt 493 <0=> Secure state <1=> Non-Secure state +// Interrupt 494 <0=> Secure state <1=> Non-Secure state +// Interrupt 495 <0=> Secure state <1=> Non-Secure state +// Interrupt 496 <0=> Secure state <1=> Non-Secure state +// Interrupt 497 <0=> Secure state <1=> Non-Secure state +// Interrupt 498 <0=> Secure state <1=> Non-Secure state +// Interrupt 499 <0=> Secure state <1=> Non-Secure state +// Interrupt 500 <0=> Secure state <1=> Non-Secure state +// Interrupt 501 <0=> Secure state <1=> Non-Secure state +// Interrupt 502 <0=> Secure state <1=> Non-Secure state +// Interrupt 503 <0=> Secure state <1=> Non-Secure state +// Interrupt 504 <0=> Secure state <1=> Non-Secure state +// Interrupt 505 <0=> Secure state <1=> Non-Secure state +// Interrupt 506 <0=> Secure state <1=> Non-Secure state +// Interrupt 507 <0=> Secure state <1=> Non-Secure state +// Interrupt 508 <0=> Secure state <1=> Non-Secure state +// Interrupt 509 <0=> Secure state <1=> Non-Secure state +// Interrupt 510 <0=> Secure state <1=> Non-Secure state +// Interrupt 511 <0=> Secure state <1=> Non-Secure state +*/ +#define NVIC_INIT_ITNS15_VAL 0x00000000 + +/* +// +*/ + +/* +// +*/ + + + +/* + max 128 SAU regions. + SAU regions are defined in partition.h + */ + +#define SAU_INIT_REGION(n) \ + SAU->RNR = (n & SAU_RNR_REGION_Msk); \ + SAU->RBAR = (SAU_INIT_START##n & SAU_RBAR_BADDR_Msk); \ + SAU->RLAR = (SAU_INIT_END##n & SAU_RLAR_LADDR_Msk) | \ + ((SAU_INIT_NSC##n << SAU_RLAR_NSC_Pos) & SAU_RLAR_NSC_Msk) | 1U + +/** + \brief Setup a SAU Region + \details Writes the region information contained in SAU_Region to the + registers SAU_RNR, SAU_RBAR, and SAU_RLAR + */ +__STATIC_INLINE void TZ_SAU_Setup (void) +{ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + + #if defined (SAU_INIT_REGION0) && (SAU_INIT_REGION0 == 1U) + SAU_INIT_REGION(0); + #endif + + #if defined (SAU_INIT_REGION1) && (SAU_INIT_REGION1 == 1U) + SAU_INIT_REGION(1); + #endif + + #if defined (SAU_INIT_REGION2) && (SAU_INIT_REGION2 == 1U) + SAU_INIT_REGION(2); + #endif + + #if defined (SAU_INIT_REGION3) && (SAU_INIT_REGION3 == 1U) + SAU_INIT_REGION(3); + #endif + + #if defined (SAU_INIT_REGION4) && (SAU_INIT_REGION4 == 1U) + SAU_INIT_REGION(4); + #endif + + #if defined (SAU_INIT_REGION5) && (SAU_INIT_REGION5 == 1U) + SAU_INIT_REGION(5); + #endif + + #if defined (SAU_INIT_REGION6) && (SAU_INIT_REGION6 == 1U) + SAU_INIT_REGION(6); + #endif + + #if defined (SAU_INIT_REGION7) && (SAU_INIT_REGION7 == 1U) + SAU_INIT_REGION(7); + #endif + + /* repeat this for all possible SAU regions */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + + + #if defined (SAU_INIT_CTRL) && (SAU_INIT_CTRL == 1U) + SAU->CTRL = ((SAU_INIT_CTRL_ENABLE << SAU_CTRL_ENABLE_Pos) & SAU_CTRL_ENABLE_Msk) | + ((SAU_INIT_CTRL_ALLNS << SAU_CTRL_ALLNS_Pos) & SAU_CTRL_ALLNS_Msk); + #endif + + #if defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) + SCB->SCR = (SCB->SCR & ~(SCB_SCR_SLEEPDEEPS_Msk )) | + ((SCB_CSR_DEEPSLEEPS_VAL << SCB_SCR_SLEEPDEEPS_Pos) & SCB_SCR_SLEEPDEEPS_Msk); + + SCB->AIRCR = (SCB->AIRCR & ~(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_SYSRESETREQS_Msk | + SCB_AIRCR_BFHFNMINS_Msk | SCB_AIRCR_PRIS_Msk )) | + ((0x05FAU << SCB_AIRCR_VECTKEY_Pos) & SCB_AIRCR_VECTKEY_Msk) | + ((SCB_AIRCR_SYSRESETREQS_VAL << SCB_AIRCR_SYSRESETREQS_Pos) & SCB_AIRCR_SYSRESETREQS_Msk) | + ((SCB_AIRCR_PRIS_VAL << SCB_AIRCR_PRIS_Pos) & SCB_AIRCR_PRIS_Msk) | + ((SCB_AIRCR_BFHFNMINS_VAL << SCB_AIRCR_BFHFNMINS_Pos) & SCB_AIRCR_BFHFNMINS_Msk); + #endif /* defined (SCB_CSR_AIRCR_INIT) && (SCB_CSR_AIRCR_INIT == 1U) */ + + #if (((defined (__FPU_USED) && (__FPU_USED == 1U)) || \ + (defined (__ARM_FEATURE_MVE) && (__ARM_FEATURE_MVE > 0))) && \ + (defined (TZ_FPU_NS_USAGE) && (TZ_FPU_NS_USAGE == 1U))) + + SCB->NSACR = (SCB->NSACR & ~(SCB_NSACR_CP10_Msk | SCB_NSACR_CP11_Msk)) | + ((SCB_NSACR_CP10_11_VAL << SCB_NSACR_CP10_Pos) & (SCB_NSACR_CP10_Msk | SCB_NSACR_CP11_Msk)); + + FPU->FPCCR = (FPU->FPCCR & ~(FPU_FPCCR_TS_Msk | FPU_FPCCR_CLRONRETS_Msk | FPU_FPCCR_CLRONRET_Msk)) | + ((FPU_FPCCR_TS_VAL << FPU_FPCCR_TS_Pos ) & FPU_FPCCR_TS_Msk ) | + ((FPU_FPCCR_CLRONRETS_VAL << FPU_FPCCR_CLRONRETS_Pos) & FPU_FPCCR_CLRONRETS_Msk) | + ((FPU_FPCCR_CLRONRET_VAL << FPU_FPCCR_CLRONRET_Pos ) & FPU_FPCCR_CLRONRET_Msk ); + #endif + + #if defined (NVIC_INIT_ITNS0) && (NVIC_INIT_ITNS0 == 1U) + NVIC->ITNS[0] = NVIC_INIT_ITNS0_VAL; + #endif + + #if defined (NVIC_INIT_ITNS1) && (NVIC_INIT_ITNS1 == 1U) + NVIC->ITNS[1] = NVIC_INIT_ITNS1_VAL; + #endif + + #if defined (NVIC_INIT_ITNS2) && (NVIC_INIT_ITNS2 == 1U) + NVIC->ITNS[2] = NVIC_INIT_ITNS2_VAL; + #endif + + #if defined (NVIC_INIT_ITNS3) && (NVIC_INIT_ITNS3 == 1U) + NVIC->ITNS[3] = NVIC_INIT_ITNS3_VAL; + #endif + + #if defined (NVIC_INIT_ITNS4) && (NVIC_INIT_ITNS4 == 1U) + NVIC->ITNS[4] = NVIC_INIT_ITNS4_VAL; + #endif + + #if defined (NVIC_INIT_ITNS5) && (NVIC_INIT_ITNS5 == 1U) + NVIC->ITNS[5] = NVIC_INIT_ITNS5_VAL; + #endif + + #if defined (NVIC_INIT_ITNS6) && (NVIC_INIT_ITNS6 == 1U) + NVIC->ITNS[6] = NVIC_INIT_ITNS6_VAL; + #endif + + #if defined (NVIC_INIT_ITNS7) && (NVIC_INIT_ITNS7 == 1U) + NVIC->ITNS[7] = NVIC_INIT_ITNS7_VAL; + #endif + + #if defined (NVIC_INIT_ITNS8) && (NVIC_INIT_ITNS8 == 1U) + NVIC->ITNS[8] = NVIC_INIT_ITNS8_VAL; + #endif + + #if defined (NVIC_INIT_ITNS9) && (NVIC_INIT_ITNS9 == 1U) + NVIC->ITNS[9] = NVIC_INIT_ITNS9_VAL; + #endif + + #if defined (NVIC_INIT_ITNS10) && (NVIC_INIT_ITNS10 == 1U) + NVIC->ITNS[10] = NVIC_INIT_ITNS10_VAL; + #endif + + #if defined (NVIC_INIT_ITNS11) && (NVIC_INIT_ITNS11 == 1U) + NVIC->ITNS[11] = NVIC_INIT_ITNS11_VAL; + #endif + + #if defined (NVIC_INIT_ITNS12) && (NVIC_INIT_ITNS12 == 1U) + NVIC->ITNS[12] = NVIC_INIT_ITNS12_VAL; + #endif + + #if defined (NVIC_INIT_ITNS13) && (NVIC_INIT_ITNS13 == 1U) + NVIC->ITNS[13] = NVIC_INIT_ITNS13_VAL; + #endif + + #if defined (NVIC_INIT_ITNS14) && (NVIC_INIT_ITNS14 == 1U) + NVIC->ITNS[14] = NVIC_INIT_ITNS14_VAL; + #endif + + #if defined (NVIC_INIT_ITNS15) && (NVIC_INIT_ITNS15 == 1U) + NVIC->ITNS[15] = NVIC_INIT_ITNS15_VAL; + #endif + + /* repeat this for all possible ITNS elements */ + +} + +#endif // CONFIG_TRUSTED_EXECUTION_SECURE + +#endif // LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32657_SOURCE_TEMPLATE_PARTITION_MAX32657_H_ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/sla_header_max32657.c b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/sla_header_max32657.c new file mode 100644 index 00000000000..813cc82b138 --- /dev/null +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/sla_header_max32657.c @@ -0,0 +1,50 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/***** Includes *****/ +#include +#include + +extern uint32_t _application_end; + +#define SLA_HEADER_MAGIC0 0xBF1421E4 +#define SLA_HEADER_MAGIC1 0x461A8CF5 +#define SLA_HEADER_VERSION 0x00000001 +#define SLA_HEADER_ALGORITHM_ECDSA 0x516A0001 +#define SLA_HEADER_RESERVED 0x00000000 + +typedef struct { + uint32_t magic0; + uint32_t magic1; + uint32_t version; + uint32_t verifytype; + uint32_t sigaddress; + uint32_t reserved5; + uint32_t reserved6; + uint32_t reserved7; +} flash_app_header_t; + +__attribute__((section(".sla_header"))) __attribute__((__used__)) +const flash_app_header_t sla_header = { .magic0 = SLA_HEADER_MAGIC0, + .magic1 = SLA_HEADER_MAGIC1, + .version = SLA_HEADER_VERSION, + .verifytype = SLA_HEADER_ALGORITHM_ECDSA, + .sigaddress = (uint32_t)&_application_end, + .reserved5 = SLA_HEADER_RESERVED, + .reserved6 = SLA_HEADER_RESERVED, + .reserved7 = SLA_HEADER_RESERVED }; diff --git a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/system_max32657.c b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/system_max32657.c index ac9719da57d..5e24e6a32ef 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32657/Source/system_max32657.c +++ b/Libraries/CMSIS/Device/Maxim/MAX32657/Source/system_max32657.c @@ -21,10 +21,23 @@ #include #include #include "mxc_sys.h" +#include "mxc_errors.h" #include "max32657.h" #include "system_max32657.h" -#include "partition_max32657.h" #include "gcr_regs.h" +#include "mpc.h" + +#if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +#include "partition_max32657.h" + +// From linker script. +extern uint32_t _nonsecure_start, _nonsecure_end; + +#define VECTOR_TABLE_START_ADDR_NS \ + (uint32_t)(&_nonsecure_start) // Now setting the start of the vector table using a linker symbol +#define MXC_Reset_Handler_NS (mxc_ns_call_t) * ((uint32_t *)(VECTOR_TABLE_START_ADDR_NS + 4)) +#define MXC_MSP_NS *((uint32_t *)(VECTOR_TABLE_START_ADDR_NS)) +#endif extern void (*const __isr_vector[])(void); @@ -84,7 +97,8 @@ __weak void SystemCoreClockUpdate(void) SystemCoreClock = base_freq >> div; } -/* This function is called before C runtime initialization and can be +/** + * This function is called before C runtime initialization and can be * implemented by the application for early initializations. If a value other * than '0' is returned, the C runtime initialization will be skipped. * @@ -95,12 +109,11 @@ __weak void SystemCoreClockUpdate(void) __weak int PreInit(void) { /* Do nothing */ - // TODO(JC): No SIMO on this device, confirm nothing needs to be done here. - // (SW): Correct, different power HW. return 0; } -/* This function is called before the Board_Init function. This weak +/** + * This function is called before the Board_Init function. This weak * implementation does nothing, but you may over-ride this function in your * program if you want to configure the state of all pins prior to the * application running. This is useful when using external tools (like a @@ -118,7 +131,8 @@ __weak int Board_Init(void) return 0; } -/* This function is called just before control is transferred to main(). +/** + * This function is called just before control is transferred to main(). * * You may over-ride this function in your program by defining a custom * SystemInit(), but care should be taken to reproduce the initialization @@ -135,19 +149,20 @@ __weak void SystemInit(void) SCB->CPACR |= SCB_CPACR_CP10_Msk | SCB_CPACR_CP11_Msk; #endif /* __FPU_PRESENT check */ - /* - Enable Unaligned Access Trapping to throw an exception when there is an - unaligned memory access while unaligned access support is disabled. - - Note: ARMv8-M without the Main Extension disables unaligned access by default. - */ + /** + * Enable Unaligned Access Trapping to throw an exception when there is an + * unaligned memory access while unaligned access support is disabled. + * + * Note: ARMv8-M without the Main Extension disables unaligned access by default. + */ #if defined(UNALIGNED_SUPPORT_DISABLE) || defined(__ARM_FEATURE_UNALIGNED) SCB->CCR |= SCB_CCR_UNALIGN_TRP_Msk; #endif /* Security Extension Features */ -#if IS_SECURE_ENVIRONMENT +#if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) /* Settings for TrustZone SAU setup are defined in partitions_max32657.h */ + /* Set up secure and non-secure regions with SAU. */ TZ_SAU_Setup(); #endif /* TrustZone */ @@ -168,3 +183,64 @@ __weak void SystemInit(void) PinInit(); Board_Init(); } + +#if defined(__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + * This function is called in Secure code just before control + * is transferred to non-secure world. Only available when + * trustzone feature is used. + * + * You may over-ride this function in your program by defining a custom + * NonSecure_Init(), but care should be taken to reproduce the initialization + * steps to non-secure code. + * + * Caller must be aware of configuring MPC, SPC, and NSPC before this + * function is called. + * + * Function should never return if successful. + */ +__weak int NonSecure_Init(void) +{ + int error; + mxc_ns_call_t Reset_Handler_NS; + + // Secure world must enable FPU for non-secure world. (Turned off by default). +#if (__FPU_PRESENT == 1U) + /* Enable FPU - coprocessor slots 10 & 11 full access */ + SCB_NS->CPACR |= SCB_CPACR_CP10_Msk | SCB_CPACR_CP11_Msk; +#endif /* __FPU_PRESENT check */ + + // Setup Non-Secure vector table. + // Global symbols defined in Libraries/CMSIS/Device/Maxim/MAX32657/Source/GCC/nonsecure_load.S + // indicates the beginning of the nonsecure image, which starts at the vector table. + SCB_NS->VTOR = VECTOR_TABLE_START_ADDR_NS; + + // Setup Non-Secure Main Stack Pointer (MSP_NS). + // Start of vector table contains top of stack value. + __TZ_set_MSP_NS(MXC_MSP_NS); + + // Get Non-Secure Reset_Handler. + Reset_Handler_NS = MXC_Reset_Handler_NS; + + // Set MPCs for Non-Secure region. + // (Not setting up Secure regions as, by default, MPC regions are set as secure on startup). + error = MXC_MPC_SetNonSecure((uint32_t)(&_nonsecure_start), (uint32_t)(&_nonsecure_end)); + if (error != E_NO_ERROR) { + return error; + } + + // Lock MPCs. + MXC_MPC_Lock(MXC_MPC_FLASH); + MXC_MPC_Lock(MXC_MPC_SRAM0); + MXC_MPC_Lock(MXC_MPC_SRAM1); + MXC_MPC_Lock(MXC_MPC_SRAM2); + MXC_MPC_Lock(MXC_MPC_SRAM3); + MXC_MPC_Lock(MXC_MPC_SRAM4); + + // Start Non-Secure code. + Reset_Handler_NS(); + + // Should not reach here if switching to non-secure world was successful. + return E_FAIL; +} +#endif diff --git a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/aes_key_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/aes_key_regs.h deleted file mode 100644 index ca5707be90b..00000000000 --- a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/aes_key_regs.h +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @file aes_key_regs.h - * @brief Registers, Bit Masks and Bit Positions for the AES_KEY Peripheral Module. - * @note This file is @deprecated. - */ - -/****************************************************************************** - * - * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by - * Analog Devices, Inc.), - * Copyright (C) 2023-2024 Analog Devices, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -#ifndef LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32675_INCLUDE_AES_KEY_REGS_H_ -#define LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32675_INCLUDE_AES_KEY_REGS_H_ - -#warning "DEPRECATED(1-10-2023): aes_key_regs.h - Scheduled for removal. Please use aeskeys_regs.h." - -/* **** Includes **** */ -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined (__ICCARM__) - #pragma system_include -#endif - -#if defined (__CC_ARM) - #pragma anon_unions -#endif -/// @cond -/* - If types are not defined elsewhere (CMSIS) define them here -*/ -#ifndef __IO -#define __IO volatile -#endif -#ifndef __I -#define __I volatile const -#endif -#ifndef __O -#define __O volatile -#endif -#ifndef __R -#define __R volatile const -#endif -/// @endcond - -/* **** Definitions **** */ - -/** - * @ingroup aes_key - * @defgroup aes_key_registers AES_KEY_Registers - * @brief Registers, Bit Masks and Bit Positions for the AES_KEY Peripheral Module. - * @details AES Key Registers. - */ - -/** - * @ingroup aes_key_registers - * Structure type to access the AES_KEY Registers. - */ -#if defined(__GNUC__) -__attribute__((deprecated("mxc_aes_key_regs_t struct and aes_key_regs.h no longer supported. Use aeskeys_regs.h and MXC_AESKEYS (mxc_aeskeys_regs_t) for AES Key Access. 1-10-2023"))) -#else -#warning "mxc_aes_key_regs_t struct and aes_key_regs.h no longer supported. Use aeskeys_regs.h and MXC_AESKEYS (mxc_aeskeys_regs_t) for AES Key Access. 1-10-2023" -#endif -typedef struct { - __IO uint32_t aes_key0; /**< \b 0x00: AES_KEY AES_KEY0 Register */ - __IO uint32_t aes_key1; /**< \b 0x04: AES_KEY AES_KEY1 Register */ - __IO uint32_t aes_key2; /**< \b 0x08: AES_KEY AES_KEY2 Register */ - __IO uint32_t aes_key3; /**< \b 0x0C: AES_KEY AES_KEY3 Register */ - __IO uint32_t aes_key4; /**< \b 0x10: AES_KEY AES_KEY4 Register */ - __IO uint32_t aes_key5; /**< \b 0x14: AES_KEY AES_KEY5 Register */ - __IO uint32_t aes_key6; /**< \b 0x18: AES_KEY AES_KEY6 Register */ - __IO uint32_t aes_key7; /**< \b 0x1C: AES_KEY AES_KEY7 Register */ -} mxc_aes_key_regs_t; - -/* Register offsets for module AES_KEY */ -/** - * @ingroup aes_key_registers - * @defgroup AES_KEY_Register_Offsets Register Offsets - * @brief AES_KEY Peripheral Register Offsets from the AES_KEY Base Peripheral Address. - * @{ - */ -#define MXC_R_AES_KEY_AES_KEY0 ((uint32_t)0x00000000UL) /**< Offset from AES_KEY Base Address: 0x0000 */ -#define MXC_R_AES_KEY_AES_KEY1 ((uint32_t)0x00000004UL) /**< Offset from AES_KEY Base Address: 0x0004 */ -#define MXC_R_AES_KEY_AES_KEY2 ((uint32_t)0x00000008UL) /**< Offset from AES_KEY Base Address: 0x0008 */ -#define MXC_R_AES_KEY_AES_KEY3 ((uint32_t)0x0000000CUL) /**< Offset from AES_KEY Base Address: 0x000C */ -#define MXC_R_AES_KEY_AES_KEY4 ((uint32_t)0x00000010UL) /**< Offset from AES_KEY Base Address: 0x0010 */ -#define MXC_R_AES_KEY_AES_KEY5 ((uint32_t)0x00000014UL) /**< Offset from AES_KEY Base Address: 0x0014 */ -#define MXC_R_AES_KEY_AES_KEY6 ((uint32_t)0x00000018UL) /**< Offset from AES_KEY Base Address: 0x0018 */ -#define MXC_R_AES_KEY_AES_KEY7 ((uint32_t)0x0000001CUL) /**< Offset from AES_KEY Base Address: 0x001C */ -/**@} end of group aes_key_registers */ - -#ifdef __cplusplus -} -#endif - -#endif // LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32675_INCLUDE_AES_KEY_REGS_H_ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/afe_adc_one_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/afe_adc_one_regs.h index b7f2b95cf9b..27c4e423336 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/afe_adc_one_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/afe_adc_one_regs.h @@ -7,9 +7,7 @@ /****************************************************************************** * - * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by - * Analog Devices, Inc.), - * Copyright (C) 2023-2024 Analog Devices, Inc. + * Copyright (C) 2024 Analog Devices, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -352,20 +350,20 @@ extern "C" { */ #define MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS 0 /**< CTRL_REF_SEL Position */ #define MXC_F_AFE_ADC_ONE_CTRL_REF_SEL ((uint8_t)(0x7UL << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS)) /**< CTRL_REF_SEL Mask */ -#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N ((uint8_t)0x0UL) /**< CTRL_REF_SEL_REF0P_AND_REF0N Value */ -#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_REF0N Setting */ +#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AIN1N ((uint8_t)0x0UL) /**< CTRL_REF_SEL_AIN0P_AND_AIN1N Value */ +#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AIN1N (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AIN1N << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AIN0P_AND_AIN1N Setting */ #define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_REF1N ((uint8_t)0x1UL) /**< CTRL_REF_SEL_REF1P_AND_REF1N Value */ #define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_REF1N (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_REF1N << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF1P_AND_REF1N Setting */ -#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_REF2N ((uint8_t)0x2UL) /**< CTRL_REF_SEL_REF2P_AND_REF2N Value */ -#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_REF2N (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_REF2N << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF2P_AND_REF2N Setting */ +#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N ((uint8_t)0x2UL) /**< CTRL_REF_SEL_REF0P_AND_REF0N Value */ +#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_REF0N Setting */ #define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AVDD_AND_AGND ((uint8_t)0x3UL) /**< CTRL_REF_SEL_AVDD_AND_AGND Value */ #define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_AVDD_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AVDD_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AVDD_AND_AGND Setting */ -#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND ((uint8_t)0x4UL) /**< CTRL_REF_SEL_REF0P_AND_AGND Value */ -#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_AGND Setting */ +#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AGND ((uint8_t)0x4UL) /**< CTRL_REF_SEL_AIN0P_AND_AGND Value */ +#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AIN0P_AND_AGND Setting */ #define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_AGND ((uint8_t)0x5UL) /**< CTRL_REF_SEL_REF1P_AND_AGND Value */ #define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF1P_AND_AGND Setting */ -#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_AGND ((uint8_t)0x6UL) /**< CTRL_REF_SEL_REF2P_AND_AGND Value */ -#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF2P_AND_AGND Setting */ +#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND ((uint8_t)0x6UL) /**< CTRL_REF_SEL_REF0P_AND_AGND Value */ +#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_AGND Setting */ #define MXC_F_AFE_ADC_ONE_CTRL_REFBUFN_EN_POS 3 /**< CTRL_REFBUFN_EN Position */ #define MXC_F_AFE_ADC_ONE_CTRL_REFBUFN_EN ((uint8_t)(0x1UL << MXC_F_AFE_ADC_ONE_CTRL_REFBUFN_EN_POS)) /**< CTRL_REFBUFN_EN Mask */ @@ -563,7 +561,10 @@ extern "C" { * @{ */ #define MXC_F_AFE_ADC_ONE_PART_ID_REV_ID_POS 0 /**< PART_ID_REV_ID Position */ -#define MXC_F_AFE_ADC_ONE_PART_ID_REV_ID ((uint32_t)(0x7UL << MXC_F_AFE_ADC_ONE_PART_ID_REV_ID_POS)) /**< PART_ID_REV_ID Mask */ +#define MXC_F_AFE_ADC_ONE_PART_ID_REV_ID ((uint32_t)(0x1FUL << MXC_F_AFE_ADC_ONE_PART_ID_REV_ID_POS)) /**< PART_ID_REV_ID Mask */ + +#define MXC_F_AFE_ADC_ONE_PART_ID_ADC_SEL_POS 5 /**< PART_ID_ADC_SEL Position */ +#define MXC_F_AFE_ADC_ONE_PART_ID_ADC_SEL ((uint32_t)(0x1UL << MXC_F_AFE_ADC_ONE_PART_ID_ADC_SEL_POS)) /**< PART_ID_ADC_SEL Mask */ /**@} end of group AFE_ADC_ONE_PART_ID_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/afe_adc_zero_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/afe_adc_zero_regs.h index 76639b86306..ab92522de26 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/afe_adc_zero_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/afe_adc_zero_regs.h @@ -7,9 +7,7 @@ /****************************************************************************** * - * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by - * Analog Devices, Inc.), - * Copyright (C) 2023-2024 Analog Devices, Inc. + * Copyright (C) 2024 Analog Devices, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -93,7 +91,6 @@ extern "C" { #define MXC_R_AFE_ADC_ZERO_PGA ((uint32_t)0x000E0001UL) /**< Offset from AFE_ADC_ZERO Base Address: 0xE0001 */ #define MXC_R_AFE_ADC_ZERO_WAIT_EXT ((uint32_t)0x000F0001UL) /**< Offset from AFE_ADC_ZERO Base Address: 0xF0001 */ #define MXC_R_AFE_ADC_ZERO_WAIT_START ((uint32_t)0x00100001UL) /**< Offset from AFE_ADC_ZERO Base Address: 0x100001 */ -#define MXC_R_AFE_ADC_ZERO_PART_ID ((uint32_t)0x00110003UL) /**< Offset from AFE_ADC_ZERO Base Address: 0x110003 */ #define MXC_R_AFE_ADC_ZERO_SYSC_SEL ((uint32_t)0x00120003UL) /**< Offset from AFE_ADC_ZERO Base Address: 0x120003 */ #define MXC_R_AFE_ADC_ZERO_SYS_OFF_A ((uint32_t)0x00130003UL) /**< Offset from AFE_ADC_ZERO Base Address: 0x130003 */ #define MXC_R_AFE_ADC_ZERO_SYS_OFF_B ((uint32_t)0x00140003UL) /**< Offset from AFE_ADC_ZERO Base Address: 0x140003 */ @@ -194,6 +191,7 @@ extern "C" { #define MXC_R_AFE_ADC_ZERO_ANA_TRIM ((uint32_t)0x00790002UL) /**< Offset from AFE_ADC_ZERO Base Address: 0x790002 */ #define MXC_R_AFE_ADC_ZERO_SYS_CTRL ((uint32_t)0x007A0001UL) /**< Offset from AFE_ADC_ZERO Base Address: 0x7A0001 */ #define MXC_R_AFE_ADC_ZERO_TS_CTRL ((uint32_t)0x007C0001UL) /**< Offset from AFE_ADC_ZERO Base Address: 0x7C0001 */ +#define MXC_R_AFE_ADC_ZERO_PART_ID ((uint32_t)0x00910003UL) /**< Offset from AFE_ADC_ZERO Base Address: 0x910003 */ /**@} end of group afe_adc_zero_registers */ /** @@ -352,20 +350,20 @@ extern "C" { */ #define MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS 0 /**< CTRL_REF_SEL Position */ #define MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL ((uint8_t)(0x7UL << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS)) /**< CTRL_REF_SEL Mask */ -#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N ((uint8_t)0x0UL) /**< CTRL_REF_SEL_REF0P_AND_REF0N Value */ -#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_REF0N Setting */ +#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AIN1N ((uint8_t)0x0UL) /**< CTRL_REF_SEL_AIN0P_AND_AIN1N Value */ +#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AIN1N (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AIN1N << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AIN0P_AND_AIN1N Setting */ #define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_REF1N ((uint8_t)0x1UL) /**< CTRL_REF_SEL_REF1P_AND_REF1N Value */ #define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_REF1N (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_REF1N << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF1P_AND_REF1N Setting */ -#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_REF2N ((uint8_t)0x2UL) /**< CTRL_REF_SEL_REF2P_AND_REF2N Value */ -#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_REF2N (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_REF2N << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF2P_AND_REF2N Setting */ +#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N ((uint8_t)0x2UL) /**< CTRL_REF_SEL_REF0P_AND_REF0N Value */ +#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_REF0N Setting */ #define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AVDD_AND_AGND ((uint8_t)0x3UL) /**< CTRL_REF_SEL_AVDD_AND_AGND Value */ #define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_AVDD_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AVDD_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AVDD_AND_AGND Setting */ -#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND ((uint8_t)0x4UL) /**< CTRL_REF_SEL_REF0P_AND_AGND Value */ -#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_AGND Setting */ +#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AGND ((uint8_t)0x4UL) /**< CTRL_REF_SEL_AIN0P_AND_AGND Value */ +#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AIN0P_AND_AGND Setting */ #define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_AGND ((uint8_t)0x5UL) /**< CTRL_REF_SEL_REF1P_AND_AGND Value */ #define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF1P_AND_AGND Setting */ -#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_AGND ((uint8_t)0x6UL) /**< CTRL_REF_SEL_REF2P_AND_AGND Value */ -#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF2P_AND_AGND Setting */ +#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND ((uint8_t)0x6UL) /**< CTRL_REF_SEL_REF0P_AND_AGND Value */ +#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_AGND Setting */ #define MXC_F_AFE_ADC_ZERO_CTRL_REFBUFN_EN_POS 3 /**< CTRL_REFBUFN_EN Position */ #define MXC_F_AFE_ADC_ZERO_CTRL_REFBUFN_EN ((uint8_t)(0x1UL << MXC_F_AFE_ADC_ZERO_CTRL_REFBUFN_EN_POS)) /**< CTRL_REFBUFN_EN Mask */ @@ -556,17 +554,6 @@ extern "C" { /**@} end of group AFE_ADC_ZERO_WAIT_EXT_Register */ -/** - * @ingroup afe_adc_zero_registers - * @defgroup AFE_ADC_ZERO_PART_ID AFE_ADC_ZERO_PART_ID - * @brief Silicon Revision ID - * @{ - */ -#define MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID_POS 0 /**< PART_ID_REV_ID Position */ -#define MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID ((uint32_t)(0x3FUL << MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID_POS)) /**< PART_ID_REV_ID Mask */ - -/**@} end of group AFE_ADC_ZERO_PART_ID_Register */ - /** * @ingroup afe_adc_zero_registers * @defgroup AFE_ADC_ZERO_SYSC_SEL AFE_ADC_ZERO_SYSC_SEL @@ -2041,6 +2028,20 @@ extern "C" { /**@} end of group AFE_ADC_ZERO_TS_CTRL_Register */ +/** + * @ingroup afe_adc_zero_registers + * @defgroup AFE_ADC_ZERO_PART_ID AFE_ADC_ZERO_PART_ID + * @brief Silicon Revision ID + * @{ + */ +#define MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID_POS 0 /**< PART_ID_REV_ID Position */ +#define MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID ((uint32_t)(0x1FUL << MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID_POS)) /**< PART_ID_REV_ID Mask */ + +#define MXC_F_AFE_ADC_ZERO_PART_ID_ADC_SEL_POS 5 /**< PART_ID_ADC_SEL Position */ +#define MXC_F_AFE_ADC_ZERO_PART_ID_ADC_SEL ((uint32_t)(0x1UL << MXC_F_AFE_ADC_ZERO_PART_ID_ADC_SEL_POS)) /**< PART_ID_ADC_SEL Mask */ + +/**@} end of group AFE_ADC_ZERO_PART_ID_Register */ + #ifdef __cplusplus } #endif diff --git a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/crc_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/crc_regs.h index 94dc7c3c728..0ebb5ddb9d3 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/crc_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/crc_regs.h @@ -77,8 +77,8 @@ typedef struct { __IO uint32_t ctrl; /**< \b 0x0000: CRC CTRL Register */ union { __IO uint32_t datain32; /**< \b 0x0004: CRC DATAIN32 Register */ - __IO uint16_t datain16[2]; /**< \b 0x0004: CRC DATAIN16 Register */ - __IO uint8_t datain8[4]; /**< \b 0x0004: CRC DATAIN8 Register */ + __IO uint16_t datain16; /**< \b 0x0004: CRC DATAIN16 Register */ + __IO uint8_t datain8; /**< \b 0x0004: CRC DATAIN8 Register */ }; __IO uint32_t poly; /**< \b 0x0008: CRC POLY Register */ __IO uint32_t val; /**< \b 0x000C: CRC VAL Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/dma_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/dma_regs.h index 955e81b904e..38a910b1f6a 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/dma_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/dma_regs.h @@ -88,7 +88,7 @@ typedef struct { __IO uint32_t inten; /**< \b 0x000: DMA INTEN Register */ __I uint32_t intfl; /**< \b 0x004: DMA INTFL Register */ __R uint32_t rsv_0x8_0xff[62]; - __IO mxc_dma_ch_regs_t ch[8]; /**< \b 0x100: DMA CH Register */ + __IO mxc_dma_ch_regs_t ch[8]; /**< \b 0x100: DMA CH Register */ } mxc_dma_regs_t; /* Register offsets for module DMA */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/max32675.svd b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/max32675.svd index b59d67db518..a1951f062f0 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32675/Include/max32675.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32675/Include/max32675.svd @@ -361,9 +361,7 @@ - 2 - 2 - DATAIN16[%s] + DATAIN16 CRC Data Input 0x0004 16 @@ -379,9 +377,7 @@ - 4 - 1 - DATAIN8[%s] + DATAIN8 CRC Data Input 0x0004 8 diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/aes_key_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/aes_key_regs.h deleted file mode 100644 index effac90f498..00000000000 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/aes_key_regs.h +++ /dev/null @@ -1,114 +0,0 @@ -/** - * @file aes_key_regs.h - * @brief Registers, Bit Masks and Bit Positions for the AES_KEY Peripheral Module. - * @note This file is @deprecated. - */ - -/****************************************************************************** - * - * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by - * Analog Devices, Inc.), - * Copyright (C) 2023-2024 Analog Devices, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - ******************************************************************************/ - -#ifndef LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32680_INCLUDE_AES_KEY_REGS_H_ -#define LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32680_INCLUDE_AES_KEY_REGS_H_ - -#warning "DEPRECATED(1-10-2023): aes_key_regs.h - Scheduled for removal. Please use aeskeys_regs.h." - -/* **** Includes **** */ -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#if defined (__ICCARM__) - #pragma system_include -#endif - -#if defined (__CC_ARM) - #pragma anon_unions -#endif -/// @cond -/* - If types are not defined elsewhere (CMSIS) define them here -*/ -#ifndef __IO -#define __IO volatile -#endif -#ifndef __I -#define __I volatile const -#endif -#ifndef __O -#define __O volatile -#endif -#ifndef __R -#define __R volatile const -#endif -/// @endcond - -/* **** Definitions **** */ - -/** - * @ingroup aes_key - * @defgroup aes_key_registers AES_KEY_Registers - * @brief Registers, Bit Masks and Bit Positions for the AES_KEY Peripheral Module. - * @details AES Key Registers. - */ - -/** - * @ingroup aes_key_registers - * Structure type to access the AES_KEY Registers. - */ -#if defined(__GNUC__) -__attribute__((deprecated("mxc_aes_key_regs_t struct and aes_key_regs.h no longer supported. Use aeskeys_regs.h and MXC_AESKEYS (mxc_aeskeys_regs_t) for AES Key Access. 1-10-2023"))) -#else -#warning "mxc_aes_key_regs_t struct and aes_key_regs.h no longer supported. Use aeskeys_regs.h and MXC_AESKEYS (mxc_aeskeys_regs_t) for AES Key Access. 1-10-2023" -#endif -typedef struct { - __IO uint32_t aes_key0; /**< \b 0x00: AES_KEY AES_KEY0 Register */ - __IO uint32_t aes_key1; /**< \b 0x04: AES_KEY AES_KEY1 Register */ - __IO uint32_t aes_key2; /**< \b 0x08: AES_KEY AES_KEY2 Register */ - __IO uint32_t aes_key3; /**< \b 0x0C: AES_KEY AES_KEY3 Register */ - __IO uint32_t aes_key4; /**< \b 0x10: AES_KEY AES_KEY4 Register */ - __IO uint32_t aes_key5; /**< \b 0x14: AES_KEY AES_KEY5 Register */ - __IO uint32_t aes_key6; /**< \b 0x18: AES_KEY AES_KEY6 Register */ - __IO uint32_t aes_key7; /**< \b 0x1C: AES_KEY AES_KEY7 Register */ -} mxc_aes_key_regs_t; - -/* Register offsets for module AES_KEY */ -/** - * @ingroup aes_key_registers - * @defgroup AES_KEY_Register_Offsets Register Offsets - * @brief AES_KEY Peripheral Register Offsets from the AES_KEY Base Peripheral Address. - * @{ - */ -#define MXC_R_AES_KEY_AES_KEY0 ((uint32_t)0x00000000UL) /**< Offset from AES_KEY Base Address: 0x0000 */ -#define MXC_R_AES_KEY_AES_KEY1 ((uint32_t)0x00000004UL) /**< Offset from AES_KEY Base Address: 0x0004 */ -#define MXC_R_AES_KEY_AES_KEY2 ((uint32_t)0x00000008UL) /**< Offset from AES_KEY Base Address: 0x0008 */ -#define MXC_R_AES_KEY_AES_KEY3 ((uint32_t)0x0000000CUL) /**< Offset from AES_KEY Base Address: 0x000C */ -#define MXC_R_AES_KEY_AES_KEY4 ((uint32_t)0x00000010UL) /**< Offset from AES_KEY Base Address: 0x0010 */ -#define MXC_R_AES_KEY_AES_KEY5 ((uint32_t)0x00000014UL) /**< Offset from AES_KEY Base Address: 0x0014 */ -#define MXC_R_AES_KEY_AES_KEY6 ((uint32_t)0x00000018UL) /**< Offset from AES_KEY Base Address: 0x0018 */ -#define MXC_R_AES_KEY_AES_KEY7 ((uint32_t)0x0000001CUL) /**< Offset from AES_KEY Base Address: 0x001C */ -/**@} end of group aes_key_registers */ - -#ifdef __cplusplus -} -#endif - -#endif // LIBRARIES_CMSIS_DEVICE_MAXIM_MAX32680_INCLUDE_AES_KEY_REGS_H_ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/afe_adc_one_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/afe_adc_one_regs.h index a976811d43c..20fc136b9b4 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/afe_adc_one_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/afe_adc_one_regs.h @@ -352,20 +352,20 @@ extern "C" { */ #define MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS 0 /**< CTRL_REF_SEL Position */ #define MXC_F_AFE_ADC_ONE_CTRL_REF_SEL ((uint8_t)(0x7UL << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS)) /**< CTRL_REF_SEL Mask */ -#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N ((uint8_t)0x0UL) /**< CTRL_REF_SEL_REF0P_AND_REF0N Value */ -#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_REF0N Setting */ +#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AIN1N ((uint8_t)0x0UL) /**< CTRL_REF_SEL_AIN0P_AND_AIN1N Value */ +#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AIN1N (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AIN1N << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AIN0P_AND_AIN1N Setting */ #define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_REF1N ((uint8_t)0x1UL) /**< CTRL_REF_SEL_REF1P_AND_REF1N Value */ #define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_REF1N (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_REF1N << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF1P_AND_REF1N Setting */ -#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_REF2N ((uint8_t)0x2UL) /**< CTRL_REF_SEL_REF2P_AND_REF2N Value */ -#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_REF2N (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_REF2N << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF2P_AND_REF2N Setting */ +#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N ((uint8_t)0x2UL) /**< CTRL_REF_SEL_REF0P_AND_REF0N Value */ +#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_REF0N << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_REF0N Setting */ #define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AVDD_AND_AGND ((uint8_t)0x3UL) /**< CTRL_REF_SEL_AVDD_AND_AGND Value */ #define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_AVDD_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AVDD_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AVDD_AND_AGND Setting */ -#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND ((uint8_t)0x4UL) /**< CTRL_REF_SEL_REF0P_AND_AGND Value */ -#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_AGND Setting */ +#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AGND ((uint8_t)0x4UL) /**< CTRL_REF_SEL_AIN0P_AND_AGND Value */ +#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_AIN0P_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AIN0P_AND_AGND Setting */ #define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_AGND ((uint8_t)0x5UL) /**< CTRL_REF_SEL_REF1P_AND_AGND Value */ #define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF1P_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF1P_AND_AGND Setting */ -#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_AGND ((uint8_t)0x6UL) /**< CTRL_REF_SEL_REF2P_AND_AGND Value */ -#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF2P_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF2P_AND_AGND Setting */ +#define MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND ((uint8_t)0x6UL) /**< CTRL_REF_SEL_REF0P_AND_AGND Value */ +#define MXC_S_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND (MXC_V_AFE_ADC_ONE_CTRL_REF_SEL_REF0P_AND_AGND << MXC_F_AFE_ADC_ONE_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_AGND Setting */ #define MXC_F_AFE_ADC_ONE_CTRL_REFBUFN_EN_POS 3 /**< CTRL_REFBUFN_EN Position */ #define MXC_F_AFE_ADC_ONE_CTRL_REFBUFN_EN ((uint8_t)(0x1UL << MXC_F_AFE_ADC_ONE_CTRL_REFBUFN_EN_POS)) /**< CTRL_REFBUFN_EN Mask */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/afe_adc_zero_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/afe_adc_zero_regs.h index 8dcd5b78704..9b3298a5e77 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/afe_adc_zero_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/afe_adc_zero_regs.h @@ -352,20 +352,20 @@ extern "C" { */ #define MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS 0 /**< CTRL_REF_SEL Position */ #define MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL ((uint8_t)(0x7UL << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS)) /**< CTRL_REF_SEL Mask */ -#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N ((uint8_t)0x0UL) /**< CTRL_REF_SEL_REF0P_AND_REF0N Value */ -#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_REF0N Setting */ +#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AIN1N ((uint8_t)0x0UL) /**< CTRL_REF_SEL_AIN0P_AND_AIN1N Value */ +#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AIN1N (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AIN1N << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AIN0P_AND_AIN1N Setting */ #define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_REF1N ((uint8_t)0x1UL) /**< CTRL_REF_SEL_REF1P_AND_REF1N Value */ #define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_REF1N (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_REF1N << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF1P_AND_REF1N Setting */ -#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_REF2N ((uint8_t)0x2UL) /**< CTRL_REF_SEL_REF2P_AND_REF2N Value */ -#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_REF2N (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_REF2N << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF2P_AND_REF2N Setting */ +#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N ((uint8_t)0x2UL) /**< CTRL_REF_SEL_REF0P_AND_REF0N Value */ +#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_REF0N << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_REF0N Setting */ #define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AVDD_AND_AGND ((uint8_t)0x3UL) /**< CTRL_REF_SEL_AVDD_AND_AGND Value */ #define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_AVDD_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AVDD_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AVDD_AND_AGND Setting */ -#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND ((uint8_t)0x4UL) /**< CTRL_REF_SEL_REF0P_AND_AGND Value */ -#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_AGND Setting */ +#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AGND ((uint8_t)0x4UL) /**< CTRL_REF_SEL_AIN0P_AND_AGND Value */ +#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_AIN0P_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_AIN0P_AND_AGND Setting */ #define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_AGND ((uint8_t)0x5UL) /**< CTRL_REF_SEL_REF1P_AND_AGND Value */ #define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF1P_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF1P_AND_AGND Setting */ -#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_AGND ((uint8_t)0x6UL) /**< CTRL_REF_SEL_REF2P_AND_AGND Value */ -#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF2P_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF2P_AND_AGND Setting */ +#define MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND ((uint8_t)0x6UL) /**< CTRL_REF_SEL_REF0P_AND_AGND Value */ +#define MXC_S_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND (MXC_V_AFE_ADC_ZERO_CTRL_REF_SEL_REF0P_AND_AGND << MXC_F_AFE_ADC_ZERO_CTRL_REF_SEL_POS) /**< CTRL_REF_SEL_REF0P_AND_AGND Setting */ #define MXC_F_AFE_ADC_ZERO_CTRL_REFBUFN_EN_POS 3 /**< CTRL_REFBUFN_EN Position */ #define MXC_F_AFE_ADC_ZERO_CTRL_REFBUFN_EN ((uint8_t)(0x1UL << MXC_F_AFE_ADC_ZERO_CTRL_REFBUFN_EN_POS)) /**< CTRL_REFBUFN_EN Mask */ @@ -563,7 +563,7 @@ extern "C" { * @{ */ #define MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID_POS 0 /**< PART_ID_REV_ID Position */ -#define MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID ((uint32_t)(0x7UL << MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID_POS)) /**< PART_ID_REV_ID Mask */ +#define MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID ((uint32_t)(0x3FUL << MXC_F_AFE_ADC_ZERO_PART_ID_REV_ID_POS)) /**< PART_ID_REV_ID Mask */ /**@} end of group AFE_ADC_ZERO_PART_ID_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/crc_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/crc_regs.h index 58ead5cb43e..adf5ca1c914 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/crc_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/crc_regs.h @@ -77,8 +77,8 @@ typedef struct { __IO uint32_t ctrl; /**< \b 0x0000: CRC CTRL Register */ union { __IO uint32_t datain32; /**< \b 0x0004: CRC DATAIN32 Register */ - __IO uint16_t datain16[2]; /**< \b 0x0004: CRC DATAIN16 Register */ - __IO uint8_t datain8[4]; /**< \b 0x0004: CRC DATAIN8 Register */ + __IO uint16_t datain16; /**< \b 0x0004: CRC DATAIN16 Register */ + __IO uint8_t datain8; /**< \b 0x0004: CRC DATAIN8 Register */ }; __IO uint32_t poly; /**< \b 0x0008: CRC POLY Register */ __IO uint32_t val; /**< \b 0x000C: CRC VAL Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/dma_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/dma_regs.h index b7a6fd02d78..f0f6b9b475f 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/dma_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/dma_regs.h @@ -88,7 +88,7 @@ typedef struct { __IO uint32_t inten; /**< \b 0x000: DMA INTEN Register */ __I uint32_t intfl; /**< \b 0x004: DMA INTFL Register */ __R uint32_t rsv_0x8_0xff[62]; - __IO mxc_dma_ch_regs_t ch[4]; /**< \b 0x100: DMA CH Register */ + __IO mxc_dma_ch_regs_t ch[4]; /**< \b 0x100: DMA CH Register */ } mxc_dma_regs_t; /* Register offsets for module DMA */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/lpcmp_regs.h b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/lpcmp_regs.h index e28886a51c2..bb3e1696d03 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/lpcmp_regs.h +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/lpcmp_regs.h @@ -99,14 +99,14 @@ typedef struct { #define MXC_F_LPCMP_CTRL_POL_POS 5 /**< CTRL_POL Position */ #define MXC_F_LPCMP_CTRL_POL ((uint32_t)(0x1UL << MXC_F_LPCMP_CTRL_POL_POS)) /**< CTRL_POL Mask */ -#define MXC_F_LPCMP_CTRL_INT_EN_POS 6 /**< CTRL_INT_EN Position */ -#define MXC_F_LPCMP_CTRL_INT_EN ((uint32_t)(0x1UL << MXC_F_LPCMP_CTRL_INT_EN_POS)) /**< CTRL_INT_EN Mask */ +#define MXC_F_LPCMP_CTRL_INTEN_POS 6 /**< CTRL_INTEN Position */ +#define MXC_F_LPCMP_CTRL_INTEN ((uint32_t)(0x1UL << MXC_F_LPCMP_CTRL_INTEN_POS)) /**< CTRL_INTEN Mask */ #define MXC_F_LPCMP_CTRL_OUT_POS 14 /**< CTRL_OUT Position */ #define MXC_F_LPCMP_CTRL_OUT ((uint32_t)(0x1UL << MXC_F_LPCMP_CTRL_OUT_POS)) /**< CTRL_OUT Mask */ -#define MXC_F_LPCMP_CTRL_INT_FL_POS 15 /**< CTRL_INT_FL Position */ -#define MXC_F_LPCMP_CTRL_INT_FL ((uint32_t)(0x1UL << MXC_F_LPCMP_CTRL_INT_FL_POS)) /**< CTRL_INT_FL Mask */ +#define MXC_F_LPCMP_CTRL_INTFL_POS 15 /**< CTRL_INTFL Position */ +#define MXC_F_LPCMP_CTRL_INTFL ((uint32_t)(0x1UL << MXC_F_LPCMP_CTRL_INTFL_POS)) /**< CTRL_INTFL Mask */ /**@} end of group LPCMP_CTRL_Register */ diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd index 9ee591378cd..b375763e259 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Include/max32680.svd @@ -700,9 +700,7 @@ - 2 - 2 - DATAIN16[%s] + DATAIN16 CRC Data Input 0x0004 16 @@ -718,9 +716,7 @@ - 4 - 1 - DATAIN8[%s] + DATAIN8 CRC Data Input 0x0004 8 @@ -6681,7 +6677,7 @@ 1 - INT_EN + INTEN IRQ Enable. 6 1 @@ -6693,7 +6689,7 @@ 1 - INT_FL + INTFL IRQ Flag 15 1 diff --git a/Libraries/CMSIS/Device/Maxim/MAX32680/Source/GCC/max32680.mk b/Libraries/CMSIS/Device/Maxim/MAX32680/Source/GCC/max32680.mk index 2ef776e1e2e..d0b606db459 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32680/Source/GCC/max32680.mk +++ b/Libraries/CMSIS/Device/Maxim/MAX32680/Source/GCC/max32680.mk @@ -107,7 +107,7 @@ PROJ_OBJS = ${RISCV_APP_OBJ} .PHONY: rvapp rvapp: $(RISCV_APP_BIN) -$(RISCV_APP_BIN): +$(RISCV_APP_BIN): FORCE $(MAKE) -C ${RISCV_APP} BUILD_DIR=$(RISCV_BUILD_DIR) RISCV_CORE=1 RISCV_LOAD=0 PROJECT=riscv $(MAKE) -C ${RISCV_APP} BUILD_DIR=$(RISCV_BUILD_DIR) $(RISCV_APP_BIN) RISCV_CORE=1 RISCV_LOAD=0 diff --git a/Libraries/CMSIS/Device/Maxim/MAX32690/Source/GCC/max32690.mk b/Libraries/CMSIS/Device/Maxim/MAX32690/Source/GCC/max32690.mk index 279bdfc9f5d..b51c60991e9 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32690/Source/GCC/max32690.mk +++ b/Libraries/CMSIS/Device/Maxim/MAX32690/Source/GCC/max32690.mk @@ -109,7 +109,7 @@ PROJ_OBJS = ${RISCV_APP_OBJ} .PHONY: rvapp rvapp: $(RISCV_APP_BIN) -$(RISCV_APP_BIN): +$(RISCV_APP_BIN): FORCE $(MAKE) -C ${RISCV_APP} BUILD_DIR=$(RISCV_BUILD_DIR) RISCV_CORE=1 RISCV_LOAD=0 PROJECT=riscv $(MAKE) -C ${RISCV_APP} BUILD_DIR=$(RISCV_BUILD_DIR) $(RISCV_APP_BIN) RISCV_CORE=1 RISCV_LOAD=0 diff --git a/Libraries/CMSIS/Device/Maxim/MAX32690/Source/system_max32690.c b/Libraries/CMSIS/Device/Maxim/MAX32690/Source/system_max32690.c index 264d11013d1..bfa47555173 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX32690/Source/system_max32690.c +++ b/Libraries/CMSIS/Device/Maxim/MAX32690/Source/system_max32690.c @@ -134,6 +134,7 @@ __weak void PalSysInit(void) {} */ __weak void SystemInit(void) { + __NOP(); #ifdef DEBUG /* Delay to prevent bricks */ volatile int i; diff --git a/Libraries/CMSIS/Device/Maxim/MAX78000/Source/GCC/max78000.mk b/Libraries/CMSIS/Device/Maxim/MAX78000/Source/GCC/max78000.mk index 142e8af2db1..d874285739f 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX78000/Source/GCC/max78000.mk +++ b/Libraries/CMSIS/Device/Maxim/MAX78000/Source/GCC/max78000.mk @@ -191,7 +191,7 @@ endif .PHONY: rvapp rvapp: $(RISCV_APP_BIN) -$(RISCV_APP_BIN): $(RISCV_COMMON_LD) +$(RISCV_APP_BIN): $(RISCV_COMMON_LD) FORCE # Build the RISC-V project @$(MAKE) -C ${RISCV_APP} BUILD_DIR=$(RISCV_BUILD_DIR) RISCV_CORE=1 RISCV_LOAD=0 PROJECT=riscv HOST_PROJECT=$(PROJECT) PROJ_LDFLAGS="$(PROJ_LDFLAGS)" # Create the binary (should incrementally build off of the first pass for the .elf) diff --git a/Libraries/CMSIS/Device/Maxim/MAX78002/Source/GCC/max78002.mk b/Libraries/CMSIS/Device/Maxim/MAX78002/Source/GCC/max78002.mk index 7d5e58fd38c..eb66c0234d0 100644 --- a/Libraries/CMSIS/Device/Maxim/MAX78002/Source/GCC/max78002.mk +++ b/Libraries/CMSIS/Device/Maxim/MAX78002/Source/GCC/max78002.mk @@ -188,7 +188,7 @@ endif .PHONY: rvapp rvapp: $(RISCV_APP_BIN) -$(RISCV_APP_BIN): $(RISCV_COMMON_LD) +$(RISCV_APP_BIN): $(RISCV_COMMON_LD) FORCE # Build the RISC-V project @$(MAKE) -C ${RISCV_APP} BUILD_DIR=$(RISCV_BUILD_DIR) RISCV_CORE=1 RISCV_LOAD=0 PROJECT=riscv HOST_PROJECT=$(PROJECT) PROJ_LDFLAGS="$(PROJ_LDFLAGS)" # Create the binary (should incrementally build off of the first pass for the .elf) diff --git a/Libraries/Cordio/platform/targets/maxim/build/cordio_lib.mk b/Libraries/Cordio/platform/targets/maxim/build/cordio_lib.mk index 52cd92603f8..bb58990ab78 100644 --- a/Libraries/Cordio/platform/targets/maxim/build/cordio_lib.mk +++ b/Libraries/Cordio/platform/targets/maxim/build/cordio_lib.mk @@ -97,3 +97,6 @@ ${CORDIO_BUILD_DIR}/${CORDIO_LIB}: ${CORDIO_C_FILES} ${PROJECTMK} clean.cordio: @$(MAKE) -f ${CORDIO_DIR}/platform/targets/maxim/build/libCordio.mk BUILD_DIR=${CORDIO_BUILD_DIR} clean + +query.cordio: + @$(MAKE) -f ${CORDIO_DIR}/platform/targets/maxim/build/libCordio.mk query QUERY_VAR="${QUERY_VAR}" \ No newline at end of file diff --git a/Libraries/FCL/fcl.mk b/Libraries/FCL/fcl.mk index 70488d43847..5f552df54b2 100644 --- a/Libraries/FCL/fcl.mk +++ b/Libraries/FCL/fcl.mk @@ -70,4 +70,7 @@ ${FCL_BUILD_DIR}/${FCL_LIB}: ${FCL_C_FILES} ${FCL_H_FILES} $(MAKE) -f ${FCL_DIR}/libfcl.mk lib BUILD_DIR=${FCL_BUILD_DIR} clean.fcl: - @rm -rf ${FCL_BUILD_DIR}/* \ No newline at end of file + @rm -rf ${FCL_BUILD_DIR}/* + +query.fcl: + @$(MAKE) -f ${FCL_DIR}/libfcl.mk query QUERY_VAR="${QUERY_VAR}" \ No newline at end of file diff --git a/Libraries/FreeRTOS/freertos.mk b/Libraries/FreeRTOS/freertos.mk index 5648a81b14d..4ff0950b573 100644 --- a/Libraries/FreeRTOS/freertos.mk +++ b/Libraries/FreeRTOS/freertos.mk @@ -68,4 +68,6 @@ IPATH += ${RTOS_IPATH} # Add rule to build the Driver Library ${RTOS_BUILD_DIR}/librtos.a: FORCE $(MAKE) -C ${RTOS_DIR} lib BUILD_DIR=${RTOS_BUILD_DIR} - + +query.freertos: + @$(MAKE) -C ${RTOS_DIR} query QUERY_VAR="${QUERY_VAR}" diff --git a/Libraries/MAXUSB/maxusb.mk b/Libraries/MAXUSB/maxusb.mk index 421d2a3bbc7..e8d71f84755 100644 --- a/Libraries/MAXUSB/maxusb.mk +++ b/Libraries/MAXUSB/maxusb.mk @@ -98,3 +98,6 @@ IPATH += ${MAXUSB_DIR}/include/dbg_log # Add rule to build the Driver Library ${MAXUSB_BUILD_DIR}/maxusb.a: FORCE $(MAKE) -C ${MAXUSB_DIR} lib BUILD_DIR=${MAXUSB_BUILD_DIR} + +query.maxusb: + @$(MAKE) -C ${MAXUSB_DIR} query QUERY_VAR="${QUERY_VAR}" diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.c b/Libraries/MiscDrivers/Display/tft_ssd2119.c index 46b77ef447a..3a11580ef0d 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.c +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.c @@ -1197,6 +1197,350 @@ void MXC_TFT_FillRect(area_t *area, int color) __enable_irq(); } +void MXC_TFT_DrawImage(int px_x, int px_y, int width, int height, uint32_t **image_2D) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + g_fifo[0] = image_2D[y][x]; + spi_transmit((uint16_t *)g_fifo, 2); + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawBitmap(int px_x, int px_y, int width, int height, uint16_t *image) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + int i = 0; + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF)) | + (uint32_t)((image[i] & 0xFF00) << 8)); + spi_transmit((uint16_t *)g_fifo, 2); + i += 1; + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint16_t *image) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + int i = 0; + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | + (uint32_t)((~image[i] & 0xFF00) >> 8)); + spi_transmit((uint16_t *)g_fifo, 2); + i += 1; + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + int i = 0; + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + if (image[i] == original_color) { + g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | + (uint32_t)((mask & 0xFF00) >> 8)); + } else { + g_fifo[0] = (0x01000100 | ((uint32_t)(image[i] & 0x00FF) << 16) | + (uint32_t)((image[i] & 0xFF00) >> 8)); + } + spi_transmit((uint16_t *)g_fifo, 2); + i += 1; + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + int i = 0; + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + if (image[i] == original_color) { + g_fifo[0] = (0x01000100 | ((uint32_t)(mask & 0x00FF) << 16) | + (uint32_t)((mask & 0xFF00) >> 8)); + } else { + g_fifo[0] = (0x01000100 | ((uint32_t)(~image[i] & 0x00FF) << 16) | + (uint32_t)((~image[i] & 0xFF00) >> 8)); + } + spi_transmit((uint16_t *)g_fifo, 2); + i += 1; + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawVerticalLine(int px_x, int px_y, int height, uint32_t color) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = 1; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + g_fifo[0] = color; + + spi_transmit((uint16_t *)g_fifo, 2); + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawHorizontalLine(int px_x, int px_y, int width, uint32_t color) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = px_x; + area->y = px_y; + area->w = width; + area->h = 1; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + g_fifo[0] = color; + + spi_transmit((uint16_t *)g_fifo, 2); + } + } + + __enable_irq(); +} + +void MXC_TFT_DrawRect(int pixelX, int pixelY, int width, int height, uint32_t color) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = pixelX; + area->y = pixelY; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, i, h, w; + + w = area->w; + h = area->h; + + if (tft_rotation == SCREEN_NORMAL || tft_rotation == SCREEN_FLIP) { + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + } else if (tft_rotation == SCREEN_ROTATE) { + if ((area->x + w) > DISPLAY_HEIGHT) { + w = DISPLAY_HEIGHT - area->x; + } + + if ((area->y + h) > DISPLAY_WIDTH) { + h = DISPLAY_WIDTH - area->y; + } + + displaySub_Rotated(area->x, area->y, w, h); + } + + for (y = 0; y < h; y++) { + for (x = 0; x < (w >> 2); x++) { + for (i = 0; i < 4; i++) { + g_fifo[i] = color; + } + + spi_transmit((uint16_t *)g_fifo, 8); + } + + x <<= 2; + + for (; x < w; x++) { + write_color(color); + } + } + + __enable_irq(); +} + void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t color) { area_t _area; @@ -1259,6 +1603,55 @@ void MXC_TFT_PrintPalette(void) } } +void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, + int radius, uint32_t background_color) +{ + area_t _area; + area_t *area; + + area = &_area; + area->x = pixelX; + area->y = pixelY; + area->w = width; + area->h = height; + + __disable_irq(); + int y, x, h, w; + + w = area->w; + h = area->h; + + if ((area->x + w) > DISPLAY_WIDTH) { + w = DISPLAY_WIDTH - area->x; + } + + if ((area->y + h) > DISPLAY_HEIGHT) { + h = DISPLAY_HEIGHT - area->y; + } + + displaySub(area->x, area->y, w, h); + + for (y = 0; y < h; y++) { + for (x = 0; x < w; x++) { + // Calculate distance from the corner. + int dx = (x < radius) ? radius - x : (x >= w - radius) ? x - (w - radius - 1) : 0; + int dy = (y < radius) ? radius - y : (y >= h - radius) ? y - (h - radius - 1) : 0; + + // Use pythagorean theorem to map coordinates, square not necessary when comparing with r. + if (((dx * dx) + (dy * dy)) <= (radius * radius)) { + *g_fifo = color; + spi_transmit((uint16_t *)g_fifo, 2); + + } else { + *g_fifo = background_color; + spi_transmit((uint16_t *)g_fifo, 2); + } + } + } + + __enable_irq(); +} + /*************************************************************** * Printf Functions ***************************************************************/ diff --git a/Libraries/MiscDrivers/Display/tft_ssd2119.h b/Libraries/MiscDrivers/Display/tft_ssd2119.h index 6d62e241d83..e947fe869b0 100644 --- a/Libraries/MiscDrivers/Display/tft_ssd2119.h +++ b/Libraries/MiscDrivers/Display/tft_ssd2119.h @@ -113,6 +113,111 @@ void MXC_TFT_ClearScreen(void); */ void MXC_TFT_FillRect(area_t *area, int color); +/** + * @brief Draws an image that's already been formatted for the + * 9-bit SPI transactions. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of image. + * @param height Height of image. + * @param image_2D Pointer to 2-D array of image. + */ +void MXC_TFT_DrawImage(int px_x, int px_y, int width, int height, uint32_t **image_2D); + +/** + * @brief Draws a raw bitmap (RGB565 16-bit color codes) to display. This function + * packages each pixel of the image (RGB565 16-bit color codes) into + * compatible packets that are sent to the display. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of image. + * @param height Height of image. + * @param image Pointer to image filled with RGB565 color codes. + */ +void MXC_TFT_DrawBitmap(int px_x, int px_y, int width, int height, uint16_t *image); + +/** + * @brief Draws an inverted color, raw bitmap (RGB565 16-bit color codes) to display. This function + * packages and inverts each pixel of the image (RGB565 16-bit color codes) + * into compatible packets before transmitting to display. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of image. + * @param height Height of image. + * @param image Pointer to image filled with RGB565 color codes. + */ +void MXC_TFT_DrawBitmapInverted(int px_x, int px_y, int width, int height, uint16_t *image); + +/** + * @brief Draws a raw bitmap (RGB565 16-bit color codes) to display with a single RGB565 color replaced + * with another selected color. This function is mainly useful when trying to match the background + * color of the bitmap to whatever the bitmap is overlaying onto the display. This function + * packages and inverts each pixel of the image (RGB565 16-bit color codes) + * into compatible packets before transmitting to display. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of image. + * @param height Height of image. + * @param image Pointer to image filled with RGB565 color codes. + * @param original_color 16-bit RGB565 color code to be replaced on bitmap. + * @param mask New 16-bit RGB565 color code that replaces the original color. + */ +void MXC_TFT_DrawBitmapMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask); + +/** + * @brief Draws an inverted color, raw bitmap (RGB565 16-bit color codes) to display with a single RGB565 color replaced + * with another selected color. This function is mainly useful when trying to match the background + * color of the bitmap to whatever the bitmap is overlaying onto the display. This function + * packages and inverts each pixel of the image (RGB565 16-bit color codes) + * into compatible packets before transmitting to display. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of image. + * @param height Height of image. + * @param image Pointer to image filled with RGB565 color codes. + * @param original_color 16-bit RGB565 color code to be replaced on bitmap. + * @param mask New 16-bit RGB565 color code that replaces the original color. + */ +void MXC_TFT_DrawBitmapInvertedMask(int px_x, int px_y, int width, int height, uint16_t *image, + uint16_t original_color, uint16_t mask); + +/** + * @brief Draws a single-pixel height, horizontal line. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Length of line. + * @param color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). + */ +void MXC_TFT_DrawHorizontalLine(int px_x, int px_y, int width, uint32_t color); + +/** + * @brief Draws a single-pixel wide, vertical line. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param height Length of image. + * @param color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). + */ +void MXC_TFT_DrawVerticalLine(int px_x, int px_y, int height, uint32_t color); + +/** + * @brief Draws a rectangle. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of rectanlge. + * @param height Height of rectangle. + * @param color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). + */ +void MXC_TFT_DrawRect(int pixelX, int pixelY, int width, int height, uint32_t color); + /** * @brief Write a Pixel on TFT display * @@ -124,6 +229,20 @@ void MXC_TFT_FillRect(area_t *area, int color); */ void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t color); +/** + * @brief Draws a rectangle with rounded corners. + * + * @param px_x X pixel starting location on display. + * @param px_y Y pixel starting location on display. + * @param width Width of rectanlge. + * @param height Height of rectangle. + * @param color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). + * @param radius Radius of corners (how much you want rounded off). + * @param background_color Formatted color code in two 9-bit packets (not raw 16-bit RGB565 code). + */ +void MXC_TFT_DrawRoundedRect(int pixelX, int pixelY, int width, int height, uint32_t color, + int radius, uint32_t background_color); + /** * @brief Draw a bitmap * @@ -133,8 +252,22 @@ void MXC_TFT_WritePixel(int pixelX, int pixelY, int width, int height, uint32_t */ void MXC_TFT_ShowImage(int x0, int y0, int id); +/** + * @brief Draw Camer + * + * @param x0 x location of image + * @param y0 y location of image + * @param id Bitmap number + */ void MXC_TFT_ShowImageCameraRGB565(int x0, int y0, uint8_t *image, int iWidth, int iHeight); +/** + * @brief Draw a bitmap + * + * @param x0 x location of image + * @param y0 y location of image + * @param id Bitmap number + */ void MXC_TFT_ShowImageCameraMono(int x0, int y0, uint8_t *image, int iWidth, int iHeight); /** diff --git a/Libraries/MiscDrivers/PushButton/pb.c b/Libraries/MiscDrivers/PushButton/pb.c index 017614621cf..20684c201ff 100644 --- a/Libraries/MiscDrivers/PushButton/pb.c +++ b/Libraries/MiscDrivers/PushButton/pb.c @@ -19,11 +19,15 @@ ******************************************************************************/ #include +#include #include "board.h" #include "mxc_device.h" #include "mxc_assert.h" #include "pb.h" +// State array for holding PB polarity settings +static pb_polarity_t *g_pb_polarity = NULL; + /******************************************************************************/ int PB_Init(void) { @@ -37,9 +41,30 @@ int PB_Init(void) } } + if (g_pb_polarity == NULL) { + g_pb_polarity = malloc(num_pbs * sizeof(pb_polarity_t)); + // Note we have to use malloc here because we decided to make "num_pbs" a + // const variable instead of a compiler definition... + } + + for (unsigned int i = 0; i < num_pbs; i++) { + g_pb_polarity[i] = PB_POLARITY_LOW; + } + return retval; } +/******************************************************************************/ +int PB_Set_Polarity(unsigned int pb, pb_polarity_t polarity) +{ + if (pb >= num_pbs) { + return E_BAD_PARAM; + } + + g_pb_polarity[pb] = polarity; + return E_NO_ERROR; +} + /******************************************************************************/ int PB_RegisterCallback(unsigned int pb, pb_callback callback) { @@ -52,7 +77,11 @@ int PB_RegisterCallback(unsigned int pb, pb_callback callback) MXC_GPIO_RegisterCallback(&pb_pin[pb], callback, (void *)pb); // Configure and enable interrupt - MXC_GPIO_IntConfig(&pb_pin[pb], MXC_GPIO_INT_FALLING); + mxc_gpio_int_pol_t interrupt_polarity = MXC_GPIO_INT_FALLING; + if (g_pb_polarity[pb] == PB_POLARITY_HIGH) { + interrupt_polarity = MXC_GPIO_INT_RISING; + } + MXC_GPIO_IntConfig(&pb_pin[pb], interrupt_polarity); MXC_GPIO_EnableInt(pb_pin[pb].port, pb_pin[pb].mask); NVIC_EnableIRQ((IRQn_Type)MXC_GPIO_GET_IRQ(MXC_GPIO_GET_IDX(pb_pin[pb].port))); } else { @@ -113,7 +142,11 @@ void PB_IntClear(unsigned int pb) int PB_Get(unsigned int pb) { MXC_ASSERT(pb < num_pbs); - return !MXC_GPIO_InGet(pb_pin[pb].port, pb_pin[pb].mask); + uint32_t state = MXC_GPIO_InGet(pb_pin[pb].port, pb_pin[pb].mask); + if (g_pb_polarity[pb] == PB_POLARITY_LOW) { + state = !state; + } + return state; } //****************************************************************************** diff --git a/Libraries/MiscDrivers/PushButton/pb.h b/Libraries/MiscDrivers/PushButton/pb.h index 2a78f41f690..3f172098242 100644 --- a/Libraries/MiscDrivers/PushButton/pb.h +++ b/Libraries/MiscDrivers/PushButton/pb.h @@ -40,6 +40,11 @@ extern "C" { extern const mxc_gpio_cfg_t pb_pin[]; extern const unsigned int num_pbs; +typedef enum pb_polarity { + PB_POLARITY_LOW, ///< Pushing the button sends the signal LOW. When the button is open, the signal is HIGH + PB_POLARITY_HIGH ///< Pushing the button sends the signal HIGH. When the button is open, the signal is LOW. +} pb_polarity_t; + /* **** Function Prototypes **** */ /** @@ -50,6 +55,13 @@ extern const unsigned int num_pbs; */ int PB_Init(void); +/** + * @brief Set the voltage polarity of the pushbutton. + * @param pb Pushbutton to configure + * @param polarity Desired polarity of the push-button (i.e. what voltage level the signal goes to when the button is pushed). + */ +int PB_Set_Polarity(unsigned int pb, pb_polarity_t polarity); + /** * Type alias @c pb_callback for the push button callback. * @details The function is of type: diff --git a/Libraries/PeriphDrivers/Include/MAX32657/dma.h b/Libraries/PeriphDrivers/Include/MAX32657/dma.h index b42a98f7519..2af9f285b15 100644 --- a/Libraries/PeriphDrivers/Include/MAX32657/dma.h +++ b/Libraries/PeriphDrivers/Include/MAX32657/dma.h @@ -59,11 +59,17 @@ typedef enum { MXC_S_DMA_CTRL_REQUEST_MEMTOMEM, ///< Memory to Memory DMA Request Selection MXC_DMA_REQUEST_SPIRX = MXC_S_DMA_CTRL_REQUEST_SPIRX, ///< SPI Receive DMA Request Selection MXC_DMA_REQUEST_UARTRX = MXC_S_DMA_CTRL_REQUEST_UARTRX, ///< UART Receive DMA Request Selection - MXC_DMA_REQUEST_I3CRX = MXC_S_DMA_CTRL_REQUEST_I3CRX, ///< I3C Receive DMA Request Selection + MXC_DMA_REQUEST_I3CRX_CONT = + MXC_S_DMA_CTRL_REQUEST_I3CRX_CONT, ///< I3C Receive Controller DMA Request Selection + MXC_DMA_REQUEST_I3CRX_TARG = + MXC_S_DMA_CTRL_REQUEST_I3CRX_TARG, ///< I3C Receive Target DMA Request Selection MXC_DMA_REQUEST_AESRX = MXC_S_DMA_CTRL_REQUEST_AESRX, ///< AES Receive DMA Request Selection MXC_DMA_REQUEST_SPITX = MXC_S_DMA_CTRL_REQUEST_SPITX, ///< SPI Transmit DMA Request Selection MXC_DMA_REQUEST_UARTTX = MXC_S_DMA_CTRL_REQUEST_UARTTX, ///< UART Transmit DMA Request Selection - MXC_DMA_REQUEST_I3CTX = MXC_S_DMA_CTRL_REQUEST_I3CTX, ///< I3C Transmit DMA Request Selection + MXC_DMA_REQUEST_I3CTX_CONT = + MXC_S_DMA_CTRL_REQUEST_I3CTX_CONT, ///< I3C Transmit Controller DMA Request Selection + MXC_DMA_REQUEST_I3CTX_TARG = + MXC_S_DMA_CTRL_REQUEST_I3CTX_TARG, ///< I3C Transmit Target DMA Request Selection MXC_DMA_REQUEST_CRCTX = MXC_S_DMA_CTRL_REQUEST_CRCTX, ///< CRC Transmit DMA Request Selection */ MXC_DMA_REQUEST_AESTX = MXC_S_DMA_CTRL_REQUEST_AESTX, ///< AES Transmit DMA Request Selection } mxc_dma_reqsel_t; diff --git a/Libraries/PeriphDrivers/Include/MAX32657/gpio.h b/Libraries/PeriphDrivers/Include/MAX32657/gpio.h index 8949a33e434..db68a95e572 100644 --- a/Libraries/PeriphDrivers/Include/MAX32657/gpio.h +++ b/Libraries/PeriphDrivers/Include/MAX32657/gpio.h @@ -154,7 +154,7 @@ typedef enum { MXC_GPIO_PAD_PULL_UP, /**< Set pad to strong pull-up */ MXC_GPIO_PAD_PULL_DOWN, /**< Set pad to strong pull-down */ MXC_GPIO_PAD_WEAK_PULL_UP, /**< Set pad to weak pull-up */ - MXC_GPIO_PAD_WEAK_PULL_DOWN, /**< Set pad to weak pull-down */ + MXC_GPIO_PAD_WEAK_PULL_DOWN /**< Set pad to weak pull-down */ } mxc_gpio_pad_t; /** diff --git a/Libraries/PeriphDrivers/Include/MAX32657/icc.h b/Libraries/PeriphDrivers/Include/MAX32657/icc.h index 962cf0217be..252bd958920 100644 --- a/Libraries/PeriphDrivers/Include/MAX32657/icc.h +++ b/Libraries/PeriphDrivers/Include/MAX32657/icc.h @@ -53,22 +53,22 @@ typedef enum { * @param cid Enumeration type for Cache Id Register. * @retval Returns the contents of Cache Id Register. */ -int MXC_ICC_ID(mxc_icc_regs_t *icc, mxc_icc_info_t cid); +int MXC_ICC_ID(mxc_icc_info_t cid); /** * @brief Enable the instruction cache controller. */ -void MXC_ICC_Enable(mxc_icc_regs_t *icc); +void MXC_ICC_Enable(void); /** * @brief Disable the instruction cache controller. */ -void MXC_ICC_Disable(mxc_icc_regs_t *icc); +void MXC_ICC_Disable(void); /** * @brief Flush the instruction cache controller. */ -void MXC_ICC_Flush(mxc_icc_regs_t *icc); +void MXC_ICC_Flush(void); /**@} end of group icc */ diff --git a/Libraries/PeriphDrivers/Include/MAX32657/lp.h b/Libraries/PeriphDrivers/Include/MAX32657/lp.h index e4c53fce38b..0e4ea3bb688 100644 --- a/Libraries/PeriphDrivers/Include/MAX32657/lp.h +++ b/Libraries/PeriphDrivers/Include/MAX32657/lp.h @@ -49,15 +49,6 @@ extern "C" { */ typedef enum { MXC_LP_V0_9 = 0, MXC_LP_V1_0, MXC_LP_V1_1 } mxc_lp_ovr_t; -/** - * @brief Enumeration type for PM Mode - * - */ -typedef enum { - MXC_LP_IPO = MXC_F_GCR_PM_IPO_PD, - MXC_LP_IBRO = MXC_F_GCR_PM_IBRO_PD, -} mxc_lp_cfg_ds_pd_t; - /** * @brief Places the device into SLEEP mode. This function returns once an RTC or external interrupt occur. */ diff --git a/Libraries/PeriphDrivers/Include/MAX32657/mpc.h b/Libraries/PeriphDrivers/Include/MAX32657/mpc.h new file mode 100644 index 00000000000..d3cd04885d4 --- /dev/null +++ b/Libraries/PeriphDrivers/Include/MAX32657/mpc.h @@ -0,0 +1,97 @@ +/** + * @file mpc.h + * @brief Memory Protection Controller (MPC) Header File. + */ + +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32657_MPC_H_ +#define LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32657_MPC_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#if CONFIG_TRUSTED_EXECUTION_SECURE + +/**** Includes ****/ +#include +#include "mxc_device.h" +#include "mpc_regs.h" + +/**** Defines ****/ + +/**** Function Prototypes ****/ + +/** + * @brief Checks whether a region fits within the constraints of physical + * memory (Flash or SRAM). + * @param start_addr Starting address of region to check. + * @param end_addr Ending address of region to check. + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int MXC_MPC_CheckPhyBoundaries(uint32_t start_addr, uint32_t end_addr); + +/** + * @brief Get the MPC register instance where the address is located. + * @param addr Address within memory. + * @return Pointer to MPC registers associated with the address. + */ +mxc_mpc_regs_t *MXC_MPC_GetInstance(uint32_t addr); + +/** + * @brief Gets the MPC block index that the register is located in which + * is associated to the bit location of MPC_BLK_LUT register. + * This function is NOT associated with the MPC_BLK_IDX register. + * @param mpc Pointer to MPC region associated with the addr (param[1]). + * @param addr Address within memory. + * @return The block index if successful. If Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int MXC_MPC_GetBlockIdx(mxc_mpc_regs_t *mpc, uint32_t addr); + +/** + * @brief Sets the region to Secure. + * @param start_addr Starting address of region to check. + * @param end_addr Ending address of region to check. + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int MXC_MPC_SetSecure(uint32_t start_addr, uint32_t end_addr); + +/** + * @brief Sets the region to Non-Secure. + * @param start_addr Starting address of region to check. + * @param end_addr Ending address of region to check. + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int MXC_MPC_SetNonSecure(uint32_t start_addr, uint32_t end_addr); + +/** + * @brief Locks the MPC registers. Prevents write access. + * @param mpc Pointer to MPC registers to lockdown. + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int MXC_MPC_Lock(mxc_mpc_regs_t *mpc); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif // LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32657_MPC_H_ diff --git a/Libraries/PeriphDrivers/Include/MAX32657/mxc_sys.h b/Libraries/PeriphDrivers/Include/MAX32657/mxc_sys.h index 840d2bf2b45..a763886da73 100644 --- a/Libraries/PeriphDrivers/Include/MAX32657/mxc_sys.h +++ b/Libraries/PeriphDrivers/Include/MAX32657/mxc_sys.h @@ -40,7 +40,7 @@ extern "C" { /** @brief System reset0 and reset1 enumeration. Used in MXC_SYS_PeriphReset0 function */ typedef enum { - MXC_SYS_RESET0_DMA0 = MXC_F_GCR_RST0_DMA0_POS, /**< Reset DMA0 */ + MXC_SYS_RESET0_DMA0 = MXC_F_GCR_RST0_DMA0_POS, /**< Reset Non-Secure DMA0 */ MXC_SYS_RESET0_WDT = MXC_F_GCR_RST0_WDT_POS, /**< Reset WDT */ MXC_SYS_RESET0_GPIO0 = MXC_F_GCR_RST0_GPIO0_POS, /**< Reset GPIO0 */ MXC_SYS_RESET0_TMR0 = MXC_F_GCR_RST0_TMR0_POS, /**< Reset TMR0 */ @@ -53,21 +53,21 @@ typedef enum { MXC_SYS_RESET0_SPI = MXC_F_GCR_RST0_SPI_POS, /**< Reset SPI */ MXC_SYS_RESET0_I3C = MXC_F_GCR_RST0_I3C, /**< Reset I2C/I3C */ MXC_SYS_RESET0_RTC = MXC_F_GCR_RST0_RTC_POS, /**< Reset RTC */ - // MXC_SYS_RESET0_SMPHR = MXC_F_GCR_RST0_SMPHR_POS, /**< Reset SMPHR */ MXC_SYS_RESET0_TRNG = MXC_F_GCR_RST0_TRNG_POS, /**< Reset TRNG */ - MXC_SYS_RESET0_DMA1 = MXC_F_GCR_RST0_DMA1_POS, /**< Reset DMA0 */ + MXC_SYS_RESET0_DMA1 = MXC_F_GCR_RST0_DMA1_POS, /**< Reset Secure DMA1 */ MXC_SYS_RESET0_SOFT = MXC_F_GCR_RST0_SOFT_POS, /**< Soft reset */ MXC_SYS_RESET0_PERIPH = MXC_F_GCR_RST0_PERIPH_POS, /**< Peripheral reset */ MXC_SYS_RESET0_SYS = MXC_F_GCR_RST0_SYS_POS, /**< System reset */ /* RESET1 Below this line we add 32 to separate RESET0 and RESET1 */ MXC_SYS_RESET1_CRC = (MXC_F_GCR_RST1_CRC_POS + 32), /**< Reset CRC */ MXC_SYS_RESET1_AES = (MXC_F_GCR_RST1_AES_POS + 32), /**< Reset AES */ + MXC_SYS_RESET1_AUTOCAL = (MXC_F_GCR_RST1_AUTOCAL_POS + 32), /**< Reset AUTOCAL */ } mxc_sys_reset_t; /** @brief System clock disable enumeration. Used in MXC_SYS_ClockDisable and MXC_SYS_ClockEnable functions */ typedef enum { MXC_SYS_PERIPH_CLOCK_GPIO0 = MXC_F_GCR_PCLKDIS0_GPIO0_POS, /**< Disable GPIO0 clock */ - MXC_SYS_PERIPH_CLOCK_DMA0 = MXC_F_GCR_PCLKDIS0_DMA0_POS, /**< Disable DMA0 clock */ + MXC_SYS_PERIPH_CLOCK_DMA0 = MXC_F_GCR_PCLKDIS0_DMA0_POS, /**< Disable Non-Secure DMA0 clock */ MXC_SYS_PERIPH_CLOCK_SPI = MXC_F_GCR_PCLKDIS0_SPI_POS, /**< Disable SPI clock */ MXC_SYS_PERIPH_CLOCK_UART = MXC_F_GCR_PCLKDIS0_UART_POS, /**< Disable UART0 clock */ MXC_SYS_PERIPH_CLOCK_I3C = MXC_F_GCR_PCLKDIS0_I3C_POS, /**< Disable I2C/I3C clock */ @@ -79,13 +79,10 @@ typedef enum { MXC_SYS_PERIPH_CLOCK_TMR5 = MXC_F_GCR_PCLKDIS0_TMR5_POS, /**< Disable TMR4 clock */ /* PCLKDIS1 Below this line we add 32 to separate PCLKDIS0 and PCLKDIS1 */ MXC_SYS_PERIPH_CLOCK_TRNG = (MXC_F_GCR_PCLKDIS1_TRNG_POS + 32), /**< Disable TRNG clock */ - // MXC_SYS_PERIPH_CLOCK_SMPHR = - // (MXC_F_GCR_PCLKDIS1_SMPHR_POS + 32), /**< Disable SMPHR clock */ MXC_SYS_PERIPH_CLOCK_CRC = (MXC_F_GCR_PCLKDIS1_CRC_POS + 32), /**< Disable CRC clock */ MXC_SYS_PERIPH_CLOCK_AES = (MXC_F_GCR_PCLKDIS1_AES_POS + 32), /**< Disable AES clock */ - // MXC_SYS_PERIPH_CLOCK_SPI = - // (MXC_F_GCR_PCLKDIS1_SPI_POS + 32), /**< Disable SPI clock */ - // TODO(JC): The SPI clock disable is defined in both PCLKDIS0 and PCLKDIS1 + MXC_SYS_PERIPH_CLOCK_DMA1 = + (MXC_F_GCR_PCLKDIS1_DMA1_POS + 32), /**< Disable Secure DMA1 clock */ MXC_SYS_PERIPH_CLOCK_WDT = (MXC_F_GCR_PCLKDIS1_WDT_POS), /**< Disable WDT clock */ } mxc_sys_periph_clock_t; diff --git a/Libraries/PeriphDrivers/Include/MAX32657/nspc.h b/Libraries/PeriphDrivers/Include/MAX32657/nspc.h new file mode 100644 index 00000000000..bff02dbd00b --- /dev/null +++ b/Libraries/PeriphDrivers/Include/MAX32657/nspc.h @@ -0,0 +1,97 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32657_NSPC_H_ +#define LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32657_NSPC_H_ + +#include "mxc_device.h" +#include "nspc_regs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup nspc NSPC + * @ingroup periphlibs + * @{ + */ + +/***** Definitions *****/ + +/** + * @brief NSPC Peripheral Definition for setting the Privilege State. + */ +typedef enum { + MXC_NSPC_PERIPH_GCR = MXC_S_NSPC_APBPRIV_PERIPH_GCR, /**< GCR */ + MXC_NSPC_PERIPH_SIR = MXC_S_NSPC_APBPRIV_PERIPH_SIR, /**< SIR */ + MXC_NSPC_PERIPH_FCR = MXC_S_NSPC_APBPRIV_PERIPH_FCR, /**< FCR */ + MXC_NSPC_PERIPH_WDT = MXC_S_NSPC_APBPRIV_PERIPH_WDT, /**< WDT */ + MXC_NSPC_PERIPH_AES = MXC_S_NSPC_APBPRIV_PERIPH_AES, /**< AES */ + MXC_NSPC_PERIPH_AESKEYS = MXC_S_NSPC_APBPRIV_PERIPH_AESKEYS, /**< AESKEYS */ + MXC_NSPC_PERIPH_GPIO0 = MXC_S_NSPC_APBPRIV_PERIPH_GPIO0, /**< GPIO0 */ + MXC_NSPC_PERIPH_CRC = MXC_S_NSPC_APBPRIV_PERIPH_CRC, /**< CRC */ + MXC_NSPC_PERIPH_TMR0 = MXC_S_NSPC_APBPRIV_PERIPH_TMR0, /**< TMR0 */ + MXC_NSPC_PERIPH_TMR1 = MXC_S_NSPC_APBPRIV_PERIPH_TMR1, /**< TMR1 */ + MXC_NSPC_PERIPH_TMR2 = MXC_S_NSPC_APBPRIV_PERIPH_TMR2, /**< TMR2 */ + MXC_NSPC_PERIPH_TMR3 = MXC_S_NSPC_APBPRIV_PERIPH_TMR3, /**< TMR3 */ + MXC_NSPC_PERIPH_TMR4 = MXC_S_NSPC_APBPRIV_PERIPH_TMR4, /**< TMR4 */ + MXC_NSPC_PERIPH_TMR5 = MXC_S_NSPC_APBPRIV_PERIPH_TMR5, /**< TMR5 */ + MXC_NSPC_PERIPH_I3C = MXC_S_NSPC_APBPRIV_PERIPH_I3C, /**< I3C */ + MXC_NSPC_PERIPH_UART = MXC_S_NSPC_APBPRIV_PERIPH_UART, /**< UART */ + MXC_NSPC_PERIPH_SPI = MXC_S_NSPC_APBPRIV_PERIPH_SPI, /**< SPI */ + MXC_NSPC_PERIPH_TRNG = MXC_S_NSPC_APBPRIV_PERIPH_TRNG, /**< TRNG */ + MXC_NSPC_PERIPH_BTLE_DBB = MXC_S_NSPC_APBPRIV_PERIPH_BTLE_DBB, /**< BTLE DBB */ + MXC_NSPC_PERIPH_BTLE_RFFE = MXC_S_NSPC_APBPRIV_PERIPH_BTLE_RFFE, /**< BTLE RFFE */ + MXC_NSPC_PERIPH_RSTZ = MXC_S_NSPC_APBPRIV_PERIPH_RSTZ, /**< RSTZ */ + MXC_NSPC_PERIPH_BOOST = MXC_S_NSPC_APBPRIV_PERIPH_BOOST, /**< BOOST */ + MXC_NSPC_PERIPH_TRIMSIR = MXC_S_NSPC_APBPRIV_PERIPH_TRIMSIR, /**< TRIMSIR */ + MXC_NSPC_PERIPH_RTC = MXC_S_NSPC_APBPRIV_PERIPH_RTC, /**< RTC */ + MXC_NSPC_PERIPH_WUT0 = MXC_S_NSPC_APBPRIV_PERIPH_WUT0, /**< WUT0 */ + MXC_NSPC_PERIPH_WUT1 = MXC_S_NSPC_APBPRIV_PERIPH_WUT1, /**< WUT1 */ + MXC_NSPC_PERIPH_PWRSEQ = MXC_S_NSPC_APBPRIV_PERIPH_PWRSEQ, /**< PWRSEQ */ + MXC_NSPC_PERIPH_MCR = MXC_S_NSPC_APBPRIV_PERIPH_MCR, /**< MCR */ + MXC_NSPC_PERIPH_ALL = MXC_S_NSPC_APBPRIV_PERIPH_ALL, /**< All */ +} mxc_nspc_periph_t; + +/** @brief Enumeration for ARM privilege settings. */ +typedef enum { + MXC_NSPC_PRIVILEGED = 0, + MXC_NSPC_UNPRIVILEGED = 1, +} mxc_nspc_priv_t; + +/***** Function Prototypes *****/ + +/** + * @brief Sets the privilege level for a Peripheral. + * @param periph Enumeration for desired peripheral. + * @param priv Enumeration for desired privilege level. + */ +void MXC_NSPC_SetPrivAccess(mxc_nspc_periph_t periph, mxc_nspc_priv_t priv); + +/** + * @brief Sets the privilege level for Non-Secure DMA. + * @param priv Enumeration for desired privilege level. + */ +void MXC_NSPC_DMA_SetPrivAccess(mxc_nspc_priv_t priv); + +#ifdef __cplusplus +} +#endif + +#endif // LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32657_NSPC_H_ diff --git a/Libraries/PeriphDrivers/Include/MAX32657/nvic_table.h b/Libraries/PeriphDrivers/Include/MAX32657/nvic_table.h index 0b96279aab5..6367d3ea35c 100644 --- a/Libraries/PeriphDrivers/Include/MAX32657/nvic_table.h +++ b/Libraries/PeriphDrivers/Include/MAX32657/nvic_table.h @@ -40,27 +40,6 @@ extern "C" { */ void MXC_NVIC_SetVector(IRQn_Type irqn, void (*irq_callback)(void)); -#if defined(__GNUC__) -#if __CM4_CMSIS_VERSION_MAIN == 0x03 -// NVIC_SetVector was custom-implemented in the PeriphDrivers library for -// CMSIS version 3. Newer versions of CMSIS provide an implementation of -// NVIC_SetVector with different functionality, so the Maxim implementation -// has been moved to MXC_NVIC_SetVector (above). - -// The MSDK will move to CMSIS version 5 in the future. - -// For CMSIS version 3, use MXC_NVIC_SetVector instead. -// For CMSIS version 5, you have the choice of using either. However, only -// MXC_NVIC_SetVector will work with legacy code. -inline __attribute__(( - deprecated("Use MXC_NVIC_SetVector instead. See nvic_table.h for more details."))) void -NVIC_SetVector(IRQn_Type irqn, void (*irq_callback)(void)) -{ - MXC_NVIC_SetVector(irqn, irq_callback); -} -#endif -#endif - /** * @brief Copy NVIC vector table to RAM and set NVIC to RAM based table. * @@ -77,27 +56,6 @@ void NVIC_SetRAM(void); */ uint32_t MXC_NVIC_GetVector(IRQn_Type IRQn); -#if defined(__GNUC__) -#if __CM4_CMSIS_VERSION_MAIN == 0x03 -// NVIC_GetVector was custom-implemented in the PeriphDrivers library for -// CMSIS version 3. Newer versions of CMSIS provide an implementation of -// NVIC_GetVector with different functionality, so the Maxim implementation -// has been moved to MXC_NVIC_GetVector (above). - -// The MSDK will move to CMSIS version 5 in the future. - -// For CMSIS version 3, use MXC_NVIC_SetVector instead. -// For CMSIS version 5, you have the choice of using either. However, only -// MXC_NVIC_GetVector will work with legacy code. -inline __attribute__(( - deprecated("Use MXC_NVIC_GetVector instead. See nvic_table.h for more details."))) void -NVIC_GetVector(IRQn_Type irqn) -{ - MXC_NVIC_GetVector(irqn); -} -#endif -#endif - #ifdef __cplusplus } #endif diff --git a/Libraries/PeriphDrivers/Include/MAX32657/spc.h b/Libraries/PeriphDrivers/Include/MAX32657/spc.h new file mode 100644 index 00000000000..ab1c87ba6bf --- /dev/null +++ b/Libraries/PeriphDrivers/Include/MAX32657/spc.h @@ -0,0 +1,212 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32657_SPC_H_ +#define LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32657_SPC_H_ + +#include +#include +#include "mxc_device.h" +#include "spc_regs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup spc SPC + * @ingroup periphlibs + * @{ + */ + +/***** Definitions *****/ + +/** + * @brief SPC Peripheral Definition for setting the Security and Privilege State. + * The SPC_APBSEC register definitions are used, but this can also be used + * for the SPC_APBPRIV register as well since the peripheral fields are a + * one-to-one match. + */ +typedef enum { + MXC_SPC_PERIPH_GCR = MXC_S_SPC_APBSEC_PERIPH_GCR, /**< GCR */ + MXC_SPC_PERIPH_SIR = MXC_S_SPC_APBSEC_PERIPH_SIR, /**< SIR */ + MXC_SPC_PERIPH_FCR = MXC_S_SPC_APBSEC_PERIPH_FCR, /**< FCR */ + MXC_SPC_PERIPH_WDT = MXC_S_SPC_APBSEC_PERIPH_WDT, /**< WDT */ + MXC_SPC_PERIPH_AES = MXC_S_SPC_APBSEC_PERIPH_AES, /**< AES */ + MXC_SPC_PERIPH_AESKEYS = MXC_S_SPC_APBSEC_PERIPH_AESKEYS, /**< AESKEYS */ + MXC_SPC_PERIPH_GPIO0 = MXC_S_SPC_APBSEC_PERIPH_GPIO0, /**< GPIO0 */ + MXC_SPC_PERIPH_CRC = MXC_S_SPC_APBSEC_PERIPH_CRC, /**< CRC */ + MXC_SPC_PERIPH_TMR0 = MXC_S_SPC_APBSEC_PERIPH_TMR0, /**< TMR0 */ + MXC_SPC_PERIPH_TMR1 = MXC_S_SPC_APBSEC_PERIPH_TMR1, /**< TMR1 */ + MXC_SPC_PERIPH_TMR2 = MXC_S_SPC_APBSEC_PERIPH_TMR2, /**< TMR2 */ + MXC_SPC_PERIPH_TMR3 = MXC_S_SPC_APBSEC_PERIPH_TMR3, /**< TMR3 */ + MXC_SPC_PERIPH_TMR4 = MXC_S_SPC_APBSEC_PERIPH_TMR4, /**< TMR4 */ + MXC_SPC_PERIPH_TMR5 = MXC_S_SPC_APBSEC_PERIPH_TMR5, /**< TMR5 */ + MXC_SPC_PERIPH_I3C = MXC_S_SPC_APBSEC_PERIPH_I3C, /**< I3C */ + MXC_SPC_PERIPH_UART = MXC_S_SPC_APBSEC_PERIPH_UART, /**< UART */ + MXC_SPC_PERIPH_SPI = MXC_S_SPC_APBSEC_PERIPH_SPI, /**< SPI */ + MXC_SPC_PERIPH_TRNG = MXC_S_SPC_APBSEC_PERIPH_TRNG, /**< TRNG */ + MXC_SPC_PERIPH_BTLE_DBB = MXC_S_SPC_APBSEC_PERIPH_BTLE_DBB, /**< BTLE DBB */ + MXC_SPC_PERIPH_BTLE_RFFE = MXC_S_SPC_APBSEC_PERIPH_BTLE_RFFE, /**< BTLE RFFE */ + MXC_SPC_PERIPH_RSTZ = MXC_S_SPC_APBSEC_PERIPH_RSTZ, /**< RSTZ */ + MXC_SPC_PERIPH_BOOST = MXC_S_SPC_APBSEC_PERIPH_BOOST, /**< BOOST */ + MXC_SPC_PERIPH_TRIMSIR = MXC_S_SPC_APBSEC_PERIPH_TRIMSIR, /**< TRIMSIR */ + MXC_SPC_PERIPH_RTC = MXC_S_SPC_APBSEC_PERIPH_RTC, /**< RTC */ + MXC_SPC_PERIPH_WUT0 = MXC_S_SPC_APBSEC_PERIPH_WUT0, /**< WUT0 */ + MXC_SPC_PERIPH_WUT1 = MXC_S_SPC_APBSEC_PERIPH_WUT1, /**< WUT1 */ + MXC_SPC_PERIPH_PWRSEQ = MXC_S_SPC_APBSEC_PERIPH_PWRSEQ, /**< PWRSEQ */ + MXC_SPC_PERIPH_MCR = MXC_S_SPC_APBSEC_PERIPH_MCR, /**< MCR */ + MXC_SPC_PERIPH_ALL = MXC_S_SPC_APBSEC_PERIPH_ALL, /**< All */ +} mxc_spc_periph_t; + +/** @brief Enumeration for ARM privilege settings. */ +typedef enum { + MXC_SPC_PRIVILEGED = 0, + MXC_SPC_UNPRIVILEGED = 1, +} mxc_spc_priv_t; + +/***** Function Prototypes *****/ + +/** + * @brief Locks the SPC registers related to setting the security + * or privilege states. Once locked, the affected SPC registers + * can not be unlocked until a reset. + */ +void MXC_SPC_Lock(void); + +/** + * @brief Locks the Cortex-M33 Core registers: + * - AIRCR and VTOR_S + * - VTOR_NS + * - MPU_S + * - MPU_NS + * - SAU + */ +void MXC_SPC_Core_Lock(void); + +/** + * @brief Unlocks the Cortex-M33 Core registers: + * - AIRCR and VTOR_S + * - VTOR_NS + * - MPU_S + * - MPU_NS + * - SAU + */ +void MXC_SPC_Core_UnLock(void); + +/** + * @brief Sets the privilege level of a peripheral. + * @param periph Enumeration for desired peripheral. + * @param priv Enumeration for desired privilege level. + */ +void MXC_SPC_SetPrivAccess(mxc_spc_periph_t periph, mxc_spc_priv_t priv); + +/** + * @brief Sets the peripheral to only be accessible from the Secure world. + * @param periph Enumeration for desired peripheral. + */ +void MXC_SPC_SetSecure(mxc_spc_periph_t periph); + +/** + * @brief Sets the peripheral to only be accessible from the Non-Secure world. + * @param periph Enumeration for desired peripheral. + */ +void MXC_SPC_SetNonSecure(mxc_spc_periph_t periph); + +/** + * @brief Sets the privilege level for Secure DMA. + * @param priv Enumeration for desired privilege level. + */ +void MXC_SPC_DMA_SetPrivAccess(mxc_spc_priv_t priv); + +/** + * @brief Sets the pins for a GPIO instance to only be accessible from the Secure world. + * @param gpio Pointer to the GPIO port's registers. + * @param pins mask of pins to set to Secure mode. + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int MXC_SPC_GPIO_SetSecure(mxc_gpio_regs_t *gpio, uint32_t pins); + +/** + * @brief Sets the pins for a GPIO instance to only be accessible from the Non-Secure world. + * @param gpio Pointer to the GPIO port's registers. + * @param pins mask of pins to set to Non-Secure mode. + * @return Success/Fail, see \ref MXC_Error_Codes for a list of return codes. + */ +int MXC_SPC_GPIO_SetNonSecure(mxc_gpio_regs_t *gpio, uint32_t pins); + +/** + * @brief Enable the interrupts for each Memory Protection Controller (MPC) region. + * @param intr mask of MPC regions to interrupt for. + */ +void MXC_SPC_MPC_EnableInt(uint32_t intr); + +/** + * @brief Disable the interrupts for each Memory Protection Controller (MPC) region. + * @param intr mask of MPC regions to disable interrupt for. + */ +void MXC_SPC_MPC_DisableInt(uint32_t intr); + +/** + * @brief Gets the Memory Protection Controller (MPC) interrupt flags that are currently set. + * @return MPC interrupt flags. + */ +uint32_t MXC_SPC_MPC_GetFlags(void); + +/** + * @brief Enable the interrupts for Peripheral Protection Controllers (PPC). + * @param intr mask of PPC regions to disable interrupt for. + */ +void MXC_SPC_PPC_EnableInt(uint32_t intr); + +/** + * @brief Disable the interrupts for Peripheral Protection Controllers (PPC). + * @param intr mask of PPC regions to disable interrupt for. + */ +void MXC_SPC_PPC_DisableInt(uint32_t intr); + +/** + * @brief Gets the Peripheral Protection Controller (PPC) interrupt flags + * that are currently set. + * @return PPC interrupt flags. + */ +uint32_t MXC_SPC_PPC_GetFlags(void); + +/** + * @brief Clears the Peripheral Protection Controllers (PPC) Interrupt Flags. + * @param flags mask of PPC interrupt flags to clear. + */ +void MXC_SPC_PPC_ClearFlags(uint32_t flags); + +/** + * @brief Sets the CODE region to be Non-Secure Callable. + * @param isNSC Option to set CODE region as non-secure callable (True) or not (False). + */ +void MXC_SPC_SetCode_NSC(bool isNSC); + +/** + * @brief Sets the CODE region to be Non-Secure Callable. + * @param isNSC Option to set CODE region as non-secure callable (True) or not (False). + */ +void MXC_SPC_SetSRAM_NSC(bool isNSC); + +#ifdef __cplusplus +} +#endif + +#endif // LIBRARIES_PERIPHDRIVERS_INCLUDE_MAX32657_SPC_H_ diff --git a/Libraries/PeriphDrivers/Include/MAX32670/uart.h b/Libraries/PeriphDrivers/Include/MAX32670/uart.h index e436ebdf924..a5dc3446b81 100644 --- a/Libraries/PeriphDrivers/Include/MAX32670/uart.h +++ b/Libraries/PeriphDrivers/Include/MAX32670/uart.h @@ -86,6 +86,7 @@ typedef enum { /*32K (ERTCO) and INRO clocks can only be used for UART3*/ MXC_UART_ERTCO_CLK = 4, MXC_UART_INRO_CLK = 5, + MXC_UART_AOD_CLK = 6 } mxc_uart_clock_t; /** @@ -259,6 +260,15 @@ int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rt */ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock); +/** + * @brief Gets the clock source used for the UART instance + * + * @param uart Pointer to UART registers (selects the UART block used.) + * + * @return The selected clock source for the UART instance + */ +mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart); + /* ************************************************************************* */ /* Low-level functions */ /* ************************************************************************* */ diff --git a/Libraries/PeriphDrivers/Include/MAX32672/uart.h b/Libraries/PeriphDrivers/Include/MAX32672/uart.h index ba1c9893e43..1aab642cf35 100644 --- a/Libraries/PeriphDrivers/Include/MAX32672/uart.h +++ b/Libraries/PeriphDrivers/Include/MAX32672/uart.h @@ -82,10 +82,10 @@ typedef enum { MXC_UART_EXT_CLK = 1, /*8M (IBRO) and 32M (EFRO) clocks can be used for UARTs 0,1 and 2*/ MXC_UART_IBRO_CLK = 2, - MXC_UART_ERFO_CLK = 3, /*32K (ERTCO) and 80K (INRO) clocks can only be used for UART3*/ - MXC_UART_ERTCO_CLK = 4, - MXC_UART_INRO_CLK = 5, + MXC_UART_ERTCO_CLK = 3, + MXC_UART_INRO_CLK = 4, + MXC_UART_AOD_CLK = 5 } mxc_uart_clock_t; /** @@ -276,6 +276,15 @@ int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rt */ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock); +/** + * @brief Gets the clock source used for the UART instance + * + * @param uart Pointer to UART registers (selects the UART block used.) + * + * @return The selected clock source for the UART instance + */ +mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart); + /* ************************************************************************* */ /* Low-level functions */ /* ************************************************************************* */ diff --git a/Libraries/PeriphDrivers/Include/MAX32675/uart.h b/Libraries/PeriphDrivers/Include/MAX32675/uart.h index 00317e5e0f5..d080a4c74cd 100644 --- a/Libraries/PeriphDrivers/Include/MAX32675/uart.h +++ b/Libraries/PeriphDrivers/Include/MAX32675/uart.h @@ -80,11 +80,9 @@ typedef enum { typedef enum { MXC_UART_APB_CLK = 0, MXC_UART_EXT_CLK = 1, - /*8M (IBRO) and 32M (EFRO) clocks can be used for UARTs 0,1 and 2*/ + /*8M (IBRO) and 32M (EFRO) clocks can be used for UARTs 0 and 2*/ MXC_UART_IBRO_CLK = 2, MXC_UART_ERFO_CLK = 3, - /*32K (ERTCO) clock can only be used for UART3*/ - MXC_UART_ERTCO_CLK = 4, } mxc_uart_clock_t; /** diff --git a/Libraries/PeriphDrivers/Include/MAX78002/mxc_sys.h b/Libraries/PeriphDrivers/Include/MAX78002/mxc_sys.h index 163509a9a82..0f2ca395f33 100644 --- a/Libraries/PeriphDrivers/Include/MAX78002/mxc_sys.h +++ b/Libraries/PeriphDrivers/Include/MAX78002/mxc_sys.h @@ -187,6 +187,17 @@ typedef enum { MXC_V_GCR_CLKCTRL_SYSCLK_SEL_EXTCLK /**< Use the external system clock input. */ } mxc_sys_system_clock_t; +typedef enum { + MXC_SYS_CLOCK_DIV_1 = MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV1, + MXC_SYS_CLOCK_DIV_2 = MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV2, + MXC_SYS_CLOCK_DIV_4 = MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV4, + MXC_SYS_CLOCK_DIV_8 = MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV8, + MXC_SYS_CLOCK_DIV_16 = MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV16, + MXC_SYS_CLOCK_DIV_32 = MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV32, + MXC_SYS_CLOCK_DIV_64 = MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV64, + MXC_SYS_CLOCK_DIV_128 = MXC_S_GCR_CLKCTRL_SYSCLK_DIV_DIV128 +} mxc_sys_system_clock_div_t; + #define MXC_SYS_USN_CHECKSUM_LEN 16 // Length of the USN + padding for checksum compute #define MXC_SYS_USN_CSUM_FIELD_LEN 2 // Size of the checksum field in the USN #define MXC_SYS_USN_LEN 13 // Size of the USN including the checksum @@ -355,6 +366,18 @@ int MXC_SYS_ClockSourceDisable(mxc_sys_system_clock_t clock); */ int MXC_SYS_Clock_Select(mxc_sys_system_clock_t clock); +/** + * @brief Set the system clock divider. + * @param div Enumeration for desired clock divider. + */ +void MXC_SYS_SetClockDiv(mxc_sys_system_clock_div_t div); + +/** + * @brief Get the system clock divider. + * @returns System clock divider. + */ +mxc_sys_system_clock_div_t MXC_SYS_GetClockDiv(void); + /** * @brief Wait for a clock to enable with timeout * @param ready The clock to wait for diff --git a/Libraries/PeriphDrivers/Source/AFE/afe_adc_one_reva.svd b/Libraries/PeriphDrivers/Source/AFE/afe_adc_one_reva.svd index e78cee39a13..b15783d5fbf 100644 --- a/Libraries/PeriphDrivers/Source/AFE/afe_adc_one_reva.svd +++ b/Libraries/PeriphDrivers/Source/AFE/afe_adc_one_reva.svd @@ -278,7 +278,7 @@ 3 - REF0P_AND_REF0N + AIN0P_AND_AIN1N Description not included 0 @@ -288,7 +288,7 @@ 1 - REF2P_AND_REF2N + REF0P_AND_REF0N Description not included 2 @@ -298,7 +298,7 @@ 3 - REF0P_AND_AGND + AIN0P_AND_AGND Description not included 4 @@ -308,7 +308,7 @@ 5 - REF2P_AND_AGND + REF0P_AND_AGND Description not included 6 @@ -700,9 +700,16 @@ REV_ID - Description not included + Revision ID. 0 - 3 + 5 + read-only + + + ADC_SEL + ADC Selected. + 5 + 1 read-only @@ -2811,4 +2818,4 @@ - + \ No newline at end of file diff --git a/Libraries/PeriphDrivers/Source/AFE/afe_adc_zero_reva.svd b/Libraries/PeriphDrivers/Source/AFE/afe_adc_zero_reva.svd index 287bf658b2e..e8d6703cb12 100644 --- a/Libraries/PeriphDrivers/Source/AFE/afe_adc_zero_reva.svd +++ b/Libraries/PeriphDrivers/Source/AFE/afe_adc_zero_reva.svd @@ -278,7 +278,7 @@ 3 - REF0P_AND_REF0N + AIN0P_AND_AIN1N Description not included 0 @@ -288,7 +288,7 @@ 1 - REF2P_AND_REF2N + REF0P_AND_REF0N Description not included 2 @@ -298,7 +298,7 @@ 3 - REF0P_AND_AGND + AIN0P_AND_AGND Description not included 4 @@ -308,7 +308,7 @@ 5 - REF2P_AND_AGND + REF0P_AND_AGND Description not included 6 @@ -696,13 +696,20 @@ PART_ID Silicon Revision ID - 0x00110003 + 0x00910003 REV_ID - Description not included + Revision ID. 0 - 6 + 5 + read-only + + + ADC_SEL + ADC Selected. + 5 + 1 read-only diff --git a/Libraries/PeriphDrivers/Source/AFE/hart_uart.c b/Libraries/PeriphDrivers/Source/AFE/hart_uart.c index b167ab88adc..ed1533ae0d9 100644 --- a/Libraries/PeriphDrivers/Source/AFE/hart_uart.c +++ b/Libraries/PeriphDrivers/Source/AFE/hart_uart.c @@ -173,9 +173,11 @@ static int hart_uart_init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clo MXC_AFE_GPIO_Config(&gpio_cfg_extclk); break; +#if TARGET_NUM != 32675 case MXC_UART_ERTCO_CLK: return E_BAD_PARAM; break; +#endif case MXC_UART_IBRO_CLK: MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); diff --git a/Libraries/PeriphDrivers/Source/BOOST/boost_reva.svd b/Libraries/PeriphDrivers/Source/BOOST/boost_reva.svd new file mode 100644 index 00000000000..aa7e5c55732 --- /dev/null +++ b/Libraries/PeriphDrivers/Source/BOOST/boost_reva.svd @@ -0,0 +1,159 @@ + + + + + BOOST + Boost Controller + 0x40004C00 + + 0x00 + 0x400 + registers + + + BOOST + 46 + + + + DISABLE + Boost Disable Register. + 0x000 + 32 + + + DIS + This bit allows softwaree to disable the boost regulator for the VDD18 supply. + [0:0] + read-write + + + + + VREGCTRL + Boost Voltage Regulator Control Register. + 0x004 + + + SET + Sets the target voltage for the boost regulator output. + [4:0] + read-write + + + + + IPEAK + Low Side FET Peak Current Register. + 0x008 + read-only + + + SET + Sets the peak current threshold for the regulator. + [2:0] + read-only + + + + + MAXTON + Maximum Low Side FET Time-On Register. + 0x00C + read-only + + + THD + Sets a threshold for when time-on out toggles. + [3:0] + read-only + + + + + ILOAD + Boost Cycle Count Register. + 0x010 + read-only + + + CNT + Indicates the last load cycle count value. + [7:0] + read-only + + + + + ALERT + Boost Cycle Count Alert Register. + 0x014 + + + THD + Determines the threshold for when the boost alert interruptis fired. + [7:0] + read-write + + + + + RDY + Boost Output Ready Register. + 0x018 + read-only + + + OUT + Indicates ready out status for boost regulator. + [0:0] + read-only + + + + + ZXCAL + Zero Cross Calibration Register. + 0x01C + read-only + + + VAL + Read back of auto-calibration values. + [4:0] + read-only + + + + + INTEN + Boost Alert Interrupt Enable Register. + 0x020 + read-write + + + ALERT + Boost alert enable/ + [0:0] + read-write + + + + + INTFL + Boost Alert Interrupt Status Register. + 0x024 + read-write + + + ALERT + Boost alert has occurred. + [0:0] + read-write + + + + + + + \ No newline at end of file diff --git a/Libraries/PeriphDrivers/Source/DMA/dma_me30.c b/Libraries/PeriphDrivers/Source/DMA/dma_me30.c index 7ae6aaddf1b..df94a934b50 100644 --- a/Libraries/PeriphDrivers/Source/DMA/dma_me30.c +++ b/Libraries/PeriphDrivers/Source/DMA/dma_me30.c @@ -35,18 +35,17 @@ int MXC_DMA_Init(mxc_dma_regs_t *dma) { #ifndef MSDK_NO_GPIO_CLK_INIT - if (dma == MXC_DMA0 && !MXC_SYS_IsClockEnabled(MXC_SYS_PERIPH_CLOCK_DMA0)) { + if (dma == MXC_DMA0_NS && !MXC_SYS_IsClockEnabled(MXC_SYS_PERIPH_CLOCK_DMA0)) { MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_DMA0); MXC_SYS_Reset_Periph(MXC_SYS_RESET0_DMA0); +#if CONFIG_TRUSTED_EXECUTION_SECURE + // DMA1 is only accessible from Secure world. + } else if (dma == MXC_DMA1_S && !MXC_SYS_IsClockEnabled(MXC_SYS_PERIPH_CLOCK_DMA1)) { + MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_DMA1); + MXC_SYS_Reset_Periph(MXC_SYS_RESET0_DMA1); +#endif // CONFIG_TRUSTED_EXECUTION_SECURE } - // TODO(ME30): There is no periph clock enable register for DMA1 atm - // -Added but it's in feat/ME30 branch. - // Uncomment when merged. - // else if (dma == MXC_DMA1 && !MXC_SYS_IsClockEnabled(MXC_SYS_PERIPH_CLOCK_DMA1)) - // MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_DMA1); - // MXC_SYS_Reset_Periph(MXC_SYS_RESET0_DMA1); - // } -#endif +#endif // MSDK_NO_GPIO_CLK_INIT return MXC_DMA_RevA_Init((mxc_dma_reva_regs_t *)dma); } diff --git a/Libraries/PeriphDrivers/Source/DMA/dma_reva_me30.svd b/Libraries/PeriphDrivers/Source/DMA/dma_reva_me30.svd index 16ae2b95025..e2880fabe17 100644 --- a/Libraries/PeriphDrivers/Source/DMA/dma_reva_me30.svd +++ b/Libraries/PeriphDrivers/Source/DMA/dma_reva_me30.svd @@ -11,20 +11,20 @@ registers - DMA0 - 28 + DMA0_CH0 + 32 - DMA1 - 29 + DMA0_CH1 + 33 - DMA2 - 30 + DMA0_CH2 + 34 - DMA3 - 31 + DMA0_CH3 + 35 @@ -199,46 +199,56 @@ Memory To Memory 0x00 + + SPIRX + SPI RX + 0x01 + UARTRX UART RX 0x04 - I3CRX - I3C RX + I3CRX_CONT + I3C RX Controller 0x07 - SPIRX - SPI RX - 0x0F + I3CRX_TARG + I3C RX Target + 0x08 AESRX AES RX 0x10 + + SPITX + SPI TX + 0x21 + UARTTX UART TX 0x24 - I3CTX + I3CTX_CONT I3C TX 0x27 + + I3CTX_TARG + I3C TX + 0x28 + CRCTX CRC TX 0x2C - - SPITX - SPI TX - 0x2F - AESTX AES TX diff --git a/Libraries/PeriphDrivers/Source/FLC/flc_me30.c b/Libraries/PeriphDrivers/Source/FLC/flc_me30.c index fa8f12b072e..bcd94c65de9 100644 --- a/Libraries/PeriphDrivers/Source/FLC/flc_me30.c +++ b/Libraries/PeriphDrivers/Source/FLC/flc_me30.c @@ -63,8 +63,10 @@ int MXC_FLC_ME30_GetPhysicalAddress(uint32_t addr, uint32_t *result) { if ((addr >= MXC_FLASH_MEM_BASE) && (addr < (MXC_FLASH_MEM_BASE + MXC_FLASH_MEM_SIZE))) { *result = addr & (MXC_FLASH_MEM_SIZE - 1); +#if CONFIG_TRUSTED_EXECUTION_SECURE } else if ((addr >= MXC_INFO_MEM_BASE) && (addr < (MXC_INFO_MEM_BASE + MXC_INFO_MEM_SIZE))) { *result = (addr & (MXC_INFO_MEM_SIZE - 1)) + MXC_FLASH_MEM_SIZE; +#endif } else { return E_BAD_PARAM; } @@ -251,40 +253,11 @@ int MXC_FLC_BlockPageRead(uint32_t address) //****************************************************************************** volatile uint32_t *MXC_FLC_GetWELR(uint32_t address, uint32_t page_num) { - uint32_t reg_num; - reg_num = page_num >> - 5; // Divide by 32 to get WELR register number containing the page lock bit - - if (address < MXC_FLASH_MEM_BASE || address > (MXC_FLASH_MEM_BASE + MXC_FLASH_MEM_SIZE)) { - return NULL; - } - - switch (reg_num) { - case 0: - return &(MXC_FLC->welr0); - case 1: - return &(MXC_FLC->welr1); - } - return NULL; } //****************************************************************************** volatile uint32_t *MXC_FLC_GetRLR(uint32_t address, uint32_t page_num) { - uint32_t reg_num; - reg_num = page_num >> 5; // Divide by 32 to get RLR register number containing the page lock bit - - if (address < MXC_FLASH_MEM_BASE || address > (MXC_FLASH_MEM_BASE + MXC_FLASH_MEM_SIZE)) { - return NULL; - } - - switch (reg_num) { - case 0: - return &(MXC_FLC->rlr0); - case 1: - return &(MXC_FLC->rlr1); - } - return NULL; } diff --git a/Libraries/PeriphDrivers/Source/FLC/flc_reva.c b/Libraries/PeriphDrivers/Source/FLC/flc_reva.c index e8252128e22..8302a80a3f9 100644 --- a/Libraries/PeriphDrivers/Source/FLC/flc_reva.c +++ b/Libraries/PeriphDrivers/Source/FLC/flc_reva.c @@ -31,6 +31,8 @@ #include "flc_reva.h" #include "flc.h" +// TODO(CM33): Check for secure vs non-secure accesses here. + /** * @ingroup flc * @{ @@ -405,10 +407,13 @@ int MXC_FLC_RevA_ClearFlags(uint32_t mask) //****************************************************************************** int MXC_FLC_RevA_UnlockInfoBlock(mxc_flc_reva_regs_t *flc, uint32_t address) { +#if defined(CONFIG_TRUSTED_EXECUTION_SECURE) || (CONFIG_TRUSTED_EXECUTION_SECURE != 0) || \ + (TARGET_NUM != 32657) if ((address < MXC_INFO_MEM_BASE) || (address >= (MXC_INFO_MEM_BASE + (MXC_INFO_MEM_SIZE * 2)))) { return E_BAD_PARAM; } +#endif /* Make sure the info block is locked */ flc->actrl = 0x1234; @@ -424,10 +429,13 @@ int MXC_FLC_RevA_UnlockInfoBlock(mxc_flc_reva_regs_t *flc, uint32_t address) //****************************************************************************** int MXC_FLC_RevA_LockInfoBlock(mxc_flc_reva_regs_t *flc, uint32_t address) { +#if defined(CONFIG_TRUSTED_EXECUTION_SECURE) || (CONFIG_TRUSTED_EXECUTION_SECURE != 0) || \ + (TARGET_NUM != 32657) if ((address < MXC_INFO_MEM_BASE) || (address >= (MXC_INFO_MEM_BASE + (MXC_INFO_MEM_SIZE * 2)))) { return E_BAD_PARAM; } +#endif flc->actrl = 0xDEADBEEF; return E_NO_ERROR; diff --git a/Libraries/PeriphDrivers/Source/FLC/flc_revb_me30.svd b/Libraries/PeriphDrivers/Source/FLC/flc_revb_me30.svd index 2b177533f80..78ff2ae0878 100644 --- a/Libraries/PeriphDrivers/Source/FLC/flc_revb_me30.svd +++ b/Libraries/PeriphDrivers/Source/FLC/flc_revb_me30.svd @@ -11,8 +11,9 @@ registers - Flash_Controller - Flash Controller interrupt. + FLC + + FLC Interrupt. 23 @@ -263,58 +264,6 @@ - - WELR0 - WELR0 - 0x80 - - - WELR0 - Access control. - 0 - 32 - - - - - WELR1 - WELR1 - 0x88 - - - WELR1 - Access control. - 0 - 32 - - - - - RLR0 - RLR0 - 0x90 - - - RLR0 - Access control. - 0 - 32 - - - - - RLR1 - RLR1 - 0x98 - - - RLR1 - Access control. - 0 - 32 - - - diff --git a/Libraries/PeriphDrivers/Source/GPIO/gpio_me30.c b/Libraries/PeriphDrivers/Source/GPIO/gpio_me30.c index c027691f7e8..c7e07a07063 100644 --- a/Libraries/PeriphDrivers/Source/GPIO/gpio_me30.c +++ b/Libraries/PeriphDrivers/Source/GPIO/gpio_me30.c @@ -87,12 +87,6 @@ int MXC_GPIO_Config(const mxc_gpio_cfg_t *cfg) return E_NO_ERROR; } - // Configure the vssel - error = MXC_GPIO_SetVSSEL(gpio, cfg->vssel, cfg->mask); - if (error != E_NO_ERROR) { - return error; - } - // Configure alternate function error = MXC_GPIO_RevA_SetAF((mxc_gpio_reva_regs_t *)gpio, cfg->func, cfg->mask); if (error != E_NO_ERROR) { @@ -100,7 +94,6 @@ int MXC_GPIO_Config(const mxc_gpio_cfg_t *cfg) } // Configure the pad - // TODO(ME30): "ps" (weak vs strong pull-up/down select) register field missing switch (cfg->pad) { case MXC_GPIO_PAD_NONE: gpio->padctrl0 &= ~cfg->mask; @@ -112,25 +105,25 @@ int MXC_GPIO_Config(const mxc_gpio_cfg_t *cfg) case MXC_GPIO_PAD_WEAK_PULL_UP: gpio->padctrl0 |= cfg->mask; gpio->padctrl1 &= ~cfg->mask; - // gpio->ps |= cfg->mask; + gpio->pssel |= cfg->mask; break; case MXC_GPIO_PAD_PULL_UP: gpio->padctrl0 |= cfg->mask; gpio->padctrl1 &= ~cfg->mask; - // gpio->ps &= ~cfg->mask; + gpio->pssel &= ~cfg->mask; break; case MXC_GPIO_PAD_WEAK_PULL_DOWN: gpio->padctrl0 &= ~cfg->mask; gpio->padctrl1 |= cfg->mask; - // gpio->ps |= cfg->mask; + gpio->pssel |= cfg->mask; break; case MXC_GPIO_PAD_PULL_DOWN: gpio->padctrl0 &= ~cfg->mask; gpio->padctrl1 |= cfg->mask; - // gpio->ps &= ~cfg->mask; + gpio->pssel &= ~cfg->mask; break; default: @@ -226,7 +219,7 @@ uint32_t MXC_GPIO_GetFlags(mxc_gpio_regs_t *port) /* ************************************************************************** */ int MXC_GPIO_SetVSSEL(mxc_gpio_regs_t *port, mxc_gpio_vssel_t vssel, uint32_t mask) { - return MXC_GPIO_RevA_SetVSSEL((mxc_gpio_reva_regs_t *)port, vssel, mask); + return E_NOT_SUPPORTED; } /* ************************************************************************** */ diff --git a/Libraries/PeriphDrivers/Source/ICC/icc_me30.c b/Libraries/PeriphDrivers/Source/ICC/icc_me30.c index 1a9cc8cdda7..cace41e7eab 100644 --- a/Libraries/PeriphDrivers/Source/ICC/icc_me30.c +++ b/Libraries/PeriphDrivers/Source/ICC/icc_me30.c @@ -35,23 +35,22 @@ Maxim Internal Use * ****************************************************************************** */ -int MXC_ICC_ID(mxc_icc_regs_t *icc, mxc_icc_info_t cid) +int MXC_ICC_ID(mxc_icc_info_t cid) { - return MXC_ICC_RevA_ID((mxc_icc_reva_regs_t *)icc, cid); + return MXC_ICC_RevA_ID((mxc_icc_reva_regs_t *)MXC_ICC, cid); } -void MXC_ICC_Enable(mxc_icc_regs_t *icc) +void MXC_ICC_Enable(void) { - MXC_ICC_RevA_Enable((mxc_icc_reva_regs_t *)icc); + MXC_ICC_RevA_Enable((mxc_icc_reva_regs_t *)MXC_ICC); } -void MXC_ICC_Disable(mxc_icc_regs_t *icc) +void MXC_ICC_Disable(void) { - MXC_ICC_RevA_Disable((mxc_icc_reva_regs_t *)icc); + MXC_ICC_RevA_Disable((mxc_icc_reva_regs_t *)MXC_ICC); } -void MXC_ICC_Flush(mxc_icc_regs_t *icc) +void MXC_ICC_Flush(void) { - MXC_ICC_Disable(icc); - MXC_ICC_Enable(icc); + MXC_ICC_Com_Flush(); } diff --git a/Libraries/PeriphDrivers/Source/ICC/icc_reva_me30.svd b/Libraries/PeriphDrivers/Source/ICC/icc_reva_me30.svd index eba1471e67f..b2e331cfda0 100644 --- a/Libraries/PeriphDrivers/Source/ICC/icc_reva_me30.svd +++ b/Libraries/PeriphDrivers/Source/ICC/icc_reva_me30.svd @@ -6,7 +6,7 @@ 0x4002A000 0x00 - 0x800 + 0x1000 registers @@ -15,6 +15,7 @@ Cache ID Register. 0x0000 read-only + 32 RELNUM @@ -42,6 +43,7 @@ 0x0004 read-only 0x00080008 + 32 CCH @@ -61,6 +63,7 @@ CTRL Cache Control and Status Register. 0x0100 + 32 EN @@ -105,27 +108,28 @@ WAY Cache Way Control Register. 0x0200 + 32 WAY Number of cache way, default is always 2. Allowed values are 1,2,4. 0 - 1 + 3 1 1 - 0 + 1 2 2 - 1 + 2 4 4 - 2 + 4 @@ -135,6 +139,7 @@ REGCTRL Regional Control Register. 0x0204 + 32 EN @@ -151,18 +156,20 @@ - 15 - 0x20 + 4 + 8 REGION[%s] Regional Low and High Bound Registers. icc_reg 0x0208 + 64 read-write LBOUND Regional Low Bound Register. 0x0000 reg + 32 BOUND @@ -177,6 +184,7 @@ DMA Channel Status Register. 0x004 reg + 32 BOUND @@ -191,6 +199,7 @@ PFMCTRL Performance Control Register. 0x0300 + 32 EN @@ -204,6 +213,7 @@ PFMCNT Performance Counter Register. 0x0304 + 32 CNT @@ -218,6 +228,7 @@ Invalidate All Registers. 0x0700 read-write + 32 INVALID diff --git a/Libraries/PeriphDrivers/Source/LP/lp_me30.c b/Libraries/PeriphDrivers/Source/LP/lp_me30.c index b24173982eb..e900eba30e0 100644 --- a/Libraries/PeriphDrivers/Source/LP/lp_me30.c +++ b/Libraries/PeriphDrivers/Source/LP/lp_me30.c @@ -26,6 +26,8 @@ #define SET_SLEEPDEEP(X) (SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk) #define CLR_SLEEPDEEP(X) (SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk) +// TODO(SW): Update this. + void MXC_LP_EnterSleepMode(void) { MXC_LP_ClearWakeStatus(); @@ -39,41 +41,17 @@ void MXC_LP_EnterSleepMode(void) void MXC_LP_EnterLowPowerMode(void) { - MXC_LP_ClearWakeStatus(); - MXC_MCR->ctrl |= MXC_F_MCR_CTRL_ERTCO_EN; // Enabled for deep sleep mode - - /* Set SLEEPDEEP bit */ - SET_SLEEPDEEP(); - - /* Go into low power mode and wait for an interrupt to wake the processor */ - MXC_GCR->pm |= MXC_S_GCR_PM_MODE_LPM; - __WFI(); + return; } void MXC_LP_EnterMicroPowerMode(void) { - MXC_LP_ClearWakeStatus(); - MXC_MCR->ctrl |= MXC_F_MCR_CTRL_ERTCO_EN; // Enabled for deep sleep mode - - /* Set SLEEPDEEP bit */ - SET_SLEEPDEEP(); - - /* Go into Deepsleep mode and wait for an interrupt to wake the processor */ - MXC_GCR->pm |= MXC_S_GCR_PM_MODE_UPM; // UPM mode - __WFI(); + return; } void MXC_LP_EnterStandbyMode(void) { - MXC_LP_ClearWakeStatus(); - MXC_MCR->ctrl |= MXC_F_MCR_CTRL_ERTCO_EN; // Enabled for deep sleep mode - - /* Set SLEEPDEEP bit */ - SET_SLEEPDEEP(); - - /* Go into standby mode and wait for an interrupt to wake the processor */ - MXC_GCR->pm |= MXC_S_GCR_PM_MODE_STANDBY; // standby mode - __WFI(); + return; } void MXC_LP_EnterBackupMode(void) @@ -90,7 +68,7 @@ void MXC_LP_EnterBackupMode(void) void MXC_LP_EnterPowerDownMode(void) { MXC_GCR->pm &= ~MXC_F_GCR_PM_MODE; - MXC_GCR->pm |= MXC_S_GCR_PM_MODE_POWERDOWN; + MXC_GCR->pm |= MXC_V_GCR_PM_MODE_PDM; while (1) {} // Should never reach this line - device will reset on exit from shutdown mode. @@ -103,26 +81,23 @@ void MXC_LP_SetOVR(mxc_lp_ovr_t ovr) void MXC_LP_BandgapOn(void) { - MXC_PWRSEQ->lpcn &= ~MXC_F_PWRSEQ_LPCN_BG_DIS; + MXC_PWRSEQ->lpctrl &= ~MXC_F_PWRSEQ_LPCTRL_BG_DIS; } void MXC_LP_BandgapOff(void) { - MXC_PWRSEQ->lpcn |= MXC_F_PWRSEQ_LPCN_BG_DIS; + MXC_PWRSEQ->lpctrl |= MXC_F_PWRSEQ_LPCTRL_BG_DIS; } int MXC_LP_BandgapIsOn(void) { - return (MXC_PWRSEQ->lpcn & MXC_F_PWRSEQ_LPCN_BG_DIS); + return (MXC_PWRSEQ->lpctrl & MXC_F_PWRSEQ_LPCTRL_BG_DIS); } void MXC_LP_ClearWakeStatus(void) { /* Write 1 to clear */ - MXC_PWRSEQ->lpwkst0 = 0xFFFFFFFF; - MXC_PWRSEQ->lpwkst1 = 0xFFFFFFFF; - MXC_PWRSEQ->lpwkst2 = 0xFFFFFFFF; - MXC_PWRSEQ->lpwkst3 = 0xFFFFFFFF; + MXC_PWRSEQ->lpwkfl0 = 0xFFFFFFFF; MXC_PWRSEQ->lppwst = 0xFFFFFFFF; } @@ -134,16 +109,6 @@ void MXC_LP_EnableGPIOWakeup(mxc_gpio_cfg_t *wu_pins) case MXC_GPIO_PORT_0: MXC_PWRSEQ->lpwken0 |= wu_pins->mask; break; - - case MXC_GPIO_PORT_1: - MXC_PWRSEQ->lpwken1 |= wu_pins->mask; - break; - case MXC_GPIO_PORT_2: - MXC_PWRSEQ->lpwken2 |= wu_pins->mask; - break; - case MXC_GPIO_PORT_3: - MXC_PWRSEQ->lpwken3 |= wu_pins->mask; - break; } } @@ -153,20 +118,9 @@ void MXC_LP_DisableGPIOWakeup(mxc_gpio_cfg_t *wu_pins) case MXC_GPIO_PORT_0: MXC_PWRSEQ->lpwken0 &= ~wu_pins->mask; break; - - case MXC_GPIO_PORT_1: - MXC_PWRSEQ->lpwken1 &= ~wu_pins->mask; - break; - case MXC_GPIO_PORT_2: - MXC_PWRSEQ->lpwken2 &= ~wu_pins->mask; - break; - case MXC_GPIO_PORT_3: - MXC_PWRSEQ->lpwken3 &= ~wu_pins->mask; - break; } - if (MXC_PWRSEQ->lpwken3 == 0 && MXC_PWRSEQ->lpwken2 == 0 && MXC_PWRSEQ->lpwken1 == 0 && - MXC_PWRSEQ->lpwken0 == 0) { + if (MXC_PWRSEQ->lpwken0 == 0) { MXC_GCR->pm &= ~MXC_F_GCR_PM_GPIO_WE; } } @@ -183,24 +137,12 @@ void MXC_LP_DisableRTCAlarmWakeup(void) void MXC_LP_EnableTimerWakeup(mxc_tmr_regs_t *tmr) { - MXC_ASSERT(MXC_TMR_GET_IDX(tmr) > 3); - - if (tmr == MXC_TMR4) { - MXC_PWRSEQ->lppwen |= MXC_F_PWRSEQ_LPPWEN_TMR4; - } else { - MXC_PWRSEQ->lppwen |= MXC_F_PWRSEQ_LPPWEN_TMR5; - } + return; } void MXC_LP_DisableTimerWakeup(mxc_tmr_regs_t *tmr) { - MXC_ASSERT(MXC_TMR_GET_IDX(tmr) > 3); - - if (tmr == MXC_TMR4) { - MXC_PWRSEQ->lppwen &= ~MXC_F_PWRSEQ_LPPWEN_TMR4; - } else { - MXC_PWRSEQ->lppwen &= ~MXC_F_PWRSEQ_LPPWEN_TMR5; - } + return; } void MXC_LP_EnableWUTAlarmWakeup(void) @@ -215,10 +157,6 @@ void MXC_LP_DisableWUTAlarmWakeup(void) int MXC_LP_ConfigDeepSleepClocks(uint32_t mask) { - if (!(mask & (MXC_F_GCR_PM_IBRO_PD | MXC_F_GCR_PM_IPO_PD))) { - return E_BAD_PARAM; - } - MXC_GCR->pm |= mask; return E_NO_ERROR; } diff --git a/Libraries/PeriphDrivers/Source/LP/pwrseq_me30.svd b/Libraries/PeriphDrivers/Source/LP/pwrseq_me30.svd index 79fc6aad0fe..92fcda232bf 100644 --- a/Libraries/PeriphDrivers/Source/LP/pwrseq_me30.svd +++ b/Libraries/PeriphDrivers/Source/LP/pwrseq_me30.svd @@ -22,37 +22,55 @@ 5 - FAST - Fast mode. - 8 + BG_DIS + Bandgap OFF. This controls the System Bandgap in DeepSleep mode. + 11 + 1 + + + on + Bandgap is always ON. + 0 + + + off + Bandgap is OFF in DeepSleep mode (default). + 1 + + + + + RETLDO_EN + Retention LDO Enable. + 12 1 dis - Disabled. + Disable. 0 en - Enabled. + Enable. 1 - BG_DIS - Bandgap OFF. This controls the System Bandgap in DeepSleep mode. - 11 + LDO_EN_DLY + Core LDO Enable Delay. + 13 1 - on - Bandgap is always ON. + dis + Disable. 0 - off - Bandgap is OFF in DeepSleep mode (default). + en + Enable delay LDO power up to smooth LDO voltage drop. 1 @@ -91,32 +109,6 @@ - - LPWKFL1 - Low Power I/O Wakeup Status Register 1. This register indicates the low power wakeup status for GPIO1. - 0x0C - - - PINS - Wakeup Flags. - 0 - 12 - - - - - LPWKEN1 - Low Power I/O Wakeup Enable Register 1. This register enables low power wakeup functionality for GPIO1. - 0x10 - - - PINS - Enable wakeup. These bits allow wakeup from the corresponding GPIO pin (s) on transition (s) from low to high or high to low when PM.GPIOWKEN is set. Wakeup status is indicated in PPWKST register. - 0 - 2 - - - LPPWST Low Power Peripheral Wakeup Status Register. diff --git a/Libraries/PeriphDrivers/Source/RSTZ/rstz_reva.svd b/Libraries/PeriphDrivers/Source/RSTZ/rstz_reva.svd new file mode 100644 index 00000000000..2e8615b2d9b --- /dev/null +++ b/Libraries/PeriphDrivers/Source/RSTZ/rstz_reva.svd @@ -0,0 +1,139 @@ + + + + + RSTZ + RSTZ Controller + 0x40004800 + + 0x00 + 0x400 + registers + + + + CTRL + RSTZ Control Register. + 0x000 + 32 + + + EN + Enable channels. + [0:0] + read-write + + + SVC_EN + Enable the SVC. + [1:1] + read-write + + + CH_SEL + Channel Select. + [4:2] + read-write + + + CAL_EN + Calibration mode enable. + [5:5] + read-write + + + DMEASURE_EN + Direct Measure mode enable. + [6:6] + read-write + + + OFFTR_P + Offset Trim for positive comparator. + [11:7] + read-write + + + OFFTR_N + Offset Trim for negative comparator. + [16:12] + read-write + + + DOUT + Comparator Result. + [17:17] + read-write + + + CAL_DOUT_POL + Calibration DOUT Polarity. + [18:18] + read-write + + + NUM_SAMP + Number of captures per sample. + [27:24] + read-write + + + TRIP_TOL + Number of failed DOUT captures (tolerance) before corresponding RSTZ signal is tripped. + [31:28] + read-write + + + + + BOOST_CLKCTRL + Boost Clock Control Register. + 0x004 + + + EXIT_NUM_SAMP + Defines how many samples needed of boost output channel to perform when exiting low-power mode before returning to normal active operation. + [1:0] + read-write + + + CH_SEL + Select when channel the output of the boost converter is monitored on. + [4:2] + read-write + + + + + 8 + 4 + STATUS_CH[%s] + Channel X Status Register. + 0x028 + 32 + read-write + + + RSTZ + Result of most recent sample result. + [0:0] + read-only + + + DOUT + Store the most recent DOUT capture for a given channel. + [1:1] + read-only + + + RSTZ_FL + RSTZ Flag indicates the RSTZ was tripped at some point since the last time being cleared. + [31:31] + read-write + + + + + + + \ No newline at end of file diff --git a/Libraries/PeriphDrivers/Source/SPI/spi_me30.c b/Libraries/PeriphDrivers/Source/SPI/spi_me30.c index a98afdde4d0..ac48b4f2b2d 100644 --- a/Libraries/PeriphDrivers/Source/SPI/spi_me30.c +++ b/Libraries/PeriphDrivers/Source/SPI/spi_me30.c @@ -347,14 +347,26 @@ int MXC_SPI_MasterTransactionDMA(mxc_spi_req_t *req, mxc_dma_regs_t *dma) spi_num = MXC_SPI_GET_IDX(req->spi); MXC_ASSERT(spi_num >= 0); - switch (spi_num) { - case 0: - reqselTx = MXC_DMA_REQUEST_SPITX; - reqselRx = MXC_DMA_REQUEST_SPIRX; - break; + if (req->txData != NULL) { + switch (spi_num) { + case 0: + reqselTx = MXC_DMA_REQUEST_SPITX; + break; - default: - return E_BAD_PARAM; + default: + return E_BAD_PARAM; + } + } + + if (req->rxData != NULL) { + switch (spi_num) { + case 0: + reqselRx = MXC_DMA_REQUEST_SPIRX; + break; + + default: + return E_BAD_PARAM; + } } return MXC_SPI_RevA1_MasterTransactionDMA((mxc_spi_reva_req_t *)req, reqselTx, reqselRx, dma); @@ -384,6 +396,17 @@ int MXC_SPI_SlaveTransactionDMA(mxc_spi_req_t *req, mxc_dma_regs_t *dma) switch (spi_num) { case 0: reqselTx = MXC_DMA_REQUEST_SPITX; + break; + + default: + return E_BAD_PARAM; + break; + } + } + + if (req->rxData != NULL) { + switch (spi_num) { + case 0: reqselRx = MXC_DMA_REQUEST_SPIRX; break; diff --git a/Libraries/PeriphDrivers/Source/SPI/spi_reva_me30.svd b/Libraries/PeriphDrivers/Source/SPI/spi_reva_me30.svd index fb1b9851d5f..2f6efe4139a 100644 --- a/Libraries/PeriphDrivers/Source/SPI/spi_reva_me30.svd +++ b/Libraries/PeriphDrivers/Source/SPI/spi_reva_me30.svd @@ -90,7 +90,7 @@ - CTRLR_MODE + CONT_MODE Controller Mode Enable. 1 1 @@ -757,7 +757,7 @@ - CTRLR_DONE + CONT_DONE Controller Done, set when SPI Controller has completed any transactions. 11 1 @@ -974,7 +974,7 @@ - CTRLR_DONE + CONT_DONE Controller Done interrupt enable. 11 1 diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/fcr_me30.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/fcr_me30.svd index 2a8d1e3840a..b40c329b3ce 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/fcr_me30.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/fcr_me30.svd @@ -11,20 +11,20 @@ - FCTRL0 - Register 0. + CTRL + Function Control 0 Register. 0x00 read-write - BTLELDO_TX - BTLE LDO TX Trim. + BTLELDO_RF + BTLE LDO RF Trim. 0 5 - BTLELDO_RX - BTLE LDO RX Trim. + BTLELDO_BB + BTLE LDO BB Trim. 8 5 @@ -67,13 +67,13 @@ - FCTRL1 - Register 1. + AUTOCAL0 + Automatic Calibration 0 Register. 0x04 read-write - AC_EN + EN Auto-calibration Enable. 0 1 @@ -91,7 +91,7 @@ - AC_RUN + RUN Autocalibration Run. 1 1 @@ -157,7 +157,7 @@ 12 - AC_TRIM_OUT + TRIM_OUT IPO Auto Calibration Trim 23 9 @@ -165,13 +165,13 @@ - FCTRL2 - Register 2. + AUTOCAL1 + Automatic Calibration 1 Register. 0x08 read-write - AC_INIT_TRIM + INIT_TRIM IPO Trim Automatic Calibration Initial Trim. 0 9 @@ -179,19 +179,19 @@ - FCTRL3 - Register 3. + AUTOCAL2 + Automatic Calibration 2 Register. 0x0C read-write - AC_RUNTIME + RUNTIME IPO Trim Autocal Run Time 0 8 - AC_DIV + DIV IPO Trim Automatic Calibration Divide Factor. 8 13 @@ -248,7 +248,126 @@ + + INTFL + Interrupt Flag Register. + 0x1C + read-write + + + ERTOC_RDY + ERTCO 32K Ready. + 0 + 1 + + + FRQCNT + Frequency Counter Interrupt Flag. + 1 + 1 + + + + + INTEN + Interrupt Enable Register. + 0x20 + read-write + + + ERTOC_RDY + ERTCO 32K Ready Interrupt Enable. + 0 + 1 + + + FRQCNT + Frequency Counter Interrupt Enable. + 1 + 1 + + + + + FRQCNTCTRL + Frequency Counter Control Register. + 0x28 + read-write + + + START + Start Compare. + 0 + 1 + + + CMP_CLKSEL + Compared Clock Select. + 1 + 2 + + + RTC + RTC. + 0 + + + EXT_GPIO + External GPIO. + 2 + + + INRO + INRO. + 3 + + + + + + + FRQCNTCMP + Frequency Counter Compared Target Register. + 0x2C + read-write + + + TARGET + Compared Clock Target. + 0 + 14 + + + + + REFCLK + Reference Clock Result Register. + 0x30 + read-only + + + RESULT + Reference Clock Result. + 0 + 20 + + + + + CMPCLK + Compared Clock Result Register. + 0x34 + read-only + + + RESULT + Compared Clock Result. + 0 + 14 + + + - + \ No newline at end of file diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me30.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me30.svd index 9485ad8c7c3..b499495b638 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me30.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/gcr_me30.svd @@ -161,12 +161,6 @@ 17 1 - - BTLE - BTLE Reset. - 18 - 1 - TRNG TRNG Reset. @@ -409,14 +403,14 @@ 4 - active + ACTIVE Active Mode. 0 - backup + BACKUP Backup Mode. - 9 + 4 PDM @@ -671,6 +665,18 @@ 10 1 + + AUTOCAL + Auto calibration Reset. + 12 + 1 + + + BTLE + BTLE Reset. + 18 + 1 + @@ -708,12 +714,6 @@ 15 1 - - SPI - SPI Clock Disable - 16 - 1 - DMA1 DMA1 Clock Disable @@ -805,6 +805,19 @@ + + ECCCED + ECC Correctable Error Detect Register. + 0x68 + + + FLASH + ECC Correctable Error Detect Flag for Flash. Write 1 to clear. + 0 + 1 + + + ECCINTEN ECC Interrupt Enable Register @@ -813,7 +826,7 @@ FLASH ECC Flash0 Interrupt Enable. - 11 + 0 1 @@ -867,86 +880,86 @@ 0x74 - TX_EN - LDOTX enable. + RF_EN + LDO RF enable. 0 1 - TX_PD_EN - LDOTX Pull Down. + RF_PD_EN + LDO RF Pull Down. 1 1 - TX_VSEL - Voltage Selection for NFC LDO + RF_VSEL + Voltage Selection for RF LDO 2 2 - RX_EN - LDORX enable. + BB_EN + LDOBB enable. 4 1 - RX_PD_EN - LDORX Pull DOwn. + BB_PD_EN + LDO BB Pull DOwn. 5 1 - RX_VSEL - LDORX Voltage Setting. + BB_VSEL + LDO BB Voltage Setting. 6 2 - RX_BP_EN - LDORX Bypass Enable. + BB_BP_EN + LDO BB Bypass Enable. 8 1 - RX_DISCH - LDORX Discharge. + BB_DISCH + LDO BB Discharge. 9 1 - TX_BP_EN - LDOTX Bypass Enable. + RF_BP_EN + LDO RF Bypass Enable. 10 1 - TX_DISCH - LDOTX Discharge. + RF_DISCH + LDO RF Discharge. 11 1 - TX_EN_DLY - LDOTX Enable Delay. + RF_EN_DLY + LDO RF Enable Delay. 12 1 - RX_EN_DLY - LDORX Enable Delay. + BB_EN_DLY + LDO BB Enable Delay. 13 1 - RX_BP_EN_DLY - LDORX Bypass Enable Delay. + BB_BP_EN_DLY + LDO BB Bypass Enable Delay. 14 1 - TX_BP_EN_DLY - LDOTX Bypass Enable Delay. + RF_BP_EN_DLY + LDO RF Bypass Enable Delay. 15 1 @@ -964,19 +977,24 @@ 8 - RX_CNT - RX delay count. + BB_CNT + BB delay count. 8 9 - TX_CNT - TX delay count. + RF_CNT + RF delay count. 20 9 + + GPR + General Purpose Register 0. + 0x80 + \ No newline at end of file diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/mcr_me30.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/mcr_me30.svd index 7930cd67e3e..fcca217a795 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/mcr_me30.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/mcr_me30.svd @@ -11,16 +11,22 @@ - ECCEN - ECC Enable Register - 0x00 + RST + Reset Register. + 0x04 - FLASH - ECC Flash Enable. + BOOST + Reset BOOST Controller. 0 1 + + RSTZ + Reset RSTZ Controller. + 1 + 1 + @@ -34,12 +40,6 @@ 0 1 - - PDOWN_EN - Power Down Output Enable. - 1 - 1 - @@ -48,92 +48,61 @@ 0x10 - ERTCO_EN - Enable ERTCO 4KHz. - 3 - 1 + CLKSEL + Clock select for RTC, WUTs, and Timers. + 0 + 2 + + + ERTCO + ERTCO as clock source. + 0 + + + INRO + INRO as clock source. + 1 + + + EXTCLK + P0.12 div 8 as clock source. + 2 + + ERTCO_32KHZ_EN Enable ERTCO 32KHz while ERTCO_EN. - 5 - 1 - - - - - GPIO1_CTRL - GPIO1 Pin Control Register. - 0x20 - - - P1_0_OUT - GPIO1 Pin 0 Data Output. - 0 - 1 - - - P1_0_OUTEN - GPIO1 Pin 0 Output Enable. - 1 - 1 - - - P1_0_PUPEN - GPIO1 Pin 0 Pull-up Enable. - 2 - 1 - - - P1_0_IN - GPIO1 Pin 0 Input Status. 3 1 - P1_1_OUT - GPIO1 Pin 1 Data Output. - 4 - 1 - - - P1_1_OUTEN - GPIO1 Pin 1 Output Enable. + ERTCO_EN + Enable ERTCO 4KHz. 5 1 - - P1_1_PUPEN - GPIO1 Pin 1 Pull-up Enable. - 6 - 1 - - - P1_1_IN - GPIO1 Pin 1 Input Status. - 7 - 1 - - RTCTRIM - User RTC Trim Register. - 0x24 - - - X2 - RTC X2 Trim. - 0 - 5 - - - X1 - RTC X1 Trim. - 5 - 5 - - + BBREG0 + Battery Back Reg0. + 0x30 + + + BBREG1 + Battery Back Reg1. + 0x34 + + + BBDATA0 + Battery Back Data0 Register. + 0x40 + + + BBDATA1 + Battery Back Data1 Register. + 0x44 diff --git a/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me30.svd b/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me30.svd index 84216c88245..330f128cdaf 100644 --- a/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me30.svd +++ b/Libraries/PeriphDrivers/Source/SYS/SVD/sir_me30.svd @@ -14,7 +14,7 @@ SISTAT System Initialization Status Register. - 0x00 + 0x000 read-only @@ -62,7 +62,7 @@ ADDR Read-only field set by the SIB block if a CRC error occurs during the read of the OTP memory. Contains the failing address in OTP memory (when CRCERR equals 1). - 0x04 + 0x004 read-only @@ -72,6 +72,32 @@ + + BTLELDO_BB + BTLE LDO TRIM BB Register. + 0x01C + + + TRIM + Target 0.9V. VDDA BB Voltage Trim. + 0 + 5 + + + + + BTLELDO_RF + BTLE LDO TRIM RF Register. + 0x002C + + + TRIM + Target 0.9V. VDDA RF Voltage Trim. + 0 + 5 + + + SFSTAT Security function status register. diff --git a/Libraries/PeriphDrivers/Source/SYS/pins_me17.c b/Libraries/PeriphDrivers/Source/SYS/pins_me17.c index b4839b83882..1fc25547f80 100644 --- a/Libraries/PeriphDrivers/Source/SYS/pins_me17.c +++ b/Libraries/PeriphDrivers/Source/SYS/pins_me17.c @@ -31,7 +31,7 @@ /***** Global Variables *****/ // clang-format off -const mxc_gpio_cfg_t gpio_cfg_extclk = { MXC_GPIO0, (MXC_GPIO_PIN_12 | MXC_GPIO_PIN_13), MXC_GPIO_FUNC_ALT2, +const mxc_gpio_cfg_t gpio_cfg_extclk = { MXC_GPIO0, MXC_GPIO_PIN_3 , MXC_GPIO_FUNC_ALT1, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }; const mxc_gpio_cfg_t gpio_cfg_i2c0 = { MXC_GPIO0, (MXC_GPIO_PIN_10 | MXC_GPIO_PIN_11), MXC_GPIO_FUNC_ALT1, diff --git a/Libraries/PeriphDrivers/Source/SYS/pins_me18.c b/Libraries/PeriphDrivers/Source/SYS/pins_me18.c index af79fc85dfd..bc4a08216a0 100644 --- a/Libraries/PeriphDrivers/Source/SYS/pins_me18.c +++ b/Libraries/PeriphDrivers/Source/SYS/pins_me18.c @@ -88,9 +88,9 @@ const mxc_gpio_cfg_t gpio_cfg_uart3_flow_disable = { MXC_GPIO3, (MXC_GPIO_PIN_2 MXC_GPIO_FUNC_IN, MXC_GPIO_PAD_WEAK_PULL_UP, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }; -const mxc_gpio_cfg_t antenna_ctrl0 = { MXC_GPIO2, (MXC_GPIO_PIN_17), MXC_GPIO_FUNC_ALT2, +const mxc_gpio_cfg_t antenna_ctrl0 = { MXC_GPIO2, (MXC_GPIO_PIN_18), MXC_GPIO_FUNC_ALT2, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }; -const mxc_gpio_cfg_t antenna_ctrl1 = { MXC_GPIO2, (MXC_GPIO_PIN_18), MXC_GPIO_FUNC_ALT2, +const mxc_gpio_cfg_t antenna_ctrl1 = { MXC_GPIO2, (MXC_GPIO_PIN_17), MXC_GPIO_FUNC_ALT2, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }; const mxc_gpio_cfg_t antenna_ctrl2 = { MXC_GPIO2, (MXC_GPIO_PIN_20), MXC_GPIO_FUNC_ALT2, MXC_GPIO_PAD_NONE, MXC_GPIO_VSSEL_VDDIO, MXC_GPIO_DRVSTR_0 }; diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_ai87.c b/Libraries/PeriphDrivers/Source/SYS/sys_ai87.c index 808705d1f38..dcf59a0a25a 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_ai87.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_ai87.c @@ -502,6 +502,25 @@ int MXC_SYS_Clock_Select(mxc_sys_system_clock_t clock) return E_NO_ERROR; } +/* ************************************************************************** */ +void MXC_SYS_SetClockDiv(mxc_sys_system_clock_div_t div) +{ + /* Return if this setting is already current */ + if (div == MXC_SYS_GetClockDiv()) { + return; + } + + MXC_SETFIELD(MXC_GCR->clkctrl, MXC_F_GCR_CLKCTRL_SYSCLK_DIV, div); + + SystemCoreClockUpdate(); +} + +/* ************************************************************************** */ +mxc_sys_system_clock_div_t MXC_SYS_GetClockDiv(void) +{ + return (MXC_GCR->clkctrl & MXC_F_GCR_CLKCTRL_SYSCLK_DIV); +} + /* ************************************************************************** */ void MXC_SYS_Reset_Periph(mxc_sys_reset_t reset) { diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me12.c b/Libraries/PeriphDrivers/Source/SYS/sys_me12.c index d7db012f1eb..a94212d687c 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me12.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me12.c @@ -103,7 +103,7 @@ int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) // Set NULL Key MXC_AES_SetExtKey((const void *)aes_key, MXC_AES_128BITS); - uint8_t usn_copy[MXC_SYS_USN_LEN] = { 0 }; + uint8_t usn_copy[MXC_SYS_USN_CHECKSUM_LEN] = { 0 }; memcpy(usn_copy, usn, MXC_SYS_USN_LEN); // Compute Checksum mxc_aes_req_t aes_req; diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me15.c b/Libraries/PeriphDrivers/Source/SYS/sys_me15.c index dd4ad6874dc..eb7da8daece 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me15.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me15.c @@ -110,7 +110,7 @@ int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) // Set NULL Key MXC_AES_SetExtKey((const void *)aes_key, MXC_AES_128BITS); - uint8_t usn_copy[MXC_SYS_USN_LEN] = { 0 }; + uint8_t usn_copy[MXC_SYS_USN_CHECKSUM_LEN] = { 0 }; memcpy(usn_copy, usn, MXC_SYS_USN_LEN); // Compute Checksum diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me17.c b/Libraries/PeriphDrivers/Source/SYS/sys_me17.c index ff2d5c9288c..0b7ce1ac92e 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me17.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me17.c @@ -105,7 +105,7 @@ int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) // Set NULL Key MXC_AES_SetExtKey((const void *)aes_key, MXC_AES_128BITS); - uint8_t usn_copy[MXC_SYS_USN_LEN] = { 0 }; + uint8_t usn_copy[MXC_SYS_USN_CHECKSUM_LEN] = { 0 }; memcpy(usn_copy, usn, MXC_SYS_USN_LEN); // Compute Checksum diff --git a/Libraries/PeriphDrivers/Source/SYS/sys_me30.c b/Libraries/PeriphDrivers/Source/SYS/sys_me30.c index c66b9bceed8..b6b286896ea 100644 --- a/Libraries/PeriphDrivers/Source/SYS/sys_me30.c +++ b/Libraries/PeriphDrivers/Source/SYS/sys_me30.c @@ -17,7 +17,7 @@ ******************************************************************************/ /** - * @file mxc_sys.c + * @file mxc_sys.c * @brief System layer driver. * @details This driver is used to control the system layer of the device. */ @@ -57,6 +57,7 @@ extern uint32_t _binary_riscv_bin_start; /* **** Functions **** */ /* ************************************************************************** */ +#if CONFIG_TRUSTED_EXECUTION_SECURE int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) { int err = E_NO_ERROR; @@ -93,9 +94,8 @@ int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) checksum[0] = ((infoblock[3] & 0x7F800000) >> 23); checksum[1] = ((infoblock[4] & 0x007F8000) >> 15); - // Info block only accessible for secure code. + // Info block only accessible from secure code. // Use Secure DMA1. - // TODO(DMA): Figure out access to "secure" functions when in non-secure code. err = MXC_AES_Init(MXC_DMA1); if (err) { MXC_FLC_LockInfoBlock(MXC_INFO_MEM_BASE); @@ -137,6 +137,7 @@ int MXC_SYS_GetUSN(uint8_t *usn, uint8_t *checksum) return err; } +#endif /* ************************************************************************** */ int MXC_SYS_GetRevision(void) @@ -237,7 +238,7 @@ int MXC_SYS_ClockSourceEnable(mxc_sys_system_clock_t clock) break; case MXC_SYS_CLOCK_ERFO: - MXC_GCR->btleldoctrl |= MXC_F_GCR_BTLELDOCTRL_TX_EN | MXC_F_GCR_BTLELDOCTRL_RX_EN; + MXC_GCR->btleldoctrl |= MXC_F_GCR_BTLELDOCTRL_RF_EN | MXC_F_GCR_BTLELDOCTRL_BB_EN; /* Initialize kickstart circuit Select Kick start circuit clock source- IPO/ISO @@ -503,6 +504,7 @@ void MXC_SYS_Reset_Periph(mxc_sys_reset_t reset) } } +#if CONFIG_TRUSTED_EXECUTION_SECURE /* ************************************************************************** */ int MXC_SYS_LockDAP_Permanent(void) { @@ -541,5 +543,6 @@ int MXC_SYS_LockDAP_Permanent(void) return err; #endif } +#endif /**@} end of mxc_sys */ diff --git a/Libraries/PeriphDrivers/Source/TMR/tmr_me30.c b/Libraries/PeriphDrivers/Source/TMR/tmr_me30.c index 868caf34d47..6b1c80e0aa3 100644 --- a/Libraries/PeriphDrivers/Source/TMR/tmr_me30.c +++ b/Libraries/PeriphDrivers/Source/TMR/tmr_me30.c @@ -119,8 +119,6 @@ int MXC_TMR_Init(mxc_tmr_regs_t *tmr, mxc_tmr_cfg_t *cfg, bool init_pins) if (init_pins) { if (cfg->bitMode != MXC_TMR_BIT_MODE_16B) { MXC_GPIO_Config(&gpio_cfg_tmr2); - } else { - MXC_GPIO_Config(&gpio_cfg_tmr2b); } } diff --git a/Libraries/PeriphDrivers/Source/TMR/tmr_reva.c b/Libraries/PeriphDrivers/Source/TMR/tmr_reva.c index 1d9e0476ba5..12c45fa7d42 100644 --- a/Libraries/PeriphDrivers/Source/TMR/tmr_reva.c +++ b/Libraries/PeriphDrivers/Source/TMR/tmr_reva.c @@ -235,7 +235,7 @@ int MXC_TMR_RevA_GetTime(mxc_tmr_reva_regs_t *tmr, uint32_t ticks, uint32_t *tim ((tmr->cn & MXC_F_TMR_REVA_CN_PRES) >> MXC_F_TMR_REVA_CN_PRES_POS) | (((tmr->cn & MXC_F_TMR_REVA_CN_PRES3) >> (MXC_F_TMR_REVA_CN_PRES3_POS)) << 3); - temp_time = (uint64_t)ticks * 1000 * (1 << (prescale & 0xF)) / (timerClock / 1000000); + temp_time = (uint64_t)ticks * 1000000 * (1 << (prescale & 0xF)) / (timerClock / 1000); if (!(temp_time & 0xffffffff00000000)) { *time = temp_time; @@ -243,7 +243,7 @@ int MXC_TMR_RevA_GetTime(mxc_tmr_reva_regs_t *tmr, uint32_t ticks, uint32_t *tim return E_NO_ERROR; } - temp_time = (uint64_t)ticks * 1000 * (1 << (prescale & 0xF)) / (timerClock / 1000); + temp_time = (uint64_t)ticks * 1000000 * (1 << (prescale & 0xF)) / timerClock; if (!(temp_time & 0xffffffff00000000)) { *time = temp_time; diff --git a/Libraries/PeriphDrivers/Source/TMR/tmr_revb.c b/Libraries/PeriphDrivers/Source/TMR/tmr_revb.c index 5e9ac2c836f..14b45fd6872 100644 --- a/Libraries/PeriphDrivers/Source/TMR/tmr_revb.c +++ b/Libraries/PeriphDrivers/Source/TMR/tmr_revb.c @@ -63,7 +63,7 @@ int MXC_TMR_RevB_Init(mxc_tmr_revb_regs_t *tmr, mxc_tmr_cfg_t *cfg, uint8_t clk_ tmr->intfl |= (MXC_F_TMR_REVB_INTFL_IRQ_A | MXC_F_TMR_REVB_INTFL_IRQ_B); MXC_TMR_RevB_SetClockSource(tmr, cfg->bitMode, clk_src); - MXC_TMR_RevB_SetPrescalar(tmr, cfg->bitMode, clk_src); + MXC_TMR_RevB_SetPrescalar(tmr, cfg->bitMode, cfg->pres); //TIMER_16B only supports compare, oneshot and continuous modes. switch (cfg->mode) { @@ -182,6 +182,11 @@ void MXC_TMR_RevB_SetClockSourceFreq(mxc_tmr_revb_regs_t *tmr, int clksrc_freq) (void)tmr_id; MXC_ASSERT(tmr_id >= 0); + // If the clock source is locked, don't update the frequency either, as we will + // have rejected the configuration update too in MXC_TMR_RevB_SetClockSource. + if (g_is_clock_locked[tmr_id]) + return; + tmr_clksrc[tmr_id].configured = true; tmr_clksrc[tmr_id].freq = clksrc_freq; } @@ -226,7 +231,8 @@ void MXC_TMR_RevB_ConfigGeneric(mxc_tmr_revb_regs_t *tmr, mxc_tmr_cfg_t *cfg) while (!(tmr->intfl & (MXC_F_TMR_REVB_INTFL_WRDONE_A << timerOffset))) {} tmr->cmp = (cfg->cmp_cnt << timerOffset); -#if TARGET_NUM == 32655 || TARGET_NUM == 78000 || TARGET_NUM == 32690 || TARGET_NUM == 78002 +#if TARGET_NUM == 32655 || TARGET_NUM == 32657 || TARGET_NUM == 78000 || TARGET_NUM == 32690 || \ + TARGET_NUM == 78002 tmr->ctrl1 &= ~(MXC_F_TMR_REVB_CTRL1_OUTEN_A << timerOffset); #else tmr->ctrl1 |= (MXC_F_TMR_REVB_CTRL1_OUTEN_A << timerOffset); @@ -506,7 +512,7 @@ int MXC_TMR_RevB_GetTime(mxc_tmr_revb_regs_t *tmr, uint32_t ticks, uint32_t *tim return timerClock; } - temp_time = (uint64_t)ticks * 1000 * (1 << (prescale & 0xF)) / (timerClock / 1000000); + temp_time = (uint64_t)ticks * 1000000 * (1 << (prescale & 0xF)) / (timerClock / 1000); if (!(temp_time & 0xffffffff00000000)) { *time = temp_time; @@ -514,7 +520,7 @@ int MXC_TMR_RevB_GetTime(mxc_tmr_revb_regs_t *tmr, uint32_t ticks, uint32_t *tim return E_NO_ERROR; } - temp_time = (uint64_t)ticks * 1000 * (1 << (prescale & 0xF)) / (timerClock / 1000); + temp_time = (uint64_t)ticks * 1000000 * (1 << (prescale & 0xF)) / timerClock; if (!(temp_time & 0xffffffff00000000)) { *time = temp_time; diff --git a/Libraries/PeriphDrivers/Source/TMR/tmr_revc.c b/Libraries/PeriphDrivers/Source/TMR/tmr_revc.c index df1457b0f6b..1a14293de7b 100644 --- a/Libraries/PeriphDrivers/Source/TMR/tmr_revc.c +++ b/Libraries/PeriphDrivers/Source/TMR/tmr_revc.c @@ -293,7 +293,7 @@ int MXC_TMR_RevC_GetTime(mxc_tmr_regs_t *tmr, uint32_t ticks, uint32_t *time, mx uint32_t prescale = (((tmr->cn & MXC_F_TMR_CN_PRES) >> MXC_F_TMR_CN_PRES_POS) | ((((tmr->cn & MXC_F_TMR_CN_PRES3) >> (MXC_F_TMR_CN_PRES3_POS)) << 3))); - temp_time = (uint64_t)ticks * 1000 * (1 << (prescale & 0xF)) / (timerClock / 1000000); + temp_time = (uint64_t)ticks * 1000000 * (1 << (prescale & 0xF)) / (timerClock / 1000); if (!(temp_time & 0xffffffff00000000)) { *time = temp_time; @@ -301,7 +301,7 @@ int MXC_TMR_RevC_GetTime(mxc_tmr_regs_t *tmr, uint32_t ticks, uint32_t *time, mx return E_NO_ERROR; } - temp_time = (uint64_t)ticks * 1000 * (1 << (prescale & 0xF)) / (timerClock / 1000); + temp_time = (uint64_t)ticks * 1000000 * (1 << (prescale & 0xF)) / timerClock; if (!(temp_time & 0xffffffff00000000)) { *time = temp_time; diff --git a/Libraries/PeriphDrivers/Source/TZ/mpc_me30.c b/Libraries/PeriphDrivers/Source/TZ/mpc_me30.c new file mode 100644 index 00000000000..b0e79a1eeac --- /dev/null +++ b/Libraries/PeriphDrivers/Source/TZ/mpc_me30.c @@ -0,0 +1,255 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file mpc_me30.c + * @brief Memory Protection Controller (MPC) Driver for the MAX32657 (ME30). + * @details This driver is used to control the security policy of each + * memory region (SRAM0-4 and Flash). + */ + +// TODO(MPC): Add Interrupt functionality. + +/** + * The MPC is only accessible from Secure World. + */ +#if CONFIG_TRUSTED_EXECUTION_SECURE == 1 + +/**** Includes ****/ + +#include +#include "mxc_device.h" +#include "mpc.h" +#include "spc.h" + +/**** Definitions ****/ +// Enumeration for security policy. +typedef enum { MXC_MPC_STATE_SECURE = 0, MXC_MPC_STATE_NONSECURE = 1 } mxc_mpc_state_t; + +/**** Globals ****/ + +/**** Functions ****/ + +static int MXC_MPC_SetBlockSecurity(int start_addr, int end_addr, mxc_mpc_state_t state) +{ + int error; + uint32_t phy_start_addr, phy_end_addr; + + int i, j; + uint32_t curr_addr, start_mpc_region_addr, end_mpc_region_addr; + uint32_t start_block_idx; + uint32_t end_block_idx; + mxc_mpc_regs_t *start_mpc; + mxc_mpc_regs_t *end_mpc; + mxc_mpc_regs_t *curr_mpc; + + // Check for supported address ranges. + if (start_addr > end_addr) { + return E_BAD_PARAM; + } + + // Get physical addresses from virtual secure/nonsecure addresses + // by clearing bit 28 - indicates the security state of address. + phy_start_addr = start_addr & ~(1 << 28); + phy_end_addr = end_addr & ~(1 << 28); + + // Ensure the start address is not past the end address. + if (phy_start_addr > phy_end_addr) { + return E_BAD_PARAM; + } + + // Check addresses are within usable memory regions. + error = MXC_MPC_CheckPhyBoundaries(phy_start_addr, phy_end_addr); + if (error != E_NO_ERROR) { + return error; + } + + // Set all blocks within each MPC of the given memory regions to Secure. + start_mpc = MXC_MPC_GetInstance(phy_start_addr); + end_mpc = MXC_MPC_GetInstance(phy_end_addr); + + if (start_mpc == NULL || end_mpc == NULL) { + // Given addresses are in memory space that doesn't support MPC. + return E_BAD_PARAM; + } + + curr_addr = phy_start_addr; + for (i = MXC_MPC_GET_IDX(start_mpc); i <= MXC_MPC_GET_IDX(end_mpc); i++) { + // Get current MPC, whether in Flash or SRAM. + curr_mpc = MXC_MPC_SRAM_GET_BASE(i); + if (curr_mpc == NULL) { + curr_mpc = MXC_MPC_FLASH_GET_BASE(i); + } + + // Get the address range of the current MPC region. + start_mpc_region_addr = curr_addr; + + // NOTE: Project Owner/Developer must be aware of the memory settings for Secure and Non-Secure + // boundaries do not share an MPC block. An MPC block can only be set to one security + // policy (Secure or Non-Secure). + if (i == MXC_MPC_GET_IDX(end_mpc)) { + // The physical ending address is within the final MPC region - stop there. + end_mpc_region_addr = phy_end_addr; + } else { + // -1 to get the last address of the current region. + end_mpc_region_addr = + MXC_MPC_GET_PHY_MEM_BASE(curr_mpc) + MXC_MPC_GET_PHY_MEM_SIZE(curr_mpc) - 1; + } + + start_block_idx = MXC_MPC_GetBlockIdx(curr_mpc, start_mpc_region_addr); + end_block_idx = MXC_MPC_GetBlockIdx(curr_mpc, end_mpc_region_addr); + + // TODO(SW): Precautionary measure that needs to be confirmed - prevents the MPC_BLK_LUT[n] + // register from auto-incrementing after a full word read/write occurs. + // There is only 1 available index (n) (in MPC_BLK_IDX register) for the ME30 because memory + // size does not exceed a single full word length of the MPC_BLK_LUT[n] register. Each bit + // in the MPC_BLK_LUT[n] corresponds to a block of memory with the block size given by the + // MPC_BLK_CFG register. + // For example: + // - FLASH => 1MB; MPC_FLASH Block size => 32KB. + // 32KB * 32 (bits in MPC_BLK_LUT[n] register) = 1MB. + curr_mpc->ctrl &= ~MXC_F_MPC_CTRL_AUTO_INC; + + // Set the security state of each block. + for (j = start_block_idx; j <= end_block_idx; j++) { + if (state == MXC_MPC_STATE_NONSECURE) { + curr_mpc->blk_lut |= (1 << j); + } else { + curr_mpc->blk_lut &= ~(1 << j); + } + } + + // Update curr_addr to start at the beginning of the next MPC region for the next iteration of this for loop. + curr_addr = MXC_MPC_GET_PHY_MEM_BASE(curr_mpc) + MXC_MPC_GET_PHY_MEM_SIZE(curr_mpc); + } + + return E_NO_ERROR; +} + +int MXC_MPC_CheckPhyBoundaries(uint32_t start_addr, uint32_t end_addr) +{ + uint32_t phy_start_addr, phy_end_addr; + + // Get physical addresses from virtual secure/nonsecure addresses + // by clearing bit 28 - indicates the security state of the address. + phy_start_addr = start_addr & ~(1 << 28); + phy_end_addr = end_addr & ~(1 << 28); + + // Check Flash Boundaries. + if ((phy_start_addr >= MXC_PHY_FLASH_MEM_BASE) && + (phy_end_addr < (MXC_PHY_FLASH_MEM_BASE + MXC_PHY_FLASH_MEM_SIZE))) { + return E_NO_ERROR; + } + + // Check SRAM Boundaries. + if ((phy_start_addr >= MXC_PHY_SRAM_MEM_BASE) && + (phy_end_addr < (MXC_PHY_SRAM_MEM_BASE + MXC_PHY_SRAM_MEM_SIZE))) { + return E_NO_ERROR; + } + + // Addresses are located outside of available/usable memory spaces. + return E_BAD_PARAM; +} + +mxc_mpc_regs_t *MXC_MPC_GetInstance(uint32_t addr) +{ + uint32_t phy_addr; + + // Get physical addresses from virtual secure/nonsecure addresses + // by clearing bit 28 - indicates the security state of the address. + phy_addr = addr & ~(1 << 28); + + if ((phy_addr >= MXC_PHY_FLASH_MEM_BASE) && + (phy_addr < MXC_PHY_FLASH_MEM_BASE + MXC_PHY_FLASH_MEM_SIZE)) { + return MXC_MPC_FLASH; + } else if ((phy_addr >= MXC_PHY_SRAM0_MEM_BASE) && + (phy_addr < MXC_PHY_SRAM0_MEM_BASE + MXC_PHY_SRAM0_MEM_SIZE)) { + return MXC_MPC_SRAM0; + } else if ((phy_addr >= MXC_PHY_SRAM1_MEM_BASE) && + (phy_addr < MXC_PHY_SRAM1_MEM_BASE + MXC_PHY_SRAM1_MEM_SIZE)) { + return MXC_MPC_SRAM1; + } else if ((phy_addr >= MXC_PHY_SRAM2_MEM_BASE) && + (phy_addr < MXC_PHY_SRAM2_MEM_BASE + MXC_PHY_SRAM2_MEM_SIZE)) { + return MXC_MPC_SRAM2; + } else if ((phy_addr >= MXC_PHY_SRAM3_MEM_BASE) && + (phy_addr < MXC_PHY_SRAM3_MEM_BASE + MXC_PHY_SRAM3_MEM_SIZE)) { + return MXC_MPC_SRAM3; + } else if ((phy_addr >= MXC_PHY_SRAM4_MEM_BASE) && + (phy_addr < MXC_PHY_SRAM4_MEM_BASE + MXC_PHY_SRAM4_MEM_SIZE)) { + return MXC_MPC_SRAM4; + } else { + // Addresses are located outside of memory spaces that don't have an + // associated MPC. + return NULL; + } +} + +int MXC_MPC_GetBlockIdx(mxc_mpc_regs_t *mpc, uint32_t addr) +{ + uint32_t physical_addr; + uint32_t block_size; + uint32_t start_mpc_region_addr, mpc_region_size; + int base, block, remainder; + + if (mpc == NULL) { + return E_NO_DEVICE; + } + + start_mpc_region_addr = MXC_MPC_GET_PHY_MEM_BASE(mpc); + mpc_region_size = MXC_MPC_GET_PHY_MEM_SIZE(mpc); + if (!((addr >= start_mpc_region_addr) && (addr < start_mpc_region_addr + mpc_region_size))) { + // Given address is not within the MPC region. + return E_BAD_PARAM; + } + + // Block size = 1 << (BLK_CFG.size + 5) + block_size = 1 << ((mpc->blk_cfg & MXC_F_MPC_BLK_CFG_SIZE) + 5); + + // Clear bit 28 (Security State of Region) to get the physical memory address. + physical_addr &= ~(1 << 28); + + base = addr - start_mpc_region_addr; + block = base / block_size; + remainder = base % block_size; + + // Get the current block if the address does not start at the beginning of a whole block. + if (remainder != 0) { + block += 1; + } + + return block; +} + +int MXC_MPC_SetSecure(uint32_t start_addr, uint32_t end_addr) +{ + return MXC_MPC_SetBlockSecurity(start_addr, end_addr, MXC_MPC_STATE_SECURE); +} + +int MXC_MPC_SetNonSecure(uint32_t start_addr, uint32_t end_addr) +{ + return MXC_MPC_SetBlockSecurity(start_addr, end_addr, MXC_MPC_STATE_NONSECURE); +} + +int MXC_MPC_Lock(mxc_mpc_regs_t *mpc) +{ + mpc->ctrl |= MXC_F_MPC_CTRL_SEC_LOCKDOWN; + + return E_NO_ERROR; +} + +#endif diff --git a/Libraries/PeriphDrivers/Source/TZ/mpc_me30.svd b/Libraries/PeriphDrivers/Source/TZ/mpc_me30.svd new file mode 100644 index 00000000000..f06322f9a21 --- /dev/null +++ b/Libraries/PeriphDrivers/Source/TZ/mpc_me30.svd @@ -0,0 +1,283 @@ + + + + MPC + Memory Protection Controller. + 0x50091000 + + 0x00 + 0x1000 + registers + + + + CTRL + Control Register. + 0x0000 + 32 + + + SEC_ERR + Security Error Response COnfiguration. + 4 + 1 + + + DATAIF_REQ + Data interface gating request. + 6 + 1 + + + DATAIF_ACK + Data interface gating acknowledged. + 7 + 1 + + + AUTO_INC + Auto-increment. + 8 + 1 + + + SEC_LOCKDOWN + Security Lockdown. + 31 + 1 + + + + + BLK_MAX + Maximum value of block-based index register. + 0x0010 + 32 + read-only + + + VAL + Maximum value of block-based index register. + 0 + 32 + + + + + BLK_CFG + Block Control Register. + 0x0014 + 32 + read-only + + + SIZE + Block Size. + 0 + 4 + + + INIT_ST + Initialization in progress. + 31 + 1 + + + + + BLK_IDX + Block Index Register. + 0x0018 + + + IDX + Index value for accessing block-based lookup table. + 0 + 32 + + + + + BLK_LUT + Block-based gating Look Up Table Register. + 0x001C + + + ACCESS + Each bit indicates one block, based on the index pointed by the BLKIDX register. + 0 + 32 + + + + + INT_STAT + Interrupt Flag Register. + 0x0020 + read-only + + + MPC_IRQ + MPC IRQ triggered. + 0 + 1 + + + + + INT_CLEAR + Interrupt Clear Register. + 0x0024 + write-only + + + MPC_IRQ + MPC IRQ Clear. + 0 + 1 + + + + + INT_EN + Interrupt Enable Register. + 0x0028 + + + MPC_IRQ + MPC IRQ Enable. + 0 + 1 + + + + + INT_INFO1 + Interrupt Info 1 Register. + 0x002C + read-only + + + HADDR + AHB bus signals: Address bus. + 0 + 32 + + + + + INT_INFO2 + Interrupt Info 2 Register. + 0x0030 + read-only + + + HMASTER + AHB bus signals: Master Select. + 0 + 16 + + + HNONSEC + AHB bus signals: Indicates the current transfer is either a Non-Secure or Secure transfer. + 16 + 1 + + + CFG_NS + Security state. + 17 + 1 + + + + + INT_SET + Interrupt Set Debug Register. + 0x0034 + write-only + + + MPC_IRQ + MPC IRQ Set. + 0 + 1 + + + + + PIDR4 + Peripheral ID 4 Register. + 0x0FD0 + read-only + + + PIDR5 + Peripheral ID 5 Register. + 0x0FD4 + read-only + + + PIDR6 + Peripheral ID 6 Register. + 0x0FD8 + read-only + + + PIDR7 + Peripheral ID 6 Register. + 0x0FDC + read-only + + + PIDR0 + Peripheral ID 0 Register. + 0x0FE0 + read-only + + + PIDR1 + Peripheral ID 1 Register. + 0x0FE4 + read-only + + + PIDR2 + Peripheral ID 2 Register. + 0x0FE8 + read-only + + + PIDR3 + Peripheral ID 3 Register. + 0x0FEC + read-only + + + CIDR0 + Component ID register. + 0x0FF0 + read-only + + + CIDR1 + Component ID register. + 0x0FF4 + read-only + + + CIDR2 + Component ID register. + 0x0FF8 + read-only + + + CIDR3 + Component ID register. + 0x0FFC + read-only + + + + + \ No newline at end of file diff --git a/Libraries/PeriphDrivers/Source/TZ/nspc_me30.c b/Libraries/PeriphDrivers/Source/TZ/nspc_me30.c new file mode 100644 index 00000000000..bc654e5db51 --- /dev/null +++ b/Libraries/PeriphDrivers/Source/TZ/nspc_me30.c @@ -0,0 +1,63 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file nspc_me30.c + * @brief Non-Secure Privilege Controller (NSPC) Driver for the MAX32657 (ME30). + * @details This driver is used to control the privilege policy of data + * flowing to/from peripherals though the APB Peripheral Proection + * Controllers (PPC). + * The NSPC is only readable via Non-Secure Privileged access. + */ + +/** + * NSPC can only be accessed from the non-secure world. + */ +#if CONFIG_TRUSTED_EXECUTION_SECURE == 0 + +/**** Includes ****/ +#include +#include +#include "mxc_device.h" +#include "nspc.h" +#include "nspc_regs.h" + +/**** Definitions ****/ + +/**** Globals ****/ + +void MXC_NSPC_SetPrivAccess(mxc_nspc_periph_t periph, mxc_nspc_priv_t priv) +{ + if (priv == MXC_NSPC_UNPRIVILEGED) { + MXC_NSPC->apbpriv |= periph; + } else { + MXC_NSPC->apbpriv &= ~periph; + } +} + +// TODO(SW): Check function name. +void MXC_NSPC_DMA_SetPrivAccess(mxc_nspc_priv_t priv) +{ + if (priv == MXC_NSPC_UNPRIVILEGED) { + MXC_NSPC->ahbmpriv |= MXC_F_NSPC_AHBMPRIV_DMA; + } else { + MXC_NSPC->ahbmpriv &= ~MXC_F_NSPC_AHBMPRIV_DMA; + } +} + +#endif diff --git a/Libraries/PeriphDrivers/Source/TZ/nspc_me30.svd b/Libraries/PeriphDrivers/Source/TZ/nspc_me30.svd new file mode 100644 index 00000000000..aa3ae3d6b0c --- /dev/null +++ b/Libraries/PeriphDrivers/Source/TZ/nspc_me30.svd @@ -0,0 +1,189 @@ + + + + NSPC + Non-Secure Privilege Controller. + 0x40090000 + + 0x00 + 0x1000 + registers + + + + APBPRIV + APB Tartet Privileged/Non-privileged PPC Access Register. + 0x0160 + + + PERIPH + Each bit configures the APB PPC to enforce the security access allowed for an individual peripheral. + 0 + 32 + + + GCR + Privilege setting for GCR. + 0x01 + + + SIR + Privilege setting for SIR. + 0x02 + + + FCR + Privilege setting for FCR. + 0x04 + + + WDT + Privilege setting for WDT. + 0x08 + + + AES + Privilege setting for AES. + 0x010 + + + AESKEYS + Privilege setting for AESKEYS. + 0x020 + + + CRC + Privilege setting for CRC. + 0x040 + + + GPIO0 + Privilege setting for GPIO0. + 0x080 + + + TMR0 + Privilege setting for TMR0. + 0x0100 + + + TMR1 + Privilege setting for TMR1. + 0x0200 + + + TMR2 + Privilege setting for TMR2. + 0x0400 + + + TMR3 + Privilege setting for TMR3. + 0x0800 + + + TMR4 + Privilege setting for TMR4. + 0x01000 + + + TMR5 + Privilege setting for TMR5. + 0x02000 + + + I3C + Privilege setting for I3C. + 0x04000 + + + UART + Privilege setting for UART. + 0x08000 + + + SPI + Privilege setting for SPI. + 0x010000 + + + TRNG + Privilege setting for TRNG. + 0x020000 + + + BTLE_DBB + Privilege setting for BTLE DBB. + 0x040000 + + + BTLE_RFFE + Privilege setting for BTLE RFFE. + 0x080000 + + + RSTZ + Privilege setting for RSTZ. + 0x0100000 + + + BOOST + Privilege setting for Boost Controller. + 0x0200000 + + + TRIMSIR + Privilege setting for TRIMSIR. + 0x0400000 + + + RTC + Privilege setting for RTC. + 0x01000000 + + + WUT0 + Privilege setting for WUT0. + 0x02000000 + + + WUT1 + Privilege setting for WUT1. + 0x04000000 + + + PWRSEQ + Privilege setting for Power Sequencer. + 0x08000000 + + + MCR + Privilege setting for MCR. + 0x10000000 + + + ALL + Privilege setting for all peripherals. + 0x1F7FFFFF + + + + + + + AHBMPRIV + AHB Privileged/Non-Privileged Non-Secure DMA Access Register. + 0x0170 + + + DMA + Control access for transactions coming from the Non-Secure DMA. + 1 + 1 + + + + + + + \ No newline at end of file diff --git a/Libraries/PeriphDrivers/Source/TZ/spc_me30.c b/Libraries/PeriphDrivers/Source/TZ/spc_me30.c new file mode 100644 index 00000000000..bfc5def123b --- /dev/null +++ b/Libraries/PeriphDrivers/Source/TZ/spc_me30.c @@ -0,0 +1,184 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +/** + * @file spc_me30.c + * @brief Secure Privilege Controller (SPC) Driver for the MAX32657 (ME30). + * @details This driver is used to control the security and privilege policy of data + * flowing to/from peripherals though the APB Peripheral Proection + * Controllers (PPC). + * The SPC is only readable via Secure Privileged access. + */ + +/** + * SPC can only be accessed from the secure world. + */ +#if CONFIG_TRUSTED_EXECUTION_SECURE == 1 + +/**** Includes ****/ +#include +#include +#include "mxc_device.h" +#include "mxc_errors.h" +#include "spc.h" +#include "spc_regs.h" +#include "gpio.h" + +/**** Definitions ****/ + +/**** Globals ****/ + +/**** Functions ****/ + +void MXC_SPC_Lock(void) +{ + // Note: Cannot unlock SPC registers except via a reset. + MXC_SPC->ctrl |= MXC_F_SPC_CTRL_LOCK; +} + +// TODO(SW): Need to verify if this prevents the Non-Secure world from +// accessing the VTOR register. Note: the suffix '_NS' means that +// the secure world is accessing a non-secure register +void MXC_SPC_Core_Lock(void) +{ + // Locks the Cortex-M33 Core Registers (VTOR, SAU, MPU, etc). + MXC_SPC->m33lock |= MXC_F_SPC_M33LOCK_AIRCR_VTOR_S; + MXC_SPC->m33lock |= MXC_F_SPC_M33LOCK_VTOR_NS; + MXC_SPC->m33lock |= MXC_F_SPC_M33LOCK_MPU_S; + MXC_SPC->m33lock |= MXC_F_SPC_M33LOCK_MPU_NS; + MXC_SPC->m33lock |= MXC_F_SPC_M33LOCK_SAU; +} + +void MXC_SPC_Core_UnLock(void) +{ + MXC_SPC->m33lock &= ~MXC_F_SPC_M33LOCK_AIRCR_VTOR_S; + MXC_SPC->m33lock &= ~MXC_F_SPC_M33LOCK_VTOR_NS; + MXC_SPC->m33lock &= ~MXC_F_SPC_M33LOCK_MPU_S; + MXC_SPC->m33lock &= ~MXC_F_SPC_M33LOCK_MPU_NS; + MXC_SPC->m33lock &= ~MXC_F_SPC_M33LOCK_SAU; +} + +void MXC_SPC_SetPrivAccess(mxc_spc_periph_t periph, mxc_spc_priv_t priv) +{ + if (priv == MXC_SPC_UNPRIVILEGED) { + MXC_SPC->apbpriv |= periph; + } else { + MXC_SPC->apbpriv &= ~periph; + } +} + +// TODO(SW): Check names. +void MXC_SPC_SetSecure(mxc_spc_periph_t periph) +{ + MXC_SPC->apbsec &= ~periph; +} + +void MXC_SPC_SetNonSecure(mxc_spc_periph_t periph) +{ + MXC_SPC->apbsec |= periph; +} + +// TODO(SW): Check function name. +void MXC_SPC_DMA_SetPrivAccess(mxc_spc_priv_t priv) +{ + if (priv == MXC_SPC_UNPRIVILEGED) { + MXC_SPC->ahbmpriv |= MXC_F_SPC_AHBMPRIV_DMA; + } else { + MXC_SPC->ahbmpriv &= ~MXC_F_SPC_AHBMPRIV_DMA; + } +} + +int MXC_SPC_GPIO_SetSecure(mxc_gpio_regs_t *gpio, uint32_t pins) +{ + // Added GPIO instance as a parameter to follow convention of future devices that could + // potentially have more than one GPIO port. + if (gpio == MXC_GPIO0) { + MXC_SPC->gpio0 &= ~pins; + return E_NO_ERROR; + } else { + return E_BAD_PARAM; + } +} + +int MXC_SPC_GPIO_SetNonSecure(mxc_gpio_regs_t *gpio, uint32_t pins) +{ + // Added GPIO instance as a parameter to follow convention of future devices that could + // potentially have more than one GPIO port. + if (gpio == MXC_GPIO0) { + MXC_SPC->gpio0 |= pins; + return E_NO_ERROR; + } else { + return E_BAD_PARAM; + } +} + +void MXC_SPC_MPC_EnableInt(uint32_t intr) +{ + MXC_SPC->mpc_inten |= intr; +} + +void MXC_SPC_MPC_DisableInt(uint32_t intr) +{ + MXC_SPC->mpc_inten &= ~intr; +} + +uint32_t MXC_SPC_MPC_GetFlags(void) +{ + return MXC_SPC->mpc_status; +} + +void MXC_SPC_PPC_EnableInt(uint32_t intr) +{ + MXC_SPC->ppc_inten |= intr; +} + +void MXC_SPC_PPC_DisableInt(uint32_t intr) +{ + MXC_SPC->ppc_inten &= ~intr; +} + +uint32_t MXC_SPC_PPC_GetFlags(void) +{ + return MXC_SPC->ppc_status; +} + +void MXC_SPC_PPC_ClearFlags(uint32_t flags) +{ + MXC_SPC->ppc_intclr |= flags; +} + +// TODO(SW): This requires testing. ICODE +void MXC_SPC_SetCode_NSC(bool isNSC) +{ + if (isNSC) { + MXC_SPC->nscidau |= MXC_F_SPC_NSCIDAU_CODE; + } else { + MXC_SPC->nscidau &= ~MXC_F_SPC_NSCIDAU_CODE; + } +} + +void MXC_SPC_SetSRAM_NSC(bool isNSC) +{ + if (isNSC) { + MXC_SPC->nscidau |= MXC_F_SPC_NSCIDAU_SRAM; + } else { + MXC_SPC->nscidau &= ~MXC_F_SPC_NSCIDAU_SRAM; + } +} + +#endif diff --git a/Libraries/PeriphDrivers/Source/TZ/spc_me30.svd b/Libraries/PeriphDrivers/Source/TZ/spc_me30.svd new file mode 100644 index 00000000000..a2cbc6159c1 --- /dev/null +++ b/Libraries/PeriphDrivers/Source/TZ/spc_me30.svd @@ -0,0 +1,575 @@ + + + + SPC + Secure Privilege Controller. + 0x50090000 + + 0x00 + 0x1000 + registers + + + + CTRL + SPC Secure Configuration Control Register. + 0x0000 + 32 + + + LOCK + Write 1 to set, disables writes to security-related control registers in the SPC. Once set, the locked registers cannot be modified nor can this bit be cleared to 0 except through a reset. + 0 + 1 + + + + + RESP + Security Violation Response Configuration Register. + 0x0008 + 32 + + + VIOLCFG + This field configures the target response in case of a secuirty violation. + 0 + 1 + + + + + MPC_STATUS + Secure MPC Status Register. + 0x0020 + 8 + read-only + + + SRAM0 + Interrupt status for SRAM 0 Memory Protection Controller. + 0 + 1 + + + SRAM1 + Interrupt status for SRAM1 Memory Protection Controllers. + 1 + 1 + + + SRAM2 + Interrupt status for SRAM2 Memory Protection Controllers. + 2 + 1 + + + SRAM3 + Interrupt status for SRAM3 Memory Protection Controllers. + 3 + 1 + + + SRAM4 + Interrupt status for SRAM4 Memory Protection Controllers. + 4 + 1 + + + FLASH + Interrupt status for Flash Memory Protection Controllers. + 5 + 1 + + + + + MPC_INTEN + Secure MPC Interrupt Enable Register. + 0x0024 + + + SRAM0 + Interrupt enable for SRAM 0 Memory Protection Controller. + 0 + 1 + + + SRAM1 + Interrupt enable for SRAM1 Memory Protection Controllers. + 1 + 1 + + + SRAM2 + Interrupt enable for SRAM2 Memory Protection Controllers. + 2 + 1 + + + SRAM3 + Interrupt enable for SRAM3 Memory Protection Controllers. + 3 + 1 + + + SRAM4 + Interrupt enable for SRAM4 Memory Protection Controllers. + 4 + 1 + + + FLASH + Interrupt enable for Flash Memory Protection Controllers. + 5 + 1 + + + + + PPC_STATUS + Secure PPC Interrupt Status Register. + 0x0030 + read-only + + + APBPPC + Interrupt Status of APB PPC for targets on APB bus. Each bit ties to an individual PPC in the system. + 0 + 4 + + + + + PPC_INTCLR + Secure PPC Interrupt Clear Register. + 0x0034 + write-only + + + APBPPC + Interrupt Clear of APB PPC for targets on the APB bus. Each bit ties to an individual PPC in the system. + 0 + 4 + + + + + PPC_INTEN + Secure PPC Interrupt Enable Register. + 0x0038 + + + APBPPC + Interrupt Enable for APB PPC for targets on the APB bus. Each bit ties to an individual PPC in the system. + 0 + 4 + + + + + NSCIDAU + Non-Secure Callabale IDAU Configuration Register. + 0x0080 + + + CODE + Configures whether the CODE region is Non-secure Callable. + 0 + 1 + + + SRAM + Configures whether the RAM region is Non-secure Callable. + 1 + 1 + + + + + M33LOCK + M33 Core Register Lock Configuratrion Register. + 0x0090 + + + AIRCR_VTOR_S + Lock VTOR_S, AIRCR.PRIS, and AIRCR.BFHFNMINS. + 0 + 1 + + + VTOR_NS + Lock VTOR_NS register. + 1 + 1 + + + MPU_S + Lock secure MPU registers. + 2 + 1 + + + MPU_NS + Lock non-secure MPU registers. + 3 + 1 + + + SAU + Lock Security Attribution Unit (SAU). + 4 + 1 + + + + + APBSEC + APB Target Secure/Non-secure PPC Access Register. + 0x0120 + + + PERIPH + Each bit configures the APB PPC to enforce the security access allowed for an individual peripheral. + 0 + 32 + + + GCR + Security Access for GCR. + 0x01 + + + SIR + Security Access for SIR. + 0x02 + + + FCR + Security Access for FCR. + 0x04 + + + WDT + Security Access for WDT. + 0x08 + + + AES + Security Access for AES. + 0x010 + + + AESKEYS + Security Access for AESKEYS. + 0x020 + + + CRC + Security Access for CRC. + 0x040 + + + GPIO0 + Security Access for GPIO0. + 0x080 + + + TMR0 + Security Access for TMR0. + 0x0100 + + + TMR1 + Security Access for TMR1. + 0x0200 + + + TMR2 + Security Access for TMR2. + 0x0400 + + + TMR3 + Security Access for TMR3. + 0x0800 + + + TMR4 + Security Access for TMR4. + 0x01000 + + + TMR5 + Security Access for TMR5. + 0x02000 + + + I3C + Security Access for I3C. + 0x04000 + + + UART + Security Access for UART. + 0x08000 + + + SPI + Security Access for SPI. + 0x010000 + + + TRNG + Security Access for TRNG. + 0x020000 + + + BTLE_DBB + Security Access for BTLE DBB. + 0x040000 + + + BTLE_RFFE + Security Access for BTLE RFFE. + 0x080000 + + + RSTZ + Security Access for RSTZ. + 0x0100000 + + + BOOST + Security Access for Boost Controller. + 0x0200000 + + + TRIMSIR + Security Access for TRIMSIR. + 0x0400000 + + + RTC + Security Access for RTC. + 0x01000000 + + + WUT0 + Security Access for WUT0. + 0x02000000 + + + WUT1 + Security Access for WUT1. + 0x04000000 + + + PWRSEQ + Security Access for Power Sequencer. + 0x08000000 + + + MCR + Security Access for MCR. + 0x10000000 + + + ALL + Security Access for all peripherals. + 0x1F7FFFFF + + + + + + + APBPRIV + APB Tartet Privileged/Non-privileged PPC Access Register. + 0x0160 + + + PERIPH + Each bit configures the APB PPC to enforce the security access allowed for an individual peripheral. + 0 + 32 + + + GCR + Privilege setting for GCR. + 0x01 + + + SIR + Privilege setting for SIR. + 0x02 + + + FCR + Privilege setting for FCR. + 0x04 + + + WDT + Privilege setting for WDT. + 0x08 + + + AES + Privilege setting for AES. + 0x010 + + + AESKEYS + Privilege setting for AESKEYS. + 0x020 + + + CRC + Privilege setting for CRC. + 0x040 + + + GPIO0 + Privilege setting for GPIO0. + 0x080 + + + TMR0 + Privilege setting for TMR0. + 0x0100 + + + TMR1 + Privilege setting for TMR1. + 0x0200 + + + TMR2 + Privilege setting for TMR2. + 0x0400 + + + TMR3 + Privilege setting for TMR3. + 0x0800 + + + TMR4 + Privilege setting for TMR4. + 0x01000 + + + TMR5 + Privilege setting for TMR5. + 0x02000 + + + I3C + Privilege setting for I3C. + 0x04000 + + + UART + Privilege setting for UART. + 0x08000 + + + SPI + Privilege setting for SPI. + 0x010000 + + + TRNG + Privilege setting for TRNG. + 0x020000 + + + BTLE_DBB + Privilege setting for BTLE DBB. + 0x040000 + + + BTLE_RFFE + Privilege setting for BTLE RFFE. + 0x080000 + + + RSTZ + Privilege setting for RSTZ. + 0x0100000 + + + BOOST + Privilege setting for Boost Controller. + 0x0200000 + + + TRIMSIR + Privilege setting for TRIMSIR. + 0x0400000 + + + RTC + Privilege setting for RTC. + 0x01000000 + + + WUT0 + Privilege setting for WUT0. + 0x02000000 + + + WUT1 + Privilege setting for WUT1. + 0x04000000 + + + PWRSEQ + Privilege setting for Power Sequencer. + 0x08000000 + + + MCR + Privilege setting for MCR. + 0x10000000 + + + ALL + Privilege setting for all peripherals. + 0x1F7FFFFF + + + + + + + AHBMPRIV + AHB Privileged/Non-privileged Secure DMA Access. + 0x0170 + + + DMA + Controls access of transactions coming from the Secure DMA. + 0 + 1 + + + + + GPIO0 + Secure GPIO0 Configuration Register. + 0x0180 + + + PINS + Each bit configures a GPIO pin as secure or non-secure on GPIO Port 0. Secure GPIO pins prevent software from reading GPIO Data In pin states. + 0 + 14 + + + + + + + \ No newline at end of file diff --git a/Libraries/PeriphDrivers/Source/UART/uart_ai85.c b/Libraries/PeriphDrivers/Source/UART/uart_ai85.c index 0d8d8b120b1..11ca9567843 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_ai85.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_ai85.c @@ -45,7 +45,7 @@ int MXC_UART_AsyncStop(mxc_uart_regs_t *uart) int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { int retval; - +#ifndef MSDK_NO_GPIO_CLK_INIT retval = MXC_UART_Shutdown(uart); if (retval) { return retval; @@ -75,13 +75,14 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo default: return E_BAD_PARAM; } +#endif // MSDK_NO_GPIO_CLK_INIT retval = MXC_UART_SetClockSource(uart, clock); if (retval != E_NO_ERROR) { return retval; } - return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, clock); + return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, MXC_UART_GetClockSource(uart)); } int MXC_UART_Shutdown(mxc_uart_regs_t *uart) @@ -240,7 +241,8 @@ int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rt int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) { - int error = E_NO_ERROR; + int retval = E_NO_ERROR; + uint8_t clock_option = 0; switch (MXC_UART_GET_IDX(uart)) { case 0: @@ -249,12 +251,14 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) // UART0-2 support PCLK and IBRO switch (clock) { case MXC_UART_APB_CLK: - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 0); + clock_option = 0; break; case MXC_UART_IBRO_CLK: - error = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 2); +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 2; break; default: @@ -266,13 +270,17 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) // UART3 (LPUART0) supports IBRO and ERTCO switch (clock) { case MXC_UART_IBRO_CLK: - error = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 0); +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 2; break; case MXC_UART_ERTCO_CLK: - error = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO); - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 1); +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 3; break; default: @@ -284,7 +292,10 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) return E_BAD_PARAM; } - return error; + if (retval) + return retval; + + return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, clock_option); } mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart) @@ -305,9 +316,9 @@ mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart) break; case 3: switch (clock_option) { - case 0: + case 2: return MXC_UART_IBRO_CLK; - case 1: + case 3: return MXC_UART_ERTCO_CLK; default: return E_BAD_STATE; diff --git a/Libraries/PeriphDrivers/Source/UART/uart_ai87.c b/Libraries/PeriphDrivers/Source/UART/uart_ai87.c index dfba30bef20..ac6c0cb42a9 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_ai87.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_ai87.c @@ -61,7 +61,7 @@ void MXC_UART_UnlockClockSource(mxc_uart_regs_t *uart) int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { int err; - +#ifndef MSDK_NO_GPIO_CLK_INIT err = MXC_UART_Shutdown(uart); if (err) { @@ -92,6 +92,7 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo default: return E_BAD_PARAM; } +#endif // MSDK_NO_GPIO_CLK_INIT err = MXC_UART_SetClockSource(uart, clock); if (err) @@ -141,6 +142,11 @@ int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clo return E_BAD_PARAM; } + // Default OSR + // Setting LPUART Over-Sampling Rate in MXC_UART_RevB_SetFrequency function overwrites + // the sampling rate set below for the ERTCO. + uart->osr = 5; + unsigned int input_clock_freq = 0; switch (clock) { case MXC_UART_APB_CLK: @@ -256,6 +262,7 @@ int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rt int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) { int err = E_NO_ERROR; + uint8_t clock_option = 0; int idx = MXC_UART_GET_IDX(uart); if (idx < 0) return E_BAD_PARAM; @@ -272,12 +279,14 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) // UART0-2 support PCLK and IBRO switch (clock) { case MXC_UART_APB_CLK: - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 0); + clock_option = 0; break; case MXC_UART_IBRO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT err = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 2); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 2; break; default: @@ -288,13 +297,17 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) // UART3 (LPUART0) supports IBRO and ERTCO switch (clock) { case MXC_UART_IBRO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT err = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 0); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 0; break; case MXC_UART_ERTCO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT err = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO); - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 1); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 1; break; default: @@ -303,7 +316,10 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) break; } - return err; + if (err) + return err; + + return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, clock_option); } mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart) diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me12.c b/Libraries/PeriphDrivers/Source/UART/uart_me12.c index 23d9f751dbf..f2ef5967997 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me12.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me12.c @@ -43,9 +43,9 @@ int MXC_UART_AsyncStop(mxc_uart_regs_t *uart) int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock, sys_map_t map) { -#ifndef MSDK_NO_GPIO_CLK_INIT int retval; +#ifndef MSDK_NO_GPIO_CLK_INIT retval = MXC_UART_Shutdown(uart); if (retval) { return retval; @@ -110,6 +110,9 @@ int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clo return E_BAD_PARAM; } + // Default OSR + uart->osr = 5; + switch (clock) { case MXC_UART_APB_CLK: clock_freq = SystemCoreClock / 2; @@ -214,17 +217,23 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) break; case MXC_UART_EXT_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT error = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_EXTCLK); +#endif // MSDK_NO_GPIO_CLK_INIT MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 1); break; case MXC_UART_IBRO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT error = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); +#endif // MSDK_NO_GPIO_CLK_INIT MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 2); break; case MXC_UART_ERFO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT error = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERFO); +#endif // MSDK_NO_GPIO_CLK_INIT MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 3); break; diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me15.c b/Libraries/PeriphDrivers/Source/UART/uart_me15.c index ec12f57999d..df8b41e80ef 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me15.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me15.c @@ -18,6 +18,7 @@ * ******************************************************************************/ +#include #include "uart.h" #include "mxc_device.h" #include "mxc_pins.h" @@ -44,44 +45,15 @@ int MXC_UART_AsyncStop(mxc_uart_regs_t *uart) int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { -#ifndef MSDK_NO_GPIO_CLK_INIT int retval; +#ifndef MSDK_NO_GPIO_CLK_INIT retval = MXC_UART_Shutdown(uart); if (retval) { return retval; } - switch (clock) { - case MXC_UART_EXT_CLK: - if (uart == MXC_UART3) { - MXC_GPIO_Config(&gpio_cfg_lpextclk); - } else { - MXC_GPIO_Config(&gpio_cfg_hfextclk); - } - break; - - case MXC_UART_ERTCO_CLK: - MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO); - break; - - case MXC_UART_IBRO_CLK: - MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); - break; - - case MXC_UART_ERFO_CLK: - MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERFO); - break; - - case MXC_UART_INRO_CLK: - MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_INRO); - break; - - default: - break; - } - switch (MXC_UART_GET_IDX(uart)) { case 0: MXC_GPIO_Config(&gpio_cfg_uart0); @@ -110,7 +82,11 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo } #endif // MSDK_NO_GPIO_CLK_INIT - return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, clock); + retval = MXC_UART_SetClockSource(uart, clock); + if (retval) + return retval; + + return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, MXC_UART_GetClockSource(uart)); } int MXC_UART_Shutdown(mxc_uart_regs_t *uart) @@ -153,73 +129,78 @@ int MXC_UART_ReadyForSleep(mxc_uart_regs_t *uart) int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { int freq; - int mod = 0; - int clkdiv = 0; - int div = 8; + uint32_t clock_freq = 0; + uint8_t aon_clk_div; if (MXC_UART_GET_IDX(uart) < 0) { return E_BAD_PARAM; } - // check if the uart is LPUART - if (uart == MXC_UART3) { - // OSR default value - uart->osr = 5; + // Default OSR default value + uart->osr = 5; - switch (clock) { - case MXC_UART_APB_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_PERIPHERAL_CLOCK; - div = (1 << (MXC_GCR->pclkdiv & MXC_F_GCR_PCLKDIV_AON_CLKDIV)) * 8; - clkdiv = ((SystemCoreClock / div) / baud); - mod = ((SystemCoreClock / div) % baud); - break; + switch (clock) { + case MXC_UART_APB_CLK: + clock_freq = PeripheralClock; + break; + case MXC_UART_EXT_CLK: + clock_freq = EXTCLK_FREQ; + break; + case MXC_UART_IBRO_CLK: + clock_freq = IBRO_FREQ; - case MXC_UART_EXT_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_EXTERNAL_CLOCK; - clkdiv = EXTCLK_FREQ / baud; - mod = EXTCLK_FREQ % baud; - break; + if (baud > 2400) { + uart->osr = 0; + } else { + uart->osr = 1; + } - case MXC_UART_ERTCO_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_CLK2; - uart->ctrl |= MXC_F_UART_CTRL_FDM; - clkdiv = ((ERTCO_FREQ * 2) / baud); - mod = ((ERTCO_FREQ * 2) % baud); - - if (baud > 2400) { - uart->osr = 0; - } else { - uart->osr = 1; - } - break; + break; - case MXC_UART_INRO_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_CLK3; - uart->ctrl |= MXC_F_UART_CTRL_FDM; - clkdiv = ((INRO_FREQ * 2) / baud); - mod = ((INRO_FREQ * 2) % baud); - - if (baud > 2400) { - uart->osr = 0; - } else { - uart->osr = 1; - } - break; + case MXC_UART_ERFO_CLK: + clock_freq = ERFO_FREQ; + break; - default: - return E_BAD_PARAM; + case MXC_UART_ERTCO_CLK: + clock_freq = ERTCO_FREQ; + uart->ctrl |= MXC_F_UART_CTRL_FDM; + + if (baud > 2400) { + uart->osr = 0; + } else { + uart->osr = 1; } - if (!clkdiv || mod > (baud / 2)) { - clkdiv++; + break; + + case MXC_UART_INRO_CLK: + clock_freq = INRO_FREQ; + uart->ctrl |= MXC_F_UART_CTRL_FDM; + + if (baud > 2400) { + uart->osr = 0; + } else { + uart->osr = 1; } - uart->clkdiv = clkdiv; - freq = MXC_UART_GetFrequency(uart); - } else { - freq = MXC_UART_RevB_SetFrequency((mxc_uart_revb_regs_t *)uart, baud, clock); + break; + + case MXC_UART_AOD_CLK: + aon_clk_div = (MXC_GCR->pclkdiv & MXC_F_GCR_PCLKDIV_AON_CLKDIV) >> + MXC_F_GCR_PCLKDIV_AON_CLKDIV_POS; + clock_freq = PeripheralClock / (4 * (pow(2, aon_clk_div))); + break; + + default: + return E_BAD_PARAM; + } + + if (uart->ctrl & MXC_F_UART_CTRL_FDM) { + clock_freq *= 2; // x2 to account for FDM } + freq = MXC_UART_RevB_SetFrequency((mxc_uart_revb_regs_t *)uart, clock_freq, baud); + if (freq > 0) { // Enable baud clock and wait for it to become ready. uart->ctrl |= MXC_F_UART_CTRL_BCLKEN; @@ -325,7 +306,103 @@ int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rt int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) { - return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, clock); + uint8_t clock_option = 0; + + switch (MXC_UART_GET_IDX(uart)) { + case 0: + case 1: + case 2: + switch (clock) { + case MXC_UART_APB_CLK: + clock_option = 0; + break; + case MXC_UART_EXT_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + MXC_GPIO_Config(&gpio_cfg_hfextclk); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 1; + break; + case MXC_UART_IBRO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 2; + break; + case MXC_UART_ERFO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERFO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 3; + break; + default: + return E_BAD_PARAM; + } + break; + case 3: + switch (clock) { + case MXC_UART_AOD_CLK: + clock_option = 0; + break; + case MXC_UART_EXT_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + MXC_GPIO_Config(&gpio_cfg_lpextclk); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 1; + break; + case MXC_UART_ERTCO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 2; + break; + case MXC_UART_INRO_CLK: + clock_option = 3; + break; + default: + return E_BAD_PARAM; + } + } + + return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, clock_option); +} + +mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart) +{ + unsigned int clock_option = MXC_UART_RevB_GetClockSource((mxc_uart_revb_regs_t *)uart); + switch (MXC_UART_GET_IDX(uart)) { + case 0: + case 1: + case 2: + switch (clock_option) { + case 0: + return MXC_UART_APB_CLK; + case 1: + return MXC_UART_EXT_CLK; + case 2: + return MXC_UART_IBRO_CLK; + case 3: + return MXC_UART_ERFO_CLK; + default: + return E_BAD_STATE; + } + break; + case 3: + switch (clock_option) { + case 0: + return MXC_UART_AOD_CLK; + case 1: + return MXC_UART_EXT_CLK; + case 2: + return MXC_UART_ERTCO_CLK; + case 3: + return MXC_UART_INRO_CLK; + default: + return E_BAD_STATE; + } + break; + default: + return E_BAD_PARAM; + } } int MXC_UART_GetActive(mxc_uart_regs_t *uart) diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me16.c b/Libraries/PeriphDrivers/Source/UART/uart_me16.c index 0390362810b..715a052abd3 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me16.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me16.c @@ -21,6 +21,7 @@ #pragma diag_suppress 68 // integer conversion resulted in a change of sign #endif +#include #include "uart.h" #include "mxc_device.h" #include "mxc_pins.h" @@ -47,36 +48,13 @@ int MXC_UART_AsyncStop(mxc_uart_regs_t *uart) int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { + int retval; #ifndef MSDK_NO_GPIO_CLK_INIT - int retval, error; - retval = MXC_UART_Shutdown(uart); if (retval) { return retval; } - switch (clock) { - case MXC_UART_EXT_CLK: - MXC_GPIO_Config(&gpio_cfg_extclk); - break; - - case MXC_UART_ERTCO_CLK: - // UART0 and UART2 doesn't use ERTCO - return E_BAD_PARAM; - break; - - case MXC_UART_IBRO_CLK: - MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); - break; - - case MXC_UART_ERFO_CLK: - MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERFO); - break; - - default: - break; - } - switch (MXC_UART_GET_IDX(uart)) { case 0: MXC_GPIO_Config(&gpio_cfg_uart0); @@ -84,9 +62,9 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo break; case 2: // Can't use UART2 when HART Modem is used for MAX32675. - error = MXC_GPIO_Config(&gpio_cfg_uart2); - if (error != E_NO_ERROR) { - return error; + retval = MXC_GPIO_Config(&gpio_cfg_uart2); + if (retval) { + return retval; } MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART2); @@ -97,6 +75,10 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo } #endif // MSDK_NO_GPIO_CLK_INIT + retval = MXC_UART_SetClockSource(uart, clock); + if (retval) + return retval; + return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, (mxc_uart_revb_clock_t)clock); } @@ -128,61 +110,44 @@ int MXC_UART_ReadyForSleep(mxc_uart_regs_t *uart) int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { int freq; - int mod = 0; - int clkdiv = 0; - int div = 8; + uint32_t clock_freq = 0; if (MXC_UART_GET_IDX(uart) < 0) { return E_BAD_PARAM; } - // check if the uart is LPUART - if (uart == MXC_UART3) { - // OSR default value - uart->osr = 5; - - switch (clock) { - case MXC_UART_APB_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_PERIPHERAL_CLOCK; - div = (1 << (MXC_GCR->pclkdiv & MXC_F_GCR_PCLKDIV_AON_CLKDIV)) * 8; - clkdiv = ((SystemCoreClock / div) / baud); - mod = ((SystemCoreClock / div) % baud); - break; - - case MXC_UART_EXT_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_EXTERNAL_CLOCK; - clkdiv = EXTCLK_FREQ / baud; - mod = EXTCLK_FREQ % baud; - break; + // Default OSR default value + uart->osr = 5; - case MXC_UART_ERTCO_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_CLK2; - uart->ctrl |= MXC_F_UART_CTRL_FDM; - clkdiv = ((ERTCO_FREQ * 2) / baud); - mod = ((ERTCO_FREQ * 2) % baud); - - if (baud > 2400) { - uart->osr = 0; - } else { - uart->osr = 1; - } - break; - - default: - return E_BAD_PARAM; - } + switch (clock) { + case MXC_UART_APB_CLK: + clock_freq = PeripheralClock; + break; + case MXC_UART_EXT_CLK: + clock_freq = EXTCLK_FREQ; + case MXC_UART_IBRO_CLK: + clock_freq = IBRO_FREQ; + uart->ctrl |= MXC_F_UART_CTRL_FDM; - if (!clkdiv || mod > (baud / 2)) { - clkdiv++; + if (baud > 2400) { + uart->osr = 0; + } else { + uart->osr = 1; } - uart->clkdiv = clkdiv; + break; + case MXC_UART_ERFO_CLK: + clock_freq = ERFO_FREQ; + break; + default: + return E_BAD_PARAM; + } - freq = MXC_UART_GetFrequency(uart); - } else { - freq = MXC_UART_RevB_SetFrequency((mxc_uart_revb_regs_t *)uart, baud, - (mxc_uart_revb_clock_t)clock); + if (uart->ctrl & MXC_F_UART_CTRL_FDM) { + clock_freq *= 2; // x2 to account for FDM } + freq = MXC_UART_RevB_SetFrequency((mxc_uart_revb_regs_t *)uart, clock_freq, baud); + if (freq > 0) { // Enable baud clock and wait for it to become ready. uart->ctrl |= MXC_F_UART_CTRL_BCLKEN; @@ -209,8 +174,8 @@ int MXC_UART_GetFrequency(mxc_uart_regs_t *uart) MXC_S_UART_CTRL_BCLKSRC_PERIPHERAL_CLOCK) { div = (1 << (MXC_GCR->pclkdiv & MXC_F_GCR_PCLKDIV_AON_CLKDIV)) * 8; periphClock = SystemCoreClock / div; - } else if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) == MXC_S_UART_CTRL_BCLKSRC_CLK2) { - periphClock = ERTCO_FREQ * 2; + } else if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) == MXC_S_UART_CTRL_BCLKSRC_CLK3) { + periphClock = INRO_FREQ * 2; } else { return E_BAD_PARAM; } @@ -270,7 +235,39 @@ int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rt int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) { - return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, (mxc_uart_revb_clock_t)clock); + uint8_t retval = E_NO_ERROR; + + if (MXC_UART_GET_IDX(uart) != 0 || MXC_UART_GET_IDX(uart) != 2) { + return E_BAD_PARAM; + } + + switch (clock) { + case MXC_UART_APB_CLK: + MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 0); + break; + case MXC_UART_EXT_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + MXC_GPIO_Config(&gpio_cfg_extclk); +#endif // MSDK_NO_GPIO_CLK_INIT + MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 1); + break; + case MXC_UART_IBRO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); +#endif // MSDK_NO_GPIO_CLK_INIT + MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 2); + break; + case MXC_UART_ERFO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERFO); +#endif // MSDK_NO_GPIO_CLK_INIT + MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 3); + break; + default: + return E_BAD_PARAM; + } + + return retval; } int MXC_UART_GetActive(mxc_uart_regs_t *uart) diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me17.c b/Libraries/PeriphDrivers/Source/UART/uart_me17.c index 9ba0921763e..9637e2a1779 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me17.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me17.c @@ -44,9 +44,9 @@ int MXC_UART_AsyncStop(mxc_uart_regs_t *uart) int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { -#ifndef MSDK_NO_GPIO_CLK_INIT int retval; +#ifndef MSDK_NO_GPIO_CLK_INIT retval = MXC_UART_Shutdown(uart); if (retval) { return retval; @@ -270,7 +270,9 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) break; case MXC_UART_IBRO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT error = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); +#endif // MSDK_NO_GPIO_CLK_INIT MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 2); break; @@ -283,12 +285,16 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) // UART3 (LPUART0) supports IBRO and ERTCO switch (clock) { case MXC_UART_IBRO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT error = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); +#endif // MSDK_NO_GPIO_CLK_INIT MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 0); break; case MXC_UART_ERTCO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT error = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO); +#endif // MSDK_NO_GPIO_CLK_INIT MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 1); break; diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me18.c b/Libraries/PeriphDrivers/Source/UART/uart_me18.c index 7e43aa60d7c..2c0c678578f 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me18.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me18.c @@ -44,7 +44,6 @@ int MXC_UART_AsyncStop(mxc_uart_regs_t *uart) int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { -#ifndef MSDK_NO_GPIO_CLK_INIT int retval; if (!MXC_UART_RevB_IsClockSourceLocked((mxc_uart_revb_regs_t *)uart)) { @@ -54,6 +53,7 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo } } +#ifndef MSDK_NO_GPIO_CLK_INIT switch (MXC_UART_GET_IDX(uart)) { case 0: MXC_GPIO_Config(&gpio_cfg_uart0); @@ -78,11 +78,11 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo default: return E_BAD_PARAM; } +#endif // MSDK_NO_GPIO_CLK_INIT retval = MXC_UART_SetClockSource(uart, clock); if (retval) return retval; -#endif return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, MXC_UART_GetClockSource(uart)); } @@ -314,7 +314,8 @@ int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rt int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) { - int err = E_NO_ERROR; + int retval = E_NO_ERROR; + uint8_t clock_option = 0; int idx = MXC_UART_GET_IDX(uart); if (idx < 0) return E_BAD_PARAM; @@ -327,17 +328,21 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) // UART0-2 support PCLK, ERFO, & IBRO switch (clock) { case MXC_UART_APB_CLK: - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 0); + clock_option = 0; break; case MXC_UART_ERFO_CLK: - err = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERFO); - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 1); +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERFO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 1; break; case MXC_UART_IBRO_CLK: - err = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 2); +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 2; break; default: @@ -348,22 +353,32 @@ int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) // UART3 (LPUART0) supports IBRO and ERTCO switch (clock) { case MXC_UART_IBRO_CLK: - err = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 0); +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 0; break; case MXC_UART_ERTCO_CLK: - err = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO); - MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, 1); +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 1; break; default: return E_BAD_PARAM; } break; + + default: + return E_BAD_PARAM; } - return err; + if (retval) + return retval; + + return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, clock_option); } mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart) diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me21.c b/Libraries/PeriphDrivers/Source/UART/uart_me21.c index d4bbfc54589..d5f44b2ce35 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me21.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me21.c @@ -18,6 +18,7 @@ * ******************************************************************************/ +#include #include "uart.h" #include "mxc_device.h" #include "mxc_pins.h" @@ -68,8 +69,8 @@ int MXC_UART_AsyncStop(mxc_uart_regs_t *uart) int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { -#ifndef MSDK_NO_GPIO_CLK_INIT int retval; +#ifndef MSDK_NO_GPIO_CLK_INIT sys_map_t current_pin_mapping = MXC_UART_GetPinMapping(uart); retval = MXC_UART_Shutdown(uart); @@ -78,35 +79,6 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo return retval; } - switch (clock) { - case MXC_UART_EXT_CLK: - if (uart == MXC_UART3) { - MXC_GPIO_Config(&gpio_cfg_lpextclk); - } else { - MXC_GPIO_Config(&gpio_cfg_hfextclk); - } - break; - - case MXC_UART_ERTCO_CLK: - MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO); - break; - - case MXC_UART_IBRO_CLK: - MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); - break; - - case MXC_UART_ERFO_CLK: - MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERFO); - break; - - case MXC_UART_INRO_CLK: - MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_INRO); - break; - - default: - break; - } - switch (MXC_UART_GET_IDX(uart)) { case 0: if (current_pin_mapping == MAP_A) { @@ -147,7 +119,11 @@ int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clo } #endif // MSDK_NO_GPIO_CLK_INIT - return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, clock); + retval = MXC_UART_SetClockSource(uart, clock); + if (retval) + return retval; + + return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, MXC_UART_GetClockSource(uart)); } int MXC_UART_Shutdown(mxc_uart_regs_t *uart) @@ -185,80 +161,63 @@ int MXC_UART_ReadyForSleep(mxc_uart_regs_t *uart) int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { - int freq; - int mod = 0; - int clkdiv = 0; - int div = 8; + int freq = 0; + uint32_t clock_freq = 0; + uint8_t aon_clk_div = 0; if (MXC_UART_GET_IDX(uart) < 0) { return E_BAD_PARAM; } - // check if the uart is LPUART - if (uart == MXC_UART3) { - // OSR default value - uart->osr = 5; - - switch (clock) { - case MXC_UART_APB_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_PERIPHERAL_CLOCK; - div = (1 << (MXC_GCR->pclkdiv & MXC_F_GCR_PCLKDIV_AON_CLKDIV)) * 8; - clkdiv = (SystemCoreClock / div) / baud; - mod = (SystemCoreClock / div) % baud; - break; - - case MXC_UART_EXT_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_EXTERNAL_CLOCK; - uart->ctrl |= MXC_F_UART_CTRL_FDM; - clkdiv = ((EXTCLK2_FREQ * 2) / baud); - mod = ((EXTCLK2_FREQ * 2) % baud); - break; - - case MXC_UART_ERTCO_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_CLK2; - uart->ctrl |= MXC_F_UART_CTRL_FDM; - if (baud == 9600) { - clkdiv = 7; - mod = 0; - } else { - clkdiv = ((ERTCO_FREQ * 2) / baud); - mod = ((ERTCO_FREQ * 2) % baud); - } - - if (baud > 2400) { - uart->osr = 0; - } else { - uart->osr = 1; - } - break; + // OSR default value + uart->osr = 5; - case MXC_UART_INRO_CLK: - uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_CLK3; - uart->ctrl |= MXC_F_UART_CTRL_FDM; - clkdiv = ((INRO_FREQ * 2) / baud); - mod = ((INRO_FREQ * 2) % baud); - - if (baud > 2400) { - uart->osr = 0; - } else { - uart->osr = 1; - } - break; + switch (clock) { + case MXC_UART_APB_CLK: + clock_freq = PeripheralClock; + break; + case MXC_UART_EXT_CLK: + uart->ctrl |= MXC_F_UART_CTRL_FDM; + clock_freq = EXTCLK_FREQ; + break; + case MXC_UART_IBRO_CLK: + clock_freq = IBRO_FREQ; + break; + case MXC_UART_INRO_CLK: + uart->ctrl |= MXC_F_UART_CTRL_FDM; + clock_freq = INRO_FREQ; - default: - return E_BAD_PARAM; + if (baud > 2400) { + uart->osr = 0; + } else { + uart->osr = 1; } + break; + case MXC_UART_ERTCO_CLK: + uart->ctrl |= MXC_F_UART_CTRL_FDM; + clock_freq = ERTCO_FREQ; - if (!clkdiv || mod > (baud / 2)) { - clkdiv++; + if (baud > 2400) { + uart->osr = 0; + } else { + uart->osr = 1; } - uart->clkdiv = clkdiv; + break; + case MXC_UART_AOD_CLK: + aon_clk_div = (MXC_GCR->pclkdiv & MXC_F_GCR_PCLKDIV_AON_CLKDIV) >> + MXC_F_GCR_PCLKDIV_AON_CLKDIV_POS; + clock_freq = PeripheralClock / (4 * (pow(2, aon_clk_div))); + break; + default: + return E_BAD_PARAM; + } - freq = MXC_UART_GetFrequency(uart); - } else { - freq = MXC_UART_RevB_SetFrequency((mxc_uart_revb_regs_t *)uart, baud, clock); + if (uart->ctrl & MXC_F_UART_CTRL_FDM) { + clock_freq *= 2; // x2 to account for FDM } + freq = MXC_UART_RevB_SetFrequency((mxc_uart_revb_regs_t *)uart, clock_freq, baud); + if (freq > 0) { // Enable baud clock and wait for it to become ready. uart->ctrl |= MXC_F_UART_CTRL_BCLKEN; @@ -364,7 +323,113 @@ int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rt int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock) { - return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, clock); + int retval = E_NO_ERROR; + uint8_t clock_option = 0; + + switch (MXC_UART_GET_IDX(uart)) { + case 0: + case 1: + case 2: + // UART0-2 support PCLK and IBRO + switch (clock) { + case MXC_UART_APB_CLK: + clock_option = 0; + break; + + case MXC_UART_EXT_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_GPIO_Config(&gpio_cfg_hfextclk); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 1; + break; + + case MXC_UART_IBRO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 2; + break; + + default: + return E_BAD_PARAM; + } + break; + + case 3: + // UART3 (LPUART0) supports IBRO and ERTCO + switch (clock) { + case MXC_UART_AOD_CLK: + clock_option = 0; + break; + + case MXC_UART_EXT_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_GPIO_Config(&gpio_cfg_lpextclk); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 1; + break; + + case MXC_UART_INRO_CLK: + clock_option = 2; + break; + + case MXC_UART_ERTCO_CLK: +#ifndef MSDK_NO_GPIO_CLK_INIT + retval = MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO); +#endif // MSDK_NO_GPIO_CLK_INIT + clock_option = 3; + break; + + default: + return E_BAD_PARAM; + } + break; + + default: + return E_BAD_PARAM; + } + + if (retval) + return retval; + + return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, clock_option); +} + +mxc_uart_clock_t MXC_UART_GetClockSource(mxc_uart_regs_t *uart) +{ + unsigned int clock_option = MXC_UART_RevB_GetClockSource((mxc_uart_revb_regs_t *)uart); + switch (MXC_UART_GET_IDX(uart)) { + case 0: + case 1: + case 2: + switch (clock_option) { + case 0: + return MXC_UART_APB_CLK; + case 1: + return MXC_UART_EXT_CLK; + case 2: + return MXC_UART_IBRO_CLK; + default: + return E_BAD_STATE; + } + break; + case 3: + switch (clock_option) { + case 0: + return MXC_UART_AOD_CLK; + case 1: + return MXC_UART_EXT_CLK; + case 2: + return MXC_UART_INRO_CLK; + case 3: + return MXC_UART_ERTCO_CLK; + default: + return E_BAD_STATE; + } + break; + default: + return E_BAD_PARAM; + } } int MXC_UART_GetActive(mxc_uart_regs_t *uart) diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me30.c b/Libraries/PeriphDrivers/Source/UART/uart_me30.c index 93725f415bc..9963fa84792 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me30.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me30.c @@ -103,6 +103,7 @@ int MXC_UART_ReadyForSleep(mxc_uart_regs_t *uart) int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock) { int freq; + uint32_t clock_freq = 0; if (MXC_UART_GET_IDX(uart) < 0) { return E_BAD_PARAM; @@ -112,7 +113,25 @@ int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clo return E_BAD_PARAM; } - freq = MXC_UART_RevB_SetFrequency((mxc_uart_revb_regs_t *)uart, baud, clock); + // Default OSR + uart->osr = 5; + + switch (clock) { + case MXC_UART_APB_CLK: + clock_freq = PeripheralClock; + break; + case MXC_UART_IBRO_CLK: + clock_freq = IBRO_FREQ; + break; + case MXC_UART_ERTCO_CLK: + clock_freq = ERTCO_FREQ; + break; + default: + return E_BAD_PARAM; + } + + // TODO(JC): Update this call for ME30 + freq = MXC_UART_RevB_SetFrequency((mxc_uart_revb_regs_t *)uart, clock_freq, baud); if (freq > 0) { // Enable baud clock and wait for it to become ready. diff --git a/Libraries/PeriphDrivers/Source/UART/uart_me55.c b/Libraries/PeriphDrivers/Source/UART/uart_me55.c index d04def93cf1..4662b16a096 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_me55.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_me55.c @@ -127,6 +127,9 @@ int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clo return E_BAD_PARAM; } + // Default OSR + uart->osr = 5; + switch (clock) { case MXC_UART_APB_CLK: clock_freq = SystemCoreClock / 2; diff --git a/Libraries/PeriphDrivers/Source/UART/uart_revb.c b/Libraries/PeriphDrivers/Source/UART/uart_revb.c index b4dcd699afb..83e99ad0813 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_revb.c +++ b/Libraries/PeriphDrivers/Source/UART/uart_revb.c @@ -38,6 +38,25 @@ #define MXC_UART_REVB_ERRINT_FL \ (MXC_F_UART_REVB_INT_FL_RX_FERR | MXC_F_UART_REVB_INT_FL_RX_PAR | MXC_F_UART_REVB_INT_FL_RX_OV) +#if CONFIG_TRUSTED_EXECUTION_SECURE +#ifndef MXC_DMA0 +// TrustZone support to keep up with naming convention. +// For ME30, non-secure DMA (DMA0) is accessible from Secure code using non-secure mapping. +// Undecorated MXC_DMA0 definition for secure code is not defined as the undecorated +// definitions corresponds with the security attribution of an address. +// Because there is no secure mapping for DMA0, following ARM naming convention, it's +// recommend that secure code use the definition with '_NS' suffix (MXC_DMA0_NS). +// Placing this here to limit scope of this definition to this file. +#define MXC_DMA0 MXC_DMA0_NS +#endif +#else +#ifndef MXC_DMA1 +// Non-Secure world can not access Secure DMA (DMA1). +// Placing this here to limit scope of this definition to this file. +#define MXC_DMA1 NULL +#endif +#endif // CONFIG_TRUSTED_EXECUTION_SECURE + /* **** Variable Declaration **** */ static void *AsyncTxRequests[MXC_UART_INSTANCES]; static void *AsyncRxRequests[MXC_UART_INSTANCES]; @@ -291,19 +310,20 @@ int MXC_UART_RevB_SetClockSource(mxc_uart_revb_regs_t *uart, uint8_t clock_optio return E_NO_ERROR; // Return with no error so Init doesn't error out if clock config is locked } - bool is_bclk_enabled = (uart->ctrl & MXC_F_UART_CTRL_BCLKEN) != 0; + bool is_bclk_enabled = (uart->ctrl & MXC_F_UART_REVB_CTRL_BCLKEN) != 0; if (is_bclk_enabled) { // Shut down baud rate clock before changing clock source - uart->ctrl &= ~MXC_F_UART_CTRL_BCLKEN; + uart->ctrl &= ~MXC_F_UART_REVB_CTRL_BCLKEN; } - MXC_SETFIELD(uart->ctrl, MXC_F_UART_CTRL_BCLKSRC, clock_option << MXC_F_UART_CTRL_BCLKSRC_POS); + MXC_SETFIELD(uart->ctrl, MXC_F_UART_REVB_CTRL_BCLKSRC, + clock_option << MXC_F_UART_REVB_CTRL_BCLKSRC_POS); if (is_bclk_enabled) { // Turn the baud rate clock back on - uart->ctrl |= MXC_F_UART_CTRL_BCLKEN; - while (!(uart->ctrl & MXC_F_UART_CTRL_BCLKRDY)) { + uart->ctrl |= MXC_F_UART_REVB_CTRL_BCLKEN; + while (!(uart->ctrl & MXC_F_UART_REVB_CTRL_BCLKRDY)) { continue; } } @@ -313,7 +333,7 @@ int MXC_UART_RevB_SetClockSource(mxc_uart_revb_regs_t *uart, uint8_t clock_optio unsigned int MXC_UART_RevB_GetClockSource(mxc_uart_revb_regs_t *uart) { - return ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) >> MXC_F_UART_CTRL_BCLKSRC_POS); + return ((uart->ctrl & MXC_F_UART_REVB_CTRL_BCLKSRC) >> MXC_F_UART_REVB_CTRL_BCLKSRC_POS); } void MXC_UART_RevB_LockClockSource(mxc_uart_revb_regs_t *uart, bool lock) @@ -868,10 +888,12 @@ void MXC_UART_RevA_DMA0_Handler(void) MXC_DMA_Handler(MXC_DMA0); } +#if CONFIG_TRUSTED_EXECUTION_SECURE void MXC_UART_RevA_DMA1_Handler(void) { MXC_DMA_Handler(MXC_DMA1); } +#endif #endif @@ -880,6 +902,7 @@ DMA instance. */ void MXC_UART_RevB_DMA_SetupAutoHandlers(mxc_dma_regs_t *dma_instance, unsigned int channel) { +// Add RISCV support here for future parts with more than one DMA instance. #ifdef __arm__ #if (TARGET_NUM == 32657) NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(dma_instance, channel)); @@ -890,8 +913,11 @@ void MXC_UART_RevB_DMA_SetupAutoHandlers(mxc_dma_regs_t *dma_instance, unsigned option. We could handle multiple DMA instances better in the DMA API (See the mismatch between the size of "dma_resource" array and the number of channels per instance, to start)*/ if (dma_instance == MXC_DMA0) { MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(dma_instance, channel), MXC_UART_RevA_DMA0_Handler); +#if CONFIG_TRUSTED_EXECUTION_SECURE + // Only secure code has access to Secure DMA (DMA1). } else if (dma_instance == MXC_DMA1) { MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(dma_instance, channel), MXC_UART_RevA_DMA1_Handler); +#endif // CONFIG_TRUSTED_EXECUTION_SECURE } #else NVIC_EnableIRQ(MXC_DMA_CH_GET_IRQ(channel)); @@ -899,10 +925,6 @@ void MXC_UART_RevB_DMA_SetupAutoHandlers(mxc_dma_regs_t *dma_instance, unsigned // Only one DMA instance, we can point direct to MXC_DMA_Handler MXC_NVIC_SetVector(MXC_DMA_CH_GET_IRQ(channel), MXC_DMA_Handler); #endif // MXC_DMA_INSTANCES > 1 - -#else - // TODO(JC): RISC-V - #endif // __arm__ } diff --git a/Libraries/PeriphDrivers/Source/UART/uart_revb_me30.svd b/Libraries/PeriphDrivers/Source/UART/uart_revb_me30.svd index d69d9ca2026..d88279c54ac 100644 --- a/Libraries/PeriphDrivers/Source/UART/uart_revb_me30.svd +++ b/Libraries/PeriphDrivers/Source/UART/uart_revb_me30.svd @@ -116,25 +116,15 @@ 2 - Peripheral_Clock - apb clock + PERIPHERAL_CLOCK + APB Clock. 0 - External_Clock - Clock 1 + CLK1 + IBRO clock. 1 - - CLK2 - Clock 2 - 2 - - - CLK3 - Clock 3 - 3 - diff --git a/Libraries/PeriphDrivers/max32657_files.mk b/Libraries/PeriphDrivers/max32657_files.mk index da49e3143ce..4b198a60a7f 100644 --- a/Libraries/PeriphDrivers/max32657_files.mk +++ b/Libraries/PeriphDrivers/max32657_files.mk @@ -43,7 +43,6 @@ INCLUDE_DIR := $(PERIPH_DIR)/Include PERIPH_DRIVER_INCLUDE_DIR += $(INCLUDE_DIR)/$(TARGET_UC)/ -# TODO(ME30): Update this list with the correct files # Source files PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/SYS/mxc_assert.c PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/SYS/mxc_delay.c @@ -79,12 +78,12 @@ PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/I3C/i3c_me30.c PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/I3C/i3c_reva.c PERIPH_DRIVER_INCLUDE_DIR += $(SOURCE_DIR)/ICC +PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/ICC/icc_common.c PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/ICC/icc_me30.c PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/ICC/icc_reva.c -# TODO(ME30): Add LP drivers back in when register files are provided -# PERIPH_DRIVER_INCLUDE_DIR += $(SOURCE_DIR)/LP -# PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/LP/lp_me30.c +PERIPH_DRIVER_INCLUDE_DIR += $(SOURCE_DIR)/LP +PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/LP/lp_me30.c PERIPH_DRIVER_INCLUDE_DIR += $(SOURCE_DIR)/RTC PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/RTC/rtc_me30.c @@ -103,6 +102,15 @@ PERIPH_DRIVER_INCLUDE_DIR += $(SOURCE_DIR)/TRNG PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/TRNG/trng_me30.c PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/TRNG/trng_revb.c +PERIPH_DRIVER_INCLUDE_DIR += $(SOURCE_DIR)/TZ +ifeq "$(MSECURITY_MODE)" "SECURE" +PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/TZ/mpc_me30.c +PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/TZ/spc_me30.c +endif +# NSPC is technically accessible from secure world, but there's no reason +# to use the NSPC when the SPC is available for secure world. +PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/TZ/nspc_me30.c + PERIPH_DRIVER_INCLUDE_DIR += $(SOURCE_DIR)/UART PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/UART/uart_common.c PERIPH_DRIVER_C_FILES += $(SOURCE_DIR)/UART/uart_me30.c diff --git a/Libraries/PeriphDrivers/periphdriver.mk b/Libraries/PeriphDrivers/periphdriver.mk index 5958038f131..6e873ef2c89 100644 --- a/Libraries/PeriphDrivers/periphdriver.mk +++ b/Libraries/PeriphDrivers/periphdriver.mk @@ -103,3 +103,6 @@ ${PERIPH_DRIVER_BUILD_DIR}/${PERIPH_DRIVER_LIB}: ${PERIPH_DRIVER_C_FILES} ${PERI clean.periph: @$(MAKE) -f ${PERIPH_DRIVER_DIR}/libPeriphDriver.mk BUILD_DIR=${PERIPH_DRIVER_BUILD_DIR} PERIPH_DRIVER_LIB_FILENAME=$(PERIPH_DRIVER_LIB_FILENAME) clean + +query.periphdrivers: + @$(MAKE) -f ${PERIPH_DRIVER_DIR}/libPeriphDriver.mk query QUERY_VAR="${QUERY_VAR}" \ No newline at end of file diff --git a/Libraries/SDHC/sdhc.mk b/Libraries/SDHC/sdhc.mk index e13cc27b6fd..d3450a98393 100644 --- a/Libraries/SDHC/sdhc.mk +++ b/Libraries/SDHC/sdhc.mk @@ -65,3 +65,6 @@ ${SDHC_DRIVER_BUILD_DIR}/sdhc.a: $(PROJECTMK) distclean: $(MAKE) -C ${SDHC_DRIVER_DIR} clean + +query.sdhc: + @${MAKE} -C ${SDHC_DRIVER_DIR} query QUERY_VAR="${QUERY_VAR}" diff --git a/Libraries/libs.mk b/Libraries/libs.mk index 38327e36b46..aa29d793d65 100644 --- a/Libraries/libs.mk +++ b/Libraries/libs.mk @@ -43,6 +43,7 @@ LIB_PERIPHDRIVERS ?= 1 ifeq ($(LIB_PERIPHDRIVERS), 1) PERIPH_DRIVER_DIR := $(LIBS_DIR)/PeriphDrivers include $(PERIPH_DRIVER_DIR)/periphdriver.mk +query: query.periphdrivers endif # ************************ @@ -107,7 +108,6 @@ endif #************************************************************************** endif - #********************************************************************* @@ -117,6 +117,8 @@ else PROJ_CFLAGS += -DAPP_CODED_PHY_DEMO=0 endif +query: query.cordio + endif # ************************ @@ -126,6 +128,7 @@ LIB_FCL ?= 0 ifeq ($(LIB_FCL), 1) FCL_DIR ?= $(LIBS_DIR)/FCL include $(FCL_DIR)/fcl.mk +query: query.fcl endif # ************************ @@ -143,6 +146,7 @@ SRCS += FreeRTOS_CLI.c # Include the FreeRTOS library include $(LIBS_DIR)/FreeRTOS/freertos.mk +query: query.freertos endif # ************************ @@ -180,6 +184,7 @@ LIB_LWIP ?= 0 ifeq ($(LIB_LWIP), 1) LWIP_DIR ?= $(LIBS_DIR)/lwIP include $(LWIP_DIR)/lwip.mk +query: query.lwip endif # ************************ @@ -189,6 +194,7 @@ LIB_MAXUSB ?= 0 ifeq ($(LIB_MAXUSB), 1) MAXUSB_DIR ?= $(LIBS_DIR)/MAXUSB include $(MAXUSB_DIR)/maxusb.mk +query: query.maxusb endif # ************************ diff --git a/Libraries/lwIP/lwip.mk b/Libraries/lwIP/lwip.mk index 9bbb997f05b..a74ef078fbe 100644 --- a/Libraries/lwIP/lwip.mk +++ b/Libraries/lwIP/lwip.mk @@ -62,4 +62,7 @@ ${LWIP_BUILD_DIR}/${LWIP_LIBRARY_NAME}.a: ${LWIP_C_FILES} ${LWIP_H_FILES} $(MAKE) -f ${LWIP_DIR}/Makefile lib BUILD_DIR=${LWIP_BUILD_DIR} PROJECT=${LWIP_LIBRARY_NAME} clean.lwip: - @rm -rf ${LWIP_BUILD_DIR}/* \ No newline at end of file + @rm -rf ${LWIP_BUILD_DIR}/* + +query.lwip: + @${MAKE} -f ${LWIP_DIR}/Makefile query QUERY_VAR="${QUERY_VAR}" \ No newline at end of file diff --git a/Libraries/zephyr/MAX/CMakeLists.txt b/Libraries/zephyr/MAX/CMakeLists.txt index 69499e2acd4..717feffc148 100644 --- a/Libraries/zephyr/MAX/CMakeLists.txt +++ b/Libraries/zephyr/MAX/CMakeLists.txt @@ -40,6 +40,7 @@ set(MSDK_PERIPH_INC_DIR ${MSDK_PERIPH_DIR}/Include/${TARGET_UC}) zephyr_include_directories( ./Include + ./Source/${TARGET_UC} ${MSDK_LIBRARY_DIR}/CMSIS/Include ${MSDK_CMSIS_DIR}/Include ${MSDK_PERIPH_INC_DIR} diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_adc.h b/Libraries/zephyr/MAX/Include/wrap_max32_adc.h index aa1a4140f7c..acd90ab080c 100644 --- a/Libraries/zephyr/MAX/Include/wrap_max32_adc.h +++ b/Libraries/zephyr/MAX/Include/wrap_max32_adc.h @@ -153,7 +153,8 @@ static inline void Wrap_MXC_ADC_GetData(uint16_t **outdata) /* * MAX32690, related mapping */ -#elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32672) || (CONFIG_SOC_MAX32662) +#elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32672) || (CONFIG_SOC_MAX32662) || \ + (CONFIG_SOC_MAX78002) #define WRAP_MXC_F_ADC_CONV_DONE_IE MXC_F_ADC_INTEN_SEQ_DONE #define WRAP_MXC_F_ADC_CONV_DONE_IF MXC_F_ADC_INTFL_SEQ_DONE diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_i2c.h b/Libraries/zephyr/MAX/Include/wrap_max32_i2c.h index 4437a6f43a5..b3a23108489 100644 --- a/Libraries/zephyr/MAX/Include/wrap_max32_i2c.h +++ b/Libraries/zephyr/MAX/Include/wrap_max32_i2c.h @@ -130,7 +130,7 @@ static inline void Wrap_MXC_I2C_Stop(mxc_i2c_regs_t *i2c) */ #elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32670) || \ (CONFIG_SOC_MAX32672) || (CONFIG_SOC_MAX32662) || (CONFIG_SOC_MAX32675) || \ - (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) + (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) || (CONFIG_SOC_MAX78002) /* * Control register bits */ diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_lp.h b/Libraries/zephyr/MAX/Include/wrap_max32_lp.h index e68c3fc396b..2f3281f31eb 100644 --- a/Libraries/zephyr/MAX/Include/wrap_max32_lp.h +++ b/Libraries/zephyr/MAX/Include/wrap_max32_lp.h @@ -56,7 +56,7 @@ static inline void Wrap_MXC_LP_EnterPowerDownMode(void) * MAX32690, MAX32655 related mapping */ #elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32680) || \ - (CONFIG_SOC_MAX32657) + (CONFIG_SOC_MAX32657) || (CONFIG_SOC_MAX78002) static inline void Wrap_MXC_LP_EnterLowPowerMode(void) { diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_owm.h b/Libraries/zephyr/MAX/Include/wrap_max32_owm.h index e462abb4e3a..21d5528e443 100644 --- a/Libraries/zephyr/MAX/Include/wrap_max32_owm.h +++ b/Libraries/zephyr/MAX/Include/wrap_max32_owm.h @@ -40,7 +40,8 @@ static inline int Wrap_MXC_OWM_Init(const mxc_owm_cfg_t *cfg) /* * MAX32690, MAX32655 related mapping */ -#elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32680) +#elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32680) || \ + (CONFIG_SOC_MAX78002) static inline int Wrap_MXC_OWM_Init(const mxc_owm_cfg_t *cfg) { diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_sdhc.h b/Libraries/zephyr/MAX/Include/wrap_max32_sdhc.h new file mode 100644 index 00000000000..55f06571c66 --- /dev/null +++ b/Libraries/zephyr/MAX/Include/wrap_max32_sdhc.h @@ -0,0 +1,34 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef LIBRARIES_ZEPHYR_MAX_INCLUDE_WRAP_MAX32_SDHC_H_ +#define LIBRARIES_ZEPHYR_MAX_INCLUDE_WRAP_MAX32_SDHC_H_ + +/***** Includes *****/ +#include +#include "sdhc_reva.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} +#endif + +#endif // LIBRARIES_ZEPHYR_MAX_INCLUDE_WRAP_MAX32_SDHC_H_ diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_spi.h b/Libraries/zephyr/MAX/Include/wrap_max32_spi.h index 42694d25b33..bf2acbc9d11 100644 --- a/Libraries/zephyr/MAX/Include/wrap_max32_spi.h +++ b/Libraries/zephyr/MAX/Include/wrap_max32_spi.h @@ -75,7 +75,7 @@ static inline int Wrap_MXC_SPI_Init(mxc_spi_regs_t *spi, int masterMode, int qua */ #elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32670) || \ (CONFIG_SOC_MAX32672) || (CONFIG_SOC_MAX32662) || (CONFIG_SOC_MAX32675) || \ - (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) + (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) || (CONFIG_SOC_MAX78002) #if defined(CONFIG_SOC_MAX32657) #define ADI_MAX32_SPI_CTRL_MASTER_MODE MXC_F_SPI_CTRL0_CONT_MODE #else diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_sys.h b/Libraries/zephyr/MAX/Include/wrap_max32_sys.h index 289c16b91e8..a1d3d14b9cd 100644 --- a/Libraries/zephyr/MAX/Include/wrap_max32_sys.h +++ b/Libraries/zephyr/MAX/Include/wrap_max32_sys.h @@ -56,10 +56,15 @@ static inline void Wrap_MXC_SYS_SetClockDiv(int div) */ #elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32670) || \ (CONFIG_SOC_MAX32672) || (CONFIG_SOC_MAX32662) || (CONFIG_SOC_MAX32675) || \ - (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) + (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) || (CONFIG_SOC_MAX78002) #define ADI_MAX32_CLK_IPO MXC_SYS_CLOCK_IPO +#if defined(CONFIG_SOC_MAX78002) +#define ADI_MAX32_CLK_IPLL MXC_SYS_CLOCK_IPLL +#define ADI_MAX32_CLK_EBO MXC_SYS_CLOCK_EBO +#else #define ADI_MAX32_CLK_ERFO MXC_SYS_CLOCK_ERFO +#endif #define ADI_MAX32_CLK_IBRO MXC_SYS_CLOCK_IBRO #define ADI_MAX32_CLK_INRO MXC_SYS_CLOCK_INRO #define ADI_MAX32_CLK_ERTCO MXC_SYS_CLOCK_ERTCO diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_tmr.h b/Libraries/zephyr/MAX/Include/wrap_max32_tmr.h index 07163d1f522..f3706dae731 100644 --- a/Libraries/zephyr/MAX/Include/wrap_max32_tmr.h +++ b/Libraries/zephyr/MAX/Include/wrap_max32_tmr.h @@ -103,7 +103,7 @@ int Wrap_MXC_TMR_GetPendingInt(mxc_tmr_regs_t *tmr) */ #elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32670) || \ (CONFIG_SOC_MAX32672) || (CONFIG_SOC_MAX32662) || (CONFIG_SOC_MAX32675) || \ - (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) + (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) || (CONFIG_SOC_MAX78002) #if defined(CONFIG_SOC_MAX32672) || (CONFIG_SOC_MAX32675) || (CONFIG_SOC_MAX32657) /* All timers are 32bits */ @@ -142,13 +142,16 @@ static inline int Wrap_MXC_TMR_GetClockIndex(int z_clock) return MXC_TMR_EXT_CLK; case 2: // ADI_MAX32_PRPH_CLK_SRC_IBRO return MXC_TMR_8M_CLK; +#if !defined(CONFIG_SOC_MAX78002) case 3: //ADI_MAX32_PRPH_CLK_SRC_ERFO return MXC_TMR_32M_CLK; +#endif case 4: //ADI_MAX32_PRPH_CLK_SRC_ERTCO return MXC_TMR_32K_CLK; case 5: //ADI_MAX32_PRPH_CLK_SRC_INRO return MXC_TMR_INRO_CLK; -#if defined(CONFIG_SOC_MAX32690) +#if defined(CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32690) || \ + (CONFIG_SOC_MAX78002) case 6: //ADI_MAX32_PRPH_CLK_SRC_ISO return MXC_TMR_ISO_CLK; #endif diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_trng.h b/Libraries/zephyr/MAX/Include/wrap_max32_trng.h index 84fdc24fbc8..b9f3a72e3ac 100644 --- a/Libraries/zephyr/MAX/Include/wrap_max32_trng.h +++ b/Libraries/zephyr/MAX/Include/wrap_max32_trng.h @@ -46,7 +46,7 @@ static inline int Wrap_MXC_TRNG_RandomInt_NonBlocking(uint32_t *data) */ #elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32670) || \ (CONFIG_SOC_MAX32672) || (CONFIG_SOC_MAX32662) || (CONFIG_SOC_MAX32675) || \ - (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) + (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) || (CONFIG_SOC_MAX78002) static inline int Wrap_MXC_TRNG_RandomInt_NonBlocking(uint32_t *data) { diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_uart.h b/Libraries/zephyr/MAX/Include/wrap_max32_uart.h index 8991a03be9b..713ec47a166 100644 --- a/Libraries/zephyr/MAX/Include/wrap_max32_uart.h +++ b/Libraries/zephyr/MAX/Include/wrap_max32_uart.h @@ -119,7 +119,7 @@ static inline void Wrap_MXC_UART_DisableRxDMA(mxc_uart_regs_t *uart) */ #elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32670) || \ (CONFIG_SOC_MAX32672) || (CONFIG_SOC_MAX32662) || (CONFIG_SOC_MAX32675) || \ - (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) + (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) || (CONFIG_SOC_MAX78002) // status flags #define ADI_MAX32_UART_RX_EMPTY MXC_F_UART_STATUS_RX_EM #define ADI_MAX32_UART_TX_EMPTY MXC_F_UART_STATUS_TX_EM diff --git a/Libraries/zephyr/MAX/Include/wrap_max32_wdt.h b/Libraries/zephyr/MAX/Include/wrap_max32_wdt.h index 6fc4dca6813..07823afffac 100644 --- a/Libraries/zephyr/MAX/Include/wrap_max32_wdt.h +++ b/Libraries/zephyr/MAX/Include/wrap_max32_wdt.h @@ -85,7 +85,7 @@ static inline int Wrap_MXC_WDT_SelectClockSource(mxc_wdt_regs_t *wdt, uint32_t c */ #elif defined(CONFIG_SOC_MAX32690) || (CONFIG_SOC_MAX32655) || (CONFIG_SOC_MAX32670) || \ (CONFIG_SOC_MAX32672) || (CONFIG_SOC_MAX32662) || (CONFIG_SOC_MAX32675) || \ - (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) + (CONFIG_SOC_MAX32680) || (CONFIG_SOC_MAX32657) || (CONFIG_SOC_MAX78002) #define WRAP_MXC_F_WDT_CTRL_EN MXC_F_WDT_CTRL_EN diff --git a/Libraries/zephyr/MAX/Source/MAX32657/CMakeLists.txt b/Libraries/zephyr/MAX/Source/MAX32657/CMakeLists.txt index 9077c239633..b05b325a44d 100644 --- a/Libraries/zephyr/MAX/Source/MAX32657/CMakeLists.txt +++ b/Libraries/zephyr/MAX/Source/MAX32657/CMakeLists.txt @@ -39,7 +39,7 @@ zephyr_include_directories( ${MSDK_PERIPH_SRC_DIR}/DMA ${MSDK_PERIPH_SRC_DIR}/FLC ${MSDK_PERIPH_SRC_DIR}/GPIO - ${MSDK_PERIPH_SRC_DIR}/I2C + ${MSDK_PERIPH_SRC_DIR}/I3C ${MSDK_PERIPH_SRC_DIR}/ICC ${MSDK_PERIPH_SRC_DIR}/LP ${MSDK_PERIPH_SRC_DIR}/RTC @@ -97,10 +97,10 @@ zephyr_library_sources( ) endif() -if (CONFIG_I2C_MAX32) +if (CONFIG_I3C_MAX32) zephyr_library_sources( - ${MSDK_PERIPH_SRC_DIR}/I2C/i2c_me30.c - ${MSDK_PERIPH_SRC_DIR}/I2C/i2c_reva.c + ${MSDK_PERIPH_SRC_DIR}/I3C/i3c_me30.c + ${MSDK_PERIPH_SRC_DIR}/I3C/i3c_reva.c ) endif() diff --git a/Libraries/zephyr/MAX/Source/MAX32657/partition_max32657.h b/Libraries/zephyr/MAX/Source/MAX32657/partition_max32657.h new file mode 100644 index 00000000000..1f55ac969c5 --- /dev/null +++ b/Libraries/zephyr/MAX/Source/MAX32657/partition_max32657.h @@ -0,0 +1,27 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#ifndef LIBRARIES_ZEPHYR_MAX_SOURCE_MAX32657_PARTITION_MAX32657_H_ +#define LIBRARIES_ZEPHYR_MAX_SOURCE_MAX32657_PARTITION_MAX32657_H_ + +void TZ_SAU_Setup(void) +{ + /* Added empty function to use MSDK file as it is */ +} + +#endif // LIBRARIES_ZEPHYR_MAX_SOURCE_MAX32657_PARTITION_MAX32657_H_ diff --git a/Libraries/zephyr/MAX/Source/MAX78002/CMakeLists.txt b/Libraries/zephyr/MAX/Source/MAX78002/CMakeLists.txt new file mode 100644 index 00000000000..11839a856fd --- /dev/null +++ b/Libraries/zephyr/MAX/Source/MAX78002/CMakeLists.txt @@ -0,0 +1,183 @@ +############################################################################## +# +# Copyright (C) 2024 Analog Devices, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +############################################################################## + + +if(NOT TARGET_REV) + # Default version A1, not actively use in driver but requires to be defined. + zephyr_compile_definitions(-DTARGET_REV=0x4131) +endif() + +zephyr_include_directories( + ${MSDK_PERIPH_SRC_DIR}/ADC + ${MSDK_PERIPH_SRC_DIR}/AES + ${MSDK_PERIPH_SRC_DIR}/CRC + ${MSDK_PERIPH_SRC_DIR}/DMA + ${MSDK_PERIPH_SRC_DIR}/FLC + ${MSDK_PERIPH_SRC_DIR}/GPIO + ${MSDK_PERIPH_SRC_DIR}/I2C + ${MSDK_PERIPH_SRC_DIR}/I2S + ${MSDK_PERIPH_SRC_DIR}/ICC + ${MSDK_PERIPH_SRC_DIR}/LP + ${MSDK_PERIPH_SRC_DIR}/LPCMP + ${MSDK_PERIPH_SRC_DIR}/OWM + ${MSDK_PERIPH_SRC_DIR}/PT + ${MSDK_PERIPH_SRC_DIR}/RTC + ${MSDK_PERIPH_SRC_DIR}/SPI + ${MSDK_PERIPH_SRC_DIR}/SDHC + ${MSDK_PERIPH_SRC_DIR}/SYS + ${MSDK_PERIPH_SRC_DIR}/TMR + ${MSDK_PERIPH_SRC_DIR}/TRNG + ${MSDK_PERIPH_SRC_DIR}/UART + ${MSDK_PERIPH_SRC_DIR}/WDT + ${MSDK_PERIPH_SRC_DIR}/WUT +) + +if(CONFIG_ARM) + zephyr_library_sources(${MSDK_CMSIS_DIR}/Source/system_max78002.c) + zephyr_library_sources(${MSDK_PERIPH_SRC_DIR}/SYS/mxc_lock.c) +elseif(CONFIG_RISCV) + zephyr_library_sources(${MSDK_CMSIS_DIR}/Source/system_riscv_max78002.c) +endif() + +zephyr_library_sources( + ./max78xxx_system.c + + ${MSDK_PERIPH_SRC_DIR}/ICC/icc_ai87.c + ${MSDK_PERIPH_SRC_DIR}/ICC/icc_reva.c + + ${MSDK_PERIPH_SRC_DIR}/LP/lp_ai87.c + + ${MSDK_PERIPH_SRC_DIR}/LPCMP/lpcmp_ai87.c + ${MSDK_PERIPH_SRC_DIR}/LPCMP/lpcmp_reva.c + + ${MSDK_PERIPH_SRC_DIR}/SYS/mxc_assert.c + ${MSDK_PERIPH_SRC_DIR}/SYS/mxc_delay.c + ${MSDK_PERIPH_SRC_DIR}/SYS/pins_ai87.c + ${MSDK_PERIPH_SRC_DIR}/SYS/sys_ai87.c + + ${MSDK_PERIPH_SRC_DIR}/DMA/dma_ai87.c + ${MSDK_PERIPH_SRC_DIR}/DMA/dma_reva.c + + ${MSDK_PERIPH_SRC_DIR}/PT/pt_ai87.c + ${MSDK_PERIPH_SRC_DIR}/PT/pt_reva.c + + ${MSDK_PERIPH_SRC_DIR}/SDHC/sdhc_ai87.c + ${MSDK_PERIPH_SRC_DIR}/SDHC/sdhc_reva.c + + ${MSDK_PERIPH_SRC_DIR}/WUT/wut_ai87.c + ${MSDK_PERIPH_SRC_DIR}/WUT/wut_reva.c +) + +if (CONFIG_ADC_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/ADC/adc_ai87.c + ${MSDK_PERIPH_SRC_DIR}/ADC/adc_revb.c +) +endif() + +if (CONFIG_UART_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/UART/uart_common.c + ${MSDK_PERIPH_SRC_DIR}/UART/uart_ai87.c + ${MSDK_PERIPH_SRC_DIR}/UART/uart_revb.c +) +endif() + +if (CONFIG_GPIO_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/GPIO/gpio_common.c + ${MSDK_PERIPH_SRC_DIR}/GPIO/gpio_ai87.c + ${MSDK_PERIPH_SRC_DIR}/GPIO/gpio_reva.c +) +endif() + +if (CONFIG_SPI_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/SPI/spi_ai87.c + ${MSDK_PERIPH_SRC_DIR}/SPI/spi_reva1.c +) +endif() + +if (CONFIG_I2C_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/I2C/i2c_ai87.c + ${MSDK_PERIPH_SRC_DIR}/I2C/i2c_reva.c +) +endif() + +if (CONFIG_I2S_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/I2S/i2s_ai87.c + ${MSDK_PERIPH_SRC_DIR}/I2S/i2s_reva.c +) +endif() + +if (CONFIG_WDT_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/WDT/wdt_common.c + ${MSDK_PERIPH_SRC_DIR}/WDT/wdt_ai87.c + ${MSDK_PERIPH_SRC_DIR}/WDT/wdt_revb.c +) +endif() + +if (CONFIG_RTC_MAX32 OR CONFIG_COUNTER_RTC_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/RTC/rtc_ai87.c + ${MSDK_PERIPH_SRC_DIR}/RTC/rtc_reva.c +) +endif() + +if (CONFIG_SOC_FLASH_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/FLC/flc_common.c + ${MSDK_PERIPH_SRC_DIR}/FLC/flc_ai87.c + ${MSDK_PERIPH_SRC_DIR}/FLC/flc_reva.c +) +endif() + +if (CONFIG_PWM_MAX32 OR CONFIG_TIMER_MAX32 OR CONFIG_COUNTER_TIMER_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/TMR/tmr_common.c + ${MSDK_PERIPH_SRC_DIR}/TMR/tmr_ai87.c + ${MSDK_PERIPH_SRC_DIR}/TMR/tmr_revb.c +) +endif() + +if (CONFIG_ENTROPY_MAX32_TRNG) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/TRNG/trng_ai87.c + ${MSDK_PERIPH_SRC_DIR}/TRNG/trng_revb.c +) +endif() + +if (CONFIG_CRYPTO_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/AES/aes_ai87.c + ${MSDK_PERIPH_SRC_DIR}/AES/aes_revb.c + + ${MSDK_PERIPH_SRC_DIR}/CRC/crc_ai87.c + ${MSDK_PERIPH_SRC_DIR}/CRC/crc_reva.c +) +endif() + +if (CONFIG_W1_MAX32) +zephyr_library_sources( + ${MSDK_PERIPH_SRC_DIR}/OWM/owm_ai87.c + ${MSDK_PERIPH_SRC_DIR}/OWM/owm_reva.c +) +endif() diff --git a/Libraries/zephyr/MAX/Source/MAX78002/max78xxx_system.c b/Libraries/zephyr/MAX/Source/MAX78002/max78xxx_system.c new file mode 100644 index 00000000000..ac79d2afce9 --- /dev/null +++ b/Libraries/zephyr/MAX/Source/MAX78002/max78xxx_system.c @@ -0,0 +1,24 @@ +/****************************************************************************** + * + * Copyright (C) 2024 Analog Devices, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + ******************************************************************************/ + +#include "max78002.h" + +/* + * This function is called during boot up. + */ +void max32xx_system_init(void) {} diff --git a/Tools/Scripts/fetch_specific_part.py b/Tools/Scripts/fetch_specific_part.py new file mode 100644 index 00000000000..aa7ea764852 --- /dev/null +++ b/Tools/Scripts/fetch_specific_part.py @@ -0,0 +1,237 @@ +############################################################################### + # + # Copyright (C) 2024 Analog Devices, Inc. + # + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. + # + ############################################################################## + +import sys +import os +import subprocess +import shutil +import argparse +import logging +from pathlib import Path + +chip_name_dict = { + "max32520": "es17", + "max32650": "me10", + "max32655": "me17", + "max32657": "me30", + "max32660": "me11", + "max32662": "me12", + "max32665": "me14", + "max32670": "me15", + "max32672": "me21", + "max32675": "me16", + "max32680": "me20", + "max32690": "me18", + "max78000": "ai85", + "max78002": "ai87" +} + +die_name_dict = { die_name: chip_name for chip_name, die_name in chip_name_dict.items() } + +# Instantiate the argument parser. +parser = argparse.ArgumentParser(description='Fetch all files related to a specific part from MSDK.') + +# Add required arguments. +parser.add_argument('part_name', type=str, help='The name of the MCU to fetch (capital-insensitive). Both chip names (MAX32690) and die names (AI85) are valid part names.') +parser.add_argument('msdk_path', type=str, help='The path to msdk location (MAXIM_PATH equivalent).') +parser.add_argument('destination', type=str, help='The destination directory to store all related files.') + +# Parse incoming arguments. +args = parser.parse_args() + +# Get chip and die name +part_name = args.part_name.lower() +if part_name in chip_name_dict.keys(): + chip_name = part_name + die_name = chip_name_dict[part_name] +elif part_name in die_name_dict.keys(): + chip_name = die_name_dict[part_name] + die_name = part_name +else: + print("Invalid part name. Please enter proper chip or die name.") + sys.exit(1) + + +msdk_path = args.msdk_path +destination = args.destination + +print("MSDK Path: " + msdk_path) +print("Destination: " + destination) + +def delete_lines(filename, start_line, end_line): + with open(filename, "r") as f: + lines = f.readlines() + + with open(filename, "w") as f: + for i, line in enumerate(lines, start=1): + if i < start_line or i > end_line: + f.write(line) + + + +######################################################################################### + +# Create directory if it doesn't exist: +if not os.path.isdir(destination): + os.makedirs(destination, exist_ok=True) + +# Copy examples over +examples_src = os.path.join(msdk_path, "Examples/" + chip_name.upper()) +examples_dst = os.path.join(destination, "Examples/" + chip_name.upper()) + +shutil.copytree(examples_src, examples_dst, dirs_exist_ok=True) + +# Copy Boards over +boards_src = os.path.join(msdk_path, "Libraries/Boards/" + chip_name.upper() + "/") +boards_dst = os.path.join(destination, "Libraries/Boards/" + chip_name.upper() + "/") + +shutil.copytree(boards_src, boards_dst, dirs_exist_ok=True) + +# Copy MiscDrivers +miscdrivers_src = os.path.join(msdk_path, "Libraries/MiscDrivers/") +miscdrivers_dst = os.path.join(destination, "Libraries/MiscDrivers/") + +shutil.copytree(miscdrivers_src, miscdrivers_dst, dirs_exist_ok=True) + +# Copy CMSIS +cmsis_device_gcc_src = os.path.join(msdk_path, "Libraries/CMSIS/Device/Maxim/GCC/gcc.mk") +cmsis_device_gcc_dst = os.path.join(destination, "Libraries/CMSIS/Device/Maxim/GCC/") + +os.makedirs(cmsis_device_gcc_dst, exist_ok=True) +shutil.copy(cmsis_device_gcc_src, cmsis_device_gcc_dst + "gcc.mk") + +# Remove mxc_version, not compatible outside of GitHub repo or MaximSDK Install. +delete_lines(cmsis_device_gcc_dst + "gcc.mk", 21, 60) + +cmsis_core_src = os.path.join(msdk_path, "Libraries/CMSIS/5.9.0") +cmsis_core_dst = os.path.join(destination, "Libraries/CMSIS/5.9.0") + +shutil.copytree(cmsis_core_src, cmsis_core_dst, dirs_exist_ok=True) + +cmsis_device_src = os.path.join(msdk_path, "Libraries/CMSIS/Device/Maxim/" + chip_name.upper() + "/") +cmsis_device_dst = os.path.join(destination, "Libraries/CMSIS/Device/Maxim/" + chip_name.upper() + "/") + +shutil.copytree(cmsis_device_src, cmsis_device_dst, dirs_exist_ok=True) + +# Copy PeriphDrivers +periphdrivers_dir = os.path.join(destination, "Libraries/PeriphDrivers/") +os.makedirs(periphdrivers_dir, exist_ok=True) + +periphdrivers_mk_src = os.path.join(msdk_path, "Libraries/PeriphDrivers/libPeriphDriver.mk") +periphdrivers_mk_dst = os.path.join(destination, "Libraries/PeriphDrivers/libPeriphDriver.mk") + +shutil.copy(periphdrivers_mk_src, periphdrivers_mk_dst) + +periphdrivers_mk_src = os.path.join(msdk_path, "Libraries/PeriphDrivers/periphdriver.mk") +periphdrivers_mk_dst = os.path.join(destination, "Libraries/PeriphDrivers/periphdriver.mk") + +shutil.copy(periphdrivers_mk_src, periphdrivers_mk_dst) + +periphdrivers_mk_src = os.path.join(msdk_path, "Libraries/PeriphDrivers/" + chip_name.lower() + "_files.mk") +periphdrivers_mk_dst = os.path.join(destination, "Libraries/PeriphDrivers/" + chip_name.lower() + "_files.mk") + +shutil.copy(periphdrivers_mk_src, periphdrivers_mk_dst) + +periphdrivers_include_src = os.path.join(msdk_path, "Libraries/PeriphDrivers/Include/" + chip_name.upper() + "/") +periphdrivers_include_dst = os.path.join(destination, "Libraries/PeriphDrivers/Include/" + chip_name.upper() + "/") + +shutil.copytree(periphdrivers_include_src, periphdrivers_include_dst, dirs_exist_ok=True) + +periphdrivers_source_src = os.path.join(msdk_path, "Libraries/PeriphDrivers/Source/") +periphdrivers_source_dst = os.path.join(destination, "Libraries/PeriphDrivers/Source/") + +os.makedirs(periphdrivers_source_dst, exist_ok=True) + +# PeriphDrivers + +# Save separate lists of source directories and files required for the part. +# SYS can not be easily parsed using the {part}_files.mk file. +periphdrivers_src_dirs = ["SYS"] + +periphdrivers_src_files = [] + +with open(periphdrivers_mk_src, 'r') as part_files_mk: + for line in part_files_mk: + # Get Source Directories. + if line.startswith("PERIPH_DRIVER_INCLUDE_DIR"): + # Specify with another unique token for valid directory names. + if "SOURCE_DIR" in line: + # Isolate last directory name only. + src_dir = line.split("/")[-1].rstrip('\n') + periphdrivers_src_dirs.append(src_dir) + + # Get Source Files. + if line.startswith("PERIPH_DRIVER_C_FILES"): + # Isolate file and their parent directory path. + src_file = line.split("$(SOURCE_DIR)/")[-1].rstrip('\n') + periphdrivers_src_files.append(src_file) + + # Quick hack to add i3c_ccc.h. + if "I3C" in line: + periphdrivers_src_files.append("I3C/i3c_ccc.h") + +# Create all source directories. +for src_dir in periphdrivers_src_dirs: + os.makedirs(periphdrivers_source_dst + src_dir, exist_ok=True) + +# Copy all source files to their appropriate locations. +for src_file in periphdrivers_src_files: + shutil.copy(periphdrivers_source_src + src_file, periphdrivers_source_dst + src_file) + + # Grab accompanying src/inc files that weren't listed in {part}_files.mk. + # For example, {periph}_common.c/.h, {periph}_revX_regs.h, {periph}_revX.h + if "_rev" in src_file: + # Isolate parent directory. + parent_periph_dir = src_file.split("/")[0] + + # Isolate revision version. + revision = src_file.split("_rev")[-1] + index_to_first_underscore = revision.find("_") + revision_id = "_rev" + revision[:index_to_first_underscore-1] + + rev_files = [file for file in os.listdir(periphdrivers_source_src + "/" + parent_periph_dir) if revision_id in file and ".svd" not in file] + + # Account fo rev revisions (_reva1 and _reva2 files share the same _reva register file) + # _revX is 5 characters long + if len(revision_id) > 5: + # Grab register file + rev_files.append(parent_periph_dir.lower() + revision_id[:-1] + "_regs.h") + + for file in rev_files: + src_file = periphdrivers_source_src + "/" + parent_periph_dir + "/" + file + dst_file = periphdrivers_source_dst + "/" + parent_periph_dir + "/" + file + if os.path.isfile(src_file): + shutil.copy(src_file, dst_file) + + + if "_common" in src_file: + # Replace .c file extension to header file + common_file = src_file[:-2] + ".h" + # Check if file at source exists, if not, don't copy + if os.path.exists(periphdrivers_source_src + common_file): + shutil.copy(periphdrivers_source_src + common_file, periphdrivers_source_dst + common_file) + +# Copy libs.mk +libs_mk_src = os.path.join(msdk_path, "Libraries/libs.mk") +libs_mk_dst = os.path.join(destination, "Libraries/libs.mk") +shutil.copy(libs_mk_src, libs_mk_dst) + +# Copy Tools +tools_src = os.path.join(msdk_path, "Tools/Flash") +tools_dst = os.path.join(destination, "Tools/Flash") +shutil.copytree(tools_src, tools_dst, dirs_exist_ok=True) diff --git a/USERGUIDE.md b/USERGUIDE.md index 70fd2d593fb..9c0649fb6d9 100644 --- a/USERGUIDE.md +++ b/USERGUIDE.md @@ -2129,12 +2129,20 @@ The following table matches external part numbers to internal die types. This i The CMSIS-DSP library provides a suite of common **Digital Signal Processing _(DSP)_** functions that take advantage of hardware accelerated _Floating Point Unit (FPU)_ available on microcontrollers with Arm Cortex-M cores. This library is distributed in the MSDK as a pre-compiled static library file, and the MSDK maintains a port of the official code examples in the **ARM-DSP** [Examples](https://github.com/analogdevicesinc/msdk/tree/main/Examples) folder for each microcontroller. -Please refer to the [CMSIS-DSP official documentation](https://www.keil.com/pack/doc/CMSIS/DSP/html/index.html) for more detailed documentation on the library functions and usage. +Please refer to the [CMSIS-DSP official documentation](https://arm-software.github.io/CMSIS-DSP/v1.16.2/index.html) for more detailed documentation on the library functions and usage. #### CMSIS-DSP Supported Parts - All microcontrollers with a Cortex M4 core are supported. +#### CMSIS-DSP Build Variables + +| Configuration Variable | Description | Details | +| ---------------------- | ---------------------------------------------------------- | ------------------------------------------------------------ | +| | | | +| `CMSIS_DSP_VERSION` | (Optional) Set the CMSIS-DSP version to use. | Defaults to `1.16.2`, which is currently the only supported version. | + + --- ### Cordio Bluetooth Low Energy