From 52f0472a4463a36fce6666bd70c47dae70603d90 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Tue, 21 Feb 2012 04:53:51 +0000 Subject: [PATCH] =?UTF-8?q?build/tests=E3=83=95=E3=82=A9=E3=83=AB=E3=83=80?= =?UTF-8?q?=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20120221_1_4_6@3050 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/tests/AppVersionViewer/ARM9/Makefile | 150 - build/tests/AppVersionViewer/ARM9/main.rsf | 248 - build/tests/AppVersionViewer/banner/Makefile | 49 - .../AppVersionViewer/banner/banner_v3.bsf | Bin 884 -> 0 bytes .../AppVersionViewer/banner/icon/icon.bmp | Bin 630 -> 0 bytes build/tests/CalcHMAC_forBroadOn/Makefile | 47 - build/tests/CalcHMAC_forBroadOn/main.rsf | 171 - .../src/CalcHMAC_forBroadOn.c | 368 - build/tests/CardCopyMultiBoot/Makefile | 207 - build/tests/CardCopyMultiBoot/banner/Makefile | 49 - .../CardCopyMultiBoot/banner/banner_v3.bsf | Bin 930 -> 0 bytes build/tests/CardCopyMultiBoot/data/icon.char | Bin 512 -> 0 bytes build/tests/CardCopyMultiBoot/data/icon.plt | Bin 32 -> 0 bytes .../CardCopyMultiBoot/data/myGameIcon.bmp | Bin 630 -> 0 bytes .../etc/libsyscall_child.bin | 1 - build/tests/CardCopyMultiBoot/include/bt.h | 53 - .../tests/CardCopyMultiBoot/include/common.h | 163 - build/tests/CardCopyMultiBoot/include/disp.h | 87 - build/tests/CardCopyMultiBoot/include/font.h | 37 - build/tests/CardCopyMultiBoot/include/gmain.h | 49 - build/tests/CardCopyMultiBoot/include/text.h | 81 - .../CardCopyMultiBoot/include/wh_config.h | 61 - build/tests/CardCopyMultiBoot/main.TWL.lsf | 59 - build/tests/CardCopyMultiBoot/main.TWL.rsf | 111 - build/tests/CardCopyMultiBoot/main.lsf | 44 - build/tests/CardCopyMultiBoot/main.rsf | 59 - build/tests/CardCopyMultiBoot/readme.txt | 27 - build/tests/CardCopyMultiBoot/src/child.c | 298 - build/tests/CardCopyMultiBoot/src/common.c | 402 - build/tests/CardCopyMultiBoot/src/disp.c | 445 - build/tests/CardCopyMultiBoot/src/font.c | 552 - build/tests/CardCopyMultiBoot/src/main.c | 97 - build/tests/CardCopyMultiBoot/src/parent.c | 585 - build/tests/CardCopyMultiBoot/src/text.c | 385 - build/tests/CheckCardAccess/Makefile | 32 - build/tests/CheckCardAccess/Makefile.game | 47 - build/tests/CheckCardAccess/Makefile.normal | 47 - build/tests/CheckCardAccess/Makefile.off | 47 - build/tests/CheckCardAccess/game_mode.rsf | 243 - build/tests/CheckCardAccess/normal_mode.rsf | 243 - .../tests/CheckCardAccess/slot_power_off.rsf | 243 - build/tests/CheckCardAccess/src/font.c | 579 - build/tests/CheckCardAccess/src/font.h | 36 - build/tests/CheckCardAccess/src/hotswTypes.h | 134 - build/tests/CheckCardAccess/src/main.c | 768 -- build/tests/CheckCardAccess/src/romSpec.h | 152 - build/tests/CheckCardMode/Makefile | 37 - build/tests/CheckCardMode/src/font.c | 579 - build/tests/CheckCardMode/src/font.h | 36 - build/tests/CheckCardMode/src/hotswTypes.h | 134 - build/tests/CheckCardMode/src/main.c | 535 - build/tests/CheckCardMode/src/romSpec.h | 152 - .../CheckDSHashTable/CheckDSHashTable.rsf | 249 - build/tests/CheckDSHashTable/Makefile | 48 - build/tests/CheckDSHashTable/src/main.c | 285 - build/tests/CheckPreloadParameters/Makefile | 39 - .../CheckPreloadParameters/banner/Makefile | 47 - .../banner/banner_v3.bsf | Bin 980 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes build/tests/CheckPreloadParameters/src/main.c | 457 - build/tests/CheckSharedFont/Makefile | 42 - build/tests/CheckSharedFont/ROM-TS_nand.rsf | 263 - .../CheckSharedFont/src/loadSharedFont.c | 147 - .../CheckSharedFont/src/loadSharedFont.h | 42 - build/tests/CheckSharedFont/src/main.c | 98 - build/tests/CreateDevKp/ARM9/Makefile | 60 - build/tests/CreateDevKp/ARM9/main.rsf | 204 - .../tests/CreateDevKp/ARM9/src/RomTypeTest.c | 143 - .../tests/CreateDevKp/ARM9/src/RomTypeTest.h | 35 - build/tests/CreateDevKp/ARM9/src/main.c | 85 - build/tests/CreateDevKp/Makefile | 30 - build/tests/CreateDevKp/banner/Makefile | 48 - .../CreateDevKp/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../banner/icon/msk_pictchat_icon.bin | Bin 4480 -> 0 bytes .../banner/test-utf16_0_v3.TWL.bsf | Bin 594 -> 0 bytes .../CustomSystemUpdater/ARM7.TWL/Makefile | 74 - .../ARM7.TWL/armadillo.lsf | 86 - .../ARM7.TWL/include/kami_pxi.h | 44 - .../ARM7.TWL/src/kami_pxi.c | 262 - .../CustomSystemUpdater/ARM7.TWL/src/main.c | 576 - .../CustomSystemUpdater/ARM9.TWL/ARM9-TS.lsf | 57 - .../CustomSystemUpdater/ARM9.TWL/Makefile | 150 - .../ARM9.TWL/include/graphics.h | 48 - .../ARM9.TWL/include/hw_info.h | 71 - .../ARM9.TWL/include/import.h | 49 - .../ARM9.TWL/include/kami_copy_file.h | 41 - .../ARM9.TWL/include/kami_font.h | 94 - .../ARM9.TWL/include/kami_pxi.h | 89 - .../ARM9.TWL/include/kami_write_nandfirm.h | 52 - .../ARM9.TWL/include/keypad.h | 48 - .../ARM9.TWL/src/font_data.c | 734 -- .../ARM9.TWL/src/graphics.c | 199 - .../ARM9.TWL/src/hw_info.c | 147 - .../CustomSystemUpdater/ARM9.TWL/src/import.c | 194 - .../ARM9.TWL/src/kami_copy_file.c | 105 - .../ARM9.TWL/src/kami_font.c | 407 - .../ARM9.TWL/src/kami_pxi.c | 370 - .../ARM9.TWL/src/kami_write_nandfirm.c | 332 - .../CustomSystemUpdater/ARM9.TWL/src/keypad.c | 85 - build/tests/CustomSystemUpdater/Makefile | 123 - .../tests/CustomSystemUpdater/banner/Makefile | 47 - .../CustomSystemUpdater/banner/banner_AUS.bnr | Bin 9152 -> 0 bytes .../CustomSystemUpdater/banner/banner_EUR.bnr | Bin 9152 -> 0 bytes .../CustomSystemUpdater/banner/banner_JPN.bnr | Bin 9152 -> 0 bytes .../CustomSystemUpdater/banner/banner_USA.bnr | Bin 9152 -> 0 bytes .../CustomSystemUpdater/banner/banner_v3.bsf | Bin 852 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 592 -> 0 bytes .../CustomSystemUpdater/common/include/fifo.h | 90 - .../CustomSystemUpdater/custom_base.yaml | 10 - build/tests/CustomSystemUpdater/default.yaml | 14 - build/tests/CustomSystemUpdater/makecsu.sh | 36 - build/tests/CustomSystemUpdater/romchecker.rb | 207 - build/tests/CustomSystemUpdater/sumaker.rb | 212 - .../template/ARM9.TWL/main.rsf | 229 - .../template/ARM9.TWL/src/main.c | 765 -- .../CustomSystemUpdater/work/aftercls.sh | 48 - build/tests/CustomSystemUpdater/work/cls.sh | 51 - build/tests/CustomSystemUpdater/work/mkcls.py | 151 - .../work/pickup_tad.dev.sh | 55 - .../CustomSystemUpdater/work/pickup_tad.pl | 146 - .../tests/CustomSystemUpdater/work/toaqua.rb | 92 - build/tests/CustomSystemUpdater/work/tocls.sh | 51 - build/tests/CustomSystemUpdater/work/tocsu.sh | 66 - build/tests/CustomSystemUpdater/work/util.pl | 110 - build/tests/DisableDebugFlgChecker/Makefile | 64 - .../DisableDebugFlgChecker/include/common.h | 67 - .../DisableDebugFlgChecker/include/font.h | 41 - .../DisableDebugFlgChecker/include/screen.h | 67 - build/tests/DisableDebugFlgChecker/main.rsf | 244 - .../tests/DisableDebugFlgChecker/src/common.c | 156 - build/tests/DisableDebugFlgChecker/src/font.c | 585 - build/tests/DisableDebugFlgChecker/src/main.c | 287 - .../tests/DisableDebugFlgChecker/src/screen.c | 194 - build/tests/DispOwnerInfo/Makefile | 97 - build/tests/DispOwnerInfo/banner/Makefile | 73 - .../DispOwnerInfo/banner/myGameBanner.bsf | Bin 1176 -> 0 bytes .../tests/DispOwnerInfo/banner/myGameIcon.bmp | Bin 630 -> 0 bytes .../DispOwnerInfo/data/NITRO_LC_Font_s.bncmp | Bin 476 -> 0 bytes .../DispOwnerInfo/data/NITRO_LC_Font_s.bnfr | Bin 9290 -> 0 bytes build/tests/DispOwnerInfo/font/f08han.dat | Bin 7520 -> 0 bytes build/tests/DispOwnerInfo/font/f08zen.dat | Bin 73320 -> 0 bytes build/tests/DispOwnerInfo/font/f10han.dat | Bin 9024 -> 0 bytes build/tests/DispOwnerInfo/font/f10zen.dat | Bin 161304 -> 0 bytes build/tests/DispOwnerInfo/font/f12han.dat | Bin 10528 -> 0 bytes build/tests/DispOwnerInfo/font/f12zen.dat | Bin 190632 -> 0 bytes build/tests/DispOwnerInfo/font/f16han.dat | Bin 13536 -> 0 bytes build/tests/DispOwnerInfo/font/f16zen.dat | Bin 249288 -> 0 bytes build/tests/DispOwnerInfo/include/fnt.h | 9 - .../DispOwnerInfo/include/fnt/fnt_data.h | 32 - .../DispOwnerInfo/include/fnt/fnt_enum.h | 35 - .../DispOwnerInfo/include/fnt/fnt_func.h | 50 - .../DispOwnerInfo/include/fnt/fnt_struct.h | 224 - build/tests/DispOwnerInfo/main.rsf | 41 - .../mlib/ARM9-TS/Release/libfnt.a | Bin 432814 -> 0 bytes .../DispOwnerInfo/mlib/ARM9-TS/Rom/libfnt.a | Bin 431910 -> 0 bytes build/tests/DispOwnerInfo/readme.txt | 28 - .../tests/DispOwnerInfo/src/NitroConfigData.h | 679 - build/tests/DispOwnerInfo/src/data.c | 595 - build/tests/DispOwnerInfo/src/data.h | 108 - build/tests/DispOwnerInfo/src/dispNCD.c | 282 - build/tests/DispOwnerInfo/src/font.c | 1094 -- build/tests/DispOwnerInfo/src/font.h | 123 - build/tests/DispOwnerInfo/src/initFunc.c | 149 - build/tests/DispOwnerInfo/src/main.c | 167 - build/tests/DispOwnerInfo/src/main.h | 41 - build/tests/DispOwnerInfo/src/myChar.c | 667 - build/tests/DispOwnerInfo/src/myFunc.c | 361 - build/tests/DispOwnerInfo/src/myFunc.h | 91 - .../DisplaySystemInformation/ARM7/Makefile | 85 - .../ARM7/armadillo.lcf.template | 400 - .../ARM7/armadillo.lsf | 85 - .../ARM7/armadillo.response.template | 22 - .../DisplaySystemInformation/ARM7/src/main.c | 632 - .../ARM7/src/overwriteRtc.c | 67 - .../ARM7_armadillo/Makefile | 86 - .../ARM7_armadillo/armadillo.lcf.template | 400 - .../ARM7_armadillo/armadillo.lsf | 85 - .../armadillo.response.template | 22 - .../ARM7_armadillo/src/crt0.SCR.c | 714 - .../ARM7_armadillo/src/main.c | 632 - .../ARM7_armadillo/src/overwriteRtc.c | 67 - .../ARM7_racoon/Makefile | 82 - .../ARM7_racoon/racoon.lcf.template | 935 -- .../ARM7_racoon/racoon.lsf | 231 - .../ARM7_racoon/racoon.response.template | 40 - .../ARM7_racoon/src/initScfg.c | 108 - .../ARM7_racoon/src/main.c | 992 -- .../DisplaySystemInformation/ARM9/Makefile | 44 - .../DisplaySystemInformation/ARM9/Makefile.0 | 143 - .../DisplaySystemInformation/ARM9/Makefile.1 | 143 - .../DisplaySystemInformation/ARM9/Makefile.10 | 143 - .../DisplaySystemInformation/ARM9/Makefile.11 | 143 - .../DisplaySystemInformation/ARM9/Makefile.12 | 143 - .../DisplaySystemInformation/ARM9/Makefile.13 | 143 - .../DisplaySystemInformation/ARM9/Makefile.14 | 143 - .../DisplaySystemInformation/ARM9/Makefile.15 | 143 - .../DisplaySystemInformation/ARM9/Makefile.16 | 143 - .../DisplaySystemInformation/ARM9/Makefile.17 | 143 - .../DisplaySystemInformation/ARM9/Makefile.2 | 143 - .../DisplaySystemInformation/ARM9/Makefile.3 | 143 - .../DisplaySystemInformation/ARM9/Makefile.4 | 143 - .../DisplaySystemInformation/ARM9/Makefile.5 | 143 - .../DisplaySystemInformation/ARM9/Makefile.6 | 143 - .../DisplaySystemInformation/ARM9/Makefile.7 | 143 - .../DisplaySystemInformation/ARM9/Makefile.8 | 143 - .../DisplaySystemInformation/ARM9/Makefile.9 | 143 - .../DisplaySystemInformation/ARM9/filemove.rb | 23 - .../ARM9/main_normal.rsf | 250 - .../ARM9/main_secure.rsf | 247 - .../ARM9/makeConditions.txt | 19 - .../ARM9/makeFooter.txt | 115 - .../ARM9/makeHeader.txt | 21 - .../ARM9/makeMaking.rb | 54 - .../ARM9/src/control.c | 425 - .../ARM9/src/control.h | 41 - .../ARM9/src/drawFunc.c | 1085 -- .../ARM9/src/drawFunc.h | 54 - .../ARM9/src/getInformation.h | 59 - .../ARM9/src/get_font.c | 118 - .../ARM9/src/get_hw.c | 110 - .../ARM9/src/get_other.c | 69 - .../ARM9/src/get_owner.c | 37 - .../ARM9/src/get_parental.c | 53 - .../ARM9/src/get_scfg.c | 1137 -- .../ARM9/src/get_secureUser.c | 112 - .../ARM9/src/get_sysmenu.c | 265 - .../ARM9/src/get_versionData.c | 55 - .../ARM9/src/get_whitelist.c | 155 - .../ARM9/src/get_wl.c | 142 - .../ARM9/src/infodata.xls | Bin 35328 -> 0 bytes .../DisplaySystemInformation/ARM9/src/main.c | 120 - .../DisplaySystemInformation/ARM9/src/misc.c | 759 -- .../DisplaySystemInformation/ARM9/src/misc.h | 196 - .../ARM9/src/myIoreg_SCFG.h | 533 - .../ARM9/src/strResource.c | 726 -- .../ARM9/src/strResource.h | 293 - .../DisplaySystemInformation/ARM9/src/util.c | 46 - .../DisplaySystemInformation/ARM9/src/util.h | 10 - .../ARM9/src/viewSystemInfo.c | 317 - .../ARM9/src/viewSystemInfo.h | 101 - build/tests/DisplaySystemInformation/Makefile | 30 - .../banner/MakeFooter.txt | 29 - .../banner/MakeHeader.txt | 18 - .../DisplaySystemInformation/banner/Makefile | 39 - .../banner/Makefile.020A | 48 - .../banner/Makefile.021A | 48 - .../banner/Makefile.022A | 48 - .../banner/Makefile.023A | 48 - .../banner/Makefile.024A | 48 - .../banner/Makefile.025A | 48 - .../banner/Makefile.0B0A | 48 - .../banner/Makefile.0B1A | 48 - .../banner/Makefile.0B2A | 48 - .../banner/Makefile.0B3A | 48 - .../banner/Makefile.0B4A | 48 - .../banner/Makefile.0B5A | 48 - .../banner/Makefile.0B6A | 48 - .../banner/Makefile.0B7A | 48 - .../banner/Makefile.0B8A | 48 - .../banner/Makefile.0B9A | 48 - .../banner/Makefile.0BAA | 48 - .../banner/Makefile.0BBA | 48 - .../banner/banner020A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner021A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner022A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner023A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner024A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner025A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner0B0A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B1A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B2A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B3A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B4A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B5A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B6A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B7A_v3.bsf | Bin 712 -> 0 bytes .../banner/banner0B8A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner0B9A_v3.bsf | Bin 728 -> 0 bytes .../banner/banner0BAA_v3.bsf | Bin 728 -> 0 bytes .../banner/banner0BBA_v3.bsf | Bin 728 -> 0 bytes .../banner/bannerOption.txt | 19 - .../banner/banner_v3.bsf | Bin 984 -> 0 bytes .../banner/icon/020A.bmp | Bin 630 -> 0 bytes .../banner/icon/021A.bmp | Bin 630 -> 0 bytes .../banner/icon/022A.bmp | Bin 630 -> 0 bytes .../banner/icon/023A.bmp | Bin 630 -> 0 bytes .../banner/icon/024A.bmp | Bin 630 -> 0 bytes .../banner/icon/025A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B0A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B1A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B2A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B3A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B4A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B5A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B6A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B7A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B8A.bmp | Bin 630 -> 0 bytes .../banner/icon/0B9A.bmp | Bin 630 -> 0 bytes .../banner/icon/0BAA.bmp | Bin 630 -> 0 bytes .../banner/icon/0BBA.bmp | Bin 630 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../banner/makeMaker.rb | 27 - .../common/include/address.h | 28 - build/tests/ETicketViewer/Makefile | 56 - build/tests/ETicketViewer/ROM-TS_sys.rsf | 318 - build/tests/ETicketViewer/include/common.h | 67 - build/tests/ETicketViewer/include/font.h | 41 - build/tests/ETicketViewer/include/screen.h | 49 - build/tests/ETicketViewer/src/common.c | 157 - build/tests/ETicketViewer/src/font.c | 585 - build/tests/ETicketViewer/src/main.c | 834 -- build/tests/ETicketViewer/src/screen.c | 194 - build/tests/ErrorLogTest/ARM9/Makefile | 32 - build/tests/ErrorLogTest/ARM9/Makefile.0 | 56 - build/tests/ErrorLogTest/ARM9/Makefile.1 | 55 - build/tests/ErrorLogTest/ARM9/main.rsf | 269 - .../ErrorLogTest/ARM9/src/ErrorLogTest.c | 137 - build/tests/ErrorLogTest/Makefile | 31 - build/tests/ErrorLogTest/about.txt | 11 - build/tests/ErrorLogTest/banner/Makefile | 49 - build/tests/ErrorLogTest/banner/banner_v3.bsf | Bin 820 -> 0 bytes .../ErrorLogTest/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes build/tests/FakeRomHeader/Makefile | 106 - build/tests/FakeRomHeader/README.html | 532 - build/tests/FakeRomHeader/README.txt | 103 - build/tests/FakeRomHeader/keys.c | 243 - build/tests/FakeRomHeader/keys.h | 14 - build/tests/FakeRomHeader/main.c | 673 - build/tests/FakeRomHeader/ビルド方法.txt | 22 - build/tests/FatalErrorChecker/ARM9/Makefile | 55 - build/tests/FatalErrorChecker/ARM9/main.rsf | 245 - .../FatalErrorChecker/ARM9/src/font_data.c | 734 -- .../FatalErrorChecker/ARM9/src/graphics.c | 160 - .../FatalErrorChecker/ARM9/src/graphics.h | 46 - .../FatalErrorChecker/ARM9/src/kami_font.c | 407 - .../FatalErrorChecker/ARM9/src/kami_font.h | 95 - .../tests/FatalErrorChecker/ARM9/src/keypad.c | 85 - .../tests/FatalErrorChecker/ARM9/src/keypad.h | 48 - build/tests/FatalErrorChecker/ARM9/src/main.c | 652 - build/tests/FatalErrorChecker/Makefile | 30 - build/tests/FatalErrorChecker/banner/Makefile | 47 - .../FatalErrorChecker/banner/banner_v3.bsf | Bin 900 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes build/tests/FatalErrorMaker/ARM9/Makefile | 32 - build/tests/FatalErrorMaker/ARM9/Makefile.0 | 87 - build/tests/FatalErrorMaker/ARM9/Makefile.1 | 87 - build/tests/FatalErrorMaker/ARM9/main.rsf | 248 - .../ARM9/src/fatalErrorMaker.c | 379 - .../ARM9/src/fatalErrorMaker.h | 34 - build/tests/FatalErrorMaker/ARM9/src/main.c | 101 - build/tests/FatalErrorMaker/Makefile | 30 - build/tests/FatalErrorMaker/about.txt | 22 - build/tests/FatalErrorMaker/banner/Makefile | 35 - .../FatalErrorMaker/banner/Makefile.012A | 48 - .../FatalErrorMaker/banner/Makefile.0G4A | 48 - build/tests/FatalErrorMaker/banner/banner.bnr | Bin 9152 -> 0 bytes .../FatalErrorMaker/banner/banner012A_v3.bsf | Bin 824 -> 0 bytes .../FatalErrorMaker/banner/banner0G4A_v3.bsf | Bin 792 -> 0 bytes .../FatalErrorMaker/banner/bannerOption.txt | 2 - .../FatalErrorMaker/banner/banner_v3.bsf | Bin 980 -> 0 bytes .../FatalErrorMaker/banner/icon/012A.bmp | Bin 630 -> 0 bytes .../FatalErrorMaker/banner/icon/0G4A.bmp | Bin 630 -> 0 bytes .../FatalErrorMaker/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes build/tests/FileRecoveryTest/Makefile | 43 - build/tests/FileRecoveryTest/main.rsf | 269 - build/tests/FileRecoveryTest/src/main.c | 60 - build/tests/HashCheckTemplate/ARM7/Makefile | 30 - .../tests/HashCheckTemplate/ARM7/Makefile_hyb | 88 - .../tests/HashCheckTemplate/ARM7/Makefile_ltd | 81 - .../ARM7/Makefile_ltd_offset | 83 - .../HashCheckTemplate/ARM7/mongoose_hct.lsf | 172 - .../HashCheckTemplate/ARM7/racoon_hct.lsf | 231 - build/tests/HashCheckTemplate/ARM9/Makefile | 29 - .../tests/HashCheckTemplate/ARM9/Makefile_hyb | 75 - .../tests/HashCheckTemplate/ARM9/Makefile_ltd | 75 - build/tests/HashCheckTemplate/ARM9/main.rsf | 185 - .../ARM9/src/HashCheckTemplate.c | 151 - .../ARM9/src/HashCheckTemplate.h | 37 - build/tests/HashCheckTemplate/ARM9/src/main.c | 87 - build/tests/HashCheckTemplate/Makefile | 30 - build/tests/HashCheckTemplate/banner/Makefile | 47 - .../HashCheckTemplate/banner/banner_v3.bsf | Bin 942 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../tests/HashCheckTemplate/crt/ARM7/Makefile | 29 - .../HashCheckTemplate/crt/ARM7/Makefile_hyb | 52 - .../HashCheckTemplate/crt/ARM7/Makefile_ltd | 52 - .../crt/ARM7/src/crt0_hct.HYB.c | 918 -- .../crt/ARM7/src/crt0_hct.LTD.c | 861 -- build/tests/HashCheckTemplate/crt/Makefile | 31 - .../crt/common/include/boot_sync.h | 35 - build/tests/HashCheckTemplate/memo.txt | 49 - .../HashCheckTemplate/test_roms/rombreak.bat | 199 - .../test_roms/破壊ずみROMの作り方.txt | 9 - .../ARM9.TWL/Makefile | 54 - .../ARM9.TWL/include/font.h | 43 - .../ARM9.TWL/include/keypad.h | 48 - .../ARM9.TWL/include/screen.h | 52 - .../ARM9.TWL/main.rsf | 197 - .../ARM9.TWL/src/font.c | 580 - .../ARM9.TWL/src/keypad.c | 85 - .../ARM9.TWL/src/main.c | 174 - .../ARM9.TWL/src/screen.c | 112 - build/tests/JumpToSettingForZonetest/Makefile | 33 - .../JumpToSettingForZonetest/banner/Makefile | 47 - .../banner/banner_v3.bsf | Bin 836 -> 0 bytes .../banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes build/tests/Launcher_sdlog/Makefile | 37 - .../tests/Launcher_sdlog/jackal.TWL/Makefile | 58 - .../Launcher_sdlog/jackal.TWL/make_lsf.pl | 57 - build/tests/Launcher_sdlog/readme.txt | 48 - build/tests/Launcher_sdlog/scripts/Makefile | 60 - .../Launcher_sdlog/scripts/sdlog_main_c.pl | 92 - .../Launcher_sdlog/scripts/sdlog_makefile.pl | 103 - .../Launcher_sdlog/sdlog/ARM7.TWL/Makefile | 100 - .../sdlog/ARM7.TWL/src/os_printf.c | 1536 --- .../Launcher_sdlog/sdlog/ARM9.TWL/Makefile | 46 - .../sdlog/ARM9.TWL/include/sd_log_wrapper.h | 44 - .../sdlog/ARM9.TWL/src/sd_log_wrapper.c | 179 - build/tests/Launcher_sdlog/sdlog/Makefile | 24 - build/tests/Makefile | 53 - build/tests/NotLaunchRom/Makefile | 32 - build/tests/NotLaunchRom/Makefile.0 | 51 - build/tests/NotLaunchRom/Makefile.1 | 51 - build/tests/NotLaunchRom/Makefile.2 | 54 - build/tests/NotLaunchRom/include/data.h | 28 - build/tests/NotLaunchRom/secure.rsf | 196 - build/tests/NotLaunchRom/src/data.c | 573 - build/tests/NotLaunchRom/src/main.c | 109 - build/tests/NotLaunchRom/system.rsf | 195 - build/tests/NotLaunchRom/user.rsf | 195 - build/tests/RomTypeTest/ARM9/Makefile | 35 - build/tests/RomTypeTest/ARM9/Makefile.0 | 61 - build/tests/RomTypeTest/ARM9/Makefile.1 | 61 - build/tests/RomTypeTest/ARM9/Makefile.2 | 61 - build/tests/RomTypeTest/ARM9/Makefile.3 | 61 - build/tests/RomTypeTest/ARM9/Makefile.4 | 61 - build/tests/RomTypeTest/ARM9/Makefile.5 | 62 - build/tests/RomTypeTest/ARM9/Makefile.6 | 62 - build/tests/RomTypeTest/ARM9/Makefile.7 | 62 - build/tests/RomTypeTest/ARM9/Makefile.8 | 62 - build/tests/RomTypeTest/ARM9/Makefile.9 | 62 - build/tests/RomTypeTest/ARM9/Makefile.a | 62 - build/tests/RomTypeTest/ARM9/Makefile.b | 62 - build/tests/RomTypeTest/ARM9/Makefile.c | 62 - build/tests/RomTypeTest/ARM9/Makefile.h | 62 - build/tests/RomTypeTest/ARM9/Makefile.i | 62 - build/tests/RomTypeTest/ARM9/Makefile.j | 62 - build/tests/RomTypeTest/ARM9/Makefile.k | 62 - build/tests/RomTypeTest/ARM9/main0.rsf | 204 - build/tests/RomTypeTest/ARM9/main1.rsf | 204 - build/tests/RomTypeTest/ARM9/main2.rsf | 204 - build/tests/RomTypeTest/ARM9/main3.rsf | 204 - build/tests/RomTypeTest/ARM9/main4.rsf | 204 - build/tests/RomTypeTest/ARM9/main5.rsf | 204 - build/tests/RomTypeTest/ARM9/main6.rsf | 204 - build/tests/RomTypeTest/ARM9/main7.rsf | 204 - build/tests/RomTypeTest/ARM9/main8.rsf | 204 - build/tests/RomTypeTest/ARM9/main9.rsf | 204 - build/tests/RomTypeTest/ARM9/maina.rsf | 204 - build/tests/RomTypeTest/ARM9/mainb.rsf | 204 - build/tests/RomTypeTest/ARM9/mainc.rsf | 204 - build/tests/RomTypeTest/ARM9/mainh.rsf | 204 - build/tests/RomTypeTest/ARM9/maini.rsf | 204 - build/tests/RomTypeTest/ARM9/mainj.rsf | 204 - build/tests/RomTypeTest/ARM9/maink.rsf | 204 - .../tests/RomTypeTest/ARM9/src/RomTypeTest.c | 419 - .../tests/RomTypeTest/ARM9/src/RomTypeTest.h | 36 - build/tests/RomTypeTest/ARM9/src/main.c | 86 - build/tests/RomTypeTest/Makefile | 30 - build/tests/RomTypeTest/banner/Makefile | 35 - build/tests/RomTypeTest/banner/Makefile.0 | 48 - build/tests/RomTypeTest/banner/Makefile.1 | 48 - build/tests/RomTypeTest/banner/Makefile.2 | 48 - build/tests/RomTypeTest/banner/Makefile.3 | 48 - build/tests/RomTypeTest/banner/Makefile.4 | 48 - build/tests/RomTypeTest/banner/Makefile.5 | 48 - build/tests/RomTypeTest/banner/Makefile.6 | 48 - build/tests/RomTypeTest/banner/Makefile.7 | 48 - build/tests/RomTypeTest/banner/Makefile.8 | 48 - build/tests/RomTypeTest/banner/Makefile.9 | 48 - build/tests/RomTypeTest/banner/Makefile.a | 48 - build/tests/RomTypeTest/banner/Makefile.b | 48 - build/tests/RomTypeTest/banner/Makefile.c | 48 - build/tests/RomTypeTest/banner/Makefile.d | 48 - build/tests/RomTypeTest/banner/Makefile.e | 48 - build/tests/RomTypeTest/banner/Makefile.f | 48 - build/tests/RomTypeTest/banner/Makefile.g | 48 - build/tests/RomTypeTest/banner/Makefile.h | 48 - build/tests/RomTypeTest/banner/Makefile.i | 48 - build/tests/RomTypeTest/banner/Makefile.j | 48 - build/tests/RomTypeTest/banner/Makefile.k | 48 - build/tests/RomTypeTest/banner/banner_v3.bsf | Bin 762 -> 0 bytes .../RomTypeTest/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../banner/icon/msk_pictchat_icon.bin | Bin 4480 -> 0 bytes .../banner/test-utf16_0_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_1_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_2_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_3_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_4_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_5_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_6_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_7_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_8_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_9_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_a_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_b_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_c_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_d_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_e_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_f_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_g_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_h_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_i_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_j_v3.TWL.bsf | Bin 610 -> 0 bytes .../banner/test-utf16_k_v3.TWL.bsf | Bin 610 -> 0 bytes build/tests/Shared2File/Makefile | 46 - build/tests/Shared2File/main.rsf | 198 - build/tests/Shared2File/src/main.c | 490 - .../SimpleBenchmark/ARM9/ARM9-TS.lcf.template | 1048 -- build/tests/SimpleBenchmark/ARM9/ARM9-TS.lsf | 53 - build/tests/SimpleBenchmark/ARM9/Makefile | 32 - build/tests/SimpleBenchmark/ARM9/Makefile.0 | 77 - build/tests/SimpleBenchmark/ARM9/Makefile.1 | 64 - build/tests/SimpleBenchmark/ARM9/main0.rsf | 204 - build/tests/SimpleBenchmark/ARM9/main1.rsf | 204 - .../ARM9/src/SimpleBenchmark.c | 119 - .../ARM9/src/SimpleBenchmark.h | 36 - build/tests/SimpleBenchmark/ARM9/src/main.c | 86 - build/tests/SimpleBenchmark/Makefile | 30 - build/tests/SimpleBenchmark/banner/Makefile | 32 - build/tests/SimpleBenchmark/banner/Makefile.0 | 48 - build/tests/SimpleBenchmark/banner/Makefile.1 | 48 - .../SimpleBenchmark/banner/banner_v3.bsf | Bin 762 -> 0 bytes .../SimpleBenchmark/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../banner/icon/msk_pictchat_icon.bin | Bin 4480 -> 0 bytes .../banner/test-utf16_0_v3.TWL.bsf | Bin 802 -> 0 bytes .../banner/test-utf16_1_v3.TWL.bsf | Bin 802 -> 0 bytes build/tests/TestComponent/ARM7.TWL/Makefile | 103 - .../TestComponent/ARM7.TWL/armadillo.lsf | 89 - .../TestComponent/ARM7.TWL/include/kami_pxi.h | 44 - .../ARM7.TWL/src/crt0.SCFG_NOLOCK.c | 798 -- .../TestComponent/ARM7.TWL/src/kami_pxi.c | 413 - build/tests/TestComponent/ARM7.TWL/src/main.c | 654 - .../tests/TestComponent/ARM9.TWL/ARM9-TS.lsf | 57 - build/tests/TestComponent/ARM9.TWL/Makefile | 130 - .../TestComponent/ARM9.TWL/include/graphics.h | 46 - .../ARM9.TWL/include/kami_font.h | 95 - .../TestComponent/ARM9.TWL/include/kami_pxi.h | 123 - .../TestComponent/ARM9.TWL/include/keypad.h | 48 - build/tests/TestComponent/ARM9.TWL/main.rsf | 232 - .../TestComponent/ARM9.TWL/src/font_data.c | 734 -- .../TestComponent/ARM9.TWL/src/graphics.c | 160 - .../TestComponent/ARM9.TWL/src/kami_font.c | 407 - .../TestComponent/ARM9.TWL/src/kami_pxi.c | 743 -- .../tests/TestComponent/ARM9.TWL/src/keypad.c | 85 - build/tests/TestComponent/ARM9.TWL/src/main.c | 230 - build/tests/TestComponent/Makefile | 34 - build/tests/TestComponent/banner/Makefile | 47 - .../tests/TestComponent/banner/banner_v3.bsf | Bin 884 -> 0 bytes .../TestComponent/banner/icon/gameIcon.bmp | Bin 592 -> 0 bytes .../tests/TestComponent/common/include/fifo.h | 105 - build/tests/TestMaker/Makefile | 241 - .../TestMaker/banner/dummy/Cell/Cell0.nce | Bin 6260 -> 0 bytes .../dummy/Character/banner_anm_idea03_ALL.ncg | Bin 4336 -> 0 bytes .../dummy/ColorPalette/banner_anm_idea03.ncl | Bin 556 -> 0 bytes .../banner/dummy/Preview/Preview0.npv | 104 - .../TestMaker/banner/dummy/Scene/Scene0.nsn | 54 - .../tests/TestMaker/banner/dummy/workset.ini | 4 - .../TestMaker/banner/eula/Cell/Cell0.nce | Bin 5924 -> 0 bytes .../TestMaker/banner/eula/Character/eula.ncg | Bin 4324 -> 0 bytes .../banner/eula/ColorPalette/eula.ncl | Bin 556 -> 0 bytes .../banner/eula/Preview/Preview0.npv | 104 - .../TestMaker/banner/eula/Scene/Scene0.nsn | 54 - build/tests/TestMaker/banner/eula/workset.ini | 4 - .../TestMaker/banner/font/Cell/Cell0.nce | Bin 5348 -> 0 bytes .../TestMaker/banner/font/Character/font.ncg | Bin 4324 -> 0 bytes .../banner/font/ColorPalette/font.ncl | Bin 556 -> 0 bytes .../banner/font/Preview/Preview0.npv | 104 - .../TestMaker/banner/font/Scene/Scene0.nsn | 54 - build/tests/TestMaker/banner/font/workset.ini | 4 - .../TestMaker/banner/parental/Cell/Cell0.nce | Bin 5104 -> 0 bytes .../parental/Character/parental_control.ncg | Bin 4336 -> 0 bytes .../ColorPalette/parental_control.ncl | Bin 556 -> 0 bytes .../banner/parental/Preview/Preview0.npv | 104 - .../banner/parental/Scene/Scene0.nsn | 54 - .../TestMaker/banner/parental/workset.ini | 4 - .../TestMaker/banner/shop/Cell/Cell0.nce | Bin 6260 -> 0 bytes .../shop/Character/banner_anm_idea03_ALL.ncg | Bin 4336 -> 0 bytes .../shop/ColorPalette/banner_anm_idea03.ncl | Bin 556 -> 0 bytes .../banner/shop/Preview/Preview0.npv | 104 - .../TestMaker/banner/shop/Scene/Scene0.nsn | 54 - build/tests/TestMaker/banner/shop/workset.ini | 4 - .../config/ROM-TS_nand_forPARENTAL.rsf | 251 - .../config/romparam_forBoottest.yaml | Bin 105824 -> 0 bytes .../TestMaker/config/romparam_forCLStest.yaml | Bin 8136 -> 0 bytes .../config/romparam_forEULAtest.yaml | Bin 5004 -> 0 bytes .../romparam_forFATFSPermissiontest.yaml | Bin 29196 -> 0 bytes .../config/romparam_forShoptest.yaml | Bin 2370 -> 0 bytes .../config/twl_parentalcontrol_spec.yaml | Bin 1894 -> 0 bytes .../20080617_DS_fontcodeList_NOE_FIANL.xls | Bin 1482240 -> 0 bytes .../doc/twl_cls_checksheet_20080508.xls | Bin 50688 -> 0 bytes .../doc/twl_parentalcontrol_spec_20080704.xls | Bin 16384 -> 0 bytes build/tests/TestMaker/readme.txt | 39 - build/tests/TestMaker/romparam.yaml | Bin 2036 -> 0 bytes build/tests/TestMaker/rsf/ROM-TS_custom.rsf | 319 - build/tests/TestMaker/script/clsdir.py | 85 - build/tests/TestMaker/script/config.py | 172 - build/tests/TestMaker/script/fontcode.py | 80 - .../tests/TestMaker/script/parentalcontrol.py | 71 - build/tests/TestMaker/script/rename_eula.py | 21 - build/tests/TestMaker/script/rename_font.py | 30 - .../tests/TestMaker/script/rename_parental.py | 25 - .../tests/TitleHashChecker/ARM7.TWL/Makefile | 84 - .../TitleHashChecker/ARM7.TWL/armadillo.lsf | 87 - .../ARM7.TWL/include/kami_pxi.h | 44 - .../TitleHashChecker/ARM7.TWL/src/kami_pxi.c | 219 - .../TitleHashChecker/ARM7.TWL/src/main.c | 654 - .../TitleHashChecker/ARM9.TWL/ARM9-TS.lsf | 57 - .../tests/TitleHashChecker/ARM9.TWL/Makefile | 85 - .../ARM9.TWL/include/common.h | 91 - .../TitleHashChecker/ARM9.TWL/include/font.h | 41 - .../ARM9.TWL/include/kami_pxi.h | 112 - .../ARM9.TWL/include/screen.h | 67 - .../tests/TitleHashChecker/ARM9.TWL/main.rsf | 229 - .../TitleHashChecker/ARM9.TWL/src/common.c | 156 - .../TitleHashChecker/ARM9.TWL/src/font.c | 585 - .../TitleHashChecker/ARM9.TWL/src/kami_pxi.c | 684 - .../TitleHashChecker/ARM9.TWL/src/main.c | 1323 -- .../TitleHashChecker/ARM9.TWL/src/screen.c | 194 - build/tests/TitleHashChecker/Makefile | 34 - build/tests/TitleHashChecker/banner/Makefile | 47 - .../TitleHashChecker/banner/banner_v3.bsf | Bin 916 -> 0 bytes .../TitleHashChecker/banner/icon/gameIcon.bmp | Bin 630 -> 0 bytes .../TitleHashChecker/common/include/fifo.h | 104 - build/tests/UjiPackage/Makefile | 98 - build/tests/UjiPackage/readme.txt | 24 - build/tests/WDSTest/Makefile | 40 - build/tests/WDSTest/src/main.c | 297 - build/tests/WDSWrapperTest/Makefile | 37 - build/tests/WDSWrapperTest/src/main.c | 197 - build/tests/WirelessChecker/@ | 1 - build/tests/WirelessChecker/Makefile | 146 - .../WirelessChecker/banner/000A_WLCK.bmp | Bin 630 -> 0 bytes .../WirelessChecker/banner/000A_WLCK.bsf | Bin 982 -> 0 bytes build/tests/WirelessChecker/banner/Makefile | 47 - .../tests/WirelessChecker/components/Makefile | 31 - .../components/racoon_wckr/Makefile | 56 - .../components/racoon_wckr/make_lsf.pl | 53 - .../tests/WirelessChecker/libraries/Makefile | 30 - .../libraries/nwm/ARM7/Makefile | 126 - .../libraries/nwm/ARM9/Makefile | 95 - .../WirelessChecker/libraries/nwm/Makefile | 39 - .../libraries/nwm/scripts/Makefile | 42 - .../nwm/scripts/make_nwm_fw_wrack.pl | 108 - build/tests/WirelessChecker/readme.txt | 62 - .../WirelessChecker/resources/ds_ipl10.bmp | Bin 922102 -> 0 bytes build/tests/WirelessChecker/rsf/Makefile | 37 - build/tests/WirelessChecker/rsf/make_rsf.pl | 97 - build/tests/WirelessChecker/src/frame.cpp | 170 - build/tests/WirelessChecker/src/frame.h | 72 - build/tests/WirelessChecker/src/main.cpp | 136 - build/tests/WirelessChecker/src/test.cpp | 96 - build/tests/WirelessChecker/src/test.h | 54 - .../tests/WirelessChecker/src/test_fatal.cpp | 130 - build/tests/WirelessChecker/src/test_fatal.h | 37 - build/tests/WirelessChecker/src/test_nwm.cpp | 355 - build/tests/WirelessChecker/src/test_nwm.h | 52 - .../WirelessChecker/src/test_recovery.cpp | 98 - .../tests/WirelessChecker/src/test_recovery.h | 37 - build/tests/WirelessChecker/src/test_wm.cpp | 376 - build/tests/WirelessChecker/src/test_wm.h | 43 - .../tests/WirelessChecker/src/util/canvas.cpp | 175 - build/tests/WirelessChecker/src/util/canvas.h | 78 - .../tests/WirelessChecker/src/util/memory.cpp | 122 - build/tests/WirelessChecker/src/util/memory.h | 38 - build/tests/WirelessChecker/src/util/util.cpp | 276 - build/tests/WirelessChecker/src/util/util.h | 103 - .../WirelessChecker/src/util/wprintf.cpp | 387 - .../tests/WirelessChecker/src/util/wprintf.h | 100 - build/tests/build4WLDev/Makefile | 146 - build/tests/build4WLDev/Makefile_environment | 41 - build/tests/build4WLDev/Makefile_old | 144 - build/tests/build4WLDev/readme.txt | 26 - build/tests/build4WLDev/scripts/Makefile | 74 - build/tests/build4WLDev/scripts/Makefile_old | 87 - .../scripts/launcher_MachineSetting_c.pl | 52 - .../scripts/launcher_fake_macaddress.pl | 123 - .../scripts/launcher_loadWlanFirm_c.pl | 55 - .../build4WLDev/scripts/launcher_makefile.pl | 112 - .../scripts/launcher_makefile_region.pl | 112 - .../scripts/systemupdater_source.pl | 125 - build/tests/compressSharedFontLoad/README.txt | 60 - .../compSharedFont/Makefile | 62 - .../compSharedFont/compBLZ_modified/Makefile | 73 - .../compSharedFont/compBLZ_modified/_ | 1 - .../compSharedFont/compBLZ_modified/common.h | 42 - .../compBLZ_modified/compress.c | 374 - .../compBLZ_modified/compress.h | 55 - .../compSharedFont/compBLZ_modified/file.c | 314 - .../compSharedFont/compBLZ_modified/file.h | 35 - .../compSharedFont/compBLZ_modified/main.c | 171 - .../compSharedFont/genFontTable.plx | 261 - .../compSharedFont/makeboot.bat | 18 - .../compSharedFont/ntrcomp/@ | 1 - .../compSharedFont/ntrcomp/Makefile | 27 - .../compSharedFont/ntrcomp/Makefile.BAK | 25 - .../compSharedFont/ntrcomp/gcc/Makefile | 59 - .../compSharedFont/ntrcomp/gcc/Makefile.BAK | 59 - .../ntrcomp/src/multipleCompLib.c | 2494 ---- .../ntrcomp/src/multipleCompLib.h | 55 - .../compSharedFont/ntrcomp/src/nitroCompLib.c | 2282 ---- .../compSharedFont/ntrcomp/src/nitroCompLib.h | 127 - .../ntrcomp/src/ntcompress_main.c | 1164 -- .../ntrcomp/src/ntcompress_test.c | 661 - .../ntrcomp/src/ntcompress_test.h | 23 - .../compSharedFont/ntrcomp/src/rangeCoder.c | 539 - .../compSharedFont/ntrcomp/src/rangeCoder.h | 46 - .../compSharedFont/ntrcomp/src/types.h | 57 - .../ntrcomp/vc++/ntcompress.sln | 21 - .../ntrcomp/vc++/ntcompress.vcproj | 179 - .../testLoadSpeed/Makefile | 54 - .../testLoadSpeed/ROM-TS_nand.rsf | 277 - .../testLoadSpeed/copy_to_sdk/Makefile | 39 - .../testLoadSpeed/copy_to_sdk/os_sharedFont.c | 352 - .../testLoadSpeed/copy_to_sdk/sharedFont.h | 69 - .../testLoadSpeed/src/loadSharedFont.c | 198 - .../testLoadSpeed/src/loadSharedFont.h | 46 - .../testLoadSpeed/src/main.c | 101 - build/tests/yuv2rgb/Makefile | 121 - build/tests/yuv2rgb/data/camera_shutter.dat | Bin 32628 -> 0 bytes .../yuv2rgb/data/camera_shutter_MONO.dat | Bin 16314 -> 0 bytes build/tests/yuv2rgb/data/wheel.dat | Bin 136388 -> 0 bytes build/tests/yuv2rgb/include/const.h | 36 - .../tests/yuv2rgb/include/menuCameraManager.h | 381 - build/tests/yuv2rgb/include/new.h | 45 - build/tests/yuv2rgb/include/snd_data.h | 35 - build/tests/yuv2rgb/include/yuv2rgb.h | 85 - build/tests/yuv2rgb/readme.txt | 227 - .../tests/yuv2rgb/redipl_defs_autogen_by_uig | 14 - build/tests/yuv2rgb/src/cpu_yuv2rgb.c | 103 - build/tests/yuv2rgb/src/dsp_yuv2rgb.c | 308 - build/tests/yuv2rgb/src/mainy.cpp | 1813 --- build/tests/yuv2rgb/src/menuCameraManager.cpp | 2453 ---- build/tests/yuv2rgb/src/menuIrqHandler.c | 169 - build/tests/yuv2rgb/src/menuIrqHandler.h | 36 - build/tests/yuv2rgb/src/new.cpp | 130 - build/tests/yuv2rgb/src/snd_data.c | 10771 ---------------- build/tests/yuv2rgb/yuv2rgb.rsf.template | 222 - 748 files changed, 114032 deletions(-) delete mode 100644 build/tests/AppVersionViewer/ARM9/Makefile delete mode 100644 build/tests/AppVersionViewer/ARM9/main.rsf delete mode 100644 build/tests/AppVersionViewer/banner/Makefile delete mode 100644 build/tests/AppVersionViewer/banner/banner_v3.bsf delete mode 100644 build/tests/AppVersionViewer/banner/icon/icon.bmp delete mode 100644 build/tests/CalcHMAC_forBroadOn/Makefile delete mode 100644 build/tests/CalcHMAC_forBroadOn/main.rsf delete mode 100644 build/tests/CalcHMAC_forBroadOn/src/CalcHMAC_forBroadOn.c delete mode 100644 build/tests/CardCopyMultiBoot/Makefile delete mode 100644 build/tests/CardCopyMultiBoot/banner/Makefile delete mode 100644 build/tests/CardCopyMultiBoot/banner/banner_v3.bsf delete mode 100644 build/tests/CardCopyMultiBoot/data/icon.char delete mode 100644 build/tests/CardCopyMultiBoot/data/icon.plt delete mode 100644 build/tests/CardCopyMultiBoot/data/myGameIcon.bmp delete mode 100644 build/tests/CardCopyMultiBoot/etc/libsyscall_child.bin delete mode 100644 build/tests/CardCopyMultiBoot/include/bt.h delete mode 100644 build/tests/CardCopyMultiBoot/include/common.h delete mode 100644 build/tests/CardCopyMultiBoot/include/disp.h delete mode 100644 build/tests/CardCopyMultiBoot/include/font.h delete mode 100644 build/tests/CardCopyMultiBoot/include/gmain.h delete mode 100644 build/tests/CardCopyMultiBoot/include/text.h delete mode 100644 build/tests/CardCopyMultiBoot/include/wh_config.h delete mode 100644 build/tests/CardCopyMultiBoot/main.TWL.lsf delete mode 100644 build/tests/CardCopyMultiBoot/main.TWL.rsf delete mode 100644 build/tests/CardCopyMultiBoot/main.lsf delete mode 100644 build/tests/CardCopyMultiBoot/main.rsf delete mode 100644 build/tests/CardCopyMultiBoot/readme.txt delete mode 100644 build/tests/CardCopyMultiBoot/src/child.c delete mode 100644 build/tests/CardCopyMultiBoot/src/common.c delete mode 100644 build/tests/CardCopyMultiBoot/src/disp.c delete mode 100644 build/tests/CardCopyMultiBoot/src/font.c delete mode 100644 build/tests/CardCopyMultiBoot/src/main.c delete mode 100644 build/tests/CardCopyMultiBoot/src/parent.c delete mode 100644 build/tests/CardCopyMultiBoot/src/text.c delete mode 100644 build/tests/CheckCardAccess/Makefile delete mode 100644 build/tests/CheckCardAccess/Makefile.game delete mode 100644 build/tests/CheckCardAccess/Makefile.normal delete mode 100644 build/tests/CheckCardAccess/Makefile.off delete mode 100644 build/tests/CheckCardAccess/game_mode.rsf delete mode 100644 build/tests/CheckCardAccess/normal_mode.rsf delete mode 100644 build/tests/CheckCardAccess/slot_power_off.rsf delete mode 100644 build/tests/CheckCardAccess/src/font.c delete mode 100644 build/tests/CheckCardAccess/src/font.h delete mode 100644 build/tests/CheckCardAccess/src/hotswTypes.h delete mode 100644 build/tests/CheckCardAccess/src/main.c delete mode 100644 build/tests/CheckCardAccess/src/romSpec.h delete mode 100644 build/tests/CheckCardMode/Makefile delete mode 100644 build/tests/CheckCardMode/src/font.c delete mode 100644 build/tests/CheckCardMode/src/font.h delete mode 100644 build/tests/CheckCardMode/src/hotswTypes.h delete mode 100644 build/tests/CheckCardMode/src/main.c delete mode 100644 build/tests/CheckCardMode/src/romSpec.h delete mode 100644 build/tests/CheckDSHashTable/CheckDSHashTable.rsf delete mode 100644 build/tests/CheckDSHashTable/Makefile delete mode 100644 build/tests/CheckDSHashTable/src/main.c delete mode 100644 build/tests/CheckPreloadParameters/Makefile delete mode 100644 build/tests/CheckPreloadParameters/banner/Makefile delete mode 100644 build/tests/CheckPreloadParameters/banner/banner_v3.bsf delete mode 100644 build/tests/CheckPreloadParameters/banner/icon/gameIcon.bmp delete mode 100644 build/tests/CheckPreloadParameters/src/main.c delete mode 100644 build/tests/CheckSharedFont/Makefile delete mode 100644 build/tests/CheckSharedFont/ROM-TS_nand.rsf delete mode 100644 build/tests/CheckSharedFont/src/loadSharedFont.c delete mode 100644 build/tests/CheckSharedFont/src/loadSharedFont.h delete mode 100644 build/tests/CheckSharedFont/src/main.c delete mode 100644 build/tests/CreateDevKp/ARM9/Makefile delete mode 100644 build/tests/CreateDevKp/ARM9/main.rsf delete mode 100644 build/tests/CreateDevKp/ARM9/src/RomTypeTest.c delete mode 100644 build/tests/CreateDevKp/ARM9/src/RomTypeTest.h delete mode 100644 build/tests/CreateDevKp/ARM9/src/main.c delete mode 100644 build/tests/CreateDevKp/Makefile delete mode 100644 build/tests/CreateDevKp/banner/Makefile delete mode 100644 build/tests/CreateDevKp/banner/icon/gameIcon.bmp delete mode 100644 build/tests/CreateDevKp/banner/icon/msk_pictchat_icon.bin delete mode 100644 build/tests/CreateDevKp/banner/test-utf16_0_v3.TWL.bsf delete mode 100644 build/tests/CustomSystemUpdater/ARM7.TWL/Makefile delete mode 100644 build/tests/CustomSystemUpdater/ARM7.TWL/armadillo.lsf delete mode 100644 build/tests/CustomSystemUpdater/ARM7.TWL/include/kami_pxi.h delete mode 100644 build/tests/CustomSystemUpdater/ARM7.TWL/src/kami_pxi.c delete mode 100644 build/tests/CustomSystemUpdater/ARM7.TWL/src/main.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/ARM9-TS.lsf delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/Makefile delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/graphics.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/hw_info.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/import.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_copy_file.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_font.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_pxi.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_write_nandfirm.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/include/keypad.h delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/font_data.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/graphics.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/hw_info.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/import.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_copy_file.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_font.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_pxi.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c delete mode 100644 build/tests/CustomSystemUpdater/ARM9.TWL/src/keypad.c delete mode 100644 build/tests/CustomSystemUpdater/Makefile delete mode 100644 build/tests/CustomSystemUpdater/banner/Makefile delete mode 100644 build/tests/CustomSystemUpdater/banner/banner_AUS.bnr delete mode 100644 build/tests/CustomSystemUpdater/banner/banner_EUR.bnr delete mode 100644 build/tests/CustomSystemUpdater/banner/banner_JPN.bnr delete mode 100644 build/tests/CustomSystemUpdater/banner/banner_USA.bnr delete mode 100644 build/tests/CustomSystemUpdater/banner/banner_v3.bsf delete mode 100644 build/tests/CustomSystemUpdater/banner/icon/gameIcon.bmp delete mode 100644 build/tests/CustomSystemUpdater/common/include/fifo.h delete mode 100644 build/tests/CustomSystemUpdater/custom_base.yaml delete mode 100644 build/tests/CustomSystemUpdater/default.yaml delete mode 100755 build/tests/CustomSystemUpdater/makecsu.sh delete mode 100755 build/tests/CustomSystemUpdater/romchecker.rb delete mode 100755 build/tests/CustomSystemUpdater/sumaker.rb delete mode 100644 build/tests/CustomSystemUpdater/template/ARM9.TWL/main.rsf delete mode 100644 build/tests/CustomSystemUpdater/template/ARM9.TWL/src/main.c delete mode 100755 build/tests/CustomSystemUpdater/work/aftercls.sh delete mode 100755 build/tests/CustomSystemUpdater/work/cls.sh delete mode 100644 build/tests/CustomSystemUpdater/work/mkcls.py delete mode 100755 build/tests/CustomSystemUpdater/work/pickup_tad.dev.sh delete mode 100755 build/tests/CustomSystemUpdater/work/pickup_tad.pl delete mode 100755 build/tests/CustomSystemUpdater/work/toaqua.rb delete mode 100755 build/tests/CustomSystemUpdater/work/tocls.sh delete mode 100755 build/tests/CustomSystemUpdater/work/tocsu.sh delete mode 100755 build/tests/CustomSystemUpdater/work/util.pl delete mode 100644 build/tests/DisableDebugFlgChecker/Makefile delete mode 100644 build/tests/DisableDebugFlgChecker/include/common.h delete mode 100644 build/tests/DisableDebugFlgChecker/include/font.h delete mode 100644 build/tests/DisableDebugFlgChecker/include/screen.h delete mode 100644 build/tests/DisableDebugFlgChecker/main.rsf delete mode 100644 build/tests/DisableDebugFlgChecker/src/common.c delete mode 100644 build/tests/DisableDebugFlgChecker/src/font.c delete mode 100644 build/tests/DisableDebugFlgChecker/src/main.c delete mode 100644 build/tests/DisableDebugFlgChecker/src/screen.c delete mode 100644 build/tests/DispOwnerInfo/Makefile delete mode 100644 build/tests/DispOwnerInfo/banner/Makefile delete mode 100644 build/tests/DispOwnerInfo/banner/myGameBanner.bsf delete mode 100644 build/tests/DispOwnerInfo/banner/myGameIcon.bmp delete mode 100644 build/tests/DispOwnerInfo/data/NITRO_LC_Font_s.bncmp delete mode 100644 build/tests/DispOwnerInfo/data/NITRO_LC_Font_s.bnfr delete mode 100644 build/tests/DispOwnerInfo/font/f08han.dat delete mode 100644 build/tests/DispOwnerInfo/font/f08zen.dat delete mode 100644 build/tests/DispOwnerInfo/font/f10han.dat delete mode 100644 build/tests/DispOwnerInfo/font/f10zen.dat delete mode 100644 build/tests/DispOwnerInfo/font/f12han.dat delete mode 100644 build/tests/DispOwnerInfo/font/f12zen.dat delete mode 100644 build/tests/DispOwnerInfo/font/f16han.dat delete mode 100644 build/tests/DispOwnerInfo/font/f16zen.dat delete mode 100644 build/tests/DispOwnerInfo/include/fnt.h delete mode 100644 build/tests/DispOwnerInfo/include/fnt/fnt_data.h delete mode 100644 build/tests/DispOwnerInfo/include/fnt/fnt_enum.h delete mode 100644 build/tests/DispOwnerInfo/include/fnt/fnt_func.h delete mode 100644 build/tests/DispOwnerInfo/include/fnt/fnt_struct.h delete mode 100644 build/tests/DispOwnerInfo/main.rsf delete mode 100644 build/tests/DispOwnerInfo/mlib/ARM9-TS/Release/libfnt.a delete mode 100644 build/tests/DispOwnerInfo/mlib/ARM9-TS/Rom/libfnt.a delete mode 100644 build/tests/DispOwnerInfo/readme.txt delete mode 100644 build/tests/DispOwnerInfo/src/NitroConfigData.h delete mode 100644 build/tests/DispOwnerInfo/src/data.c delete mode 100644 build/tests/DispOwnerInfo/src/data.h delete mode 100644 build/tests/DispOwnerInfo/src/dispNCD.c delete mode 100644 build/tests/DispOwnerInfo/src/font.c delete mode 100644 build/tests/DispOwnerInfo/src/font.h delete mode 100644 build/tests/DispOwnerInfo/src/initFunc.c delete mode 100644 build/tests/DispOwnerInfo/src/main.c delete mode 100644 build/tests/DispOwnerInfo/src/main.h delete mode 100644 build/tests/DispOwnerInfo/src/myChar.c delete mode 100644 build/tests/DispOwnerInfo/src/myFunc.c delete mode 100644 build/tests/DispOwnerInfo/src/myFunc.h delete mode 100644 build/tests/DisplaySystemInformation/ARM7/Makefile delete mode 100644 build/tests/DisplaySystemInformation/ARM7/armadillo.lcf.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7/armadillo.lsf delete mode 100644 build/tests/DisplaySystemInformation/ARM7/armadillo.response.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7/src/main.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/Makefile delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lcf.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lsf delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.response.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/src/crt0.SCR.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/src/main.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7_armadillo/src/overwriteRtc.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/Makefile delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c delete mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.0 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.1 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.10 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.11 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.12 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.13 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.14 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.15 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.16 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.17 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.2 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.3 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.4 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.5 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.6 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.7 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.8 delete mode 100644 build/tests/DisplaySystemInformation/ARM9/Makefile.9 delete mode 100755 build/tests/DisplaySystemInformation/ARM9/filemove.rb delete mode 100644 build/tests/DisplaySystemInformation/ARM9/main_normal.rsf delete mode 100644 build/tests/DisplaySystemInformation/ARM9/main_secure.rsf delete mode 100644 build/tests/DisplaySystemInformation/ARM9/makeConditions.txt delete mode 100644 build/tests/DisplaySystemInformation/ARM9/makeFooter.txt delete mode 100644 build/tests/DisplaySystemInformation/ARM9/makeHeader.txt delete mode 100755 build/tests/DisplaySystemInformation/ARM9/makeMaking.rb delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/control.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/control.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/getInformation.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_font.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_hw.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_other.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_owner.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_parental.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_scfg.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_secureUser.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_sysmenu.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_versionData.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_whitelist.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/get_wl.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/infodata.xls delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/main.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/misc.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/misc.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/strResource.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/strResource.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/util.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/util.h delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c delete mode 100644 build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h delete mode 100644 build/tests/DisplaySystemInformation/Makefile delete mode 100644 build/tests/DisplaySystemInformation/banner/MakeFooter.txt delete mode 100644 build/tests/DisplaySystemInformation/banner/MakeHeader.txt delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.020A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.021A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.022A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.023A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.024A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.025A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B0A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B1A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B2A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B3A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B4A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B5A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B6A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B7A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B8A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0B9A delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0BAA delete mode 100644 build/tests/DisplaySystemInformation/banner/Makefile.0BBA delete mode 100644 build/tests/DisplaySystemInformation/banner/banner020A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner021A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner022A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner023A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner024A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner025A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B0A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B1A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B2A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B3A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B4A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B5A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B6A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B7A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B8A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0B9A_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0BAA_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/banner0BBA_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/bannerOption.txt delete mode 100644 build/tests/DisplaySystemInformation/banner/banner_v3.bsf delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/020A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/021A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/022A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/023A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/024A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/025A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B0A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B1A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B2A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B3A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B4A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B5A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B6A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B7A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B8A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0B9A.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0BAA.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/0BBA.bmp delete mode 100644 build/tests/DisplaySystemInformation/banner/icon/gameIcon.bmp delete mode 100755 build/tests/DisplaySystemInformation/banner/makeMaker.rb delete mode 100644 build/tests/DisplaySystemInformation/common/include/address.h delete mode 100644 build/tests/ETicketViewer/Makefile delete mode 100644 build/tests/ETicketViewer/ROM-TS_sys.rsf delete mode 100644 build/tests/ETicketViewer/include/common.h delete mode 100644 build/tests/ETicketViewer/include/font.h delete mode 100644 build/tests/ETicketViewer/include/screen.h delete mode 100644 build/tests/ETicketViewer/src/common.c delete mode 100644 build/tests/ETicketViewer/src/font.c delete mode 100644 build/tests/ETicketViewer/src/main.c delete mode 100644 build/tests/ETicketViewer/src/screen.c delete mode 100644 build/tests/ErrorLogTest/ARM9/Makefile delete mode 100644 build/tests/ErrorLogTest/ARM9/Makefile.0 delete mode 100644 build/tests/ErrorLogTest/ARM9/Makefile.1 delete mode 100644 build/tests/ErrorLogTest/ARM9/main.rsf delete mode 100644 build/tests/ErrorLogTest/ARM9/src/ErrorLogTest.c delete mode 100644 build/tests/ErrorLogTest/Makefile delete mode 100644 build/tests/ErrorLogTest/about.txt delete mode 100644 build/tests/ErrorLogTest/banner/Makefile delete mode 100644 build/tests/ErrorLogTest/banner/banner_v3.bsf delete mode 100644 build/tests/ErrorLogTest/banner/icon/gameIcon.bmp delete mode 100644 build/tests/FakeRomHeader/Makefile delete mode 100644 build/tests/FakeRomHeader/README.html delete mode 100644 build/tests/FakeRomHeader/README.txt delete mode 100644 build/tests/FakeRomHeader/keys.c delete mode 100644 build/tests/FakeRomHeader/keys.h delete mode 100644 build/tests/FakeRomHeader/main.c delete mode 100644 build/tests/FakeRomHeader/ビルド方法.txt delete mode 100644 build/tests/FatalErrorChecker/ARM9/Makefile delete mode 100644 build/tests/FatalErrorChecker/ARM9/main.rsf delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/font_data.c delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/graphics.c delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/graphics.h delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/kami_font.c delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/kami_font.h delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/keypad.c delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/keypad.h delete mode 100644 build/tests/FatalErrorChecker/ARM9/src/main.c delete mode 100644 build/tests/FatalErrorChecker/Makefile delete mode 100644 build/tests/FatalErrorChecker/banner/Makefile delete mode 100644 build/tests/FatalErrorChecker/banner/banner_v3.bsf delete mode 100644 build/tests/FatalErrorChecker/banner/icon/gameIcon.bmp delete mode 100644 build/tests/FatalErrorMaker/ARM9/Makefile delete mode 100644 build/tests/FatalErrorMaker/ARM9/Makefile.0 delete mode 100644 build/tests/FatalErrorMaker/ARM9/Makefile.1 delete mode 100644 build/tests/FatalErrorMaker/ARM9/main.rsf delete mode 100644 build/tests/FatalErrorMaker/ARM9/src/fatalErrorMaker.c delete mode 100644 build/tests/FatalErrorMaker/ARM9/src/fatalErrorMaker.h delete mode 100644 build/tests/FatalErrorMaker/ARM9/src/main.c delete mode 100644 build/tests/FatalErrorMaker/Makefile delete mode 100644 build/tests/FatalErrorMaker/about.txt delete mode 100644 build/tests/FatalErrorMaker/banner/Makefile delete mode 100644 build/tests/FatalErrorMaker/banner/Makefile.012A delete mode 100644 build/tests/FatalErrorMaker/banner/Makefile.0G4A delete mode 100644 build/tests/FatalErrorMaker/banner/banner.bnr delete mode 100644 build/tests/FatalErrorMaker/banner/banner012A_v3.bsf delete mode 100644 build/tests/FatalErrorMaker/banner/banner0G4A_v3.bsf delete mode 100644 build/tests/FatalErrorMaker/banner/bannerOption.txt delete mode 100644 build/tests/FatalErrorMaker/banner/banner_v3.bsf delete mode 100644 build/tests/FatalErrorMaker/banner/icon/012A.bmp delete mode 100644 build/tests/FatalErrorMaker/banner/icon/0G4A.bmp delete mode 100644 build/tests/FatalErrorMaker/banner/icon/gameIcon.bmp delete mode 100644 build/tests/FileRecoveryTest/Makefile delete mode 100644 build/tests/FileRecoveryTest/main.rsf delete mode 100644 build/tests/FileRecoveryTest/src/main.c delete mode 100644 build/tests/HashCheckTemplate/ARM7/Makefile delete mode 100644 build/tests/HashCheckTemplate/ARM7/Makefile_hyb delete mode 100644 build/tests/HashCheckTemplate/ARM7/Makefile_ltd delete mode 100644 build/tests/HashCheckTemplate/ARM7/Makefile_ltd_offset delete mode 100644 build/tests/HashCheckTemplate/ARM7/mongoose_hct.lsf delete mode 100644 build/tests/HashCheckTemplate/ARM7/racoon_hct.lsf delete mode 100644 build/tests/HashCheckTemplate/ARM9/Makefile delete mode 100644 build/tests/HashCheckTemplate/ARM9/Makefile_hyb delete mode 100644 build/tests/HashCheckTemplate/ARM9/Makefile_ltd delete mode 100644 build/tests/HashCheckTemplate/ARM9/main.rsf delete mode 100644 build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.c delete mode 100644 build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.h delete mode 100644 build/tests/HashCheckTemplate/ARM9/src/main.c delete mode 100644 build/tests/HashCheckTemplate/Makefile delete mode 100644 build/tests/HashCheckTemplate/banner/Makefile delete mode 100644 build/tests/HashCheckTemplate/banner/banner_v3.bsf delete mode 100644 build/tests/HashCheckTemplate/banner/icon/gameIcon.bmp delete mode 100644 build/tests/HashCheckTemplate/crt/ARM7/Makefile delete mode 100644 build/tests/HashCheckTemplate/crt/ARM7/Makefile_hyb delete mode 100644 build/tests/HashCheckTemplate/crt/ARM7/Makefile_ltd delete mode 100644 build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.HYB.c delete mode 100644 build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.LTD.c delete mode 100644 build/tests/HashCheckTemplate/crt/Makefile delete mode 100644 build/tests/HashCheckTemplate/crt/common/include/boot_sync.h delete mode 100644 build/tests/HashCheckTemplate/memo.txt delete mode 100644 build/tests/HashCheckTemplate/test_roms/rombreak.bat delete mode 100644 build/tests/HashCheckTemplate/test_roms/破壊ずみROMの作り方.txt delete mode 100644 build/tests/JumpToSettingForZonetest/ARM9.TWL/Makefile delete mode 100644 build/tests/JumpToSettingForZonetest/ARM9.TWL/include/font.h delete mode 100644 build/tests/JumpToSettingForZonetest/ARM9.TWL/include/keypad.h delete mode 100644 build/tests/JumpToSettingForZonetest/ARM9.TWL/include/screen.h delete mode 100644 build/tests/JumpToSettingForZonetest/ARM9.TWL/main.rsf delete mode 100644 build/tests/JumpToSettingForZonetest/ARM9.TWL/src/font.c delete mode 100644 build/tests/JumpToSettingForZonetest/ARM9.TWL/src/keypad.c delete mode 100644 build/tests/JumpToSettingForZonetest/ARM9.TWL/src/main.c delete mode 100644 build/tests/JumpToSettingForZonetest/ARM9.TWL/src/screen.c delete mode 100644 build/tests/JumpToSettingForZonetest/Makefile delete mode 100644 build/tests/JumpToSettingForZonetest/banner/Makefile delete mode 100644 build/tests/JumpToSettingForZonetest/banner/banner_v3.bsf delete mode 100644 build/tests/JumpToSettingForZonetest/banner/icon/gameIcon.bmp delete mode 100644 build/tests/Launcher_sdlog/Makefile delete mode 100644 build/tests/Launcher_sdlog/jackal.TWL/Makefile delete mode 100755 build/tests/Launcher_sdlog/jackal.TWL/make_lsf.pl delete mode 100644 build/tests/Launcher_sdlog/readme.txt delete mode 100644 build/tests/Launcher_sdlog/scripts/Makefile delete mode 100755 build/tests/Launcher_sdlog/scripts/sdlog_main_c.pl delete mode 100755 build/tests/Launcher_sdlog/scripts/sdlog_makefile.pl delete mode 100644 build/tests/Launcher_sdlog/sdlog/ARM7.TWL/Makefile delete mode 100644 build/tests/Launcher_sdlog/sdlog/ARM7.TWL/src/os_printf.c delete mode 100644 build/tests/Launcher_sdlog/sdlog/ARM9.TWL/Makefile delete mode 100644 build/tests/Launcher_sdlog/sdlog/ARM9.TWL/include/sd_log_wrapper.h delete mode 100644 build/tests/Launcher_sdlog/sdlog/ARM9.TWL/src/sd_log_wrapper.c delete mode 100644 build/tests/Launcher_sdlog/sdlog/Makefile delete mode 100644 build/tests/Makefile delete mode 100644 build/tests/NotLaunchRom/Makefile delete mode 100644 build/tests/NotLaunchRom/Makefile.0 delete mode 100644 build/tests/NotLaunchRom/Makefile.1 delete mode 100644 build/tests/NotLaunchRom/Makefile.2 delete mode 100644 build/tests/NotLaunchRom/include/data.h delete mode 100644 build/tests/NotLaunchRom/secure.rsf delete mode 100644 build/tests/NotLaunchRom/src/data.c delete mode 100644 build/tests/NotLaunchRom/src/main.c delete mode 100644 build/tests/NotLaunchRom/system.rsf delete mode 100644 build/tests/NotLaunchRom/user.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.0 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.1 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.2 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.3 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.4 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.5 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.6 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.7 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.8 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.9 delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.a delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.b delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.c delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.h delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.i delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.j delete mode 100644 build/tests/RomTypeTest/ARM9/Makefile.k delete mode 100644 build/tests/RomTypeTest/ARM9/main0.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main1.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main2.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main3.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main4.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main5.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main6.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main7.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main8.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/main9.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/maina.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/mainb.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/mainc.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/mainh.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/maini.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/mainj.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/maink.rsf delete mode 100644 build/tests/RomTypeTest/ARM9/src/RomTypeTest.c delete mode 100644 build/tests/RomTypeTest/ARM9/src/RomTypeTest.h delete mode 100644 build/tests/RomTypeTest/ARM9/src/main.c delete mode 100644 build/tests/RomTypeTest/Makefile delete mode 100644 build/tests/RomTypeTest/banner/Makefile delete mode 100644 build/tests/RomTypeTest/banner/Makefile.0 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.1 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.2 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.3 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.4 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.5 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.6 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.7 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.8 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.9 delete mode 100644 build/tests/RomTypeTest/banner/Makefile.a delete mode 100644 build/tests/RomTypeTest/banner/Makefile.b delete mode 100644 build/tests/RomTypeTest/banner/Makefile.c delete mode 100644 build/tests/RomTypeTest/banner/Makefile.d delete mode 100644 build/tests/RomTypeTest/banner/Makefile.e delete mode 100644 build/tests/RomTypeTest/banner/Makefile.f delete mode 100644 build/tests/RomTypeTest/banner/Makefile.g delete mode 100644 build/tests/RomTypeTest/banner/Makefile.h delete mode 100644 build/tests/RomTypeTest/banner/Makefile.i delete mode 100644 build/tests/RomTypeTest/banner/Makefile.j delete mode 100644 build/tests/RomTypeTest/banner/Makefile.k delete mode 100644 build/tests/RomTypeTest/banner/banner_v3.bsf delete mode 100644 build/tests/RomTypeTest/banner/icon/gameIcon.bmp delete mode 100644 build/tests/RomTypeTest/banner/icon/msk_pictchat_icon.bin delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_0_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_1_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_2_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_3_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_4_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_5_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_6_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_7_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_8_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_9_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_a_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_b_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_c_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_d_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_e_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_f_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_g_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_h_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_i_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_j_v3.TWL.bsf delete mode 100644 build/tests/RomTypeTest/banner/test-utf16_k_v3.TWL.bsf delete mode 100644 build/tests/Shared2File/Makefile delete mode 100644 build/tests/Shared2File/main.rsf delete mode 100644 build/tests/Shared2File/src/main.c delete mode 100644 build/tests/SimpleBenchmark/ARM9/ARM9-TS.lcf.template delete mode 100644 build/tests/SimpleBenchmark/ARM9/ARM9-TS.lsf delete mode 100644 build/tests/SimpleBenchmark/ARM9/Makefile delete mode 100644 build/tests/SimpleBenchmark/ARM9/Makefile.0 delete mode 100644 build/tests/SimpleBenchmark/ARM9/Makefile.1 delete mode 100644 build/tests/SimpleBenchmark/ARM9/main0.rsf delete mode 100644 build/tests/SimpleBenchmark/ARM9/main1.rsf delete mode 100644 build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.c delete mode 100644 build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.h delete mode 100644 build/tests/SimpleBenchmark/ARM9/src/main.c delete mode 100644 build/tests/SimpleBenchmark/Makefile delete mode 100644 build/tests/SimpleBenchmark/banner/Makefile delete mode 100644 build/tests/SimpleBenchmark/banner/Makefile.0 delete mode 100644 build/tests/SimpleBenchmark/banner/Makefile.1 delete mode 100644 build/tests/SimpleBenchmark/banner/banner_v3.bsf delete mode 100644 build/tests/SimpleBenchmark/banner/icon/gameIcon.bmp delete mode 100644 build/tests/SimpleBenchmark/banner/icon/msk_pictchat_icon.bin delete mode 100644 build/tests/SimpleBenchmark/banner/test-utf16_0_v3.TWL.bsf delete mode 100644 build/tests/SimpleBenchmark/banner/test-utf16_1_v3.TWL.bsf delete mode 100644 build/tests/TestComponent/ARM7.TWL/Makefile delete mode 100644 build/tests/TestComponent/ARM7.TWL/armadillo.lsf delete mode 100644 build/tests/TestComponent/ARM7.TWL/include/kami_pxi.h delete mode 100644 build/tests/TestComponent/ARM7.TWL/src/crt0.SCFG_NOLOCK.c delete mode 100644 build/tests/TestComponent/ARM7.TWL/src/kami_pxi.c delete mode 100644 build/tests/TestComponent/ARM7.TWL/src/main.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/ARM9-TS.lsf delete mode 100644 build/tests/TestComponent/ARM9.TWL/Makefile delete mode 100644 build/tests/TestComponent/ARM9.TWL/include/graphics.h delete mode 100644 build/tests/TestComponent/ARM9.TWL/include/kami_font.h delete mode 100644 build/tests/TestComponent/ARM9.TWL/include/kami_pxi.h delete mode 100644 build/tests/TestComponent/ARM9.TWL/include/keypad.h delete mode 100644 build/tests/TestComponent/ARM9.TWL/main.rsf delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/font_data.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/graphics.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/kami_font.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/kami_pxi.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/keypad.c delete mode 100644 build/tests/TestComponent/ARM9.TWL/src/main.c delete mode 100644 build/tests/TestComponent/Makefile delete mode 100644 build/tests/TestComponent/banner/Makefile delete mode 100644 build/tests/TestComponent/banner/banner_v3.bsf delete mode 100644 build/tests/TestComponent/banner/icon/gameIcon.bmp delete mode 100644 build/tests/TestComponent/common/include/fifo.h delete mode 100644 build/tests/TestMaker/Makefile delete mode 100644 build/tests/TestMaker/banner/dummy/Cell/Cell0.nce delete mode 100644 build/tests/TestMaker/banner/dummy/Character/banner_anm_idea03_ALL.ncg delete mode 100644 build/tests/TestMaker/banner/dummy/ColorPalette/banner_anm_idea03.ncl delete mode 100644 build/tests/TestMaker/banner/dummy/Preview/Preview0.npv delete mode 100644 build/tests/TestMaker/banner/dummy/Scene/Scene0.nsn delete mode 100644 build/tests/TestMaker/banner/dummy/workset.ini delete mode 100644 build/tests/TestMaker/banner/eula/Cell/Cell0.nce delete mode 100644 build/tests/TestMaker/banner/eula/Character/eula.ncg delete mode 100644 build/tests/TestMaker/banner/eula/ColorPalette/eula.ncl delete mode 100644 build/tests/TestMaker/banner/eula/Preview/Preview0.npv delete mode 100644 build/tests/TestMaker/banner/eula/Scene/Scene0.nsn delete mode 100644 build/tests/TestMaker/banner/eula/workset.ini delete mode 100644 build/tests/TestMaker/banner/font/Cell/Cell0.nce delete mode 100644 build/tests/TestMaker/banner/font/Character/font.ncg delete mode 100644 build/tests/TestMaker/banner/font/ColorPalette/font.ncl delete mode 100644 build/tests/TestMaker/banner/font/Preview/Preview0.npv delete mode 100644 build/tests/TestMaker/banner/font/Scene/Scene0.nsn delete mode 100644 build/tests/TestMaker/banner/font/workset.ini delete mode 100644 build/tests/TestMaker/banner/parental/Cell/Cell0.nce delete mode 100644 build/tests/TestMaker/banner/parental/Character/parental_control.ncg delete mode 100644 build/tests/TestMaker/banner/parental/ColorPalette/parental_control.ncl delete mode 100644 build/tests/TestMaker/banner/parental/Preview/Preview0.npv delete mode 100644 build/tests/TestMaker/banner/parental/Scene/Scene0.nsn delete mode 100644 build/tests/TestMaker/banner/parental/workset.ini delete mode 100644 build/tests/TestMaker/banner/shop/Cell/Cell0.nce delete mode 100644 build/tests/TestMaker/banner/shop/Character/banner_anm_idea03_ALL.ncg delete mode 100644 build/tests/TestMaker/banner/shop/ColorPalette/banner_anm_idea03.ncl delete mode 100644 build/tests/TestMaker/banner/shop/Preview/Preview0.npv delete mode 100644 build/tests/TestMaker/banner/shop/Scene/Scene0.nsn delete mode 100644 build/tests/TestMaker/banner/shop/workset.ini delete mode 100644 build/tests/TestMaker/config/ROM-TS_nand_forPARENTAL.rsf delete mode 100644 build/tests/TestMaker/config/romparam_forBoottest.yaml delete mode 100644 build/tests/TestMaker/config/romparam_forCLStest.yaml delete mode 100644 build/tests/TestMaker/config/romparam_forEULAtest.yaml delete mode 100644 build/tests/TestMaker/config/romparam_forFATFSPermissiontest.yaml delete mode 100644 build/tests/TestMaker/config/romparam_forShoptest.yaml delete mode 100644 build/tests/TestMaker/config/twl_parentalcontrol_spec.yaml delete mode 100644 build/tests/TestMaker/doc/20080617_DS_fontcodeList_NOE_FIANL.xls delete mode 100644 build/tests/TestMaker/doc/twl_cls_checksheet_20080508.xls delete mode 100644 build/tests/TestMaker/doc/twl_parentalcontrol_spec_20080704.xls delete mode 100644 build/tests/TestMaker/readme.txt delete mode 100644 build/tests/TestMaker/romparam.yaml delete mode 100644 build/tests/TestMaker/rsf/ROM-TS_custom.rsf delete mode 100644 build/tests/TestMaker/script/clsdir.py delete mode 100644 build/tests/TestMaker/script/config.py delete mode 100644 build/tests/TestMaker/script/fontcode.py delete mode 100644 build/tests/TestMaker/script/parentalcontrol.py delete mode 100644 build/tests/TestMaker/script/rename_eula.py delete mode 100644 build/tests/TestMaker/script/rename_font.py delete mode 100644 build/tests/TestMaker/script/rename_parental.py delete mode 100644 build/tests/TitleHashChecker/ARM7.TWL/Makefile delete mode 100644 build/tests/TitleHashChecker/ARM7.TWL/armadillo.lsf delete mode 100644 build/tests/TitleHashChecker/ARM7.TWL/include/kami_pxi.h delete mode 100644 build/tests/TitleHashChecker/ARM7.TWL/src/kami_pxi.c delete mode 100644 build/tests/TitleHashChecker/ARM7.TWL/src/main.c delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/ARM9-TS.lsf delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/Makefile delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/include/common.h delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/include/font.h delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/include/kami_pxi.h delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/include/screen.h delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/main.rsf delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/src/common.c delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/src/font.c delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/src/kami_pxi.c delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/src/main.c delete mode 100644 build/tests/TitleHashChecker/ARM9.TWL/src/screen.c delete mode 100644 build/tests/TitleHashChecker/Makefile delete mode 100644 build/tests/TitleHashChecker/banner/Makefile delete mode 100644 build/tests/TitleHashChecker/banner/banner_v3.bsf delete mode 100644 build/tests/TitleHashChecker/banner/icon/gameIcon.bmp delete mode 100644 build/tests/TitleHashChecker/common/include/fifo.h delete mode 100644 build/tests/UjiPackage/Makefile delete mode 100644 build/tests/UjiPackage/readme.txt delete mode 100644 build/tests/WDSTest/Makefile delete mode 100644 build/tests/WDSTest/src/main.c delete mode 100644 build/tests/WDSWrapperTest/Makefile delete mode 100644 build/tests/WDSWrapperTest/src/main.c delete mode 100644 build/tests/WirelessChecker/@ delete mode 100644 build/tests/WirelessChecker/Makefile delete mode 100644 build/tests/WirelessChecker/banner/000A_WLCK.bmp delete mode 100644 build/tests/WirelessChecker/banner/000A_WLCK.bsf delete mode 100644 build/tests/WirelessChecker/banner/Makefile delete mode 100644 build/tests/WirelessChecker/components/Makefile delete mode 100644 build/tests/WirelessChecker/components/racoon_wckr/Makefile delete mode 100755 build/tests/WirelessChecker/components/racoon_wckr/make_lsf.pl delete mode 100644 build/tests/WirelessChecker/libraries/Makefile delete mode 100644 build/tests/WirelessChecker/libraries/nwm/ARM7/Makefile delete mode 100644 build/tests/WirelessChecker/libraries/nwm/ARM9/Makefile delete mode 100644 build/tests/WirelessChecker/libraries/nwm/Makefile delete mode 100644 build/tests/WirelessChecker/libraries/nwm/scripts/Makefile delete mode 100755 build/tests/WirelessChecker/libraries/nwm/scripts/make_nwm_fw_wrack.pl delete mode 100644 build/tests/WirelessChecker/readme.txt delete mode 100644 build/tests/WirelessChecker/resources/ds_ipl10.bmp delete mode 100644 build/tests/WirelessChecker/rsf/Makefile delete mode 100755 build/tests/WirelessChecker/rsf/make_rsf.pl delete mode 100644 build/tests/WirelessChecker/src/frame.cpp delete mode 100644 build/tests/WirelessChecker/src/frame.h delete mode 100644 build/tests/WirelessChecker/src/main.cpp delete mode 100644 build/tests/WirelessChecker/src/test.cpp delete mode 100644 build/tests/WirelessChecker/src/test.h delete mode 100644 build/tests/WirelessChecker/src/test_fatal.cpp delete mode 100644 build/tests/WirelessChecker/src/test_fatal.h delete mode 100644 build/tests/WirelessChecker/src/test_nwm.cpp delete mode 100644 build/tests/WirelessChecker/src/test_nwm.h delete mode 100644 build/tests/WirelessChecker/src/test_recovery.cpp delete mode 100644 build/tests/WirelessChecker/src/test_recovery.h delete mode 100644 build/tests/WirelessChecker/src/test_wm.cpp delete mode 100644 build/tests/WirelessChecker/src/test_wm.h delete mode 100644 build/tests/WirelessChecker/src/util/canvas.cpp delete mode 100644 build/tests/WirelessChecker/src/util/canvas.h delete mode 100644 build/tests/WirelessChecker/src/util/memory.cpp delete mode 100644 build/tests/WirelessChecker/src/util/memory.h delete mode 100644 build/tests/WirelessChecker/src/util/util.cpp delete mode 100644 build/tests/WirelessChecker/src/util/util.h delete mode 100644 build/tests/WirelessChecker/src/util/wprintf.cpp delete mode 100644 build/tests/WirelessChecker/src/util/wprintf.h delete mode 100644 build/tests/build4WLDev/Makefile delete mode 100644 build/tests/build4WLDev/Makefile_environment delete mode 100644 build/tests/build4WLDev/Makefile_old delete mode 100644 build/tests/build4WLDev/readme.txt delete mode 100644 build/tests/build4WLDev/scripts/Makefile delete mode 100644 build/tests/build4WLDev/scripts/Makefile_old delete mode 100755 build/tests/build4WLDev/scripts/launcher_MachineSetting_c.pl delete mode 100755 build/tests/build4WLDev/scripts/launcher_fake_macaddress.pl delete mode 100755 build/tests/build4WLDev/scripts/launcher_loadWlanFirm_c.pl delete mode 100755 build/tests/build4WLDev/scripts/launcher_makefile.pl delete mode 100755 build/tests/build4WLDev/scripts/launcher_makefile_region.pl delete mode 100755 build/tests/build4WLDev/scripts/systemupdater_source.pl delete mode 100644 build/tests/compressSharedFontLoad/README.txt delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/Makefile delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/Makefile delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/_ delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/common.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/main.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/genFontTable.plx delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/makeboot.bat delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/@ delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile.BAK delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile.BAK delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_main.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.c delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/types.h delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.sln delete mode 100644 build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.vcproj delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/Makefile delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/ROM-TS_nand.rsf delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/Makefile delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/os_sharedFont.c delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/sharedFont.h delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.c delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.h delete mode 100644 build/tests/compressSharedFontLoad/testLoadSpeed/src/main.c delete mode 100644 build/tests/yuv2rgb/Makefile delete mode 100644 build/tests/yuv2rgb/data/camera_shutter.dat delete mode 100644 build/tests/yuv2rgb/data/camera_shutter_MONO.dat delete mode 100644 build/tests/yuv2rgb/data/wheel.dat delete mode 100644 build/tests/yuv2rgb/include/const.h delete mode 100644 build/tests/yuv2rgb/include/menuCameraManager.h delete mode 100644 build/tests/yuv2rgb/include/new.h delete mode 100644 build/tests/yuv2rgb/include/snd_data.h delete mode 100644 build/tests/yuv2rgb/include/yuv2rgb.h delete mode 100644 build/tests/yuv2rgb/readme.txt delete mode 100644 build/tests/yuv2rgb/redipl_defs_autogen_by_uig delete mode 100644 build/tests/yuv2rgb/src/cpu_yuv2rgb.c delete mode 100644 build/tests/yuv2rgb/src/dsp_yuv2rgb.c delete mode 100644 build/tests/yuv2rgb/src/mainy.cpp delete mode 100644 build/tests/yuv2rgb/src/menuCameraManager.cpp delete mode 100644 build/tests/yuv2rgb/src/menuIrqHandler.c delete mode 100644 build/tests/yuv2rgb/src/menuIrqHandler.h delete mode 100644 build/tests/yuv2rgb/src/new.cpp delete mode 100644 build/tests/yuv2rgb/src/snd_data.c delete mode 100644 build/tests/yuv2rgb/yuv2rgb.rsf.template diff --git a/build/tests/AppVersionViewer/ARM9/Makefile b/build/tests/AppVersionViewer/ARM9/Makefile deleted file mode 100644 index 5e20a362..00000000 --- a/build/tests/AppVersionViewer/ARM9/Makefile +++ /dev/null @@ -1,150 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 0 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = FALSE -INVISIBLE_SCFG = TRUE -GAMECODE = 0BZA -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=N -DVERSION_VIEWER=TRUE -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCDIR = $(DISP_INFO)/ARM9/src - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c \ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_NAME = AppVersionViewer -TARGET_BIN = $(TARGET_NAME).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - liberrorlog$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE) -OBJDIR = ./obj/$(TWL_BUILDTYPE) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = $(DISP_INFO)/ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/AppVersionViewer/ARM9/main.rsf b/build/tests/AppVersionViewer/ARM9/main.rsf deleted file mode 100644 index 36a4c3fe..00000000 --- a/build/tests/AppVersionViewer/ARM9/main.rsf +++ /dev/null @@ -1,248 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - - # TITLE NAME: Your product name within 12bytes - # - TitleName "DispInfo" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - RomHeaderTemplate $(ROM_HEADER_TEMPLATE) - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile ../banner/banner.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess $(DISPINFO_SDACCESS) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess $(DISPINFO_NANDACCESS) - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - LockSCFG $(DISPINFO_LOCKSCFG) - HwAESSlotA_SSLClientCert $(DISPINFO_AES) - DisableDebug TRUE - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - #Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType $(DISPINFO_APPTYPE) -# AppType SYSTEM - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media $(DISPINFO_MEDIA) -# Media NAND - # - # Data only title : [TRUE/FALSE] - # don't have to edit - ##DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure $(DISPINFO_SECURE) -# Secure TRUE - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(DISPINFO_GAMECODE) - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile FALSE - -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR - -} diff --git a/build/tests/AppVersionViewer/banner/Makefile b/build/tests/AppVersionViewer/banner/Makefile deleted file mode 100644 index a6a3b396..00000000 --- a/build/tests/AppVersionViewer/banner/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/icon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/AppVersionViewer/banner/banner_v3.bsf b/build/tests/AppVersionViewer/banner/banner_v3.bsf deleted file mode 100644 index d3ede19aac9fe1d430c0c3ab0defd20898766412..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 884 zcmc(eO>4qH5Qg8Y1^>fB&b1W5gSS>pwMdbsdS9brz%P>6;Gb8Y-Sy-txwH%n^YPB) zoy_d@66sxuVi`SqG5A({WTl*Fq9ay{6)V#gyR9chcXX)v8y&uD^rH<-3K*^LjEr_V z5h;l+U}#jqJ;N{Y_V}6CDV3H?LDXSq^op6}RXt5K{MX6cbaQw)c9{<69eav1Y(>td4zvke-|Hfn$k*A=wkI&%LC v3NGIID_XLRh0f>=e#s8{dO<37m4jNU19D5o>X&`EYqZ2t@;h*@W9WVZ-vxd7 diff --git a/build/tests/AppVersionViewer/banner/icon/icon.bmp b/build/tests/AppVersionViewer/banner/icon/icon.bmp deleted file mode 100644 index b2ddda22a01af1e882ca8bc549e33043518ca915..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb`D!41PO2t{et0XjmDoul`zle0(j07xu^L?5Jz?OQ8_7|hQH^Tq4EU8QUzKJmxb zFLEPW?Y_V!!jabYi%5z$>Agcl9f`;c=gVIN{nt!Q!;LE}dp&caJA~q9773&H!q8Rc z#jA#bts1K(-#N<=!T9kS`jB_v)HCym)nn#U-e@?OpObwNqkP5TY;T@d3mo$hmx`wL LrM`BTi$2LdA||>E diff --git a/build/tests/CalcHMAC_forBroadOn/Makefile b/build/tests/CalcHMAC_forBroadOn/Makefile deleted file mode 100644 index 755280bf..00000000 --- a/build/tests/CalcHMAC_forBroadOn/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CalcHMAC_forBroadOn -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM := TWL - -SRCS = CalcHMAC_forBroadOn.c - -TARGET_BIN = CalcHMAC_forBroadOn.srl - -TITLEID_LO = 0BRA - -ROM_SPEC = main.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -LINCLUDES = $(ROOT)/build/libraries/lcfg/ARM9.TWL/include -LLIBRARIES = liblcfg$(TWL_LIBSUFFIX).a - -ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' -endif - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ - -DPRIVKEY_PATH='$(TWL_IPL_RED_PRIVATE_ROOT)/keys/rsa' \ - -DCARD_REGION='$(CARD_REGION)' - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CalcHMAC_forBroadOn/main.rsf b/build/tests/CalcHMAC_forBroadOn/main.rsf deleted file mode 100644 index e35eb49e..00000000 --- a/build/tests/CalcHMAC_forBroadOn/main.rsf +++ /dev/null @@ -1,171 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - RomVersion 2 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 2G - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(PRIVKEY_PATH) - Root /key - File $(HWINFO_PRIVKEY) -} diff --git a/build/tests/CalcHMAC_forBroadOn/src/CalcHMAC_forBroadOn.c b/build/tests/CalcHMAC_forBroadOn/src/CalcHMAC_forBroadOn.c deleted file mode 100644 index 9019ea4e..00000000 --- a/build/tests/CalcHMAC_forBroadOn/src/CalcHMAC_forBroadOn.c +++ /dev/null @@ -1,368 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include -#include -#include -#include -#include -#include -#include "TWLStoreFile.h" - -// define data------------------------------------------------------------------ -#define HWINFO_PRIVKEY_PATH "rom:key/private_HWInfo.der" // ip閧 -#define RSA_KEY_LENGTH_1024 RSA_KEY_LENGTH -#define HWINFO_S_BODY_SIZE 0x1C - -#define PATH_K00A317_JP "sdmc:/hwinfo_s/HWInfo_S.K00A317_JP.dat" -#define PATH_K00A317_US "sdmc:/hwinfo_s/HWInfo_S.K00A317_US.dat" -#define PATH_K00A317_EU "sdmc:/hwinfo_s/HWInfo_S.K00A317_EU.dat" -#define PATH_K00A317_AU "sdmc:/hwinfo_s/HWInfo_S.K00A317_AU.dat" -#define PATH_K00A319_JP "sdmc:/hwinfo_s/HWInfo_S.K00A319_JP.dat" -#define PATH_K00A319_US "sdmc:/hwinfo_s/HWInfo_S.K00A319_US.dat" -#define PATH_K00A319_EU "sdmc:/hwinfo_s/HWInfo_S.K00A319_EU.dat" -#define PATH_K00A319_AU "sdmc:/hwinfo_s/HWInfo_S.K00A319_AU.dat" - -//------------------------------------------------------------------------------ -extern s32 CRYPTO_RSA_Sign_custom(CRYPTORSASignContext *context, CRYPTORSASignParam *param); - -//------------------------------------------------------------------------------ -static u8 s_privKey[ 4096 ] ATTRIBUTE_ALIGN(32); -static TSFHeader s_header; - -/*----------------------------------------------------------------------------*/ -static const u64 FuseID_K00A317 = 0x08a1080105112134LLU; -static const u64 FuseID_K00A319 = 0x08a1080105112122LLU; - -/*----------------------------------------------------------------------------*/ -static const u8 HWINFO_S_K00A317_JP[HWINFO_S_BODY_SIZE] = -{ - 0x01, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x00, /* region */ - 'T', 'J', 'N', '5', '6', '3', '2', '0', - '4', '0', '2', '0', 0x00, 'K', 0x00, /* serialNo */ - 'J', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A317_US[HWINFO_S_BODY_SIZE] = -{ - 0x26, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x01, /* region */ - 'T', 'N', '5', '6', '3', '2', '0', '4', - '0', '2', '0', 0x00, 0x00, 'K', 0x00, /* serialNo */ - 'E', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A317_EU[HWINFO_S_BODY_SIZE] = -{ - 0x3E, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x02, /* region */ - 'T', 'E', 'N', '5', '6', '3', '2', '0', - '4', '0', '2', '0', 0x00, 'K', 0x00, /* serialNo */ - 'P', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A317_AU[HWINFO_S_BODY_SIZE] = -{ - 0x02, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x03, /* region */ - 'T', 'A', 'N', '5', '6', '3', '2', '0', - '4', '0', '2', '0', 0x00, 'K', 0x00, /* serialNo */ - 'U', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - - -/*----------------------------------------------------------------------------*/ -static const u8 HWINFO_S_K00A319_JP[HWINFO_S_BODY_SIZE] = -{ - 0x01, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x00, /* region */ - 'T', 'J', 'N', '3', '5', '3', '8', '9', - '0', '3', '3', '4', 0x00, 'K', 0x00, /* serialNo */ - 'J', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A319_US[HWINFO_S_BODY_SIZE] = -{ - 0x26, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x01, /* region */ - 'T', 'N', '3', '5', '3', '8', '9', '0', - '3', '3', '4', 0x00, 0x00, 'K', 0x00, /* serialNo */ - 'E', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A319_EU[HWINFO_S_BODY_SIZE] = -{ - 0x3E, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x02, /* region */ - 'T', 'E', 'N', '3', '5', '3', '8', '9', - '0', '3', '3', '4', 0x00, 'K', 0x00, /* serialNo */ - 'P', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -static const u8 HWINFO_S_K00A319_AU[HWINFO_S_BODY_SIZE] = -{ - 0x02, 0x00, 0x00, 0x00, /* validLanguageBitmap */ - 0x00, 0x00, 0x00, 0x00, /* flags, rsv */ - 0x03, /* region */ - 'T', 'A', 'N', '3', '5', '3', '8', '9', - '0', '3', '3', '4', 0x00, 'K', 0x00, /* serialNo */ - 'U', 'A', 'N', 'H' /* launcherTitleID_Lo */ -}; - -//================================================================================ - -static void CalcHWSecureInfoHMAC( void *pDstHMAC, const void* body, u64 fuseID ) -{ - u8 key[SVC_SHA1_DIGEST_SIZE]; - int i; - SVC_CalcSHA1(key, &fuseID, sizeof(u64)); - SVC_CalcHMACSHA1( pDstHMAC, body, HWINFO_S_BODY_SIZE, key, SVC_SHA1_DIGEST_SIZE); - - OS_TPrintf( "key : " ); - for( i = 0; i < SVC_SHA1_DIGEST_SIZE; i++ ) { - OS_TPrintf( "%02x", key[ i ] ); - } - OS_TPrintf( "\n" ); - OS_TPrintf( "hmac: " ); - for( i = 0; i < SVC_SHA1_DIGEST_SIZE; i++ ) { - OS_TPrintf( "%02x", ((u8 *)pDstHMAC)[ i ] ); - } - OS_TPrintf( "\n" ); - - return; -} - -// ZoiBERGR[hȂj -static BOOL CalcSignature( void *pDstSign, const void *pSrc, u32 len, const u8 *pPrivKeyDER, u32 keyFileLen, u32 keyLen ) -{ - CRYPTORSASignContext context; - CRYPTORSASignInitParam initParam; - CRYPTORSASignParam param; - int result_len; - - initParam.key = (void*)pPrivKeyDER; - initParam.key_len = keyFileLen; - if( CRYPTO_RSA_SignInit(&context, &initParam) != 0 ) { - return FALSE; - } - - param.in = (void *)pSrc; - param.in_len = len; - param.out = pDstSign; - param.out_size = keyLen; - - result_len = CRYPTO_RSA_Sign_custom(&context, ¶m); - if( result_len != keyLen ) { - return FALSE; - } - - return CRYPTO_RSA_SignTerminate(&context) == 0 ? TRUE : FALSE; -} - - -static BOOL LCFGi_THW_WriteSecureInfoCustom( char *pPath, const LCFGTWLHWSecureInfo *pSrcInfo, u64 fuseID, const u8 *pPrivKeyDER, u32 keyFileLen ) -{ - TSFHeader header; - - // wb_ - MI_CpuClear8( &header, sizeof(TSFHeader) ); - header.version = LCFG_TWL_HWINFO_SECURE_VERSION; - header.bodyLength = sizeof( LCFGTWLHWSecureInfo ); - - // wb_Zo - { - u8 hmac_sha1[ SVC_SHA1_DIGEST_SIZE ]; - CalcHWSecureInfoHMAC( hmac_sha1, pSrcInfo, fuseID ); - if( !CalcSignature( (void *)header.digest.rsa, hmac_sha1, SVC_SHA1_DIGEST_SIZE, pPrivKeyDER, keyFileLen, RSA_KEY_LENGTH_1024 ) ) { - return FALSE; - } - } - - // t@C - (void)FS_CreateFileAuto( pPath, FS_PERMIT_R | FS_PERMIT_W ); - { -#define HWINFO_FILE_LEN ( 16 * 1024 ) - FSFile file[1]; - char *pBuffer = OS_Alloc( HWINFO_FILE_LEN ); - - if( !FS_OpenFileEx( file, pPath, FS_FILEMODE_RW ) ) { - return FALSE; - } - if( FS_SetFileLength( file, HWINFO_FILE_LEN ) != FS_RESULT_SUCCESS ) { - (void)FS_CloseFile( file ); - return FALSE; - } - if( pBuffer ) { - MI_CpuFillFast( pBuffer, 0xffffffff, HWINFO_FILE_LEN ); - (void)FS_WriteFile( file, pBuffer, HWINFO_FILE_LEN ); - } - (void)FS_CloseFile( file ); - } - - // Cg - if( !LCFGi_TSF_WriteFile( pPath, &header, (const void *)pSrcInfo, NULL ) ) { - return FALSE; - } - return TRUE; -} - - -// 閧̃[h -static BOOL ReadPrivateKey( void *pBuffer, u32 *pKeyFileLen, char *pPath ) -{ - BOOL retval = TRUE; - FSFile file; - - FS_InitFile( &file ); - if( !FS_OpenFileEx( &file, pPath, FS_FILEMODE_R ) ) - { - OS_TPrintf( "PrivateKey read failed.\n" ); - retval = FALSE; - }else { - *pKeyFileLen = FS_GetFileLength( &file ); - if( *pKeyFileLen > 0 ) { - if( FS_ReadFile( &file, pBuffer, (s32)*pKeyFileLen ) == *pKeyFileLen ) { - OS_TPrintf( "PrivateKey read succeeded.\n" ); - }else { - OS_TPrintf( "PrivateKey read failed.\n" ); - retval = FALSE; - } - } - FS_CloseFile( &file ); - } - return retval; -} - -/*---------------------------------------------------------------------------* - Name: InitAllocSystem - - Description: q[v쐬 OS_Alloc g悤ɂ܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void InitAllocSystem() -{ - void* newArenaLo; - OSHeapHandle hHeap; - - // CA[ĩAP[gVXe - newArenaLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetMainArenaLo(newArenaLo); - - // CA[iɃq[v쐬 - hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap); -} - -extern u64 g_HWInfoFuseROM; -extern char *g_pHwInfoPath; - - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void TwlMain(void) -{ - BOOL retval; - u32 keyLen; - - OS_Init(); - InitAllocSystem(); - (void)OS_SetIrqMask(0); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - (void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV); - FS_Init( FS_DMA_NOT_USE ); - CRYPTO_SetMemAllocator( OS_AllocFromMain, OS_FreeToMain, NULL ); - - OS_TPrintf("---- HMAC over HWInfo_S for PROD boards @ BroadOn ----\n"); - - if( !ReadPrivateKey( s_privKey, &keyLen, HWINFO_PRIVKEY_PATH ) ) { - OS_TPrintf("PrivateKey read failed.\n"); - }else { - OS_TPrintf("TS-Board: K00A317\n"); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A317_JP, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A317_JP, FuseID_K00A317, s_privKey, keyLen ); - OS_TPrintf(" JP: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A317_US, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A317_US, FuseID_K00A317, s_privKey, keyLen ); - OS_TPrintf(" US: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A317_EU, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A317_EU, FuseID_K00A317, s_privKey, keyLen ); - OS_TPrintf(" EU: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A317_AU, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A317_AU, FuseID_K00A317, s_privKey, keyLen ); - OS_TPrintf(" AU: %s\n", retval ? "succeeded" : "failed" ); - - OS_TPrintf("TS-Board: K00A319\n"); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A319_JP, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A319_JP, FuseID_K00A319, s_privKey, keyLen ); - OS_TPrintf(" JP: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A319_US, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A319_US, FuseID_K00A319, s_privKey, keyLen ); - OS_TPrintf(" US: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A319_EU, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A319_EU, FuseID_K00A319, s_privKey, keyLen ); - OS_TPrintf(" EU: %s\n", retval ? "succeeded" : "failed" ); - retval = LCFGi_THW_WriteSecureInfoCustom( PATH_K00A319_AU, (const LCFGTWLHWSecureInfo *)HWINFO_S_K00A319_AU, FuseID_K00A319, s_privKey, keyLen ); - OS_TPrintf(" AU: %s\n", retval ? "succeeded" : "failed" ); - } -#if 0 - OS_TPrintf("---- Verify phase ----\n"); - { - OS_TPrintf("TS-Board: K00A317\n"); - g_HWInfoFuseROM = FuseID_K00A317; - g_pHwInfoPath = PATH_K00A317_JP; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" JP: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A317_US; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" US: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A317_EU; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" EU: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A317_AU; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" AU: %s\n", retval ? "succeeded" : "failed" ); - - OS_TPrintf("TS-Board: K00A319\n"); - g_HWInfoFuseROM = FuseID_K00A319; - g_pHwInfoPath = PATH_K00A319_JP; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" JP: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A319_US; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" US: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A319_EU; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" EU: %s\n", retval ? "succeeded" : "failed" ); - g_pHwInfoPath = PATH_K00A319_AU; - retval = LCFG_ReadHWSecureInfo(); - OS_TPrintf(" AU: %s\n", retval ? "succeeded" : "failed" ); - } -#endif - OS_Terminate(); -} diff --git a/build/tests/CardCopyMultiBoot/Makefile b/build/tests/CardCopyMultiBoot/Makefile deleted file mode 100644 index 83a76136..00000000 --- a/build/tests/CardCopyMultiBoot/Makefile +++ /dev/null @@ -1,207 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - MB - demos - card_copy -# File: Makefile -# -# Copyright 2009 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = banner - -# MBCũTv̓}`u[g@\g߁A -# ʐM‹(邢͗L)ǂ̊J@ނ𕡐KvƂ܂B -# $TwlSDK/bin/ARM9-TS/Release/ fBNgɂ -# mb_child.bin vOŏI@ɂ}`u[gq@Ɠ -# @\񋟂TvɂȂĂ܂̂ŁA -# ̃oCiTvvOƓ@ő̋@ނɓǂݍ݁A -# ꏏɎsĂB - -#---------------------------------------------------------------------------- - -TARGET_PLATFORM := TWL -TWL_ARCHGEN := HYBRID - -#------------------------- -#-- NAND Aṽrhw肵܂B - -TWL_NANDAPP = TRUE - -#---------------------------------------------------------------------------- -# ̃vOŎgp\[Xt@C͈ȉ̒ʂł. -#---------------------------------------------------------------------------- - -SRCDIR = ./src -INCDIR = ./include - -SRCS = main.c \ - common.c \ - disp.c \ - font.c \ - child.c \ - parent.c \ - text.c \ - -# Tv̊ȗ̂ WH W[gp܂. - -WH_DIR = $(ROOT)/build/demos/wireless_shared/wh -SRCDIR += $(WH_DIR) -INCDIR += $(WH_DIR) -SRCS += $(WH_DIR)/wh.c - -# Tv̊ȗ̂ MBP W[gp܂. - -MBP_DIR = $(ROOT)/build/demos/wireless_shared/mbp -SRCDIR += $(MBP_DIR) -INCDIR += $(MBP_DIR) -SRCS += $(MBP_DIR)/mbp.c - - -#---------------------------------------------------------------------------- -# AvP[V̈ʓIȐݒ͈ȉ̒ʂł. -#---------------------------------------------------------------------------- - -TARGET_BIN = card_copy.srl - -TWL_MAKEROM = TRUE - -# vO̊eZOgkꍇ͂̃tOLɂ܂. -# kꂽZOg CARD-ROM ł̃oCiTCY팸 -# CARD-ROM ܂̓CXoRł̃[hԂZk邩, -# s͓WĴ߂ɂ炩 CPU Ԃ܂. -TWL_COMPRESS = TRUE - -# CX_E[hq@ƂăI[o[Cgpꍇ, -# NITRO_DIGEST LɂKv܂. -TWL_DIGEST = TRUE - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - -ifeq ($(TARGET_PLATFORM),TWL) -ROM_SPEC = main.TWL.rsf -#LCFILE_SPEC = main.TWL.lsf -else -ROM_SPEC = main.rsf -#LCFILE_SPEC = main.lsf -endif - -# MB̃R[obNŕGȏꍇɂ́Alcft@C -# IRQX^bNTCY傫߂ɐݒ肵ĂSłB -# OS_Printf()͑ʂ̃X^bN̂ŁAR[obNł -# ł邾yʔłOS_TPrintf()gp悤ɂĂB - -#---------------------------------------------------------------------------- -# N[u[ge@ƂĂ̓ʂȐݒ͈ȉ̒ʂł. -#---------------------------------------------------------------------------- - -# ZLeBړI̐e@p̈ .parent ZNVzu邽 -# N[u[gpNݒev[gw肵܂. -# -# .parent ZNV̓eDS_E[hvCq@ɂ͑M܂. -# ̃ZNVɐe@p•K{̊֐zu邱Ƃɂ, -# T󂳂ꂽMee@gČ邱Ƃs”\ɂ܂. -# R[h̔zuɂĂ, ȉ̓_ɒӂĂ. -# E.text/.rodata ZNVȊO܂܂Ȃ -# Ee@݂̂KvƂdvȏ܂ނ -# -# .parent ZNV, YR[hɂ‚Ĉȉ̂悤ɔzu܂. -# -# #include -# -# void ForParentOnly(void) -# { -# /* e@ŗL̏ */ -# } -# -# #include -# -# ̃Tvfł parent.c ̑SĂ̊֐ .parent ZNV -# zuĂ܂. ڍׂ̓\[XR[hQƂ. - -ifeq ($(TARGET_PLATFORM),TWL) -LCFILE_TEMPLATE = $(TWL_SPECDIR)/ARM9-TS-cloneboot-C.lcf.template -else -LCFILE_TEMPLATE = $(NITRO_SPECDIR)/ARM9-TS-cloneboot-C.lcf.template -endif - -# iŃAvP[V̂߂ɊeX֔zzꂽ -# ȃVXeR[CuŎw肵܂. -# ̃Tvł͎bpƂāA炩߂̃fBNg, -# SDK t(lib/ARM9-TS/etc/libsyscall.a)̃Rs[uĂ܂D -# ̃fɂăAvP[Vꍇ́AЃT|[g -# zzĂĂ libsyscal.a ł̎bVXeR[ -# ㏑ĂD - -LIBSYSCALL = ./etc/libsyscall.a -LIBSYSCALL_CHILD = ./etc/libsyscall_child.bin - -#---------------------------------------------------------------------------- -# AvP[V𐻕iłŎs邽߂̎OF؎葱͈ȉ̒ʂł. -#---------------------------------------------------------------------------- - -# OF؎葱͂悻ȉ̗ɂȂ܂. -# ڍׂ́uDS_E[hvCvQƂ. -# (/docs/TechnicalNotes/AboutMultiBoot.doc) -# -# (0) N[u[gȂ emuchild R}hőMpvOpӂ܂. -# łȂ main.srl ̂܂ܗpӂ܂. -# makefile ł, pӂ̂ bin/sign.srl Ƃ܂. -# -# (1) F؃R[h擾̂, (0) ŗpӂ tmp/sign.srl T[o֑t܂. -# ̍Ƃ͂gp̃uEUƂōsKv܂. -# makefile ł, 擾F؃R[h bin/sign.sgn Ƃ܂. -# -# (2) attachsign R}hgp, (1) Ŏ擾 bin/sign.sgn -# main.srl ŏIvO𐶐܂. -# makefile ł, main_with_sign.srl Ƃ܂. -# - -# N[u[g̏ꍇ͒ʏDS_E[hvCvOƎ኱قȂ, -# g̃vOłȂ emuchild ʼnHvOT[o֑t܂. - -presign: - $(EMUCHILD) \ - bin/$(TWL_BUILDTYPE)/$(TARGET_BIN) \ - $(LIBSYSCALL_CHILD) \ - bin/sign.srl - -# ꂽF؃R[hoCiɊ܂߂葱̓N[u[gʏƓlł. -postsign: - $(ATTACHSIGN) \ - bin/$(TWL_BUILDTYPE)/$(TARGET_BIN) \ - bin/sign.sgn \ - main_with_sign.srl && \ - $(MAKETAD) \ - main_with_sign.srl \ - $(MAKETAD_OPTION) \ - -o bin/$(TWL_BUILDTYPE)/card_copy.tad - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -ifdef TWL_ELFTOBIN -$(TARGETS): $(ELFTOBIN_ARM7) - -else #TWL_ELFTOBIN -$(TARGETS): $(MAKEROM_ARM7) - -endif #TWL_ELFTOBIN - - -#===== End of Makefile ===== diff --git a/build/tests/CardCopyMultiBoot/banner/Makefile b/build/tests/CardCopyMultiBoot/banner/Makefile deleted file mode 100644 index ab605745..00000000 --- a/build/tests/CardCopyMultiBoot/banner/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - nandApp - demos - card_backup -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = TWL - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -ICON_DIR = ../data - -BANNER_ICON = $(ICON_DIR)/myGameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = . -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/CardCopyMultiBoot/banner/banner_v3.bsf b/build/tests/CardCopyMultiBoot/banner/banner_v3.bsf deleted file mode 100644 index f4d934ab20fb37d540b344012f6a8fef6f2380ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 930 zcmc(eJx;?w5QSe05_ecBHLwVYA|+AGj}Sr_=p83fR?44jL&TXVIRPE?h>{C%1q6Jv z_5tFCXr%Sb+nL!nZ`Z#+9UUuGBB$MGjyTgC8>s+IwZzNu5(Q21ceJfelU>*R&sv}B zbfXDON*IkBMou%`gH&Jx7&@)s9*8TVIdO<bF?04*iPw&y=W|5shSe o52Dr+;tJin+Q(L?U63`@9+`FrnI5sWXH1Lb3jO8@`> diff --git a/build/tests/CardCopyMultiBoot/data/icon.char b/build/tests/CardCopyMultiBoot/data/icon.char deleted file mode 100644 index 967e1008274d33b0882b16c647c2730684ad9ebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 512 zcmaJ-2@b#@2;&F*|Cj!NwFVhlwCM>uRy0g%k33iuuRTJWU z0;Qu9%BC*1=l`xX)|cG1zq?=Gd)I58xx1vo#e9r$l#dU26Z7z}7Q9MX6^rs;G_^ZA^@Fr?LLMR6RH5Q5117qss<4pvNE*DHv_ zZk>=jJ6e z%}ACPGYHqhMjfr97{axXJ)9^Gd<=u6h4qqcZs36|>WrKfZ3FNM*Q@yyk5Cj_Zm!zn2Vw jA#hK&4l&liP;(a diff --git a/build/tests/CardCopyMultiBoot/etc/libsyscall_child.bin b/build/tests/CardCopyMultiBoot/etc/libsyscall_child.bin deleted file mode 100644 index 67e29a1a..00000000 --- a/build/tests/CardCopyMultiBoot/etc/libsyscall_child.bin +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/build/tests/CardCopyMultiBoot/include/bt.h b/build/tests/CardCopyMultiBoot/include/bt.h deleted file mode 100644 index 2e36bf51..00000000 --- a/build/tests/CardCopyMultiBoot/include/bt.h +++ /dev/null @@ -1,53 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - WBT - demos - wbt-1 - File: bt.h - - Copyright 2005-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef NITRO_BUILD_DEMOS_WBT_WBT1_INCLUDE_BT_H_ -#define NITRO_BUILD_DEMOS_WBT_WBT1_INCLUDE_BT_H_ - -#include - -/* ubNf[^̐ */ -#define NUM_OF_BT_LIST 3 - -/* PubNf[^̃TCY */ -#define BT_DATA_SIZE 0x10000 - -//e@̃pPbgTCY -#define BT_PARENT_PACKET_SIZE WC_PARENT_DATA_SIZE_MAX - -//q@̃pPbgTCY -#define BT_CHILD_PACKET_SIZE WC_CHILD_DATA_SIZE_MAX - -#define SDK_MAKEGGID_SYSTEM(num) (0x003FFF00 | (num)) -#define GGID_WBT_1 SDK_MAKEGGID_SYSTEM(0x30) -#define WC_PARENT_DATA_SIZE_MAX 128 -#define WC_CHILD_DATA_SIZE_MAX 16 - - -/* e@pubNo^֐ */ -extern void bt_register_blocks(void); - -/* ubN]ėpR[obN֐ */ -extern void bt_callback(void *arg); - -/* q@pubN]Jn֐ */ -extern void bt_start(void); - -/* q@pubN]I֐ */ -extern void bt_stop(void); - -#endif /* NITRO_BUILD_DEMOS_WBT_WBT1_INCLUDE_BT_H_ */ diff --git a/build/tests/CardCopyMultiBoot/include/common.h b/build/tests/CardCopyMultiBoot/include/common.h deleted file mode 100644 index 3096e94e..00000000 --- a/build/tests/CardCopyMultiBoot/include/common.h +++ /dev/null @@ -1,163 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: common.h - - Copyright 2006-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ -#ifndef MB_DEMO_COMMON_H_ -#define MB_DEMO_COMMON_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -#define CARD_SECURE_AREA_OFFSET 0x4000 // 16KB -#define CARD_GAME_AREA_OFFSET 0x8000 // 32KB - - -//============================================================================ -// ֐錾 -//============================================================================ - - -/* - * ̊֐ multiboot-Model ̐e@ NitroMain() ̂ł. - * {Tvł MB_IsMultiBootChild() == FALSE ŌĂяo܂. - */ -void ParentMain(void); - -/* - * ̊֐ multiboot-Model ̎q@ NitroMain() ̂ł. - * {Tvł MB_IsMultiBootChild() == TRUE ŌĂяo܂. - */ -void ChildMain(void); - -/* - * ̊֐͐e@p̈ .parent ZNVɔzuĂ܂. - * e, P ParentMain() Ăяoł. - */ -void ParentIdentifier(void); - -/* ȊO͑S multiboot-Model Ɠł */ - -void CommonInit(); -void ReadKey(void); -u16 GetPressKey(void); -u16 GetTrigKey(void); -void InitAllocateSystem(void); - -/*---------------------------------------------------------------------------* - Name: IS_PAD_PRESS - - Description: L[ - - Arguments: 肷L[tO - - Returns: w肵L[Ăꍇ TRUE - ĂȂꍇ FALSE - *---------------------------------------------------------------------------*/ -static inline BOOL IS_PAD_PRESS(u16 flag) -{ - return (GetPressKey() & flag) == flag; -} - -/*---------------------------------------------------------------------------* - Name: IS_PAD_TRIGGER - - Description: L[gK - - Arguments: 肷L[tO - - Returns: w肵L[̃gKĂꍇ TRUE - ĂȂꍇ FALSE - *---------------------------------------------------------------------------*/ -static inline BOOL IS_PAD_TRIGGER(u16 flag) -{ - return (GetTrigKey() & flag) == flag; -} - -/*---------------------------------------------------------------------------* - Name: MpSendCallback - - Description: MPf[^MɌĂяo֐B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void MpSendCallback(BOOL result); - -/*---------------------------------------------------------------------------* - Name: MpReceiveCallback - - Description: MPf[^MɌĂяo֐B - - Arguments: aid - Mq@ aid( 0 ̏ꍇ͐e@̃f[^ ) - data - Mf[^ւ̃|C^ (NULL Őؒfʒm) - length - Mf[^̃TCY - - Returns: None. - *---------------------------------------------------------------------------*/ -void MpReceiveCallback(u16 aid, u16 *data, u16 length); - -/*---------------------------------------------------------------------------* - Name: ModeParent - - Description: e@ ʐMʂł̏B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ModeParent(void); - -/*---------------------------------------------------------------------------* - Name: ModeChild - - Description: q@ ʐMʂł̏B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ModeChild(void); - -/*---------------------------------------------------------------------------* - Name: BlockTransferMain - - Description: ubN]Ԓʒm֐B - - Arguments: arg - ʒm WM ֐̃R[obN|C^ - - Returns: None. - *---------------------------------------------------------------------------*/ -void BlockTransferMain(void); - -/*---------------------------------------------------------------------------* - Name: BlockTransferCallback - - Description: ubN]Ԓʒm֐B - - Arguments: arg - ʒm WM ֐̃R[obN|C^ - - Returns: None. - *---------------------------------------------------------------------------*/ -void BlockTransferCallback(void *arg); - -#ifdef __cplusplus -}/* extern "C" */ -#endif - -#endif // MB_DEMO_COMMON_H_ diff --git a/build/tests/CardCopyMultiBoot/include/disp.h b/build/tests/CardCopyMultiBoot/include/disp.h deleted file mode 100644 index fb633b29..00000000 --- a/build/tests/CardCopyMultiBoot/include/disp.h +++ /dev/null @@ -1,87 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: disp.h - - Copyright 2006-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ -#ifndef MB_DEMO_DISP_H_ -#define MB_DEMO_DISP_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -/* - * `Sʂ̏. - */ - -/* OBJԍ̊U */ -enum -{ - TITLE_STRING_OBJNO = 0, - PARENT_STRING_OBJNO = 10, - CHILD_STRING_OBJNO = 22, - PLIST_STRING_OBJNO = 33, - CLIST_STRING_OBJNO = 39, - - CURSOR_OBJNO = 45, - PARENT_NAME_OBJNO = 46, - FILENAME_OBJNO = 82, - MESSAGE_OBJNO = 104 -}; - -/* eLXgppbgJ[ */ -enum -{ - PLTT_BLACK = 0, - PLTT_BLUE = 1, - PLTT_RED = 2, - PLTT_PURPLE = 3, - PLTT_GREEN = 4, - PLTT_CYAN = 5, - PLTT_YELLOW = 6, - PLTT_WHITE = 7 -}; - - - -//============================================================================ -// ֐錾 -//============================================================================ - -void DispInit(void); -void DispOn(void); -void DispOff(void); -void DispVBlankFunc(void); -void ObjSet(s32 objNo, s32 x, s32 y, s32 charNo, s32 paletteNo); -void ObjSetString(s32 startobjNo, s32 x, s32 y, const char *string, s32 paletteNo); -void ObjClear(s32 objNo); -void ObjClearRange(s32 start, s32 end); -void ObjSetMessage(const char *message); -void BgPutChar(s32 x, s32 y, s32 palette, s8 c); -void BgPutStringN(s32 x, s32 y, s32 palette, const char *text, s32 num); -void BgPutString(s32 x, s32 y, s32 palette, const char *text); -void BgPrintStr(s32 x, s32 y, s32 palette, const char *text, ...); -void BgSetMessage(s32 palette, const char *text, ...); -void BgClear(void); -void BgColorString(s16 x, s16 y, s16 length, u8 palette); - - - -#ifdef __cplusplus -}/* extern "C" */ -#endif - -#endif // MB_DEMO_DISP_H_ diff --git a/build/tests/CardCopyMultiBoot/include/font.h b/build/tests/CardCopyMultiBoot/include/font.h deleted file mode 100644 index 1e25b4ff..00000000 --- a/build/tests/CardCopyMultiBoot/include/font.h +++ /dev/null @@ -1,37 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: font.h - - Copyright 2005-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ -#ifndef MB_DEMO_FONT_H_ -#define MB_DEMO_FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - - -extern const u16 samplePlttData[16][16]; - -extern const u32 sampleFontCharData[8 * 0x100]; - - - -#ifdef __cplusplus -}/* extern "C" */ -#endif - -#endif // MB_DEMO_DISP_H_ diff --git a/build/tests/CardCopyMultiBoot/include/gmain.h b/build/tests/CardCopyMultiBoot/include/gmain.h deleted file mode 100644 index 985c6f79..00000000 --- a/build/tests/CardCopyMultiBoot/include/gmain.h +++ /dev/null @@ -1,49 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: gmain.h - - Copyright 2006-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ -#ifndef MB_DEMO_GMAIN_H_ -#define MB_DEMO_GMAIN_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - - -typedef struct -{ - u32 count; // t[ - u16 key; // L[ - u16 padding; -} -GShareData; - - -//============================================================================ -// ֐錾 -//============================================================================ - -void GInitDataShare(void); -void GStepDataShare(s32 frame); -void GMain(void); - - -#ifdef __cplusplus -}/* extern "C" */ -#endif - -#endif // MB_DEMO_GMAIN_H_ diff --git a/build/tests/CardCopyMultiBoot/include/text.h b/build/tests/CardCopyMultiBoot/include/text.h deleted file mode 100644 index ee9f7ea4..00000000 --- a/build/tests/CardCopyMultiBoot/include/text.h +++ /dev/null @@ -1,81 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - WBT - demos - wbt-1 - File: font.h - - Copyright 2006-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef _TEXT_H_ -#define _TEXT_H_ - -#define NUM_OF_SCREEN 4 - -#define X_LINE_MAX (32) -#define Y_LINE_MAX (24) - -#define LINE_BUF_X_SIZE 32 -#define LINE_BUF_Y_SIZE 24 - - -typedef struct LINE_BUF_s -{ - int buf[LINE_BUF_X_SIZE]; - u16 col[LINE_BUF_X_SIZE]; - int last_count; - int cur_count; - struct LINE_BUF_s *prev; - struct LINE_BUF_s *next; -} -LINE_BUF; - -typedef struct -{ - int *num_x, *num_y; - LINE_BUF *start; - LINE_BUF *cur; -} -TEXT_BUF; - - - - -typedef struct -{ - TEXT_BUF text_buf; - u16 *screen; - u16 x_line; - u16 y_line; - u16 palette; - u16 padding; -} -TEXT_CTRL; - - -int init_text_buf_sys(void *heap_start, void *heap_end); - - -void m_putchar(TEXT_CTRL * tc, int c); -void m_set_palette(TEXT_CTRL * tc, u16 num); -u16 m_get_palette(TEXT_CTRL * tc); -void init_text(TEXT_CTRL * tc, u16 *screen, u16 palette); - - -void text_buf_to_vram(TEXT_CTRL * tc); - - -extern TEXT_CTRL *tc[NUM_OF_SCREEN]; - -void mfprintf(TEXT_CTRL * tc, const char *fmt, ...); -void mprintf(const char *fmt, ...); - -#endif /* _TEXT_H_ */ diff --git a/build/tests/CardCopyMultiBoot/include/wh_config.h b/build/tests/CardCopyMultiBoot/include/wh_config.h deleted file mode 100644 index 9001c35e..00000000 --- a/build/tests/CardCopyMultiBoot/include/wh_config.h +++ /dev/null @@ -1,61 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: wh_config.h - - Copyright 2006-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ - -#ifndef CLONEBOOT_WH_CONFIG_H_ -#define CLONEBOOT_WH_CONFIG_H_ - -//#include - -// ŎgpDMAԍ -#define WH_DMA_NO 2 - -// q@ő吔ie@܂܂Ȃj -#define WH_CHILD_MAX 1 - -// VFAof[^̍őTCY -#define WH_DS_DATA_SIZE 12 - -// 1̒ʐMőf[^̍őTCY -// f[^VFAOɉĒʏ̒ʐMꍇ́A̕ -// ̒l𑝂₵ĂB̍ۂ́ApPbgMɂlj -// wb_tb^ZKv܂B -// ڂ docs/TechnicalNotes/WirelessManager.doc QƂĂB -// GUIDELINE : KChC|Cg(6.3.2) -// t@X̃CX}l[W(WM)}\E񁨖ʐMԌvZV[g -// ŌvZ MP ʐM1񕪂̏vԂ 5600 ʕbȉƂȂ邱Ƃ𐄏Ă܂B -#define WH_PARENT_MAX_SIZE 16 -#define WH_CHILD_MAX_SIZE (WH_CHILD_SIZE + 4) -#define WH_CHILD_SIZE 128 - -// 1sN`[t[MPʐM񐔏 -// f[^VFAOƃubN]ȂǕ̃vgRsꍇ -// ̒l1傫(܂͖0)ݒ肷Kv܂B -// łȂꍇAƂDx̍1‚̃vgRȊO -// MPʐM؎słȂȂĂ܂܂B -#define WH_MP_FREQUENCY 1 - -// ʏ MP ʐMŎgp|[g -#define WH_DATA_PORT 14 - -// ʏ MP ʐMŎgpDx -#define WH_DATA_PRIO WM_PRIORITY_NORMAL - -// f[^VFAOŎgp|[g -#define WH_DS_PORT 13 - - -#endif /* CLONEBOOT_WH_CONFIG_H_ */ diff --git a/build/tests/CardCopyMultiBoot/main.TWL.lsf b/build/tests/CardCopyMultiBoot/main.TWL.lsf deleted file mode 100644 index f574b8fd..00000000 --- a/build/tests/CardCopyMultiBoot/main.TWL.lsf +++ /dev/null @@ -1,59 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - MB - demos - cloneboot -# File: main.lsf -# -# Copyright 2004-2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Twl LCF SPEC FILE -# - -Static $(TARGET_NAME) -{ - Address $(ADDRESS_STATIC) - Object $(OBJS_STATIC) - Library $(LLIBS) $(GLIBS) $(CW_LIBS) - -# increase capacity of IRQ stack. - StackSize 0 0x800 -} - -Autoload ITCM -{ - Address $(ADDRESS_ITCM) - Object * (.itcm) - Object $(OBJS_AUTOLOAD) (.text) - Object $(OBJS_AUTOLOAD) (.rodata) - Object $(OBJS_AUTOLOAD) (.init) - Object $(OBJS_AUTOLOAD) (.ctor) - Object $(OBJS_AUTOLOAD) (.sinit) -} - -Autoload DTCM -{ - Address $(ADDRESS_DTCM) - Object * (.dtcm) - Object $(OBJS_AUTOLOAD) (.data) - Object $(OBJS_AUTOLOAD) (.sdata) - Object $(OBJS_AUTOLOAD) (.bss) - Object $(OBJS_AUTOLOAD) (.sbss) -} - -Ltdautoload LTDMAIN -{ - # NITRO/TWL L̃I[o[C݂ꍇ́Aɂ̌ɔzuKv܂B - After $(TARGET_NAME) - Object * (.ltdmain) - Object $(OBJS_LTDAUTOLOAD) - Library $(LLIBS_EX) $(GLIBS_EX) -} diff --git a/build/tests/CardCopyMultiBoot/main.TWL.rsf b/build/tests/CardCopyMultiBoot/main.TWL.rsf deleted file mode 100644 index 5c6a3358..00000000 --- a/build/tests/CardCopyMultiBoot/main.TWL.rsf +++ /dev/null @@ -1,111 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - MB - demos - cloneboot -# File: main.rsf -# -# Copyright 2005-2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Twl ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - RomSpeedType $(MAKEROM_ROMSPEED) - WramMapping $(MAKEROM_WRAM_MAPPING) - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - CardRegion ALL - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile "banner/banner.bnr" - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # InitialCode : Your InitialCode in 4 ascii words - # - InitialCode 0DSC - - # - # Public save data size: [0-/0K-/0M-] - # - #PublicSaveDataSize 256K - - # - # Private save data size: [0-/0K-/0M-] - # - #PrivateSaveDataSize 256K - - # - # Enable SubBannerFile - #SubBannerFile FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - - Align 512 - Padding 0xFF - - HostRoot data - Root /data - File icon.char - - HostRoot data - Root /data - File icon.plt -} diff --git a/build/tests/CardCopyMultiBoot/main.lsf b/build/tests/CardCopyMultiBoot/main.lsf deleted file mode 100644 index 45d02ccc..00000000 --- a/build/tests/CardCopyMultiBoot/main.lsf +++ /dev/null @@ -1,44 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - MB - demos - cloneboot -# File: main.lsf -# -# Copyright 2004-2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# - -Static $(TARGET_NAME) -{ - Address $(ADDRESS_STATIC) - Object $(OBJS_STATIC) - Library $(LLIBS) $(GLIBS) $(CW_LIBS) - -# increase capacity of IRQ stack. - StackSize 0 0x800 -} - -Autoload ITCM -{ - Address $(ADDRESS_ITCM) - Object * (.itcm) - Object $(OBJS_AUTOLOAD) (.text) -} - -Autoload DTCM -{ - Address $(ADDRESS_DTCM) - Object * (.dtcm) - Object $(OBJS_AUTOLOAD) (.data) - Object $(OBJS_AUTOLOAD) (.bss) -} diff --git a/build/tests/CardCopyMultiBoot/main.rsf b/build/tests/CardCopyMultiBoot/main.rsf deleted file mode 100644 index 264579c2..00000000 --- a/build/tests/CardCopyMultiBoot/main.rsf +++ /dev/null @@ -1,59 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - MB - demos - cloneboot -# File: main.rsf -# -# Copyright 2005-2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro ROM SPEC FILE -# - - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).nef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7:r).sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7:r)_defs.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7:r)_table.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7:r).nef" -} - -Property -{ - RomSpeedType $(MAKEROM_ROMSPEED) -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - - Align 512 - Padding 0xFF - - HostRoot data - Root /data - File icon.char - - HostRoot data - Root /data - File icon.plt -} - diff --git a/build/tests/CardCopyMultiBoot/readme.txt b/build/tests/CardCopyMultiBoot/readme.txt deleted file mode 100644 index de20660a..00000000 --- a/build/tests/CardCopyMultiBoot/readme.txt +++ /dev/null @@ -1,27 +0,0 @@ -ycard_copy菇z - -1. TWL J@ NMenu ܂ NandInitializer card_copy_*.tad C|[giC|[gς݂Ȃsvj -2. TWL j[uJ[hRs[}`u[gv NAND AvN -3. NTR ֋zo DS J[h -4. NTR DS _E[hj[N -5. NTR DS _E[hj[ "CardCopyMultiBoot" XgoI -6. DS J[h SD J[h̓]Jn -7.uSent/Received ROM size=....vƂ\oASD J[h card_dump.sbin - Q[̈̋zo - -yTwlSDKύXӏz - -build/libraries/card/common/src/card_common.c - -CARDAccessLevel CARDi_GetAccessLevel(void) -{ - . - . - else if (!OS_IsRunOnTwl()) - { - level = CARD_ACCESS_LEVEL_FULL; // CARD_ACCESS_LEVEL_BACKUP ύX - } - . - . - return level; -} diff --git a/build/tests/CardCopyMultiBoot/src/child.c b/build/tests/CardCopyMultiBoot/src/child.c deleted file mode 100644 index 8206639a..00000000 --- a/build/tests/CardCopyMultiBoot/src/child.c +++ /dev/null @@ -1,298 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: child.c - - Copyright 2006-2009 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ - -#include -#include -#include - -#include "common.h" -#include "disp.h" -#include "gmain.h" -#include "wh.h" -#include "bt.h" - - -/* ̃fŎgp GGID */ -#define WH_GGID SDK_MAKEGGID_SYSTEM(0x22) - -//============================================================================ -// vg^Cv錾 -//============================================================================ - -static void ModeConnect(void); // e@ւ̐ڑJn -static void ModeError(void); // G[\ -static void ModeWorking(void); // rW[ -//static void ChildReceiveCallback(WMmpRecvBuf *data); -static BOOL PulledOutCallback(void); - -// ubN]Ԓʒm֐ -void BlockTransferCallback(void *arg); - - -//============================================================================ -// ϐ` -//============================================================================ - -static s32 gFrame; // t[JE^ - -static WMBssDesc gMBParentBssDesc ATTRIBUTE_ALIGN(32); - -//============================================================================ -// ֐` -//============================================================================ - -/*---------------------------------------------------------------------------* - Name: ChildMain - - Description: q@C[` - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void ChildMain(void) -{ - - // ʁAOS̏ - CommonInit(); - CARD_Enable(TRUE); - CARD_SetPulledOutCallback(PulledOutCallback); - CARD_LockRom((u16)OS_GetLockID()); - - // }`u[gNq@ł邩ǂ`FbN܂B - if (!MB_IsMultiBootChild()) - { - OS_Panic("not found Multiboot child flag!\n"); - } - - //-------------------------------------------------------------- - // }`u[gŋNꍇAUZbgʐMؒf܂B - // u[gu[ge@BssDescێĂ邽߁Ȁg - // e@֍ĐڑĂB - // ̎ABssDescMACAhX݂̂oMACAhXw - // ẽXLڑsȂꍇ͓ɖ肠܂񂪁AێĂ - // BssDescgĒɐe@ɐڑsȂꍇɂ́AʐMTCY][h - // 炩ߐeq̊Ԃō킹Đݒ肵ĂKv܂B - //-------------------------------------------------------------- - - /* - * e@ƍĐڑ邽߂ɐe@̏擾܂B - * ڑɗpWMBssDesc32oCgɃACĂKv܂B - * e@MACAhXōăXL邱ƂȂɍĐڑꍇ́A - * e@/q@̍ő呗MTCYAKS/CStO͂炩ߍ킹ĂĂB - * ăXLsȂĂڑꍇ͂̒lׂ͂0ō\܂B - */ - MB_ReadMultiBootParentBssDesc(&gMBParentBssDesc, WH_PARENT_MAX_SIZE, // e@ő呗MTCY - WH_CHILD_MAX_SIZE, // q@ő呗MTCY - 0, // L[VFAOtO - 0); // A][htO - - // eăXL邱ƖɁAڑꍇɂ͐e@Ǝq@tgid킹 - // Kv܂B - // e@͍ċNɖ֌WIPL̐ڑׂ̂tgidύXA - // q@ɍ킹tgidύXKv܂B - // ̃fł͐e@Aq@Ƃtgid1CNgĂ܂B - gMBParentBssDesc.gameInfo.tgid++; - - WH_PrintBssDesc( &gMBParentBssDesc ); - - // ʏ - DispInit(); - // q[v̏ - InitAllocateSystem(); - - // 荞ݗL - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - { /* FS */ - static u32 fs_tablework[0x100 / 4]; - FS_Init(FS_DMA_NOT_USE); - (void)FS_LoadTable(fs_tablework, sizeof(fs_tablework)); - } - - //******************************** - // - if (!WH_Initialize()) - { - OS_Panic("WH_Initialize failed."); - } - //******************************** -// WH_SetSessionUpdateCallback(BlockTransferCallback); -// WH_SetGgid(WH_GGID); - - // LCD\Jn - GX_DispOn(); - GXS_DispOn(); - - // fobOo - OS_TPrintf("MB child: Simple DataSharing demo started.\n"); - - // L[͏擾̋Ăяo(IPL ł A {^΍) - ReadKey(); - - /* C[` */ - for (gFrame = 0; TRUE; gFrame++) - { - // L[͏擾 - ReadKey(); - - // XN[NA -// BgClear(); - - // ʐMԂɂ菈U蕪 - switch (WH_GetSystemState()) - { - case WH_SYSSTATE_ERROR: - case WH_SYSSTATE_CONNECT_FAIL: - { - // WM_StartConnect()ɎsꍇɂWM̃Xe[gsɂȂĂ - // xWM_ResetIDLEXe[gɃZbgKv܂B - WH_Reset(); - } - break; - case WH_SYSSTATE_IDLE: - { - static retry = 0; - enum - { - MAX_RETRY = 5 - }; - - if (retry < MAX_RETRY) - { - ModeConnect(); - retry++; - break; - } - // MAX_RETRYŐe@ɐڑłȂERROR\ - } -// case WH_SYSSTATE_ERROR: -// ModeError(); - break; - case WH_SYSSTATE_BUSY: - case WH_SYSSTATE_SCANNING: - ModeWorking(); - break; - - case WH_SYSSTATE_CONNECTED: - { - ModeChild(); - } - break; - } - - // dgMx̕\ - { - int level; - level = WH_GetLinkLevel(); - BgPrintStr(31, 23, 0xf, "%d", level); - } - - // uuN҂ - OS_WaitVBlankIntr(); - } -} - -/*---------------------------------------------------------------------------* - Name: ModeConnect - - Description: ڑJn - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void ModeConnect(void) -{ -//#define USE_DIRECT_CONNECT - - // e@̍ăXLȂɒڐڑꍇB -#ifdef USE_DIRECT_CONNECT - //******************************** - (void)WH_ChildConnect(WH_CONNECTMODE_MP_CHILD, &gMBParentBssDesc); -// WH_SetReceiver(MpReceiveCallback); -// (void)WH_ChildConnect(WH_CONNECTMODE_DS_CHILD, &gMBParentBssDesc); - // WH_ChildConnect(WH_CONNECTMODE_MP_CHILD, &gMBParentBssDesc, TRUE); - // WH_ChildConnect(WH_CONNECTMODE_KS_CHILD, &gMBParentBssDesc, TRUE); - //******************************** -#else - WH_SetGgid(gMBParentBssDesc.gameInfo.ggid); - // e@̍ăXLsꍇB - //******************************** - (void)WH_ChildConnectAuto(WH_CONNECTMODE_MP_CHILD, gMBParentBssDesc.bssid, - gMBParentBssDesc.channel); - // WH_ChildConnect(WH_CONNECTMODE_MP_CHILD, &gMBParentBssDesc, TRUE); - // WH_ChildConnect(WH_CONNECTMODE_KS_CHILD, &gMBParentBssDesc, TRUE); - //******************************** -#endif - WH_SetReceiver(MpReceiveCallback); -} - -/*---------------------------------------------------------------------------* - Name: ModeError - - Description: G[ʒmʕ\ - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void ModeError(void) -{ - BgPrintStr(5, 10, 0x1, "======= ERROR! ======="); - - if (WH_GetLastError() == WM_ERRCODE_OVER_MAX_ENTRY) - { - BgPrintStr(5, 13, 0xf, "OVER_MAX_ENTRY"); - } -} - -/*---------------------------------------------------------------------------* - Name: ModeWorking - - Description: ʂ\ - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void ModeWorking(void) -{ - BgPrintStr(9, 11, 0xf, "Now working..."); - - if (IS_PAD_TRIGGER(PAD_BUTTON_START)) - { - //******************************** - (void)WH_Finalize(); - //******************************** - } -} - -/*---------------------------------------------------------------------------* - Name: PulledOutCallback - - Description: ʂ\ - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static BOOL PulledOutCallback(void) -{ - return TRUE; -} diff --git a/build/tests/CardCopyMultiBoot/src/common.c b/build/tests/CardCopyMultiBoot/src/common.c deleted file mode 100644 index 02d590e1..00000000 --- a/build/tests/CardCopyMultiBoot/src/common.c +++ /dev/null @@ -1,402 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: common.c - - Copyright 2006-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ - - -#include -#include -#include - -#include "wh.h" -#include "common.h" -#include "disp.h" -#include "text.h" -#include "bt.h" - -#define DEFAULT_CHAN 1 - -extern OSMessageQueue mesgQueue; - -static void ModeSelect(void); // e@/q@ I -static void ModeStartParent(void); // gpႢ`lvZI - -// f[^MɌĂяo֐ -void ParentSendCallback(void); -void ChildSendCallback(void); - -static void VBlankIntr(void); - -/* - * ̃fŜŎgp鋤ʋ@\. - */ -static u16 padPress; -static u16 padTrig; - -// f[^MɌĂяo֐ -void ParentReceiveCallback(u16 aid, u16 *data, u16 length); -void ChildReceiveCallback(u16 aid, u16 *data, u16 length); - -// ubN]Ԓʒm֐ -void BlockTransferCallback(void *arg); - -// \pMobt@ -static u8 gSendBuf[256] ATTRIBUTE_ALIGN(32); -u8 gRecvBuf[1 + WM_NUM_MAX_CHILD][256] ATTRIBUTE_ALIGN(32); -static BOOL gRecvFlag[1 + WM_NUM_MAX_CHILD]; - -static u32 send_counter[16]; -static u32 recv_counter[16]; - -TEXT_CTRL *tc[NUM_OF_SCREEN]; - -static BOOL gFirstSendAtChild; - -static BOOL wbt_available = FALSE; -static u16 connected_bitmap = 0; - -/*---------------------------------------------------------------------------* - Name: ReadKey - - Description: L[̓ǂݍݏ - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void ReadKey(void) -{ - u16 currData = PAD_Read(); - - padTrig = (u16)(~padPress & currData); - padPress = currData; -} - -/*---------------------------------------------------------------------------* - Name: GetPressKey - - Description: L[擾 - - Arguments: None - - Returns: ĂL[̃rbg}bv - *---------------------------------------------------------------------------*/ -u16 GetPressKey(void) -{ - return padPress; -} - - -/*---------------------------------------------------------------------------* - Name: GetTrigKey - - Description: L[gK擾 - - Arguments: None - - Returns: L[gK̃rbg}bv - *---------------------------------------------------------------------------*/ -u16 GetTrigKey(void) -{ - return padTrig; -} - - -/*---------------------------------------------------------------------------* - Name: CommonInit - - Description: ʏ֐ - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void CommonInit(void) -{ - /* OS */ - OS_Init(); - OS_InitTick(); - OS_InitAlarm(); - OS_InitThread(); - FX_Init(); - CARD_Init(); - - /* GX */ - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - /* VuNݒ */ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)OS_EnableIrqMask(OS_IE_FIFO_RECV); - (void)GX_VBlankIntr(TRUE); - - // L[ǂ - ReadKey(); -} - - -/*---------------------------------------------------------------------------* - Name: InitAllocateSystem - - Description: C̃A[iɂăăVXeB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void InitAllocateSystem(void) -{ - void *tempLo; - OSHeapHandle hh; - - // OS_Init͌Ă΂ĂƂO - tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tempLo); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - OS_Panic("ARM9: Fail to create heap...\n"); - } - hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - - - - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - - Description: L[gK擾 - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void VBlankIntr(void) -{ - DispVBlankFunc(); - - //---- 荞݃`FbNtO - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -/*---------------------------------------------------------------------------* - Name: MpSendCallback - - Description: MPf[^MɌĂяo֐B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void MpSendCallback(BOOL result) -{ -#pragma unused( result ) - CARDRomHeader* rh = (void*)CARD_GetRomHeader(); - u32 rh_size = sizeof(CARDRomHeaderNTR); - u32 limit = rh->rom_size + CARD_ROM_PAGE_SIZE; - u32 offset = WH_CHILD_SIZE * send_counter[0]; - - BgSetMessage(PLTT_YELLOW, " Sending: ROM addr=0x%x", offset); - - if ( offset < limit ) - { - if ( offset < rh_size ) - { - u32 rem = rh_size%WH_CHILD_SIZE; - MI_CpuCopy8( &((u8*)rh)[offset], gSendBuf, WH_CHILD_SIZE ); - if ( offset >= MATH_ROUNDDOWN(rh_size, WH_CHILD_SIZE) ) - { - MI_CpuFill8( &gSendBuf[rem], 0, WH_CHILD_SIZE - rem ); - } - } - else - if ( offset < CARD_GAME_AREA_OFFSET ) - { - MI_CpuFill8(gSendBuf, 0, WH_CHILD_SIZE); - } - else - { - CARD_ReadRom( MI_DMA_NOT_USE, (void*)offset, gSendBuf, WH_CHILD_SIZE ); - } - gSendBuf[WH_CHILD_SIZE] = FALSE; - if ( (offset + WH_CHILD_SIZE) >= limit ) - { - gSendBuf[WH_CHILD_SIZE] = TRUE; - } - (void)WH_SendData(gSendBuf, WH_CHILD_MAX_SIZE, NULL); - send_counter[0]++; - } - else - { - BgSetMessage(PLTT_RED, " Sent ROM size=0x%x ", MATH_ROUNDUP(limit, WH_CHILD_SIZE) - CARD_GAME_AREA_OFFSET); - } -} - - -/*---------------------------------------------------------------------------* - Name: MpReceiveCallback - - Description: MPf[^MɌĂяo֐B - - Arguments: aid - Mq@ aid( 0 ̏ꍇ͐e@̃f[^ ) - data - Mf[^ւ̃|C^ (NULL Őؒfʒm) - length - Mf[^̃TCY - - Returns: None. - *---------------------------------------------------------------------------*/ -void MpReceiveCallback(u16 aid, u16 *data, u16 length) -{ - SDK_MAX_ASSERT(aid, 15); - - // q@ - if ( MB_IsMultiBootChild() ) - { - if (aid == 0) - { - if (data && *data == TRUE) - { - MpSendCallback( TRUE ); - } - } - - return; - } - - // e@ - if (data != NULL) - { - gRecvFlag[aid] = TRUE; - // Rs[2oCgAC(4oCgACłȂ) - if (aid == 0) - { - // e@Mꍇ - MI_CpuCopy8(data, &gRecvBuf[aid][0], length); - } - else - { - static u32 offset = CARD_GAME_AREA_OFFSET; - offset += WH_CHILD_SIZE; - MI_CpuCopy8(data, &gRecvBuf[aid][0], length); - BgSetMessage(PLTT_YELLOW, " Receiving: ROM addr=0x%x", offset); - if ( gRecvBuf[aid][WH_CHILD_SIZE] == TRUE ) - { - BgSetMessage(PLTT_RED, " Received ROM size=0x%x ", offset - CARD_GAME_AREA_OFFSET); - } - (void)OS_SendMessage(&mesgQueue, (OSMessage)&gRecvBuf[aid][0], OS_MESSAGE_BLOCK); - } - } - else - { - gRecvFlag[aid] = FALSE; - } -} - - -/*---------------------------------------------------------------------------* - Name: ModeSelect - - Description: e@/q@ Iʂł̏B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ModeSelect(void) -{ - // JE^NA - MI_CpuClear(send_counter, sizeof(send_counter)); - MI_CpuClear(recv_counter, sizeof(recv_counter)); - - if (!MB_IsMultiBootChild()) - { - BgSetMessage(PLTT_YELLOW, " Connect as PARENT"); - //******************************** - (void)WH_ParentConnect(WH_CONNECTMODE_MP_PARENT, 0x0000, DEFAULT_CHAN); // WH_GetMeasureChannel() - WH_SetReceiver(MpReceiveCallback); - //******************************** - } - else - { - static const u8 ANY_PARENT[6] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; - BgSetMessage(PLTT_YELLOW, " Connect as CHILD"); - //******************************** - (void)WH_ChildConnectAuto(WH_CONNECTMODE_MP_CHILD, ANY_PARENT, DEFAULT_CHAN); - //******************************** - } -} - -/*---------------------------------------------------------------------------* - Name: ModeParent - - Description: e@ ʐMʂł̏B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ModeParent(void) -{ - BgPutString(6, 1, PLTT_RED, "Card Copy Multi Boot"); - - BgPrintStr(11, 3, PLTT_YELLOW, "Parent mode"); -// BgPrintStr(4, 3, 0x4, "Send: %08X", gSendBuf[0]); - BgPrintStr(4, 5, 0x4, "Receive:"); - { - s32 i; - - for (i = 1; i < (WM_NUM_MAX_CHILD + 1); i++) - { - if (gRecvFlag[i]) - { - BgPrintStr(5, (s16)(6 + i), 0x4, "Child%02d: %08X", i, gRecvBuf[i][0]); - } - else - { - BgPrintStr(5, (s16)(6 + i), 0x7, "No child"); - } - } - } -} - -/*---------------------------------------------------------------------------* - Name: ModeChild - - Description: q@ ʐMʂł̏B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ModeChild(void) -{ - BgPutString(6, 1, PLTT_RED, "Card Copy Multi Boot"); - - BgPutString(11, 3, PLTT_YELLOW, "Child mode"); - - if ( !gFirstSendAtChild ) - { - BgSetMessage(PLTT_WHITE, " Push A Button to start "); - } - - if ( !gFirstSendAtChild ) // (GetTrigKey() & PAD_BUTTON_A) ) - { - MpSendCallback( TRUE ); - gFirstSendAtChild = TRUE; - } -} - diff --git a/build/tests/CardCopyMultiBoot/src/disp.c b/build/tests/CardCopyMultiBoot/src/disp.c deleted file mode 100644 index 8a05e8b3..00000000 --- a/build/tests/CardCopyMultiBoot/src/disp.c +++ /dev/null @@ -1,445 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: disp.c - - Copyright 2006-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ - -//---------------------------------------------------------------------- -// \̊{Iȋ@\. -//---------------------------------------------------------------------- - -#include -#include "disp.h" - - -//============================================================================ -// vg^Cv錾 -//============================================================================ -static void VramClear(void); -static void ObjInitForPrintStr(void); -static void BgInitForPrintStr(void); - - -//============================================================================ -// 萔` -//============================================================================ - -#define BGSTR_MAX_LENGTH 32 - -//============================================================================ -// ϐ` -//============================================================================ - -/* zXN[ */ -static u16 vscr[32 * 32]; - -/* V uN]pe| OAM */ -static GXOamAttr oamBak[128]; - - -/* e`p */ -extern const u32 sampleFontCharData[8 * 0xe0]; -extern const u16 samplePlttData[16][16]; - - -//============================================================================ -// ֐` -//============================================================================ - -/*---------------------------------------------------------------------------* - Name: BgInitForPrintStr - - Description: BG`̏ (BG0Œ, VRAM-C, BG[h0) - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void BgInitForPrintStr(void) -{ - GX_SetBankForBG(GX_VRAM_BG_128_C); - G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, GX_BG_SCRBASE_0xf800, /* SCR x[XubN 31 */ - GX_BG_CHARBASE_0x00000, /* CHR x[XubN 0 */ - GX_BG_EXTPLTT_01); - G2_SetBG0Priority(0); - G2_BG0Mosaic(FALSE); - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - G2_SetBG0Offset(0, 0); - - GX_LoadBG0Char(sampleFontCharData, 0, sizeof(sampleFontCharData)); - GX_LoadBGPltt(samplePlttData, 0, sizeof(samplePlttData)); - - MI_CpuFillFast((void *)vscr, 0, sizeof(vscr)); - DC_FlushRange(vscr, sizeof(vscr)); - DC_WaitWriteBufferEmpty(); - - GX_LoadBG0Scr(vscr, 0, sizeof(vscr)); -} - -/*---------------------------------------------------------------------------* - Name: ObjInitForPrintStr - - Description: OBJ̏ (VRAM-B, 2D[h) - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void ObjInitForPrintStr(void) -{ - GX_SetBankForOBJ(GX_VRAM_OBJ_128_B); - GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_2D); - MI_DmaFill32(3, oamBak, 0xc0, sizeof(oamBak)); - - GX_LoadOBJ(sampleFontCharData, 0, sizeof(sampleFontCharData)); - GX_LoadOBJPltt(samplePlttData, 0, sizeof(samplePlttData)); - -} - -/*---------------------------------------------------------------------------* - Name: VramClear - - Description: VRAMNA - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void VramClear(void) -{ - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - (void)GX_DisableBankForLCDC(); - MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE); - MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void *)HW_DB_OAM, 192, HW_DB_OAM_SIZE); - MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); -} - -/*---------------------------------------------------------------------------* - Name: DispInit - - Description: `揉 - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void DispInit(void) -{ - /* `ݒ菉 */ - VramClear(); - - // OBJ - ObjInitForPrintStr(); - - // BG - BgInitForPrintStr(); - - GX_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_OBJ); - -} - - -/*---------------------------------------------------------------------------* - Name: DispOn - - Description: ʕ\ - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void DispOn(void) -{ - /* \Jn */ - GX_DispOn(); - GXS_DispOn(); -} - -/*---------------------------------------------------------------------------* - Name: DispOff - - Description: ʔ\ - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void DispOff(void) -{ - /* \Jn */ - GX_DispOff(); - GXS_DispOff(); -} - - - - -/*---------------------------------------------------------------------------* - Name: DispVBlankFunc - - Description: `VBlank - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void DispVBlankFunc(void) -{ - //---- n`l̍XV - DC_FlushRange(oamBak, sizeof(oamBak)); - /* DMAIOWX^փANZX̂ŃLbV Wait ͕sv */ - // DC_WaitWriteBufferEmpty(); - MI_DmaCopy32(3, oamBak, (void *)HW_OAM, sizeof(oamBak)); - - //---- BGXN[XV - DC_FlushRange(vscr, sizeof(vscr)); - /* DMAIOWX^փANZX̂ŃLbV Wait ͕sv */ - // DC_WaitWriteBufferEmpty(); - GX_LoadBG0Scr(vscr, 0, sizeof(vscr)); -} - - - - -/*---------------------------------------------------------------------------* - Name: ObjSet - - Description: OBJ̕`ݒ - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void ObjSet(s32 objNo, s32 x, s32 y, s32 charNo, s32 paletteNo) -{ - G2_SetOBJAttr((GXOamAttr *)&oamBak[objNo], - x, - y, - 0, - GX_OAM_MODE_NORMAL, - FALSE, - GX_OAM_EFFECT_NONE, GX_OAM_SHAPE_8x8, GX_OAM_COLOR_16, charNo, paletteNo, 0); -} - -/*---------------------------------------------------------------------------* - Name: ObjSetString - - Description: OBJŕ` - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void ObjSetString(s32 startobjNo, s32 x, s32 y, const char *string, s32 paletteNo) -{ - s32 i; - for (i = 0; (string[i] != '\0') && (i < 24); i++) - { - ObjSet(startobjNo + i, x + i * 8, y, (s32)string[i], paletteNo); - } -} - -/*---------------------------------------------------------------------------* - Name: ObjClear - - Description: OBJ NA - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void ObjClear(s32 objNo) -{ - ObjSet(objNo, 256 * 8, 192 * 8, 0, 0); -} - -/*---------------------------------------------------------------------------* - Name: ObjClearRange - - Description: OBJ NA(͈͎w) - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void ObjClearRange(s32 start, s32 end) -{ - s32 i; - for (i = start; i <= end; i++) - { - ObjClear(i); - } -} - -/*---------------------------------------------------------------------------* - Name: ObjSetMessage - - Description: bZ[W(ʉA 24ɕ\) Zbg - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void ObjSetMessage(const char *message) -{ - ObjSetString(MESSAGE_OBJNO, 4 * 8, 22 * 8, message, 7); -} - - -/*---------------------------------------------------------------------------* - Name: BgPutStringN - - Description: BGNo - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void BgPutStringN(s32 x, s32 y, s32 palette, const char *text, s32 num) -{ - s32 i; - if (num > BGSTR_MAX_LENGTH) - { - num = BGSTR_MAX_LENGTH; - } - - for (i = 0; i < num; i++) - { - if (text[i] == '\0') - { - break; - } - BgPutChar(x + i, y, palette, text[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: BgPutChar - - Description: BGPo - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void BgPutChar(s32 x, s32 y, s32 palette, s8 c) -{ - vscr[((y * 32) + x) % (32 * 32)] = (u16)((palette << 12) | c); -} - -/*---------------------------------------------------------------------------* - Name: BgPutString - - Description: BG 32o - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void BgPutString(s32 x, s32 y, s32 palette, const char *text) -{ - BgPutStringN(x, y, palette, text, BGSTR_MAX_LENGTH); -} - -/*---------------------------------------------------------------------------* - Name: BgPrintStr - - Description: BG tH[}bgto - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void BgPrintStr(s32 x, s32 y, s32 palette, const char *text, ...) -{ - char temp[(BGSTR_MAX_LENGTH + 1) * 2]; - va_list vlist; - - MI_CpuClear8(temp, sizeof(temp)); - va_start(vlist, text); - (void)vsnprintf(temp, sizeof(temp) - 1, text, vlist); - va_end(vlist); - BgPutString(x, y, palette, temp); -} - -/*---------------------------------------------------------------------------* - Name: BgSetMessage - - Description: BGbZ[WZbg - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void BgSetMessage(s32 palette, const char *text, ...) -{ - char temp[(BGSTR_MAX_LENGTH + 1) * 2]; - va_list vlist; - - MI_CpuClear8(temp, sizeof(temp)); - va_start(vlist, text); - (void)vsnprintf(temp, sizeof(temp) - 1, text, vlist); - va_end(vlist); - BgPutString(4, 22, palette, temp); -} - -/*---------------------------------------------------------------------------* - Name: BgClear - - Description: BGNA - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void BgClear(void) -{ - MI_CpuClearFast(vscr, sizeof(vscr)); -} - - -/*---------------------------------------------------------------------------* - Name: BgColorString - - Description: zXN[ɔzu̐FύXB - - Arguments: x - FύXJn x W( ~ 8 hbg )B - y - FύXJn y W( ~ 8 hbg )B - length - AĐFύX镶B - palette - ̐FpbgԍŎwB - - Returns: None. - *---------------------------------------------------------------------------*/ -void BgColorString(s16 x, s16 y, s16 length, u8 palette) -{ - s32 i; - u16 temp; - s32 index; - - if (length < 0) - { - return; - } - - for (i = 0; i < length; i++) - { - index = ((y * 32) + x + i) % (32 * 32); - temp = vscr[index]; - temp &= 0x0fff; - temp |= (palette << 12); - vscr[index] = temp; - } -} diff --git a/build/tests/CardCopyMultiBoot/src/font.c b/build/tests/CardCopyMultiBoot/src/font.c deleted file mode 100644 index e1565ae4..00000000 --- a/build/tests/CardCopyMultiBoot/src/font.c +++ /dev/null @@ -1,552 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: font.c - - Copyright 2005-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ - - -#include - - -/*---------------------- pbgf[^ ---------------------------*/ -#define RGB555(r,g,b) ( (b) << 10 | (g) <<5 | (r) ) - -const u16 samplePlttData[16][16] = { - {RGB555(0, 0, 0), RGB555(0, 0, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Black - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White -}; - - -/*---------------------- tHgf[^ -------------------------*/ - -const u32 sampleFontCharData[8 * 0x100] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01010010, 0x01010010, 0x00000110, // 0001h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 00f6h - 0x00100000, 0x00100000, 0x00100000, 0x00111111, - 0x00000000, 0x01010010, 0x01010010, 0x00111111, // 00f7h - 0x00010010, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01010011, 0x01010100, 0x00100011, // 00f8h - 0x00100100, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01010000, 0x01011111, 0x00010000, // 00f9h - 0x00001000, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x01010010, 0x01111111, 0x00100010, // 00fah - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x01010001, 0x01010010, 0x00100000, // 00fbh - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01011110, 0x01010010, 0x00100110, // 00fch - 0x00111001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01011110, 0x00010000, // 00fdh - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x00100101, 0x01001010, 0x00101010, // 00feh - 0x00100000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -}; diff --git a/build/tests/CardCopyMultiBoot/src/main.c b/build/tests/CardCopyMultiBoot/src/main.c deleted file mode 100644 index a71eeeae..00000000 --- a/build/tests/CardCopyMultiBoot/src/main.c +++ /dev/null @@ -1,97 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: main.c - - Copyright 2005-2009 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ - -#ifdef SDK_TWL -#include -#else -#include -#endif - -#include "common.h" - -/* - * N[u[gAvP[ṼTv. - * - * MBCũTv̓}`u[g@\g߁A - * ʐM‹(邢͗L)ǂ̊J@ނ𕡐KvƂ܂B - * $TwlSDK/bin/ARM9-TS/Rom/ fBNgɂ - * mb_child_NITRO.srl, mb_child_TWL.srl vOŏI@ɂ}`u[gq@Ɠ - * @\񋟂TvɂȂĂ܂̂ŁA - * ̃oCiTvvOƓ@ő̋@ނɓǂݍ݁A - * ꏏɎsĂB - * - */ - -/* - * ̃f͖ʐM WH CugpĂ܂A - * iɎq@́j̏Is܂B - * WH Cup̏IɊւẮA - * WH Cũ\[XR[h`̃Rg - * wm/dataShare-Model fQƂB - */ - -/******************************************************************************/ - - - -//============================================================================ -// ֐` -//============================================================================ - -/*---------------------------------------------------------------------------* - Name: NitroMain / TwlMain - - Description: C[` - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifdef SDK_TWL -void TwlMain(void) -#else -void NitroMain(void) -#endif -{ - /* - * ̃Tvł, multiboot-Model Tvf̂܂܎gp - * gDS_E[hvCq@vOǂ𔻒f - * Pɏ𕪂Ă܂. - * - * N[u[gŐe@Ǝq@Ƃ̊ԂɂȊ‹_ƂĂ - * 1. q@ CARD ANZXłȂ - * 2. 8kB ȓ̐e@pR[h܂܂Ȃ΂ȂȂ - * 3. CXʐM̎菇e@/q@ňقȂ - * ܂. - * - * ̓_ɒӂăAvP[V݌vɍbp[őΉ - * قƂǂ̓eeqŋʉ‚ˆlpƑΐvCT|[g - * CARD-ROM eʂߖ񂳂ꂽIȃvO쐬邱Ƃo܂. - * t, DS_E[hvC̐e@Ǝq@̊ԂɑSʓ_ - * ɋ悤ȗ_͓Ȃł傤. - */ - if (!MB_IsMultiBootChild()) - { - ParentMain(); - } - else - { - ChildMain(); - } - - /* ͂֋yт܂ */ -} diff --git a/build/tests/CardCopyMultiBoot/src/parent.c b/build/tests/CardCopyMultiBoot/src/parent.c deleted file mode 100644 index 4f9aa7df..00000000 --- a/build/tests/CardCopyMultiBoot/src/parent.c +++ /dev/null @@ -1,585 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - MB - demos - cloneboot - File: parent.c - - Copyright 2006-2009 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ -*---------------------------------------------------------------------------*/ - - -#include -#include -#include - -#include "mbp.h" -#include "common.h" -#include "disp.h" -#include "gmain.h" -#include "wh.h" -#include "bt.h" - - -/******************************************************************************/ - -void sd_proc(void *p1); - -static void GetChannelMain(void); -static BOOL ConnectMain(u16 tgid); -static void PrintChildState(void); -static BOOL JudgeConnectableChild(WMStartParentCallback *cb); - -// ubN]Ԓʒm֐ -void BlockTransferCallback(void *arg); - - -//============================================================================ -// 萔` -//============================================================================ - -#define STACK_SIZE 1024 -#define THREAD1_PRIO 15 -#define MESSAGE_RECV (OSMessage)100 - - -/* ̃fŎgp GGID */ -#define WH_GGID SDK_MAKEGGID_SYSTEM(0x22) - - -/* ̃f_E[hvO */ -const MBGameRegistry mbGameList = { - /* - * N[u[gł̓vÕpX NULL w肵܂. - * MBP W[ MBP_RegistFile() ɂdl, - * ۂ MB_RegisterFile() ֗^ƂĂ͉ł\܂. - */ - NULL, - (u16 *)L"CardCopyMultiBoot", // Q[ - (u16 *)L"CardCopyMultiBoot(cloneboot)", // Q[e - "/data/icon.char", // ACRLN^f[^ - "/data/icon.plt", // ACRpbgf[^ - WH_GGID, // GGID - MBP_CHILD_MAX + 1, // ővClAe@̐܂߂l -}; - - - -//============================================================================ -// ϐ` -//============================================================================ - -OSThread sd_thread; -u32 stack1[STACK_SIZE / sizeof(u32)]; -OSMessage mesgBuffer[10]; -OSMessageQueue mesgQueue; -FSFile file; - -BOOL writable = TRUE; - -static s32 gFrame; // t[JE^ - -extern u8 gRecvBuf[]; - -//----------------------- -// ʐMoH̕ێp -//----------------------- -static u16 sChannel = 0; -static const MBPChildInfo *sChildInfo[MBP_CHILD_MAX]; - -//============================================================================ -// ֐` -//============================================================================ - -void sd_proc(void *p1) -{ -#pragma unused(p1) - OSMessage src; - - while (1) - { - writable = TRUE; - (void)WH_SendData(&writable, sizeof(writable), NULL); - - (void)OS_ReceiveMessage(&mesgQueue, &src, OS_MESSAGE_BLOCK); - - writable = FALSE; - - if (FS_WriteFile(&file, (void*)src, WH_CHILD_SIZE) == -1) - { - BgPutString(8, 3, 0x2, "Write SD File error!"); - OS_WaitVBlankIntr(); - OS_Terminate(); - } - if ( ((u8*)src)[WH_CHILD_SIZE] == TRUE ) - { - (void)FS_CloseFile(&file); - } - } -} - - -/*****************************************************************************/ -/* e@p̈ .parent ZNV̒`͈͂Jn܂ */ -#include -/*****************************************************************************/ - - -/*---------------------------------------------------------------------------* - Name: ParentMain - - Description: e@C[` - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ParentMain(void) -{ - FSFile dir; - u16 tgid = 0; - - // ʁAOS̏ - CommonInit(); - - // ʏ - DispInit(); - - // q[v̏ - InitAllocateSystem(); - - // WH ɏݒ - WH_SetGgid(WH_GGID); - - // 荞ݗL - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - DispOn(); - - // FS - { - static u32 fs_tablework[0x100 / 4]; - FS_Init(FS_DMA_NOT_USE); - (void)FS_LoadTable(fs_tablework, sizeof(fs_tablework)); - } - FS_InitFatDriver(); - - { - static const char *path = "sdmc:/card_dump.sbin"; - FS_InitFile(&file); - (void)FS_OpenDirectory(&dir, "sdmc:/", FS_FILEMODE_RW); - (void)FS_CreateFile(path, FS_PERMIT_R|FS_PERMIT_W); - if (!FS_OpenFileEx(&file, path, FS_FILEMODE_RW)) - { - BgPutString(8, 1, 0x2, "Cannot open writable SD File!"); - OS_WaitVBlankIntr(); - OS_Terminate(); - } - (void)FS_SetFileLength(&file, 0); - } - - while (TRUE) - { - OS_WaitVBlankIntr(); - - // gtBbN̏Ȃ`ľ - GetChannelMain(); - - /* - * tgid͐e@N̓xɊ{Iɂ͑OƈႤlݒ肵܂B - * }`u[gq@Ƃ̍Đڑɂ͓tgidŋNȂ - * ăXLsȂȂΐڑłȂȂ邽ߒӂKvłB - * xXLsȂĂĐڑꍇɂtgidۑĂ - * Kv͂܂B - */ - // }`u[gzM - if (ConnectMain(++tgid)) - { - // }`u[gq@̋Nɐ - break; - } - else - { - // WH W[IČJԂ - WH_Finalize(); - while(WH_GetSystemState()==WH_SYSSTATE_BUSY){} - (void)WH_End(); - while(WH_GetSystemState()==WH_SYSSTATE_BUSY){} - } - } - - //-------------- - // }`u[g͎q@ZbgʐMUؒf܂B - // ܂e@xMB_End()ʐMIKv܂B - // eqxSɐؒfꂽԂňꂩʐMmĂB - // - // ܂̎q@aidVbt邽߁AKv - // }`u[gOaidMACAhX̑gݍ킹ۑĂA - // ĐڑɐVaidƂ̌т‚sȂĂB - //-------------- - - -#if !defined(MBP_USING_MB_EX) - if (!WH_Initialize()) - { - OS_Panic("WH_Initialize failed."); - } -#endif - - // ڑq@̔p֐ݒ - WH_SetJudgeAcceptFunc(JudgeConnectableChild); - - // SDXbh - OS_InitMessageQueue(&mesgQueue, &mesgBuffer[0], 10); - OS_CreateThread(&sd_thread, sd_proc, NULL, stack1 + STACK_SIZE / sizeof(u32), STACK_SIZE, THREAD1_PRIO); - - /* C[` */ - while (TRUE) - { - OS_WaitVBlankIntr(); - - ReadKey(); - -// BgClear(); - - switch (WH_GetSystemState()) - { - case WH_SYSSTATE_ERROR: - case WH_SYSSTATE_CONNECT_FAIL: - WH_Reset(); - break; - - case WH_SYSSTATE_IDLE: - /* ---------------- - * q@ōăXLȂɓe@ɍĐڑꍇɂ - * q@tgidychannel킹Kv܂B - * ̃fł́A}`u[gƓchannelƃ}`u[gtgid+1 - * eqƂɎgp邱ƂŁAăXLȂłڑł悤ɂĂ܂B - * - * MACAhXw肵čăXLꍇɂ͓tgid, channelłȂĂ - * 肠܂B - * ---------------- */ - (void)WH_ParentConnect(WH_CONNECTMODE_MP_PARENT, (u16)(tgid + 1), sChannel); - WH_SetReceiver(MpReceiveCallback); - - // SDXbhN - OS_WakeupThreadDirect(&sd_thread); - break; - - case WH_SYSSTATE_CONNECTED: - { - BgPutString(8, 1, 0x2, "Parent mode"); -// ModeChild(); - } - break; - } - - // q@Ԃ\ - ModeParent(); - } -} - -/*---------------------------------------------------------------------------* - Name: GetChannelMain - - Description: gp`ldggp𒲂ׂĂ܂߂ɋ߂B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void GetChannelMain(void) -{ - - /*-----------------------------------------------* - * `l̓dggpƒׂŁA - * Ԏgp̒Ⴂ`lI܂B - * WM_MeasureChannel()sɂIDLEԂɂȂKv - * }`u[gԂłIDLEԂɎ~܂鎖Ȃ̂Ŏsł܂B - * UWM_InitializeĂœdggp𒲂ׂĂWM_EndŏIA - * 炽߂MB_InitsB - *-----------------------------------------------*/ - if (!WH_Initialize()) - { - OS_Panic("WH_Initialize failed."); - } - - while (TRUE) - { - ReadKey(); - BgClear(); - BgSetMessage(PLTT_YELLOW, " Search Channel "); - - switch (WH_GetSystemState()) - { - //----------------------------------------- - // - case WH_SYSSTATE_IDLE: -// BgSetMessage(PLTT_WHITE, " Push A Button to start "); -// if (IS_PAD_TRIGGER(PAD_BUTTON_A)) - { - BgSetMessage(PLTT_YELLOW, "Check Traffic ratio "); - (void)WH_StartMeasureChannel(); - } - break; - //----------------------------------------- - // `l - case WH_SYSSTATE_MEASURECHANNEL: - { - sChannel = WH_GetMeasureChannel(); -#if !defined(MBP_USING_MB_EX) - (void)WH_End(); -#else - /* IDLE Ԃێ܂܃}`u[g */ - return; -#endif - } - break; - //----------------------------------------- - // WMI - case WH_SYSSTATE_STOP: - /* WM_End}`u[g */ - return; - //----------------------------------------- - // rW[ - case WH_SYSSTATE_BUSY: - break; - //----------------------------------------- - // G[ - case WH_SYSSTATE_ERROR: - (void)WH_Reset(); - break; - //----------------------------------------- - default: - OS_Panic("Illegal State\n"); - } - OS_WaitVBlankIntr(); // VuNI҂ - } -} - - -/*---------------------------------------------------------------------------* - Name: ConnectMain - - Description: }`u[gŐڑB - - Arguments: tgid e@ƂċNꍇtgidw肵܂. - - Returns: q@ւ̓]ɐꍇɂ TRUE, - sLZꂽꍇɂ FALSE Ԃ܂B - *---------------------------------------------------------------------------*/ -static BOOL ConnectMain(u16 tgid) -{ - MBP_Init(mbGameList.ggid, tgid); - - while (TRUE) - { - ReadKey(); - - BgClear(); - - BgPutString(6, 1, PLTT_RED, "Card Copy Multi Boot"); - - BgSetMessage(PLTT_YELLOW, " MB Parent "); - - switch (MBP_GetState()) - { - //----------------------------------------- - // ACh - case MBP_STATE_IDLE: - { - MBP_Start(&mbGameList, sChannel); - } - break; - - //----------------------------------------- - // q@̃Gg[t - case MBP_STATE_ENTRY: - { - BgSetMessage(PLTT_YELLOW, " Wait for list on MB menu "); -// BgSetMessage(PLTT_WHITE, " Now Accepting "); - - if (IS_PAD_TRIGGER(PAD_BUTTON_B)) - { - // B{^Ń}`u[gLZ -// MBP_Cancel(); - break; - } - - // Gg[̎q@ł݂ΊJn”\Ƃ - if (MBP_GetChildBmp(MBP_BMPTYPE_ENTRY) || - MBP_GetChildBmp(MBP_BMPTYPE_DOWNLOADING) || - MBP_GetChildBmp(MBP_BMPTYPE_BOOTABLE)) - { - BgSetMessage(PLTT_WHITE, " Push START Button to start "); - -// if (IS_PAD_TRIGGER(PAD_BUTTON_START)) - { - // _E[hJn - MBP_StartDownloadAll(); - } - } - } - break; - - //----------------------------------------- - // vOzM - case MBP_STATE_DATASENDING: - { - - // S_E[hĂȂ΃X^[g”\. - if (MBP_IsBootableAll()) - { - // u[gJn - MBP_StartRebootAll(); - } - } - break; - - //----------------------------------------- - // u[g - case MBP_STATE_REBOOTING: - { - BgSetMessage(PLTT_WHITE, " Rebooting now "); - } - break; - - //----------------------------------------- - // Đڑ - case MBP_STATE_COMPLETE: - { - // Sɐڑ}`u[g͏I - // ʏ̐e@ƂĖċNB - BgSetMessage(PLTT_WHITE, " Reconnecting now "); - - OS_WaitVBlankIntr(); - return TRUE; - } - break; - - //----------------------------------------- - // G[ - case MBP_STATE_ERROR: - { - // ʐMLZ - MBP_Cancel(); - } - break; - - //----------------------------------------- - // ʐMLZ - case MBP_STATE_CANCEL: - // None - break; - - //----------------------------------------- - // ʐMُI - case MBP_STATE_STOP: - OS_WaitVBlankIntr(); - return FALSE; - } - - // q@Ԃ\ - PrintChildState(); - - OS_WaitVBlankIntr(); // VuNI҂ - } -} - - -/*---------------------------------------------------------------------------* - Name: PrintChildState - - Description: q@ʂɕ\ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void PrintChildState(void) -{ - static const char *STATE_NAME[] = { - "NONE ", - "CONNECTING ", - "REQUEST ", - "ENTRY ", - "DOWNLOADING", - "BOOTABLE ", - "BOOTING ", - }; - enum - { - STATE_DISP_X = 2, - INFO_DISP_X = 15, - BASE_DISP_Y = 2 - }; - - u16 i; - - /* q@Xg̕\ */ - for (i = 1; i <= MBP_CHILD_MAX; i++) - { - const MBPChildInfo *childInfo; - MBPChildState childState = MBP_GetChildState(i); - const u8 *macAddr; - - SDK_ASSERT(childState < MBP_CHILDSTATE_NUM); - - // ԕ\ - BgPutString(STATE_DISP_X, i + BASE_DISP_Y, PLTT_WHITE, STATE_NAME[childState]); - - // [U[\ - childInfo = MBP_GetChildInfo(i); - macAddr = MBP_GetChildMacAddress(i); - - if (macAddr != NULL) - { - BgPrintStr(INFO_DISP_X, i + BASE_DISP_Y, PLTT_WHITE, - "%02x%02x%02x%02x%02x%02x", - macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]); - } - } -} - - -/*---------------------------------------------------------------------------* - Name: JudgeConnectableChild - - Description: Đڑɐڑ”\Ȏq@ǂ𔻒肷֐ - - Arguments: cb ڑĂq@̏. - - Returns: ڑ󂯕tꍇ TRUE. - 󂯕tȂꍇ FALSE. - *---------------------------------------------------------------------------*/ -static BOOL JudgeConnectableChild(WMStartParentCallback *cb) -{ - u16 playerNo; - - /* cb->aid ̎q@̃}`u[gaidMACAhX猟܂ */ - playerNo = MBP_GetPlayerNo(cb->macAddress); - - OS_TPrintf("MB child(%d) -> MP child(%d)\n", playerNo, cb->aid); - - if (playerNo == 0) - { - return FALSE; - } - - sChildInfo[playerNo - 1] = MBP_GetChildInfo(playerNo); - return TRUE; -} - - -/*****************************************************************************/ -/* e@p̈ .parent ZNV̒`͈͂I܂ */ -#include -/*****************************************************************************/ diff --git a/build/tests/CardCopyMultiBoot/src/text.c b/build/tests/CardCopyMultiBoot/src/text.c deleted file mode 100644 index 24a49eb1..00000000 --- a/build/tests/CardCopyMultiBoot/src/text.c +++ /dev/null @@ -1,385 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - WBT - demos - wbt-1 - File: text.c - - Copyright 2006-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifdef SDK_TWL -#include -#else -#include -#endif - -#include "text.h" - -#define TAB_SIZE 8 -/*****************************************************/ - -static LINE_BUF *lb_free_ptr; -static int x_size = X_LINE_MAX; -static int y_size = Y_LINE_MAX; - -static void link_line_buf(LINE_BUF * m, LINE_BUF * s) -{ - if (m->next != NULL) - { - s->next = m->next; - (s->next)->prev = s; - } - else - s->next = NULL; - - m->next = s; - s->prev = m; -} - -static void unlink_line_buf(LINE_BUF * s) -{ - if ((s->prev != NULL) && (s->next != NULL)) - { - (s->prev)->next = s->next; - (s->next)->prev = s->prev; - s->next = NULL; - s->prev = NULL; - } - else if (s->next != NULL) - { - s->prev = NULL; - (s->next)->prev = NULL; - s->next = NULL; - } - else if (s->prev != NULL) - { - s->next = NULL; - (s->prev)->next = NULL; - s->prev = NULL; - } -} - -static LINE_BUF *alloc_line_buf(void) -{ - LINE_BUF *tmp; - tmp = lb_free_ptr; - lb_free_ptr = lb_free_ptr->next; - unlink_line_buf(tmp); - tmp->last_count = 0; - tmp->cur_count = 0; -#if 0 - for (i = 0; i < LINE_BUF_X_SIZE; i++) - tmp->buf[i] = 0x20; -#endif - return (tmp); -} - -static void free_line_buf(LINE_BUF * lb) -{ - lb->next = lb_free_ptr; - lb->prev = NULL; - (lb->next)->prev = lb; - lb_free_ptr = lb; -} - -static int init_lb_heap(void *heap_start, void *heap_end) -{ - int i; - LINE_BUF *lb_heap = (LINE_BUF *) heap_start; - lb_free_ptr = (LINE_BUF *) heap_start; - lb_heap[0].prev = NULL; - - i = 0; - while ((u32)&(lb_heap[i + 1]) < (u32)heap_end) - { - link_line_buf(&(lb_heap[i]), &(lb_heap[i + 1])); - i++; - } - lb_heap[i].next = NULL; - return i; /* num of line buffer */ -} - -static void init_text_buf(TEXT_BUF * tb) -{ - tb->num_y = &y_size; - tb->num_x = &x_size; - tb->start = tb->cur = alloc_line_buf(); -} - - -void init_text(TEXT_CTRL * tc, u16 *screen, u16 palette) -{ - tc->screen = screen; - tc->x_line = 0; - tc->y_line = 0; - tc->palette = palette; - init_text_buf(&(tc->text_buf)); -} - - - -void m_set_palette(TEXT_CTRL * tc, u16 num) -{ - tc->palette = (u16)(0x0f & num); -} - -u16 m_get_palette(TEXT_CTRL * tc) -{ - return tc->palette; -} - -static void clear_line(TEXT_CTRL * tc) -{ - int i; - i = tc->x_line; - - for (; i < X_LINE_MAX; i++) - tc->screen[(tc->y_line * X_LINE_MAX) + i] = 0; - -} - -static void add_y_line(TEXT_CTRL * tc, u16 num) -{ - tc->y_line += num; - if (tc->y_line > Y_LINE_MAX) - { - tc->y_line = 0; - } -} - -static void add_x_line(TEXT_CTRL * tc, u16 num) -{ - tc->x_line += num; - - if (tc->x_line > X_LINE_MAX) - { - tc->x_line = 0; - tc->y_line++; - if (tc->y_line > Y_LINE_MAX) - { - tc->y_line = 0; - } - } -} - -static void put_char_vram(TEXT_CTRL * tc, int c, u16 col) -{ - - switch (c) - { - case '\0': - break; - case '\n': - clear_line(tc); - tc->x_line = 0; - add_y_line(tc, 1); - break; - case '\r': - tc->x_line = 0; - break; - case '\t': - add_x_line(tc, TAB_SIZE); - break; - case '\f': - tc->x_line = 0; - tc->y_line = 0; - clear_line(tc); - break; - case '\b': /* Back Space */ - case '\v': /* Vertical Tab */ - break; - default: - if ((c < 0x20) || (0x7f < c)) - c = 0x20; /* white space */ - tc->screen[(tc->y_line * X_LINE_MAX) + tc->x_line] = (u16)((col << 12) | (0x00ff & c)); - add_x_line(tc, 1); - } -} - -/**********************/ - -void m_putchar(TEXT_CTRL * tc, int c) -{ - int i; - LINE_BUF *tmp; - TEXT_BUF *tb = &(tc->text_buf); - - switch (c) - { - case '\0': - break; - case '\n': - if (tb->cur->next == NULL) - { - tmp = tb->cur; /* \Jnobt@ČvZ */ - for (i = 0; i < *(tb->num_y) - 1 && i < LINE_BUF_Y_SIZE; i++) - { - if (tmp->prev == NULL) - break; - tmp = tmp->prev; - } - tb->start = tmp; - while (tmp->prev != NULL) - { /* Ȃobt@ */ - tmp = tmp->prev; - unlink_line_buf(tmp); - free_line_buf(tmp); - } - tmp = alloc_line_buf(); /* obt@PŽ擾 */ - - link_line_buf(tb->cur, tmp); /* 擾obt@Jg - obt@̎ɃN */ - tb->cur = tmp; /* Jgobt@XV */ - tb->cur->cur_count = 0; - tb->cur->last_count = 0; - } - else - { - tb->cur = tb->cur->next; - tb->cur->cur_count = 0; - tb->cur->last_count = 0; - } - break; - case '\r': - tb->cur->cur_count = 0; - break; - case '\t': - tb->cur->cur_count += TAB_SIZE; - if (tb->cur->cur_count > LINE_BUF_X_SIZE) - tb->cur->cur_count = LINE_BUF_X_SIZE; - if (tb->cur->cur_count > tb->cur->last_count) - tb->cur->last_count = tb->cur->cur_count; - break; - case '\f': - tb->cur = tb->start; - tb->cur->cur_count = 0; - tb->cur->last_count = 0; - break; - case '\a': /* BELL */ - break; - case '\b': /* Back Space */ - if (tb->cur->cur_count > 0) - tb->cur->cur_count--; - break; - case '\v': /* Vertical Tab */ - break; - default: - tb->cur->buf[tb->cur->cur_count] = c; - tb->cur->col[tb->cur->cur_count] = tc->palette; - tb->cur->cur_count++; - if (tb->cur->cur_count > LINE_BUF_X_SIZE) - { - tb->cur->cur_count = LINE_BUF_X_SIZE; - break; - } - if (tb->cur->cur_count > tb->cur->last_count) - tb->cur->last_count = tb->cur->cur_count; - break; - } -} - - -int init_text_buf_sys(void *heap_start, void *heap_end) -{ - return init_lb_heap(heap_start, heap_end); -} - - -void text_buf_to_vram(TEXT_CTRL * tc) -{ - int x_line, line_no; - int c; - u16 col; - LINE_BUF *lb; - TEXT_BUF *tb = &(tc->text_buf); - - - lb = tb->start; - - put_char_vram(tc, '\f', (u16)0); - - for (line_no = 0; line_no < (*tb->num_y + 1); line_no++) - { - x_line = 0; - if (lb == NULL) - break; - while (x_line < lb->last_count) - { - if (x_line >= (*tb->num_x + 1)) - { - break; - } - else - { - c = lb->buf[x_line]; - col = lb->col[x_line]; - put_char_vram(tc, c, col); - } - x_line++; - } - - if (x_line <= *tb->num_x) - { - put_char_vram(tc, '\n', (u16)0); - } - lb = lb->next; - } - - for (; line_no <= *tb->num_y; line_no++) - { - put_char_vram(tc, '\n', (u16)0); - } -} - - -void mprintf(const char *text, ...) -{ - va_list vlist; - char temp[32]; - s32 i = 0; - - va_start(vlist, text); - (void)OS_VSNPrintf(temp, 32, text, vlist); - va_end(vlist); - for (i = 0; i < 33; i++) - { - m_putchar(tc[0], (int)temp[i]); - if (temp[i] == '\n') - { - break; - } - } - if (i > 32) - m_putchar(tc[0], '\n'); - -} - -void mfprintf(TEXT_CTRL * tc, const char *text, ...) -{ - va_list vlist; - char temp[32]; - s32 i = 0; - - va_start(vlist, text); - (void)OS_VSNPrintf(temp, 32, text, vlist); - va_end(vlist); - for (i = 0; i < 33; i++) - { - m_putchar(tc, (int)temp[i]); - if (temp[i] == '\n') - { - break; - } - - } - if (i > 32) - m_putchar(tc, '\n'); -} diff --git a/build/tests/CheckCardAccess/Makefile b/build/tests/CheckCardAccess/Makefile deleted file mode 100644 index a9bcdf87..00000000 --- a/build/tests/CheckCardAccess/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckCardAccess -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.off Makefile.normal Makefile.game - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/CheckCardAccess/Makefile.game b/build/tests/CheckCardAccess/Makefile.game deleted file mode 100644 index 336eafb1..00000000 --- a/build/tests/CheckCardAccess/Makefile.game +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckCardAccess -# File: Makefile.game -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -#---------------------------------------------------------------------------- -TARGET_PLATFORM := TWL - -TARGET_NAME = finalize_check_game -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).tad - -SRCS = ./src/main.c ./src/font.c - -MACRO_FLAGS += -DMY_TARGET_NAME=\"$(basename $(TARGET_BIN))\" - -#------------------------- - -ROM_SPEC = game_mode.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -.PHONY: build_time - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckCardAccess/Makefile.normal b/build/tests/CheckCardAccess/Makefile.normal deleted file mode 100644 index 267b70f0..00000000 --- a/build/tests/CheckCardAccess/Makefile.normal +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckCardAccess -# File: Makefile.normal -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -#---------------------------------------------------------------------------- -TARGET_PLATFORM := TWL - -TARGET_NAME = finalize_check_normal -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).tad - -SRCS = ./src/main.c ./src/font.c - -MACRO_FLAGS += -DMY_TARGET_NAME=\"$(basename $(TARGET_BIN))\" - -#------------------------- - -ROM_SPEC = normal_mode.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -.PHONY: build_time - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckCardAccess/Makefile.off b/build/tests/CheckCardAccess/Makefile.off deleted file mode 100644 index 4585c909..00000000 --- a/build/tests/CheckCardAccess/Makefile.off +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckCardAccess -# File: Makefile.off -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -#---------------------------------------------------------------------------- -TARGET_PLATFORM := TWL - -TARGET_NAME = finalize_check_slotpoweroff -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).tad - -SRCS = ./src/main.c ./src/font.c - -MACRO_FLAGS += -DMY_TARGET_NAME=\"$(basename $(TARGET_BIN))\" - -#------------------------- - -ROM_SPEC = slot_power_off.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -.PHONY: build_time - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckCardAccess/game_mode.rsf b/build/tests/CheckCardAccess/game_mode.rsf deleted file mode 100644 index f8d2dba8..00000000 --- a/build/tests/CheckCardAccess/game_mode.rsf +++ /dev/null @@ -1,243 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] - # - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - # RomHeaderTemplate ../rh/0C5A/rom_header_0c5a.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - # BannerFile "banner_LTD/banner.bnr" - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [1 - 255] - # - #AgreeEULAVersion 1 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode 4CDA - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - GameCardNitroMode TRUE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / PENDING / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/CheckCardAccess/normal_mode.rsf b/build/tests/CheckCardAccess/normal_mode.rsf deleted file mode 100644 index 888fbd4d..00000000 --- a/build/tests/CheckCardAccess/normal_mode.rsf +++ /dev/null @@ -1,243 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] - # - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - # RomHeaderTemplate ../rh/0C4A/rom_header_0c4a.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - # BannerFile "banner_LTD/banner.bnr" - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [1 - 255] - # - #AgreeEULAVersion 1 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode 4CDA - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - GameCardOn TRUE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - #GameCardNitroMode FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / PENDING / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/CheckCardAccess/slot_power_off.rsf b/build/tests/CheckCardAccess/slot_power_off.rsf deleted file mode 100644 index b0013f6f..00000000 --- a/build/tests/CheckCardAccess/slot_power_off.rsf +++ /dev/null @@ -1,243 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] - # - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - # RomHeaderTemplate ../rh/0C3A/rom_header_0c3a.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - # BannerFile "banner_LTD/banner.bnr" - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [1 - 255] - # - #AgreeEULAVersion 1 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode 4CDA - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - #GameCardNitroMode FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / PENDING / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/CheckCardAccess/src/font.c b/build/tests/CheckCardAccess/src/font.c deleted file mode 100644 index 9500697a..00000000 --- a/build/tests/CheckCardAccess/src/font.c +++ /dev/null @@ -1,579 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: font.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "font.h" - -/*---------------------------------------------------------------------------* - Character data - *---------------------------------------------------------------------------*/ -const u32 d_CharData[8 * 256] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01010010, 0x01010010, 0x00000110, // 0001h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 00f6h - 0x00100000, 0x00100000, 0x00100000, 0x00111111, - 0x00000000, 0x01010010, 0x01010010, 0x00111111, // 00f7h - 0x00010010, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01010011, 0x01010100, 0x00100011, // 00f8h - 0x00100100, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01010000, 0x01011111, 0x00010000, // 00f9h - 0x00001000, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x01010010, 0x01111111, 0x00100010, // 00fah - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x01010001, 0x01010010, 0x00100000, // 00fbh - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01011110, 0x01010010, 0x00100110, // 00fch - 0x00111001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01011110, 0x00010000, // 00fdh - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x00100101, 0x01001010, 0x00101010, // 00feh - 0x00100000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -}; - - -/*---------------------------------------------------------------------------* - Palette data - *---------------------------------------------------------------------------*/ -const u32 d_PaletteData[8 * 16] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // black - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001f0000, 0x00000000, 0x00000000, 0x00000000, // red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03e00000, 0x00000000, 0x00000000, 0x00000000, // green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c000000, 0x00000000, 0x00000000, 0x00000000, // blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03ff0000, 0x00000000, 0x00000000, 0x00000000, // yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fe00000, 0x00000000, 0x00000000, 0x00000000, // light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00180000, 0x00000000, 0x00000000, 0x00000000, // dark red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03000000, 0x00000000, 0x00000000, 0x00000000, // dark green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, // dark blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03180000, 0x00000000, 0x00000000, 0x00000000, // dark yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60180000, 0x00000000, 0x00000000, 0x00000000, // dark purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x63000000, 0x00000000, 0x00000000, 0x00000000, // dark light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x56b50000, 0x00000000, 0x00000000, 0x00000000, // gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x2d6b0000, 0x00000000, 0x00000000, 0x00000000, // dark gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fff0000, 0x00000000, 0x00000000, 0x00000000, // white - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CheckCardAccess/src/font.h b/build/tests/CheckCardAccess/src/font.h deleted file mode 100644 index b4a94093..00000000 --- a/build/tests/CheckCardAccess/src/font.h +++ /dev/null @@ -1,36 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: font.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef FONT_H_ -#define FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif -/*===========================================================================*/ - -#include - -extern const u32 d_CharData[8 * 256]; -extern const u32 d_PaletteData[8 * 16]; - -/*===========================================================================*/ -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // FONT_H_ diff --git a/build/tests/CheckCardAccess/src/hotswTypes.h b/build/tests/CheckCardAccess/src/hotswTypes.h deleted file mode 100644 index 02d0843e..00000000 --- a/build/tests/CheckCardAccess/src/hotswTypes.h +++ /dev/null @@ -1,134 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - HOTSW - include - File: type.h - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - *---------------------------------------------------------------------------*/ -#ifndef __HOTSW_TYPES_H__ -#define __HOTSW_TYPES_H__ - -#include -#include -#include "romSpec.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -static inline void HOTSW_WaitCardCtrl(void) -{ - while( reg_MI_MCCNT1_A & REG_MI_MCCNT1_START_MASK ){} -} - -// Define ------------------------------------------------------------------- -// --- Boot Segment -#define BOOT_SEGMENT_SIZE 0x1000 - -// --- Secure Segment -#define SECURE_SEGMENT_START 0x4000 -#define SECURE_SEGMENT_SIZE 0x4000 -#define SECURE_SEGMENT_END (SECURE_SEGMENT_START + SECURE_SEGMENT_SIZE) - -// --- TWL Card -#define TWLCARD_BORDER_OFFSET 0x80000 - -// --- Page / Segment (Byte) -#define PAGE_SIZE 0x200 -#define ONE_SEGMENT_SIZE 0x1000 - -// --- Page / Segment (Word) -#define PAGE_WORD_SIZE 0x80 -#define ONE_SEGMENT_WORD_SIZE 0x400 - -// --- Rom Emulation -#define ROM_EMULATION_DATA_SIZE 0x20 - -// --- Thread -#define HOTSW_THREAD_STACK_SIZE (1024 * 2) -#define HOTSW_DMA_MSG_NUM 8 -#define HOTSW_INSERT_MSG_NUM 16 -#define HOTSW_PULLED_MSG_NUM 16 -#define HOTSW_CTRL_MSG_NUM 8 -#define HOTSW_MSG_BUFFER_NUM (HOTSW_INSERT_MSG_NUM + HOTSW_PULLED_MSG_NUM + HOTSW_CTRL_MSG_NUM) -#define HOTSW_POLLING_CTRL_BUFFER_NUM 4 - -// --- Card Control Reg 0 -#define HOTSW_E2PROM_CTRL_MASK 0x00ff - -// --- Card Control Reg 1 -#define START_FLG_MASK 0x80000000 -#define READY_FLG_MASK 0x00800000 - -#define LATENCY1_SHIFT 0 -#define LATENCY1_MASK 0x00001fff - -#define DS_SHIFT 13 -#define DS_MASK 0x00002000 - -#define SE_SHIFT 14 -#define SE_MASK 0x00004000 - -#define SCR_SHIFT 15 -#define SCR_MASK 0x00008000 - -#define LATENCY2_SHIFT 16 -#define LATENCY2_MASK 0x003f0000 - -#define CS_SHIFT 22 -#define CS_MASK 0x00400000 - -#define RDY_SHIFT 23 -#define RDY_MASK 0x00800000 - -#define PC_SHIFT 24 -#define PC_MASK 0x07000000 - -#define CT_SHIFT 27 -#define CT_MASK 0x08000000 - -#define TRM_SHIFT 28 -#define TRM_MASK 0x10000000 - -#define RESB_SHIFT 29 -#define RESB_MASK 0x20000000 - -#define WR_SHIFT 30 -#define WR_MASK 0x40000000 - -#define START_SHIFT 31 -#define START_MASK 0x80000000 - -#define SCRAMBLE_MASK 0x1040e000 // XNu֌W̃tO}XN -#define SECURE_COMMAND_SCRAMBLE_MASK 0x00406000 // CS SE DS̃}XN - -// --- Page Count -#define PAGE_0 0x0UL << PC_SHIFT -#define PAGE_1 0x1UL << PC_SHIFT -#define PAGE_2 0x2UL << PC_SHIFT -#define PAGE_4 0x3UL << PC_SHIFT -#define PAGE_8 0x4UL << PC_SHIFT -#define PAGE_16 0x5UL << PC_SHIFT -#define PAGE_32 0x6UL << PC_SHIFT -#define PAGE_STAT 0x7UL << PC_SHIFT - - -// union --------------------------------------------------------------------- -typedef union -{ - u64 dw; - u8 b[8]; -} Cmd64; - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif // __HOTSW_TYPES_H__ \ No newline at end of file diff --git a/build/tests/CheckCardAccess/src/main.c b/build/tests/CheckCardAccess/src/main.c deleted file mode 100644 index a449884a..00000000 --- a/build/tests/CheckCardAccess/src/main.c +++ /dev/null @@ -1,768 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos - CARD - hotswDebug - File: main_finalize.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - *---------------------------------------------------------------------------*/ - -#include -#include -#include "DEMO.h" -#include "hotswTypes.h" -#include "font.h" - -#define SDK_MAKERCODE '10' -#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) - -#define MY_TEMP_BUFFER_SIZE 0x80000 -#define GAME_FIELD_START_ADDRESS 0x8000 - -#define ONE_SEGMENT_PAGE_NUM 8 - -#define READY_MASK 0x00800000 -#define CARD_COMMAND_MASK 0x07000000 - -#define MY_ROMHEADER_TWL ((ROM_Header_Short *)HW_TWL_CARD_ROM_HEADER_BUF) -#define MY_ROMHEADER_NTR ((ROM_Header_Short *)HW_CARD_ROM_HEADER) -#define MY_ROMHEADER_NAND ((ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF) - -// --------------------------------------------------------------- -// HMACSHA1̌ -static u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = { - 0x21, 0x06, 0xc0, 0xde, - 0xba, 0x98, 0xce, 0x3f, - 0xa6, 0x92, 0xe3, 0x9d, - 0x46, 0xf2, 0xed, 0x01, - - 0x76, 0xe3, 0xcc, 0x08, - 0x56, 0x23, 0x63, 0xfa, - 0xca, 0xd4, 0xec, 0xdf, - 0x9a, 0x62, 0x78, 0x34, - - 0x8f, 0x6d, 0x63, 0x3c, - 0xfe, 0x22, 0xca, 0x92, - 0x20, 0x88, 0x97, 0x23, - 0xd2, 0xcf, 0xae, 0xc2, - - 0x32, 0x67, 0x8d, 0xfe, - 0xca, 0x83, 0x64, 0x98, - 0xac, 0xfd, 0x3e, 0x37, - 0x87, 0x46, 0x58, 0x24 -}; - -static u32 rhBuf[BOOT_SEGMENT_SIZE/sizeof(u32)]; -static u32 checkBuf[MY_TEMP_BUFFER_SIZE/sizeof(u32)]; - -static u16 card_lock_id; -static BOOL error, flxhash, ltdhash, romheader; -static BOOL isTwlApplication; -static BOOL isTwlCard; -static ROM_Header_Short *rh; - -static u16 screen[32 * 32] ATTRIBUTE_ALIGN(HW_CACHE_LINE_SIZE); - -// --------------------------------------------------------------- -static void CheckMirrorImage(void); -static int CompRomHeaderForNTR(void* buf); -static void CheckRomHeader(void); -static BOOL CheckHashValue(void* buf, u32 size, void* digest); -static void MY_LoadCard_arm7Static(void); -static void MY_LoadCard_arm7LtdStatic(void); -static void CheckBackupDevice(void); -static void ShowResult(void); -static void debugMessage(void); - -static void ReadBootSegNormal(void* buf); -static void SetCommand(Cmd64 *cndLE); -static void ReadPageGame(u32 start_addr, void* buf, u32 size); -static void ReadCardData(void* dest, s32 offset, s32 length); - -static void VBlankIntr (void); -static void PrintString (s16 x, s16 y, u8 palette, char *text, ...); -static void VolumeSwitchCallback(SNDEXResult result, void* arg); - -/*---------------------------------------------------------------------------* - Name: NitroMain - - Description: C Gg|Cg. - *---------------------------------------------------------------------------*/ -void NitroMain(void) -{ - CARDRomHeader *card_header = (void*)CARD_GetRomHeader(); - - OS_Init(); - OS_InitTick(); - CARD_Init(); - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - if ( card_header->maker_code == SDK_MAKERCODE ) - { - CARD_Enable(TRUE); - } - - /* \ݒ菉 */ - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void*)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - (void)GX_DisableBankForLCDC(); - MI_CpuFillFast((void*)HW_OAM, GX_LCD_SIZE_Y, HW_OAM_SIZE); - MI_CpuClearFast((void*)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void*)HW_DB_OAM, GX_LCD_SIZE_Y, HW_DB_OAM_SIZE); - MI_CpuClearFast((void*)HW_DB_PLTT, HW_DB_PLTT_SIZE); - GX_SetBankForBG(GX_VRAM_BG_128_A); - G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0xf800, // SCR x[XubN 31 - GX_BG_CHARBASE_0x00000, // CHR x[XubN 0 - GX_BG_EXTPLTT_01); - G2_SetBG0Priority(0); - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - GX_SetVisiblePlane(GX_PLANEMASK_BG0); - GX_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GX_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - MI_CpuClearFast((void*)screen, sizeof(screen)); - DC_FlushRange(screen, sizeof(screen)); - GX_LoadBG0Scr(screen, 0, sizeof(screen)); - - /* ݐݒ */ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - /* LCD \Jn */ - GX_DispOn(); - GXS_DispOn(); - - PrintString(0, 0, 0xc, "+++ Card Access Check +++"); - - // NANDAvHYB̏ꍇ - if(MY_ROMHEADER_NAND->platform_code == 0x02){ - PrintString(0, 2, 0x5, ""); - } - else if(MY_ROMHEADER_NAND->platform_code == 0x03){ - PrintString(0, 2, 0x6, ""); - } - - // J[hAv^Cv𔻕ʁBgRom Header Buffer ؑւ - if(MY_ROMHEADER_NTR->platform_code & PLATFORM_CODE_FLAG_TWL){ - PrintString(0, 5, 0xf, "- TWL Application -"); - isTwlApplication = TRUE; - rh = MY_ROMHEADER_TWL; - } - else{ - PrintString(0, 5, 0xf, "- NTR Application -"); - isTwlApplication = FALSE; - rh = MY_ROMHEADER_NTR; - } - - // J[h^Cv̔ - isTwlCard = (*(vu32 *)(HW_BOOT_CHECK_INFO_BUF) & HOTSW_ROMID_TWLROM_MASK) ? TRUE : FALSE; - - // Frh̏IĂĂяo -// debugMessage(); - - // tȌ - error = FALSE; - flxhash = TRUE; - ltdhash = TRUE; - romheader = TRUE; - - // bNID擾Ă - card_lock_id = (u16)OS_GetLockID(); - - if(isTwlApplication){ - MY_LoadCard_arm7Static(); - MY_LoadCard_arm7LtdStatic(); - } - else{ - CheckMirrorImage(); - } - - CheckRomHeader(); - CheckBackupDevice(); - - ShowResult(); - - while(1){ -// DEMO_DrawFlip(); - OS_WaitVBlankIntr(); - } -} - - -/*---------------------------------------------------------------------------* - Name: CheckMirrorImage - - Description: - - Game[h GameR}h OK - NormalR}h All 1 - - Normal[h GameR}h All 1 - NormalR}h OK - - SlotPowerOff GameR}h All 0 - NormalR}h All 0 - *---------------------------------------------------------------------------*/ -static void CheckMirrorImage(void) -{ - u32 buf1[PAGE_SIZE/sizeof(u32)]; - u32 buf2[PAGE_SIZE/sizeof(u32)]; - u32 buf_ff[PAGE_SIZE/sizeof(u32)]; - u32 buf_00[PAGE_SIZE/sizeof(u32)]; - - MI_CpuFill8( buf_ff, 0xff, sizeof(buf_ff) ); - MI_CpuFill8( buf_00, 0x0, sizeof(buf_00) ); - - CARD_LockRom(card_lock_id); - - // Game[h̃R}hKey TablëGamëǂ - ReadCardData(buf1, (s32)0x1000, (s32)PAGE_SIZE); - ReadCardData(buf2, (s32)0x8000, (s32)PAGE_SIZE); - - CARD_UnlockRom(card_lock_id); - - // Game[hKey Tablë悩Gamë̃C[Wǂ߂ĂȂAsȃ[h - if(MI_CpuComp8( buf1, buf2, PAGE_SIZE )){ - error = TRUE; - PrintString(0, 7, 0x1, "Unknown Mode"); - } - else{ - // f[^ł ALL 1(GameMode) or ALL 0(SlotPowerOff)Ȃ炿Ɠǂ߂ĂȂ̂ŁANormal[h - if(!MI_CpuComp8( buf_ff, buf2, PAGE_SIZE ) || !MI_CpuComp8( buf_00, buf2, PAGE_SIZE )){ - flxhash = FALSE; - ltdhash = FALSE; - PrintString(0, 7, 0x1, "Flx Area : Not Accessible"); - } - // Key TablëǂŁAGamë̃C[WoĂGame[h - else{ - flxhash = TRUE; - ltdhash = FALSE; - PrintString(0, 7, 0x8, "Flx Area : Accessible"); - } - } -} - - -/*---------------------------------------------------------------------------* - Name: CheckRomHeader - - Description: - *---------------------------------------------------------------------------*/ -static void CheckRomHeader(void) -{ - int result; - u8* pBuf = (u8 *)rhBuf; - u8* romHeader = (u8 *)rh; - - CARD_LockRom(card_lock_id); - - ReadBootSegNormal(pBuf); - - CARD_UnlockRom(card_lock_id); - - // ۂɓǂRom HeaderIPLœǂRom Headerr - if(isTwlApplication){ - result = MI_CpuComp8( pBuf, romHeader, HW_TWL_CARD_ROM_HEADER_BUF_SIZE ); - } - else{ - result = CompRomHeaderForNTR(pBuf); - } - - // - if(result){ - romheader = FALSE; - PrintString(0, 11, 0x1, "Boot Segment : Not Accessible"); - } - else{ - romheader = TRUE; - PrintString(0, 11, 0x8, "Boot Segment : Accessible"); - } - -// DEMO_DrawFlip(); - OS_WaitVBlankIntr(); -} - - -static int CompRomHeaderForNTR(void* buf){ - u8* pBuf = (u8 *)buf; - u8* romHeader = (u8 *)rh; - u32 remainSize = HW_CARD_ROM_HEADER_SIZE; - - while(remainSize){ - // }XNRomRg[񂪕ςĂ̂ŁA͔΂B - if((HW_CARD_ROM_HEADER_SIZE - remainSize) == 0x60){ - pBuf += 4; - romHeader += 4; - remainSize -= 4; - } - if(*pBuf == *romHeader){ - remainSize--; - } - else{ -// OS_TPrintf("Error (adr:0x%08x)\n", HW_CARD_ROM_HEADER_SIZE - remainSize); -// OS_TPrintf("read : 0x%02x real : 0x%02x\n", *pBuf, *romHeader); - break; - } - pBuf++; - romHeader++; - } - - return (int)remainSize; -} - - -/*---------------------------------------------------------------------------* - Name: CheckHashValue - - Description: W[nbV`FbN - *---------------------------------------------------------------------------*/ -static BOOL CheckHashValue(void* buf, u32 size, void* digest) -{ - u8 sha1data[DIGEST_SIZE_SHA1]; - BOOL retval = TRUE; - - // NA - MI_CpuClear8(sha1data, sizeof(sha1data)); - - // ARM7풓W[Hashlƍ - SVC_CalcHMACSHA1( sha1data, - buf, - size, - s_digestDefaultKey, - sizeof(s_digestDefaultKey) ); - - return SVC_CompareSHA1( sha1data, digest ); -} - - -/*---------------------------------------------------------------------------* - Name: MY_LoadCard_arm7Static - - Description: ARM7풓W[ ǂݏoEnbV`FbN - *---------------------------------------------------------------------------*/ -static void MY_LoadCard_arm7Static(void) -{ - BOOL result; - u32* pBuf = checkBuf; - - CARD_LockRom(card_lock_id); - - ReadCardData(pBuf, (s32)rh->sub_rom_offset, (s32)rh->sub_size); - - CARD_UnlockRom(card_lock_id); - - result = CheckHashValue(checkBuf, rh->sub_size, (void *)rh->sub_static_digest); - - if(result){ - flxhash = TRUE; - PrintString(0, 7, 0x8, "Flx Area : Accessible"); - } - else{ - flxhash = FALSE; - PrintString(0, 7, 0x1, "Flx Area : Not Accessible"); - } - -// DEMO_DrawFlip(); - OS_WaitVBlankIntr(); -} - - -/*---------------------------------------------------------------------------* - Name: MY_LoadCard_arm7LtdStatic - - Description: ARM7g풓W[ ǂݏoEnbV`FbN - *---------------------------------------------------------------------------*/ -static void MY_LoadCard_arm7LtdStatic(void) -{ - BOOL result; - u32* pBuf = checkBuf; - - CARD_LockRom(card_lock_id); - - ReadCardData(pBuf, (s32)rh->sub_ltd_rom_offset, (s32)rh->sub_ltd_size); - - CARD_UnlockRom(card_lock_id); - - result = CheckHashValue(checkBuf, rh->sub_ltd_size, (void *)rh->sub_ltd_static_digest); - - if(result){ - ltdhash = TRUE; - PrintString(0, 9, 0x8, "Ltd Area : Accessible"); - } - else{ - ltdhash = FALSE; - PrintString(0, 9, 0x1, "Ltd Area : Not Accessible"); - } - -// DEMO_DrawFlip(); - OS_WaitVBlankIntr(); -} - - -/*---------------------------------------------------------------------------* - Name: CheckBackupDevice - - Description: Backup Device ւ̃ANZX`FbN - - FEEPROM 512 kb̃TuՂƎgČ - *---------------------------------------------------------------------------*/ -static void CheckBackupDevice(void) -{ - BOOL identify; - static CARDResult last_result = CARD_RESULT_SUCCESS; - - CARD_LockBackup(card_lock_id); - - identify = CARD_IdentifyBackup(CARD_BACKUP_TYPE_EEPROM_512KBITS); - if (!identify) - { - PrintString(0, 13, 0x1, "Backup Device Identify Error..."); - error = TRUE; - CARD_UnlockBackup(card_lock_id); - return; - } - - { - u32 pos = 0; - static u8 tmp_buf[65536]; - int i; - const u32 page_size = CARD_GetBackupPageSize(); - const u32 total_size = CARD_GetBackupTotalSize(); - - for (i = 0; i < page_size; ++i) - { - tmp_buf[i] = (u8)(pos * 3 + i); - } - - if (!CARD_IsBackupEeprom()){ - PrintString(0, 13, 0x1, "Please Use EEPROM..."); - error = TRUE; - return; - } - - PrintString(0, 13, 0xf, "Backup Device Check Start..."); -// DEMO_DrawFlip(); - - while(pos < total_size){ - CARD_WriteAndVerifyEepromAsync(pos, tmp_buf, page_size, NULL, NULL); - - (void)CARD_WaitBackupAsync(); - last_result = CARD_GetResultCode(); - - pos += page_size; - - if (last_result != CARD_RESULT_SUCCESS){ - break; - } - } - - if (last_result != CARD_RESULT_SUCCESS){ - PrintString(0, 14, 0x1, "Backup Device : Not Accessible"); - error = TRUE; - } - else{ - PrintString(0, 14, 0x8, "Backup Device : Accessible"); - } - } - - CARD_UnlockBackup(card_lock_id); - -// DEMO_DrawFlip(); - OS_WaitVBlankIntr(); -} - - -/*---------------------------------------------------------------------------* - Name: ReadBootSegNormal - - Description: m[}[hBoot Segmentǂݍ - *---------------------------------------------------------------------------*/ -#define TIME_OUT 1000 - -static void ReadBootSegNormal(void* buf) -{ - u32 i, loop, pc, size, counter; - u64 page = 0; - Cmd64 cndLE; - BOOL isType1; - - OSTick start; - - isType1 = (*(vu32 *)(HW_BOOT_CHECK_INFO_BUF) & HOTSW_ROMID_1TROM_MASK) ? FALSE : TRUE; - - if(isType1){ - loop = 0x1UL; - pc = 0x4UL; - size = BOOT_SEGMENT_SIZE; - } - else{ - loop = ONE_SEGMENT_PAGE_NUM; - pc = 0x1UL; - size = PAGE_SIZE; - } - - counter = 0; - - HOTSW_WaitCardCtrl(); - - for(i=0; i TIME_OUT){ - return; - } - } - *((u32 *)buf + counter++) = reg_MI_MCD1_A; - } - - page++; - - OS_SpinWait( 100 ); - } -} - - -/*---------------------------------------------------------------------------* - Name: HOTSWi_SetCommand - - Description: ŗ^ꂽR}h̃GfBAςăWX^ɃZbg - *---------------------------------------------------------------------------*/ -static void SetCommand(Cmd64 *cndLE) -{ - Cmd64 cndBE; - - // rbOGfBAɒ - cndBE.b[7] = cndLE->b[0]; - cndBE.b[6] = cndLE->b[1]; - cndBE.b[5] = cndLE->b[2]; - cndBE.b[4] = cndLE->b[3]; - cndBE.b[3] = cndLE->b[4]; - cndBE.b[2] = cndLE->b[5]; - cndBE.b[1] = cndLE->b[6]; - cndBE.b[0] = cndLE->b[7]; - - // MCCMD WX^ݒ - reg_MI_MCCMD0_A = *(u32*)cndBE.b; - reg_MI_MCCMD1_A = *(u32*)&cndBE.b[4]; -} - - -/*---------------------------------------------------------------------------* - Name: ReadPageGame - - Description: Q[[hŁAw肳ꂽy[Wwobt@ɎwTCYǂݍ - *---------------------------------------------------------------------------*/ -static void ReadPageGame(u32 start_addr, void* buf, u32 size) -{ - u32 loop, counter=0; - u64 i, page; - Cmd64 cndLE; - u32 rom_ctrl = *(vu32 *)(HW_CARD_ROM_HEADER + 0x60); - - OSTick start; - - rom_ctrl = rom_ctrl & ~CARD_COMMAND_MASK; - page = (u32)(start_addr / PAGE_SIZE); - loop = (u32)(size / PAGE_SIZE); - loop = (size % PAGE_SIZE) ? loop + 1 : loop; - - HOTSW_WaitCardCtrl(); - - for(i=0; i TIME_OUT){ - return; - } - } - *((u32 *)buf + counter++) = reg_MI_MCD1_A; - } - } - - OS_SpinWait( 100 ); -} - - -/*---------------------------------------------------------------------------* - Name: ReadCardData - - Description: J[h璆r[ȃTCY(pager)̃f[^ǂݏo֐ - G[R[hԂ - *---------------------------------------------------------------------------*/ -static void ReadCardData(void* dest, s32 offset, s32 length) -{ - static u8 page_buffer[512]; - u32 page_offset = (u32)(offset & -512); - u32 buffer_offset = (u32)(offset % 512); - u32 valid_length = 512 - buffer_offset; - u32 remain_length; - - // JnAhXy[W̓r - if ( offset % 512 ) - { - ReadPageGame(page_offset, page_buffer, 512); - - MI_CpuCopy8(page_buffer + buffer_offset, dest, (length < valid_length ? length : valid_length)); - - dest = (u8*)dest + valid_length; - offset += valid_length; - length -= valid_length; - if ( length < 0) - { - return; - } - } - - remain_length = (u32)(length % 512); - ReadPageGame((u32)offset, dest, (u32)(length - remain_length)); - - // Pcy[Wr - if( remain_length ){ - dest = (u8*)dest + (length - remain_length); - offset += length - remain_length; - - ReadPageGame((u32)offset, page_buffer, 512); - - MI_CpuCopy8(page_buffer, dest, remain_length); - } -} - - -/*---------------------------------------------------------------------------* - Name: ShowResult - - Description: Result\ - *---------------------------------------------------------------------------*/ -static void ShowResult(void) -{ - PrintString(0, 16, 0xf, "-- Result --"); - - if(romheader && !flxhash && !ltdhash){ - PrintString(0, 18, 0x4, "Normal Mode"); - } - else if((!romheader && flxhash && !ltdhash) || - (!romheader && flxhash && ltdhash && !isTwlCard)){ - PrintString(0, 18, 0x5, "Game Mode"); - } - else if(!romheader && !flxhash && !ltdhash){ - PrintString(0, 18, 0x6, "Slot Power Off"); - } - else{ - PrintString(0, 18, 0x1, "Unknown Mode"); - } - - if(error){ - PrintString(0, 20, 0x1, "Backup Device Error"); - } - -// DEMO_DrawFlip(); -// OS_WaitVBlankIntr(); -} - - -/*---------------------------------------------------------------------------* - Name: debugMessage - - Description: - *---------------------------------------------------------------------------*/ -static void debugMessage(void) -{ - PrintString(0, 4, 0xf, "amr7 NmlRomOfs : 0x%08x", rh->sub_rom_offset); - PrintString(0, 5, 0xf, "amr7 LtdRomOfs : 0x%08x", rh->sub_ltd_rom_offset); - - OS_TPrintf("amr7 NmlRomOfs : 0x%08x\n", rh->sub_rom_offset); - OS_TPrintf("amr7 NmlSize : 0x%08x\n", rh->sub_size); - OS_TPrintf("amr7 LtdRomOfs : 0x%08x\n", rh->sub_ltd_rom_offset); - OS_TPrintf("amr7 LtdSize : 0x%08x\n", rh->sub_ltd_size); -} - - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - - Description: uuN݃xNgB - *---------------------------------------------------------------------------*/ -static void VBlankIntr (void) -{ - /* zXN[ VRAM ɔf */ - DC_FlushRange(screen, sizeof(screen)); - GX_LoadBG0Scr(screen, 0, sizeof(screen)); - - /* IRQ `FbNtOZbg */ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - - -/*---------------------------------------------------------------------------* - Name: PrintString - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - palette - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -static void PrintString (s16 x, s16 y, u8 palette, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *((u16*)(&temp[32])) = 0x0000; - for (i = 0; ; i++) - { - if (temp[i] == 0x00) - { - break; - } - screen[((y * 32) + x + i) % (32 * 32)] = (u16)((palette << 12) | temp[i]); - } -} \ No newline at end of file diff --git a/build/tests/CheckCardAccess/src/romSpec.h b/build/tests/CheckCardAccess/src/romSpec.h deleted file mode 100644 index cb96f899..00000000 --- a/build/tests/CheckCardAccess/src/romSpec.h +++ /dev/null @@ -1,152 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - HOTSW - include - File: romSpec.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef __HOTSW_ROMSPEC_H__ -#define __HOTSW_ROMSPEC_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -// ROM memory map - -#define HOTSW_PAGE_SIZE 0x200 // 512B -#define HOTSW_BOOT_SEG_SIZE 0x1000 // 4KB -#define HOTSW_LOAD_TABLE_SIZE 0x2000 // 8KB -#define HOTSW_KEYTABLE_AREA_SIZE 0x3000 // 12KB -#define HOTSW_KEYTABLE2_AREA_SIZE 0x3000 // 12KB -#define HOTSW_SECURE_AREA_SIZE 0x4000 // 16KB -#define HOTSW_SECURE2_AREA_SIZE 0x4000 // 16KB -#define HOTSW_ROMEMU_INFO_SIZE 0x20 - -#define HOTSW_BOOTSEGMENT_AREA_OFS 0x0000 // 0KB -#define HOTSW_KEYTABLE_AREA_OFS 0x1000 // 4KB -#define HOTSW_SECURE_AREA_OFS 0x4000 // 16KB -#define HOTSW_GAME_AREA_OFS 0x8000 // 32KB -#define HOTSW_SECURE2_AREA_OFS 0x3000 // 12KB -#define HOTSW_GAME2_AREA_OFS 0x7000 // 28KB -#define HOTSW_ROMEMU_INFO_OFS (HOTSW_SECURE_AREA_OFS - HOTSW_PAGE_SIZE + 0x160) - - -// ROM ID - -#define HOTSW_ROMID_1TROM_MASK 0x80000000UL -#define HOTSW_ROMID_TWLROM_MASK 0x40000000UL -#define HOTSW_ROMID_RFSSUP_MASK 0x20000000UL -#define HOTSW_ROMID_SIZE_MASK 0x0000ff00UL - -// ROM STATUS - -#define HOTSW_ROMST_RFS_WARN_L1_MASK 0x00000004UL -#define HOTSW_ROMST_RFS_WARN_L2_MASK 0x00000008UL -#define HOTSW_ROMST_RFS_READY_MASK 0x00000020UL - - -// NORMAL command - -#define HSWOP_N_OP_MASK 0xff00000000000000ULL -#define HSWOP_N_OP_SIZE 8 - -#define HSWOP_N_OP_RD_ID 0x9000000000000000ULL -#define HSWOP_N_OP_RD_PAGE 0x0000000000000000ULL -#define HSWOP_N_OP_WR_PAGE 0x8000000000000000ULL -#define HSWOP_N_OP_LD_TABLE 0x9f00000000000000ULL -#define HSWOP_N_OP_RD_CACHE_START 0x5800000000000000ULL -#define HSWOP_N_OP_RD_CACHE 0x6000000000000000ULL -#define HSWOP_N_OP_RD_CACHE_LAST 0x6800000000000000ULL -#define HSWOP_N_OP_RD_STAT 0xd600000000000000ULL -#define HSWOP_N_OP_RFS_BLK 0xb500000000000000ULL -#define HSWOP_N_OP_CHG_MODE 0x3c00000000000000ULL -#define HSWOP_N_OP_CHG2_MODE 0x3d00000000000000ULL - -#define HSWOP_N_RD_ID_PAD 0x00ffffffffffffffULL -#define HSWOP_N_RD_PAGE_PAD 0x00fffffeff00ffffULL -#define HSWOP_N_CHG_MODE_PAD 0x00000000f00000ffULL -#define HSWOP_N_CHG2_MODE_PAD HSWOP_N_CHG_MODE_PAD - -#define HSWOP_N_RD_PAGE_ADDR_SHIFT 33 -#define HSWOP_N_RD_PAGE_ADDR_SIZE 23 -#define HSWOP_N_RD_PAGE_ADDR_MASK 0x00fffffe00000000ULL - -#define HSWOP_N_VAE_SHIFT 32 -#define HSWOP_N_VAE_SIZE 24 -#define HSWOP_N_VAE_MASK 0x00ffffff00000000ULL - -#define HSWOP_N_VBI_SHIFT 8 -#define HSWOP_N_VBI_SIZE 20 -#define HSWOP_N_VBI_MASK 0x000000000fffff00ULL - - -// SECURE command - -#define HSWOP_S_OP_MASK 0xf000000000000000ULL -#define HSWOP_S_OP_SIZE 4 - -#define HSWOP_S_OP_RD_ID 0x1000000000000000ULL -#define HSWOP_S_OP_RD_SEG 0x2000000000000000ULL -#define HSWOP_S_OP_PNG_ON 0x4000000000000000ULL -#define HSWOP_S_OP_PNG_OFF 0x6000000000000000ULL -#define HSWOP_S_OP_CHG_MODE 0xa000000000000000ULL - -#define HSWOP_S_VA_SHIFT HSWOP_S_VB_SIZE -#define HSWOP_S_VA_SIZE 24 -#define HSWOP_S_VA_MASK 0x00000ffffff00000ULL - -#define HSWOP_S_VB_SHIFT 0 -#define HSWOP_S_VB_SIZE 20 -#define HSWOP_S_VB_MASK 0x00000000000fffffULL - -#define HSWOP_S_VC_SHIFT (HSWOP_S_VA_SIZE + HSWOP_S_VB_SIZE) -#define HSWOP_S_VC_SIZE 16 -#define HSWOP_S_VC_MASK 0x0ffff00000000000ULL - -#define HSWOP_S_VD_SHIFT HSWOP_S_VA_SHIFT -#define HSWOP_S_VD_SIZE HSWOP_S_VA_SIZE -#define HSWOP_S_VD_MASK HSWOP_S_VA_MASK - - -// GAME command - -#define HSWOP_G_OP_MASK 0xff00000000000000ULL -#define HSWOP_G_OP_SIZE 8 - -#define HSWOP_G_OP_RD_ID 0xb800000000000000ULL -#define HSWOP_G_OP_RD_UID 0xb900000000000000ULL -#define HSWOP_G_OP_RD_PAGE 0xb700000000000000ULL -#define HSWOP_G_OP_WR_PAGE 0x8000000000000000ULL -#define HSWOP_G_OP_RD_CACHE_START HSWOP_N_OP_RD_CACHE_START -#define HSWOP_G_OP_RD_CACHE HSWOP_N_OP_RD_CACHE -#define HSWOP_G_OP_RD_CACHE_LAST HSWOP_N_OP_RD_CACHE_LAST -#define HSWOP_G_OP_RD_STAT HSWOP_N_OP_RD_STAT -#define HSWOP_G_OP_RFS_BLK HSWOP_N_OP_RFS_BLK - -#define HSWOP_G_RD_ID_PAD 0x00ffffffffffffffULL -#define HSWOP_G_RD_UID_PAD 0x00ffffffffffffffULL -#define HSWOP_G_RD_PAGE_PAD 0x00f0000000ffffffULL - -#define HSWOP_G_RD_PAGE_ADDR_SHIFT 33 -#define HSWOP_G_RD_PAGE_ADDR_SIZE 23 -#define HSWOP_G_RD_PAGE_ADDR_MASK 0x000ffffe00000000ULL - - -#ifdef __cplusplus -} /* extern "C" */ - -#endif - -/* __HOTSW_ROMSPEC_H__ */ -#endif diff --git a/build/tests/CheckCardMode/Makefile b/build/tests/CheckCardMode/Makefile deleted file mode 100644 index f63e8dc8..00000000 --- a/build/tests/CheckCardMode/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckCardMode -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM := TWL - -SRCS = ./src/main.c ./src/font.c - -TARGET_BIN = card_mode_check.srl - -MACRO_FLAGS += -DMY_TARGET_NAME=\"$(basename $(TARGET_BIN))\" - -#------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckCardMode/src/font.c b/build/tests/CheckCardMode/src/font.c deleted file mode 100644 index 9500697a..00000000 --- a/build/tests/CheckCardMode/src/font.c +++ /dev/null @@ -1,579 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: font.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "font.h" - -/*---------------------------------------------------------------------------* - Character data - *---------------------------------------------------------------------------*/ -const u32 d_CharData[8 * 256] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01010010, 0x01010010, 0x00000110, // 0001h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 00f6h - 0x00100000, 0x00100000, 0x00100000, 0x00111111, - 0x00000000, 0x01010010, 0x01010010, 0x00111111, // 00f7h - 0x00010010, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01010011, 0x01010100, 0x00100011, // 00f8h - 0x00100100, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01010000, 0x01011111, 0x00010000, // 00f9h - 0x00001000, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x01010010, 0x01111111, 0x00100010, // 00fah - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x01010001, 0x01010010, 0x00100000, // 00fbh - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01011110, 0x01010010, 0x00100110, // 00fch - 0x00111001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01011110, 0x00010000, // 00fdh - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x00100101, 0x01001010, 0x00101010, // 00feh - 0x00100000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -}; - - -/*---------------------------------------------------------------------------* - Palette data - *---------------------------------------------------------------------------*/ -const u32 d_PaletteData[8 * 16] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // black - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001f0000, 0x00000000, 0x00000000, 0x00000000, // red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03e00000, 0x00000000, 0x00000000, 0x00000000, // green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c000000, 0x00000000, 0x00000000, 0x00000000, // blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03ff0000, 0x00000000, 0x00000000, 0x00000000, // yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fe00000, 0x00000000, 0x00000000, 0x00000000, // light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00180000, 0x00000000, 0x00000000, 0x00000000, // dark red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03000000, 0x00000000, 0x00000000, 0x00000000, // dark green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, // dark blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03180000, 0x00000000, 0x00000000, 0x00000000, // dark yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60180000, 0x00000000, 0x00000000, 0x00000000, // dark purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x63000000, 0x00000000, 0x00000000, 0x00000000, // dark light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x56b50000, 0x00000000, 0x00000000, 0x00000000, // gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x2d6b0000, 0x00000000, 0x00000000, 0x00000000, // dark gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fff0000, 0x00000000, 0x00000000, 0x00000000, // white - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CheckCardMode/src/font.h b/build/tests/CheckCardMode/src/font.h deleted file mode 100644 index b4a94093..00000000 --- a/build/tests/CheckCardMode/src/font.h +++ /dev/null @@ -1,36 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: font.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef FONT_H_ -#define FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif -/*===========================================================================*/ - -#include - -extern const u32 d_CharData[8 * 256]; -extern const u32 d_PaletteData[8 * 16]; - -/*===========================================================================*/ -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // FONT_H_ diff --git a/build/tests/CheckCardMode/src/hotswTypes.h b/build/tests/CheckCardMode/src/hotswTypes.h deleted file mode 100644 index 02d0843e..00000000 --- a/build/tests/CheckCardMode/src/hotswTypes.h +++ /dev/null @@ -1,134 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - HOTSW - include - File: type.h - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - *---------------------------------------------------------------------------*/ -#ifndef __HOTSW_TYPES_H__ -#define __HOTSW_TYPES_H__ - -#include -#include -#include "romSpec.h" - -#ifdef __cplusplus -extern "C" { -#endif - - -static inline void HOTSW_WaitCardCtrl(void) -{ - while( reg_MI_MCCNT1_A & REG_MI_MCCNT1_START_MASK ){} -} - -// Define ------------------------------------------------------------------- -// --- Boot Segment -#define BOOT_SEGMENT_SIZE 0x1000 - -// --- Secure Segment -#define SECURE_SEGMENT_START 0x4000 -#define SECURE_SEGMENT_SIZE 0x4000 -#define SECURE_SEGMENT_END (SECURE_SEGMENT_START + SECURE_SEGMENT_SIZE) - -// --- TWL Card -#define TWLCARD_BORDER_OFFSET 0x80000 - -// --- Page / Segment (Byte) -#define PAGE_SIZE 0x200 -#define ONE_SEGMENT_SIZE 0x1000 - -// --- Page / Segment (Word) -#define PAGE_WORD_SIZE 0x80 -#define ONE_SEGMENT_WORD_SIZE 0x400 - -// --- Rom Emulation -#define ROM_EMULATION_DATA_SIZE 0x20 - -// --- Thread -#define HOTSW_THREAD_STACK_SIZE (1024 * 2) -#define HOTSW_DMA_MSG_NUM 8 -#define HOTSW_INSERT_MSG_NUM 16 -#define HOTSW_PULLED_MSG_NUM 16 -#define HOTSW_CTRL_MSG_NUM 8 -#define HOTSW_MSG_BUFFER_NUM (HOTSW_INSERT_MSG_NUM + HOTSW_PULLED_MSG_NUM + HOTSW_CTRL_MSG_NUM) -#define HOTSW_POLLING_CTRL_BUFFER_NUM 4 - -// --- Card Control Reg 0 -#define HOTSW_E2PROM_CTRL_MASK 0x00ff - -// --- Card Control Reg 1 -#define START_FLG_MASK 0x80000000 -#define READY_FLG_MASK 0x00800000 - -#define LATENCY1_SHIFT 0 -#define LATENCY1_MASK 0x00001fff - -#define DS_SHIFT 13 -#define DS_MASK 0x00002000 - -#define SE_SHIFT 14 -#define SE_MASK 0x00004000 - -#define SCR_SHIFT 15 -#define SCR_MASK 0x00008000 - -#define LATENCY2_SHIFT 16 -#define LATENCY2_MASK 0x003f0000 - -#define CS_SHIFT 22 -#define CS_MASK 0x00400000 - -#define RDY_SHIFT 23 -#define RDY_MASK 0x00800000 - -#define PC_SHIFT 24 -#define PC_MASK 0x07000000 - -#define CT_SHIFT 27 -#define CT_MASK 0x08000000 - -#define TRM_SHIFT 28 -#define TRM_MASK 0x10000000 - -#define RESB_SHIFT 29 -#define RESB_MASK 0x20000000 - -#define WR_SHIFT 30 -#define WR_MASK 0x40000000 - -#define START_SHIFT 31 -#define START_MASK 0x80000000 - -#define SCRAMBLE_MASK 0x1040e000 // XNu֌W̃tO}XN -#define SECURE_COMMAND_SCRAMBLE_MASK 0x00406000 // CS SE DS̃}XN - -// --- Page Count -#define PAGE_0 0x0UL << PC_SHIFT -#define PAGE_1 0x1UL << PC_SHIFT -#define PAGE_2 0x2UL << PC_SHIFT -#define PAGE_4 0x3UL << PC_SHIFT -#define PAGE_8 0x4UL << PC_SHIFT -#define PAGE_16 0x5UL << PC_SHIFT -#define PAGE_32 0x6UL << PC_SHIFT -#define PAGE_STAT 0x7UL << PC_SHIFT - - -// union --------------------------------------------------------------------- -typedef union -{ - u64 dw; - u8 b[8]; -} Cmd64; - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif // __HOTSW_TYPES_H__ \ No newline at end of file diff --git a/build/tests/CheckCardMode/src/main.c b/build/tests/CheckCardMode/src/main.c deleted file mode 100644 index 4bd9f8d9..00000000 --- a/build/tests/CheckCardMode/src/main.c +++ /dev/null @@ -1,535 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos - CARD - hotswDebug - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - *---------------------------------------------------------------------------*/ - -#include -#include -#include "DEMO.h" -#include "hotswTypes.h" -#include "font.h" - -#define SDK_MAKERCODE '10' -#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) - -#define MY_TEMP_BUFFER_SIZE 0x80000 -#define GAME_FIELD_START_ADDRESS 0x8000 - -#define READY_MASK 0x00800000 -#define CARD_COMMAND_MASK 0x07000000 - -#define MY_ROMHEADER_TWL ((ROM_Header_Short *)HW_TWL_CARD_ROM_HEADER_BUF) -#define MY_ROMHEADER_NTR ((ROM_Header_Short *)HW_CARD_ROM_HEADER) - -// --------------------------------------------------------------- -// HMACSHA1̌ -static u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = { - 0x21, 0x06, 0xc0, 0xde, - 0xba, 0x98, 0xce, 0x3f, - 0xa6, 0x92, 0xe3, 0x9d, - 0x46, 0xf2, 0xed, 0x01, - - 0x76, 0xe3, 0xcc, 0x08, - 0x56, 0x23, 0x63, 0xfa, - 0xca, 0xd4, 0xec, 0xdf, - 0x9a, 0x62, 0x78, 0x34, - - 0x8f, 0x6d, 0x63, 0x3c, - 0xfe, 0x22, 0xca, 0x92, - 0x20, 0x88, 0x97, 0x23, - 0xd2, 0xcf, 0xae, 0xc2, - - 0x32, 0x67, 0x8d, 0xfe, - 0xca, 0x83, 0x64, 0x98, - 0xac, 0xfd, 0x3e, 0x37, - 0x87, 0x46, 0x58, 0x24 -}; - -static u32 checkBuf[MY_TEMP_BUFFER_SIZE/sizeof(u32)] ATTRIBUTE_ALIGN(16); - -static ROM_Header_Short *rh; -static BOOL isTwlApplication; -static BOOL isTwlCard; -static BOOL flxhash, ltdhash, mirrorimage; -static u16 card_lock_id; - -static u16 screen[32 * 32] ATTRIBUTE_ALIGN(HW_CACHE_LINE_SIZE); - -// --------------------------------------------------------------- -static BOOL CheckHashValue(void* buf, u32 size, void* digest); -static void MY_LoadCard_arm7Static(void); -static void MY_LoadCard_arm7LtdStatic(void); -static void debugMessage(void); -static void ShowResult(void); - -static void SetCommand(Cmd64 *cndLE); -static void ReadIDGame(void); -static void ReadPageGame(u32 start_addr, void* buf, u32 size); -static void ReadCardData(void* dest, s32 offset, s32 length); -static void isGameModeForNTR(void); - -static void VBlankIntr (void); -static void PrintString (s16 x, s16 y, u8 palette, char *text, ...); -static void VolumeSwitchCallback(SNDEXResult result, void* arg); - -/*---------------------------------------------------------------------------* - Name: NitroMain - - Description: C Gg|Cg. - *---------------------------------------------------------------------------*/ -void NitroMain(void) -{ - CARDRomHeader *card_header = (void*)CARD_GetRomHeader(); - - OS_Init(); - OS_InitTick(); - CARD_Init(); - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - if ( card_header->maker_code == SDK_MAKERCODE ) - { - CARD_Enable(TRUE); - } - - /* \ݒ菉 */ - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void*)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - (void)GX_DisableBankForLCDC(); - MI_CpuFillFast((void*)HW_OAM, GX_LCD_SIZE_Y, HW_OAM_SIZE); - MI_CpuClearFast((void*)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void*)HW_DB_OAM, GX_LCD_SIZE_Y, HW_DB_OAM_SIZE); - MI_CpuClearFast((void*)HW_DB_PLTT, HW_DB_PLTT_SIZE); - GX_SetBankForBG(GX_VRAM_BG_128_A); - G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0xf800, // SCR x[XubN 31 - GX_BG_CHARBASE_0x00000, // CHR x[XubN 0 - GX_BG_EXTPLTT_01); - G2_SetBG0Priority(0); - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - GX_SetVisiblePlane(GX_PLANEMASK_BG0); - GX_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GX_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - MI_CpuClearFast((void*)screen, sizeof(screen)); - DC_FlushRange(screen, sizeof(screen)); - GX_LoadBG0Scr(screen, 0, sizeof(screen)); - - /* ݐݒ */ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - /* LCD \Jn */ - GX_DispOn(); - GXS_DispOn(); - - PrintString(0, 0, 0xa, "***** Card Mode Check *****"); - - // J[hAv^Cv𔻕ʁBgRom Header Buffer ؑւ - if(MY_ROMHEADER_NTR->platform_code & PLATFORM_CODE_FLAG_TWL){ - PrintString(0, 2, 0xf, "- TWL Application -"); - isTwlApplication = TRUE; - rh = MY_ROMHEADER_TWL; - } - else{ - PrintString(0, 2, 0xf, "- NTR Application -"); - isTwlApplication = FALSE; - rh = MY_ROMHEADER_NTR; - } - - OS_Printf("Buf Adr : 0x%08x\n", checkBuf); - - // J[h^Cv̔ - isTwlCard = (*(vu32 *)(HW_BOOT_CHECK_INFO_BUF) & HOTSW_ROMID_TWLROM_MASK) ? TRUE : FALSE; - - // Frh̏IĂĂяo - debugMessage(); - - // tȌ - flxhash = FALSE; - ltdhash = FALSE; - mirrorimage = FALSE; - - // bNID擾Ă - card_lock_id = (u16)OS_GetLockID(); - - if(isTwlApplication){ - MY_LoadCard_arm7Static(); - MY_LoadCard_arm7LtdStatic(); - } - else{ - isGameModeForNTR(); - } - - ShowResult(); - - while(1){ - DEMO_DrawFlip(); - OS_WaitVBlankIntr(); - } -} - - -/*---------------------------------------------------------------------------* - Name: ShowResult - - Description: - *---------------------------------------------------------------------------*/ -static void ShowResult(void) -{ - PrintString(0, 13, 0xf, "-- Result --"); - - if(flxhash && ltdhash){ - if(isTwlCard){ - PrintString(0, 15, 0x6, "Game2 Mode"); - } - else{ - PrintString(0, 15, 0x5, "Game Mode"); - } - } - else if(mirrorimage){ - PrintString(0, 15, 0x5, "Game Mode"); - } - else{ - PrintString(0, 15, 0x1, "Unknown Mode"); - } -} - - -/*---------------------------------------------------------------------------* - Name: debugMessage - - Description: - *---------------------------------------------------------------------------*/ -static void debugMessage(void) -{ - PrintString(0, 4, 0xf, "amr7 NmlRomOfs : 0x%08x", rh->sub_rom_offset); - PrintString(0, 5, 0xf, "amr7 LtdRomOfs : 0x%08x", rh->sub_ltd_rom_offset); - - OS_TPrintf("amr7 NmlRomOfs : 0x%08x\n", rh->sub_rom_offset); - OS_TPrintf("amr7 NmlSize : 0x%08x\n", rh->sub_size); - OS_TPrintf("amr7 LtdRomOfs : 0x%08x\n", rh->sub_ltd_rom_offset); - OS_TPrintf("amr7 LtdSize : 0x%08x\n", rh->sub_ltd_size); -} - - -/*---------------------------------------------------------------------------* - Name: CheckHashValue - - Description: W[nbV`FbN - *---------------------------------------------------------------------------*/ -static BOOL CheckHashValue(void* buf, u32 size, void* digest) -{ - u8 sha1data[DIGEST_SIZE_SHA1]; - BOOL retval = TRUE; - - // NA - MI_CpuClear8(sha1data, sizeof(sha1data)); - - // ARM7풓W[Hashlƍ - SVC_CalcHMACSHA1( sha1data, - buf, - size, - s_digestDefaultKey, - sizeof(s_digestDefaultKey) ); - - return SVC_CompareSHA1( sha1data, digest ); -} - - -/*---------------------------------------------------------------------------* - Name: MY_LoadCard_arm7Static - - Description: ARM7풓W[ ǂݏoEnbV`FbN - *---------------------------------------------------------------------------*/ -static void MY_LoadCard_arm7Static(void) -{ - BOOL result; - u32* pBuf = checkBuf; - - CARD_LockRom(card_lock_id); - - ReadCardData(pBuf, (s32)rh->sub_rom_offset, (s32)rh->sub_size); - - CARD_UnlockRom(card_lock_id); - - result = CheckHashValue(pBuf, rh->sub_size, (void *)rh->sub_static_digest); - - if(result){ - flxhash = TRUE; - PrintString(0, 7, 0x8, "Flx Area : Accessible"); - } - else{ - flxhash = FALSE; - PrintString(0, 7, 0x1, "Flx Area : Not Accessible"); - } -} - - -/*---------------------------------------------------------------------------* - Name: MY_LoadCard_arm7LtdStatic - - Description: ARM7g풓W[ ǂݏoEnbV`FbN - *---------------------------------------------------------------------------*/ -static void MY_LoadCard_arm7LtdStatic(void) -{ - BOOL result; - u32* pBuf = checkBuf; - - CARD_LockRom(card_lock_id); - - ReadCardData(pBuf, (s32)rh->sub_ltd_rom_offset, (s32)rh->sub_ltd_size); - - CARD_UnlockRom(card_lock_id); - - result = CheckHashValue(pBuf, rh->sub_ltd_size, (void *)rh->sub_ltd_static_digest); - - if(result){ - ltdhash = TRUE; - PrintString(0, 9, 0x8, "Ltd Area : Accessible"); - } - else{ - ltdhash = FALSE; - PrintString(0, 9, 0x1, "Ltd Area : Not Accessible"); - } -} - - -/*---------------------------------------------------------------------------* - Name: isGameModeForNTR - - Description: Game[hǂ肷 - *---------------------------------------------------------------------------*/ -static void isGameModeForNTR(void) -{ - u32 buf1[PAGE_SIZE/sizeof(u32)]; - u32 buf2[PAGE_SIZE/sizeof(u32)]; - int result; - - /* Rom Header̈ǂŁAGamë̃C[WoĂGame[h */ - ReadCardData(buf1, (s32)0, (s32)PAGE_SIZE); - ReadCardData(buf2, (s32)GAME_FIELD_START_ADDRESS, (s32)PAGE_SIZE); - - result = MI_CpuComp8( buf1, buf2, PAGE_SIZE ); - - if(result){ - mirrorimage = FALSE; - PrintString(0, 7, 0x1, "Flx Area : Not Accessible"); - } - else{ - mirrorimage = TRUE; - PrintString(0, 7, 0x8, "Flx Area : Accessible"); - } -} - - -/*---------------------------------------------------------------------------* - Name: HOTSWi_SetCommand - - Description: ŗ^ꂽR}h̃GfBAςăWX^ɃZbg - *---------------------------------------------------------------------------*/ -static void SetCommand(Cmd64 *cndLE) -{ - Cmd64 cndBE; - - // rbOGfBAɒ - cndBE.b[7] = cndLE->b[0]; - cndBE.b[6] = cndLE->b[1]; - cndBE.b[5] = cndLE->b[2]; - cndBE.b[4] = cndLE->b[3]; - cndBE.b[3] = cndLE->b[4]; - cndBE.b[2] = cndLE->b[5]; - cndBE.b[1] = cndLE->b[6]; - cndBE.b[0] = cndLE->b[7]; - - // MCCMD WX^ݒ - reg_MI_MCCMD0_A = *(u32*)cndBE.b; - reg_MI_MCCMD1_A = *(u32*)&cndBE.b[4]; -} - - -/*---------------------------------------------------------------------------* - Name: ReadIDGame - - Description: Q[[hIDǂݍ - *---------------------------------------------------------------------------*/ -static void ReadIDGame(void) -{ - u32 id; - Cmd64 cndLE; - u32 rom_ctrl = *(vu32 *)(HW_CARD_ROM_HEADER + 0x60); - - rom_ctrl = rom_ctrl & ~CARD_COMMAND_MASK; - - // gGfBAō - cndLE.dw = HSWOP_G_OP_RD_ID; - - // MCCMD WX^ݒ - SetCommand(&cndLE); - - // MCCNT0 WX^ݒ - reg_MI_MCCNT0_A = (u16)((reg_MI_MCCNT0_A & 0x00ff) | REG_MI_MCCNT0_E_MASK); - - // MCCNT1 WX^ݒ - reg_MI_MCCNT1_A = rom_ctrl | START_MASK | PAGE_1; - - while(reg_MI_MCCNT1_A & START_MASK){ - while(!(reg_MI_MCCNT1_A & READY_MASK)){} - id = reg_MI_MCD1_A; - } - - OS_Printf("Card ID : 0x%08x\n", id); - - OS_SpinWait( 100 ); -} - - -/*---------------------------------------------------------------------------* - Name: ReadPageGame - - Description: Q[[hŁAw肳ꂽy[Wwobt@ɎwTCYǂݍ - - CT=150ns Pagecount=1page Latency=RomHeaderŎw̒l - *---------------------------------------------------------------------------*/ -static void ReadPageGame(u32 start_addr, void* buf, u32 size) -{ - u32 loop, counter=0; - u64 i, page; - Cmd64 cndLE; - u32 rom_ctrl = *(vu32 *)(HW_CARD_ROM_HEADER + 0x60); - - rom_ctrl = rom_ctrl & ~CARD_COMMAND_MASK; - page = (u32)(start_addr / PAGE_SIZE); - loop = (u32)(size / PAGE_SIZE); - loop = (size % PAGE_SIZE) ? loop + 1 : loop; - - for(i=0; i -#include - -#define HASH_PATH "/sign/DSHashTable.bin" - -/* - ̃Tv̓eXgpłACARD֐̑FS֐ - DHTCuĂOł -*/ - -#define ROM_PATH "/srl" - -#define DS_HASH_TABLE_NUMS 3000 -#define DS_HASH_TABLE_SIZE (sizeof(DHTHeader) + DS_HASH_TABLE_NUMS * sizeof(DHTDatabase)) - -/* - DHTt@Cǂݍݐ -*/ -static u8 dht_buffer[DS_HASH_TABLE_SIZE] ATTRIBUTE_ALIGN(32); -static DHTFile *const dht = (DHTFile*)dht_buffer; -/* - Phase2pobt@ -*/ -static DHTPhase2Work p2work; - -/* - ۂɂ̓AhXŒ -*/ -#include -static ROM_Header_Short rom_header ATTRIBUTE_ALIGN(32); // ĝ DHT_DS_HEADER_SIZE -static u8 rom_arm9[3*1024*1024] ATTRIBUTE_ALIGN(32); -static u8 rom_arm7[1024*1024] ATTRIBUTE_ALIGN(32); -#include - -/* - foCXANZXAPI -*/ -#if 1 -// FS (arg == FSFile*) -static BOOL ReadImage(void* dest, s32 offset, s32 length, void* arg) -{ - FSFile* fp = arg; - s32 result; - if ( !FS_SeekFile(fp, offset, FS_SEEK_SET) ) - { - OS_TPrintf("Cannot seek to the offset (%d bytes).\n", offset); - return FALSE; - } - result = FS_ReadFile(fp, dest, length); - if ( result != length ) - { - OS_TPrintf("Cannot read the data (%d bytes).\n", length); - return FALSE; - } - return TRUE; -} -static BOOL ReadImageEx(SVCHMACSHA1Context* ctx, s32 offset, s32 length, void* arg) -{ - if ( !ReadImage(p2work.buffer, offset, length, arg) ) - { - return FALSE; - } - DHT_CheckHashPhase2ExUpdate(ctx, p2work.buffer, length); - return TRUE; -} -#else -#ifdef SDK_ARM9 -#define PAGE_SIZE 512 -// CARD (arg == dma no) -static BOOL ReadImage(void* dest, s32 offset, s32 length, void* arg) -{ - u32 dma = (u32)arg; - CARD_ReadRom(dma, (void*)offset, dest, (u32)length); - return TRUE; -} -#else -// HOTSW (arg == CardBootData* cdb) -#include -#include -static BOOL ReadImage(void* dest, s32 offset, s32 length, void* arg) -{ - HotSwState retval; - if ( offset % 512 ) - { - static u8 page_buffer[512]; - u32 page_offset = (u32)(offset & -512); - u32 buffer_offset = (u32)(offset % 512); - u32 valid_length = 512 - buffer_offset; - retval = ReadPageGame((CardBootData*)arg, page_offset, page_buffer, 512); - if (retval != HOTSW_SUCCESS) - { - return FALSE; - } - MI_CpuCopy8(page_buffer + buffer_offset, dest, (length < valid_length ? length : valid_length)); - dest = (u8*)dest + valid_length; - offset += valid_length; - length -= valid_length; - if ( length < 0) - { - return TRUE; - } - } - retval = ReadPageGame((CardBootData*)arg, (u32)offset, dest, (u32)length); - return (retval == HOTSW_SUCCESS); -} -#endif -#endif - -static void VBlankIntr( void ) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -/* - ؖ{Ԃ̂Aۂɂ̓I[o[wbhɂȂȂ -*/ -static BOOL CheckValidation(FSFile* fp) -{ - const DHTDatabase *db; - s32 result; - - // wb_̓ǂݍ - result = FS_ReadFile(fp, &rom_header, DHT_DS_HEADER_SIZE); - if ( result != DHT_DS_HEADER_SIZE ) - { - OS_TPrintf("Cannot read ROM header.\n"); - return FALSE; - } - // ARM9 - if ( rom_header.main_size > sizeof(rom_arm9) ) - { - OS_TPrintf("Too large main size (%d > %d).\n", rom_header.main_size, sizeof(rom_arm9)); - return FALSE; - } - if ( !FS_SeekFile(fp, (s32)rom_header.main_rom_offset, FS_SEEK_SET) ) - { - OS_TPrintf("Cannot seek to ARM9 static.\n"); - return FALSE; - } - result = FS_ReadFile(fp, rom_arm9, (s32)rom_header.main_size); - if ( result != rom_header.main_size ) - { - OS_TPrintf("Cannot read ARM9 static.\n"); - return FALSE; - } - // ARM7 - if ( rom_header.sub_size > sizeof(rom_arm7) ) - { - OS_TPrintf("Too large sub size (%d > %d).\n", rom_header.sub_size, sizeof(rom_arm7)); - return FALSE; - } - if ( !FS_SeekFile(fp, (s32)rom_header.sub_rom_offset, FS_SEEK_SET) ) - { - OS_TPrintf("Cannot seek to ARM7 static.\n"); - return FALSE; - } - result = FS_ReadFile(fp, rom_arm7, (s32)rom_header.sub_size); - if ( result != rom_header.sub_size ) - { - OS_TPrintf("Cannot read ARM7 static.\n"); - return FALSE; - } - - // f[^x[X̌ - db = DHT_GetDatabase(dht, &rom_header); - if ( !db ) - { - return FALSE; - } -//OS_TPrintf("FOUND: 0x%08X: %.4s(%d)\n", db, db->game_code, db->rom_version); - // nbVvZ (1) - B”\Ȃ͂ - if ( !DHT_CheckHashPhase1(db->hash[0], &rom_header, rom_arm9, rom_arm7) ) - { - return FALSE; - } - // nbVvZ (2) - B͓ - if ( !DHT_CheckHashPhase2(db->hash[1], &rom_header, &p2work, ReadImage, fp) ) - { - // nbVvZ (2ex) - B͓ (sꍇĂ) - if ( !DHT_CheckHashPhase2Ex(db->hash[1], &rom_header, (DHTPhase2ExWork*)&p2work, ReadImage, ReadImageEx, fp) ) - { - return FALSE; - } - return FALSE; - } - // nbVvZ (2ex) - B͓ - if ( !DHT_CheckHashPhase2Ex(db->hash[1], &rom_header, (DHTPhase2ExWork*)&p2work, ReadImage, ReadImageEx, fp) ) - { - return FALSE; - } - - return TRUE; -} - -void TwlMain(void) -{ - OS_Init(); - OS_InitTick(); - - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - // 荞݋---------------------------- - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - FS_Init(FS_DMA_NOT_USE); - { - FSFile file; - if ( !FS_OpenFileEx(&file, HASH_PATH, FS_FILEMODE_R) ) - { - OS_TPanic("Cannot open %s.\n", HASH_PATH); - } - // [h - if ( !DHT_PrepareDatabase(dht, &file) ) - { - OS_TPanic("Cannot prepare the database.\n"); - } - FS_CloseFile(&file); - } - - // { - { - FSFile dir; - FSDirectoryEntryInfo info; - BOOL result; - result = FS_OpenDirectory(&dir, ROM_PATH, FS_FILEMODE_R); - if ( !result ) - { - OS_TPanic("Cannot open " ROM_PATH ".\n"); - } - while ( FS_ReadDirectory(&dir, &info) ) - { - FSFile file; - OSTick begin; - char path[FS_ENTRY_LONGNAME_MAX+sizeof(ROM_PATH)+1]; - if ( info.attributes & FS_ATTRIBUTE_IS_DIRECTORY ) - { - OS_TPrintf("%s is directory.\n", info.longname); - continue; - } - STD_CopyString(path, ROM_PATH "/"); - STD_ConcatenateString(path, info.longname); - if (!FS_OpenFileEx(&file, path, FS_FILEMODE_R)) - { - OS_TPrintf("Cannot open %s.\n", path); - continue; - } - OS_TPrintf("\nTrying %s...\n", path); - begin = OS_GetTick(); - if ( !CheckValidation(&file) ) - { - OS_TPrintf("Failed. %d msec (includes loading static data).\n", (int)OS_TicksToMilliSeconds(OS_GetTick()-begin)); - } - else - { - OS_TPrintf("Success. %d msec (includes loading static data).\n", (int)OS_TicksToMilliSeconds(OS_GetTick()-begin)); - } - FS_CloseFile(&file); - } - FS_CloseDirectory(&dir); - } - - OS_TPrintf("\nDone.\n"); - OS_Terminate(); -} - diff --git a/build/tests/CheckPreloadParameters/Makefile b/build/tests/CheckPreloadParameters/Makefile deleted file mode 100644 index 15e918ad..00000000 --- a/build/tests/CheckPreloadParameters/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckPreloadParameters -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_PLATFORM = TWL - -SRCS = main.c -TARGET_BIN = main.tad - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckPreloadParameters/banner/Makefile b/build/tests/CheckPreloadParameters/banner/Makefile deleted file mode 100644 index e373c033..00000000 --- a/build/tests/CheckPreloadParameters/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/CheckPreloadParameters/banner/banner_v3.bsf b/build/tests/CheckPreloadParameters/banner/banner_v3.bsf deleted file mode 100644 index 8644921399440c435aab27e0fac04166dc047f85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 980 zcmc(e&1%9x6ot>$Lf>J)buA)v;j&`1MMRpm`!P`r#at7tJ*O*U4&8 zcsd#}gYmJ&uF*cv@%<~d9Tj*nTW6h)L5`9F~O}H@z=Nnwa)TNQ{GKzecX=Gj4 z-XI+e8CMltmwb({9JZG_BRAL$f89{eoD=-kWaa9SSrYL&vLUwZ9$!X$N1k;I-EYPy BkNE%q diff --git a/build/tests/CheckPreloadParameters/banner/icon/gameIcon.bmp b/build/tests/CheckPreloadParameters/banner/icon/gameIcon.bmp deleted file mode 100644 index 8ec56f1cb8439577aae80658921dc540a9bd6dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmY+BKX21O7{(8T#0Z(20Y@2-Jk^e}L}G|L2);9H_b8K_SR3yWp%k)n8x z6xGKF0m-*QrKtA_XgndB(ttlf?eO}K5IoYI{k!+^H$S@4l?RHVW-$&!|7)>S<N4|DcCXFFICQ-#Dv5}pLUv$dfI6>C}}5vSarZL=O)xUDx*;9z#c;IsZRpWV1j z(3aUYFw{f7{OP?tq8-x4IK4a-!1L8-;2y9XiEtV3Ud3_8>X|u -#include - -void VBlankIntr(void); - -OSOwnerInfoEx s_owner; -static char *s_strCountry[ 256 ]; -static char *s_strRegion[ OS_TWL_REGION_MAX ]; -static char *s_strUserColor[ OS_FAVORITE_COLOR_MAX ]; -static char *s_strRatingOgn[ OS_TWL_PCTL_OGN_MAX ]; -static char *s_strLanguage[ OS_LANGUAGE_CODE_MAX ]; - - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void TwlMain(void) -{ - char string[ 256 ]; - int srcLen, dstLen; - OS_Init(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - OS_GetOwnerInfoEx( &s_owner ); - OS_TPrintf( "Language : %02x %s\n", s_owner.language, s_strLanguage[ s_owner.language ] ); - OS_TPrintf( "UserColor : %02x %s\n", s_owner.favoriteColor, s_strUserColor[ s_owner.favoriteColor ] ); - OS_TPrintf( "Birthday : %02d/%02d\n", s_owner.birthday.month, s_owner.birthday.day ); - { - MI_CpuClear8( string, sizeof(string) ); - srcLen = (int)s_owner.nickNameLength; - dstLen = sizeof(string); - STD_ConvertStringUnicodeToSjis( string, &dstLen, s_owner.nickName, &srcLen, NULL ); - OS_TPrintf( "Nickname : %s\n", string ); - - MI_CpuClear8( string, sizeof(string) ); - srcLen = (int)s_owner.commentLength; - dstLen = sizeof(string); - STD_ConvertStringUnicodeToSjis( string, &dstLen, s_owner.comment, &srcLen, NULL ); - OS_TPrintf( "Comment : %s\n", string ); - } - OS_TPrintf( "Country : %s\n", s_strCountry[ s_owner.country ] ); - - OS_TPrintf( "IsAgreeEULA : %s\n", OS_IsAgreeEULA() ? "Agree" : "Not agree" ); - OS_TPrintf( "AgreedEULAVersion : %d\n", OS_GetAgreedEULAVersion() ); - OS_TPrintf( "ROMHeaderEULAVersion : %d\n", OS_GetROMHeaderEULAVersion() ); - - OS_TPrintf( "AvailableWireless : %s\n", OS_IsAvailableWireless() ? "TRUE" : "FALSE" ); - PMi_SetWirelessLED( OS_IsAvailableWireless() ? PM_WIRELESS_LED_ON : PM_WIRELESS_LED_OFF ); - - { - const LCFGTWLParentalControl *pPC = (const LCFGTWLParentalControl *)OS_GetParentalControlInfoPtr(); - - OS_TPrintf( "ParentalControls :\n"); - OS_TPrintf( " isSetParentalControl : %s\n", pPC->flags.isSetParentalControl ? "TRUE" : "FALSE" ); - OS_TPrintf( " PictoChat : %s\n", pPC->flags.pictoChat ? "TRUE" : "FALSE" ); - OS_TPrintf( " DS Download : %s\n", pPC->flags.dsDownload ? "TRUE" : "FALSE" ); - OS_TPrintf( " Browser : %s\n", pPC->flags.browser ? "TRUE" : "FALSE" ); - OS_TPrintf( " WiiPoint : %s\n", pPC->flags.wiiPoint ? "TRUE" : "FALSE" ); - OS_TPrintf( " PhotoExchange : %s\n", pPC->flags.photoExchange ? "TRUE" : "FALSE" ); - OS_TPrintf( " UGC : %s\n", pPC->flags.ugc ? "TRUE" : "FALSE" ); - OS_TPrintf( " RatingOgn : %s\n", pPC->ogn < LCFG_TWL_PCTL_OGN_MAX ? s_strRatingOgn[ pPC->ogn ] : s_strRatingOgn[ LCFG_TWL_PCTL_OGN_MAX ] ); - OS_TPrintf( " RatingAge : %d\n", pPC->ratingAge ); - OS_TPrintf( " SecretQ ID : %d\n", pPC->secretQuestionID ); - OS_TPrintf( " Password : %s\n", pPC->password ); - MI_CpuClear8( string, sizeof(string) ); - srcLen = (int)pPC->secretAnswerLength; - dstLen = sizeof(string); - STD_ConvertStringUnicodeToSjis( string, &dstLen, pPC->secretAnswer, &srcLen, NULL ); - OS_TPrintf( " SecretAnswer : %s\n", string ); - } - - { - int i; - const u8 *p = OS_GetMovableUniqueIDPtr(); - OS_TPrintf( "MovableUniqueID :" ); - for( i = 0; i < OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN; i++ ) { - if( ( i & 0x0f ) == 0 ) { - OS_TPrintf( "\n" ); - } - OS_TPrintf( " %02x,", *p++ ); - } - OS_TPrintf( "\n" ); - } - OS_TPrintf( "ForceDisableWireless : %s\n", OS_IsForceDisableWireless() ? "TRUE" : "FALSE" ); - OS_TPrintf( "Region : %02x %s\n", OS_GetRegion(), ( OS_GetRegion() == 0xff ) ? "Invalid" : s_strRegion[ OS_GetRegion() ] ); - { - u8 string[ 16 ]; - OS_GetSerialNo( string ); - OS_TPrintf( "SerialNo : %s\n", string ); - } - - OS_TPrintf("***End of demo\n"); - OS_Terminate(); -} - - - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - - - -static char *s_strRegion[] = { - "JAPAN", - "AMERICA", - "EUROPA", - "AUSTRALIA", - "CHINA", - "KOREA", -}; - -static char *s_strUserColor[] = { - "GRAY ", - "BROWN ", - "RED ", - "PINK ", - "ORANGE ", - "YELLOW ", - "LIME_GREEN", - "GREEN ", - "DARK_GREEN", - "SEA_GREEN ", - "TURQUOISE ", - "BLUE ", - "DARK_BLUE ", - "PURPLE ", - "VIOLET ", - "MAGENTA ", -}; - -static char *s_strLanguage[] = { - "JAPANESE", - "ENGLISH", - "FRENCH", - "GERMAN", - "ITALIAN", - "SPANISH", - "CHINESE", - "KOREAN", -}; - -static char *s_strRatingOgn[] = { - "CERO", - "ESRB", - "RESERVED2", - "USK", - "PEGI_GENERAL", - "RESERVED5", - "PEGI_PORTUGAL", - "PEGI_BBFC", - "OFLC", - "GRB", - "RESERVED_A", - "RESERVED_B", - "RESERVED_C", - "RESERVED_D", - "RESERVED_E", - "UNKNOWN", -}; - -static char *s_strCountry[] = { - "UNDEFINED ", // ݒ - "JAPAN ", // { - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "Anguilla ", // AM - "ANTIGUA_AND_BARBUDA", // AeBOAEo[u[_ - "ARGENTINA ", // A[` - "ARUBA", // Ao - "BAHAMAS", // on} - "BARBADOS", // oohX - "BELIZE", // x[Y - "BOLIVIA", // {rA - "BRAZIL", // uW - "BRITISH_VIRGIN_ISLANDS", // p̃@[W - "CANADA", // Ji_ - "CAYMAN_ISLANDS", // PC} - "CHILE ", // ` - "COLOMBIA", // RrA - "COSTA_RICA", // RX^J - "DOMINICA", // h~jJ - "DOMINICAN_REPUBLIC", // h~jJa - "ECUADOR", // GNAh - "EL_SALVADOR", // GToh - "FRENCH_GUIANA", // tX̃MAi - "GRENADA", // Oi_ - "GUADELOUPE", // OAh[v - "GUATEMALA ", // OAe} - "GUYANA", // KCAi - "HAITI", // nC` - "HONDURAS", // zWX - "JAMAICA", // W}CJ - "MARTINIQUE", // }eBj[N - "MEXICO", // LVR - "MONTSERRAT", // gZg - "NETHERLANDS_ANTILLES", // I_̃AeB - "NICARAGUA", // jJOA - "PANAMA ", // pi} - "PARAGUAY", // pOAC - "PERU", // y[ - "ST_KITTS_AND_NEVIS", // ZgLbcElCrX - "ST_LUCIA", // ZgVA - "ST_VINCENT_AND_THE_GRENADINES", // ZgrZgEOifB[ - "SURINAME", // Xi - "TRINIDAD_AND_TOBAGO", // gj_[hEgoS - "TURKS_AND_CAICOS_ISLANDS", // ^[NXEJCRX - "UNITED_STATES", // AJ - "URUGUAY ", // EOAC - "US_VIRGIN_ISLANDS", // ė̃o[W - "VENEZUELA", // xlYG - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "ALBANIA ", // AojA - "AUSTRALIA", // I[XgA - "AUSTRIA", // I[XgA - "BELGIUM", // xM[ - "BOSNIA_AND_HERZEGOVINA", // {XjAEwcFSri - "BOTSWANA", // {ci - "BULGARIA ", // uKA - "CROATIA", // NA`A - "CYPRUS", // LvX - "CZECH_REPUBLIC", // `FR - "DENMARK", // f}[N - "ESTONIA", // GXgjA - "FINLAND", // tBh - "FRANCE", // tX - "GERMANY", // hCc - "GREECE", // MV - "HUNGARY ", // nK[ - "ICELAND", // ACXh - "IRELAND", // ACh - "ITALY", // C^A - "LATVIA", // grA - "LESOTHO", // \g - "LIECHTENSTEIN", // qeV^C - "LITHUANIA", // gAjA - "LUXEMBOURG", // NZuN - "MACEDONIA", // }PhjA - "MALTA ", // }^ - "MONTENEGRO", // elO - "MOZAMBIQUE", // Ur[N - "NAMIBIA", // i~rA - "NETHERLANDS", // I_ - "NEW_ZEALAND", // j[W[h - "NORWAY", // mEF[ - "POLAND", // |[h - "PORTUGAL", // |gK - "ROMANIA", // [}jA - "RUSSIA ", // VA - "SERBIA", // ZrA - "SLOVAKIA", // XoLA - "SLOVENIA", // XxjA - "SOUTH_AFRICA", // AtJ - "SPAIN", // XyC - "SWAZILAND", // XWh - "SWEDEN", // XEF[f - "SWITZERLAND", // XCX - "TURKEY", // gR - "UNITED_KINGDOM ", // CMX - "ZAMBIA", // UrA - "ZIMBABWE", // WouG - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "TAIWAN ", // p - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "SOUTH_KOREA ", // ؍ - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "HONG_KONG ", // zR - "MACAU", // }JI - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "INDONESIA ", // ChlVA - "SINGAPORE ", // VK|[ - "THAILAND ", // ^C - "PHILIPPINES", // tBs - "MALAYSIA", // }[VA - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "CHINA ", // - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UAE ", // Au񒷍AM - "INDIA ", // Ch - "EGYPT ", // GWvg - "OMAN", // I}[ - "QATAR", // J^[ - "KUWAIT", // NEF[g - "SAUDI_ARABIA", // TEWArA - "SYRIA", // VA - "BAHRAIN", // o[[ - "JORDAN", // _ - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "OTHERS ", - "UNKNOWN ", -}; - diff --git a/build/tests/CheckSharedFont/Makefile b/build/tests/CheckSharedFont/Makefile deleted file mode 100644 index 2087d1e2..00000000 --- a/build/tests/CheckSharedFont/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - FS - overlay -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_BIN = main.srl - -SRCS = main.c loadSharedFont.c - -LLIBRARIES += libsharedfont$(TWL_LIBSUFFIX).a libna$(TWL_LIBSUFFIX).a - -ROM_SPEC = ROM-TS_nand.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CheckSharedFont/ROM-TS_nand.rsf b/build/tests/CheckSharedFont/ROM-TS_nand.rsf deleted file mode 100644 index 546adb61..00000000 --- a/build/tests/CheckSharedFont/ROM-TS_nand.rsf +++ /dev/null @@ -1,263 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess FALSE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [0 - 255] - # - #AgreeEULAVersion 0 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode ABCJ - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 0 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 0K - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization [0 - 31, ALWAYS, FREE] - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / ALWAYS / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/CheckSharedFont/src/loadSharedFont.c b/build/tests/CheckSharedFont/src/loadSharedFont.c deleted file mode 100644 index 6d858c85..00000000 --- a/build/tests/CheckSharedFont/src/loadSharedFont.c +++ /dev/null @@ -1,147 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: loadSharedFont.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "loadSharedFont.h" - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- -#define FONT_LOAD_THREAD_PRIO 13 -#define THREAD_STACK_SIZE 1024 - -// function's prototype------------------------------------------------------- - -// global variable------------------------------------------------------------- -BOOL g_isSucceededLoad[ OS_SHARED_FONT_CN_KR_MAX + 1 ]; - -const char *str_fontname[ OS_SHARED_FONT_CN_KR_MAX + 1 ] = { - "SHARE_FONT_WW_L", - "SHARE_FONT_WW_M", - "SHARE_FONT_WW_S", - "SHARE_FONT_CN_L", - "SHARE_FONT_CN_M", - "SHARE_FONT_CN_S", - "SHARE_FONT_KR_L", - "SHARE_FONT_KR_M", - "SHARE_FONT_KR_S", - "SHARE_FONT_CN_KR_MAX", -}; - -// static variable------------------------------------------------------------- -static u64 s_fontLoadThreadStack[THREAD_STACK_SIZE / sizeof(u64)]; -static OSThread s_fontLoadThread; -static OSTick s_fontLoadStartTick; -static u8 *s_pFontBuffer[ OS_SHARED_FONT_CN_KR_MAX + 1 ]; // ǂݍ݂̓eXgȂ̂Ń[hstaticϐɂĂB -static BOOL s_isStarted = FALSE; - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// LtHg[h -// ============================================================================ -BOOL LoadSharedFontInit( void ) -{ - u8 *pBuffer; - int size; - - s_fontLoadStartTick = OS_GetTick(); - - // [hXbh - OS_CreateThread(&s_fontLoadThread, - LoadSharedFontThread, - NULL, - s_fontLoadThreadStack + THREAD_STACK_SIZE / sizeof(u64), - THREAD_STACK_SIZE, FONT_LOAD_THREAD_PRIO); - - // tHg[h - if( !OS_InitSharedFont() ) { - OS_TPrintf( "OS_InitSharedFont failed.\n" ); - return FALSE; - } - size = OS_GetSharedFontTableSize(); - if( size < 0 ) { - OS_TPrintf( "OS_GetSharedTableSize failed.\n" ); - return FALSE; - } - - pBuffer = OS_Alloc( (u32)size ); - if( pBuffer == NULL ) { - OS_TPrintf( "malloc failed.\n" ); - return FALSE; - } - if( !OS_LoadSharedFontTable( pBuffer ) ) { - OS_TPrintf( "OS_LoadSharedTable failed.\n" ); - return FALSE; - } - - // [hXbhN - OS_WakeupThreadDirect(&s_fontLoadThread); - s_isStarted = TRUE; - return TRUE; -} - - -void LoadSharedFontThread( void *arg ) -{ -#pragma unused(arg) - BOOL retval = TRUE; - OSSharedFontIndex i; - - for( i = OS_SHARED_FONT_WW_L; i < OS_SHARED_FONT_CN_KR_MAX + 1; i++ ) { - int size; - - OS_TPrintf( "%s read.\n", str_fontname[ i ] ); - - size = OS_GetSharedFontSize( i ); - if( size < 0 ) { - OS_TPrintf( " get font size failed.\n" ); - retval = FALSE; - } - - // FS̃LbVȂ̂ŁAƂ肠ACgƂĂB - size = MATH_ROUNDUP( size, 32 ); - - s_pFontBuffer[ i ] = OS_Alloc( (u32)size ); - if( s_pFontBuffer[ i ] == NULL ) { - OS_TPrintf( " malloc failed.\n" ); - retval = FALSE; - } - - if( OS_LoadSharedFont( i, s_pFontBuffer[ i ] ) ) { - OS_TPrintf( " load succeeded.\n" ); - g_isSucceededLoad[ i ] = TRUE; - }else { - OS_TPrintf( " load failed.\n" ); - g_isSucceededLoad[ i ] = FALSE; - retval = FALSE; - } - } - OS_TPrintf( "Shared Font load time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - s_fontLoadStartTick ) ); -} - - -BOOL IsFinishedLoadSharedFont( void ) -{ - if( s_isStarted ) { - return OS_IsThreadTerminated( &s_fontLoadThread ); - }else { - return TRUE; - } -} - diff --git a/build/tests/CheckSharedFont/src/loadSharedFont.h b/build/tests/CheckSharedFont/src/loadSharedFont.h deleted file mode 100644 index fb350e47..00000000 --- a/build/tests/CheckSharedFont/src/loadSharedFont.h +++ /dev/null @@ -1,42 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: loadSharedFont.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __LOAD_SHARED_FONT_H__ -#define __LOAD_SHARED_FONT_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// define data------------------------------------------------------- -// global variables-------------------------------------------------- -extern BOOL g_isSucceededLoad[ OS_SHARED_FONT_CN_KR_MAX + 1 ]; -extern const char *str_fontname[ OS_SHARED_FONT_CN_KR_MAX + 1 ]; - -// function---------------------------------------------------------- -BOOL LoadSharedFontInit( void ); -void LoadSharedFontThread( void *arg ); -BOOL IsFinishedLoadSharedFont( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __LOAD_SHARED_FONT_H__ diff --git a/build/tests/CheckSharedFont/src/main.c b/build/tests/CheckSharedFont/src/main.c deleted file mode 100644 index 0d2f9185..00000000 --- a/build/tests/CheckSharedFont/src/main.c +++ /dev/null @@ -1,98 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos - FS - overlay - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#include - -#include "DEMO.h" -#include "loadSharedFont.h" - -/*---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: NitroMain - - Description: AvP[VCGg - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void NitroMain(void) -{ - - OS_Init(); - OS_InitTick(); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - { - OSHeapHandle hh; - void *tmp; - tmp = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tmp); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - OS_TPanic("ARM9: Fail to create heap...\n"); - } - (void)OS_SetCurrentHeap(OS_ARENA_MAIN, hh); - } - - DEMOInitCommon(); - DEMOInitVRAM(); - DEMOInitDisplayBitmap(); - DEMOHookConsole(); - - DEMOSetBitmapTextColor(GX_RGBA(31, 31, 0, 1)); - DEMOSetBitmapGroundColor(DEMO_RGB_CLEAR); - DEMOStartDisplay(); - - FS_Init(FS_DMA_NOT_USE); - - OS_TPrintf("--------------------------------\n" - "Shared Font sample.\n"); - - if( LoadSharedFontInit() ) { - - while( !IsFinishedLoadSharedFont() ) { - OS_WaitVBlankIntr(); - } - - // ʕ\ - { - int i; - int ox = 10; - int oy = 60; - DEMOFillRect(0, 0, GX_LCD_SIZE_X, GX_LCD_SIZE_Y, DEMO_RGB_CLEAR); - DEMOSetBitmapTextColor(GX_RGBA(0, 31, 0, 1)); - DEMOSetBitmapTextColor(GX_RGBA(31, 31, 31, 1)); - DEMODrawFrame(ox, oy, 240, 10 + ( OS_SHARED_FONT_CN_KR_MAX + 1 ) * 10, GX_RGBA( 0, 31, 0, 1)); - for (i = 0; i < OS_SHARED_FONT_CN_KR_MAX + 1; ++i) - { - DEMODrawText(ox + 10, oy + 5 + i * 10, "%s load %s", - str_fontname[ i ], g_isSucceededLoad[ i ] ? "suceeded" : "failed"); - } - } - DEMO_DrawFlip(); - OS_WaitVBlankIntr(); - } - - OS_Terminate(); -} - - diff --git a/build/tests/CreateDevKp/ARM9/Makefile b/build/tests/CreateDevKp/ARM9/Makefile deleted file mode 100644 index d776bcac..00000000 --- a/build/tests/CreateDevKp/ARM9/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 0 -TARGET_NAME = CreateDevKP -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = CDKP -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main.rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/CreateDevKp/ARM9/main.rsf b/build/tests/CreateDevKp/ARM9/main.rsf deleted file mode 100644 index af290caa..00000000 --- a/build/tests/CreateDevKp/ARM9/main.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_0.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/CreateDevKp/ARM9/src/RomTypeTest.c b/build/tests/CreateDevKp/ARM9/src/RomTypeTest.c deleted file mode 100644 index ec236dca..00000000 --- a/build/tests/CreateDevKp/ARM9/src/RomTypeTest.c +++ /dev/null @@ -1,143 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: DS_Chat.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" -#include "RomTypeTest.h" - -// define data------------------------------------------ -#define RETURN_BUTTON_TOP_X 2 -#define RETURN_BUTTON_TOP_Y 21 -#define RETURN_BUTTON_BOTTOM_X ( RETURN_BUTTON_TOP_X + 8 ) -#define RETURN_BUTTON_BOTTOM_Y ( RETURN_BUTTON_TOP_Y + 2 ) - -#define ENABLE_CONTENT 0 -#define ENABLE_SHARED2 0 - -#if (ENABLE_CONTENT == 1) -#define CTRUE TRUE -#else -#define CTRUE FALSE -#endif - -#if (ENABLE_SHARED2 == 1) -#define STRUE TRUE -#else -#define STRUE FALSE -#endif - -#define TEST_NUM 15 - -typedef enum AccessPermission { - PERMISSION_NA = 0, - PERMISSION_RO, - PERMISSION_RW, - PERMISSION_ERROR, - PERMISSION_MAX -} -AccessPermission; - -// extern data------------------------------------------ - -// function's prototype declaration--------------------- -static AccessPermission RWExTestCore( char *path, char *testfile ); -static AccessPermission SRLTest( void ); -static AccessPermission ContentTest( void ); -static void FinalizeRWTest( FSFile *file, char* filename ); -static AccessPermission RWTestCore( char *path, char *testfile ); -static AccessPermission RWTest( char *path ); -static void TestFSPermission( void ); - -// global variable ------------------------------------- -RTCDrawProperty g_rtcDraw = { - TRUE, RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y -}; - -// static variable ------------------------------------- - -// const data ----------------------------------------- - -static BOOL CreateFile( void ) -{ - int len; - FSFile file[1]; - - FS_InitFile( file ); - - // t@C쐬eXg - if ( FS_CreateFile("nand:/sys/dev.kp", FS_PERMIT_R | FS_PERMIT_W) ) - { - // t@CI[v - if ( !FS_OpenFileEx( file, "nand:/sys/dev.kp", FS_FILEMODE_W ) ) - { - // t@CI[vs - OS_TPrintf("%s:open failed.\n","nand:/sys/dev.kp"); - return FALSE; - } - // t@CCg - len = FS_WriteFile( file, "test", 5); - if( len != 5 ) - { - // Cgs - OS_TPrintf("%s:write failed.\n","nand:/sys/dev.kp"); - return FALSE; - } - // t@CN[Y - if( !FS_CloseFile( file ) ) - { - // N[Ys - OS_TPrintf("%s:close failed.\n","nand:/sys/dev.kp"); - return FALSE; - } - }else - { - OS_TPrintf("%s:create failed.\n","nand:/sys/dev.kp"); - return FALSE; - } - - return TRUE; -} - -// eXgvȌ -void RomTypeTestInit( void ) -{ - BOOL res; - - GX_DispOff(); - GXS_DispOff(); - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - - PrintfSJIS( 1 * 8, 9 * 8, TXT_COLOR_BLACK, "CreateFile"); - - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); - GX_DispOn(); - GXS_DispOn(); - - res = CreateFile(); - - if(res) - { - PutStringUTF16( 1 * 8, 11 * 8, TXT_COLOR_BLACK, (const u16 *)L"Succeed." ); - }else - { - PutStringUTF16( 1 * 8, 11 * 8, TXT_COLOR_BLACK, (const u16 *)L"NG." ); - } - -} - - diff --git a/build/tests/CreateDevKp/ARM9/src/RomTypeTest.h b/build/tests/CreateDevKp/ARM9/src/RomTypeTest.h deleted file mode 100644 index 39905e52..00000000 --- a/build/tests/CreateDevKp/ARM9/src/RomTypeTest.h +++ /dev/null @@ -1,35 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: RomTypeTest.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __ROM_TYPE_TEST_H__ -#define __ROM_TYPE_TEST_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -// define data---------------------------------------------------------- - -void RomTypeTestInit( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __ROM_TYPE_TEST_H__ diff --git a/build/tests/CreateDevKp/ARM9/src/main.c b/build/tests/CreateDevKp/ARM9/src/main.c deleted file mode 100644 index 4b651a3c..00000000 --- a/build/tests/CreateDevKp/ARM9/src/main.c +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "misc.h" -#include "RomTypeTest.h" - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- - -// function's prototype------------------------------------------------------- -static void INTR_VBlank( void ); - -// global variable------------------------------------------------------------- - -// static variable------------------------------------------------------------- - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// function's description -// ============================================================================ -void TwlMain(void) -{ - - // ---------------------------------- - OS_Init(); - - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - GX_Init(); - GX_SetPower(GX_POWER_ALL); // eWbN p[ON - - // 荞݋---------------------------- - (void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // foCX------------------------------- - TP_Init(); - (void)RTC_Init(); - - // VXȅ------------------ - InitAllocator(); - - InitBG(); - RomTypeTestInit(); - // C[v---------------------------- - while(1){ - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - ReadTP(); // TP͂̎擾 - - } -} - - -// ============================================================================ -// 荞ݏ -// ============================================================================ - -// VuN荞 -static void INTR_VBlank(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // VuN`FbÑZbg -} - diff --git a/build/tests/CreateDevKp/Makefile b/build/tests/CreateDevKp/Makefile deleted file mode 100644 index 66754bca..00000000 --- a/build/tests/CreateDevKp/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/CreateDevKp/banner/Makefile b/build/tests/CreateDevKp/banner/Makefile deleted file mode 100644 index 97c32d52..00000000 --- a/build/tests/CreateDevKp/banner/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 0 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/CreateDevKp/banner/icon/gameIcon.bmp b/build/tests/CreateDevKp/banner/icon/gameIcon.bmp deleted file mode 100644 index 5fe5ee2cc7d6733ec1a54bedea3d1c7efc25c130..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmY+Bu}k|v6vv+;IR13+U`hp{P_QX=>(I-nf#Th!L($%5DJTha5`L6s@6ybjn%yN? zRVW_*0osgCYX1V0`n@z_{lZ=Hx%bU`@A8@_&L(AYupeOU!w*rG$gwV8ui2t-`7iaqoEDpxIr^P)f#UzZs0(QsSQt*9@9H z*U3v5MlA`>$3ypd0Ws4kX6(5P%~hCrn6d8-ZIr0!CTmG}KJ`8Ox(K$a)mjo=1^(DR zlKT~IHO*QIp87UQG{g@FzWx6i%$v+YJPf8_r_m8j%SxZFq9Ev^d_#&;uyeTxf$IPUVA8!~?UxO+tjABKw#Pv@%p@SbJx+)K&RSUtYI zM^R?D(L7gj@riN8O5JOQK|)+$ERN>6Qcw6G>w%}RDy5=41OJE4wek$NdgyDSZ$-Qi AC;$Ke diff --git a/build/tests/CreateDevKp/banner/icon/msk_pictchat_icon.bin b/build/tests/CreateDevKp/banner/icon/msk_pictchat_icon.bin deleted file mode 100644 index 5b2734aa29fe5a7cc1474fd910a9f00b579e0a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4480 zcmeHKJ#Q015Ou!H6)6~qMFFxP5(P>HS0O5hMMHJPrU*((r$~Vi#T7C5Z_VA>o4@S`d;40Nt*5jG@JWUM3#MJ4q~&_3TU_60<<4u z(vY8HU>0jS59BGzd6q4m1s*wsXtfRkNWu_4eh7W8EL(0>N)YKXU{^PsxCBni8~dtE^N z*MIc&54F!dKx>~K`psO>Hq@jT>VJXPnuMqR=w!(H&sUu*LVVkbMD3$@RE zpji979$f#nKJ)r_{p)jD($%l6f6d;P?^FMUcw7Iv_tW>Qf9^ACsM}ze+iTqa1#7^< ztk#7{2T|HBg@zQz5Vb_Hs1$jW{ImiE#gy3bEM|~ELTKJz-XMoV z>%a)k01LMQ5Izd}3(kOn^{>yPI-@C9gGa7=;FY3>!3|aat{2x47a=p+e*M4#k4&T; zn~&>?^-ukU_3xCjKl4kh4;uBiHw!dh9k_aww`YH!{huK>Nq@ZQV7T^?y>riRCxUZP zpxMB&xEfM_?LP~K8O;>9@-~3ZhSmRkzkduD^l$hjcej{~sTpJU(0NHom2wJ~ZAfu0CJ+wfuc?XW{m%2P@s>wT03@ vZsoCPTro5DtQ5^h6V=kWJCo5=wbavUBATz3s^#*nGVr<_O+}N{E6vnzcJN>n diff --git a/build/tests/CreateDevKp/banner/test-utf16_0_v3.TWL.bsf b/build/tests/CreateDevKp/banner/test-utf16_0_v3.TWL.bsf deleted file mode 100644 index 347fe36264d98ebbb285252bd11a0f7a137bcf3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 594 zcmajc%L;-}5C-6XYtTCgZEVp6S_JL7Sr&w3w2dxOQdy)#Phb5rrwg>`a5y@SpJ!(9 zaWA2R2tHg?bh&(9BISy4VK%~<(VCHu1P8`N6m-v3WXztZTX4|$ylXR);7Aehy2Mta z6dT@eYMW}mF67xcSHLg7%0d0dy}OWl3Hy@THP* zWFIb9mvhFdWAqqZG3GfkWgnBj##2#N>tkxMB8(mIyMMJkh%h$5%wk0t8(C)Z_&39s P?OJCOVa^>|tq5bEVeVM0 diff --git a/build/tests/CustomSystemUpdater/ARM7.TWL/Makefile b/build/tests/CustomSystemUpdater/ARM7.TWL/Makefile deleted file mode 100644 index 3aec1362..00000000 --- a/build/tests/CustomSystemUpdater/ARM7.TWL/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -##override TWL_PLATFORM = TS -TWL_NO_STD_PCHDR = True -override TARGET_CODEGEN = ARM - -ifndef TWLSDK_NOCRYPTO -#---------------------------------------------------------------------------- - -SRCS = main.c \ - kami_pxi.c \ - formatter.c - -TARGET_NAME = armadillo - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = $(TARGET_NAME).lsf -LCFILE_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).lcf.template -LDRES_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).response.template - -CRT0_O = crt0.SCR.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -MACRO_FLAGS += -DSDK_ARM7COMP_LTD -DSDK_SEA - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include \ - ../common/include \ - ../../../systemMenu_tools/common/ARM7/include \ - -SRCDIR += ../../../systemMenu_tools/common/ARM7/src - -LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ - libsdio_sp$(TWL_LIBSUFFIX).a \ - libathdrv_sp$(TWL_LIBSUFFIX).a \ - libwpa_sp$(TWL_LIBSUFFIX).a \ - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -endif #ifndef TWLSDK_NOCRYPTO - -#===== End of Makefile ===== diff --git a/build/tests/CustomSystemUpdater/ARM7.TWL/armadillo.lsf b/build/tests/CustomSystemUpdater/ARM7.TWL/armadillo.lsf deleted file mode 100644 index 177f5206..00000000 --- a/build/tests/CustomSystemUpdater/ARM7.TWL/armadillo.lsf +++ /dev/null @@ -1,86 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: armadillo.lsf -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - StackSize 1024 1024 - - Library $(CRT0_O) -} - -#-------- -Ltdautoload SCRWRAM -{ - Address 0x03740000 - - Library libsubpsyscall.a - Library libsyscall_sp.twl.a - Library $(CW_LIBS) - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) - - Object * (.etable) - Object $(OBJDIR)/main.o - Object $(OBJDIR)/kami_pxi.o - Object $(OBJDIR)/formatter.o - - Library libsea_sp$(LIBSUFFIX).a - Library libcrypto_sp$(LIBSUFFIX).a - - Library libos_sp$(LIBSUFFIX).a - Library libmi_sp$(LIBSUFFIX).a - Library libstd_sp$(LIBSUFFIX).a - Library libmath_sp$(LIBSUFFIX).a - Library libpxi_sp$(LIBSUFFIX).a - Library libexi_sp$(LIBSUFFIX).a - Library libi2c_sp$(LIBSUFFIX).a - Library libsdio_sp$(LIBSUFFIX).a - Library libpad_sp$(LIBSUFFIX).a - Library libscfg_sp$(LIBSUFFIX).a - Library libmcu_sp$(LIBSUFFIX).a - Library libcdc_sp$(LIBSUFFIX).a - Library libsnd_sp$(LIBSUFFIX).a - Library libsndex_sp$(LIBSUFFIX).a - Library libspi_sp$(LIBSUFFIX).a - Library libpm_sp$(LIBSUFFIX).a - Library libtp_sp$(LIBSUFFIX).a - Library libtpex_sp$(LIBSUFFIX).a - Library libmic_sp$(LIBSUFFIX).a - Library libmicex_sp$(LIBSUFFIX).a - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - Library libfatfs_sp$(LIBSUFFIX).a -# Library libwm_sp$(LIBSUFFIX).a -# Library libnwm_sp$(LIBSUFFIX).a - Library libwvr_sp$(LIBSUFFIX).a - Library libwl_sp$(LIBSUFFIX).a - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a - Library libfs_sp$(LIBSUFFIX).a - Library libcard_sp$(LIBSUFFIX).a - Library libcamera_sp$(LIBSUFFIX).a - - Object * (.wram) - Object * (.ltdwram) - Object * (.rsvwram) - Object * (.main) - Object * (.ltdmain) -} diff --git a/build/tests/CustomSystemUpdater/ARM7.TWL/include/kami_pxi.h b/build/tests/CustomSystemUpdater/ARM7.TWL/include/kami_pxi.h deleted file mode 100644 index cbce8090..00000000 --- a/build/tests/CustomSystemUpdater/ARM7.TWL/include/kami_pxi.h +++ /dev/null @@ -1,44 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef TWL_CAMERA_TEST_CAMERATEST_H_ -#define TWL_CAMERA_TEST_CAMERATEST_H_ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -void KamiPxiInit( void ); - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_CAMERA_TEST_CAMERATEST_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM7.TWL/src/kami_pxi.c b/build/tests/CustomSystemUpdater/ARM7.TWL/src/kami_pxi.c deleted file mode 100644 index c3caa3f1..00000000 --- a/build/tests/CustomSystemUpdater/ARM7.TWL/src/kami_pxi.c +++ /dev/null @@ -1,262 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "kami_pxi.h" -#include "fifo.h" -#include "twl/cdc.h" -#include "formatter.h" -#include -#include -#include -#include -#include - -typedef unsigned char byte; /* Don't change */ -typedef unsigned short word; /* Don't change */ -typedef unsigned long dword; /* Don't change */ -#define BOOLEAN int - -extern BOOL FATFSi_nandRtfsIo( int driveno, dword block, void* buffer, word count, BOOLEAN reading); -extern BOOL sdmcFormatNandLog( BOOL verify_flag); - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define KAMITEST_MESSAGE_ARRAY_MAX 4 // XbhpbZ[WL[̃TCY -#define KAMITEST_THREAD_STACK_SIZE 2048 // Xbh̃X^bNTCY - -#define KAMITEST_THREAD_PRIORITY 6 - -// ACgăRs[ -#define KAMI_UNPACK_U16(d, s) \ - (*(d) = (u16)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8))) -#define KAMI_UNPACK_U32(d, s) \ - (*(d) = (u32)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8) | (((u8*)s)[2] << 16) | (((u8*)s)[3] << 24))) - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef struct KamiWork -{ - BOOL result; - u32 total; - u32 current; - KamiCommand command; - u8 data[KAMITEST_PXI_DATA_SIZE_MAX]; // 㑱f[^i[p - - OSMessageQueue msgQ; // XbhpbZ[WL[ - OSMessage msgArray[KAMITEST_MESSAGE_ARRAY_MAX]; - // bZ[Wi[obt@ - OSThread thread; // KAMIpXbh - u64 stack[KAMITEST_THREAD_STACK_SIZE / sizeof(u64)]; - // KAMIpXbh̃X^bN -} -KamiWork; - -/*---------------------------------------------------------------------------* - ÓIϐ` - *---------------------------------------------------------------------------*/ -static BOOL kamiInitialized; -static KamiWork kamiWork; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); -static void KamiReturnResult(KamiCommand command, KAMIPxiResult result); -static void KamiReturnResultEx(KamiCommand command, KAMIPxiResult result, u8 size, u8* data); -static void KamiThread(void *arg); - -void KamiPxiInit(void) -{ - if (kamiInitialized) - { - return; - } - kamiInitialized = TRUE; - - PXI_Init(); - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - - OS_InitMessageQueue(&kamiWork.msgQ, kamiWork.msgArray, KAMITEST_MESSAGE_ARRAY_MAX); - OS_CreateThread(&kamiWork.thread, KamiThread, 0, - (void *)(kamiWork.stack + (KAMITEST_THREAD_STACK_SIZE / sizeof(u64))), - KAMITEST_THREAD_STACK_SIZE, KAMITEST_THREAD_PRIORITY); - OS_WakeupThreadDirect(&kamiWork.thread); -} - -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused( tag ) - if (err) - { - return; - } - if (data & KAMITEST_PXI_START_BIT) // 擪f[^ - { - kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); - kamiWork.current = 0; - kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); - kamiWork.data[kamiWork.current++] = (u8)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); - } - else // 㑱f[^ - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); - kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); - kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); - } - if (kamiWork.current >= kamiWork.total) - { - switch (kamiWork.command) - { - case KAMI_EXE_FORMAT: - case KAMI_NAND_IO: - case KAMI_CLEAR_NAND_ERRORLOG: - case KAMI_GET_IS_TOOL_TYPE: - if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR); - } - break; - - default: - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); - } - } -} - -static void KamiReturnResult(KamiCommand command, KAMIPxiResult result) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | KAMITEST_PXI_RESULT_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - ((1 << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((result << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } -} - -static void KamiReturnResultEx(KamiCommand command, KAMIPxiResult result, u8 size, u8* data) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | KAMITEST_PXI_RESULT_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - (((size+1) << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((result << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - int i; - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } - for (i = 0; i < size; i+= 3) - { - pxiData = (u32)((data[i] << 16) | (data[i+1] << 8) | data[i+2]); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } - } -} - -static void KamiThread(void *arg) -{ -#pragma unused( arg ) - OSMessage msg; - BOOL result; - - while (TRUE) - { - (void)OS_ReceiveMessage(&kamiWork.msgQ, &msg, OS_MESSAGE_BLOCK); - switch (kamiWork.command) - { - case KAMI_EXE_FORMAT: - { - result = ExeFormat((FormatMode)kamiWork.data[0]); // Quick or Full - if (result) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_TRUE); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_NAND_IO: - { - BOOL is_read; - u32 block; - void* buffer; - u32 count; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U32(&block, &kamiWork.data[1]); - KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[5]); - KAMI_UNPACK_U32(&count, &kamiWork.data[9]); - - result = FATFSi_nandRtfsIo( 0, block, buffer, (u16)count, is_read ); - if (result) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_TRUE); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_CLEAR_NAND_ERRORLOG: - { - if (sdmcFormatNandLog(TRUE)) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_GET_IS_TOOL_TYPE: - { - IsToolType type = IS_TOOL_TYPE_ERROR; - u8 temp = I2C_ReadRegister( I2C_SLAVE_DEBUGGER, 0); - if (temp != (u8)(-1)) // ԔALv`ȊO͒ʐMG[ - { - if (temp == 0x44) - { - type = IS_TOOL_TYPE_DEBUGGER; - } - else if (temp == 0x43) - { - type = IS_TOOL_TYPE_CAPTURE; - } - } - - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(IsToolType), (u8*)&type); - } - break; - - default: - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); - } - } -} - -#include diff --git a/build/tests/CustomSystemUpdater/ARM7.TWL/src/main.c b/build/tests/CustomSystemUpdater/ARM7.TWL/src/main.c deleted file mode 100644 index a68e6750..00000000 --- a/build/tests/CustomSystemUpdater/ARM7.TWL/src/main.c +++ /dev/null @@ -1,576 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" -#include "kami_pxi.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -/* eXbhDx */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_WPA 10 -#define THREAD_PRIO_HOTSW 11 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* ROM o^GÅgR[h */ -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/* gp DMA ԍ */ -#define DMA_NO_FATFS FATFS_DMA_4 // = 0 -#define DMA_NO_NWM 3 - -/* J[h`^OJE^ */ -#define CHATTERING_COUNTER 0x1988 // 100ms (0x1988 * 15.3us = 100000us) - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(void); -static void InitializeFatfs(void); - -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); -#endif -static void VBlankIntr(void); - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void -TwlSpMain(void) -{ - OSHeapHandle heapHandle; - - /* OS */ - OS_Init(); - PrintDebugInfo(); - - /* NVRAM 烆[U[ǂݏo */ - ReadUserInfo(); - - /* q[v̈ݒ */ - heapHandle = InitializeAllocateSystem(); - - /* {^̓T[` */ - (void)PAD_InitXYButton(); - - /* ݋ */ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - /* eCu */ - AES_Init(THREAD_PRIO_AES); // AES - SEA_Init(THREAD_PRIO_SEA); // SEA - FS_Init(FS_DMA_NOT_USE); // FS for CARD - FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD - InitializeFatfs(); // FAT-FS -// InitializeNwm(heapHandle); // TWL - MCU_InitIrq(THREAD_PRIO_MCU); // }CR - CDC_InitLib(); // CODECCu - CAMERA_Init(); // J - - SND_Init(THREAD_PRIO_SND); // TEh - SNDEX_Init(THREAD_PRIO_SNDEX); // TEhg - RTC_Init(THREAD_PRIO_RTC); // RTC -// WVR_Begin(heapHandle); // NITRO - SPI_Init(THREAD_PRIO_SPI); - -/////////////// -#ifndef NAND_INITIALIZER_LIMITED_MODE - KamiPxiInit(); -#endif -/////////////// - - while (TRUE) - { - OS_Halt(); - - /* \tgEFAZbgv͊ĎȂ */ - /* AGB J[gbW̑}`FbN͍sȂ */ - /* DS J[h̑}`FbN͍sȂ */ - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - OS_TPrintf("ARM7: This component is running on TWL.\n"); - OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle -InitializeAllocateSystem(void) -{ - OSHeapHandle hh; - void* subLo = (void*)OS_GetWramSubArenaLo(); - void* subHi = (void*)OS_GetWramSubArenaHi(); - void* privLo = (void*)OS_GetWramSubPrivArenaLo(); - void* privHi = (void*)OS_GetWramSubPrivArenaHi(); - - if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) - { - /* SUB A[i SUBPRIV A[iɋz */ - OS_SetWramSubArenaHi(subLo); - OS_SetWramSubPrivArenaLo(subLo); - privLo = subLo; - } - - /* A[i 0 NA */ - MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); - - /* q[v쐬 */ - privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); - if (hh < 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - - /* Jgq[vɐݒ */ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - /* q[vTCY̊mF */ - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if (heapSize <= 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - OS_TPrintf("ARM7: heap size [%d]\n", heapSize); - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuBFATFS֐ŃXbhx~ - ׁAx~삷_~[̃Xbh𗧂ĂB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - // FATFSCȕ - if(!FATFS_Init( FATFS_DMA_4, FATFS_DMA_5, THREAD_PRIO_FATFS)) - { - // do nothing - } -} - -//#ifdef WM_PRECALC_ALLOWEDCHANNEL -//extern u16 WMSP_GetAllowedChannel(u16 bitField); -//#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } -/* -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -*/ -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -extern void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/ARM9-TS.lsf b/build/tests/CustomSystemUpdater/ARM9.TWL/ARM9-TS.lsf deleted file mode 100644 index 35e3fba0..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/ARM9-TS.lsf +++ /dev/null @@ -1,57 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: ARM9-TS.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL LCF SPEC FILE -# - -Static $(TARGET_NAME) -{ - Address $(ADDRESS_STATIC) - Object $(OBJS_STATIC) - Library $(LLIBS) $(GLIBS) $(CW_LIBS) - StackSize 4096 4096 -} - -Autoload ITCM -{ - Address $(ADDRESS_ITCM) - Object * (.itcm) - Object $(OBJS_AUTOLOAD) (.text) - Object $(OBJS_AUTOLOAD) (.rodata) - Object $(OBJS_AUTOLOAD) (.init) - Object $(OBJS_AUTOLOAD) (.ctor) - Object $(OBJS_AUTOLOAD) (.sinit) -} - -Autoload DTCM -{ - Address $(ADDRESS_DTCM) - Object * (.dtcm) - Object $(OBJS_AUTOLOAD) (.data) - Object $(OBJS_AUTOLOAD) (.sdata) - Object $(OBJS_AUTOLOAD) (.bss) - Object $(OBJS_AUTOLOAD) (.sbss) -} - -Ltdautoload LTDMAIN -{ - # NITRO/TWL L̃I[o[C݂ꍇ́Aɂ̌ɔzuKv܂B - After $(TARGET_NAME) - Object * (.ltdmain) - Object $(OBJS_LTDAUTOLOAD) - Library $(LLIBS_EX) $(GLIBS_EX) -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/Makefile b/build/tests/CustomSystemUpdater/ARM9.TWL/Makefile deleted file mode 100644 index 08a2e0c7..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/Makefile +++ /dev/null @@ -1,150 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -#============================================================================ -#ig݂sꍇ́ATwlIPL/build/buildtools/commondefs"FIRM_USE_PRODUCT_KEYS=TRUE"LɂĂB -#============================================================================ - -# COMPILE SWITCH for build SystemUpdater -IGNORE_VERSION_CHECK ?= TRUE - -# MAKEROM SWITCH for build SystemUpdater -SYSM_DISABLE_DEBUG ?= TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -#TARGET_CODEGEN = THUMB - -TITLEID_LO = 0SUA -#TARGET_TAD = - -TARGET_BIN = CustomSystemUpdater_$(SYSM_REGION).srl -LCFILE_SPEC = ARM9-TS.lsf -ROM_SPEC = main.rsf - -MAKEROM_ARM7_BASE = ../ARM7.TWL/bin/$(TWL_BUILDTYPE_ARM7)/armadillo -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - -SRCS = main.c \ - font_data.c \ - graphics.c \ - kami_font.c \ - import.c \ - hwi.c \ - kami_pxi.c \ - kami_write_nandfirm.c \ - hw_info.c \ - keypad.c \ - kami_copy_file.c \ - debugger_hw_reset_control.c \ - debugger_card_rom.c - -LINCLUDES = include \ - ../common/include \ - $(ROOT)/build/libraries/lcfg/ARM9.TWL/include \ - $(ROOT)/build/libraries/fs/common/include \ - ../../../systemMenu_tools/common/ARM9/include \ - -SRCDIR = src \ - ../../../systemMenu_tools/HWInfoWriter/ARM9/src \ - ../../../systemMenu_tools/common/ARM9/src \ - -#LCFILE = # using default - -DATA_ROOT = ../data -ROMSET_FILE = ../romset -ROM_CHECKER = ../romchecker.rb - -SUMAKER = ../sumaker.rb custom -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) -ifdef FIRM_USE_PRODUCT_KEYS -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' \ - -DHWID_PRIVKEY='private_HWID.der' -else -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' \ - -DHWID_PRIVKEY='private_HWID_dev.der' -endif -endif - -ifeq ($(IGNORE_VERSION_CHECK),TRUE) -MACRO_FLAGS += -DIGNORE_VERSION_CHECK -endif - - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ - -DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa' \ - -DCARD_REGION='$(CARD_REGION)' \ - -DDISABLE_DEBUG='$(SYSM_DISABLE_DEBUG)' - -MAKETAD_FLAGS += -s - -SYSMENU_LIBS = \ - libnamut$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - liblcfg$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = -INSTALL_TARGETS = $(BINDIR)/$(TARGET_BIN) -#INSTALL_DIR = $(SDK_NMENU_DATADIR) -INSTALL_DIR = ../bin - -#---------------------------------------------------------------------------- - - -#include $(ROMSET_FILE) - -.PHONY: build_time check_rom sumaker - -check_rom: -ifeq ($(DISABLE_ROMCHECK),) - $(ROM_CHECKER) $(ROMSET) $(SYSM_REGION) - $(ROM_CHECKER) $(ROMSET) VERUP -endif -#ifeq ($(DISABLE_ROMCHECK),) -# $(ROM_CHECKER) $(DATA_ROOT)/$(ROMSET) -#endif - -build_time: - echo -n "#define BUILD_TIME \"`date \"+%Y/%m/%d %H:%M:%S\"`\"" > include/build_time.h - -sumaker: - $(SUMAKER) $(ROMSET) $(SYSM_REGION) - -do-build: sumaker check_rom build_time $(TARGETS) - -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/graphics.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/graphics.h deleted file mode 100644 index f76dfeb1..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/graphics.h +++ /dev/null @@ -1,48 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: graphics.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef GRAPHICS_H_ -#define GRAPHICS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void InitGraphics(void); -void DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color); -void DrawQuad(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color); -void DrawResult(BOOL result); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* GRAPHICS_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/hw_info.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/hw_info.h deleted file mode 100644 index 1c43c56e..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/hw_info.h +++ /dev/null @@ -1,71 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: process_hw_info.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef HW_INFO_H_ -#define HW_INFO_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: HWŜ̃Cg - - Description: - - Arguments: region : - wirelessForceOff : OFFȂTRUEw - - Returns: None. - *---------------------------------------------------------------------------*/ -BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff ); - - -/*---------------------------------------------------------------------------* - Name: HWInfot@C̍폜 - - Description: - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -BOOL DeleteHWInfoFile( void ); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* HW_INFO_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/import.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/import.h deleted file mode 100644 index 8c04f1f6..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/import.h +++ /dev/null @@ -1,49 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: import.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef PROCESS_IMPORT_H_ -#define PROCESS_IMPORT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -s32 kamiImportTad(int no, int total, const char* path); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* PROCESS_IMPORT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_copy_file.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_copy_file.h deleted file mode 100644 index d2fb008c..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_copy_file.h +++ /dev/null @@ -1,41 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - SystemUpdater - File: kami_copy_file.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_COPY_FILE_H_ -#define KAMI_COPY_FILE_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -BOOL kamiCopyFile(char* srcPath, char* dstPath); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_COPY_FILE_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_font.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_font.h deleted file mode 100644 index ad5095e2..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_font.h +++ /dev/null @@ -1,94 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_FONT_H_ -#define KAMI_FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -extern u8 prog_state; -enum -{ STATE_NONE, STATE_SELECT, STATE_KS_PARENTINIT, STATE_KS_PARENT, STATE_KS_CHILDINIT, - STATE_KS_CHILDSCAN, STATE_KS_CHILD -}; -extern OSHeapHandle heapHandle; // Heapnh; - -extern const u16 BgScDataMain[32 * 24]; -extern const u16 BgScDataSub[32 * 24]; -extern const u32 sampleCharData[8 * 0x100]; -extern const u16 PlttDataObj[16][16]; -extern const u16 PlttDataMain[16][16]; -extern const u16 PlttDataSub[16][16]; - -void kamiFontInit(void); -void kamiFontClear(void); -void kamiFontClearMain(void); -void kamiFontPut(u16 x, u16 y, u16 color, u16 no); -void kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontFill(s16 x, s16 y, u8 color, s16 value, s32 length); -void kamiFontFillChar(int lineNo, u8 color1, u8 color2); -void kamiFontLoadScreenData(void); -void kamiFontPrintfConsole(u8 color, const char *text, ...); -void kamiFontPrintfConsoleEx(u8 color, const char *text, ...); - -// ʃR\[ppbg -#define CONSOLE_ORANGE 0 -#define CONSOLE_RED 1 -#define CONSOLE_GREEN 2 - -// ʃtHgppbg -#define FONT_COLOR_BLACK 0 -#define FONT_COLOR_RED 1 -#define FONT_COLOR_GREEN 2 -#define FONT_COLOR_BLUE 3 -#define FONT_COLOR_YELLOW 4 -#define FONT_COLOR_CYAN 5 -#define FONT_COLOR_PURPLE 6 - -// ʔwippbg -#define BG_COLOR_TRANS 0 -#define BG_COLOR_WHITE 1 -#define BG_COLOR_BLACK 2 -#define BG_COLOR_GRAY 3 -#define BG_COLOR_PURPLE 4 -#define BG_COLOR_PINK 5 -#define BG_COLOR_BLUE 6 -#define BG_COLOR_GREEN 7 -#define BG_COLOR_VIOLET 8 -#define BG_COLOR_RED 9 -#define BG_COLOR_YELLOW 10 - -#define BG_COLOR_NONE 0xff - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_pxi.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_pxi.h deleted file mode 100644 index c05de9d4..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_pxi.h +++ /dev/null @@ -1,89 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef TWL_KAMI_TEST_KAMITEST_H_ -#define TWL_KAMI_TEST_KAMITEST_H_ - -#include "fifo.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -// ʒ` -typedef enum KAMIResult -{ - KAMI_RESULT_SUCCESS = 0, - KAMI_RESULT_SUCCESS_TRUE = 0, - KAMI_RESULT_SUCCESS_FALSE, - KAMI_RESULT_INVALID_COMMAND, - KAMI_RESULT_INVALID_PARAMETER, - KAMI_RESULT_ILLEGAL_STATUS, - KAMI_RESULT_BUSY, - KAMI_RESULT_FATAL_ERROR, - KAMI_RESULT_SEND_ERROR, - KAMI_RESULT_MAX -} -KAMIResult; - - -typedef enum { - FORMAT_MODE_QUICK, // QuicktH[}bg - FORMAT_MODE_FULL // FulltH[}bg(ep[eBV0xFFŖ߂j -} FormatMode; - -// R[obN -typedef void (*KAMICallback)(KAMIResult result, void *arg); - - -void KamiPxiInit( void ); - -KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback); -KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read); -KAMIResult kamiClearNandErrorLog( void ); -KAMIResult kamiGetIsToolType( IsToolType *pType ); - -// (dv) -// ARM7ǂݏ邽߃[hOInvalidateACgO̓tbVĂB -// -static KAMIResult kamiNandRead(u32 block, void* buffer, u32 count) -{ - return kamiNandIo(block, buffer, count, TRUE); -} -static KAMIResult kamiNandWrite(u32 block, void* buffer, u32 count) -{ - return kamiNandIo(block, buffer, count, FALSE); -} - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_KAMI_TEST_KAMITEST_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_write_nandfirm.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_write_nandfirm.h deleted file mode 100644 index 90fe68bd..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/kami_write_nandfirm.h +++ /dev/null @@ -1,52 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_write_nandfirm.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_WRITE_NAND_FIRM -#define KAMI_WRITE_NAND_FIRM - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -typedef void* (*KAMIAlloc)(u32 size); -typedef void (*KAMIFree)(void* ptr); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFunc); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_WRITE_NAND_FIRM */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/include/keypad.h b/build/tests/CustomSystemUpdater/ARM9.TWL/include/keypad.h deleted file mode 100644 index 2f5a1602..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/include/keypad.h +++ /dev/null @@ -1,48 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_KEY_PAD_H_ -#define KAMI_KEY_PAD_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void kamiPadRead(void); -BOOL kamiPadIsTrigger(u16 key); -BOOL kamiPadIsRepeatTrigger(u16 key); -BOOL kamiPadIsPress(u16 key); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_KEY_PAD_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/font_data.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/font_data.c deleted file mode 100644 index 54031a91..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/font_data.c +++ /dev/null @@ -1,734 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: font_data.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include - -/*---------------------- afXN[ ---------------------------*/ - -const u16 BgScDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -const u16 BgScDataSub[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -/*---------------------- pbgf[^ ---------------------------*/ -#define RGB555(r,g,b) (b<<10|g<<5|r) - -const u16 PlttDataObj[16][16] = { - {RGB555( 0, 0, 0), RGB555(31, 10, 0), RGB555(31, 0, 0), RGB555(5, 5, 20),}, // Black - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White -}; - -// ʃR\[pbg -const u16 PlttDataMain[16][16] = { - {RGB555(31, 31, 31), RGB555(31, 10, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Orange - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555( 5, 5, 5), RGB555( 5, 5, 5), RGB555( 5, 5, 5), RGB555(31, 31, 31),}, // Black -}; - -// ʃR\[pbg -const u16 PlttDataSub[16][16] = { - {RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(25, 25, 25), RGB555(31, 31, 31),}, // Black - {RGB555(31, 31, 31), RGB555(21, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555( 0, 21, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555( 0, 0, 21), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(21, 21, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 21, 21), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(21, 0, 21), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(20, 20, 20), RGB555(20, 20, 20), RGB555(20, 20, 20),}, // Gray - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - - // wiJ[͂16ԃpbg - // D ނ炳 sN ݂ Ž - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(20, 20, 20), RGB555(31, 15, 31), RGB555(31, 20, 20), RGB555(20, 29, 31), RGB555(20, 31, 20), RGB555(21, 21, 31), RGB555(31, 0, 0), RGB555(31, 31, 10), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), } // White -}; - -/*---------------------- LN^f[^ -------------------------*/ - -const u32 sampleCharData[8 * 0x100] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11111111, 0x11111111, // 0001h use for import progress bar - 0x11111111, 0x11111111, 0x00000000, 0x00000000, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh 0 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh 1 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h 2 - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h 3 - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h 4 - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h 5 - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h 6 - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h 7 - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h 8 - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h 9 - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h 10 - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h 11 - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah 12 - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh 13 - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech 14 - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh 15 - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh 16 - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh 17 - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h 18 - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h 19 - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h 20 - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h 21 - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h 22 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h 23 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - - 0x33330000, - 0x33330000, - 0x33000000, - 0x33000000, // 00f6h - 0x33000000, - 0x33000000, - 0x33330000, - 0x33330000, - - - 0x00020000, // 00f7h - 0x00020000, - 0x00020000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00f8h - 0x00000000, - 0x00000000, - 0x00000000, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00f9h - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00fah - 0x11111111, - 0x11111111, - 0x11111111, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00fbh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fch - 0x00020000, - 0x00020000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fdh - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00000000, // 00feh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00020000, - 0x00220000, - 0x02122222, - 0x21111112, - 0x21111112, - 0x02122222, - 0x00220000, - 0x00020000, - - - -/* - 0x00022222, - 0x00002112, - 0x00021112, - 0x00211122, - 0x02111202, - 0x21112000, - 0x02120000, - 0x00200000, -*/ - -/* - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -*/ -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/graphics.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/graphics.c deleted file mode 100644 index 0064e83d..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/graphics.c +++ /dev/null @@ -1,199 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: praphics.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -//#include -#include -#include "kami_font.h" -#include "graphics.h" - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: InitGraphics - - Description: \̏ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void -InitGraphics(void) -{ - GX_DispOff(); - GXS_DispOff(); - - //---- VRAM NA - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - - //---- OAMƃpbgNA - MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE); - MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void *)HW_DB_OAM, 192, HW_DB_OAM_SIZE); - MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - //---- naioN̐ݒ - GX_SetBankForOBJ(GX_VRAM_OBJ_128_A); - GX_SetBankForSubOBJ(GX_VRAM_SUB_OBJ_128_D); - - //---- afoN̐ݒ - GX_SetBankForBG(GX_VRAM_BG_128_B); - GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C); - - //---- \[hݒ - GX_SetGraphicsMode (GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_3D); - GX_SetVisiblePlane (GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - - //---- 3D - G3X_Init(); - G3X_InitMtxStack(); - G2_SetBG0Priority(3); - G3X_AlphaTest(FALSE, 0); - G3X_AntiAlias(TRUE); - G3X_EdgeMarking(FALSE); - G3X_SetFog(FALSE, (GXFogBlend)0, (GXFogSlope)0, 0); - G3X_SetClearColor(0, 0, 0x7fff, 63, FALSE); - G3_ViewPort(0, 0, 255, 191); - G3_MtxMode(GX_MTXMODE_POSITION_VECTOR); - - //---- 32KoCgOBJ2D}bv[hŎgp - GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_2D); - - // XN[ItZbgyуLN^[ItZbg̐ݒ - GX_SetBGScrOffset(GX_BGSCROFFSET_0x00000); - GX_SetBGCharOffset(GX_BGCHAROFFSET_0x10000); - - G2_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x00000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG0Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x2000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2_BG1Mosaic(FALSE); - G2S_BG1Mosaic(FALSE); - - //---- f[^[h - GX_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBG1Char( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBGPltt ( PlttDataMain, 0, sizeof(PlttDataMain)); - GX_LoadBG1Scr ( BgScDataMain, 0, sizeof(BgScDataMain)); - GX_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GXS_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBG0Char( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBGPltt ( PlttDataSub, 0, sizeof(PlttDataSub)); - GXS_LoadBG0Scr ( BgScDataSub, 0, sizeof(BgScDataSub)); - GXS_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GX_DispOn(); - GXS_DispOn(); -} - -/*---------------------------------------------------------------------------* - Name: DrawLine - - Description: Op|SŐ` - - Arguments: sx - `悷̊Jn_̂W - sy - `悷̊Jn_̂W - ex - `悷̏I_̂W - ey - `悷̏I_̂W - color - `悷̐F - - Returns: None. - *---------------------------------------------------------------------------*/ -void -DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color) -{ - fx16 fsx = (fx16)(((sx - 128) * 0x1000) / 128); - fx16 fsy = (fx16)(((96 - sy) * 0x1000) / 96); - fx16 fex = (fx16)(((ex - 128) * 0x1000) / 128); - fx16 fey = (fx16)(((96 - ey) * 0x1000) / 96); - - G3_Begin(GX_BEGIN_TRIANGLES); - { - G3_Color( color ); - G3_Vtx(fsx, fsy, 0); - G3_Color( color ); - G3_Vtx(fex, fey, 0); - G3_Color( color ); - G3_Vtx(fsx, fsy, 1); - } - G3_End(); -} - -/*---------------------------------------------------------------------------* - Name: DrawQuad - - Description: lp|S` - - Arguments: sx - `悷̊Jn_̂W - sy - `悷̊Jn_̂W - ex - `悷̏I_̂W - ey - `悷̏I_̂W - color - `悷̐F - - Returns: None. - *---------------------------------------------------------------------------*/ -void -DrawQuad(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color) -{ - fx16 fsx = (fx16)(((sx - 128) * 0x1000) / 128); - fx16 fsy = (fx16)(((96 - sy) * 0x1000) / 96); - fx16 fex = (fx16)(((ex - 128) * 0x1000) / 128); - fx16 fey = (fx16)(((96 - ey) * 0x1000) / 96); - - G3_Begin(GX_BEGIN_QUADS); - { - G3_Color( color ); - G3_Vtx(fsx, fsy, 0); - - G3_Color( color ); - G3_Vtx(fex, fsy, 0); - - G3_Color( color ); - G3_Vtx(fex, fey, 0); - - G3_Color( color ); - G3_Vtx(fsx, fey, 0); - } - G3_End(); -} - diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/hw_info.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/hw_info.c deleted file mode 100644 index ed50cbac..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/hw_info.c +++ /dev/null @@ -1,147 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - SystemUpdater - File: hw_info.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include "kami_font.h" -#include "kami_pxi.h" -#include "hwi.h" -#include "hw_info.h" -// -#include "TWLHWInfo_api.h" -#include "TWLSettings_api.h" -// -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -BOOL WriteHWNormalInfoFile( void ); -BOOL WriteHWSecureInfoFile( u8 region ); -BOOL DeleteHWInfoFile( void ); - -/*---------------------------------------------------------------------------* - Name: HWŜ̃Cg - - Description: - - Arguments: region : - - Returns: None. - *---------------------------------------------------------------------------*/ - -BOOL WriteHWInfoFile( u8 region, BOOL wirelessForceOff ) -{ - static const char *pMsgSecureWriting = "Writing Secure File..."; - static const char *pMsgNormalWriting = "Writing Normal File..."; - static const char *pMsgSignWriting = "Writing Sign File..."; - static const char *pMsgSucceeded = "Success!\n"; - static const char *pMsgFailed = "Failed!\n"; - u32 installedSoftBoxCount = 0; - BOOL result = TRUE; - - // ZLAt@C̃Cg - if( HWI_WriteHWSecureInfoFile( region, NULL, wirelessForceOff ) ) { // Ƃ肠͗LŁB -// kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded ); - }else { - kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed ); - result = FALSE; - } - - // m[}t@C̃Cg(ڍs”\ȃj[NID̂߂ɃZLAt@Čŏށj - if( HWI_WriteHWNormalInfoFile() ) { -// kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded ); - }else { - kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed ); - result = FALSE; - } - - // HWIDt@C̃Cg - if( HWI_WriteHWIDSignFile() ) { -// kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded ); - }else { - kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed ); - result = FALSE; - } - - // CFGf[^̏C - if (!HWI_ModifyLanguage( region )) - { - kamiFontPrintfConsoleEx(CONSOLE_RED, "Fail! Write TWLSettings\n" ); - result = FALSE; - } - - return result; -} - -/*---------------------------------------------------------------------------* - Name: HWInfot@C̍폜 - - Description: - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ - -BOOL DeleteHWInfoFile( void ) -{ - static const char *pMsgNormalDeleting = "Deleting Normal File..."; - static const char *pMsgSecureDeleting = "Deteting Secure File..."; - static const char *pMsgSucceeded = "Success!\n"; - static const char *pMsgFailed = "Failed!\n"; - BOOL result = TRUE; - - // m[}t@C - kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgNormalDeleting ); - if( HWI_DeleteHWNormalInfoFile() ) { - OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH ); - kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded ); - }else { - OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_NORMAL_PATH ); - kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed ); - result = FALSE; - } - - // ZLAt@C - kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSecureDeleting ); - if( HWI_DeleteHWSecureInfoFile() ) { - OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH ); - kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded ); - }else { - OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWINFO_SECURE_PATH ); - kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed ); - result = FALSE; - } - - return result; -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/import.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/import.c deleted file mode 100644 index b422e173..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/import.c +++ /dev/null @@ -1,194 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: process_import.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include "kami_font.h" -#include "import.h" -#include "hw_info.h" -#include "TWLHWInfo_api.h" -#include "graphics.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define THREAD_STACK_SIZE (16*1024) - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u32 sCurrentProgress; -static vu8 sNowImport = FALSE; -static vu8 sProgress = FALSE; -static u8 sStack[THREAD_STACK_SIZE]; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -static void ProgressThread(void* arg); -static void Destructor(void* arg); -void ProgressDraw(f32 ratio); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: kamiImportTad - - Description: .tad t@CC|[g - - Arguments: no - - Returns: None. - *---------------------------------------------------------------------------*/ - -s32 kamiImportTad(int no, int total, const char* path) -{ - NAMTadInfo tadInfo; - OSThread thread; - s32 nam_result; - - kamiFontPrintfMain( 4, 9, 8, "Now Updating... %d / %d", no, total ); - kamiFontLoadScreenData(); - - // tadt@C̏擾 - nam_result = NAM_ReadTadInfo(&tadInfo, path); - if ( nam_result != NAM_OK ) - { - return nam_result; - } - - // ES̎dlŌ e-ticket ƐV e-ticket gC|[głȂ - // bΉƂĊY^CgS폜ĂC|[g - nam_result = NAM_DeleteTitleCompletely(tadInfo.titleInfo.titleId); - if ( nam_result != NAM_OK ) - { - kamiFontPrintfConsole(CONSOLE_RED, "Fail! RetCode=%x\n", nam_result); - return FALSE; - } - - // C|[gJntO𗧂Ă - sNowImport = TRUE; - - // iXbh쐬 - MI_CpuClear8(sStack, THREAD_STACK_SIZE); - OS_CreateThread(&thread, ProgressThread, NULL, - (void*)((u32)sStack + THREAD_STACK_SIZE), THREAD_STACK_SIZE, OS_GetCurrentThread()->priority - 1); - OS_WakeupThreadDirect(&thread); - - // ImportJn - nam_result = NAM_ImportTad( path ); - - // C|[gJntO - sNowImport = FALSE; - - // iXbh̎͏I҂ - while (sProgress){}; - - // InstalledSoftBoxCount, FreeSoftBoxCount ̒l݂NAND̏Ԃɍ킹čXV܂B - (void)NAMUT_UpdateSoftBoxCount(); - - return nam_result; -} - -/*---------------------------------------------------------------------------* - Name: ProgressThread - - Description: .tad t@CC|[g̐i\XbhB - i100%ɒBƏ𔲂B - - Arguments: arg - gpȂB - - Returns: None. - *---------------------------------------------------------------------------*/ - -static void ProgressThread(void* /*arg*/) -{ - u32 currentSize; - u32 totalSize = 0; - u32 totalSizeBk = 0; - - sProgress = TRUE; - - while (sNowImport) - { - NAM_GetProgress(¤tSize, &totalSize); - - if ((totalSize > 0 && totalSize == currentSize) || totalSizeBk > totalSize) - { - // ɃC|[gI - ProgressDraw((f32)1.0); - break; - } - else if (totalSize > 0) - { - ProgressDraw((f32)currentSize/totalSize); - } - - totalSizeBk = totalSize; - - // VuN҂ - OS_WaitVBlankIntr(); - } - - sProgress = FALSE; -} - -/*---------------------------------------------------------------------------* - Name: ProgressDraw - - Description: C|[g̐i\܂ - - Arguments: - - Returns: None. - *---------------------------------------------------------------------------*/ - -void ProgressDraw(f32 ratio) -{ - s16 x = (s16)(30 + (226 - 30)*ratio); - - // 3D - G3X_Reset(); - G3_Identity(); - G3_PolygonAttr(GX_LIGHTMASK_NONE, GX_POLYGONMODE_DECAL, GX_CULL_NONE, 0, 31, 0); - - // O[o[ - DrawQuad( 30, 90, x, 95, GX_RGB(12, 25, 12)); - - // O[o[ - DrawQuad( 30, 90, 226, 95, GX_RGB(28, 28, 28)); - - // O[_CAO - DrawQuad( 20, 60, 236, 110, GX_RGB(25, 25, 25)); - - // 3DXbv - G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_W); -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_copy_file.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_copy_file.c deleted file mode 100644 index c9365276..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_copy_file.c +++ /dev/null @@ -1,105 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_copy_file.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include "kami_font.h" -#include "kami_copy_file.h" - -/*---------------------------------------------------------------------------* - }N - *---------------------------------------------------------------------------*/ - -#define ROUND_UP(value, alignment) \ - (((u32)(value) + (alignment-1)) & ~(alignment-1)) - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -BOOL kamiCopyFile(char* srcPath, char* dstPath) -{ - FSFile file; - BOOL open_is_ok; - BOOL read_is_ok; - void* pTempBuf; - u32 file_size; - u32 alloc_size; - BOOL result = TRUE; - - // ROMt@CI[v - FS_InitFile(&file); - open_is_ok = FS_OpenFile(&file, srcPath); - if (!open_is_ok) - { - OS_Printf("FS_OpenFile(\"%s\") ... ERROR!\n", srcPath); - return FALSE; - } - - // ROMt@C[h - file_size = FS_GetFileLength(&file) ; - alloc_size = ROUND_UP(file_size, 32) ; - pTempBuf = OS_Alloc( alloc_size ); - SDK_NULL_ASSERT(pTempBuf); - DC_InvalidateRange(pTempBuf, alloc_size); - read_is_ok = FS_ReadFile( &file, pTempBuf, (s32)file_size ); - if (!read_is_ok) - { - kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_ReadFile(\"%s\") ... ERROR!\n", srcPath); - FS_CloseFile(&file); - OS_Free(pTempBuf); - return FALSE; - } - - // ROMt@CN[Y - FS_CloseFile(&file); - - // UΏۃf[^폜 - (void)FS_DeleteFile(dstPath); - - // ^[Qbgt@C쐬 - if (!FS_CreateFile(dstPath, FS_PERMIT_R | FS_PERMIT_W)) - { - kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_CreateFile(%s) failed.\n", dstPath); - result = FALSE; - } - else - { - // ^[Qbgt@CI[v - FS_InitFile(&file); - open_is_ok = FS_OpenFileEx(&file, dstPath, FS_FILEMODE_W); - if (!open_is_ok) - { - kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_OpenFile(%s) failed.\n", dstPath); - result = FALSE; - } - // nand:sys/TWLFontTable.dat - else if (FS_WriteFile(&file, pTempBuf, (s32)file_size) == -1) - { - kamiFontPrintfConsoleEx(CONSOLE_RED, "FS_WritFile() failed.\n"); - result = FALSE; - } - (void)FS_CloseFile(&file); - } - - OS_Free(pTempBuf); - - return result; -} - diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_font.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_font.c deleted file mode 100644 index fb3818b6..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_font.c +++ /dev/null @@ -1,407 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_font.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define SCREEN_DATA_COLOR_PLTT_SHIFT 12 -#define NUM_OF_PRINT_TARGET 2 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u8 sXPos; -static u8 sYPos; - -static u32 sBackColorCharData[24*8]; - -static u16 sFontScreenDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -static u16 sFontScreenDataSub[24*32] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -static u16 sBackColorScreenData[32 * 24] = { - 0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de, - 0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df, - 0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0, - 0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1, - 0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2, - 0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3, - 0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4, - 0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5, - 0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6, - 0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7, - 0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8, - 0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9, - 0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea, - 0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb, - 0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec, - 0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed, - 0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee, - 0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef, - 0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0, - 0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1, - 0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2, - 0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3, - 0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4, - 0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5, -}; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -static void kamiFontReturnConsole( void ); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontInit(void) -{ - // wipLN^f[^ - MI_CpuCopy32( &sampleCharData[8 * 0xde], sBackColorCharData, sizeof(sBackColorCharData) ); - - // wipXN[f[^Zbg - DC_FlushRange ( sBackColorScreenData, sizeof(sBackColorScreenData) ); - GXS_LoadBG1Scr ( sBackColorScreenData, 0, sizeof(sBackColorScreenData) ); -} - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontLoadScreenData(void) -{ - DC_FlushRange ( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); - GX_LoadBG0Scr ( sFontScreenDataMain, 0, sizeof(sFontScreenDataMain) ); - - DC_FlushRange ( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); - GXS_LoadBG0Scr ( sFontScreenDataSub, 0, sizeof(sFontScreenDataSub) ); - - // wiLN^f[^ - DC_FlushRange( sBackColorCharData, sizeof(sBackColorCharData) ); - GXS_LoadBG0Char( sBackColorCharData, 0xde*32, sizeof(sBackColorCharData) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClear - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClear(void) -{ - MI_CpuClear8( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClearMain - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClearMain(void) -{ - MI_CpuClear8( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataSub[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataMain[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontFillChar - - Description: zXN[ - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - value - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontFillChar(int lineNo, u8 color1, u8 color2) -{ - s32 i; - u32 line; - int charNo = 0xde + lineNo; - - if (color1 < 0x10) - { - line = (u32)(0x11111111 * color1); - - for (i = 0;i<4; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } - - if (color2 < 0x10) - { - line = (u32)(0x11111111 * color2); - - for (i = 4;i<8; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsole - - Description: zR\[ɕzuB256܂ŁB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsole(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - // I[lj - *(u16 *)(&temp[256]) = 0x0000; - - for(i=0; temp[i] != 0x00; i++) - { - if (temp[i] == 0x0A) - { - // sR[h - kamiFontReturnConsole(); - } - else - { - // ꕶ - sFontScreenDataMain[((sYPos * 32) + sXPos) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - - // XWE[ɓBꍇ͉s - if (++sXPos >= 32) - { - kamiFontReturnConsole(); - } - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsoleEx - - Description: zR\[ɕzuB256܂ŁB - OS_Printf‚łɎsB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsoleEx(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - kamiFontPrintfConsole(color, temp); - OS_TPrintf(temp); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontReturnConsole - - Description: zR\[ɂss - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -kamiFontReturnConsole( void ) -{ - sXPos = 0; - if (sYPos < 23) - { - // ̍s - sYPos++; - } - else - { - // ɍŏIsɓBĂꍇVtgs - MI_CpuCopy32( &sFontScreenDataMain[32], sFontScreenDataMain, sizeof(u16)*32*23 ); - MI_CpuClear32( &sFontScreenDataMain[32*23], sizeof(u16)*32); - } -} - diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_pxi.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_pxi.c deleted file mode 100644 index f3ce7f2a..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_pxi.c +++ /dev/null @@ -1,370 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_pxi.h" -#include "fifo.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -// l߂ăRs[ -#define KAMI_PACK_U16(d, s) \ - ((d)[0] = (u8)((*((u16*)s) >> 0) & 0xFF), \ - (d)[1] = (u8)((*((u16*)s) >> 8) & 0xFF)) - -#define KAMI_PACK_U32(d, s) \ - ((d)[0] = (u8)((*((u32*)s) >> 0) & 0xFF), \ - (d)[1] = (u8)((*((u32*)s) >> 8) & 0xFF), \ - (d)[2] = (u8)((*((u32*)s) >> 16) & 0xFF), \ - (d)[3] = (u8)((*((u32*)s) >> 24) & 0xFF)) - - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef struct KamiWork -{ - BOOL lock; - - KamiCommand command; - KAMIPxiResult result; - KAMICallback callback; - void* arg; - - u32 total; - u32 current; - u8* data; -} -KamiWork; - -/*---------------------------------------------------------------------------* - ÓIϐ` - *---------------------------------------------------------------------------*/ -static BOOL kamiInitialized; -static KamiWork kamiWork; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data); -static void KamiSendPxiData(u8 *pData); -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); -static void KamiDone(KAMIResult result); -static void KamiWaitBusy(void); - - -void KamiPxiInit( void ) -{ - kamiWork.lock = FALSE; - - PXI_Init(); - while ( !PXI_IsCallbackReady(PXI_FIFO_TAG_KAMITEST, PXI_PROC_ARM7 )) - { - } - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - if ( 0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, KAMITEST_PXI_START_BIT | (KAMI_TEST_COMMAND << KAMITEST_PXI_COMMAND_SHIFT), 0)) - { - return; - } -} - -/*---------------------------------------------------------------------------* - Name: tH[}bgs֐ - - Description: - - Arguments: FormatMode - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = callback; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode) == FALSE) - { - return KAMI_RESULT_SEND_ERROR; - } - return KAMI_RESULT_SUCCESS; -} - -/*---------------------------------------------------------------------------* - Name: NANDANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - // f[^쐬 - KAMI_PACK_U32(&data[0], &block); - KAMI_PACK_U32(&data[4], &buffer); - KAMI_PACK_U32(&data[8], &count); - - if (KamiSendPxiCommand(KAMI_NAND_IO, 12, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiClearNandErrorLog - - Description: NVRAMNANDG[NA܂B - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiClearNandErrorLog( void ) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_CLEAR_NAND_ERRORLOG, 0, (u8)0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetIsToolType - - Description: IS-TWL-DEBUGGER or CAPTURE 擾܂iŁj - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetIsToolType( IsToolType *pType ) -{ - OSIntrMode enabled; - - if (pType == NULL) - { - return KAMI_RESULT_INVALID_PARAMETER; - } - - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = (u8*)pType; - (void)OS_RestoreInterrupts(enabled); - - if (KamiSendPxiCommand(KAMI_GET_IS_TOOL_TYPE, 0, 0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - PXI֘A - *---------------------------------------------------------------------------*/ - -static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - ((size << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((data << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - if (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - return FALSE; - } - return TRUE; -} - -static void KamiSendPxiData(u8 *pData) -{ - u32 pxiData = (u32)((pData[0] << 16) | (pData[1] << 8) | pData[2]); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } -} - -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused( tag ) - if (err) - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - if (data & KAMITEST_PXI_START_BIT) // 擪f[^ - { - if (data & KAMITEST_PXI_RESULT_BIT) - { - kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); - kamiWork.current = 0; - kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); - kamiWork.result = (KAMIPxiResult)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); - } - else // m̃f[^ - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - } - else // 㑱f[^ - { - if (kamiWork.data == NULL) - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); - } - } - if (kamiWork.current == kamiWork.total-1) - { - KAMIResult result; - switch (kamiWork.result) - { - case KAMI_PXI_RESULT_SUCCESS: // alias KAMI_PXI_RESULT_SUCCESS_TRUE - result = KAMI_RESULT_SUCCESS; // alias KAMI_RESULT_SUCCESS_TRUE - break; - case KAMI_PXI_RESULT_SUCCESS_FALSE: - result = KAMI_RESULT_SUCCESS_FALSE; - break; - case KAMI_PXI_RESULT_INVALID_COMMAND: - result = KAMI_RESULT_INVALID_COMMAND; - break; - case KAMI_PXI_RESULT_INVALID_PARAMETER: - result = KAMI_RESULT_INVALID_PARAMETER; - break; - case KAMI_PXI_RESULT_ILLEGAL_STATUS: - result = KAMI_RESULT_ILLEGAL_STATUS; - break; - case KAMI_PXI_RESULT_BUSY: - result = KAMI_RESULT_BUSY; - break; - default: - result = KAMI_RESULT_FATAL_ERROR; - } - KamiDone(result); - return; - } -} - -extern void PXIi_HandlerRecvFifoNotEmpty(void); -static void KamiWaitBusy(void) -{ - volatile BOOL *p = &kamiWork.lock; - - while (*p) - { - if (OS_GetCpsrIrq() == OS_INTRMODE_IRQ_DISABLE) - { - PXIi_HandlerRecvFifoNotEmpty(); - } - } -} - -static void KamiDone(KAMIResult result) -{ - KAMICallback callback = kamiWork.callback; - void* arg = kamiWork.arg; - kamiWork.callback = NULL; - kamiWork.arg = NULL; - if (kamiWork.lock) - { - kamiWork.lock = FALSE; - } - if (callback) - { - callback(result, arg); - } -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c deleted file mode 100644 index cac9c5ee..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c +++ /dev/null @@ -1,332 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_write_nandfirm.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include "kami_font.h" -#include "kami_pxi.h" - -#include -#include "kami_write_nandfirm.h" - -/*---------------------------------------------------------------------------* - }N` - *---------------------------------------------------------------------------*/ - -// NANDt@[݂̍ۂNVRAM̖蓖ė̈{\̈ONAꍇ͒`܂iJpj -//#define CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define NAND_BLOCK_BYTE 0x200 -#define NAND_FIRM_START_OFFSET 0x200 -#define NAND_FIRM_START_OFFSET_IN_FILE 0x200 - -#define NVRAM_PAGE_SIZE 0x100 -#define NVRAM_NORFIRM_RESERVED_ADDRESS 0x200 -#define NVRAM_NORFIRM_NANDBOOT_FLAG_OFFSET 0xff -#define NVRAM_NORFIRM_NANDBOOT_FLAG 0x80 - -#define NVRAM_NON_ASIGNED_AREA_ADDRESS 0x300 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u8 sNvramPageSizeBuffer[NVRAM_PAGE_SIZE] ATTRIBUTE_ALIGN(32); // ARM7ANZX邽߃X^bNł͑ʖ -static u32 sReservedAreaEndAddress; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void kamiEraseNandfirmVersion( u32 nandfirmsize ); - -/*---------------------------------------------------------------------------* - Name: kamiWriteNandfirm - - Description: - - Arguments: no - - Returns: None. - *---------------------------------------------------------------------------*/ -BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFunc) -{ - FSFile file; - - BOOL open_is_ok; - BOOL read_is_ok; - u8* pTempBuf; - u32 file_size; - u32 nandfirm_size; - u32 alloc_size; - u32 write_block; - BOOL result = TRUE; - u16 crc_w1, crc_w2; - u16 crc_r1, crc_r2; - u16 crc_norfirm_reserved_area_w, crc_norfirm_reserved_area_r; -#ifdef CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL - u32 write_offset; -#endif // CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL - - // .nandt@CI[v - FS_InitFile(&file); - open_is_ok = FS_OpenFile(&file, pFullPath); - if (!open_is_ok) - { - OS_Warning("Failure! FS_OpenFile"); - return FALSE; - } - - // TCY`FbN - file_size = FS_GetFileLength(&file) ; - if (file_size > (800*1024)) - { - kamiFontPrintfConsoleEx(1, "too big file size!\n"); - FS_CloseFile(&file); - return FALSE; - } - - nandfirm_size = file_size - NAND_FIRM_START_OFFSET_IN_FILE; - - // obt@m - // ݂ubNP(512byte)ł邱Ƃl512ACgm - alloc_size = MATH_ROUNDUP(file_size, 512); - pTempBuf = allocFunc( alloc_size ); - if (pTempBuf == NULL) - { - kamiFontPrintfConsoleEx(1, "Fail Alloc()!\n"); - FS_CloseFile(&file); - return FALSE; - } - - MI_CpuClear8( pTempBuf, alloc_size ); - - // .nandt@C[h - DC_FlushRange(pTempBuf, alloc_size); - read_is_ok = FS_ReadFile( &file, pTempBuf, (s32)file_size ); - DC_FlushRange(pTempBuf, file_size); - if (!read_is_ok) - { - kamiFontPrintfConsoleEx(1, "Fail FS_ReadFile!\n"); - FS_CloseFile(&file); - freeFunc(pTempBuf); - return FALSE; - } - - // t@CN[Y - FS_CloseFile(&file); - - // ݑOCRCvZ - crc_w1 = SVC_GetCRC16( 0xffff, pTempBuf, sizeof(NORHeaderDS) ); - crc_w2 = SVC_GetCRC16( 0xffff, pTempBuf+NAND_FIRM_START_OFFSET_IN_FILE, nandfirm_size ); - - // ܂NORHeaderDS̈ށi40byte?j - if (NVRAMi_Write(0, sizeof(NORHeaderDS), (void*)pTempBuf) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n"); - result = FALSE; - } - - // CRCvẐŔÔ߂ɃNAĂ烊[h - MI_CpuClear8( pTempBuf, sizeof(NORHeaderDS) ); - DC_FlushRange(pTempBuf, sizeof(NORHeaderDS)); - - // CRC`FbN̂Nvram烊[h - if (NVRAMi_Read(0, sizeof(NORHeaderDS), pTempBuf) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()!\n"); - } - DC_FlushRange(pTempBuf, sizeof(NORHeaderDS)); - - // ݌CRCvZ - crc_r1 = SVC_GetCRC16( 0xffff, pTempBuf, sizeof(NORHeaderDS) ); - - // NVRAM擪CRCr - if ( crc_w1 != crc_r1 ) - { - freeFunc(pTempBuf); - kamiFontPrintfConsoleEx(1, "Fail! CRC check %x!=%x\n", crc_w1, crc_r1); - return FALSE; - } - - // nandfirm NtO𗧂Ă - MI_CpuClear8( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - sNvramPageSizeBuffer[NVRAM_NORFIRM_NANDBOOT_FLAG_OFFSET] = NVRAM_NORFIRM_NANDBOOT_FLAG; - DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE); - - // NORt@[U[ü̏݃f[^CRCvZ - crc_norfirm_reserved_area_w = SVC_GetCRC16( 0xffff, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - if (NVRAMi_Write(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n"); - result = FALSE; - } - - // CRCvẐŔÔ߂ɃNAĂ烊[h - MI_CpuClear8( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - // ǂݍ݂ARM7ڃɏo - DC_FlushRange(sNvramPageSizeBuffer, NVRAM_PAGE_SIZE); - - if (NVRAMi_Read(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n"); - result = FALSE; - } - - // ݌CRCvZ - DC_FlushRange(sNvramPageSizeBuffer, NVRAM_PAGE_SIZE); - crc_norfirm_reserved_area_r = SVC_GetCRC16( 0xffff, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - // NORt@[U[üCRCr - if ( crc_norfirm_reserved_area_w != crc_norfirm_reserved_area_r ) - { - kamiFontPrintfConsoleEx(1, "Fail! Norfirm Reserved Area CRC check %x!=%x\n", crc_norfirm_reserved_area_w, crc_norfirm_reserved_area_r); - result = FALSE; - } - -#ifdef CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL - DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - // 蓖ė̈{\̈ONA܂iJpj - if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n"); - result = FALSE; - } - sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFiݒ + NTR WiFiݒ - //OS_Printf("end = %x\n", sReservedAreaEndAddress); - - MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE ); - DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - for (write_offset=NVRAM_NON_ASIGNED_AREA_ADDRESS; write_offset < sReservedAreaEndAddress; write_offset += NVRAM_PAGE_SIZE) - { - if (NVRAMi_Write(write_offset, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n"); - result = FALSE; - } - } - //OS_Printf("write_offset = %x\n", write_offset); -#else - // 蓖ė̈擪256byte{\̈ONA܂ - - MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE ); - DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - if (NVRAMi_Write(NVRAM_NON_ASIGNED_AREA_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n"); - result = FALSE; - } - - DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n"); - result = FALSE; - } - sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFiݒ + NTR WiFiݒ - - MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE ); - DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE ); - - if (NVRAMi_Write(sReservedAreaEndAddress - 0x100, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n"); - result = FALSE; - } -#endif - - // NANDÕNA - if (kamiClearNandErrorLog() != KAMI_RESULT_SUCCESS) - { - kamiFontPrintfConsoleEx(1, "Fail kamiClearNandErrorLog()\n"); - result = FALSE; - } - - // nandfirmo[W̏ifobOpj - kamiEraseNandfirmVersion(nandfirm_size); - -// kamiFontPrintfConsoleEx(0, "NAND Firm Import Start!\n"); - - // NAND - write_block = nandfirm_size/NAND_BLOCK_BYTE + (nandfirm_size % NAND_BLOCK_BYTE != 0); - kamiNandWrite( NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf+NAND_FIRM_START_OFFSET, write_block ); // ubNPʁAoCgPʁAubNP - kamiFontLoadScreenData(); - - // CRCvẐŔÔ߂ɃNAĂ烊[h - MI_CpuClear8( pTempBuf, nandfirm_size ); - DC_FlushRange(pTempBuf, nandfirm_size); - - // CRC`FbN̂Nand烊[h - if (kamiNandRead(NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf, write_block ) == KAMI_RESULT_SEND_ERROR) - { - kamiFontPrintfConsoleEx(1, "kamiNandRead ... %s!\n", "ERROR"); - } - DC_FlushRange(pTempBuf, nandfirm_size); - - // ݌CRCvZ - crc_r2 = SVC_GetCRC16( 0xffff, pTempBuf, nandfirm_size ); - - // NANDɂ‚ĂCRC`FbN - if (crc_w2 == crc_r2) - { -// kamiFontPrintfConsoleEx(0, "Success! CRC check %x==%x\n", crc_w2, crc_r2); - } - else - { - result = FALSE; - kamiFontPrintfConsoleEx(1, "Fail! CRC check %x!=%x\n", crc_w2, crc_r2); - } - - // - freeFunc(pTempBuf); - - return result; -} - -/*---------------------------------------------------------------------------* - Name: kamiEraseNandfirmVersion - - Description: nandfirm̃o[W܂BifobOpj - - Arguments: no - - Returns: None. - *---------------------------------------------------------------------------*/ -void kamiEraseNandfirmVersion( u32 nandfirmsize ) -{ - u8 buffer[NAND_BLOCK_BYTE]; - u32 blockNo; - - if ((nandfirmsize % NAND_BLOCK_BYTE)==0) - { - blockNo = NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE + nandfirmsize/NAND_BLOCK_BYTE; - MI_CpuClear8( buffer, NAND_BLOCK_BYTE ); - DC_FlushRange(buffer, NAND_BLOCK_BYTE); - kamiNandWrite( blockNo, buffer, 1 ); // ubNPʁAoCgPʁAubNP - } -} diff --git a/build/tests/CustomSystemUpdater/ARM9.TWL/src/keypad.c b/build/tests/CustomSystemUpdater/ARM9.TWL/src/keypad.c deleted file mode 100644 index 155c4bc2..00000000 --- a/build/tests/CustomSystemUpdater/ARM9.TWL/src/keypad.c +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "keypad.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_TRIGGER_START 20 -#define KEY_REPEAT_TRIGGER_TERM 5 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u16 Cont; -static u16 Trg; -static u16 Release; -static u16 RepeatTrg; -static u8 key = 60; - -static int repeat_counter; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -void -kamiPadRead(void) -{ - u16 ReadData; - - ReadData = PAD_Read(); - Trg = (u16)(ReadData & (ReadData ^ Cont)); - Release = (u16)(Cont & (ReadData ^ Cont)); - Cont = ReadData; - - RepeatTrg = Trg; - if (++repeat_counter > (KEY_REPEAT_TRIGGER_START + KEY_REPEAT_TRIGGER_TERM)) - { - repeat_counter = KEY_REPEAT_TRIGGER_START; - } - if (repeat_counter == KEY_REPEAT_TRIGGER_START) - { - RepeatTrg = ReadData; - } - if (!ReadData) - { - repeat_counter = 0; - } -} - -BOOL -kamiPadIsTrigger(u16 key) -{ - return (Trg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsRepeatTrigger(u16 key) -{ - return (RepeatTrg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsPress(u16 key) -{ - return (Cont & key)? TRUE : FALSE; -} - diff --git a/build/tests/CustomSystemUpdater/Makefile b/build/tests/CustomSystemUpdater/Makefile deleted file mode 100644 index 9ae3341f..00000000 --- a/build/tests/CustomSystemUpdater/Makefile +++ /dev/null @@ -1,123 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TARGET_CODEGEN = THUMB -override TWL_ARCHGEN = LIMITED - - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -#.PHONY: no_rom_set -#no_rom_set: -# echo "Usage: make ROMSET=dirname" -# -#ifeq ($(ROMSET),) -# no_rom_set -#endif -# - -# [Ww肳ĂȂS -ifeq ($(REGION),) - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -do-build: do-something -clean: do-something -clobber: do-something -install: do-something -do-build: MY_GOAL= -clean: MY_GOAL=clean -clobber: MY_GOAL=clobber -install: MY_GOAL=install - -do-something: - -$(REMAKE) TWLSDK_PLATFORM=TWL REGION=JPN ROMSET=$(ROMSET) DISABLE_ROMCHECK=$(DISABLE_ROMCHECK) SKIP_SUBDIR=FALSE $(MY_GOAL) - -rm `find . -name "*autogen*"` - -$(REMAKE) TWLSDK_PLATFORM=TWL REGION=AUS ROMSET=$(ROMSET) DISABLE_ROMCHECK=$(DISABLE_ROMCHECK) SKIP_SUBDIR=FALSE $(MY_GOAL) - -rm `find . -name "*autogen*"` - -$(REMAKE) TWLSDK_PLATFORM=TWL REGION=USA ROMSET=$(ROMSET) DISABLE_ROMCHECK=$(DISABLE_ROMCHECK) SKIP_SUBDIR=FALSE $(MY_GOAL) - -rm `find . -name "*autogen*"` - -$(REMAKE) TWLSDK_PLATFORM=TWL REGION=EUR ROMSET=$(ROMSET) DISABLE_ROMCHECK=$(DISABLE_ROMCHECK) SKIP_SUBDIR=FALSE $(MY_GOAL) -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -else - -LAUNCHER_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/Launcher -MACHINESETTINGS_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/MachineSettings -WLANFIRM_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/wlanfirm -DS_HASH_TABLE = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/DSHashTable -SHARED_FONT_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/sharedFont -NANDFIRM_DIR = $(TWL_IPL_RED_ROOT)/build/nandfirm/menu-launcher - - - -# f[^gpꍇTRUEw -SKIP_CREATE_DATA = TRUE - -ifeq ($(SKIP_CREATE_DATA),FALSE) -SUBDIRS = $(LAUNCHER_DIR) \ - $(MACHINESETTINGS_DIR) \ - $(WLANFIRM_DIR) \ - $(DS_HASH_TABLE) \ - $(SHARED_FONT_DIR) \ - $(NANDFIRM_DIR) \ - data \ - banner \ - ARM7.TWL \ - ARM9.TWL -else -SUBDIRS = banner \ - ARM7.TWL \ - ARM9.TWL -endif - -# CustomSystemUpdater -export SYSM_REGION = $(REGION) -export ROMSET := $(ROMSET) -export DISABLE_ROMCHECK := $(DISABLE_ROMCHECK) - -# COMPILE SWITCH for build SystemMenu - -export SYSM_UPDATER_RELEASE = TRUE - -export SYSM_DO_NOT_SHOW_LAUNCHER = TRUE -export SYSM_DISABLE_WDS_SCAN = FALSE -export SYSM_IGNORE_WLFIRM_SIGNCHECK = FALSE -export SYSM_DISABLE_WLFIRM_LOAD = FALSE -export SYSM_DISABLE_INITIAL_SETTINGS = TRUE -export SYSM_OUTSIDE_UI = TRUE - -export SYSM_BUILD_FOR_PRODUCTION_TEST = FALSE - -# MAKEROM SWITCH for build SystemMenu -export SYSM_DISABLE_DEBUG = FALSE -export SYSM_USE_WLANFIRM_LOCAL_PUBKEY = FALSE - - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -endif - -#===== End of Makefile ===== diff --git a/build/tests/CustomSystemUpdater/banner/Makefile b/build/tests/CustomSystemUpdater/banner/Makefile deleted file mode 100644 index e373c033..00000000 --- a/build/tests/CustomSystemUpdater/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/CustomSystemUpdater/banner/banner_AUS.bnr b/build/tests/CustomSystemUpdater/banner/banner_AUS.bnr deleted file mode 100644 index 4828a00dfa47779df1c47df15a129ef9553e22ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9152 zcmeI2Pm3Kz6vaD9=aJJfI9_HdxAt$-e8lZip5I#R<;~aTg3B(RZ4;fMEE*O4NGSoaRmJI6TaRpqfBGAX*WB^ zj=Fr>5^uR`TPE26%eC4l)9+roc3%1ojGnbrXU$bOWL3L*FP~Ro}mI`_AD9cJ$+|U+%fC|26;D z^S?g-*608K@$cVN{@cB-ecgd|2i6@}cVOLtbq6lC1MAF=vFOCFIMG5+=6^oO$k zS^Lo!G(0;SaNGuLHpTttWBJK^18%}myB{~jBOT=5={vb+M;GhHxch-LxK}5?u7KPd zy}@|K8&qDV6R**&KVQr2E3%HxI#%T_;VkBh#T$%xgRx1mYr1se4bnCHgV=5ZCR_IC zidUEGaXQ?)O=~!Wd(b`Y@&)(2L0NdrCC^TvJkuY{yl^uWIO7kBPak~3-41^cFr~1k zjczXJ4@#fnM^ek1O=zD6^wjmFuQ+|%N)-JZv zL8*fNo)bQL_Sgwvw!ORD;7Pj2Swu5K#Fl$f4aF}&m5dTc<8$Ko+UmfS zK4W~A^K@&N&N0v#9soZK8GcQhUUd+pgniT&f?j|CgG=#T)R`6XTZl2n2cO{%J=`Hf z9GU+l=U7uc{P5HS<_P2DQ$;uvK?aMHi%laRGbJKR4L!P29(`8cD z=U@7NyLA4ykKt)S1grk+!N24AU$juJu_(s{pZ_FruSD*b^e;T8>YD!J-`;0G|Nrd& X11{z&T%Az|)xouc>jyXfsTKbLC^*cG diff --git a/build/tests/CustomSystemUpdater/banner/banner_EUR.bnr b/build/tests/CustomSystemUpdater/banner/banner_EUR.bnr deleted file mode 100644 index c4d8d0fceb52204c100799a992e5530395460a5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9152 zcmeI2KZ_+r6vcaY4aTq|M^IH03lkMpX#ZdILnb#C>*>A7+3wWD|LJ->7R zmtwIzr1WOiTTBSizH8gI4;BQ)3C|008icqQH^n2P<2b&iZ${)=uwb?G7+eW$&!Ds( ztx1IiSsSTZ`Uh{Ceub8{0G~y5@@1(SON0jm_*#oKOJ^Nn0Q~e5zTPckoW^X^Y<7+v z_4sMVc*9lGFv$j3s?|oxzkBK0dFj_Xnxx$98?5M79SLE)ADZd;bM+m<;L~*ulld~zn=f~`L{m* z|BrwFuJYgRb?xg8tUIvoz`6tL4y-$Hu^o^{ko<_%A6oK=v7zAY&OOH_hb3Vd;@O6QM(_P8@$1A#v4># z#=Y0*)}OCs_7zx1Yb~pCmv9#I#o`SHyunb%(AI4X*&C#5@&~cqdc3{l(T!eRs)y-t z?>3F$5Kf?b+T{yQyg^xb%q6Q(p!}gfn0Vo4DsaXh6rVo$gu5O7AYe*iqK#eLACx|$ zA4x55Hlls((Nou1UuV>pcA5Q_y5MwN&BP>!4B|09+XE&*ljz8t;$`e9(1cAq$1`(5&eH#2|OHcTeKtsF=maaz@W?=M6D;rY*I_j*5|8tgd|C%eyi)7d|D z{uK^D?+&EBK4DpZy18G^9GpLR=sI~%puEd@fZR;hGB=$_J34>a!M$YpH{1%+|7Fg9<|GIF-N0P`qwPsyzL0K{ydX28)xVP}ae=jC^J{70vvNs%hrF1C=B1IkPw~6OHQ`_U?((@HOz} zQG!_rIY3lk@aHLHm>KrRe_^(t~CF zPrkWnyUig_(bwrxjac>PTvveNxjwCRCOOrPzj6LKmv*lHwyn&bRhM=CrT@1}=YRVY zo(2T4>dzkhJD&fe7Rogi<+$MUpCs;-$la3uBhRV2r2k7j|Nrd&11{z&T%Az|#lf|M L>jyXfsTKbYk~PjB diff --git a/build/tests/CustomSystemUpdater/banner/banner_JPN.bnr b/build/tests/CustomSystemUpdater/banner/banner_JPN.bnr deleted file mode 100644 index 4480b5e04f1251b7a2a9d0460dd9840cb3db34f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9152 zcmeI2!HOM46oxB_i*b2(BO|nXap5xvS-22ETm=cD5fYIOi7s3XZluA*#f{Lb(iaf2 z5F0-dj_n)fj+db)tIu7V)*X8f(u2WV2={l!+;IFxM<+mq~kAD96 zryFjud_?JEjC~9VKE!X@w(WiNg6x>*1v?EwShPpk1EWJ3U(Z6st^4GY?9P4r^6S?RKZwWQzxLyGfAi#pA6$I(=8Lb~`St4W$MN_L z_nEuzK6SPG#J%G_xBFY%zw7S058eA%Zn=BzhI`Y!?cQ?lE#}x|Zd~7gjsKee>;7NA zf9v=E|M>UsGXL#feP35#U4eB4))iP+U|oUpt$;Lwq(`j!(2_k7!dtPT2S zv_a)%*lUd@{h2Sbi^q>Pws>VK;ml^vq78bqL0<>o)@|^kHb~c`4u%B;7d3r^eBj7{N?KwRvzHDCf_5)31!co};d;+ViQ zuO%9-R^Z?{g&teV5fSHX5D(dCz@a(>e>=48ZF(9;KIOmyjD%2Htj~(SVr{`zIw)0$ zzvYCDp1nIQv**NVu^*B)yq)R8am!=^+{%HZ5ht(qYkv{(&)oUA_k zO?&^;{+HPUogFCl`uXMf)6MjH=3xK9L)XbUf%0z51H#Q@EpyX}w8O;kX;G8DH%hml z9?HG3aGTE}0_z^qH=y+;{^R+8ah@H2%~v9jcVnYx1>DLQ{wA{qbDva*0O+-fSxF^vm{H z&eN@CIzvxqcmVt`B-lM|T|VhZ^OpH>uc~5)JDi2U#qeC1RsQiV*kIT5e81_r>fo*t z#F6;-IfqZ1{<~kIz#Nq(nHJ262r^iVB-!zd5yB2Uibt}J@6M>2W}Z7x8OAkd7UN}f z@h7j{1Eb-Rc@q^^*&pr>Nwq^ZMMcX9{3x+WJcUm+^O#Q>uVQ>_{Ks|w3-Nz&R{T$h z{mJe^;{OGq2g~t4`RXVR+e5yhFVUqcSmV#Wt^mbyeOhZzva1b$WB;=+I*K+^> diff --git a/build/tests/CustomSystemUpdater/banner/banner_USA.bnr b/build/tests/CustomSystemUpdater/banner/banner_USA.bnr deleted file mode 100644 index 110376b662ee7042f102cf5239969cc7a4e6e868..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9152 zcmeI2!HVTX6oxZ1F4|>wEh9v5DK6#_L>M1na3wN`&cFx~8Fk^RaU%g27dJvyrMp=P z1BwH)xDVjQH<)M0Cf=gKRvAv+kIMZX1&FP5be9RZTnzBP@M3*5vN0li*Zvta(B%4*NhzzITtKg?K}ooLfdmw z%11e=k&v~KL(BN!UDL17(ih;fs6n2V4!K2mK!C5cSd%(=gaPm~PWXDaj699mrrGQq zJC6C&fSUReYHvaCVbLVAT?`WEyS#nNV+Xl`CZm<&u0-rd=;oVhSPhlk; zHfU3KRatkPaqQ~Os@lrVb5gu0zJK-B?c)#af)2)PVuFm-{bt<;?v@z;sYZ0iigE}T;D0)D&AkLv8&v<{{B_}wf@)r zzdrxg=l}ol@84Da+r8$#uE4qi>k6zZu&%(m0*9@DJc8s$tp3oFM3N?!O<)Pv#qN6ON<%abr9%K>nS+qkDD?v37{NA4rFLb@J;nsJ+1( z4ClN-)n(j!jc)yUF0-#d9<8-xp>2E4&g$I#Yo45K&5(BuzdyY+Z`$)n3& zT{;fa;ofZ;!y%kN*YwL5oOpw>@R&|$%v_B|)vLDG&-fTqs*rTV;M}0M`H?1=3Ep@@!xVni+4jIHbK3fAOK$GYgImOGp zXCaOW0`q#I(d!Kku9Nh{QjLgss0Q&+jSdp3V+;>s+dg2VW8_l}EWk;S(zU)we`)Pv zs~l7+=Dup-H@uno!?s~E0dCbm@`zJb`?as=nBoxqhvz?w-Ru2; zj$qG`I9Yx6oA&;h{jYEUdUqi0^$E-RGtB*Z=3xK9!_dil0@dAE2guE2Eps!7vLnRp z)21#xZ&YqkBUF21<8*iz5n1<`o&jyh`ltQRXy?3Gf6bQ_7SEBbNs=p4NLH~R#%d-FBR}+|{qI=c|CnCsTagsEE%(z3?f~R&<(UG6K zYPz}B`{$C+ISl0jao13=V9P<=?MY?CK`m?VqK=WFk9HUD4sr|Loyir-i;@(!gkQW#qKe zkxWZ&1w*GZ+)Lt?Xir@FJ?Cadr6FtBFM1^?dD4q!8r@ZysawL!*p)iK_Z5cEo|Dzy z^+D!=|M>Ar*Jw5cl?pVO&e~%~nn&RheMaHN%q8aCDYJ~hrI9*@kvb-kxZs|fhgzm( vE^lyjm|np&SIpMo5%W!jngQ#~U(}!qJ%Zd)$#mj}%xxLDoca!&bqw7vygzmU diff --git a/build/tests/CustomSystemUpdater/banner/icon/gameIcon.bmp b/build/tests/CustomSystemUpdater/banner/icon/gameIcon.bmp deleted file mode 100644 index 7bba61036fe91c0e06697a5beecef5ddd405a6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmb`EK?=e!5Jkr#-ME^r1vOA`<0afHQkXk<5KrQXJc(C`e}0 - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define PXI_FIFO_TAG_KAMITEST PXI_FIFO_TAG_USER_1 - -#define KAMI_PXI_CONTINUOUS_PACKET_MAX 10 -#define KAMITEST_PXI_DATA_SIZE_MAX ((KAMI_PXI_CONTINUOUS_PACKET_MAX-1)*3+1) // őf[^ - -#define KAMITEST_PXI_START_BIT 0x02000000 // 擪pPbgӖ -#define KAMITEST_PXI_RESULT_BIT 0x00008000 // PXỈ - -#define KAMITEST_PXI_COMMAND_SHIFT 8 // R}hi[̈ʒu -#define KAMITEST_PXI_COMMAND_MASK 0x00007f00 // R}hi[̃}XN -#define KAMITEST_PXI_DATA_NUMS_MASK 0x00ff0000 // f[^̈ -#define KAMITEST_PXI_DATA_NUMS_SHIFT 16 // f[^ʒu -#define KAMITEST_PXI_1ST_DATA_MASK 0x000000ff // 擪pPbg̃f[^̈ -#define KAMITEST_PXI_1ST_DATA_SHIFT 0 // 擪pPbg̃f[^ʒu - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -typedef enum KAMIPxiResult -{ - KAMI_PXI_RESULT_SUCCESS = 0, // (void/void*^) // ꍇɂ㑱pPbg - KAMI_PXI_RESULT_SUCCESS_TRUE = 0, // (BOOL^) - KAMI_PXI_RESULT_SUCCESS_FALSE, // (BOOL^) - KAMI_PXI_RESULT_INVALID_COMMAND, // sPXIR}h - KAMI_PXI_RESULT_INVALID_PARAMETER, // sȃp[^ - KAMI_PXI_RESULT_ILLEGAL_STATUS, // KAMȈԂɂ菈ss - KAMI_PXI_RESULT_BUSY, // ̃NGXgs - KAMI_PXI_RESULT_FATAL_ERROR, // ̑炩̌ŏɎs - KAMI_PXI_RESULT_MAX -} -KAMIPxiResult; - - -typedef enum KamiCommand -{ - KAMI_TEST_COMMAND, - KAMI_EXE_FORMAT, - KAMI_NAND_IO, - KAMI_CLEAR_NAND_ERRORLOG, - KAMI_GET_IS_TOOL_TYPE -} -KamiCommand; - -typedef enum _IsToolType -{ - IS_TOOL_TYPE_ERROR, - IS_TOOL_TYPE_DEBUGGER, - IS_TOOL_TYPE_CAPTURE -} -IsToolType; - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_KAMI_TEST_FIFO_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/CustomSystemUpdater/custom_base.yaml b/build/tests/CustomSystemUpdater/custom_base.yaml deleted file mode 100644 index 7624d9d2..00000000 --- a/build/tests/CustomSystemUpdater/custom_base.yaml +++ /dev/null @@ -1,10 +0,0 @@ ---- -:DataPath: . -:NandFirm: nandfirm_rcplus.nand -:TargetPath: . -:TemplatePath: template -:RSF: ARM9.TWL/main.rsf -:TadFiles: -:SRC: ARM9.TWL/src/main.c -:FontFile: TWLFontTable.dat -:Region: EUR diff --git a/build/tests/CustomSystemUpdater/default.yaml b/build/tests/CustomSystemUpdater/default.yaml deleted file mode 100644 index de8a0c89..00000000 --- a/build/tests/CustomSystemUpdater/default.yaml +++ /dev/null @@ -1,14 +0,0 @@ ---- -:SRC: ARM9.TWL/src/main.c -:FontFile: TWLFontTable.dat -:DataPath: data -:NandFirm: menu_launcher.nand -:TargetPath: . -:TemplatePath: template -:RSF: ARM9.TWL/main.rsf -:TadFiles: -- HNAA.tad -- HNBA.tad -- HNCA.tad -- HNLA.tad -- HNHA.tad diff --git a/build/tests/CustomSystemUpdater/makecsu.sh b/build/tests/CustomSystemUpdater/makecsu.sh deleted file mode 100755 index c8a17d1f..00000000 --- a/build/tests/CustomSystemUpdater/makecsu.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/sh -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: autoupload.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -gen_updater(){ -#ruby sumaker.rb custom $1 $2 -make ROMSET=$1 REGION=$2 -rm `find . -name "*autogen*"` -} - - -if [ $# -lt 1 ]; -then - echo "Usage: makecsu vername" - exit -fi - - -gen_updater $1 JPN -gen_updater $1 USA -gen_updater $1 AUS -gen_updater $1 EUR diff --git a/build/tests/CustomSystemUpdater/romchecker.rb b/build/tests/CustomSystemUpdater/romchecker.rb deleted file mode 100755 index 18da809c..00000000 --- a/build/tests/CustomSystemUpdater/romchecker.rb +++ /dev/null @@ -1,207 +0,0 @@ -#!/bin/ruby -#---------------------------------------------------------------------------- -# Project: TwlSDK -# File: romchecker.rb -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -ALL_REGION = [ - "C", "D", "E", "H", -] - -FIX_REGION = [ - "A", "B", "F", "G", "I", "J", "K", "L", -] - -HEADER = "HN" - -ROM_DATA = { - "#{HEADER}A" => ["Launcher", "00030017"], - "#{HEADER}B" => ["{̐ݒ", "00030015"], - "#{HEADER}C" => ["t@[", "0003000f"], - "#{HEADER}D" => ["DS_E[hvC", "00030005"], - "#{HEADER}E" => ["sNg`bg", "00030005"], - "#{HEADER}F" => ["Vbv", "00030015"], - "#{HEADER}G" => ["tuEU", "00030004"], - "#{HEADER}H" => ["DSnbVXg", "0003000f"], - "#{HEADER}I" => ["ʐ^", "00030005"], - "#{HEADER}J" => ["zbgX|bg", "00030005"], - "#{HEADER}K" => ["DSTEh", "00030005"], - "#{HEADER}L" => ["o[Wf[^", "0003000f"], -} - -REGION_DIRS = { - "AUS" => ["aus", "U"], - "EUR" => ["euro", "P"], - "JPN" => ["jp", "J"], - "USA" => ["usa", "E"], - "VERUP" => ["verup", "UPJE"], -} - -REG_PATH = /[a-zA-Z0-9\.\-_]+\/[a-zA-Z0-9\.\-_*]+\z/ -NAND_FIRM = "*.nand" -FONT_DATA = "*.dat" - -# t@CAROMɊ܂܂ׂǂ𔻒肷 -# Ɉvt@C̔z̗vfŔ -# 0 @t@CȂ -# 1 @ۂ -# 2 ˆȏ@o[WႢA[WႢĂ -def check_pickuped(path, print_success) - ret = true - files = Dir.glob(path) - p_path = path.slice(REG_PATH) - #p files - case - when files.size == 0 - $stdout.printf( "NG:#{p_path} -- #{p_path} is not included ***********\n") - ret = false - when files.size == 1 && print_success - $stdout.printf( "OK:#{files[0].slice(REG_PATH)}\n") - when files.size >= 2 - $stdout.printf("NG:") - files.each{|file| - $stdout.printf( "#{file.slice(REG_PATH)} ") - } - $stdout.printf("-- Too many files are included ***********\n") - ret = false - end - ret -end - -def add_rom_list(rom_list, code, region, version, size) - rom_list << [code, region, version, size] -end - -def make_rom_list(target_dir, region) - region_dir = REGION_DIRS[region][0] - region_codes = (REGION_DIRS[region][1] + "A").unpack("A" * (REGION_DIRS[region][1].size + 1)) - #p region_codes - # o͗pXg - rom_list = [] - - (ALL_REGION + FIX_REGION).each{|app_code| - region_codes.each{|region_code| - search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}#{region_code}*.tad") - files = Dir.glob(search_path) - files.each{|tad| - add_rom_list(rom_list, "#{HEADER}#{app_code}", region_code, get_rom_version(tad), File.stat(tad).size) - } - } - } - write_rom_list(rom_list, "rom_list_#{region}.txt") -end - -def write_rom_list(rom_list, file_name) - region_name = { - "A" => "ALL", "E" => "USA", "U" => "AUS", "J" => "JPN", "P" => "EUR" - } - out = "" - sp = [8, 20, 10, 17, 10, 14] - line = "" - sp.each{|s| - line += "+#{"-" * s}" - } - line += "+\n" - out += line - out += sprintf("|%#{sp[0]}s|%-#{sp[1]}s|%#{sp[2]}s|%-#{sp[3]}s|%#{sp[4]}s|%#{sp[5]}s|\n", - "R[h", "O", "[W", "^CgID", "o[W", "t@CTCY") - out += line - rom_list.each{|rom| - rom_data = ROM_DATA[rom[0]] - size = (rom[3].to_s).reverse.scan(/.{1,3}/).join(",").reverse - out += sprintf("|%#{sp[0]}s|%-#{sp[1]}s|%-#{sp[2]}s|%8s %8x|%#{sp[4]}s|%#{sp[5]}s|\n", - rom[0] + rom[1], rom_data[0],region_name[rom[1]], rom_data[1], (rom[0] + rom[1]).unpack("N")[0], rom[2], size); - } - out += line - File.open(file_name, "w") {|file| - file.puts out - } -end - -def get_rom_version(path) - files = Dir.glob(path) - files[0].slice(/v[0-9]+/).delete("v") -end - -def check(target_dir, region) - ret = true - if REGION_DIRS[region] == nil - puts "Invalid region, [JPN, USA, EUR, AUS, VERUP]" - return false - end - region_dir = REGION_DIRS[region][0] - region_code = REGION_DIRS[region][1] - - # o͗pXg - rom_list = [] - - ALL_REGION.each{|app_code| - # I[[W̃܂܂Ă邩̃`FbN - search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}A*.tad") - #if ret &= check_pickuped(search_path, false) - #add_rom_list(rom_list, "#{HEADER}#{app_code}", "A", get_rom_version(search_path)) - #end - check_pickuped(search_path, false) - } - FIX_REGION.each{|app_code| - # e[WŗL̃܂܂Ă邩̃`FbN - search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}#{region_code}*.tad") - #if ret &= check_pickuped(search_path, false) - #add_rom_list(rom_list, "#{HEADER}#{app_code}", region_code, get_rom_version(search_path)) - #end - ret &= check_pickuped(search_path, false) - } - (ALL_REGION + FIX_REGION).each{|app_code| - # HNxy e[W1‚݂邩̃`FbN - # HNxA HNxU ȂǁAau݂Ă肷ƂłЂ - search_path = File.join(target_dir, region_dir, "#{HEADER}#{app_code}*.tad") - ret &= check_pickuped(search_path, false) - } - - # nand firm, font ̃`FbN - search_path = File.join(target_dir, region_dir, NAND_FIRM) - ret &= check_pickuped(search_path, false) - search_path = File.join(target_dir, region_dir, FONT_DATA) - ret &= check_pickuped(search_path, false) - $stdout.printf("\n") - - # CSUɊ܂܂Ă郍̈ꗗo -# write_rom_list(rom_list, "rom_list_#{region}.txt") - -# make_rom_list(target_dir, region) - - ret -end - -# 烁C - -if ARGV.size < 2 - p "Usage: #{__FILE__} targetdir region" - exit -1 -end - -# JgfBNg̕ύX -Dir.chdir(File.dirname(File.expand_path(__FILE__))) - - -target = ARGV[0] -region = ARGV[1] -make_rom_list(target, region) -if region == "VERUP" - exit 0 -else - exit check(target,region) ? 0 : -1 -end - diff --git a/build/tests/CustomSystemUpdater/sumaker.rb b/build/tests/CustomSystemUpdater/sumaker.rb deleted file mode 100755 index 8d630ebf..00000000 --- a/build/tests/CustomSystemUpdater/sumaker.rb +++ /dev/null @@ -1,212 +0,0 @@ -#!/bin/ruby -#---------------------------------------------------------------------------- -# Project: TwlSDK -# File: sumaker.rb -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -require "yaml" -require "fileutils" -require "tempfile" - -DEFAULT_CONFIG = "default.yaml" -CUSTOM_CONFIG = "custom.yaml" - -FILE_MATCH = /[a-zA-Z0-9\-_\.]+\z/ - -REGION = { - "JPN" => "OS_TWL_REGION_JAPAN", - "EUR" => "OS_TWL_REGION_EUROPE", - "AUS" => "OS_TWL_REGION_AUSTRALIA", - "USA" => "OS_TWL_REGION_AMERICA", -} - -REGION_PATH = { - "JPN" => "jp", - "EUR" => "euro", - "AUS" => "aus", - "USA" => "usa", -} - -# ftHgݒ̍쐬 -def make_default_config - config = { - :TadFiles => [ - "HNAA.tad", - "HNBA.tad", - "HNCA.tad", - "HNLA.tad", - "HNHA.tad", - ], - :FontFile => "TWLFontTable.dat", - :NandFirm => "menu_launcher.nand", - :TargetPath => ".", - :TemplatePath => "template", - :RSF => "ARM9.TWL/main.rsf", - :SRC => "ARM9.TWL/src/main.c", - :DataPath => ".", - :Region => "JPN", - } - write_config(DEFAULT_CONFIG, config) - -end - -# t@CɃXNvguĂfBNg‚ -def calc_path(filename) -# File.join(File.dirname(File.expand_path(__FILE__)), filename) -filename -end - -# RtBOt@CǂœWJ -def read_config(filename) - YAML.load(File.read(calc_path(filename))) -end - -# RtBÕCg -def write_config(filename, data) - File.open(calc_path(filename), "w") {|file| - file.write data.to_yaml - } -end - -# f[^̕u -def replace_data(src, mark, data) - while src.index(/%#{mark}%/) != nil do - src = src.sub(/%#{mark}%/, data) - end - src -end - - -# t@C -def write_data(filename, data) - temp = Tempfile.new("temp") - temp.puts data - temp.close - FileUtils.cp(temp.path, calc_path(filename)) -end - -# main.rsf̏ -def make_rsf(config) - tadlist = config[:TadFiles].dup - tadlist << config[:FontFile] << config[:NandFirm] - tadlist = tadlist.join(" ") - src = File.read(File.join(config[:TemplatePath], config[:RSF])) - #src = File.read(config[:TemplatePath] + "/" + config[:RSF]) - src = replace_data(src, "datapath", config[:DataPath]) - src = replace_data(src, "regionname", config[:Region]) - write_data(File.join(config[:TargetPath], config[:RSF]), replace_data(src, "filelist", tadlist)) - #write_data(config[:TargetPath] + "/" + config[:RSF], replace_data(src, "filelist", tadlist)) -end - -# main.c ̏ -def make_main(config) - filelist = config[:TadFiles] - data = [] - for t in filelist do - data.push("\t\"rom:/data/" + t + "\", \n") - end - data = data.join - #src = File.read(config[:TemplatePath] + "/" + config[:SRC]) - src = File.read(File.join(config[:TemplatePath], config[:SRC])) - mod = replace_data(src, "tadlist", data) - mod = replace_data(mod, "nandfirm", config[:NandFirm]) - mod = replace_data(mod, "fontfile", config[:FontFile]) - - # region - region_name = (config[:Region] != nil) ? config[:Region] : "JPN" - region = (REGION[region_name] != nil) ? REGION[region_name] : REGION["JPN"] - mod = replace_data(mod, "region", region) - mod = replace_data(mod, "regionname", region_name) - #write_data(config[:TargetPath] + "/" + config[:SRC], mod) - write_data(File.join(config[:TargetPath], config[:SRC]), mod) - -end - -# SystemUpdater쐬 -def make_updater(filename) - config = read_config(filename) - make_rsf(config) - make_main(config) -end - -# fBNgtad -def pickup_files(target_dir, name) - Dir.glob(target_dir + name) -end - - -# 烁C - -#sumaker mode [filename] - -if ARGV.size == 0 - p "Usage: sumaker mode [filename]" - exit -end - -mode = ARGV[0] - -case mode -when "default" then - # ftHgݒō쐬 - make_default_config - make_updater(DEFAULT_CONFIG) -when "custom" then - if ARGV.size < 3 - p "Usage: sumaker custom target_dir region" - exit -1 - end - # JX^ݒō쐬 - config = "custom_base.yaml" - region = ARGV[2] - - # JgfBNgύX - Dir.chdir(File.dirname(File.expand_path(__FILE__))) - - - # x[XRtBOɁAdatafBNgtadnandlj - config = read_config(config) - if config[:TadFiles] == nil - config[:TadFiles] = [] - end - - - #config[:DataPath] += "/#{ARGV[1]}/#{REGION_PATH[region]}" - config[:DataPath] = File.join(config[:DataPath], ARGV[1], REGION_PATH[region]) - config[:Region] = region - tads = pickup_files(config[:DataPath], "/*.tad") - nand = pickup_files(config[:DataPath], "/*.nand") - font = pickup_files(config[:DataPath], "/*.dat") -# tHgt@CύX - system("mv #{font} #{File.join(config[:DataPath], "TWLFontTable")}.dat") - font = pickup_files(config[:DataPath], "/*.dat") - - if nand.size > 0 - config[:NandFirm] = nand[0].slice(FILE_MATCH) - end - if font.size > 0 - config[:FontFile] = font[0].slice(FILE_MATCH) - end - for tad in tads do - tad = tad.slice(FILE_MATCH) - config[:TadFiles] << tad - end - config[:TadFiles] = config[:TadFiles].uniq - write_config(CUSTOM_CONFIG, config) - make_updater(CUSTOM_CONFIG) - - exit 0 -end - diff --git a/build/tests/CustomSystemUpdater/template/ARM9.TWL/main.rsf b/build/tests/CustomSystemUpdater/template/ARM9.TWL/main.rsf deleted file mode 100644 index 1e5df836..00000000 --- a/build/tests/CustomSystemUpdater/template/ARM9.TWL/main.rsf +++ /dev/null @@ -1,229 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: main.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - RomSize 64M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_%regionname%.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - # ========= SystemUpdater͓ʂȌg ========= - CommonClientKey TRUE - #CommonClientKeyForDebugger TRUE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - HwAESSlotB TRUE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - HwAESSlotC TRUE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # DisableDebug FŏIROMł́AsɃfobOłȂ悤TRUEɂKv܂B - # - DisableDebug $(DISABLE_DEBUG) - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../%datapath% - Root /data - File %filelist% - HostRoot $(PRIVKEY_PATH) - Root /key - File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY) -} diff --git a/build/tests/CustomSystemUpdater/template/ARM9.TWL/src/main.c b/build/tests/CustomSystemUpdater/template/ARM9.TWL/src/main.c deleted file mode 100644 index 0825e574..00000000 --- a/build/tests/CustomSystemUpdater/template/ARM9.TWL/src/main.c +++ /dev/null @@ -1,765 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: SystemUpdater - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include // atoi -#include -#include -#include -#include -#include -#include -#include "kami_pxi.h" -#include "kami_font.h" -#include "kami_write_nandfirm.h" -#include "kami_copy_file.h" -#include "import.h" -#include "hw_info.h" -#include "graphics.h" -#include "hwi.h" -#include "keypad.h" -#include "debugger_hw_reset_control.h" -#include "debugger_card_rom.h" -#include "build_time.h" - -#define SCRAMBLE_MASK 0x00406000 - -extern const char *g_strIPLSvnRevision; -extern const char *g_strSDKSvnRevision; - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -typedef struct _SystemUpdaterLog -{ - int magic_code; - int sdk_version; - int ipl_version; - int reserve[5]; -} SystemUpdaterLog; - -typedef struct _CopyFileList -{ - char* srcPath; - char* dstPath; -} CopyFileList; - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define SYSTEM_UPDATER_LOG_PATH "nand:/sys/log/updater.log" -#define NAND_FIRM_PATH_IN_ROM "rom:/data/%nandfirm%" - -#define SYSTEM_UPDATER_MAGIC_CODE 44001111 - -// gC -#define MAX_RETRY_COUNT 2 - -static const char* ImportTadFileList[] = -{ -%tadlist% -}; - -static const CopyFileList sCopyFileList[] = -{ - { "rom:/data/%fontfile%", "nand:sys/%fontfile%" } -}; - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static NAMTitleId titleId; -static s16 printLine; -static vu8 sIsFormatFinish; -static u8 sFormatResult; -static s32 sLockId; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void VBlankIntr(void); -static void InitAllocation(void); -static BOOL IgnoreRemoval(void); -static void DrawWaitButtonA(void); -static void DrawInvalidConsole(void); -static void DrawCancel(void); -static void DrawAlready(SystemUpdaterLog* log); -static void DrawResult(BOOL result); -static void FormatCallback(KAMIResult result, void* arg); - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void -TwlMain() -{ - BOOL result; - BOOL hw_info_result; - BOOL nand_firm_result; - int tadNum; - int i,j; - - // irh`[fobKł̋NΉ - if ( OS_GetRunningConsoleType() & OS_CONSOLE_TWLDEBUGGER ) - { - ROM_Header *dh = (void *)HW_ROM_HEADER_BUF; - dh->s.game_cmd_param &= ~SCRAMBLE_MASK; - } - - OS_Init(); - OS_InitThread(); - OS_InitTick(); - OS_InitAlarm(); - OS_InitArena(); - PXI_Init(); - OS_InitLock(); - OS_InitArenaEx(); - OS_InitIrqTable(); - OS_SetIrqStackChecker(); - MI_Init(); - OS_InitVAlarm(); - OSi_InitVramExclusive(); - OS_InitThread(); - OS_InitReset(); - GX_Init(); - FX_Init(); - SND_Init(); - TP_Init(); - RTC_Init(); - - KamiPxiInit(); /* ƎPXI */ - - // VuN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)OS_EnableIrqMask(OS_IE_FIFO_RECV); - (void)OS_EnableIrq(); - (void)GX_VBlankIntr(TRUE); - - // initialize file-system - FS_Init(FS_DMA_NOT_USE); - - InitAllocation(); - - // NAMCu - NAM_Init( OS_AllocFromMain, OS_FreeToMain ); - NAMUT_Init( OS_AllocFromMain, OS_FreeToMain ); // SoftBoxCounťvZɕKv - - // \֘A - InitGraphics(); - kamiFontInit(); - - // CXbh̃J[hbNID擾 - sLockId = OS_GetLockID(); - - /* always preload FS table for faster directory access. */ - { - u32 need_size = FS_GetTableSize(); - void *p_table = OS_Alloc(need_size); - SDK_ASSERT(p_table != NULL); - (void)FS_LoadTable(p_table, need_size); - } - - // R\[`FbN - { - u32 console = OS_GetRunningConsoleType(); - enum { IS_TWL_DEBUGGER=0, IS_TWL_CAPTURE, TWL, UNKNOWN }; - int running = UNKNOWN; - - // SystemUpdater̓fobOs‚ō쐬邽OS_CONSOLE_TWL擾 - // ԔɃJ[h}SystemUpdatersꍇliAOS_CONSOLE_TWLTYPE_RETAILɂ͂ȂȂj - // fobKǂ̔̓TCY`FbNɂs - // ÔOS_CONSOLE_TWLTYPE_RETAILłȂƂmF - - if ((console & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_32MB) - { - if ((console & OS_CONSOLE_TWLTYPE_MASK) != OS_CONSOLE_TWLTYPE_RETAIL) - { - IsToolType type; - kamiGetIsToolType(&type); - if (type == IS_TOOL_TYPE_DEBUGGER) - { - running = IS_TWL_DEBUGGER; - } - else if (type == IS_TOOL_TYPE_ERROR) // TS{[hvX + dlfobK - { - running = IS_TWL_DEBUGGER; - } - else if (type == IS_TOOL_TYPE_CAPTURE) - { - running = IS_TWL_CAPTURE; - } - } - } - else if ((console & OS_CONSOLE_MASK) == OS_CONSOLE_TWL) - { - IsToolType type; - kamiGetIsToolType(&type); - if (type == IS_TOOL_TYPE_CAPTURE) - { - running = IS_TWL_CAPTURE; - } - else - { - running = TWL; - } - } - - switch (running) - { - case IS_TWL_DEBUGGER: - kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on IS_TWL_DEBUGGER."); - break; - case IS_TWL_CAPTURE: - kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on IS_TWL_CAPTURE."); - break; - case TWL: - kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on TWL CONSOLE."); - break; - case UNKNOWN: - kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on UNKNOWN."); - break; - } - -#ifdef SYSM_BUILD_FOR_DEBUGGER - // fobKSystemUpdater͎@ƃLv`ł͓삳Ȃ - if (running != IS_TWL_DEBUGGER) - { - kamiFontPrintfMain( 2, 9, 3, " Sorry, "); - kamiFontPrintfMain( 2, 10, 3, " This SystemUpdater can not "); - kamiFontPrintfMain( 2, 11, 3, " execute on TWL-CONSOLE. "); - DrawInvalidConsole(); - } -#else - // @SystemUpdater̓fobKł͓삳Ȃ - if (running == IS_TWL_DEBUGGER) - { - kamiFontPrintfMain( 2, 9, 3, " Sorry, "); - kamiFontPrintfMain( 2, 10, 3, " This SystemUpdater can not "); - kamiFontPrintfMain( 2, 11, 3, " execute on IS-TWL-DEBUGGER."); - DrawInvalidConsole(); - } -#endif // SYSM_BUILD_FOR_DEBUGGER - - // UNKNOWN͓͂삳Ȃ - if (running == UNKNOWN) - { - kamiFontPrintfMain( 2, 9, 3, " Sorry, "); - kamiFontPrintfMain( 2, 10, 3, " This SystemUpdater can not "); - kamiFontPrintfMain( 2, 11, 3, " execute on UNKNOWN CONSOLE."); - DrawInvalidConsole(); - } - } - - // iXV”\j - // 1.O݂Ȃ - // 2.O݂AOɋLڂ̃}WbNR[hsiSystemUpdaters̏ԁj - // 2.O݂AOɋLڂ̃}WbNR[hƒOɋLڂ - // SDK & IPL ̃o[W SystemUpdater ̂ȉł - -#ifdef IGNORE_VERSION_CHECK - if( 0 ) -#endif // IGNORE_VERSION_CHECK - { - SystemUpdaterLog log; - FSFile file; - FS_InitFile( &file ); - - if (FS_OpenFileEx(&file, SYSTEM_UPDATER_LOG_PATH, FS_FILEMODE_R) == TRUE) - { - DC_InvalidateRange(&log, sizeof(log)); - - if (FS_ReadFile(&file, &log, sizeof(log)) == sizeof(log)) - { - // O[h - OS_Printf("[%d, %d]\n", log.sdk_version, log.ipl_version); - - // SystemUpdatersԂłȂƂ}WbNR[hŔʂ - if (log.magic_code == SYSTEM_UPDATER_MAGIC_CODE) - { - // }WbNR[hASDKo[WAIPLo[W̊mF - if (log.sdk_version > atoi(g_strSDKSvnRevision) || - log.ipl_version > atoi(g_strIPLSvnRevision)) - { - // XVs - DrawAlready(&log); - } - } - } - else - { - // O[hs - OS_Warning("Failure! FS_ReadFile"); - } - - FS_CloseFile(&file); - } - } - - // `{^҂ - DrawWaitButtonA(); - - // TWL̍XVsł - CARD_LockRom((u16)sLockId); - (void)CARDi_ReadRomIDCoreEx(DEBUGGER_COMMAND_NOW_UPDATE); - CARD_UnlockRom((u16)sLockId); - - // ISfobK̃n[hEFAZbg֎~ - DEBUGGER_HwResetDisable(); - - // HWInfo֘ȂO - switch (HWI_Init( OS_AllocFromMain, OS_FreeToMain )) - { - case HWI_INIT_FAILURE: - OS_Warning(" Fail! : HWI_INIT()"); - break; - case HWI_INIT_SUCCESS_PRO_SIGNATURE_MODE: - break; - case HWI_INIT_SUCCESS_DEV_SIGNATURE_MODE: - break; - case HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE: - break; - } - - result = TRUE; - - // Sɏ - NAMUT_Format(); - - // tH[}bgs - sIsFormatFinish = FALSE; - ExeFormatAsync(FORMAT_MODE_QUICK, FormatCallback); - kamiFontPrintfMain( 7, 11, 8, "Now Format..."); - while(!sIsFormatFinish){}; - if (sFormatResult) - { - kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "NAND Format Success."); - } - else - { - kamiFontPrintf( 0, printLine++, FONT_COLOR_RED, "NAND Format Failure!"); - } - kamiFontPrintfMain( 7, 11, 8, " "); - - // tH[}bgESɕKvȃt@CȂȂĂ邽 - // ES_InitLibĂяoƂō쐬Ă - NAM_End( NULL, NULL ); - NAM_Init( OS_AllocFromMain, OS_FreeToMain ); - - // Sn[hEFA̍XV - for (i=0;isdk_version, log->ipl_version ); - kamiFontPrintfMain( 3, 13, 1, "--------------------------"); - - while(1) - { - G3X_Reset(); - G3_Identity(); - G3_PolygonAttr(GX_LIGHTMASK_NONE, GX_POLYGONMODE_DECAL, GX_CULL_NONE, 0, 31, 0); - - DrawQuad( 10, 50, 246, 128, GX_RGB(28, 28, 28)); - - G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_W); - - OS_WaitVBlankIntr(); - } -} - -/*---------------------------------------------------------------------------* - Name: DrawResult - - Description: ʂ\܂B - - Arguments: - - Returns: None. - *---------------------------------------------------------------------------*/ -static void DrawResult(BOOL result) -{ - // 3D - G3X_Reset(); - G3_Identity(); - G3_PolygonAttr(GX_LIGHTMASK_NONE, GX_POLYGONMODE_DECAL, GX_CULL_NONE, 0, 31, 0); - - // "Now Updating.." - kamiFontPrintfMain( 0, 9, 7, " "); - - if (result) - { - kamiFontPrintfMain( 9, 10, 7, "Update Success!"); - // O[_CAO - DrawQuad( 50, 50, 206, 120, GX_RGB(12, 25, 12)); - } - else - { - kamiFontPrintfMain( 9, 10, 7, "Update Failure!"); - // bh_CAO - DrawQuad( 50, 50, 206, 120, GX_RGB(31, 0, 0)); - } - - kamiFontLoadScreenData(); - - // 3DXbv - G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_W); -} - -/*---------------------------------------------------------------------------* - Name: FormatCallback - - Description: tH[}bgR[obN - - Arguments: - - Returns: None. - *---------------------------------------------------------------------------*/ -static void FormatCallback(KAMIResult result, void* /*arg*/) -{ - if ( result == KAMI_RESULT_SUCCESS_TRUE ) - { - sFormatResult = TRUE; - } - else - { - sFormatResult = FALSE; - } - - sIsFormatFinish = TRUE; -} diff --git a/build/tests/CustomSystemUpdater/work/aftercls.sh b/build/tests/CustomSystemUpdater/work/aftercls.sh deleted file mode 100755 index 2ec65c6e..00000000 --- a/build/tests/CustomSystemUpdater/work/aftercls.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -#! bash -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: aftercls.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -AQUA='//10.116.1.5' -CLSED_PATH="${AQUA}/TWL_debug/sysmenu/rom/debug_rom/CLS_processed" -DAILY_CLSED_DIR=`date +'%Y%m%d'`_cls - -if [ $# -lt 1 ]; -then - echo "input target dir name" - exit -fi - -echo "tocsu.sh" -./tocsu.sh $1 - -echo "toaqua.rb" -./toaqua.rb $1 - -# AquaփRs[ -echo "Copying to Aqua" -cp -r $1_foraqua ${CLSED_PATH}/${DAILY_CLSED_DIR} - -# Shop ROM ̃Rs[ -shopdir="${AQUA}/TWL_debug/shop/rom/cls/${DAILY_CLSED_DIR}" -/bin/mkdir ${shopdir} -/bin/cp $1_foraqua/verup/tad/shop* ${shopdir} - -# NZV ROM ̃Rs[ -nzvdir="${AQUA}/TWL_debug/nintendo_spot/rom/clsprocessed/"`date +'%Y%m%d'` -/bin/mkdir ${nzvdir} -/bin/cp -r $1/HNJ* ${nzvdir} \ No newline at end of file diff --git a/build/tests/CustomSystemUpdater/work/cls.sh b/build/tests/CustomSystemUpdater/work/cls.sh deleted file mode 100755 index d58e276f..00000000 --- a/build/tests/CustomSystemUpdater/work/cls.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh -#! bash -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: conv2svnDir.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -move_data_to_tmp() { - tmp=tmp/$1 - install -d $tmp - for src in `find $1 -name v* -type d` - do - mv $src $tmp - done -} - -do_cls() { - tmp=tmp/$1 - for target in `find $tmp -name v* -type d | sort -t / -n -k 3.2` - do - cp -rp $target $1 - t=`echo "$target" | cut -c 5-` - if [ -f $t/*.cls ]; then - echo "$t:Already cls processed" - else - genLic $1 - fi -# genLic $1 - done -} - -for app in `find . -maxdepth 1 -mindepth 1 -type d` -do - name=`echo "$app" | cut -c 3-` - move_data_to_tmp $name - do_cls $name -done - -rm -rf tmp diff --git a/build/tests/CustomSystemUpdater/work/mkcls.py b/build/tests/CustomSystemUpdater/work/mkcls.py deleted file mode 100644 index 668f22af..00000000 --- a/build/tests/CustomSystemUpdater/work/mkcls.py +++ /dev/null @@ -1,151 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import sys, os, struct -import string, random -import re, shutil, binascii - -def roundup(val, align): - return int((val+align-1)/align)*align - -def randstr(n): - words = ''.join([string.digits,string.letters,'.','+']) - return ''.join(random.choice(words) for i in xrange(n)) - -def main(): - try: - tadfile = sys.argv[1] - except: - print '%s : please specfy the tad file' % (sys.argv[0]) - exit(-1) - - #--- parse *.tad - fin = open(tadfile, 'rb') - try: - tadData = fin.read() - except: - fin.close() - start, end = 0, struct.calcsize('>l2sh6l') - (hdrSize, tadType, tadVersion, certSize, crlSize, ticketSize, tmdSize, - contentSize, metaSize) = struct.unpack('>l2sh6l', tadData[start:end]) - certOffset = roundup(hdrSize, 64) - crlOffset = roundup(certOffset + certSize, 64) - ticketOffset = roundup(crlOffset + crlSize, 64) - tmdOffset = roundup(ticketOffset + ticketSize, 64) - contentOffset = roundup(tmdOffset + tmdSize, 64) - metaOffset = roundup(contentOffset + contentSize, 64) - fileSize = roundup(metaOffset + metaSize, 64) - - #print '-'*20+'\n' - #print ' hdrSize %s\n' % hdrSize, - #print ' tadType %s\n' % tadType, - #print ' tadVersion, %s\n' % tadVersion, - #print ' certSize, %s\n' % certSize, - #print ' crlSize, %s\n' % crlSize, - #print ' ticketSize, %s\n' % ticketSize, - #print ' tmdSize, %s\n' % tmdSize, - #print ' contentSize, %s\n' % contentSize, - #print ' metaSize %s' - #print '\n'+'-'*20 - #open("cert.bin", 'wb').write(tadData[certOffset:certOffset+certSize]) - #open("crl.bin", 'wb').write(tadData[crlOffset:crlOffset+crlSize]) - #open("ticket.bin", 'wb').write(tadData[ticketOffset:ticketOffset+ticketSize]) - #open("tmd.bin", 'wb').write(tadData[tmdOffset:tmdOffset+tmdSize]) - #open("content.bin", 'wb').write(tadData[contentOffset:contentOffset+contentSize]) - #open("meta.bin", 'wb').write(tadData[metaOffset:metaOffset+metaSize]) - - #--- parse TMD - tmd = tadData[tmdOffset:tmdOffset+tmdSize] - - #--- RSA2048 signature - (sigB, sigE) = (0, struct.calcsize('>i256s60s64s')) - (IOSCCertSigType, IOSCRsaSig2048, IOSCSigDummy, IOSCName)\ - = struct.unpack('>i256s60s64s', tmd[sigB:sigE]) - - #print "=== RSA2048 signature ===============" - #print "IOSCCertSigType : %x" % IOSCCertSigType - #print "IOSCRsaSig2048 : %s" % IOSCRsaSig2048 - #print "IOSCSigDummy : %s" % IOSCSigDummy - #print "IOSCName : %s" % IOSCName - - #--- ESTitleMetaHeader - (tmhB, tmhE) = (sigE, sigE+struct.calcsize('>4B5iH62si3H')) - (version, - caCrlVersion, - signerCrlVersion, - dummy, - sysVersion_H, - sysVersion_L, - titleId_H, - titleId_L, - titleType, - groupID, - reserved, - accessRights, - titleVersion, - numContents, - bootIndex) = struct.unpack('>4B5iH62si3H',tmd[tmhB:tmhE]) - - print "=== ESTitleMetaHeader ===============" - #print ('version : %d ') % version - #print ('caCrlVersion : %d ') % caCrlVersion - #print ('signerCrlVersion : %d ') % signerCrlVersion - #print ('dummy : %s ') % dummy - #print ('sysVersion_H : %x ') % sysVersion_H - #print ('sysVersion_L : %x ') % sysVersion_L - print ('titleId_H : %08x ') % titleId_H - print ('titleId_L : %08x ') % titleId_L - #print ('titleType : %x ') % titleType - print ('groupID : %x ') % groupID - #print ('reserved[62] : %s ') % reserved - #print ('accessRights : %d ') % accessRights - print ('titleVersion : %d ') % titleVersion - #print ('numContents : %d ') % numContents - #print ('bootIndex : %d ') % bootIndex - - #--- make directory for cls - tadpath = os.path.dirname(tadfile) - gamecode = binascii.unhexlify('%x'%titleId_L) - keycode = gamecode[:3] - sysdic = { 'HNA':'menu', - 'HNB':'setting', - 'HNC':'wfirm', - 'HND':'dlplay', - 'HNE':'pchat', - 'HNF':'shop', - 'HNG':'browser', - 'HNH':'whlist', - 'HNI':'photo', - 'HNJ':'nzv', - 'HNK':'sound', - 'HNL':'verdata', - } - try: - suffix = sysdic.get(keycode) - if suffix: - clsdir = ''.join(['./',gamecode,'-',suffix]) - else: - clsdir = ''.join(['./',gamecode]) - os.mkdir(clsdir) - except: - print '%s : can not create dir %s' % (sys.argv[0],clsdir) - - #--- write properties - properties = open(''.join([clsdir,'/properties']),'w') - properties.write('TITLE_ID\t\t\t\t%08x%08x\n' % (titleId_H, titleId_L)) - properties.write('TITLE_NAME\t\t\t\t%s\n' % gamecode) - properties.write('TITLE_TYPE\t\t\t\t%s\n' % 'TWL_SYS') - properties.write('PASSWORD\t\t\t\t%s\n' % randstr(64)) - properties.write('ALLOW_COMMON_TICKET\t\t%s\n' % '1') - - #--- make version dir - verdir = ''.join([clsdir,'/v',str(titleVersion)]) - try: - os.mkdir(verdir) - except: - print '%s : can not create dir %s' % (sys.argv[0],verdir) - else: - shutil.copy(tadfile,verdir) - -if __name__ == '__main__': - sys.exit(main() or 0) \ No newline at end of file diff --git a/build/tests/CustomSystemUpdater/work/pickup_tad.dev.sh b/build/tests/CustomSystemUpdater/work/pickup_tad.dev.sh deleted file mode 100755 index 98479574..00000000 --- a/build/tests/CustomSystemUpdater/work/pickup_tad.dev.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -#! bash -f - -#---- commands -LS='/bin/ls' -ECHO='/bin/echo' -HEAD='/bin/head' -FIND='/bin/find' -COPY='/bin/cp' -DATE='/bin/date' -XARGS='/bin/xargs' -MKDIR='/bin/mkdir' -CHDIR='cd' - -#---- values -aqua_server='//10.116.1.5' -debug_dir="${aqua_server}/TWL_debug/sysmenu/rom/debug_rom" -redroms="${debug_dir}/sd.roms.template*" -clsbase="${debug_dir}/CLS_base" -datedir=`${DATE} +%Y%m%d` -regions='jp usa euro aus' - -#---- call pickup_tad.pl -${ECHO} "===== getting latest apps files =====" -perl ./pickup_tad.pl - -#---- gets the latest sd.roms.template roms -#redrom_dir=`${LS} -d --full-time ${redroms} | sort -k 7,10 | tail -n 1` -redrom_dir=`${LS} -dt ${redroms} | ${HEAD} -n 1` -${ECHO} -e "===== getting sd.roms.template* rom files =====" -${ECHO} -e "sd.roms.template dir : ${redrom_dir}" -${ECHO} -e "copy *.(tad|dat|nand) file -> ${datedir} dir\n" -${FIND} ${redrom_dir} -regextype posix-egrep -regex ".*.(tad|dat|nand)" | ${XARGS} ${COPY} -fut ${datedir} > /dev/null - -#---- gets the cls base roms -${ECHO} -e "===== getting sd.roms.template* rom files =====" -${ECHO} -e "CLS_base dir : ${clsbase}" -${ECHO} -e "copy *.tad file -> ${datedir} dir" -${FIND} ${clsbase} -name "*.tad" | ${XARGS} ${COPY} -fut ${datedir} > /dev/null - -#---- call mkcls.py -${ECHO} -e "===== create forcls dirs =====" -${MKDIR} ${datedir}_forcls -${CHDIR} ${datedir}_forcls -${FIND} ../${datedir} -name "*.tad" -exec ../mkcls.py {} \; - -${ECHO} -e "===== copy *.nand *.dat files -> (jp|usa|euro|aus) dirs =====\n" -for region in ${regions} -do - ${MKDIR} ${region} - ${COPY} ../${datedir}/*.nand ${region} - ${COPY} ../${datedir}/*.dat ${region} -done - -${COPY} ../cls.sh ./ \ No newline at end of file diff --git a/build/tests/CustomSystemUpdater/work/pickup_tad.pl b/build/tests/CustomSystemUpdater/work/pickup_tad.pl deleted file mode 100755 index b003899e..00000000 --- a/build/tests/CustomSystemUpdater/work/pickup_tad.pl +++ /dev/null @@ -1,146 +0,0 @@ -#!/usr/bin/perl -w -I/usr/local/bin -use File::Copy; -use File::Copy::Recursive qw(fcopy rcopy dircopy); -use Class::Struct; -use POSIX 'strftime'; -use File::Find; - -require "util.pl"; - -my @apps = ("download_play", - "full_browser", - "nintendo_spot", - "photo", - "pictchat", - "shop", - "sound", - "sysmenu"); - -my $flgDate = 0; - -my $i; -my $date_dir = ""; -my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); -my $str_today = sprintf("%04d%02d%02d", $year+1900, $mon+1, $mday); -my $flghelp = 0; -my $err; -my @list_tad; - - -for ($i = 0; $i < $#ARGV+1; $i++) { - - my $opt = $ARGV[$i]; - - if ( $opt eq "-d" ) { - $flgDate = 1; - unless ( $#ARGV <= $i ) { - #$date_dir = $aqua_dir."/SD_".$ARGV[$i+1]; - $str_today = $ARGV[$i+1]; - $err = [ 1, "Not date (\"$date_dir\") !!"] if ( $date_dir !~ /[0-9]{8}/ ); - $i++; - - } else { - $err = [1,"No argument after -d !!"]; - } - } elsif ( $opt eq "-h" ) { - &show_help; - exit 0; - } else { - print "Unknown option: $opt\n"; - &show_help; - exit 1; - } - do { - print "*** Error *** : $err->[1]"; - exit 1; - } if ( $err->[0] ); -} - -# each application directory -foreach $app ( @apps ) -{ - my $dir_date; - #$dir_app = sprintf('//Aqua/TWL_debug/%s/rom/tad', $app); -$dir_app = sprintf('//10.116.1.5/TWL_debug/%s/rom/tad', $app); - $dir_app_date = &search_date_dir($dir_app); - - print "* $dir_app\n - $dir_app_date\n\n"; - - find( sub - { - do { - push @list_tad, $File::Find::name }if (/\.tad$/); - }, $dir_app_date - ); - #foreach ( @list_tad ) { print " * $_\n"; } -} - -#print "Date: $date_dir\n"; - -# Actually not today -mkdir($str_today); - -# copy to the local date directory -foreach ( @list_tad ) { - print("$_\n"); - copy($_, $str_today); -} - -# -exit 0; - -#----------------------------------------------------------------------- -# name : show_help -# function : -#----------------------------------------------------------------------- -sub show_help -{ -print <<__MSG_HELP__; -Usage: -\$ perl pickup_tad.pl [-d yyyymmdd] -__MSG_HELP__ -} - -#----------------------------------------------------------------------- -# name : search_date_dir -# function : -#----------------------------------------------------------------------- -sub search_date_dir -{ - my $root_dir; - my $date_dir; - my $prefix = ($#_<1) ? "" : $_[1]; - my $full_prefix; - my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); - - $year += 1900; - $mon += 1; - - $root_dir = ( $#_ < 0 ) ? "." : $_[0]; - - $full_prefix = $root_dir."/".$prefix; - $date_dir = $full_prefix.sprintf("%04d%02d%02d", $year, $mon, $mday); - - # search directory on going back date - while ( $year >= 2000 ) { - if ( -e "$date_dir" and -d "$date_dir") { - return "$date_dir"; - } else { - $mday -= 1; - $date_dir = $full_prefix.sprintf("%04d%02d%02d", $year, $mon, $mday); - } - do { - $mday = 31; # constant - $mon -= 1; - unless ( $mon ) { - $mon = 12; - $year -= 1; - } - } unless ( $mday ) ; - } - print "*** Error *** : Can't find the date directory !!\n"; - return 0; -} - -__END__ - diff --git a/build/tests/CustomSystemUpdater/work/toaqua.rb b/build/tests/CustomSystemUpdater/work/toaqua.rb deleted file mode 100755 index 3840ed68..00000000 --- a/build/tests/CustomSystemUpdater/work/toaqua.rb +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/ruby -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: toaqua.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -require "find" -require "fileutils" - -REGION_DIR = { - "U" => ["aus"], - "E" => ["usa"], - "J" => ["jp"], - "P" => ["euro"], - "A" => ["aus", "usa", "jp", "euro"], -} - -VERUP_DIR = "verup" -VERUP_CLS = "#{VERUP_DIR}/cls" -VERUP_TAD = "#{VERUP_DIR}/tad" - -def proc(target_dir, output_dir) - Find.find(target_dir){ |path| - next unless File.file?(path) && (/[a-z0-9A-Z]{4}-.*v[0-9]+\.tad\.out/ =~ path) != nil -# p path - src = path - - # fBNgtadt@C.tadOo - dest = "" - version = "" - Find.find(File.split(src)[0]){|tad| - # .tad ‚ - if (/.*\.tad\z/ =~ tad) != nil - dest = File.split(tad)[1] - end - if (/.*\.cls\z/ =~ tad) != nil - p tad - version = tad.slice(/v[0-9]+/) - end - } - dest = /\.tad/.match(dest).pre_match + "-" + version + ".tad" - # [W𔻕ʂăRs[ - regions = REGION_DIR[File.split(src)[1][3..3]] - for region in regions do - if version != "v0" - p version - p src - system("cp #{src} #{[output_dir, "#{VERUP_TAD}", dest].join("/")}") - system("cp #{src.sub(/\.tad\.out/, ".cls")} #{[output_dir, "#{VERUP_CLS}", dest.sub(/\.tad/, ".cls")].join("/")}") - else - system("cp #{src} #{[output_dir, region, dest].join("/")}") - end - end - } - -end - -# 烁C - -if ARGV.size < 1 - $stdout.printf("Usage:#{__FILE__} target_clsed_dir output_dir") - exit -1 -end -src = ARGV[0].sub(/\/\z/, "") -out = "#{src}_foraqua" -system("mkdir #{out}") -system("mkdir #{out}/aus") -system("mkdir #{out}/usa") -system("mkdir #{out}/euro") -system("mkdir #{out}/jp") -system("mkdir #{out}/#{VERUP_DIR}") -system("mkdir #{out}/#{VERUP_CLS}") -system("mkdir #{out}/#{VERUP_TAD}") - -system("cp -rf #{src}/aus #{out}") -system("cp -rf #{src}/usa #{out}") -system("cp -rf #{src}/euro #{out}") -system("cp -rf #{src}/jp #{out}") - -proc(src, out) - diff --git a/build/tests/CustomSystemUpdater/work/tocls.sh b/build/tests/CustomSystemUpdater/work/tocls.sh deleted file mode 100755 index b7725bb5..00000000 --- a/build/tests/CustomSystemUpdater/work/tocls.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh -#! bash -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: conv2svnDir.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - - -if [ $# -lt 1 ]; -then - echo "input target dir name" - exit -fi - -target=`echo $1 | sed -e 's/\/$//'` -target=$target"_forcls" -echo $target - -mkdir $target -cd $target -find ../$1 -name "*.tad" -exec ../mkcls.py {} \; -cp ../cls.sh ./ - -# nandt@[ƁAtHgꉞ[WɃRs[ -mkdir jp -mkdir aus -mkdir usa -mkdir euro - -cp `find ../$1/jp -name "*.nand"` jp -cp `find ../$1/jp -name "*.nand"` aus -cp `find ../$1/jp -name "*.nand"` usa -cp `find ../$1/jp -name "*.nand"` euro -cp `find ../$1/jp -name "*.dat"` jp -cp `find ../$1/jp -name "*.dat"` aus -cp `find ../$1/jp -name "*.dat"` usa -cp `find ../$1/jp -name "*.dat"` euro - - diff --git a/build/tests/CustomSystemUpdater/work/tocsu.sh b/build/tests/CustomSystemUpdater/work/tocsu.sh deleted file mode 100755 index c4d9ea7d..00000000 --- a/build/tests/CustomSystemUpdater/work/tocsu.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/sh -#! bash -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools -# File: tocsu.sh -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - - - -if [ $# -lt 1 ]; -then - echo "input target dir name" - exit -fi - - -target=`echo $1 | sed -e 's/\/$//'` -target=$target"_forcsu" -echo $target - - -tmp=`echo $1 | sed -e 's/\/$//'`_tmp -mkdir $target -cd $target - -mkdir jp -mkdir aus -mkdir usa -mkdir euro - -cp -rf ../$1/jp . -cp -rf ../$1/aus . -cp -rf ../$1/usa . -cp -rf ../$1/euro . - -mkdir verup -mkdir $tmp - -find ../$1 -name "*.out" -exec cp {} $tmp \; - -find $tmp -regex "[^/]*/...[jaJA].*v0\.tad\.out" | gawk -F/ '{printf("cp %s jp/%s\n",$0, $2)}' | sed -e 's/\.out$//g' > jp.sh -find $tmp -regex "[^/]*/...[uaUA].*v0\.tad\.out" | gawk -F/ '{printf("cp %s aus/%s\n",$0, $2)}' | sed -e 's/\.out$//g' > aus.sh -find $tmp -regex "[^/]*/...[paPA].*v0\.tad\.out" | gawk -F/ '{printf("cp %s euro/%s\n",$0, $2)}' | sed -e 's/\.out$//g' > euro.sh -find $tmp -regex "[^/]*/...[eaEA].*v0\.tad\.out" | gawk -F/ '{printf("cp %s usa/%s\n",$0, $2)}' | sed -e 's/\.out$//g' > usa.sh -find $tmp -regex "[^/]*/.*v[^0][0-9]*\.tad\.out" | gawk -F/ '{printf("cp %s verup/%s\n",$0, $2)}' | sed -e 's/\.out$//g' > verup.sh - -./jp.sh -./aus.sh -./euro.sh -./usa.sh -./verup.sh - -mv $tmp ../ -rm -rf *.sh diff --git a/build/tests/CustomSystemUpdater/work/util.pl b/build/tests/CustomSystemUpdater/work/util.pl deleted file mode 100755 index e6d9a075..00000000 --- a/build/tests/CustomSystemUpdater/work/util.pl +++ /dev/null @@ -1,110 +0,0 @@ - -package util; - -#----------------------------------------------------------------------- -# name : get_title_version -# function : get the title version from the specified tad file -#----------------------------------------------------------------------- -sub get_title_version { - - my $titleVersion = 0 ; - my $cmdPython = "/usr/bin/python.exe"; - my $scrpPython = "/usr/local/bin/mkcls.py"; - $tad = $_[0]; - - open(PY, "$cmdPython $scrpPython $tad | ") or die "$!"; - $titleVersion = $1 if ( =~ /([0-9]{1,})/) ; - close(PY); - - $titleVersion; -} - -#----------------------------------------------------------------------- -# name : get_nlist -# function : get the list of the specified directory except "." and ".." -#----------------------------------------------------------------------- -sub get_nlist { - my $dirname = ( $#_ < 0) ? "." : $_[0]; - my @list; - - unless ( opendir(DIR, "$dirname") ) { - print "Can't open directory: $dirname\n"; - return ""; - } - - foreach $node ( readdir(DIR) ) { - push(@list, $node) unless ( $node =~ /^\.{1,2}$/ ); - } - closedir(DIR); - - @list; -} - - -#----------------------------------------------------------------------- -# name : fecheck -# function : check the specified file existence (Error if no file) -#----------------------------------------------------------------------- -sub fecheck { - my $filename = $_[0]; - unless ( -e $filename ) { -print < - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_START 25 // L[s[gJn܂ł̃t[ -#define KEY_REPEAT_SPAN 10 // L[s[g̊Ԋut[ - -/*---------------------------------------------------------------------------* - \ ` - *---------------------------------------------------------------------------*/ - -// L[͏ -typedef struct KeyInfo -{ - u16 cnt; // H͒l - u16 trg; // gK - u16 up; // gK - u16 rep; // ێs[g -} KeyInfo; - -/*---------------------------------------------------------------------------* - Prototype - *---------------------------------------------------------------------------*/ -void InitCommon(void); - -void ReadKey(KeyInfo* pKey); - -void VBlankIntr(void); - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* COMMON_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/DisableDebugFlgChecker/include/font.h b/build/tests/DisableDebugFlgChecker/include/font.h deleted file mode 100644 index d4f23ed2..00000000 --- a/build/tests/DisableDebugFlgChecker/include/font.h +++ /dev/null @@ -1,41 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: font.h - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#ifndef FONT_H_ -#define FONT_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -extern const u32 d_CharData[8 * 256]; -extern const u32 d_PaletteData[8 * 16]; - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/DisableDebugFlgChecker/include/screen.h b/build/tests/DisableDebugFlgChecker/include/screen.h deleted file mode 100644 index 4b758ee9..00000000 --- a/build/tests/DisableDebugFlgChecker/include/screen.h +++ /dev/null @@ -1,67 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: screen.h - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#ifndef SCREEN_H_ -#define SCREEN_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -// tHg̐F -#define COLOR_BLACK 0x10 -#define COLOR_RED 0x11 -#define COLOR_GREEN 0x12 -#define COLOR_BLUE 0x13 -#define COLOR_YELLOW 0x14 -#define COLOR_PURPLE 0x15 -#define COLOR_L_BLUE 0x16 -#define COLOR_D_RED 0x17 -#define COLOR_D_GREEN 0x18 -#define COLOR_D_BLUE 0x19 -#define COLOR_D_YELLOW 0x1a -#define COLOR_D_PURPLE 0x1b -#define COLOR_D_L_BLUE 0x1c -#define COLOR_GRAY 0x1d -#define COLOR_D_GRAY 0x1e -#define COLOR_WHITE 0x1f - -/*---------------------------------------------------------------------------* - ֐ ` - *---------------------------------------------------------------------------*/ -void InitScreen(void); -void ClearScreen(void); -void ClearMainScreen(void); -void ClearSubScreen(void); -void PutMainScreen(s32 x, s32 y, u8 palette, char* text, ...); -void PutSubScreen(s32 x, s32 y, u8 palette, char* text, ...); -void UpdateScreen(void); - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* SCREEN_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/DisableDebugFlgChecker/main.rsf b/build/tests/DisableDebugFlgChecker/main.rsf deleted file mode 100644 index 2a3fe85c..00000000 --- a/build/tests/DisableDebugFlgChecker/main.rsf +++ /dev/null @@ -1,244 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2008-09-04#$ -# $Rev: 2394 $ -# $Author: aoki_ryoma $ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "FatalChecker" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - # BannerFile ../banner/banner.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - LockSCFG FALSE - - DisableDebug TRUE - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media gamecard - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - #DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode 0G6A - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} diff --git a/build/tests/DisableDebugFlgChecker/src/common.c b/build/tests/DisableDebugFlgChecker/src/common.c deleted file mode 100644 index c1b7c958..00000000 --- a/build/tests/DisableDebugFlgChecker/src/common.c +++ /dev/null @@ -1,156 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - File: common.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-08-25#$ - $Rev: 8074 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#include "common.h" - -static void InitInterrupts(void); -static void InitHeap(void); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: InitCommon - - Description: {Iȏ֐ŌĂԁB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void InitCommon(void) -{ - OS_Init(); - OS_InitTick(); - OS_InitAlarm(); - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - CARD_Init(); // VKlj - CARD_Enable(TRUE); // VKlj - - InitHeap(); - InitInterrupts(); -} - -/*---------------------------------------------------------------------------* - Name: ReadKey - - Description: L[͏擾A͏\̂ҏWB - gKAgKAps[ggK oB - - Arguments: pKey - ҏWL[͏\̂w肷B - - Returns: None. - *---------------------------------------------------------------------------*/ -void ReadKey(KeyInfo* pKey) -{ - static u16 repeat_count[12]; - int i; - u16 r; - - r = PAD_Read(); - pKey->trg = 0x0000; - pKey->up = 0x0000; - pKey->rep = 0x0000; - - for (i = 0; i < 12; i++) - { - if (r & (0x0001 << i)) - { - if (!(pKey->cnt & (0x0001 << i))) - { - pKey->trg |= (0x0001 << i); // gK - repeat_count[i] = 1; - } - else - { - if (repeat_count[i] > KEY_REPEAT_START) - { - pKey->rep |= (0x0001 << i); // ps[g - repeat_count[i] = (u16) (KEY_REPEAT_START - KEY_REPEAT_SPAN); - } - else - { - repeat_count[i]++; - } - } - } - else - { - if (pKey->cnt & (0x0001 << i)) - { - pKey->up |= (0x0001 << i); // gK - } - } - } - - pKey->cnt = r; // HL[ -} - -/*---------------------------------------------------------------------------* - Name: InitInterrupts - - Description: 荞ݐݒB - V uN荞݂‚A荞݃nhݒ肷B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitInterrupts(void) -{ - // V uN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // 荞݋ - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); -} - -/*---------------------------------------------------------------------------* - Name: InitHeap - - Description: C̃A[iɂăăVXeB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitHeap(void) -{ - void* tempLo; - OSHeapHandle hh; - - // C̃A[iɃq[vЂƂ쐬 - tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tempLo); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - // q[v쐬Ɏsꍇُ͈I - OS_Panic("ARM9: Fail to create heap...\n"); - } - (void)OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/DisableDebugFlgChecker/src/font.c b/build/tests/DisableDebugFlgChecker/src/font.c deleted file mode 100644 index ebc10e7b..00000000 --- a/build/tests/DisableDebugFlgChecker/src/font.c +++ /dev/null @@ -1,585 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NitroWiFi - WCM - demos - wcm-list - File: font.c - - Copyright 2005-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: font.c,v $ - Revision 1.2 2006/03/10 09:22:43 kitase_hirotake - INDENT SOURCE - - Revision 1.1 2005/07/21 08:21:06 adachi_hiroaki - VKlj - - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ -#include "font.h" - -/*---------------------------------------------------------------------------* - Character data - *---------------------------------------------------------------------------*/ -const u32 d_CharData[8 * 256] = -{ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01010010, 0x01010010, 0x00000110, // 0001h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 00f6h - 0x00100000, 0x00100000, 0x00100000, 0x00111111, - 0x00000000, 0x01010010, 0x01010010, 0x00111111, // 00f7h - 0x00010010, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01010011, 0x01010100, 0x00100011, // 00f8h - 0x00100100, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01010000, 0x01011111, 0x00010000, // 00f9h - 0x00001000, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x01010010, 0x01111111, 0x00100010, // 00fah - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x01010001, 0x01010010, 0x00100000, // 00fbh - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01011110, 0x01010010, 0x00100110, // 00fch - 0x00111001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01011110, 0x00010000, // 00fdh - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x00100101, 0x01001010, 0x00101010, // 00feh - 0x00100000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -}; - -/*---------------------------------------------------------------------------* - Palette data - *---------------------------------------------------------------------------*/ -const u32 d_PaletteData[8 * 16] = -{ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // black - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001f0000, 0x00000000, 0x00000000, 0x00000000, // red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03e00000, 0x00000000, 0x00000000, 0x00000000, // green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c000000, 0x00000000, 0x00000000, 0x00000000, // blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03ff0000, 0x00000000, 0x00000000, 0x00000000, // yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fe00000, 0x00000000, 0x00000000, 0x00000000, // light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00180000, 0x00000000, 0x00000000, 0x00000000, // dark red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03000000, 0x00000000, 0x00000000, 0x00000000, // dark green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, // dark blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03180000, 0x00000000, 0x00000000, 0x00000000, // dark yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60180000, 0x00000000, 0x00000000, 0x00000000, // dark purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x63000000, 0x00000000, 0x00000000, 0x00000000, // dark light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x56b50000, 0x00000000, 0x00000000, 0x00000000, // gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x2d6b0000, 0x00000000, 0x00000000, 0x00000000, // dark gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fff0000, 0x00000000, 0x00000000, 0x00000000, // white - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/DisableDebugFlgChecker/src/main.c b/build/tests/DisableDebugFlgChecker/src/main.c deleted file mode 100644 index 4a27ba44..00000000 --- a/build/tests/DisableDebugFlgChecker/src/main.c +++ /dev/null @@ -1,287 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - Nand-2 - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-03#$ - $Rev: 8251 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#include -#include -#include - -#include "application_jump_private.h" -#include "common.h" -#include "screen.h" - -#define DMA_NO_FS 1 -#define CHECK_APP_NUM 10 -#define REGION_NUM 6 - -/*---------------------------------------------------------------------------* - ϐ ` - *---------------------------------------------------------------------------*/ -static u8 gRegion; - -static u8 gDisableDebugFlg[CHECK_APP_NUM]; -static BOOL gError[CHECK_APP_NUM]; -static NAMTitleInfo gInfo[CHECK_APP_NUM]; - -static NAMTitleId titleID[CHECK_APP_NUM] = { - 0x00030017484e4100, // ` - 0x00030015484e4200, // {̐ݒ - 0x00030005484e4441, // DS_E[hvC all region - 0x00030005484e4541, // sNg`bg all region - 0x00030015484e4600, // Vbv - 0x00030005484e4900, // J - 0x00030005484e4a00, // ][ - 0x00030005484e4b00, // TEh - 0x00030015344e4641, // NandFiler all region - 0x0003001534544E41, // TwlNMenu all region -}; - -const static u32 regioncode[REGION_NUM] = { - 0x4A, // { - 0x45, // AJ - 0x50, // B - 0x55, // I[XgA - 0x43, // - 0x4B // ؍ -}; - -// Xy[X̓sMAX 7 -char *gAppName[CHECK_APP_NUM] = { - "Menu", - "Setting", - "DL play", - "PctChat", - "Shop", - "Camera", - "NinZone", - "Sound", - "NFiler", - "NMenu" -}; - -/*---------------------------------------------------------------------------* - Prototype - *---------------------------------------------------------------------------*/ -static void DrawScene(void); -static void* AllocForNAM(u32 size); -static void FreeForNAM(void* ptr); -static void CheckDisableDebugFlg(void); -/*---------------------------------------------------------------------------*/ - - -void TwlMain(void) -{ - InitCommon(); - InitScreen(); - - GX_DispOn(); - GXS_DispOn(); - - FS_Init(DMA_NO_FS); - NAM_Init(AllocForNAM, FreeForNAM); - - ClearScreen(); - - gRegion = OS_GetRegion(); - - OS_TPrintf("Region : %d\n", gRegion); - - CheckDisableDebugFlg(); - - while(TRUE) - { - // ʕ` - DrawScene(); - - // uuN҂ - OS_WaitVBlankIntr(); - - // ʃNA - ClearScreen(); - } - - // uuN҂ ŌɉʂXVĂI - OS_WaitVBlankIntr(); - OS_Terminate(); -} - - -static void CheckDisableDebugFlg(void) -{ - char file_path[FS_ENTRY_LONGNAME_MAX]; - u8 buf[0x1000]; - u32 i; - - for(i=0; is.disable_debug){ - gDisableDebugFlg[i] = '1'; - } - else{ - gDisableDebugFlg[i] = '0'; - } - OS_TPrintf("DisableFlg( %c )", gDisableDebugFlg[i]); - - // t@CN[Y - bSuccess = FS_CloseFile(&f); - - OS_TPrintf(" File Read/Close Success\n"); - gError[i] = FALSE; - } - else{ - OS_TPrintf(" ng \n"); - gError[i] = TRUE; - gDisableDebugFlg[i] = '-'; - } - - // tado[W̎擾 - if( NAM_ReadTitleInfo( &gInfo[i], titleID[i] ) != NAM_OK ) - { - OS_TPrintf("[0x%08x] ReadTitleInfo failed...\n", titleID[i]); - } - } -} - - -static void DrawScene(void) -{ - s32 i; - u8 color; - u8 *p; - u8 hi, lo; - BOOL success = TRUE; - - for(i=0; i> 8); - lo = (u8)(gInfo[i].version & 0xff); - - PutMainScreen(20, 8+i, color, "%d.%d", hi, lo); - } - else - { - PutMainScreen(20, 8+i, color, "---", gInfo[i].version); - } - - if(gDisableDebugFlg[i] == '0') - { - PutMainScreen(28, 8+i, 0xf1, "NG"); - } - } - PutMainScreen( 0,18, color, "-------------------------------"); -} - - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - - Description: uuN݃nhB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void VBlankIntr(void) -{ - // eLXg\XV - UpdateScreen(); - - // IRQ `FbNtO47Zbg - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -static void* AllocForNAM(u32 size) -{ - void* ptr; - ptr = OS_AllocFromMain(size); - - if (ptr == NULL) - { - OS_Panic("alloc failed."); - } - - return ptr; - -} - -static void FreeForNAM(void* ptr) -{ - OS_FreeToMain(ptr); -} - - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/DisableDebugFlgChecker/src/screen.c b/build/tests/DisableDebugFlgChecker/src/screen.c deleted file mode 100644 index c00a4a75..00000000 --- a/build/tests/DisableDebugFlgChecker/src/screen.c +++ /dev/null @@ -1,194 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: screen.c - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#include -#include "screen.h" -#include "font.h" - -/*---------------------------------------------------------------------------* - 萔 ` - *---------------------------------------------------------------------------*/ -#define TEXT_SCREEN_SIZE 2048 - -/*---------------------------------------------------------------------------* - ϐ ` - *---------------------------------------------------------------------------*/ - -// zXN[[ ㉺ ][ BG ][ LN^ ] -static u16 gScreen[2 ][ 1 ][ TEXT_SCREEN_SIZE / sizeof(u16) ] ATTRIBUTE_ALIGN(32); - -/*---------------------------------------------------------------------------* - Name: InitScreen - - Description: \VXê߂ɁA\ݒB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void InitScreen(void) -{ - // e V-RAM - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void*)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - (void)GX_DisableBankForLCDC(); - - // OAM - MI_CpuFillFast((void*)HW_OAM, 0xc0, HW_OAM_SIZE); - MI_CpuFillFast((void*)HW_DB_OAM, 0xc0, HW_DB_OAM_SIZE); - - // pbg - MI_CpuClearFast((void*)HW_PLTT, HW_PLTT_SIZE); - MI_CpuClearFast((void*)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - // ʐݒ - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - - GX_SetBankForBG(GX_VRAM_BG_128_A); - G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01); - G2_SetBG0Priority(0); - - GX_SetVisiblePlane(GX_PLANEMASK_BG0); - GX_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GX_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - ((u16*)HW_PLTT)[0] = 0x0000; // black - MI_CpuFillFast(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[0][0], TEXT_SCREEN_SIZE); - GX_LoadBG0Scr(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - - // ʐݒ - GX_SetBankForSubBG(GX_VRAM_SUB_BG_32_H); - G2S_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01); - G2S_SetBG0Priority(0); - GXS_SetGraphicsMode(GX_BGMODE_0); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0); - GXS_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GXS_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - ((u16*)HW_DB_PLTT)[0] = 0x0000; // black - MI_CpuFillFast(gScreen[1][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[1][0], TEXT_SCREEN_SIZE); - GXS_LoadBG0Scr(gScreen[1][0], 0, TEXT_SCREEN_SIZE); -} - -/*---------------------------------------------------------------------------* - Name: ClearScreen - - Description: ʂ̃eLXg\NAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ClearScreen(void) -{ - MI_CpuClearFast(gScreen[0][0], TEXT_SCREEN_SIZE); - MI_CpuClearFast(gScreen[1][0], TEXT_SCREEN_SIZE); -} -void ClearMainScreen(void) -{ - MI_CpuClearFast(gScreen[0][0], TEXT_SCREEN_SIZE); - -} -void ClearSubScreen(void) -{ - MI_CpuClearFast(gScreen[1][0], TEXT_SCREEN_SIZE); -} -/*---------------------------------------------------------------------------* - Name: PutMainScreen - - Description: CʂɃeLXgo͂B - - Arguments: text - o͂镶B - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void PutMainScreen(s32 x, s32 y, u8 palette, char* text, ...) -{ - va_list vlist; - char temp[33]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - for (i = 0; i < 32; i++) - { - if (temp[i] == 0x00) - { - break; - } - - gScreen[0][0][((y * 32) + x + i) % (32 * 32)] = (u16) (palette << 12 | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: PrintSubScreen - - Description: TuʂɃeLXgo͂B - - Arguments: text - o͂镶B - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void PutSubScreen(s32 x, s32 y, u8 palette, char* text, ...) -{ - va_list vlist; - char temp[33]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - for (i = 0; i < 32; i++) - { - if (temp[i] == 0x00) - { - break; - } - - gScreen[1][0][((y * 32) + x + i) % (32 * 32)] = (u16) (palette << 12 | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: UpdateScreen - - Description: zXN[ V-RAM ɔfB - V uNԒł̌ĂяozB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void UpdateScreen(void) -{ - // zXN[ V-RAM ɔf - DC_StoreRange(gScreen[0][0], TEXT_SCREEN_SIZE); - GX_LoadBG0Scr(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[1][0], TEXT_SCREEN_SIZE); - GXS_LoadBG0Scr(gScreen[1][0], 0, TEXT_SCREEN_SIZE); -} - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/DispOwnerInfo/Makefile b/build/tests/DispOwnerInfo/Makefile deleted file mode 100644 index 24f22784..00000000 --- a/build/tests/DispOwnerInfo/Makefile +++ /dev/null @@ -1,97 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: debugIPL2 -# File: Makefile -# -# Copyright 2003,2004 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Log: Makefile,v $ -# Revision 1.10.2.1 2006/02/01 05:10:42 yosiokat -# rh\[XIPLType.cljB -# -# Revision 1.10 2005/04/14 05:53:29 yosiokat -# NITROݒf[^֌WIɒłɂXCb`FORCE_CHINAljB -# -# Revision 1.9 2005/04/07 02:23:25 yosiokat -# [X^CXVp̃[ljB -# -# Revision 1.8 2005/04/06 02:19:03 yosiokat -# \[XcheckFontData.ccheckIPL2Font.cɕύXB -# -# Revision 1.7 2005/04/05 08:05:14 yosiokat -# BUILD_MAINTEXCb`ɂāAʃ\[XDebugToolForIPL2MaintenanceToolForIPL2 -# rhł悤ύXB -# -# Revision 1.6 2005/03/31 05:45:12 yosiokat -# rev.1.5͊ԈႢNitroConfigData.cɖ߂B -# -# Revision 1.5 2005/03/31 05:44:17 yosiokat -# NitroConfigData.cnitroConfigData.cɖ߂B -# -# Revision 1.4 2005/03/28 09:34:12 yosiokat -# oi[ljB -# -# Revision 1.3 2005/03/09 04:44:11 yosiokat -# @\ljB -# -# Revision 1.2 2004/09/23 11:27:45 yosiokat -# small fix. -# -# Revision 1.1.1.1 2004/08/31 06:20:24 Yosiokat -# no message -# -# -# $NoKeywords: $ -#---------------------------------------------------------------------------- - -SUBDIRS = banner - -#---------------------------------------------------------------------------- - -TARGET_NEF = DispOwnerInfo.nef -TARGET_BIN = DispOwnerInfo.srl - -SRCS = main.c initFunc.c font.c data.c dispNCD.c myFunc.c myChar.c - -FONT_DIR = font -FONTS = f08han.dat f08zen.dat f10han.dat f10zen.dat f12han.dat f12zen.dat f16han.dat f16zen.dat -FONT_DATAS = $(addprefix $(FONT_DIR)/, $(FONTS)) -FONT_OBJS = $(FONT_DATAS:.dat=.o) - -ROM_SPEC = main.rsf - -#LCFILE_SPEC = # using default -#SRCDIR = # using default - -# makerom settings -MAKEROM_ROMROOT = ./data -MAKEROM_ROMFILES = *.bin - -LINCLUDES += include -LLIBRARY_DIRS += mlib/$(NITRO_LIBTYPE) $(FONT_DIR) -LLIBRARIES += libfnt.a $(FONTS:.dat=.o) - -LDIRT_CLEAN = $(FONT_DIR)/*.o - -include $(NITROSDK_ROOT)/build/buildtools/commondefs - - -#---------------------------------------------------------------------------- - -do-build: $(FONT_OBJS) $(TARGETS) - -include $(NITROSDK_ROOT)/build/buildtools/modulerules - -$(TARGETS) : $(MAKEROM_ARM7) - -$(FONT_DIR)/%.o : $(FONT_DIR)/%.dat - $(CW_BINDIR)/BinToElf.exe $< -aligndata 4 -endian little -output $@ - - -#===== End of Makefile ===== diff --git a/build/tests/DispOwnerInfo/banner/Makefile b/build/tests/DispOwnerInfo/banner/Makefile deleted file mode 100644 index c0dd732c..00000000 --- a/build/tests/DispOwnerInfo/banner/Makefile +++ /dev/null @@ -1,73 +0,0 @@ -#! make -f -#--------------------------------------------------------------------------- -# Project: NitroSDK - tools -# File: Makefile -# -# Copyright 2003,2004 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Log: Makefile,v $ -# Revision 1.3 2005/04/14 05:58:28 yosiokat -# NITROݒf[^֌WIɒłɂXCb`FORCE_CHINAljB -# -# Revision 1.2 2005/04/02 10:00:08 yosiokat -# BUILD_MAINTE=TRUEɂ́Aoi[^Cgς悤ɂB -# -# Revision 1.1 2005/03/28 09:36:16 yosiokat -# oi[ljB -# -# Revision 1.2 2004/10/18 05:37:51 yasu -# Fix how to make banners -# -# Revision 1.1 2004/09/21 02:02:53 yasu -# Demo for building final rom -# -# Revision 1.1 2004/09/17 09:10:59 yasu -# Build default banner file for SDK demos -# -# $NoKeywords: $ -#--------------------------------------------------------------------------- -include $(NITROSDK_ROOT)/build/buildtools/commondefs - -BANNER_ICON = myGameIcon.bmp -BANNER_SPEC = myGameBanner.bsf -TARGETS = myGameBanner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(NITROSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -d -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -#---------------------------------------------------------------------------- -# test -#---------------------------------------------------------------------------- -#include $(NITROSDK_ROOT)/build/buildtools/commondefs.emtype.ISD - -test: $(TARGETS) - $(ADDBANNER) $(TARGETS) $(TARGETS:.bnr=.srl) -ifdef ISD_NITLOAD - $(ISD_NITLOAD) $(TARGETS:.bnr=.srl) -endif - -# diff --git a/build/tests/DispOwnerInfo/banner/myGameBanner.bsf b/build/tests/DispOwnerInfo/banner/myGameBanner.bsf deleted file mode 100644 index 3c65700e97f41fd8d38ac832cc197d4074c730b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1176 zcmc(f-%7(U6vn^X344b?!MiCcc(F^jRVPEl>by?7xfQxq*6Q%()!#|`2thd{J^ym@ zrQb<@z7yRjQ!1xX5QpuxN7g#v&Ge2|prtBRp$~PUq|ffw{LS3$>-4NGNE#5m^@yBy z`oPoT%R%UL1bd0yV(qcZFc+-!L>j!7`$DahlU(Rp3(fxZWOlkGxC~vX8oXl=UIk1R zyVoP0fu`i-oOVOBC9j4P`xA9wYfjcemtoaFuZYtrW1@#%yF;^jGrlqFrFx25?-qnH z@y+2nX1y%%;iBo9G_%)tm*0Y|mk@T~5-yysd4ISviOl`_T c?yR)Z8JQIkuTQ$%Zmh>w5Z{q!6}vrt0lo&4tpET3 diff --git a/build/tests/DispOwnerInfo/banner/myGameIcon.bmp b/build/tests/DispOwnerInfo/banner/myGameIcon.bmp deleted file mode 100644 index 0b2bcfd1d97414e5bde7b04cd014f3de3dcac71d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmY+BF;Buk6vv;KH9EMYKVk~Vw*+EE8WyXiob+du}>CM>uRy0g%k33iuuRTJWU z0;Qu9%BC*1=l`xX)|cG1zq?=Gd)I58xx1vo#e9r$l#dU26Z7z}7Q9MX6^rs;G_^ZA^@Fr?LLMR6RH5Q5117qss<4pvNE*DHv_ zZk>=jJ6e z%}ACPGYHqhMjfr97{axXJ)9^Gd<=u6h4qqcZs36|>WrKfZ3FNM*Q@yyk5Cj_Zm!zn2Vw jA#hK&4l&liP;(a diff --git a/build/tests/DispOwnerInfo/data/NITRO_LC_Font_s.bncmp b/build/tests/DispOwnerInfo/data/NITRO_LC_Font_s.bncmp deleted file mode 100644 index 297547321cbe7981a13eada386fff47a6158153e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 476 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 j{sAsA~#QxH&*E+8Ns=|!5@ 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 a)zx5iHCSB@R#$`7)nIisSX~WPSN{((+jjo| diff --git a/build/tests/DispOwnerInfo/font/f08zen.dat b/build/tests/DispOwnerInfo/font/f08zen.dat deleted file mode 100644 index c36ef4927d0d27af5f1b480c74241767d2796c7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73320 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 T?_=~sjDC#KPci!WKj{AhHtx@} diff --git a/build/tests/DispOwnerInfo/font/f10han.dat b/build/tests/DispOwnerInfo/font/f10han.dat deleted file mode 100644 index 8917e0f0ae8614f71db706c8dc281bd4a8783d46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9024 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 RtjTAh$!Fq!jg84?{tr$23!VS~ diff --git a/build/tests/DispOwnerInfo/font/f10zen.dat b/build/tests/DispOwnerInfo/font/f10zen.dat deleted file mode 100644 index 256b04c10a3e16ebfafba48d5cf67cbee808b11a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161304 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 ZL|-Y1{<9?duafA$OQNrqL|-d~{(tkTueAUG diff --git a/build/tests/DispOwnerInfo/font/f12han.dat b/build/tests/DispOwnerInfo/font/f12han.dat deleted file mode 100644 index 08bd466fee917f69d9337fb4484f116a288b4021..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10528 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%0DenHV#BcY2 zq6ZZ{r08Kqk0^Rn(PN;cl@(++co%h#b1nn?@;%2fkHm|k{MEs@Cvjd7rb;XEJQ5e$ z@~-Bdih6jMz)GDOo?K5uH$aSLm^SViHWHh%9nT|i2SZw*XE{RocIKWN78{7y2jh4i ziD^OByT4NS#MIbsp)|d8GSF zwNvMj?i;03=aKGPrTb2i$|If1Bb~}4oysGf$|If1Bi)Z`1eHg+pOjAJk?!Yto$tb5 z;Er@dWBewJdK3EK1hgqj6>T;jF})nJ(~*1A)cDQkBc}gFQX(Re-vZtTPi6WI!r!%P zJOh+72)|{DpvSa)#L>4(5Cc&y(AM+u)2}Rx`{RQ(x0#Qhep^mBL`LY;d8F^pM@+xH ztO#pl)b}`#l%m85zvFzw^b*vuJpMV=_?_k>rr&u!V)|V|Ai(FeX8eG2NpbkXw8Zbq zrHjxKyOof!=I%oTnhsahfo>z4;UR$4gZALOD$DOln=PV8yaE}&m)!d6sEM5150}vn zw!tT8Z?(7kDB4#MMwyAQPB7+g~kQ(@7ny=2@!v_&|*Q?1d>nVua&D|ca0Bu3>OR2>t*7 diff --git a/build/tests/DispOwnerInfo/font/f12zen.dat b/build/tests/DispOwnerInfo/font/f12zen.dat deleted file mode 100644 index ee38836d5d164023e51586fa41ba45e9de7a61f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 190632 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ÒkQgu55){<+?JS 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%0AfLia|MI85hpj*=$_ zVS91h@cGdWasIbHLKF9@$5L3iU|IF?UC#fm3aiEbkQT5Yr2VTBi|YLECn>;ag0m1| zzOI86Ql632l8hk^q-;6VFtD0sSzhtfAMiWu#1rlJBw!}`px;j&cc}K z?RjIc=?%iRH4D;va(zM1(3B?RX2h2uAuwj;qMuOd9eLUv=aaf?!2{o9HJZOB268)TV@=6@+9wgoM$IrlHdopd z9zU?apqJQ#`U#|g_Ef!s-1tMnQP`DIKWrGac4 zR;YtQZRHMFzsMc561lT|IAAQFbCC%K^(Y?fwcr6_D66~!HiP%shyvFh@h^~GU!RIc zEY6-__O*d&`j~>6kaOfr!QbdaiNCO8T?ns8jM;^NznRjb7y9d9`8n_&i>!THRnKcx}unxIi*o*q;amU})$ui}=ergLq z9>6bBZ`EB{M$isKhQK#*8ojtiy857YxcPy(?US}n(NDHUt%l8vxv}kl><172Z{$E$ zWHA$?JoElW{%s37nA<^cN1af0pnH{F0MjBDBsRZ&65HTLsCUt6+TB1>oq@@zb5&lIK8Ce&vGE1OED;`7_9;Qdg zxZ?XNb!*b+>gihUD7kSeg-21iB6YF@S#t6gOj$u!X_Vuvp!FK%9CL`~E*lWD!`z^x z;Li7j;Yq22x8)U5b)2-FmW^?(S!HgG`||L`laA^U@_#(7RW~TlH@1Omxlt-1cnw0* zS4v1oM2|5iqmM{gu~L`QKvo)JP%uWXhLa`iJ4I{a<f=ypBfp-}?zWPArt5-DnNR*`MW++CYKr5^hc17Z7l=G7+j0|(b zGDqPrR+EmS^=cpoklu7sS3MJRNrgx{IvWg&2NK@$<>LihcouDGBLbyi{(+vA(n?LA z#tYAejHVr`O&u(C6nIPPL9X}0d3Jux`kB3UyOa5d9F@x5xoI+b>Kw-tBdGsj>FZjNZPSF8{G#n^Wkiv>R5 z0oJsrv(!LdMF|;=vyht6cqqyiX=`#+znYd((1tn;tDy+C2T++|Igc{UBYD_I(vfI? zaY2#)&*p)gXZv7e!uYf{$P3SF*B37EHx)@7GA#vK&=!-ni$E~b$%YHeLwVROmA483 zu^9#Xj>a8FK_K?xbCdfFVLvq?#~atCuf@632)0}N_K{$ZXi63+f5-KO z*JXm{$nCzw!)C9d9Qqr)F5nzxV>+(5x4#m(^(lC!K@*`I7heo^lma=-c{D!_lj=9J zO;1FPsf<>qOQSyY%UatI0eKTgnK7)1GFXT2#XBXtl`Z#XNM6cY0VoGc*n?57>)UV1 zDEdzuw240@H`yEC+El`BQmjOC5-7?+PNG#y$PIQeM0&tz-3AT(u&WQOCTyR#!8W7W za*TO_-e@Kz@qa2-9L69Rl4v!)Skt$&ok#IozQg*JD&g;+yYP-qnMJ&5dIXQaC%6-q z&754!G{p*Sl{BcSak;&dcXN#u+oLx5NU&hRDW!pYmaGXXiq z_hEA&U|yicAkBNYlQN9YK=c88M$6e|3FN&TA;uMbV^$|i)Q+S!-g^piIhRAzV202sqxHvjp5O5 zwrq%Riy+sQy~NS>2_mOu9VlI?ZjDXIPp&?nthK1Ar56(BF5uf_nooga(MUuI;aK9^ z$F=FFsY`q$Pj8c%l-|!cUPnwhmhKH<&rJM%hZjDZjrg5HTQE1u0D4yns@;8*fo;yySKSbcVeCB6IaSDWCxQkvl2P zEayuc`FTo$wj^rNS)!~*zg+QhJA<(=gI`V7=PRgBa$2!8jI^Mg`z4)4tMb|zN+t9VocbzR7oM!tC;XBMIB1MjVFB5dePKOi% zjOeh22N}J9()<04+N=j)ZG>&Iyap@JHhwU*%QI|`7{ANYB9P{XzR!Vb$nFZ)gUd4d zBep5_C=Kk}&>_6-jg|tW`LUBX>Dz*R+s}A_{G>&;nRC!c?eV$d;fOvZtx;P9b5A?01Hc2Y7TK#xHDJzQZ8R&$3aQ8UZIO9HreqOWJ-;9bZ8Tpt*9_-vykb z98VkI$Hl%!N%kilkmi@H^N4KHx#+k$lBh5nm0Rvt%SSY+u6<-X?{Ju zmtfSi)QUM$@EeSC$+(3qS!h@beNY)2f7_xndKfK^v4kUrLhmz8tk3TtM;5*wmXTo| zNPN7?tOWA=%8m{9Bll|7hvPkvKe#@HeudpY@=dmwMat#&NAP7@&mu?pAWf>07DNGW zfyJ5ggN3D*fDe#AE!G|Bc-Rpv#Mp?|P8Ub5Xm22YZZ2>SITvGIl@3Yvo+jY(tQS+JoaPoMeI4i=402S zLs(70t~ROpF0QAR^aySMauVlfLKio**c`_CY^fz2%^wJ<(f#d-7dN7hg{Kl)^~bRj z&GU*2B}a^lU6Z}uT-k#!Zt^mkQ`AdGF+No0y%%pM)oxEOI-WeNsH>Wj1$pGQ+4@3+d&n6}KZ8XPkZ!CT>^P(1IN4Hey_-T#Ph#a#!+PfY@ij zxIGxQki6zdfE^f~i+vFMODnymE52BSOd0^NI672)KT)JR- z`}9%|vpx%ozCIkEU48m8ioT1JX9cI)bjQ?Q==kJb=)wRL^wUdpd4X}F4x1;2?P_fa z_kk6F4CJWe1KcpT=GHbEBa#qi_^=@zK;^2P7vE7fc^sH&s zYxQBw-xj<0uov&jU@YpADy-29@>;m~3yPNDi+3|}l1$s=CUX|MgCn}%j@auYkX<*1 z*>FR;M&=B6?QYZ9y|Yb3?l~K7KtI`ta(H7`AIjNa$B5i}oj8VdD16tEh7m%rOK7=6 zc=5hD`iZ(8R-p!U&f-z^>WNq*0lEL2*82XS&)l!H8dC#!v^hs)cV({)XBd&}3n^}uld8cYus}=9J0b3?4LhssqRgr&(3TtY?}B zG8#L40me*d$#u$kNWxPR$WU`~LTyb?tIg@@sLq|#+LZ*9(S5L!ipnWZoT-Mr7rU+k z$o`YilTC7!Y|XdgWXNn;qhzT$59Gj!d~->KE3k*z2~X!ax<=P3>g$UKPnWRflPff$ zDyh5loJcYab31f8q?Y&lcDu13H<{)zbHl!_LHtC0BO)=$P==geUwrVShJI8lVpsyi z-FjXM3gQ-0@X(2{83^{^QqndTGuT?$oB}y=GHFuH=_<)6d_-v7%aFE*$3=6xK&?&~ zS8$iO2D9KAlPLl@dIG&xh3nFVvLo50u1T;SMae*da{>DW&O2Km_L_v_xa-@;m?kS% zC*0AyA89y`a@u8h+-8co0@Ex`b``J3NZ6QH2Du$SshW#T>i~x~-y>=jfuUL;+ zJL7h0FTE$q)^79}YIp4Or2hQ!#gi&roodYPJL1!VYu&YWuDvOb+{R%uSGQw-;w<*; zXO(Ufvy#(t7P)ikMoX=>A{>e`c15@sGXPqLfVlW#v^#8+?)Ot^&RkVOB$09s*XECv zZid#pIY64THzEfWuEe}jg{zP=M@E-hI0L!*=mX0PEJ&g`xnFK%IZxtT46)zz`jmUy zu+qVk<^*$lGFxXvZce+xuF$=kQFDDB$WurobqDqVOG4vi@KQjYIvvUA^?I$THT#J? zZ91|ATrV8t$>ZmKq;=LO0 zd~IfZp4B93#0;@sbS5+Km%Fh|Za?edvv;RW4r#(!g)5Nf=t4`#Gxsei{UYcE$=zz? z_T24hMpTK7NmfFq4%c{)^KH8_(^aqC%_buWiJf4zWwhwDX7&6G1`F5jk_ z)cOQzUI406PumKD+MqMKT6L*bIV+ig-&3->nC68oSVL6flr(qgs`1X3 ztLck2r&-9;<}`;=sx6}8U`4n^BF&3YlcZX8D}@|pB}!#jjXPZo%g{*i+>D9MzVz3Y?TpfxL{ooP(WXBJ;sRcysEz@<3j`O=onK-Ue>X z4zIVILuZP2#z0;{?#x1OASY&})2MzW=ruF3yT$jbgK5aCP#;-o)0w~*)+?$Ghe$&^?CAow(OQ@xza3=6_b3!h9l%4b??|wokqb$P!M?v z!0YK!Wp$x5^ercp(3t0m1!4=!dChjrfo4m*L;uXfd#mX%_bMQ--JUdwnR=6MQ@r1! z38gj($LrTkra?-ik$gE`zurp-QmT2$9Mm8am3jS!EF@8jdaMTcZ?BV(YysuGk#aj5 zXLBMy3Vo^F%*AVAFv)|r^Df|Ov)M_=HKqw^GO~;Hd53RP zEm{)X6^8T~lQrEer?@?B1t+y@^LhB(iN_)D^l3H#f#n$W!74DnHAb3uZ4g;K&u)ko z0=X*jwsqG_-mNf3iEsntd1j27>L!ieD3RtpT{4?o?|S{!_F9WRXLIUK1?0V2E>5c0 zgNxVOD)2dr-nlge^1d#W!N{v4XczF0{A?{czP+E3On6tZmefd`w=RaHA^5{Vsl}N47%`BPuGmHy`iqrd{?1$nC?~s6M*7 zxGCnjzv>7x<+#1r9Rc~s_EbTxyQ780x$*3%Jzi8SOX5d)lBgOokyW#xOSnqRs&0ui zAKMsa^=zE)qc){nx2c?Vw0+#^s)*&xjM;;8ak&SVZZ9;2*9UBiDlrSZZb80Xtm!8l zuf+z)^GqXz3OSE(-1%e|xO=_rvN?IZz7D%h*)VH2#Ypoh1W-lOsjJ8xu~8t+XISVSNbX3tc*^=i_8*8>pVE+67i0dM9)HA}C1M z+L^FAx)FRMZH{kWVsE@Qzpk~VVGrTN+h)S*hVmk2cr^=z?9Y1H6i+$}mwQg2VF zDXvX;o4xm8y7=|&Nlwj}^DU*@N!vFdiHX;}^C894Wb~Vq1A#KVys`Y2 z)V1li)??-{Q&V~w$GcT^;&D9q_6F2(rr8dusn*xy^HR{aNur$ZY*L*mG*XfUrv-B2 zIMWpY`7Sx?DPaFugtTpH2h)6y5oj@1LI`7xh9@# zc+*3>ahm+cI2Ed^Qy1?Uy%CWmO;>bB5ovzXjT)0`#*nK)v;mxoF7}e@pKcB-T6vzi z&UjzfC;xChLP7*~m5QYDh$AzCw>76-hrk)Qe$VB(1DCg&1!)}Q><(%U6aa(b5 z)aJ*mU$6&POO2MPQZqDLyE$>K{Y#_~&|)ZguE7i*?U+?gzx}E==pnTMscs0s8@#$% z(_e2aEzHkKx**R^t_8gP)Q$wmZ#IP4Vs&(TF$-NLAc$F)(+KvAOt`a1Pne6p*CFNy78KfRlG!0kDVOsHWvTru(yJ6C z&i9f(Qg%3IwaOWgo-Am9P9$w9CH|^pgKAEy)K!ovrg0<2pB7+GH}ny+-?nL`=Lgy@Rzh8$Vm}x4*`|Q}om68s2w5jbGkURsZCC>NM|XP4 z%(kaeL|!OV2|vT$PYV9IL3PH}dak`M&V<(m=ygh!HVYvCa&nCpLu5cioa{mw186%S z|J!5NrE~3$qH=QGnY2}AxBuP-IjTyx!9SF9B+e2u*3A?Dvk7amxptTCD9*(_AMLt5 z>2NcBi!#O0NKQI-PP#%v@=w6 z7323Nx39af=p<|vLne%_n(cj?8p+HRNa3C2^sILYe8h}eiU1725Yu{N!Z zo`CxE1o+)~AUiqsLHnZ@Qu}8hNq$a|3~t7FGanw$i(*)8Qrt9<_+FpfMP85x-D;j2 zQ@TM7S2@Yum@`14d*z}+Rrp^4v?Xjh>xt}QnyTnN)NWCM8l7nj>vPYP9-V8eHRLd6 z3_2k9Zp1vEEtj)Z8Z)6hb;#xf$bD>?8i_kb<>QMD7!xYvLUKR(HW!+_Bc>!WqMe`B zB)f^sk(;0i=b?8qua<;5J}KO3w&+G^y+Q0LHe$b?{+m0A?D4Yz%01SaVnKv`Qp34R zvX{BdmbVwO>gob=!!L4%8Yy{zHLZ&_>Fvo(JukUCzdhN4x&j&67Imc8TS#JYuHf87 z*>=-Y1hUWbpi6h6$06>Lg5^QnSpc%1J!=MX>_T2Q=E=2gdw&4rz}C1IBf_qDo4F;v z9(n~a8|7|NaInlb*@3>|HD8+qm8dSQ3O5nU_X{c9XDye&}T`hdNDu7w zWA6>N+NyAVqCtz6npBVQj+&*aR?mU;NeFs9c)#^zRECVM!YDh4(`m7vtXo6Qm6Jyr zQ^X*`KCl~|(H@K9g>Fufj5Vh4W-+|U)kVIULQd3SmlN@xCOvmB^A)r(B`&_$-DzLg z59=~5lh_w>GyG(na_Qn0p{5PyhWtWVF6WewIK_LH8Mmo6kKCNSDmm?Fiw4tv%7_q4 zcYOGlE9B&*HEIwxXnL$mRadOF9k#u=F$VH7QcdXv-vaKOBkqW~Jpl6ZTJ3L4HE|;> z66SW+^cAu&816z|y(M~mAU9}pCvUH$gxrnU#*XBMJh{*TF1Y#5s~Gi!5y1xH z8;Vy*$g68vA4A;%c?%jPGy?3*DCg07+bi!&7~}1RxUNtecj)%grWDBedfl7eh3Gei zX-}aPPdVCHBh`fb}AMhJM zn=(Em(!gJ=A>L6Ka1YzNt<-K^Z+tC$i&3NdB=6v@PwMTW6nCRB&FdP22DA+#Wd;2a zJW!%VuvFY$1oHaj1$y9jNB@Of=!t*0I8)#j3z57*B*e&*B(xDHZ@gM~?>n3U z5Cal1e?+e^Eay!kS*L5z!aVnac>uV*r$ozk@@C#qRU_AxlyZZezG%4w0E zM2d`bH?Dn@A4F#`b%vgHK;Bu0Qcfj2V}s}&&>9tg%j8`v1@`UCD$^gyd`7HGHh@c2 z^%w*aXHb$zOtw0&X_bGd%Sc&ba)U{W8}n*p_$<$Tg$lrw@mY)ce; ztdX`C`#eBC<&coHEsHs#)#x&9p9XDmFqLS7rTEJ@S^YB0G@qefNAxs(FzhI_V*bW6 zo-Vh~GB@atJiWq8$*sduAHy3eb}Z*0}5&(Av@Fp=JqwF=}Q_x)vchH+Lzw|iCZz| zttib= zvcjNkK>M{DAm8dOp{B8GAJ9lHmF3{uytND8pr&i&AksC)y{4szG~Z#p`XfZri&-Dc z715)cLLlEA!#DyeKmnrz34PXP>^f5Ly*``MeU|!tX~f=DZ+9k(nA`WCpe6SGcch4O z22X+>eY+jEgG}>-{Qcwdh>)}Kx7S&ACADf4{vhp3wjG1?lKLo5kP)4 zY+>hyh8qd9?zI%2GS%ehk4FSniqL-e1zy>RaV2Ju>YoItPZp^dQDK3ax*<3DDPqBd zJdpx#0?EJsC6CD&DbghL1fo|8?`@@j$`bf93zl6h-m3w`Y%g*;YpkE0QA01~F%lR2%dVs33e^HdROZ7f=J-PGq;h+VzZ!x0< zMj%)aFAEOn>okyG982L{l;$KTP`M;4mg#+FZUE$$Ccq@2mvKuiy=Z zvf<(6-kXDEdXKKsKz==u0N`ydu=Y7-ZpI$AhG<^;3Fw09oem@fNG!o+`WFl;enOW zE=h)>*+l+4Y@IbhvOHhTUUyq`@)vxA+IZh}tm!4<^O)Irr1|SuszgrG2afes;nHX* za_!%R8 zwvgMuj#EC;oOvYgb9)7%0mz24unj8hJk1c9X`#*(v=MP{3b%j=61{lb#K6 zOG`pujycIW*rBq?bwwcCxkli9Fr1b0rnO1#7_KC0bxS&qmV!4?S|8R%r&FZq^|G_i zNzN4XUo86QfOhvNYol+$T+Q*i|6EdCx(a3SjH!S8eIJ(w z=%L~t_-A0|#usPAmv&+&Qe`y1C#;@@Ch?9_sxL& zR7UO=jw-}m0EK*K?1mWP2Uw`*B{ z57edIQ#`n~bgQ_w#9Uo&h3V^rbI=U@C42CtJ)jG6)1S~=jnP4QOO_x7dtEui1Zpa2 z7daD)Jdg*bT8?&wDZXDCf+wfNZ3TE*Q77KOJl8H~If%P|4z)pz;CaKpkYXzeK=%9k zuxylLv2IakJ#wIuH*b{SsTH1`a#SCD4B}+bA%{G&H_!X^u1Iru2CNwhMRLz>kMMp8 zwC-Pe&?E5LheRJlk8RQ$)E(sYLmt@!dqSH!gr`k;3*e9V#E{N} zO=5%E9s?P!ltX*Vg9W_nt%ml*OUFHO0J-o^0-xLV6v)Vx2yxyL0c4a&Rvf^rnDJJi zxAbPAOF$l}Ag!v!4%rr)Ep*AvOfy!6G)*|c(xf_*LjrtN8^SvZKu-8_j)qyiA`cuG z?Ug`IdSpnm6)MPj0c5gSMr?71$4`J+RPqtyd2gq4c-5fHv9LnLY$j0#A07zKL4f`SXkitHbE$8;6DGIXs zu=VwER6p4xl#NXIP=S5{8+>k0A(8>T^j0{8C!=AX)F|hvKFyG`>mMmBDl9^@7h3l( zJ#9MjaI!F2X3EIZJ#rN7(`gUeP759s2My9Zg9zj9(OY2%BWF9TXPfdso=GGV4#Afj zcSe{tv&e3R!~uC$CAT)z5*!tsNso2y^K6$!98GZtv3f9RhurlD?nGXCj!$!>kO^-K z4wN|01Z^cC&n40nJ{(ZeK!<2adSDX(@;oA0@i4}c_To9wo-DRKnpWyd&-b}KoVH>u za4sc}$~_DBQF^J$gq_I{O37;O8Y4|aq)mB_?h_f^Y1fOpS<@GK#OJe@WmeksMdfmW zcC$EmFovxt?lCTC zYKKKTdU7{(IgpnT$%ID}_}b_LCEl;N1u+YNyqrj@KuzUhHIgn?*9YNLI5K ztVQ@s{;$fXl z7VCZKV!P1xCz~XYM?HczRh_|M)e7rABh>;q?~#XikB>f_ti^udT0NkFTp-deM{IlA zWY0pAuT7P`pJ^@%r(Y6Leg9<5U{hIx#l+SYkllq{35ax7eb$=yApUqweq| zW?w+wOiy=?d`1KURw&)8ht0JCkhf&QQ^_5$U2Vtd9F(Sd)Hrs)fxOj6S6Q9*!FR`7 zR!Jj}|IS7uSmhez#N24#8dkGdpSR5s>qHy4y(Y#iEnb#y6I)=p1A_Y~bJ(qJ(|0CK zYK`4w+jK4T50JN?)|+5cIj08_%w6mmTcgkFS|ab5lb(}3dTWZ?!Z2J~teBnvteOJy(+`V7*1a(2YKXBS5&Qu4a;0QuAmJ&L}JNHEDjh(7QG67AGN1J^BRXs~hh~^SLTTyR3=OS3-E5VD#xP@{GWx&!av9 zeJ~lvuY1HeKJ{RZ2jmMg#3KQEKrn({K#uY@3dhke&Jbe>V(X;G)L_ypjwP^Si&ISV zC4t^(P(px*k%@M|S~Oe$@@1q+8Apiyt5*z@8Xb_fufWGda2D92ZY=rPaJfETy&B&$ z4!M(U$b^@Er1=_hi(w(wxD{C;IuD*cSYv_2q@X_80U-w6&#hvj$aU=rr z?O8YphrN%8aj*x?s2WuFnPUdXcgVK^@Xbd_8cX`Yztedj-<<_Z2+A?X#6a99j^kIR zG)Clmh>s-w!<$a`;Az4GO_;qu60`OrZl!vXeEX5F55AK-lHTxq*?5{UxNXa< zHHQs--`bAJY_Swj)_(uW{D>OTRpm z&=%j6xM+5cA8XWAEazAA(kr7uu1l|t8e$;7#yOTmg(_T^9u(Y(W&FZfO!FIeCPie_ zDs{wgw}l9;UzdJ6u4ofdVx>N0+6#+8+bUB<+I~mh6?%{Ms2cQ=+1Ql`)O@zw?`H*P zuu5qO*1+b(b7YLxL>t$oKd>BHAxS|8W~J>Y(T#wA#Ce&7mZcTyC`w;kYzY zh?*yx@vKe{iH;P$bY_*jstDvy?#vLTIPpU&o_N)Qq{%YSM;rwIf~WIr_I#pe&QL;6%(+IaLa| z{heoqXhmBQV#bG53-t=$+W!~_1zDT1E8X0QG_11Ktj|Bo^%1M=gQUzMGh-nC0-{k< z4cau$8p-zJs;D{-dA!HMpv)5g@>_3CJRqn=j+vgJgWi*cqlUR^j6 zv;0acO!S;dXUG}OO78YN1$I4QFGrfK&=+z>%y?L|Uf>n?OUZKXIFY}qRHbRH>eG0s z9mSoJ(TOJRq&0(9BFpJzM_HN;!YKi{!>Yny($^EbxE(;8T2MQpyL~f44eqj zf+3?Ba75|VET@h&-AN5QQ;tI$Rbt#{6uq@32G0dE(aXXAh!kKnMM*LQau;t|CW0Mn z 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 S-?JkBnHBl(tjPanL;fGd1VTsx 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 d@|(OLtX!7gNsT4(VI+BQ#V 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

>P1c;`= zo`!AU&Jh6c*mR;&_sBa_Kb5y``00c`%k!`setyCw+fH~Kzd7{@%Yn>RK-^25qf)l{ zLT2-Xu=-$677KsL-nNY-!Kz2E-Z%aY-z@4R-`_M6U#KR!2)L_>YdYjse2y7ef&17?;C|JFLh3MU3mRaeYw;R>ytnZ%ls&zL6W2?~p;< zFEj+Tru4PBqmAS8DymRR66cTB!CF}#KnyY7DG&Qd66R{0hjDP3GzSX#8ewQ{j^EJs&qL>-%NblSR2Mbnb;;8W#<5u4=*%?Rsh zfcnkzBO}&9!^gr}smJ$Z!HCO?` zx8SK^Jk5V~QzL#Nb1Dt_;dE@d4uN|P#-9 zMl2v6P$7ynQQnVatB%lh-=>b{NFAnvY0z>E1a*elhULi3#eAD)Qa`pv>M-$6v;iK) z5puJi1ZN8F8GzWPLM%o;SL!2XjHB5^l{_(bZl24O0H$57;%VoU##zR~0~!zyN9wpHnbo;&cl2 z6cK+h+QNbXUT}o@cJRMH97|gSBE+{9c=;ECgCiwKHrib}txg*}3Tu6>qY3B4*#F)V*X{2P7>ZBO@%=wzEdT%2f`?({`{uvhFB zZ+hw{euw9r8czw+!F6<~bx;j-lQHWvF0fCrTAcpY+!R1`UWb59ZBb^?gzxA*vuFiu z`zW$;N7r=-vnzeJQj93P?$kS!;-#}^&v2q69o^R<$e%j;n6=A7h5Q`C52p7Z{8WVW z@GW$M2&HSyGj6G=#u3E$k0%Is83uDEUT(_>!Eu&FL9gI%<7W`J^&~;y!R-cCXd#?w zeYoNDn6&p^EYi&&Jlz|Ca86o8k=wHn)z}P=UrR~VRi|g>=YaSHts&8j>%}oRXIOl$ zV;|j4N`@A4NE|B09Cfd-4S!PvGPPeaD$^aj00pb_JcVMFVU_a=F* zUVq>fZVOo=bo^4SgKEG|K!}#40)tks%YIL;tvElIW^Df;1iWlxk$;MA+m7p}BiC^t zdb3X%ARR@FZnVy38``&y-oZLJy1g*|R=vF(iQT|({U9Bs%(@BMd-jUtVGqKHhxPOs z2+wVn0oXh3fj?Q4GETJ$)8cB$Wuz`Xiz#E0LcNd9#q!@f_t~@gnd&d!6&P zvk3U~7f6n9RpdIJr`sAuEJobo7FNRS{UPtxz>6BR)bT6KsSCMEcKW_0YlNsp0(}OK zk*2u=`8{|F9+ZMdEr|54mS7R<=?jDNF=S3v$rE7~>i7*V$RX+%w3%A3mc2Kj)k?1d zx5;Ec{5P#V!N!^c>5u~B;_ydzUynug#l@i0sH( zNLGv;hv+7b@1X-miM|WoGXbk=3EA-?s$dxc7?e6M?47JjIpXNYo>RMjnPo-6t3eBBvD7k zrUE=vNC(V*s|Q+;EnLSRov=&~hJnX8?OY5P{kuMAxqTbIKm2(h`8G!b z{0IsI)YDg@tB)03rBJvdK5*b^W`TSdaLT6g{AC2(8^yJj={13r2u_duil05 zzP=ur^8oRN+6scn7Z6Wf0!N7wbI{DwQ%zP#9dELAQLU8J*yn`lShsp)_hl63%;3to zd|!fURQoPcZVYd6poBX~*7_Z9iDv|_?+)*F?+)L{dEc}6);gcgHxOvy+@z7{cpH9= zw69Sw{*&`w_7*ctSm`?*@NusK0(y_g+WrCGf9dT-`I79X0xs@L%^v`9mgbP-X1$g< zBJmSz%H(5iXpXF-%TFP?&s|k-0pcBXw48HVD9vTIW!7ZSAS8^`QGvQ#A6&69YM!=wT_g4=pyB#6IL zXo_Gsu6S%o-J8*#fMQTj)PDQ}?Lk)`2>V)mE%Vf~7VmeH<{Yu$P{(IPaiLcw>Jat` zz8qhMZ=;W27^IkhQV#x@A$_0{=6^|0!9|WuH&D?I|%S_ zLG9F6vP9y1p}VyLB1-8o{*EtUA8=WmRbK)N$FP_8ox*jx)OUK}bn$laLxJw<{X`vL zWk6PrG#d3(4&BYN$5EWTj;|7g>N7e=aIf>wqO)Z!i#iJttunIu>biWb!@UI%M|G0p zaos3(n}|ZF`0UZp1wzGhwhMso zYVp$-93cKz{obTw`az&OG=+F&g#EMuWI$ZO=xL{DGESOHq7VJ#*UWfj_A)?RRqIeV zg`%cIVUVF@D3+HkdsmY4MFAkbQz5|15BK%EvRZKVElvRhVzE;zs9|5`K0Ny;h2{9H z9g_^p6N-O3_m_Yeh_qsyv^#Upq&=CxoYW{gvbIc;md6)&&qdtQ&d69Ny{v4%NwPX!G?i_{-i#y~YZVJY5cXOY^9`GH9nApL|U zE(02RbNi&X{nG6(+<{r|yp7d?{OqtHI}BY;6TA%{pR`>bwY+Ki(Zx9TJ6$xEXeKwh zpU7y{BureqY`_U`TR==#Tglijx2MHV%$GAK-DBb=HDqeDg%;op0YoW5SQ>9N zSPsk8SeL_-_Q~c+Xy@L2#g4g80Ad!a1K#dg!AU$GpB)#dNx?MkUf=Yxxr+c1$?xG1 zEFp_9F+{kEcfn%0=g9?66-@)g?F}5or6qk50{i3VksRdXNXKC0rf?P1k2wMCjyUi! zCb1A&2g+)R4?C7H_=bjE#Pl~;Bih%J1)BK zlCbAGJ#=SgG9ISst`0d_&I*Ew$G!wa8AZPlpatdxOLcIpCAi8`0`1Wdi1I-Qv*p!b zfkj%CQ?hgzgqJJkW@CU()I!_P$@wvC6PL}2+&Ho!>GV~O%8N7ddErVTAD;ygAJkZE zyxp?I@>+2$Wx4B|7sLrf1(b>HX-70xbTXX-fS6B`O;O1=sFFchGw zDuIx*iAo^Ee(xFajZSN$R_@$|?wdFS zBrE*JIoioZe~**mzOm9+?%LQNmxa>5fh!CbiiPm%L*h?FE2W1hUFY5Fkx@f5k4ar0 zc9~`zoSt_7L4#?`!GttKeKS?lu3Tt3vHWKJCsEEqbkXPsM?+&-#MV~MLHwL}?DS#Z zvlsxK2ya0}<)@K-1i`y-%U1sgsS)b%vz0^q29}%RNNka9Y0NXztlWl}X95|TBY>z- zX*sf7@izrGU}sSX5VsN7EmEvR z9FO#(n2?>z)fk!C+9lc>k>eLpU!u`i@e_ks0lh$RYS<6K0$(yNEEVSzm$SIOxR(D} zY(X6>$s!Dru8pHgMzL5rk+`80zYfts0m1T`n~*&?jxycALJSd3^+-I;BOt(1J$TE` z8raWqa=X7h&Kze>Y8TqAoCo)6^~LH~O_F6fT(KoiGwNy*Y#6Q4n86e=n6U63;)&$u ziZ|j)Z`ho~2{5PhB$HLAzD+tqu}eECzek(g?Qi2z#-T+kMOp>SAVe)2?VEn=M!tC5 zn*!XD+{NOXi4>U@5tLC!9qHBS?4+KKdrs=jTkGC0J`>53DFb2+Ae^b8N-bHuA(JaK z<8J(qYE?&30Xx?MqCq}dmB*jvZR7exia!Vl=+0$|B?yRhh$?x)T)ga}t}O9w(ULuC z(&ft0LnA(R-Umk*Ewrq`2^6BLXhkI!27x^3uPC%%?&o9qfW>KXPH<)gvs^2fGdGl- zF8&zb%+u+yo=3c3OVDxxKKCsaekBhN8KOp!7a%quqApZH(Xt{;K7)LukeyQJMv~MZ zU&}6(Jr=`CLvd~~ZgZr%5D=T9mMSF4CYz7CSPd5!AGdVubsXRGbdryD?wUf zLLe{P&>ZcZ&7?7b?V>ViZ_zg+7sMasJ2`H|(9v$CNXHhnge*-fo8VWh#yc>3O{8#8`;vawgR$m zQb8Uz@@}W~RtxHAWvh?-q*?&c4v0*qR6ibvJ5c9#;fUY|AKnL9LDu|(-d^`Jo_*LY zFuOOHgg!t(?*Y21-tMmdG<5ZM43AL8_7bAa4O#t%Kph5r&A#|~E#CLMwVw0yV?6_8 z6U)i~T6vi81CpZs*8QHr-8!re*e?r>-mq_r4=yJ@nC2nK4W+XiAzq8DZ5!DJdKE|z zkNP^j9Q=|lmN7ffF?Sj~3CNhyxeIix(MyGHM=y9EcW(yWX@`tdViw0H#)lEEDTgMPZ5 zsfBjKV|1T`B(EM1y-)X`AVX+9-8N}!cm6yoP2!*-jI8nSu{<8xFJTL1ecG~;y!5v4 zuy(<-g(v#a5orZEa#3)n^Mu`)0L(Od0iu&^jv?=$Y*Fmp!y<~)nIfFlQypEb4w8`7 z(~|n^9y?oGvg&3x&(3b*R)Fio!2+9s$)RFgf%$WMdmPI?*x7?QW%*MX4DGp4WY5vg zdl;=e0SZ$DsrJ>VMA6;gJ}Pe0*TCH63)YV($(B}~Q5uam^FID`&im1|U4%Bk^ zSfKYHy6za1H$t`_3N~pt!=t(SWw^a|9uW5H)4j4U$ zEt@z}f10e+5{XJZ8^I41JMiw&cen-D*+>)+NS%HSE0ot#Bd{Ue7-GvLPQZc|EuI?oRL~7~p-P zh*hZL5bDAhnT!Q^h_h1mAS-dC5T3rs=HvRV6+Gc`K|&7(`|%R>hxUQ5o=IxJy+$Yu zxF*)q-(l>H*wdDIr@U*tkNXt&Y_}{OVo|)CDT;UJ@5PVUjAi*QVcziW$?{MyE{P_6 zwuCqWoqxdj-0m|&4pc(a(x>sP_C(B-B76Uj4jIWL6-T9co}&}tx;yg^RaEJQom5h zTJXgbRk{+M>bv=r8$M(Lx9W`|4(ZVX(8NX!tBU8Cq5$3&GVG_rC03=YPjM0fTXk@PQ2;{vUV$&0ai=%i)RUAAA| z`VpRjf{5g!P-1vrd=ag@jr<6^y@$PKP@u!!W>A>J?k9yOg~RyIBYIjF=skw7i(4wk zs$gZBaSGA8oE56|$Gpw+`@LJ|e_HlbIeUby`b+REyQGJ2b>}+~8C(nO3%JzKM0hfg zTmqvxm3sr*4d;ffoO-Ggehp^)?0lD~_5xu+XaU*>fee+kmoYz!G3|zS194mLMb8(~ zo{{`T)uIiV_4k=QNDwg}LBB>D5)9@;F6_x65Fd;z3Ka2SWDrLV@d5}lACnPU~o-6!cLVhSqfW#4&p(ai_zH-%qxbiC)E%KU!4|Xf=aa(2D1>Y^$zTmquEyV~Zhi?(?`%ET=R#<+IyFv?;1-)fTS+5#H02EK< z4n_jv%L?5Tcym__SmBdrFeN;j`_z(EI+Kd2Y)ADAJ^D|*4|zN0_sx4A@s*!1zvO0i zpVAZ30ReWOonJ{7X@c+0JNU)nJB!O#dP?z-Rp;$6*!>yea&w(u3)}UdgJVRD5#Rp} z@eSV=T+C+|OyEj`cNgXrK-N`|r0@lb;TL0`+DIJAzXTWPhYLDl;$xb@(_t?3;RKou zJb?H&!&CM>gCPjmVkgj^!2^hI;kyS82{g(v{}YNLL#s!*6QuIQ5IZaXBOdc7O}H%R z(oP0a#ABpO5_H2(p#OzYX}ktDR)5CEz5Pcyl>xGiA#CsRY-AFIlWUZl9%3MPQNA92Da1g|L1KFItk*t;Si9V zKO+x^_#Q@+)Qc9h{}C`WdH8RrV<5sMle{zXXd$oEv~eHB{H_7_xi04qAz&$peBvqu zS*Ldu%DaQ-U}+b2w8`){lpn?K=PkUYYw{j>ieoPzinIpDIjt1LDoBFkZDmaGtYUPW zP{upnk*9E#fVge**`#x;%975k3hLa5Ej*_BEN{%_M=rGOiJ3BuAY7Zzmd@M!He${m zHn)*qBRrTo9WA=?!FP01bObS7XNWzglN@Kv!AWjptawy5IL>FbOzK*aF#W|v1To`! zE4*8h9Oo26@H{fu|5ZtF{I5(9Gcj6@=7P-zWZz`}MHXNy;C5L|qb;V}JlPMZpK}$Fv2sF@3Qf|TFUyya(>(&1BlxJ0Ta0ZJJZfyaB2fZZsFMt$uV z!Jv+}wiXcOWK%N&Y_m7i&$FAB;*Z?u1=;kmt16Qt!~0j446ZwN_(mU90HPd!)A#pRCOQ#GR@f z1Fb|P8pcpT*k6yck!n%Bzu6fTozqI-O_9(P=po;Jv0Z`(RxOJ(Kr>hi z`A1h3NfhBZ%S`t4;pE~q_zkzOlgQlj)3wwJ@-(4eN_~zfk$wUGze*kZ8MCUbrJcQm z=0Ja;zEq49_}wlL%fxxOH59H10%ED!KcoR?UhiVFaYrrLIy^?}!gl2{+!|paQNKeh zmhKR&#?xybjCinPPS|`bCs@R8pbvb)o0+Q}lx?xqUqKiov}{HOBef*8K!?TA&mtmC zpdTxdsishPwSKz(_Az&o2b=NLy1}38UI)agNKY|?Y$iGKs8{s>0^%qEq9zV;;5SO6 zbL`6K*&8^1Fk-|YeyrA$by!lsr0*4;A>L)Yc`bGv$xa2tcR?NZko*I)j(6cApKFlZ`qknZo9f)RuAK3ueB+An__pa#$ibv=N8*N>* z4n`|clS)sA?1nYM6Z(mg(xB*{BZ@#6v=-D6RIye(&uGwE^7)mto7p?&fg{VZVe_#r z(hm-nHQnM1qGjCDwT1-5yFko~yt*p%^ghB(!5v_EyU6!GNn7^~ut^e;<*qgv5cdmb zpwCI!lr3fHKSv&|mYZAF;Pxx+9<$f5ciqQ;SfAJjpMH3h>EA-QoxAj>ZZ2Kpf=AgK ziKT+4)&qzQYV?N9@M@=$7#<5s2dOoHERX-bAts$|f&u z5w40)3a0VbYE1%s@DP1N!*G2wYQvtbkKErxM4+f+)P?99qc8y)t)y+xlFu}?JzlOW zU}pnvhxgOjP>;Xjw5g}uoZkcL!p&uC7}uyj7pbFxxGltgP@_NevsSL3bF})6Xb-z- zupdN&h!z<|gFbH!&H5HlC+ysf(2Ij>6@p>r|%Ix$A=~*^GcD}R`rDm~T zLShW|wRU}&@#1CDyNR1>i%`cd)ZvUk08#{Xr~|DL3K6;DYAvlxJK?cD)PSA?lexr; zL@hx#UlsArsO2L9_L(3D2{+h7>%#C2atF%)(zTn8Ur=q_wn2@6rE8;i2HYCzI6&+H zPZ&_l!D{|im^n9bKR%HkB^(^uicwjQ2y}Gc0JWr6eufNf$Mp*WcyQj)>7f_=VvCSN z(w@3LKs=`3hViF2;32tf!ie$L>U4D1gr=x<{Y`-QxpbQ}C-JjQ#nN2;DOiJ+jytsm z?~wJ}ES0Ux0mS3#iftyEtV_Ho>c$>hpTcmuMO5qP(8GpR`he~17=5R(+qh@#i->s99Ht z`7aWVicRZjwB6wFAct!Z^lwXJ^yiaH*8X)&9s&gK9rK7`YwZ9adT_2Z2)Kd3Kl=)9 z#i3;Dn)h*&JU_;gaB>~wV_i=W28ri`8NwCO3wr4tKTu0_i=w7nX1nr9nssS=!*=OA zT7M%4JjSPr3+xozi{G%1ao*xT33{xqHiGpLp6(YCuMdha>j8c!A~+Xga4l(WiC<{E zpH9Mk&(8ThegI!DCI<1KZUMT7K5|Tq} z5HE#ExLo%=0Ek~J8Rmou|E!yy@on0?w0Y_G zxyTMl`@>6wfSzl=J5OS7(&t-T<#SSpCO(y}ZppD^u6-zq;{ z@hTt=Aqsg|5!Q#zGA#B0ohvV+9ECR#hE#tKh!;&dtD_8GoKo)X4< zgwsYsjj?Y+;0aJt$vk}a2J?_?*a&kY zV@X~~6*5?HU9Yg)zJoI>)m2DTpnE1a(`ciN@MCInj#p3}M=9EpE=89U{2Qm}Dud@h z*NiDG0_djoP*oKmUWI8rg|$bJi4p~6UeI7MLPBC(Whlwx3E~)wpOI1p<^p!|TK+g> z_%#-rMJPd-0Q>8Jc#X#yi-182S6NVm`|Z=gT%OfYV&L;^RL61X-DNluDtu+IsBrJX zJfFd5gsrs^K`od*sOxndpTOU`v-$&y3FTVpDuq_U<#ScP;VO0ARrnU_IDwwFaVZWQ z+=x(#XhpD7-d)y7mdegUg&zarB#qYG6MWnJf@81wkYhIw8H&i;jiU|Y4%HIGDdc_? z#-(Jp`@cz1xV-$cmfiWC9OLQo53MAKKbzZJi;*{K@5D!M?KB@s!{0#7O4)y}2&vJ%q-3$e1Bz4o!nKty&OU1=0NP zrn~9e5eSG!Oz?4_h)WdLf<;i!-z@+FdCiFrBb}&IxUCw z{MXE!*=vRqi|d_*v~S;Kw+2obX&R8*r+MKO>ovFIy&VxH+V3X*^gYtN2iht6g6y4k zF6|MtKqC%Sw?`n}2c1yu1YuFmDBuyz5k&4O99gJ(`*eLk5X=DF=|AGcSYdfS9O6Sq zR07B3aH{Nr)kS9*onq&I2tnUcuK4)JYAM{2d;SkgYWypxFjb_N`>Z4kRw0vE580mS}M;b&HN9=Ektj?9l8&gXr zme@dZOtVazOj^SAza^!_V`-*|I?ss3_jwX_QPwX*kNJq%@3I-`ocnlqKVl9SnCLah zv@v6(JdI9|PliK49|i2mK|~{0C11pK0^-wQ5a_d0qrt4`ctnxtD@X>!-&vG*r6j$? ztVVy2<{2q&-PjsS{rCqw{9u7~bFM!9C!5%uvhh;QG}nOmEZPeFrj^&E-aJt&-#l?m zDw0yM%(PvXG)+VE1R&c(Bu_wb`v#ULpzAWbi!=qp9J~~XZ&9^t5kED;LuB+Mn=RcTH9};5age;_!`ZQjClcd zV>k_ne{n4vC{lDw@qUWIzKI34#qWsLzmdh~@A@~z*rmwrZdr|HU52m>^xOO}Zl=@< z@_Vo-&6?r?noEYWY(`5$EDAH%^&f`Gk-rtg7902+o>fwMa`w+Rid;JC_+LaM*B~bQ zwc=*f(!7D*u}&22c?0to>$)Pq>#h)oHe3zkorZ=4=P!da9=2049IMrrt~>;W z+>E%;cpo}r-Gww`#qQD%kP#tNKcWQr1W+*Ijgbi4-9_B!^;gP@JZ5M-O=a8f|K3~Z z9`H2Jd(T~4cm5_&nC{!u_{p%B(E7eZ)Z~!+NV(!ZTW)ioThH*7L$cUNhk z6ti9`;OBOFHnEt0-P0pkW;iDNgh6PDm1VwJI;&{YTrF%Bx@T}LG-I9tnl-d?3i%kr zzS28ynSZj@M{yLpXGX^!44aA^4LIZBI}{9$R06pp9!sX478Atvf@~o}f1?>I;o3O( z{gNk}0}+b}M{xqofra}=4R-Q8=q`=6LhH@=ze3?7`>$7xMQjh2<*s|yG(kNZ(_p-W zlLu!QKGm~QydA6GJsYQA2xonhIW&#l>2sI4!@M04z7E|^W4WC?D2Q6957F$Df#o+) zezYWBfQ5VaoM|r9jVDd>lX{A~W48X}qFTM|PtLXiVy>-aLVs3q*4(VZ{QgXS zLcb+5AJ2sTm6-^p44%K+jnNSm-LmLUT%(vAd|OP0PO3X1nZs`A_Fz69nRCqsnu1h9&J#PqFTD#}%;1LOdczCJ`@Sq&A11bKPG4 zE27EZFHwv(W2Pn3Qd3N}*2np#IA}(?ee@0N4CuNF!I}}5Ba5k+^i^b$3l61w9xTl8 z-4KXu22p|UUx_1#`LO!E-ik1u*((;aHtFwxxC3=S-56w%T8u#>tiLVJV%6rikPial zPO|A8>?z{Kk^J;{TDcpofa?$9;hn|?W03`=xClC-rnsg!!or0==m&WV4e!SybzQVi=-Oy4 z{48b%$4O>=UbenML>-HVuLD+y<@}7Xj!cTLf%gyB?Z=F1`H{gI9=C<@Va&STB1K2b z*8&2150dagrW8Drz@Ay@z_ZUtfXNQ$xp zbyU%e@?p#vim|}R?B$Db1AtA*QMR_#SQqe;K?E=1!GRgcCOcTnW`{q*H=>Rud~Vz) zybCuD6r&4k>$1RNAHPMc^}Cm1#_;?955zJsFgNKhA^a7J9R=F;tTIxaW*H_Kj-Zw0 zr~{g~1}*;$-)=-9Ti4=t{1)*V=w5*tgFS0Q6FwnPKtB*11$cTL3s=&tM|X=EQ4Zlp z&Un7T{jzGX4%B39GKOH=tBxhQ8)_iGBR*IL!)3Nt+h@aS#^}jI`cM3oEC9M!6Xx*2 zhFAD4aT?>sK^)u2q7V@V-7}<>5LzK?c-0~otujo$H&VwLzAdh8d~yWWli6xv#ZX5r zFnWM*Y-r>g5nr#xNPZA66+g`XG_EBM2oH!l2GP=>dLsh{5Dyh^UchcsAPmhiYf-W;B$pD31E;a) zHrwDOh@Lv#B!`6Xf$U(rN$+72uR-H&22YY?v%;PI$S{Zo)Bp)tpc?!1P5V_FGYj-E z{R+vWPzUq(fIL~oUY-jGj$)cHdrF`1j`$!TwonaBzU~*Cwu`nczNUH2?uc#;{?}Z0 z6Clt+V5f+P=C(Fln7qN=s2_8U7a$&hhEWuE1s;Li7V+e48f5Q*EhKyjP#CT^!7w8``6CdgA~2PQ-VXwsakb*Z>OCkHYLn3)a2T7YkaR8goLocixRQO?EYz@ zs*lRjUlJ$SE%piXFZr0wF0_Z4h7;(=4j~3Ico*dS&7#hJ(MGW#T%Kb>k9b6^l~Mrl z5W^4T8G`mDY%_r-bKt3*Apjo3C>maK*XhlOb{`|15*|*K7lwAW8 zS}hzC9|J@ut7AIOIf~&Z+F|?!D@0VpYN7qoMPsFy_d=$y!u}?9HX;GI)s@9Jfaqp2 zZf!kDx-p}e58ii!=SwhPapDU7PC)c9T&ElnVMx|i=Rb(s0r{1%{}5?TpFj^?h`ujF z4?5PiI)598M{#+GeiK&fw*dnF9@G)btB>8D|{}S~5 zCh<~zE9H=|wdP+^Jxh?XbA^7ABm-hU=!YY!&$c7NCix%GtOG0Y0>lBKnPL+;5vdUj zHEst#qWtjpV7jDO>|V}3VACPqR;K%f>lXjr2ie+kl#4*T*Ir~V^L+rT?ozQxUj&WQ z9JKNb<_mKH+n!7z6MPV`)O*m~OTP)3Z1tZVsuQ>Ovz}@O_bp-2bA)}+Xfi7ld&o{v zCQ3maIQ*UY6m>tZ|A^e2>uLN4Y?u-9wsB)_V1x0Io+$3GFlYq24M55*0K@FeO5GFn zlAu<84f}tcsH8>kfgoFHMy z1V1|$*hl;J_d{_Vtzgq*XTyRX1vCy2EWZcpfUN>r@!Q+IdET?-Nvf@a;0MGX$);De z>J?nfuJ^ZO*()_0=)`FT#Gjz?1`iDiqn=Tp6DRG-5;y7(5)J|4W#DHfTiZVXPd~M% z`JVEv^z@1=)r&G94&yW`VO9j-Lu_(>nEV16w?+0-MnD{4V-eIWBlbr?$KXpv)Pcolj}cWjlmx!$W@OgZKVFE$@XY2={mH2!W|BX|ec9;1#3jX@o+lFc4&IP1jo zI86s^-2BiySVIrNv18GUY*kepN4xV!yYe+i=NqBDXS&j<%2Wlil6~%{#OFm=DUNZV z75ICA%R$@*;w>4jWA}s0VLOra^mXd7z+qjmx)F%_L4QHQAc}K^ms$s55YZ3pO4@Zy zQ`CKuQC~zQ#@uSAYNlSpsXpL_ClIrCB7W=?Y6lf$mR)orV>WPB9ziw|VxS3w{!F7& z?JiXL3T!WSAf`L`BpZwV(tTRt3=QxIpqO*`6ps3ba#D0=|Anj_a3a$V34sq{k#*d# zb|8BPVI&~lU_GULD1fkW`TgE1?^ERwy9?nTfOwOi=0IA9tYyJQQ$v<{MbgY=>bx_4 zjaoT_oy3WT`t|VHFxc1I4bUa6_ZY-nSevT5;VsM!@DY3=uoZlvfJ5*R_wNZaBQy3k zY4>SPu{em%jGki05T^vLnE8r!{}1g~5iy4`bHo`i-$I6C5%00+?6qY%wyY z#EoNa1iAsgLlD^el*0SC{Sh0BiRJ;-qdM8nJ}2BOz9x>S9|5nr)%gdBgC);J{1?4w zUEXD_AZ`z>H%<@c6+{q(>Ou-2-Xltvcr_5Gza&k-NqEEjOYp#k&q?CLWbFxv_hD7| zH^p3fAF<3{X8+DN&sXO87orhJdP#zXNcTm`A!BZH^pKr3bcNsOlplW$51S!hX0Zu4M4aQ_MHehK7bBzn9Ma%>69jfEysjzg{s+yzXsQ=MyZ708 z?b+T+-^*@Bbs`w_8G|Sc$l$3wQ!`~n<4*XsH^Flb z)UsW#o>7;va)`DE8q^Ld)o!EcQL=}2%io1*BJJDH^`BvtcLpzuuuHX{0%tJCcg*7w z=ZL5DcL^Rqe1W|W3Iz@Y_Y?3A%q!W$XazX>2LbU<6%(#gI+WX|Lpa#^Z_X}ctR)@X9u>5n3Qnp-ILUbJZ>2I3 z2OE47V9%Bx0+%!J1McEK|0l&o#CjBuL>TnHxI;H%){DeH;cgnXbMWWmJPqQYFHbk} zabYHqO$*jA;4SUU!^ATHi@bJet6>0jT%~L|5>?s(!HNz5}J(S;Z;?fF!Evj78BK+IqebiTO7M{Txz z)qfVJ0-X%v>wuUUp{IoXxFvyetn}@6ZxDA2_rr_R4~SxB58PhANIWVWwzq&&`iu9` zvZtkIr9GHe+zES1U_Yi1hk_O6rd<39yA#g8NY-x&zQl`wCF5*AtZJl?m z%*67cU6Wz~aXZbWG`ZnRn!%~Asb9|b&2yCrQumlPLt6sP*c^8EKt==lwD;SN`?9=F z>;{%KMGp$oGgm)DTBD!Qutq;dDw`4po~|oXeAgKE%5)d&ajUD3=tM!2;(!|rK5?&# z$a)$9;Q@{V+f_@qsl8JbNJv22BlEEy5M>n4an*OjtviNcP`Unu)T2MsFjsQwFHYT) zAEx*U9`G~R1FeaWfAn}I-R6GsjdO36_65TwBhqJQEpQx{$2%U7XE@FS!Y9s!oTnt% zFCEZdvd_)GlvgtUQrTSnWyonROL{=eN_bfiAnaDZDSlsa0fd7UA6c9db9lD*ge zF(Bq=%j4wHj&Y{C75uE=DFF(K;BGUOy=i-O;8}a_$cBBbMq8DhW9Dl4_r~s+66=R1 zk>a!}3M4LE&z+dDGrE+~rg2$ypL3&vC%Be^-3m&P&TUk%ddmYru!uT`!ZKG0xZ;i4$4vy*#o*32Q*p0CoEPG4$j-pl;1)p%r zb14-0in+6#qZXb(PIJmQ?p^pdrxK((7Q?bf$nLr4Yc9)iQ0{fKaQx=oV|TCIJ$CQP zy<-W&uM=W1TE|=FjgEun(u@-_f2;Ra?@!LADNFV)qE;#*_CdeC=Mpy|zn3Bau$2mes1h-!VoLt6EeG-sau$hq zw3rQ883SyR6gJvwzQCb{O(xXo@QV+c3LPbU!A($(Wm+ap+yHq{&k|Taa8zOk;&r?( zIezj9{{|R$TRB*&VMB2}OA$qlIL)Huqd84VyuvLAjn*PaICMHmHQ7WzmT@r+?BY|`qb&WTMZzxH6 z-wMCzo_jf*wGdo~ra`NkhUf~jIb8^CgpyoBCPkg?snzrcabpnslW8RFN@zj*=yt$B z!=T2d?5U%E5C_Mw_|Gl6EI(59J71xuW#0m2q>%AsBu3 z>WrT`VO7zymTTF3S#FhE{y!ns#a_Xp$LSCbD(NOnA!1T+x{*o9+}0Os3lN35FJ@W+ z%s~)YVTog=iE}hSj_%x|vAq`ji1<2qHno*T^3NWODtgdr z%=ilNAwzQGy&>loC-q|s-8~Q^@0e%i;=7%$;4%3@N2lEE*vgI2ycWc^>}iT{pW4C@ z387KKOwD{_;fVTWF-?GYfUKWz7Q>=v@f9dP)e^_u$c;dOOsR*(xdH^@bS}oakI*F@ zt6hg^c%SOh;?wL$0kM_puyT_IoXm#R@rh!dv`;aorDZ|SLZ776RC%Hy72md{) z`R3PhmQ>!VrB)tf5_gidV{Y-@)bO*%pp;y4Xg z!DWL#A{9M&D3r-Osfy9cj>+L9Xd=1Bif}gM1{xG_GdeYrA#3F!=9~$|QH79=+{L6q zf=@L{HU#ht;$f>Z$&Y^gseyh4pwS%G?FGJ zti?N(97F=Fq8V!k1UCvxR0SF(HEEA)T~ZC%{pQ)sHA{$UKSF1AoHhoj=W>k#hgP)W zHj49W-C%lSSqva{tFs;(_9JSSuwV0x1~*&sH_bK4SP4Mv$u^HQ$C)+eW#Mdmr$NEp zcbbS9HnFIpJ&#fyH(->N7@vf(Y87xs@F>dOkvfvBv3q_t`B)P4>YS_USPoB)t1-Co z;0We>F)`W+0(P_4F9YgQ~+%@oHxyU?02l1nGa_DC5C}gLo)J{eZ=moAf z(hpWg7aJ{Bqf%pqu7-PndziFf!WQcmd5fRcr5pGG%{mwKBU_H(h>t z*zk{b!xR3|Qy`t^oPOsNSjWPbo3x0&T6r?sQ>;F`&9y=d-87P})5!u&djUV^Qo?l{4oxq^7%Cej?sZ5Ka%1(1&zQ<;LKOn$$YIanO%!?6mkL0-P z>%#EkfK|R(8KuOeSD3S*+lmb%Rs?yHwq(bp#x13DuGcD$mE&Yhs7lTOjsXG~PjMwD zr>Cc~`8Y^D<-?jS6`Gu@i09DC;T`3wRTJsyGuTl##l^*5s>sUD(jzQn%nIlLP71Br zCsXfTO8ezmP#8qEo}GT`p$7NOn)hyu(q07t7t60Qdce}>_;|cS~;vf)=eKK>QG4#zm~Cb292)J zRp@tS5LIpy+e9lyTdB;fhNPzF1#8RL=D6h8Z~Sf9h-@^nQ4`W@$LtW^v(}oGz2#gvm98$%p*S)?!dgliy@DC5Cmf4zyEvQhaiG;T#)2^Uv&$%<9yT4OH3tNNr^GPy!ARVSjAKUA7> zO!_qKQ1-fb`Vlv~-+ofcRrZ81&1}Ib9V?(#%ik4q#^=Fg%rzmitkJ z2K^};@mX&`hT#gtfn_HUNv*W{u$7ZfS3QV2US_zCo>uI@+3-CFYKYOor*U$+2~-#m zhoh8k$u&ktuIgG1RIUzEx+B(+%&iS*KR|0P))3+A3IEtP1DE zXq$0npMjUn8-O@I1jht@PfYuWvV^jP2#!?{j=hf46tR7{<^F8zUrG9hz2A&lmRqys zzb>OWJ)vT~cMCEDKwqIgJTN zPeM=!!ggR@1lQm6BS*E+!nOE0d?NU1%r_EV`fsct;C@>DGoWJwH|VtdvJj)Vi?pz^ z!Hl`B??vePTWsabF?p2|>TrTuG7B2LE6;Yz7Yt9|wmQcl{_gcXr_Sk+`S>3dPjPyH zr<1U@#0Sx?oDz=U*x3lDw7=q+$?&LD&wU#2WZeE3uD>Inn9?FzG?tl{D_|%W(-PB( zD0zsJmz`%)D(LQUP66MM7}g@NRAqs}#e~^@0c9Vg>+f3SVLg>&4+sav=Z38Qdy&&4 z%h$)7;B-ot&OZx(ux zhojk~tJI;64>MYFTMWIr-kH7Cz2;us$=L0N#|_&I&AB@=9`oaJ)^i?f%jgGY4*N)_ z?riL-T*P2v^YK@I^OS$1_MOYV%}p>Q#C*!73Dcpo0nL(k;bz43T%b5cqE0hFJvNv| zJga*O6zJK6Re5X8rs@npT+IF|$xWx}vREs)jF?l}Qpi@%>b*Iql+wymfat?+;1e%u zg-R|bMgNMn2)v~W9{sL7m)W)CG$20mZ<+F~u$9}2e(W*q(d~)-R(eW$YRqqQcV)Kv z9{|MPtg+(;;>=nJt3Ml7C6$_;iB}2BtnLVoeN5{@96d%2A4|>7Som1dybqrHpZtKX z%Nnz=A9&hACn5Pp_Iw)QVXlETzlPKFEv;R82MV5wK|cBKL}73enqX*~U5yi|=d$&QaT7;@JFa?;_~e-9fT!T?ka;tD z-hS?noiZSB8l`G-jwl?7*-1P<6<3m%MEmv|C1pyxp_tuQ3s%HY?Un(7oy;$v; za#7@C!Xu&GBM%9ZK~)m9{5LQM_Gwz&h;lGS+{F;Jh5TMI>szYnto(NJ83fx&iT$_V zJo%WQi#f(Ye5gMrxpLqES9J^!|6w~Dcd@FGQ^Lga$BR{2oHtAO}lh({XI z+NaGP@l`+zEBYdr!aZE@r1nsJ=LYqDdqr-^)+K(Y)wx>l?U8FW=VLR3Bl;GhHv6b- ztojOdTr~+(Aj#8Y&-`e~sUd- zup8*sn9lI@`wU06EIKsuOh+~HWa@&kWVbOvoS1Dk&wI_W z*c9d=J-BcCkexYKgL95^4OH`K@Cwvf6Z#<$D7v-(mZIgyQOEQm{@%k1KdQI1cjYY1 zM@Xkl3>om`YR%eeoML@5z<(5gqn9gKj}iN}S$db^kmT%E&MrF)h?#R=uH0_v9o6e< zU-7gIZfArc;a!kT!>xw2v-dgxQ49}cEhxVBHqicz3ygzJ9=aR)N=&*b-3f*fhPj8U z;?wrTWq|t}?8h?f?7q^{%zIz9WNP`vhnE=s>$hW<{Rm=KM%W6Sn67nZ*w2Ccj8KQ` zCt=@g6Mt)Q!rT!HX1?v0GCtrev2P%1!7*`k_Nk0zs4LB8k0&ez#!~()G-%S`(Hv6x2@_6t49AZSc-K07lKAg%`TGv zz6^E-eQxY1#I=gKKzA|y1+SLwZAr1!kfb4%B;4APfZ~Nx(n?F21##TcoKmZ{$gmXL z)G-w%PP^%x`{^!DM06<5dE0bubJ9zg&N)z~o3N7nzt4LTif;d&&q>nuo9BJc^WLAU z=8BZ+Yd&}_IEE3TGdDf%H0OVd!|10tA6Vzi5<9;Pu4E&shpSt#yAiPn#yt)n3+(7< zm!rla7`%?wIjlfT?jT}cmVLjdGXy7}DCOk-wZzlw)iIZoifYP6u~T|42XmE5LzR#W z-he)aSkJlU1*xcc<`2hNv(p(s=KfG!_XlreEmy5O;M*BJE3y44xIr~d@5TpLF$Csy z??Y=!r1qSPcAqnnbS4~Zu-M8647PD8zdvf5MdLQf?2m2EHu+f7Z9uH9=5J1!`HAq8 zS$Mtyxp%lDlV=K_OfD_`1Tg@P0MV$HqI+Tf1Mu7bfJTFeS$vYFB4Vy<#BOVFO&T$6 z{->*D=~3)HVX=z%78dLa)t($J>UXA$eL4I5z0s$OZqs$@`i-f{eS#4?rKi`<2aTo- zPuC>Nba_dQ4y%~XV99^HRGRTbLjw@a677?*5_+)%G3&G&$DN0*AnXOp&YQ=tc^QbC ze44f|Y%p96-Lt;Ja=WhPvZpoUW}h^VvsO0^QRdOXwNhtkQs~S{`FAvZDR+%aj+668 z^Km=tXVtXglr-4l_1>J4F@NFonv}IU7>AedF8=uPfz~IMghD?Aq7^gUe#_jPH8ot* z<|1+2oNnT9;xp9TeSV7PF<<4MZF5 zVa7LSz269}hrzEsl@-B`4O-E;eR5wD&B^O8s_E!OHBDB8W`))f;v1OhQX*yzZ~82z z9iXT^H1><0hz`KtUUb4)H~ECF zZo!GDxhMsh!Q=VX{PV`goR3+p(HTH&F!OVICcTl{I{*HLsh58|eqj6)mnS5hyd)Y5 z4b;JFad2Z1`u*e+<08~9GWKh_Uc`Xm^G{dsvs%{O4a6;$jTPez=f;g&u(?rNv{_q^ zJspio4krr@op1&>X~FSa?VMe??`5|$Z9!*g*OX)WMH#>7!CPTB4!5cnN3p|!1Vr$& z;*D2M$}ZPgavLkXv=V+3K1Dl1J6fM}9HNUqRDhlIq(kM;S#~t;@ZJf;W*`oQ4z<$% zf8cn5e=dzUWO*))*aAdnsI!$~n!|sFymgGpNuA}Lmd?gb(gX}{CEt~h(pu|y)6wU6 zfFdLqg-O%PaZqlAHUx-mq|qRYA2P*&Q;8i~?e+GWS+`j=O`2-zh1bT_avv?WUr zPavxD<2KTa;7OUKOe6_=NWSV4`>9#HRo~PypZZ5PSwtX`_%X_n7eOfk>?XcakK3uH z;1?pFlI5v5Tdb}`4BZl&+!j4neH&=p;rRgDbVG4Ja+CGj9w_c3b7;>A%-tD&+&TLL z2=ENE-?r7`x^ecKEf5ASy%+)S9#lDR%>xw}}NfO=Sq!{#q6p|^M|llHFJZE|Jwlljz7 zcQKBo`4z@oD|A++ii0IV`HxL|ymNv07KeO|s{Y24wC#jN9NLL)C1tTxQ|s>*vXSqV ztUakGM#$!iaZD&mML8d>Q55IO%UXp>V)CX+&Q@Bo(mKDX#uo#kFVmCNX!K;El5Uq| z)X%uS2ieTKJkKL1T)#AR_RdCaXm>VOddHO4E{xlLc>M2$akfv0=P z?t?|grB`TJ#hR)PjF%4d^~Kd$sK>s{lX5JV)y1)`(>?hf%7PeK2=5!p;KD-=xUec@ ze|=Vsb#c?5y=9<*I9JG3BH_Ojr@LE7pZ zHI;W2pDO8=Pu=ugFSYG{_Me5E}}f zXkoryS!Ss-3d&@@O0h#FY~|NphHE0M;scH^14q$HkWn?`fYvVO? z8g^jt__Br5{Gi$LAbO#jyo4g=NGxI&J))z^ZFkI4uu4UIRFCgp=pTsS%{bOkg@nSh zU}D}Rvi|Y#Ri`YLtDdkNR8j%GCqA{r9zwh$Q~RCzS9028g`jbWVqZZY{hHv%C_w}V zXgfw7(S`Rik)le3=Dcbpz#A5b9@g`z|IpIXdO2Z{us?B z(#^Xd-57k7A&|Yb)W`h1AulLQ33{Bf?rGZ-AjD&wsh~8c0WpW#Clpj-??gEW&Iock&evy zF$2qCS6GKD_AVl(?6rzC2l?xQ{$*av(+u+yeaa@;B)8O(46saE`qTt&3x`#h<-7snscdg7 z&ezA^#yBf)wFDLkozQ@1bl06g{8ZEBF~A=9?R-Oizq2bk;lB|7Cv{4lO46JD7T;sD zDM}!a@y!B_r+Io7&YfIKnWJD^GBLGPqwmny;MVAA&3@+VGk@)luhrvc0&Ht*VQGSl z8%yiRk{4dM?U*w$3$QE^gFhE~C|1LE++^LF_bSCuH9Ts(FYjZaMubd%@E1DSIkUi` zPZdZ`DQbhw&e{Sb5Q`qy^^WVUqW&;l{uIX*g7XUHutus9o|N5^#`gCW+c z!Dq)Morri0a}SHt61Bi02Yt!ui~4l9s;CG3N(bkU0@$`p6D!0fBy_qIv3x7AUgLa# zAqvEEgqQ|*o@slXnA_k<4j+D}E!u{Y-LWca+r#5h75Ekqcu&(vInlo^(0HB?tcAZC zf<*<_1}{mC4@|{xYlHl8zE^+O9FlIp(|c{Qs!PnS>TZ1v;dft~a>rF!E$J*}Wz-8_ z&?j5q0SKQ0ZHrcqyk%2_DzW7<{dmfkHiznQl$X{@S7Dv4L@(3t((9(~tbA{6JA_%a zdRV;y@nRYwRmm+f_OAm4?Ul7_-{XP41o}xJUec#p;Gu)roNGy;y){$dtJR{>v(IHj zP(A4kDQRawiKFx z!I$|X>mIlgBEG9WXoc4LlBB7J)wx%%zeGQm+V&M*S_fO-Jlr>9OkR?l3eS>tklNE# zPBe~xg&*jrm!+=Mv}(XzSRc%xwtbb+Kn%qy-MZc5caGm#P*=&Vr7;d`j8X}R-|&am zc7dl#6}L{h#B=G|DS;}!MbSfhq@P>128h@2EFx0EfFEn|B(Ud_s!}a>WVFOpMjZPs z;~4g+;1m9@7pA1H5?axt$f<ey4YZetzoVv=eQVYHK!0T|_Xc~Gxah0$t)u#% zH+5HzuIybxG;W#8QO1}x5iC-JzncuN@9?AY#EP@w zAk$XBGBEPFafvZh@aGm<_kWKbR9m%c^5#kotuZj(av3~WT1NFcJ?^qmAl|to)e27l z_!OWAU7{Ipo^rm*+H#(^^Ybn_$y)ziURam9(hLjvn${T4p(lr`aE_y%f}Ei3pz(*R zb~^65s+Ut>HQ0lDzX$e*urHkJIVg>IUI5}fgC*?8=`I<$-`JRc|KwyTw>+93o)m>e z@2zb|f%qe@n|P8RrzHHIr4Rf4OJ54?UiB(ss=Qiz-HN*Uw}AMQSh(VNnZD?E5pVvg z{JQ*ASG-kMn71eI!F;c1SZxO4&l-xpJ#q5i=;XqDzVJ#h6QF$MH!tDjO!?T*!hQDx~u}&cc9X1XG0xY}fj3e%a?UjHyzVx&oaA`j; z?0^LL75YSq8DAorra5nE*1ibD2@XRpy%JzGh-Y%3?U=A*3$q^^9Mq(kr!m`SF%LJ@ zX6?agXAr?%3mQW?qnmWH4!MA#39){DYuKt@k&0W}Y7m2p8yx1azQAke4*1f-$25lV zoX7lhFn4!xGzX1jrD8T_qYV2%!G_OiA03K+uAwoP;3W81&<+|iRoX9E6fYCUPs`oV zoOK%zC%L<~|BZM^o;n7{_P=9dc#QlK5QXZa92*dbb4BsW>D(up#Ta}g+#&}{b=x%i zEiKwNfcOwk3(Xn}%xfEM7K4c=EXnr?&rCbGVRqJ5AU@9eU>o_3`tm-2Y@XZZ&O2(DWGKjcWop63 zxmubX{;nbaT@fWS`%u`iQ|sb4ihzwOaf6?zQ4=Ui;eIIBtCf)eC9>$iyhEvyVG=Zf5hFLP)mJf{&hpRn{<9xQr6qBy9l zir$pj?W~Q~=}rLgA5GeppN*N*sFO(X*b#^QrS{6Kmw_17m^*$VQ2YlDA_6bu3S@zl zD}GeqYX2+objZtR@ks^xCL=75Z|LXxk^ zD_F*GHM?I#2ZMeHdbLKVzjs+Q4$Uo8j|B?iCt_#|?&+3KEkb#r<5PzK`9-0HOCtht zvR@XYbVjD~IK>YFjrau`!E}~P*@P%w)KZzc3cZtptfnDFf%!fvi@ZLFgn~$&C433x zSL3Y{E4DPE9t*R2;z6B5>B%o}J`=@Q|1TPgP>)XOur%O0EJG*mJY3Q<>o5o?GUsGg zdqayA#Vf6n>ZCf?Dg;7ZB}bf*5|n3MW%X7lRLT;BkO0FF;}qH5f~beSBo0eP<&fDb zR^$+3sp`!^{tD=usD&5)@x=Kly~6Q0alMu#0zx2~viBHL@g7~u1aA*QTzJ~L|JB#O zf~e2<-Y-2H(BqprP{ig{&6W+>88@^{c}Zu~8R2pGfAYhgZuvpE+tcmWIXx4&%R1Ys z<-$sm%g!m#JjoqFEq8c#T>R?28;FQUjXjor?>%neqdM3!$Gi0kN_2~QDNE+g71UHd%y5a;xu{C)Xx z4`R9vU9Z*Yv?h--L>Af@JGlz89nbIph#P3#hin8{>cTCtV0dBp)$r>P$o*o=QPUTJ zxDoYmr-NrH3dN{YaKn5?F=&3habkwA~qEa(B5$9($x*8A-Y*u5ZeDomn z6%|jfjQ`xwYSe>yEk#8Qp1~Ev7yzrsaadL7K;*#P_mDF)`78^odbCe>$s}d!| z;JeSHg4)Q54xi?2Sdwx>&1nQ-RNh%2vq40Q*xTGrhPWxi4|p5}Dbk2KV${B@P$_Hw z8xhbfJ#W$>URQu2S~3XYQ00W2c9KRYsoHVGQ-)~eyqvcX=hjjz@}!q5m1;31F>RFO z9YiVX(*N%izl2YqX)X+uFln`umC~B*C0RhUr4jfZw8yX~593v}E001G2E_Uch<3_y zFgL4~?Ji4uq@LA1^RZ$L!QX?`0 zSKqyW`ufH+qQ}?+E4sU!r^589hireMe_Kjp|CTg@tYlCUvYO)+`Wdnf)3T@C^uG{< zl(+_tA#No^9alD*r<;^3-dpS%f(8I303BaTPHK zPXH>=FRv&PI>}yUMo+`&f;)le%plMz&}Ww;>L}vy?=0VGIoGJR{*H7#hyu>iWx9IG z7l6GMJqvr!X(2#Sjf;_fG#eqpn?%WELcx zHMt&t+7KK0X^Qmk$J(lqcr^}Dq_d8NY9E6z*i)$-LdP|6-c2p9uo z%c!<4`mz^R2G}Prpt0Y7p&rn$8etI?X4bZ_we5|bt+@n#YAFS}we zvLxR(`D5n1uQa{AgQZGbLmhDYn_-Ri5j!L8A@MNuV-{hWhWks)O zn|!LwHsjIepD$Vp#JwsFa13LSzFP+keg3$zQM0f*L>jB1`v@U$D^g@zVKi4fUMpb* zNX;e7FM-WL_p7Cpc_tqh=S)6PQ5RV?`7PL$@3F3G8DA}e#&;QlpQB7dNcuw5quw&v zJ?Y?;haIpK^{oM7ze?kZl+ibNzp)$q=+1u~HjL6NcMIbA0`WaU)N^y*niLWqocvOS zA0E&CeE$_EBwg#np@)HZfFT~L2qN1>;pDfS8&{kV45&|i(c96&1#bfJAR!FgvJ>TU z9yC+XV?!^MZ?CWyr5Zzvh^G&6?8g(()Xr#}}Tk}*#E9N)xaWks!_f( znFNLoP7Ijq4KlP8In!g>8tuz&PJ%C=Th^Mia>0uz<@;G2WY$`*HuK7H-W+dCIpWoL zHEczGSc8oS)@`k%&Aj3xu57a!*LvuXfc<)`)8FY&`VaaK#t!5U>#C{oxA`lPtPau=&C5VMsv>GM zH5!z|#kiW3--ZinfY@;jjfTgBKB+I3s_CPEC^d+>25PXupex2?IYR?{mJ&y7RPR&; zu`v-l{=A%3h=Jk@mOvGTHlQ=d{6EDkzwkh)w6A@1K2K4-kMRsZavr`QgbA>dA=H5DqKjbZRD zZs@0UN+KF6E&AKn5dQ~{;r4=p&Hq;Qrm7!hrW{7&X^QTzF>ymmAw@BWgI7Kw_nW&i|4-BSxt6S#IQUpA!7PuJPFzf{kJGq8%yhg4!>%7T@pZBO-#3pIU~q+kBm z{M|L%IxJV4{a!yLdwwllF)c^4<*!IiSCgtS*O)uZY7fOX0{-Lv-j3d^i9kHZNn0cq zr&``VGh|t04akTK&j(C_(k+8oG#U;=3Wq-If6%`tw#Uyd_MY-hCq%Zq1=_ z`x4a@BNopS!>Gg|EF25_-}U#`?ClUqk~j2gT_2C=*%~kP4V{4a3Q09)HAz7*LvTaK zz|*MT=fAt=ENJ!llQn%EY>X34M&o6!Yl|Pz*2RFhmBqdf3R_cwy1-k(J=-TS#4DN< z_`pu5TM;lhh#2m8XW^8$@mlI1$GL{Buj3S`4Zg0%fDZ(=P$Gcilm&pb+^a0^xrFHZ z7Q{cd1T2UUPaJhGd}!OC4*VJV4G>9Yjg4msa0`Nykhb^(I@Dda1;;obeha^RoZ{$wwe)P+)!C(mqwP8BsZ$+YL$7DCkxXNfZb&6~ zb)2H@Fjhh14fHY8E+7YNsHrp17)WksTE{@w7AA2XdXr9knA`IGU#jhc8B@TFne-zP z9Lc1I-qL1mPlhz8S=Y8?s0(q|ySC9Qw=lJ(I}2;k(Ay+GW%DtsdVdP3HP<*PoAY8%CGumfxF+M?dtQqEsU^f94h>PfGGCxar+PHT@%a z+8%s=X%3!&Tlhh!K2*Q`g8)ad@3-$JZ>ga_soGv8Zqd5u8Ve@R-GbF`Y|H@hXBw3Y zQ%n2{pWOyNhPY628*cXAr6aDt&vm24y752Fw)5ygDRAnog^s}c3msdIXO#l+7f;;m zqZ_Z-4SSNc&{pFe)(BaHWQj2JfjZ~UPTI6|d(b~fT7Kh=2tik`C_tQ`tO($?6nSEk z1pA!&NNTe=az0{>oZn>E{|AV{I5G}p!-f-ny2q4f_1qM0DrniV126-qq!nlgHmSN? zw`UlBVzAjNh5nn$9g7|{G%V$~M-dD(6$ta;_`CYOyfh8_s!54*lcl-(MbH>g)bQ=R z012s^`D8<>%q};D?&gLP&=h%~0@jN`bFW7adoJA8Ypr$Gx_O^b?uDU~93n+SH`FWi zN;_R2%e$gIhyc=q++n@0$24yM@mIu|fCVJH0AS&N6(YE|CJ}?1-BCM3=jSpDdfmO?1n4xUCFxmHZxm-jm4{2hyp+sE z$wC4)S+d{~NSiS9aXJzOCt%`sostKdM44kY6hN?9>hGLC&f=T_VRPB!mS{+R4GRR8 z3s;b%eex#~cE5ge5%iGqqLRuW=2&JWk~C@8Y9~?;`bRp>1mqFs)AQ_Bdz0OI+KP9p zeV$#j4v16fdO(vU9ixl@Q4aM;%3X4oOC9@&;1)x4WD)jV*k>RcLDL?2Ii3VIM)USE z$ew)u;?C#DQ=rNHBV#hi2CIi{*T+`=dMRh|AqJj#C7~2eh1pC zDFw0e5$oY1-lg`!e{)^2)8c^WFnlb9TqmquQD*s)<_E1}Uusec)7gleSw>CeCfKrA z1J=c;>2mD|5NF49IA#I-5SoaF#)?5VuUbn|xN|foL$`uBs#Mc-Jt)&xwd(~$mga{3 zLv}$rSg5Uqm~{xR%j zrLdlQfn(J6xLrxo;S5)+2+~2K9wPdO0U4J*gN`!=j+Fr61J|MXAx)6^G_p|)H{C5$ zHVMC6B%Y*y=G{!%;lhbWJNc`>Shvic_|ow%3a9t9+W(^lE5r!m8FxLf=K}Q}h+on6hY4 z>klu`6n3l@UqI@Igj85HuJ~kYx9vN{pWF7?!&NSA5fA}2hh5c@@I9iR)?H-H_&l0L zc2_Eohl42Pm*RS1KEMU3WI|gHFXlQW zk}h|W4uDn`Y{pSvu9M;mXJOqRUg9P_orhbiU_;5@jZABFO>Cur_4ol|DG*N12(7;i z-OPaFhmOY_KPfJ2Z3r~-2lZ|sYTYuV^%9qY1_e{Gw%Uf+-}QRWue#l<@#X+=UFJWT|5MGsg1G)-dt9yy?T)@cc>)Ud!yv+ZGsHK5T?=s2^}Lym_X zjvbCvfNb`5@OOenG#k54l%nR%fQ15Rz@8p7INr~mr3q1aNCzH=<%ds!I- z+W(2*@Ga!NxrJ)llAE)ARCri4FbfW((LzK=*ajh{A6awYR509{o3j<#d&I!}uBaCp zs@`DHu}|00iUKi!=m3;oiw-W=6B`$9e1@GP*WV)1}6UJ$n$QOzS=%ls4> zF^}4IJ@EtdY7iZJuTWVDJ2GgdlC`Qu3yqg=q&b!XKR^jlR1M+6$Y+qWQLI7ut_X3~hk2lZ^)1HgnxByT34jJ+9UHhxE#z=ovTI~fBhLeI z%aqZLy2X4!rt5O0AzXHVOixE76(B~=52o{_x zP7%v~68`}ZTha(?fs4*-kWHK^L7-go(aWz?`_u5&i)m;xx#LQ{S)@znjvL-~5e?K& ztHquVb){8Z-SrJ`A45ne#mn~MR31ciK%yS8F$DEtiDV?8L#IsiC+zu$I|$*=zvg=+ zmqT1of99m&iK~&YhU1Ke_4;`l_|mwp*18G@iCbsh4 zFFqZm?8wmY^hpnT`lY8l1G@3b>*(9NOLxxrE)ZRW@Qc?@bH`D4x|343`*YmLPup<@ z2uM58a;OKqDMqb+xw7~Td#N=!Q?kOYaR!Z-Zsso*nZLgQx)81*XHR?UE4jchoDbu$fLx-QzeEc#fwL zbtkQ=N)KtPkyc76L#7G?E-jza0|Pu74Lw4ZkYrK{lIUP(SprWD8|K9c!WOpYAMT}p z#QfYbuB+y@8cj4=VzJ@k8z=a-9OZU_#!i-dl2-Paepk(4R4OU5x$J|yG{L+D;n{$= zi!^C5GzABVkY56VY@{)_PDr2khj+1>vR#U$+QOBmCh zLT5BNtB4#RnnL z>;%4~P1YQKx;{rgt+yR#!eQk1$RG?lI=_-fY;&XEmwS|Fk>ZE%$sl~)V95mJA%O)E zU8Q$OU68kP!|?Y|X%GT^G-Fl4Nr(>QA&z}#41vZ*z);xT;VLuJ&jM<>dsT!juxQsf z)D$}nY!X2Wqc%Nm@5|7jXTjJ`HFSDAG1f5BSkL8#?}vm!S^J6~^6YFrH`}zG^7np) z#&u>8nWFOKA1re7r2W&F*IBjbs%o|`(ucSM>OmSAi+*^RUv*nJcazwipgKnB5k$178PhNI<= zlsoGSFjEy6<_c?o_+bXY1<-P6F)8XPF;}9iR;^yY;AJ3wbOAv;Wm)|S_8a$E4qoVm zkB=dQE_RN^zM>%6&UP0RXLI<841#f^yl7bJntjf4aOP7b_ow^%k1s~3&&qMqe5?W9 zqUx9e8c${rWaS7OV(dGn1vdo6h4{pg#oh2v(g+=!y&)#cw$S>X;XM#fWoW=RMmxc9 znW5qBLKvcAE$WxLJUC|$|1^Wpkp82G+u*sIeYzKMChv36+VFppq`<#}(Zwptp=CG@ zExUu(JIYcu{B(u}2RS<=E!9AD0og@0$)XYUOa_7RG}@rM`2VWM(D2VP2o9b@n75a> zy)eD1bB8Sc#?aM}eGdOTgYaO)(MYodtYO>mjGtdVAw8mgL5M()797a*AF8R^+wsl~ z|1v{^`~gg`Rw*NmHRMc)9=&TaJ?*m@1VUqZlmq4#B=HTw`mF$lHAu}3#IG_4@DX-| zv)`5svwv?}WDCyzOT!i3Mj)OeMD!JsR#H7USo~yh1xK^mTu)||#9jpAFd+gx>WEkK zM4&w|uPP}Fyy-wZpD9J)Bt*ye@jeJSyg^DD;aeD|_4bG)c|2$r%wZh!HL>0bDvT2tbqR>Gdng6Bbr z>Ag6$?MsC4_aGmmV(}_*POHSL@y_n*1=N#&t>pXov%gR8wga~BFMY%dYtrFYGNq`T#PgCBBlInd zLsZk_Dni4pNlx0;&_4NYvI17EXVN>RS5<_>iC=mlW*^^MQTer}{Y{3a>Td7CuFo`~ zRC6TmMk%kQYYL8OIIQq^r~XN|aZlqyAby*np|&`8QGewTxD1HbiH5(MT8mnZ_;%r` zRKy#ZQrvD?Mxx!^{QPFJTuXBnG~Q%1z=KS?Wp;cQ`0^lg=?^J~5rL2Zr(=8w3S(wb8<9Oa^TtnmK_nD^! z1!{lrgWG|3xUrgLPc9Jes5J21S1c1f?@6_uBX~bTz1koH%?-cH5Pdp|0Zn=7`#l5l zP6bgyu9`4m{07=d{~=uu%$4yj@}F}hRY@OYdTI}PPes7yW=JHdiXIoFEFHPi!z>FlMl|T%GV*xR`X~3>cB(x9mZo&}bOVuqe}AQF87kgJ*&|t;f8>dQ zd{~ujoy=Hc^N2H5hWLzpkFM`4bI@Oz1ClDX;De%KoEI7z$A)Q5aU3CywTC({!Ju)-5GF=GdN=cUAG`UU) z)&@)YHvP+>@iCq&4n5S&YG=7A*V#VuUp4*voKcg%@#^wl>uwjj=M*$>|AqL3NA~Ad zmT#0ve6X`9=yTkMjGepqNA$FMAioEb{y{g0Gyj12EVAZsBvqty4U^=ZA_OFNnlLQO zNZyBBMX<&VGp`{gl{_twW-$dNHFA!{g2HbqcUJ8R_k@{tNgxT@r|`VjhMi#^bc3;1 z#e2~%RPKe`Ps5)H%r6_U2H-bC8Gb6e5XIjXaUffXDs?(@Q9XoMqqq;bG}|J(!c&D7 zu}3IHDgPAITKFN)z)44hiL{#cQB>g3L$l@QoY#ZdY4%|Y537$KT6o!S!QRbW+q~$S z`CjT{U!-Yp7wUni2_yl@}QF`NeA{F8GY1Sq%T1dJvO| z!n?mCLb*nW2BIU-l?B9?@HDqT0)$%(vYIN8IwD7bA41+hWNYfMbABNe?!g%mS$!&d!q9L6@gMYYWD018 z$7(Jz$67#g>*e!KFN`Dn@+p z@9r`5HupMr=6-D2RnBtMLQdb?+8cOGk8|b7d|F3%9v;_&6Dqgfon5MVX~J~n49V!X zu-w-pe$;e_VMp_G&O^C}Ooz%3#Suq@#$4+Tj5=_A1o=G#p#nCIcF2>;1gp@2D6Ns1 zk;ceU!&!p{h^uvy@=(4x|A6yA)T8OdD*N?P7Vsfc$Pj7{Ia9g#R31`7`jBHuvA4w= z^pZwmBtS9r4W-TS?9E+jI$I8Pt6p(b7gx8?*d_!RXHpE+&DGB8T+XDF^Z&)u5NL!A z;pTUp{kibZEXR?97a&o_d=S7V&{#<45T~#0nC(X(4fLn~$Jf@Tt5pjvUYAozhDF+)IF10vaZR zp}E=V%*{2K%F7i+uXi|#i(6WPcnTnv3ggk3{Q8s)rBRyrj{gXu@RIPa!`~7o3l<=1 z5p4c|aKL=vD)R)-)=nHHOEpI)OjORM+m0KlV;oC1_v2}kCS)vtj9hd~aul>~3I3MP z0gZazXKFUc=wouOY?906xC~8>?1;8fF6M3^mXQv@+27W0M-=T+XeDSKqSSE|nw})R zBVj(7&oEE``jmcvt6 zG=|BG42b272G?Bgye{{+sTbn~d90DW_>TwNf3hVjx2W%Tm*OtCuy%XME*B~R~{JI)LjSvIkTB@IwdfRRd@OhoT75-wvw?1hfgb;9p4Egpo!bk-!b9<{cH) zxgDlG!?=GDZ~j_0)yF{tbHC zIjL5@_#=b9ytnv2+Xf6ztbBN7P5nQN-^r)h;b!u4b-uR#j^gd$dO&`y0~w8BIfD$P zVknRLSbJesUA#_MRbJOzSF*}fS6-*A0#lU%$GUZxgn-zPp4T;Y(UdHOw{Q&kifH7k zdlVoxVs8g;^EOC`fq*3f630Z+1jXou%E@?hZMxhRFHT!8U}Fobn*6$Abd$W8*?T=sc>&X4k`33v4+c?}B|uxAhTg z$XzDCguhs#k1m#h*aA=HLlyS6HMT=j?4_l0Al98XBm4@Mi-cej2Z7j{cS5Lh*0rs& zzcfWxR%p%dct?nYS7Gee2n)pT0Rg?o#k(BIJL6tyc*expXB)h}z@n>x*ba-EE@!e0 z5kX8`S;}e$$2dfr(P9@^Nm}9&#JLg>S7JS4h)l6#hQZS^EiSatsxEqjDgVHA&VCvQ zSj(^xby^)!23X9Dz_3SvCjwTFezXg`tDwoFUE(KU%F=xY5S2)F`MkBYgXA$r$e$y%R!f3|{#t+&z|C%zekKDl{Ylfk}Im}j|Fs*a?y<{=f z+8^lWaV8wOGc)tsYbY}f_<>Ui`HnH3Vh20YgLWBk4q#qqJsE2Q^59_i2@f+G1wi!T z&F1v4f7S-6WmyEXCE5iv*uI&x_ai&elVKCT{xsHxAERCDl>HH{avFPBv)}>ZE(G9; zR9MzW?3<@h>vQmFk6h{vkV2^l4^i}+Oz0q!*@@bjZx}f7z z#*cyU04z^ZK=cdG3q4nS)b@a_f6CjX(`7@)2Vy;J_il`M#kU1B5POC0yp*&1=9E1& zwX6*GR+NQOjlYHeQ2*FRe&J4Ped4;^x)fZemLsmS2r?u0u=zt-AG9k|f@QEk$F80O zN3pAi#F)nZw}l6V?kf^)6YasvTFPf*FSS%W9`2325ov&bya>d1F7#6xQK#hrWRR5D zx#}Zibo?t2_X?w8w>oa8@MWj0`i|3>>5>uTeiZB??WFHRWCDlfk8Anjlo*)PVh?U# zCx(`N<63{+`n>P39ozjBkxS|&tDyf6;=4??f*pBU7n!QhuHSN_v0hL1kUMI;WmIffchr;LKZ9$cr5%%2d|~m$wOnhR(kGjLn+_)`m6D| z?sOgEOdxgx;%1{&*c=4SA5K~$4@2V#V+p!e)?HoZ6X#Fy-E(!B-@IsbpqeaIMh-EZ zxjENT>82ASzNPA+*gK=~2x&O{BED^2b>0h)WoVc+birzYS-XtgA4T zIwtewabPdmyD{=U<{lPo=2*_)!KyvOAIpIq*~LXu*;mQ1@exk0Cr= zoK`u(X+8bic+XDK2a+~nES6vPNL*+64 z5g?wrfWW^jM)w*RH^T2(*~W)(X9EF$53R(Wyi;vi;@ibquaW=zI)ZVEgMZqbGI2GH z{imsp>bRr->9|WrkrU337!ruaJP}+NdB&23T+hh=Lzi1&?@;9O%S^+N>!VkV{LCU4 zD;4B{gH_VAZc?u&c_==3i^(EfE=fTAyl_+l4T4Tb77#ovU&l&i_2))@VM!X3zS>Y>uBIY~X3J+UrfRWdq|WqQ*`?&Y zJo2lrA~-Jd>=zKv`K96%%W1!jvR6ZIMe$p3mn9``KJnu)(UZ{oRQsNJ*B5>6+Gl;= zbx+Y3@;!@w0L1ebm%??LcEz9PI@Q~E0Poz$5&dZvf?^GSNU>|p7D!w2?FBGOC|Gj^ z(?*WGKxg8zvaGC2FD)xWY`IUhuu^F+WbH>|mm4`svG!tSc*vh5^wJF*a%gsVsphl|G$0*%TsRavgmwB5y^D{R*(I}= zX#83$#XVZd?WT7fMQKpRjjO7ndZlR`V^7PGKCT2Bxmg%PUn}KhWiux#V)dNrISLj( zMU2de;FB87l>8b;UQvEkYh6_o^{#S<40X8*j#9(`v8-DYT+Ad_Z}Q3| z(38=k#hhLcLPNDtC0Q<$_PnL@j60xE_!qP1d7Z>0OrCsm#R2(%{{VTnjJz!-^5w0w zMHtw2oMf+7@nn@1K@uzKTJr7!0(s4+aa*C?fo?W{thdpQ7ZD{aRppOFMfL3QdxeZj z5kkVfj)IgR5kLXC`_7!Z4MD55uv-{;haq@Nz#XtGg_8}vYUv1`YB%k0NC73%`J9w7dp2$o7qn+2<{C1&9)oI7PPTg)@f+lpv51L8d;2me7` z;B^2wDtm{9b!PRpYHhVv0pgEwSoz{nMc5|O!@{~8w#l6(@SM8EumQoiL{ZjrZd?<)Iu6 z?7dZAfj;>Gxv!*e)0^X-99Ia$U*g?3U-8zE>lof~I)RltMVd;L_&2?z>jvTjQP=!u zUYg>*<)KO759SiKI-nnBDWp%}Moz#g+{)jC$BH9zM}e}&n?Yp|gK-J9Fk9!%tFblJ*bYtl2wZ|G_al4Vgu4p5in}8UOVWxwwqpm9C*lOeKNyJAD z!D5?3Og@2c2LcBv@DW}St^s+VB)N$jm)gY1wYRRcE}UBvrBV{Ck6&c7G1lj){{wMy zrr?T87^bkOHb@3{+$IFzXn+XGsX55e2gF}Jh+>2P7^Dft(U@1co_?JU#K+{( zlBSWSmibGX#@}6^l7EP5ua1Fax2^~OZ$m;fO_OFZ&8MHxUTW2Oy8l0={KF;7Gi3`} zOL9rF4cA&1PUZ4(xwolzF|ARj(mi;rFT*;XT9;yVE+T%M1}Anv_AqMdoZCsZEA%{> zn>6nupSmRkby6&~mRffoq6Q%rwOdf%8-*oA<1<%|Jjy(8dR#qniaxo%CEqUpzY z`bVwxJH(NBe_(w11O9?g&J-)0acm(gh5FC{`K6#7Hs=wKqXUe_BG!YF(8sfSfH$32S}$I+500^`1%hWJFhAOl`Xq zmi#F*Sr3K4!+-ww$WGK=^?^O)sJ9)nhpw!*mD&Qf?yF|lUa=W$iM6I{2SK9_K64sJ zKIV4us<%j5UHs0KddI@z?>MZjn(K%k_0;!S4~c;5kX+$uwXznqrxAs*pIF8?X}7ME zUuWy6B>P~X$vo8;w)7vB1ji!b`pYO{Vc&u0CH)oMN2RJ6nZ#0poo^-J(Fj4`jy3dwnURo+JX zSxv7Yk2sW$x~MBHY#Bs02c&1q#I==@t=7J4_GYYXNoZd!#fa5uAGPc3qb<7NC`ws* zrBtlgCEJb2@U7T=ws^6xDsK1Tx_VtF&0~q{szx2U*(pb;c=wfC92|Jd!K;vC^7AfM zkLx`yv(sts%}H#g2(gOwTg-&kXYsV~Nko4=h4#Y^BYJA_vp_VEUv6zrZQY998wctK zB9GT{8?<%FI^4?;(+G&wn^U!jQ&MlKAJ~YymRpf(r{C2doU{^+Rd`n7kBzI^G&^En zZVz8|>nsGNwAZh@ZY3hcC)R9`>k-XoMKavKsWIHYB3aAb8ip=D9Ijb$>-9&0h`PGb zvfUIrpS%enY3_8Px6IrlKNdZ|2s`>jQ@giTsr4>P)mLvEt@qW(>%$vk^cez9(YArWj(u0rC6e0ZK5rUBl~!? zxcZu;NZ)jF%2>)K)~hFt!cjWYS?z4n*f(0K_I9lLf68j%LIyd{M!^0UEwihiqwVT)G6(^Te$@M9$b@NDf>UOoI%0^p@1x?2#$ zV~GO97CuK9b#s<_$DbX&7LL5Z9Xfd7VP}I~A7p)rt*D31?Vs^1#(Ui21A;v0y!hPM zcyP&KAhw~Db$GfUAHoufW=(*sUoihaQL3D5}md9jHeV>o_z{PJBPkqQ(J%IXAr$#(8+SVTM4w z;|lBt;vdN&U;}ci^`+?I#lJ&6I(hVDAo?pJPRy9B9$n5~VjlTrx|AJ^2IkZXO+^Q2 zU~YH5<#fpJ%Z{ewi%LPGi}wnnE{tqvKT3zTK^~~c|4L17<0ZjEdyooqMa*hZ;?{6Q ztRjrLV4zuDO}o)@Fq}d(OZXy!r??qUy%uldktH}cByJbo%CKlDbn7ghgYrSoVV%wM z7$Q-AGF}$vHV{wm@CPDGl|M!{DkmZlGZ{2%h9$l|m40_>y{cV`efLBbqizC-Gk zc0r_5FmrCnnyom^C;Bqnz?_hhIBD#pM4vH>B=%$w8Gg(j3P5hfn{AgaW3*Ivd8Ova#4TGUYC5?i$Y1km4)u?F zR0L5lYf*|;NvZFsC5!En__m6mdN**G>AD0T&ct{v%pkrq#*b2DT4ygu|Mm*4|LUo8OQz6^qD!gcEUOuI^%Cld7qTwLP*41%>8c(7`i zj!1>WaFNiUE?nZfnR;M;M{FQV`nue_u_zlBR6y*{(4bPj&M}nBCBAn7fm0im3>)dM zNSzW7WJ-Yp4f{XI$f?ik;3I_ZaES+18tF1%?JsqikIrbESza=gRvaK6`U(QRak7D~ zqBClpfH2>HR{CA5E2is=}~z|MPOWWs-=*4z-)%CkU7UZ?LhnUDCLn1LPMhw zo+jgxutkH72_^?7|497c0^*38jU(sN4FA*ocr=56C$)v;UaCdxNo3d-cjaYIqFv5o zDuUxmVZWtMt>(%&5mlrJ9cA2V;^}~jK)$QdT-{t#Ry$%eaY_nKUNWH3@K(OO;Ryarbhzt zq>7*(M!k@yy!58@csPh2ix z9QYSwpQDI?1jI8cjsM;Y!K!c$2aRsc4i8L0bdX@?i}`z;d*m1V)jC=|nBIe0C9{j8`3s*{3+0mwV$`{ zDPR(IL``6pp^29mqED?S^(_u{g_eay<#A8Pv-~mV(U%T#% z1pleLGe{J}S(xr5@mi)7(rcT2_Ihh5^Sau%UOY`0c4DIynoImaMX)sr5sly=1t%#;)#8X`bkw~Yi1!F#6fW%iat#;n0tmB-aa1ADF%ESp3!Sqp_MUeVj4_MDY+VgF>FS=t9@pLd#3bjn$ zsDYi>nMZuuRv|H@BD7NOy&H0}=_G%VCNYQVF`TB6?#a{kw}VTbB#xK(!ARy3BPyaW zMkjHtgqZ<<*IGQu@wW1rjWd8qjM1Q-y1KKWo{;g*Pn=W{LT3!Jdd-fStx;GpmjrEF zdCdgP7JAyhW@va)B=fNZimspaFY*a&@Or(gs2(3OM1Ns|yBDMG$OJ@1(?KICVXmPY zh>y}V@Ql!0dL($$jcI4Ivw`@Vihy)GIi)*4;4BTlHaX9jFitTJ8*@eMXA&Q)2&x6> zawOfh-g|kDq`Nug(^XR+`@4!z_eof{(IzucSkV_7FP(}$R0*3JflEx}xpsDr zI;$ecR)%gmDlc4EfFFlLwZ%`IQxUZP5Ow5_hzRiUGTl0Vwo=gDuEVqZhavi?C5Vrd zTBb*1;r=aT^y z0lZ-~e4XJfh?`zHgQF{i75QXPMbLO6nlxU(S8ri_gZC0PYo81;1hos%2kozFPC;W~ zx*nb2caL$OS_|9wvFJG`7o`y#51To}(`zI7HSFh@HqVXy^U1|30)CBm%R7}np^gLc zZUvdouNpt$vaLS>Vu^|nddh#?IB?0wyy3Esg$Z+Bs$XIV8Cs2XKrGFal9rLTNhrlF zY-Dos=~PN>27wVJ7_m;m2HrQGoQmVTT#0r6WSxq@Goar_OR6nDewY^tL? zcr2&AVE;FNMv{&y>`+c#uOeLNV{zPg_qtNto_Th8hkVwB73ky*Dgu)sB!+FjG!2v| zF|479X&nd*=;>*1R1w+U*r>i6QKtHlEx4azHU>C;KyL?Pm5SiG%aLEwMtddbXV%46 z`m*B%ayzwtLmC0IA%2Ro1|ny~2c?Xi>y)5{e*uWqDni}$nPIglcOkY9ZhDugrj05h zC#l0Kh{(kM6_xnpnsg~xXAP2anA3XPW+{D}XLvv(sv-o7$GBR}+jf|A>z>sAqw7lm zo2c^tCuv%ywZbG#q1HktA%!$(DF|3Jog7Rd30G1w+_j}Gha77uAO(|5sZ|5(DlN!* zup(Vhsk*zm3wx+V5%KuBUMub`tkTQf1$A{-TuA<(@0+xM>z`q!*C+4zzVCbU-uL8q zM?ByIVtEPy?-p1fw_F2>Z^{Z@4l^70?iCtBo7n*J7p4bsDOSm~8R&hgI7brG_i)<`Y&&%J)-M3yAgZVtm90iokFgma1^t4~y zG7M#`mPD(|DnhTjjcen&Vr}9+v02)!->rW@e|Y3rAlC4%VR3kPzi#u5KWg)heZ80; zk7!uqUoO_&_OcJVobI(M$p|*Oj$`X>aGfEIv(@H0gWSkP`ma=2Wp%GJej%75CU_cr z0lQ|pzKECvlNr}2Q{%@#d{1C8cVNMP0$Fr-DMn;Hft!PQjJbBy+(zgMx^GLJy>Sw! zSw-_o`wilW?4vl@-3>TP)~XZzCchpRa>w{hs-92F9F^HPjH2#v-RqHv4iW%Z_-nos zzYZUYJR`hj-e%r5YFpzyKs3@B1n)>P%Nj7u;`wA2pM|(QTW~t*-hlN8(rm;lMu-D; zv3-4(H_JQByM@+|jRN!yk>)U6NqENKieM*h#x<&S1C1@^H79jRGF1<1qBwc7ID+78DRt9^YGx0ZTc9uWOKg`d{Xo3g`(b_4K4MIF~ zWO*EcR1(HrC8NYf5w&cAWw|xVd_|E(89t(9{cKco{kgLX7d1`;Vk>qp&5=~r^7-)0 z4Yx!t#FpoOsZ-DPE^`(*CmC+cT zRSpQhFg-Bxt_?%JV{Bt|5~Y15X`6wdOm?~!F_s9tyj)sjNnC~|?k96Pe0-`lFa@we|Cwgl~*3er= z`5S3nzYDqe5S2enR~L9B5yspwvb>_BPHeanh`VWBV0$P{BeCta^Se{UXQ-CHI4y-`Fljkle{^6E_^6_NI3-m<)^gXZXl}fMC01Q zg$cGrCto4VC}V|LHZL9JZKQeIMm{490e=+MU&>)g7DAYFjr1mL7p4hwB0i-r?8Eg= z_|x#8qKl1z+<-YSYH=gpyWP9kY-kH#WGf6kw?$sWY`}aNwGEujb??@sJesvFP7aR^ zu4AoSmr83P{5{AUJ~eJEHxxNUV7TS#vzXzkMjgH*T z+~p&SHZ4aPkC8uN^c;LIcEXqOW6aG1kpsd}^MTw0BW;`30z80aW0{ot7b)fZ>vOuBW?=towW*VNMQY*M z-r%y{{$#KngDn~0!UBQKD5m!q*yS5&|IDX6Q!p|rEIqq_MzLkF@@w;waRK^5y|ov} zY+RlNVNCZd)j#y+DxI$r5l;O3{C!Mp4XVuSu9ceUA3*tu~%5Wf_fjR{qcmBXgIhTM_x zSVC;CST2_vORbi_${}7SE~NX`1wRdo5wy$jA0{%-S&dwO+oC{U$|IqKF-~ zMY}*TL6AXHdDQX7R{r2s#CRC*oD( zagks1sbDC2BT@)oR7E*C*fNdRPZ%T~5(#*iYS+<$@5a3!Gr^&O>we7;OCjEOyzh7p zSG(h3#~#Pe$9){Lan5#?Y!4A_TNCf1)(2Y>h%r!V|t`VxVkK>=2~5G znh${)`7-`A5Wl6~Gpb=M=&Xg2c4w?8xNc)gDWJgNS$N z^TZo9kXC+Y8SwYuJu#1-T?Wt9YL@3(PqD{GQG1xbNB4W$KAHBo2Drapi*ax@ zL*z%UV={vesI*AJV4{mR<(qO5F{0ESTub{!@{H|12|!uIZdhwLk^X%?FTd1$W>R+P z)Ziy*UxDx$5Fctg149cg#2CoO4rx+LDJ%rZCWf{2_w3w|Oy8M~zVPk&Sn((CnqUkW zsdkF&)BOh=Uxb)CNDohz`Yn3=5lHO7(s!jBQAQ#kyUt0%gk+FPz(17nC)ARNwxsJb zzAzwqHq|oei_(_hy}~wJM6o{)jH@n>dkkad$@Z>)2{t&^$fV2%M-2nwFNGISd@G{s z;#rvBvgs4hElg<2&%Bq7{$Hs!P>hXBW-^~+t0yc!;$_opiGF zaOisE25%E+FV%NxpF9+rP=okC?dWHF%XUM%A;CsJVHPL(O8F3rV?&W_x<5r+1@yxJ z%|B*?@!G#qp2Z1D=y`0XjchjjUEA}c1QW)^l#endCriD-9&q~Y6e+&@A8bEn1VR9> zw*vt=F?by#PvZ~7KT!+bZ0R~&$xQBA>^o758d7o;lVX|%#98gcmu|%+W%AeZx$0!c z1V_kWT!WND)KVsu~%NUJ_$zzk^lQ)A3;L|Cok^2l@iq@z#y)ym2bbV$5T!@$w z69OSbyU^lYbbpSPQad>G)|VN$c5Uu!ler1{c`8;^lQ{#me1ZJ(IC&Z*w4;OX$}i6C zob+_*0r2T3#%79m(ETrAnDOiAuyj6MP4{H_uU(q!pFDShI}}D=PMV$o;!ETYcniE< zZIIKCXBJ+Yo0~iNWN9_VHWeeH`zsnLlD-Ydxaez!TySZ%{5K(ZQMv&6YrSJ~)jIw) zRGyKswy89yz)2kRABt5GEjH8{4yME35py51G|X(W@nX@|y1xeTvD*SCWBl3NPfQZA zI(UU1c(nJTjPvC49zBQoG{7I<9=UIfR$))XKz|1ZCD{6rpcQv;Z2yahDad<}t^=k8 zD_sIqPhuS-Uv3u3ruzbglp_(EOGQ>B%C9~+=d{_-oyyyW4po-yn*v>DnmPvslUg_GZ# z5DHZr-NrWsBM{Rl(m0~Pp`}7-x6zlAYpMf6wu~D4eq+1oQB(Vf_bsD} zO*g)O>!{JYM~9K|WU^%}5EWxj*+QFBF!7tUmeC23I93#EfS5u14!lHh(fXua)Bfg$JqcYv_~=bZ@x*69 zYKIks?Q>FZ;ATknxE|y(9zgJr!&5U}V~tv;L`d^kDy zAiRTrH4rnop(?alV#}3QEU>*!#p&&tB_J0dYz5hqzK?nFA87>P3bQ=+8p@cB?1Yf^ zY1uTiXI0D(i<4nRP0Kk#%pucb33DkEo~r3mUWaP6Nbo;2Ti~eaS_#BlNy@TbYn{+l z^Kl{E9=CP`I#zd8nb(;YKM**)_z56_1_{};VgJfmasHQF9b$*r<=SmD=jUE^I7VfJ zjQFk5>gqBAVZir*E25mw#4q}q(2f}p5RQIi8BGoa(^QFux1z`3%kvZJm8zLpRjTO{<=?8-Gw zUPkShueIamE=R}B9VTii&^EK{0b8!?ut@D#Af`!)T0|O`*xqvBX>GSYT=(-C#2*U{ zEXQ5Z{+MeZ4zI}GG_FLA-VNzj&mu9+B`w29xenM4*p9O2LDxa?u=sIJ^R!2SSd95- zUdDNud>*oSO+p`s|6#l)J}nN!645OsYn$bm#Ku>O!S*`|X}D^AptgAWd?1#JN$Fti zK{+Y89Z5%Q00b&*RJpGo8a3nLQeXL&3YD=N3ui zM9!twaBiuYlO&{dqKiU>`{1U7mV}juWJ+}_TRlur()reLZ?H;h>=vnP-hOal`aB*>G zCkHP(t`pzwwe2oC0&h54Vb(a^sO4C!RhM*PRdRN59bAX=C$`6m_7_>oY2?;A(>R

ltJxShceup8he@BR*qzc$QZ_+wkivC|;Rg9(J_O1|YULGjtcgR_(e>{MF<%fgX60 zXIl!f6(fhb*~nq%9h`+$hB zc2G+bXz7Q}-*D~t?(%VoV&oE(VUClj@+{WuO$al-dfPKa|m0 zj=$@SpgM73JKglu{PY+n-*q!AarF7IFZ9-%zR`Ey)T!^(e{+)+&RRE@{M|__|J_qj z66LVe>82)i+*Flwo>HxYl_;|y|pko}A3$wnW25uD7=6TZWD0ue`R^xQYG z9o!D*H(Z93=%IIhW7~o28`4(yY^NQXY^=UWdkn!a{u{EY&}_UkE3cj%PGtYk-5HBu zOo-Q8V6#5xEy{ZPeauSaL_=@g&KSx^6t{07?qw8!rW?QaaWqr0o;Z&c9Y7e$73Hs> z9X|k7vM??OxC7;#x(UwZx))F%^Y(>@BhmCe#zAsyEeCH>osRv4b%yw(sHL3NkNcf& zE}`p)?cruQ%XFtP&l5VVBH&|Kk}wY1iBEDmOfntTBpp}2nP^%Lv0u^VB5mZ_ig9Wf zr*oVy(-|*Dbm8-1+!38{KC)dnFA&Ar`3R!Hye7dLQnHE#?oS5R)WP+1*Oe_rt~Z2Q zERPmd;EI-~p^V*V4R|I-e1kDT=EGv*$0EuMSXTZT5Dy^BT#}PxDIR5fN`2A%!f9;x zT!z3p2^!IAc{z{$uq-Vt!5u)ds0&jKI>S_0)9dt8lf}Am;~a->dK_guh!w-EQ!p;= z<%;h2PE#842{_|LZz40GB8>*(p{baYoIRT4LQ~th(lWGGS3LC{2=*(Aqf@Cb4?Fv? zN*#z*a4qGK;IW=zzM?10?-z(ioL=2I9sJeM#}m5M&UxVLL^*sU;U}pt2efq}MPQG&P{|Nm62t9xYF#>4EU-9w{f9a=I8sI0m2Y zSP{Knxt@Jm+rXz>Ir6H3>gVV!LwOR5FlInJmO8({IE_xYW3 z?f~N;%t*Ad0#pN^fF86Gg05_4AKao(OX~Dn(3dS6hbUX->%wW9qC=4JwQ}Z?t?*gx zc|7-3bGkjtb#7ID@te+J#c$fP=vf>n4wTQeybi<@i1=a{lGuv8(_4kKkG2|zBz629 zi8)r}s#WgT2gH-C9UR7`lei6|1a2TMEPB;e>HHfIhn$$Py027)Gk_Kc$`5k~b%&jg z7ag%3wEeRDO(57O+1SE&7dx?}F0N0eVldEdg6nx|>+ZBuh68sbb%8Bw^uiY6Q)Hs` zCt$gdxPy4?X|rlZz=b+&@+ct7lw@6&ln>G9r5)Qdu=z22ruge%j8~wVdFG4>eG0o& z31$2w%^Wd1rc~4kyscoZIe*Fxby0Gar1GqFg!ril8*bWN5A2h0Y{Pj>^BSUA-t)5< zTloLfsN&!&{hYn99G72hMgt9 zv9;5Ec}-Lgt-&bc=Xkmi%V>J`+J>L$;M>;Jz&)9E-Ow>jqxGWhB_Mu5F^~sEevR|cL=N!urht-`1BOf)IZZ&5lvxVWd6|wY=tF7j)ddRxUsJBP7tbhCr zgEQ@Ptdwg=dl0+cRk}EGF2Sx7h+k$Hnhfa%Q!?AU(X2OTOv<;_+A`|%<=R%gp`ZYW zUu7hlAX_y}$hK@;rhhF1vbUKIVpA;LYkE9;(#AZ!Gh;>mE48r< zZ@#zItM?YffcQ?J9L$lUDa1?J^7>?!Y~%70t6B_+>=tvPUbq@sv3kgluc1}@7L%>)V z`wYizQ*5}`>@D!-#inxWith31fjCB%r zbYzlzjeJ|Q1>vmOPuw;3+bUX6%UfC*YVy14VZDXk18Z?>@td%&9j2}J12($`fjm-s zp!c|Zr{qe&E|^)u6ONVfPGm*JUu55mWW(9CnPzGS(s+qDijRF3U8d-W$~47O4uazf{9uE$>5CNc!ygVzw*avaEWr4TFf^ zneBy=4U#33`G(20E5D>S+{+&koI(cY%l~74?!_(`f`CSRJ8u9 zYKn+3X49DTuav76ldSJg5nfKp&2l^vmvKe9=t)26;>COgtwDdj)H{tvmuwsX z@fXIQ;8ARA-l;&8N{mWEZi(QnYfn_ry#1@e<=StsAOXthEHTT4ytId4(fN4bKz@nI zF=he~AHgDcyTN71RNu@}vv}wLk2>C4-4@uFZ!{Ul6asNd)2-n=fnIZ59(kjda;MXp zM{yfoB28k?X528!4lT}A(z@Nc zU5dj}zQf*8vfIAb9=Go;IkKe=h`&pAs|`}9q*Y|Jzug`#S!#d1c&~j@$%>{|fcOVH zLmsoXj!sIjwCB4}Mu+`z`(wrX$6L0zfcPim_pSWFp$}}q+DWSvtyAy_P2@FCYOW)S zot0utvV*6@e4ju|zde8~RC3AurcZ!47fJO50qoHeV=`!GeOVRsFMVVE{Xl#MdThg$ zv^Jw1h#6^rvE-orp#4SrwvugIXufW4NxNvz zEt$%=@IT<7dn&%Fz(3?+uE_Z+Sh2J_crbV{bhv5+SwaFT5FuA}^=T<^>~k^yd}Jur7>|JLoM1EvFu4^$qQceZlJ z{2f(~Y{J{4cUDu}ZKyxk+E#7n*w?G6WpT zMJ%L6h=WA2ke28hvA67f;7TH+sX7x{9|e_=OANav~%4(~@MRJa1QJWHGZa>qTC3^p)KZjT9TBp*O0cA%6&WRdhYovQVQK zVKkanh49z+aEDTeMc7ZI&WKymauR}mUUE?&^mZr^TC?P%1~1B3%p;U5^O}{A8Bj#1 z3D;PNV$yV1>(=Xri~?c_EPlxgO^df$;tqD=oue^KM!@$0WCgGs5{F*6tcgW!xgrnVF=iOr}cT zUk5s5+s%l_b~UXI)kerGiX26b@^Ddg(Ff%li>j{=Z>qjJoEu(VogW0EhQ-sd7p*R@ zF8Z>lns5xkN~F6Wax^dkIL6}vn?q(0gcKU0JU;^Y;0xxp5nS!4_0(n!7XR`{C84MI;O z8(9%f1F;fzO6jTr-bnCV^KVp{@@NTU{`CGj2;y<#Csh#;t1%NfvKNdZKLu?0+aW;X$c|Ba`vS2B zc73)e*01Op%3%TA8KnrRQxF6%=b$hah_yLqVTs@{I-;LKEbD+;>{G%SOQNfDo)xe! z>|LkX<-5w$BYLedBR%CiP3vI_=Bza zn%y_En6^j!#y2CfmK(iyv!Ou!z+hHSx)s+G22SlV=v{kkyOC*dFMe-D8BJ&h+5iT1 zgUeOM>#B;xXlf<@XZ~3r;P0Wup$8>k=g8{PNA&2Q9zufz5L-2S7_^1iu%e~NHy{06 zz5YB6rJy}5G|9SJvzh2^7TS!@6BkC{ z#lyJpdCl@OlFDV%yN%hyn2c+|!?0tGeor}!CvTh^_2u|X#AD>|fh+*%k41?nmZ*y< zcpXMHN|rl>xKmpVz!hw7J1DUNpQQMsmFa3#3h3jSBAP{2Key!e$!JmtFR_|T3 zvr(b5qP-*6u3|?vG~9#?+j;Fqqe!de-MZtd!B(v{>$38*Ft(@s@-4^Ra&@&|o-Qvs z4#Yji7u-qDSOVuAmRth_zAqRPiL>YZlWXS zDMNpQPk0^ibmBQk3rGI9z4whxPOzD*Ly|Vjl*75j8HYDohU4q-!{*T`#Qp!%Qr1qg z#7ZG{)(pAff(fc1Ad!1X5C2LNuHlezr4VhbrAf|L$V!EyUteYn_v^# zIc@{98@sHG2Wsw~kd||i+qtam#zJJ*yRg1B#|OjDw{q@Dm9eMh$qBaMqtg<#dh%A* zV`r0-Fd<5VX=n=Z!#Y@wnIP4!;cmpJY8hi$&e(z8K3E^07&jthT`jV}2yxxs#@*)K z0xT4B>QZGqG}ss9UN>3O5{-DG9;<0g3h{7FycBVd(#F&@l>WhZ?~ozuVLQpL3n|1S zHA8RsS`ddM(c-5^jOE;$VON>+x)8}ZkwWaPVX;9t5wyja4;kM8ZXqrlkxU_ebO|xR zAjF3tcBPQQq!5oTGnB^R>knIwQj8Z6G-`1pKgdD*h#o|#y2J#`hYU-D#S}7a&$%e1 zrOJ4$?xTqiO6tA%%9*6JV~xX21v#(7C2@cr`)k~Y)dHH9^l(~g?> z1Vn+#_-{=R$V&bD8?c+Ek;zG8F>aIQ&zQwE!JPqO)fWv*77m^8KNUubMI?Hm3iyh_HGxf$Y+ zhhO=+rBG*@`%R6*k~QpXqao*QQ(*WK^Lwdwbk4wLrASD(&+sqLFS;&0usI(#^!{8v z7g{t{##7qZ4oNOE+<3}p7;>tC13h;d+eQ?o5KnIvW~zSC7YoFfs3C5lG?RrY@k{Hi z(;lBrtHU!i_j8hZuJ*%;g6Ts&*BCU#OgqW%Bvr;wYPlOu4fkhnU-`$$^G3Xsj(z2b z58&xlZ9bkt{1jA2Hg?Qx&%_HRZ(6cZG`(-SZupTg-+Aj66~S zmFM=R%6N7ef8*=s>LKsf2X1`RsL|uN2_Em}Kc^7SUE-h{ljiMdL#YfSM`w(ivRN%Z zzl1<7`XR}U+l?1S48fclm{Gq#Z~Z2JT5_3bO10@ZU14M8h*L&WZgp-jRm)*RA=~lh z7)*$xvK#j<8`}jN<{N@T-UY>uz^k`SeNWtleCm6|-QphCF0qYWdqnJ-f%s+GKFKH= z#T?P(`VcRN;g%fany2f-@!GlaSL!~#jc?1_CA63BsWWr1byC|9`=!mj$GsC4P+ae? z)qU*eUGVuGuG_5+H{_&t;=|M5#ru!z{f)5@@yyz4erGTZ9iC;rcKC!{HSf8oB?Ikv z9{aA;DNp1m!}Hh+B1b;Wh>weCA1LDm-6<6$wC(a%a>HG_b;I?8wIEy{)$-yUr(hNv z3e3CXeL`@<)!*UVXDn=k<-pD%gy<3rUGLS0lzD}fhWVMh#o?~s;iph;s1Ov(q`n+g zPq{z;GmOFmOnbZ&EFz$JBh|V1JHmX~e& zaxswV?_eCar~U)OaBkxzm@czoUSM8k_DoW3o+8h3bp{Z}RfHrr+teauxiSNLvDgAV4rOMPQQ(0_5QtYv z--j}+h^ou31?9ZUEafha;oem|7)TiWpnZg@3&!`^T#%&kqxopNUcx7-Q61lRkv z`hu@$?#eKB*|I5+9lGI?#)jF<*yAutok6a_yLL2lMYIzT*3P}*LgSIG57@62Qp<;D~Il8uDc*XKq9uV*2 z%!I6M*oAk(hYGvswWxz+^ymuNCvd&Li)08FnBOyesBpS5u7j=xl0jic5`95jh29TX zOS#Bdlp)gz2EB!3CStF6Rj!OcpWS=%#(&#PH-2cVB&#`1FGan~%f9WudcJ_T@WV8O z;6RjBMAp?#H3c|YI&k4QtetRve|2&TcILE8*UmA5TxOq)pJ1_#e<u ztZ=o+ZvkYTwZAfSTNBCH{;U@Z3L5UAT)$1jNZP3F-}!jT>L* zr4auRp9#C=%)m9PC!n`1dQ|V<_#p+6DegMh5NbJ@$V)OHua@n{hqgAgq8%SYs36#p zyOwK@>@v0)jS;i3F`OOdgLwrFuTs5hFY0)w3|;BKw?`5+ag#xckoAIyZOC=`0Bm(-9wo+p|^+6D#*lQ z+P|LcZvzvCI9lbnMzOZ4?+CdQ%U|G#Z4p9@DXlD0e^xdqtu=dnq zEby^_8x(U7b2EzdgQm>L0T#57g77O;q?QiwtMly>hmCEDqKr=&P1QON_pTABN)vv7RRU;dCf;ArwFyM3q&mmerIea za25a_TkT&I!rCX z7bEUQUp`Oqn998leFG#wDzsn$$Lck#9dz>ig8#a}K4on!Y}uIf99f81)^_MFhB8e+ z@4xu8g4h&@v0%XnT{Dvgkf)voFn~Q^pLSQ{8Sj)rUIsI>isVv?A%&dW3hH% ztrZ0Fi0tFeLxlR z2oAOvw3Fn!&x3W0`eFtrU(de==@DYf29m4I_Pk-&H@yagSIC(9wf(?46GzfHlVF1U zh2p2c@2Ef^T|wWpoR7-9#esEibFERx!{CARk>Ex4+qZ+QBLj_)kM-eoQzm0v@M6-W zd+?e^xwVz2R-}^bAgyHWR>;X`E{^&i1-kK*B5Ov z`jlDd?WSvAYk*X;Z-(*QR7SclF#0#7Im}Ydh72QzuD=!tpCFb&8?zRg zWzZC78}tRi7_`1HiuqAXW-)Rb>-cCt9JQ{Be#&wiUmyDCwIfK1-xmR`2kIcU z$DJ6L&R}OjCqv9mjs9gVMIK({at&3CWHS1`ImWc97r;Rn=V%Nm8Dml0idRVnIgQu* z=B9Y8f;$o2g^95?Rg1>SH2OiKdFpQak+pR?F4_fo15eNJ-tduN$H&cby}8)+ih2AbUDTKGMV=#Or3 z1F^`+PwlcJQ!jdp9KFIorrxe#JVmj^SU;fW#JIr1gtA=YDPlL`MH$ZZpP-B-#w1hL zpJiNl7V=v};|Ik8Ay0lqLj;JWga8-PN{2H(TZ72YA9HSGk~FJ*RYLscKKroSK1Di$ zi8-GNS$CWj0eTN`vVGk;a1cc^A6N^8AUxU|N>Ro#&=fWUm{ByB23lGi4usw+SV6I} z`f7!pQ;%F%!c2a1!&DY4G}P6?ky6b)BlSBHu8!jmVJ8;u+0TM_C&^Xz6O9ZR+#Ij&%<1 z*O5a;(p@|+P}BkFD?w8l+cknzCZaDET_kEj8U9omd?++hX@s3p-&&!4Dl*!ygDp>V zBD^lC9lyXy3Y1>#kqE{l|xsCE!9n=o0 zC3Xb@u|Qd_UTVp&Q;6m(5R}0epPli!d%wF4-%~rbU4cM5-KlceS3Ja*|+&{suTeNUqS?R zzH8=v?(@vJ==01xzc_QAR>t z!MswbudKh@=U()9=G+X#_XiOwsNL;;XzoS#d(+O($((lHn@Lt`efM6DAezrTA27w}YXk+e4{gLVvY-(?6IQ3?oDAjtrH*ma%E@2@By-y(o$8 z7rPb;*oM-I`vB}exC(AIj!}!OA?qURY->eHg;*gj0x!xgAof7g0cV3*a4TELg^~;9 zSxkx}zq;@)&t21K{k}G%t=|lENpSNxN$n^dt^%ziXwsRKNh!F{$_D!pfm7hpe4}Kc(<2XG4}0+ zWfwj*yTz|xToB|I*35?0C9ZRe!1*4krYZG zK)|0@Zm&oVw&Ta@*#OS>fxyf+7Y8Z>i}5u8*+t-c8{V7_xhl#y0Gfgxvl70Rg)PCv zLT)ztfh$2}FnSzhGP{=9QH(zI7J2;e3CQRccDg$m;_)cuP1Mg$_>e_0q`#C&aUth^ zYuY`i<%uTu%tQe4jG2kWFaTSU@IB^x(%0#KalJUrGM#wr$tKa);Q!0qA-=B{a`Qe~ zTp6gG`4N0d4C@Wk?wkH+AP#M{`Mtgu1A^baFc2(QV)xJT=lhHOzV)Tknn@$k*V!~= z<^{hkU?PgmOD@#ICP@#E60Whs`+$4_h^Jr|Y@0b|&fk5di;@d48~mUh-3>aA;#~m5 z(|05S_)I__&@V{@TNm*&7yDXaGyK;E&f6}-yQS}$rufWr5V_6udzPFF@=MMI>@(Tj zXh$Nu+kp59*)PD$ss;OdJV{5b#RAEGu<8CZ+Fkq<79@z=Q(!`-b3}i^E~K3cLn;t< zd>Gi3M|;bkK`K(iy9*&9Ep@vRK}^;{#2lszzoXs7v#|Xc1M44TG`Aifty*P##nUQ} zl_M(W2I4vB^Ke!X-D(177P^xn7jt-BEi(UJqUGqwXIM{Ng0JRJud2TBgq9Q8Z~#ILU`L*&R$z4{BmRQPW#`%m9*u0S~X zI1nsO5NctWCi+P4aalV!edGe=@j?uiL>@(EW$9QVsNxdU6RGQzHWL;^l}m zmW$36BT4Rn|9)TBWeCVX$eIEER%ow5NIM-VL>WgfLu?!MLaCcqYcTR@&`nK*E)|HE zu0-fr&I*cVn2OTE^}T!r!buUjL3PKtRE`IfaqM!$EiY0lh$dpoK#umlS1uutu0gdL zqbr$S2s|y~Mj6L1Avlh-&d{*u+?b%e7^Na>>8qC`jDl;QaiaRMxZAZ?jJx)TKSmiR zE+G&}8U|h#tIH}TUHk-?hmpNu-)n=2avGljyL}h42XT{R;`KqqiyW7oXlzFo<@T&Z zqc9Zr)iiSO_ZS#k_zJ@@1)2=6l+?9JhpZPR+H1cF3$89$jk(rj`McKmxXf~RqsKah zH%cEYdMT;`@qd?>amTqpu@-e4R>rBA-hFRr2w$5kVKIz%BC35Ca@2K-@C2@Pljf}N zw`v;vI30ct@sj;(a2%AXI8l`Z@1z4`^0xK@@iw2KM)*o;J0DXa{YG3d6E37E^x&G& z0K_{&v+IHgN|5~td1JxcP#hS2%45~{E(~DE3au7$g5M~PDp-gqH&t1c>u9f|x`233 z?IJsWiXwrl>lW>~yK;Bs1C@u>CxCb#QB7ONziO`@e|%M7?wfE-1O;6Qn`!J9HWM5D z-x+!Jb*Knjg_(v-*LEAbQkH)f!x)tD0U}WxgByaQ(1BPON1zwoZQJXLGb^eohB_cl zTG2}~Pa!EktfffJnvYyGSkmBSFbjwetz{}}D#>|4v?@P^$gN{mRvvyD5WlzM*b7@@ zNc<>P6-f#aI}V~woQIipSl=H|i&bnLCT6wl26V45Eh7#_Cl+Ge?a`%3OyP#@?&;qFhEoM z^R8&=UsxIFTB;0A6J4V`DuUYaSB$;P*AG=1kX4U7k4S$4KN7?iBl-jJkrfhTD{@W4 zT06;{_wf!>3;5w`4p|8Uamp@4Pul0(!)35-ij+b(1_=tumjW?n%#7>GXAN(F*J|OOa4X3L})3n zG`LX4Sukgt#drg}BUK9r`JjulxGeM^|6GJPhyBM+OW_R@OcwPJw*KiZoh99Jwd)$o z1dGl^d&|#YOA9VT>i-PRmdJU5Lajtc8SN+GFG)h}=ns1m=OYQg%o6S7JVW6b|V|uET165kX`Jt8p;%ft9 z*ckbt65{`Kz*)z7on*1%*|m(DK4mE(&byAX`19m%-C^r;p|=Jqqia>Of66dIe1ma` z!)p;M?kyeeE|utE#k&qI9epH5i2q^_6j$T)HzT^|=rH2G12{*s<4E8WATAixvAj)E zJIqp%b*QwZ4qU|E#^4PsWE|J;9&*ZHa2>Z*kB9Ta_*0Iy@%s=p=e^0*likXv)kYvZ zMi;HxT67>Y#)QhVAyScza~%=Uj()FtN^Ettiu+&{@}9bnYg19q&25f-j+fLOJm!A? zG}PD3{ffJftxe_;XN1-fUz&H1_^R|S@!$-|E&F97tkR-p-5H%+@nuDLdAKNi{g=gZ zrZRHVhLd{8E&D56aWQUv*tyI8qSWko6n<;)>9MyvZdv1=ZCO+Z#B|rAV!QQGXS@AT zL?|M}QK=b-WrK(rYJ_4(s~eTDf~k*PGz_W9+SZ}?m*hQ%GJH5An`f(AV7P(x1+QBL z>r99b`IWq_+q^0e{wx?SsI$#mriALEoZ>iXRW?U)6b`|#p-MRnM1Y6=hc!_JA+H4Q zBkdO9Eh9olE>cTp@qPR`kCfw4jvZsEghT(oQG&f*beZb!{rdy zxcnmQ9r{Dr*fd*=w>*nwW4eWNmC{-#Vy(mN5s6}z*;W&FX(&Vcyl6puFcB*Z?q%W} zAm;HlvlZ=Nx-~0eR#=hi5RshBXzBIhYe0n2+cxX2s+%}a$$G-I3lwV;pO+ls+7!i< zJgaSmS1vz?*bInngS)=`l!&k5ac8T=fHLOi-EZ6O-R|6;*6+l3&h170<>M`guYkK> zgzb6%0(GxYhv>@_^Rush`GytQ$nQjNRNUY2HW!WDLS8h3N>zvulA>5p3X6(VExs$Y zS@r?3h%Ystv))y87k5zl=jf-<7mc0?MpL}S`WN$vM~E^yxf2q3w-KUKgm)p`mLw2M zcsVy|m8)bf0^XpShIqx=BX>+t@EeNap=C14LcaO1m) zIxSOPf4!V#&%|y5TbhXG%h@TPl?{=#6~C2pBh=F68E&VF>_hPSb;Q$E2kxEF;{QEyG$>nA>)l6QhY&Y zIyCX%nEmy56ZWryZ9hz0SQ)S_XJzb7m2rfXaVvr?DbShV9(bw?bjuWv;t6@C(|lQ- zDuYD=bNMOVjq6G7N##KW`bJj9niK+IxNYzkvW>QlalODjrtDYthxbo&p^UZgtAQtv zYa;qG))j^E4g7*R{CyCy4m(@Damq~v*;5+pAT6L>qjo2YE%F|e@x4?nf^8zo-)I|Y zyUO)2cLcsA_k|ysHUWs+QV0(H#M_h6Z8x`90nJh^ZE!sXvmdMLcH2_)f*At25OGVv z1)54IW4-F}K|m72?fYl!&;BJo?Amp-v-5}i)3*W9=z{5-%`^DqKwlb{q!JItr_oz% zgBtVceaV>K7xQtkq;H!KebZTCd&h^&(`n>3qNQ-pK^dSbo>azTpx99b(!*&qa+~mG zQ`zWKd$9oF*})~1W{kc@_1lr_$qYK$Z1uJS^u=a#9pw%vxWY%L;T+Y!*|pzx15P`t z&4edz)B-yn1y}gFX;vVb&^ivfGsFc+S=XOKx{>CvwYUr5#LfD3|1)JJENGYWQB%JNA&%E=skRH-z_n6cDx0( zY(`{2L=eKi%^^4Av50E*P4iuhd3^`{=VEz2n-5ltx_Tv3nHVxmhy7T8lntPvd;IeIrVGkUAwVQ{fa0Nt*0 zJp`J@mCo=RY~;478NLfXwe`4i(vv5l4zgrc2g{-A*z87L` zzN5f(={x5q7a&|aWkKw}CpON1)@P3u`;$K8U-z~95;0kym@hAYSK(~xOFRbYAzE)$arPr(s1 zPcaH0Jl#4BF%aL6or5g&oLcOEhPC$qX2wB%a{ht&M=B4_-VDUOkeX;7FFf{-ar%io zVwhJ9KbB_H4ucbPHBbp z6`*iprgL*i42b*j?ovz0<`Depp_p+3CY1pm*VxvV&>MND6K^0}`}N7|Krb&MgxM05 zpB`t3Gq$|zX-#ee`e4aH#By|FXBLt!k|C-!ijDO()~`y^fM`dXj+O+mB{`s0qot#) z?@PB>E9th*FF6XtE|{>YC5l6ZQWv4$P$HtgQFJ?O$;~A+a=U2<&%u4rx|z&e)y*Eh zDv3>@qiT)EKZEG;0QR@pBJau*CyE&^1HR8ww+U%R{e+CM_eOpN#2yzSw7Z@Y4K8FJ zQ;!P|s%~yCe`Z)~(?h&&7}fH_??7O#Q-)K7Iv)kZgRXnU23Lkyrrv3E#+tby>IIVY z={Plk@M=`XLjz@~e-v8OrF6O**wN!SN$c3d-$Kx5^%jViuoxTs?P|v!hdS=)BZ;X5R4vY zh#qu2e0D||q6N8t=s+2Ht`;#{eOY)^b!WnksUAM*6BCA( zyu>n^l|RPGVj@QDA(%5{Q|q*K&){vcU6ofb1c(EJi0PE`)7O@Bn(ETpNikLW4_-o$ zRCLTl%ds&N@%L8eSK?jKFMxQwIx55HXW;23J@=)H%6NkQrrr33;xrk4nq2HkY z5N^;&(x^;F+;hsr3jN$YK>S2>LwmxsJoLOH;XB}anzTHA@eWG{joeRRL~p`o0FnjB z`5bDAz25P*<61}a_-(70UqS!RGQ)P{Z%4=k2smFE-<&GrISVBAWQ8^0k&4KL&tGpGpJPXmDU!kV|6Ih|r;@8w zV*W~{5@J9E_6#{rj{B>9+A5AAelaNfd=rr}-h&T>tli5T(~54Pz8uEdz%Nt1n%6T< z%9__RH^H&ru|EK*OaBoO(Px*rymr@oX1W+r;VJYl@ z?gwXFL=cd0%7h&WE+Bp-x}{jHSB3@axPSxEUSV3gRq}GPXm_coK>S+7`E41*Bd!PG zeZ9~1tnFDFyg4|dqs3NnPQ8#b2gk-=Q?XhXAs^{^yyf z*aOdr5VT<`#%Q8{jJlD_hQZ7Y$}%8cVC^_2w@RwR?YKp%bl{Tab3x`2u@8tBftXes zliiXB>oSKZg~$phc{p{jrCm75*lJ-qC&`ZEj^nO5jyZ_rt8iqgh6`mJ6*Hs@wW3@v zz2#Wwm?+gbE;q$0F{o|_!& zq=Vc+lAbGLfjBPKN>geJdgWGSkun@*yav~Vm9-uqHp3AF?>C3pVV2C?Bm|Cxp9v7J z4dXj*~2VJ{GGi0E4_MS5nw0&H9^^_Dp3O*SsQGDgQ?bM&%j zz4QcUQ|d7;tw8)AILKRjQT9p)9lee+NglV$Q6ur(M8%-wDK$X6g)``!<=^;rNNtc+ zeJ1Tj7Ls;pC%0SKg8=+=viL3fQV3p0jze%J&V`UBA;%#Q45rp6YrUmX38 z?NYy^)6pp%K(f#uC|4=OAMc?S6*L9y$+?En1Dt@-C!ZUl$NLz$c2EpYCX-4a7_NYb zxQB4o!e#}C--%|7{wJ~|VLVUtmZ>&aTE z3mA8;k*a8Cc10O~5YwH8h1L1wp zNt{$p#vah`)3Q4PaSCIbtc}ZE(hkQCP?Mfr(i`YY97D7S2>5$oxvWJDvjVJ|=6R5x z*0kWQhC8)>{0(I!uu93UB>F;qPB>a5NK|k-)z;*XNsd)(1_#l&YaE0~2Rm1?bwwH7;4!H0SS_@kQfnw0 zGv$divvKKxY%zfug?9*eEG&V;91+H20nqecD5F;tovwP(|1HmY?Q}Yy#z2=On}LNaG^m{WOZ_YvibLIa}~ z>wbya@nwdXinzScAt% z#uQ9E@k$ZctN{ZCx734nB?Pq$gjhwC))79zfKWLaVoHskaUih?Eto(<6A~=qQb1{% z9z)Mqkh%>?)1=VSYtjHclh-3H(`G24cE5jD#*oSEdz#hA^FIIY`u83G^%8^m9k}rj z@q3`VOF2__C$|vdUD=e*`rUp_fn@dsn1LiDkSg70%9JpM2%$m_ivA)7Efr_)5u}qZiU~}~%CfkZq1*ytp6CrRz_%IC#?SMiRv(_DLxdA&A+#51; za0k2s5Ho5h(NR4l+Y%`mrQ}de-*b(dc*U!dfZbAwIhOgD(tX$YL8MSm!{-mw3aUfhY@>FRB{&3VMKr@fVKou zf#kh}2*Qqsv{i;w5_=^U)e%S?w_(VsaY>4V#TS`2SMXCrNfdPnF$58#l4iqc#{0q- zLwXAG2o{cqp-)Zz@ZI7M{xPy3l2E)KkA#!7UC(7>ZS6*%7E*sy6M{Uvpz8(=?7D$M z;DOYJRLB@x9x@SzK0FZvf}yr|AZnbTVf;U6(EmGiFLT&fnIq*$I;bs6pjXq_RY}Wt zk5A9-^`!z8pG0ZGCdGRspTAq_DKwyEI+6 zOHC~WjVdbTzAR?~JvJ>7e9@Vhi+660z7ylZ%7~Mj2~i72$8^KhVyH`9noGg&D_U9w z4K-DEH8Bc^FytSJnb>Ek)bqsW2CtjrGL>k2yv^x?M@m~Fh&@@G?qU^sgt=@LSax0h zwL}AYj~H4TBagsD^9Rw0EOxe=;~Id#PhZW92Q`&a-eiDES&5Ou+=24x$X4apj!@u`HUAP#Cx_lrsXpdV0TEeSC zq6ZGrY*HDhm^ALEaiQB?7?p&P$2}k5LLW*|jk%CViBAi_K_2wF*;*)R!5=C(c@ouQ z_3gK+1Z~>?&E9U6sr{y+IaiaB6IqtL&p?dDCW31&s#SvJAQ0RcSR@ zmCi?xwczpEw3N3@ODdy)Xmswr=dE>|%&vok8|MDCl1l*%pe#R)!vo1pUik(}FdMx3pt+tnS^Z zk*({_2rL{Q+X=r7@r4buF!F~S4zEMQ4rSOnjIVdl?Sz_2 z-_Xs%LhtUa`Qd|gT3E_ISd~OQHrz=AZ>+uKn$lT*!*hK46QCvW*a)J$f1R=<>0^o= zT!&TF?rx{HY#c#QJ>Z4aNe{bd+nd+9h356R1UVDg$83Dkb~f)j+xOe0(KmB*D-em_ zlz#C~8}>EWVMpXrw;fWFp842eXsxL$L3r%9YJUBZ$p7BG4XP zjxI;wu~008a}{f{t+eHi%h1?DG0teW7~LV)6xGCP6r9wXmaRlQ>I`D5q+?t%HeqUN zj_iis)UA~J8kKr20DS}h%pIJZ(HY=IJlOvf8?k=*16fK!qrgULXnkSzc=JZY&5z_B zkvc{_KcD(zo2^TOy#srFg4}XGPrggul6JVg$q9%xG{L z>ULG4a};*te5c9TblVb1u;9Bg2%f^j@Q#qofTJ@&!&6roEx^hHGYYZ+F+6~WOX-+U zJ)yef^@ho#FFMCed}Uru$!m>{k^y&KIalsdiPv|HNQ~CiR9|?1IY2<~fl}l;7L9~j z(Orh6$v7X{;=_)<8Hk7MipK*L(~#o;#aYK5rPF(mKGP4Dc9JZZ?;bOzCZu+;%ib=; zd445W6Il(*hZT{vEj7U<`UN2NjLEJEs>j&C1c&z+yM$?~9@8lt88pui1pSJOe6x>TxSqnssg2(C$utJ6hm}7^y~W( z-FTIVDZm?sdMx0_`t7;Dvbx}nyffRMK`DEUd>JdLhZT7c3Lxud-XwZwx4$IK$~p_g zqs{i&4?Fisko3^|ed~J~m&atSyt_1q zbxVcep74oyhn{B1Fh235o`kiP#1F}G`O(q>(1?aR!X5Fn-p#th_{1M2%OW5SXG-Zu zDaXV8@ss)~mI^-??u(z$zrp?h#20C%L)?eiax0T^aH0c0I#m@MoloCDJPsONrLbg@ zFyDs{qLhx?YT6IP5xKa$rxXz&C0F=Zcz1laeuzB|+tNevL;ACfM*mA_i@Vf~S}Wl+ zN3E;s$1Vf$gq&5LKq)YB#G8ya2Ztq+(JhHZ;YSAP7k^T2E64E;W<71B ze#850A%qD~}D&CuSVOu`uwJ&}$<$ zdA!$^g|o2@_6)ecd46ENu_LYxAbN@9432*Y^++NX(x9tzR7>NLSyv|Fo|3Jwp>`@1 z`^$_l#E(l#J9C~JKganhMXPM@fFCaowBr%OV2g`%N&Fd|;(1AkDYe&r!;UCc5`I&x ztXU^ZN*ZW=>0{}jJLs-=*Sc%9TBTm0zld}4r&d%n(p>muNs#yn0YKtk5h6|s5vPQR z(?Uc_hw%<;_E^Ltlg{=|E6_5M*mwv1nl9g6F*~}k5axZL_q&) zo%naH^HIw8goy785kC+jUJxQMA6h4l_s=@ zh~Enl*gaY&{zvP4)bvk6#Gi$TzX%a;2@!7#5nPD)s}S)wA>!{s#6N_HcZ7(43K9Pj wB486^oj7z-)`|byIv@P;A0gshAp$#j>%^~H=c69~6(Vj35$_2RH${m51NwC_MgRZ+ diff --git a/build/tests/DispOwnerInfo/include/fnt.h b/build/tests/DispOwnerInfo/include/fnt.h deleted file mode 100644 index 3f9d6b63..00000000 --- a/build/tests/DispOwnerInfo/include/fnt.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef FNT_H_ -#define FNT_H_ - -#include "fnt/fnt_enum.h" -#include "fnt/fnt_struct.h" -#include "fnt/fnt_func.h" -#include "fnt/fnt_data.h" - -#endif // FNT_H_ diff --git a/build/tests/DispOwnerInfo/include/fnt/fnt_data.h b/build/tests/DispOwnerInfo/include/fnt/fnt_data.h deleted file mode 100644 index e4a7f162..00000000 --- a/build/tests/DispOwnerInfo/include/fnt/fnt_data.h +++ /dev/null @@ -1,32 +0,0 @@ -extern u8 NITRO_LC_Font_t_bncmp[]; -extern u8 NITRO_LC_Font_t_bncmp_end[]; -extern u8 NITRO_LC_Font_t_bnfr[]; -extern u8 NITRO_LC_Font_t_bnfr_end[]; -extern u8 NITRO_LC_Font_s_bncmp[]; -extern u8 NITRO_LC_Font_s_bncmp_end[]; -extern u8 NITRO_LC_Font_s_bnfr[]; -extern u8 NITRO_LC_Font_s_bnfr_end[]; -extern u8 NITRO_LC_Font_Chinese_t_bncmp[]; -extern u8 NITRO_LC_Font_Chinese_t_bncmp_end[]; -extern u8 NITRO_LC_Font_Chinese_t_bnfr[]; -extern u8 NITRO_LC_Font_Chinese_t_bnfr_end[]; -extern u8 NITRO_LC_Font_Chinese_s_bncmp[]; -extern u8 NITRO_LC_Font_Chinese_s_bncmp_end[]; -extern u8 NITRO_LC_Font_Chinese_s_bnfr[]; -extern u8 NITRO_LC_Font_Chinese_s_bnfr_end[]; -extern u8 NITRO_LC_Font_Hangul_t_bncmp[]; -extern u8 NITRO_LC_Font_Hangul_t_bncmp_end[]; -extern u8 NITRO_LC_Font_Hangul_t_bnfr[]; -extern u8 NITRO_LC_Font_Hangul_t_bnfr_end[]; -extern u8 NITRO_LC_Font_Hangul_s_bncmp[]; -extern u8 NITRO_LC_Font_Hangul_s_bncmp_end[]; -extern u8 NITRO_LC_Font_Hangul_s_bnfr[]; -extern u8 NITRO_LC_Font_Hangul_s_bnfr_end[]; -extern u8 NITRO_LC_Font_s_NAT_WW_bncmp[]; -extern u8 NITRO_LC_Font_s_NAT_WW_bncmp_end[]; -extern u8 NITRO_LC_Font_s_NAT_WW_bnfr[]; -extern u8 NITRO_LC_Font_s_NAT_WW_bnfr_end[]; -extern u8 NITRO_LC_Font_s_NAT_KR_bncmp[]; -extern u8 NITRO_LC_Font_s_NAT_KR_bncmp_end[]; -extern u8 NITRO_LC_Font_s_NAT_KR_bnfr[]; -extern u8 NITRO_LC_Font_s_NAT_KR_bnfr_end[]; diff --git a/build/tests/DispOwnerInfo/include/fnt/fnt_enum.h b/build/tests/DispOwnerInfo/include/fnt/fnt_enum.h deleted file mode 100644 index e78252fc..00000000 --- a/build/tests/DispOwnerInfo/include/fnt/fnt_enum.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef FNT_ENUM_H_ -#define FNT_ENUM_H_ - -enum tFntDrawContextType -{ - FNT_DCTYPE_4BITS, - FNT_DCTYPE_8BITS, - FNT_DCTYPE_LAST -}; - -enum tFntPosXOrigin -{ - FNT_POSX_ORIGIN_LEFT, - FNT_POSX_ORIGIN_CENTER, - FNT_POSX_ORIGIN_RIGHT, - FNT_POSX_ORIGIN_LAST -}; - -enum tFntPosYOrigin -{ - FNT_POSY_ORIGIN_TOP, - FNT_POSY_ORIGIN_CENTER, - FNT_POSY_ORIGIN_BOTTOM, - FNT_POSY_ORIGIN_LAST -}; - -enum tFntTextHAlign -{ - FNT_H_ALIGN_LEFT, - FNT_H_ALIGN_CENTER, - FNT_H_ALIGN_RIGHT, - FNT_H_ALIGN_LAST -}; - -#endif // FNT_ENUM_H_ diff --git a/build/tests/DispOwnerInfo/include/fnt/fnt_func.h b/build/tests/DispOwnerInfo/include/fnt/fnt_func.h deleted file mode 100644 index 196749b5..00000000 --- a/build/tests/DispOwnerInfo/include/fnt/fnt_func.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef FNT_FUNC_H_ -#define FNT_FUNC_H_ - -// fnt_utils.c -extern int fnt_GetLeftFromOrigin( tFntPosition posx, int width ); -extern int fnt_GetTopFromOrigin ( tFntPosition posy, int height ); - -// fnt_font.c -extern void fnt_CreateFont ( tFntEntry* font, const void* fontRsrc, const void* cmapRsrc ); -extern void fnt_CreateDrawContext( tFntDrawContext* dc, u16* canvas, u16 width, u16 height, int type, tFntEntry* font ); - -extern void fnt_DrawLetter ( tFntEntry* font, tFntDrawContext* dc, s32 x, s32 y, u16 letter, int palette ); -extern void fnt_DrawLetterGlyph( tFntEntry* font, tFntDrawContext* dc, s32 x, s32 y, u16 glyph, int palette ); -extern void fnt_DrawString ( tFntEntry* font, tFntDrawContext* dc, tFntPosition posx, tFntPosition posy, int step_x, int step_y, const u16* str, int palette ); -extern int fnt_GetLetterWidth ( tFntEntry* font, u16 letter ); -extern int fnt_GetLetterOffset( tFntEntry* font, u16 letter ); -extern void fnt_DrawLetterGlyphFast( tFntEntry* font, tFntDrawContext* dc, s32 x, s32 y, u16 glyph, int palette ); -extern BOOL fnt_SetDefaultLetter( tFntEntry* font, u16 letter ); - -extern const u16* fnt_GetLineWidth ( tFntEntry* font, const u16* str, int* pwidth, int step_x ); -extern int fnt_GetStringWidth ( tFntEntry* font, const u16* str, int step_x ); -extern int fnt_GetStringHeight( tFntEntry* font, const u16* str, int step_y ); - -extern void fnt_ClearRect( tFntDrawContext* dc, u16 x, u16 y, u16 height, u16 width ); - - -// fnt_layout.c -extern void fnt_DrawMessage ( tFntDrawContext* dc, tFntMessage* message, const u16* mes_data ); -extern void fnt_DrawLetterLayout( tFntDrawContext* dc, const void* layout ); -extern tFntMessage* fnt_GetFntMessage ( const void* layout, int index ); -extern const u16* fnt_GetMessage ( const void* layout, int index ); -extern int fnt_GetMessageNum ( const void* layout ); -extern int fnt_LoadCelltoOam ( const void* celldata, GXOamAttr* poam, tFntPosition posx, tFntPosition posy, int cell_index ); -extern int fnt_DrawCellLayout ( const void* celldata, const void* layout, GXOamAttr* poam ); - -// fnt_celldata.c -extern int fnt_GetCellOamNum ( const void* celldata, int index ); -extern tFntCellCharInfo* fnt_GetCellCharInfo ( const void* celldata, int index ); -extern tFntCellCharOam* fnt_GetCellOam ( const void* celldata, int index ); -extern const void* fnt_GetCellObjChar ( const void* celldata ); -extern u32 fnt_GetCellObjCharSizeAll( const void* celldata ); -extern int fnt_GetCellCharVramMode ( const void* celldata ); -extern int fnt_GetCellCharNameShift ( const void* celldata ); - -// fnt_touch.c -extern int fnt_GetFntRegionNum ( const void* base ); -extern tFntRegion* fnt_GetFntRegion ( const void* base, int index ); -extern int fnt_GetHitFntRegionIndex( const void* base, int x, int y ); - -#endif // FNT_FUNC_H_ diff --git a/build/tests/DispOwnerInfo/include/fnt/fnt_struct.h b/build/tests/DispOwnerInfo/include/fnt/fnt_struct.h deleted file mode 100644 index 9ff11878..00000000 --- a/build/tests/DispOwnerInfo/include/fnt/fnt_struct.h +++ /dev/null @@ -1,224 +0,0 @@ -#ifndef FNT_STRUCT_H_ -#define FNT_STRUCT_H_ - -/** -------------------------------------------------------------------- - Z\ - ----------------------------------------------------------------------*/ -typedef struct tagFntCellInfo -{ - u16 width : 5; // ő32 - u16 height : 5; // ő32 - u16 dummy : 6; -} tFntCellInfo; - -/** -------------------------------------------------------------------- - \ - ----------------------------------------------------------------------*/ -typedef struct tagFntWidthEntry -{ - u16 offset : 8; // ItZbgi͂߂܂ł̃sNZj - u16 width : 8; // -} tFntWidthEntry; - -/** -------------------------------------------------------------------- - tHgCMAP̘Äp\ - ----------------------------------------------------------------------*/ -typedef struct tagFntCtEntry -{ - u16 start; - u16 end; -} tFntCtEntry; - -/** -------------------------------------------------------------------- - tHgǗ\ - ----------------------------------------------------------------------*/ -typedef struct tagFntEntry -{ - const u16* font_image; // tHgC[Wւ̃|C^ - const u16* cmap; // R[h->glyphϊpcmapւ̃|C^ - tFntCtEntry* ctmap; // R[h->glyphϊpcmapւ̃|C^ - tFntWidthEntry* width_table; // e[u - u16 glyph_num; // glyph - u16 default_glyph; // ‚ȂƂɎg镶glyph - s16 cell_size; // ꕶ̃ZTCYi[hPʁj - tFntCellInfo cell_info; // Z̏ - u16 cmap_num; // glyph_comp == 1̂Ƃcmap̐ - u16 ctmap_num; // glyph_comp == 1̂Ƃctmap̐ - u32 glyph_sort : 1; // Ot\[gĂ邩ǂ - u32 glyph_comp : 1; // Ot̘AĂ镔kĂ邩ǂ -} tFntEntry; - -/** -------------------------------------------------------------------- - `悷̃foCXReLXgǗ\ - ----------------------------------------------------------------------*/ -typedef struct tagFntDrawContext -{ - u16* canvas; - u16 width; - u16 height; - u16 canvas_type; - u8 pad[2]; - tFntEntry* font; -} tFntDrawContext; - - -/** -------------------------------------------------------------------- - CAEg\p̍\ - ----------------------------------------------------------------------*/ -/** -------------------------------------------------------------------- - CAEgwb_[ - ----------------------------------------------------------------------*/ -typedef struct tagFntLayoutHeader -{ - u8 name[4]; - u16 version; - u16 table_num; -} tFntLayoutHeader; - -/** -------------------------------------------------------------------- - CMAPwb_[ - ----------------------------------------------------------------------*/ -typedef struct tagFntCmapHeader -{ - u32 ct_offset; - u32 cm_offset; -} tFntCmapHeader; - -/** -------------------------------------------------------------------- - CAEg\̂߂̃bZ[W\ - ----------------------------------------------------------------------*/ -typedef struct tagFntPosition -{ - s16 pos : 12; - u16 pos_origin : 2; - u16 text_align : 2; -} tFntPosition; // ̐錾łA2BytesɂƎ܂BnɂẮAsizeof()Ń`FbN邱ƁB - - - - -/** ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - CAEg\邽߂̍\́B - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ -/** -------------------------------------------------------------------- - bZ[W\ - - bZ[Wf[^́A - tFntLayoutHeader header; - tFntMessage message[header.table_num]; - ō\܂B - ----------------------------------------------------------------------*/ -typedef struct tagFntMessage -{ - // ʒu - tFntPosition x; - tFntPosition y; - - // Ԋu - s16 spacing_x : 8; - s16 spacing_y : 8; - - // F - u16 color : 8; - u16 palette : 4; - u16 font : 4; - - // bZ[Wւ̃ItZbg - u32 offset; -} tFntMessage; - - - - -/** ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - OBJ̃Z߂̍\ - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ -/** -------------------------------------------------------------------- - Z\ - - Zf[^́A - tFntLayoutHeader header; - tFntCell cell[header.table_num]; - ō\܂B - ----------------------------------------------------------------------*/ -typedef struct tagFntCell -{ - // ʒu - tFntPosition x; - tFntPosition y; - - // ZLN^ւ̃CfbNX - u32 cell_index; -} tFntCell; - -/** -------------------------------------------------------------------- - ZLN^\ - - ZLN^f[^́A - tFntLayoutHeader header; - tFntCellCharHeader char_header; - tFntCellCharInfo cellchar_info[header.table_num]; - tFntCellCharOam cellchar_oam[]; - u16 char_data[]; - ō\܂B - ----------------------------------------------------------------------*/ -/** -------------------------------------------------------------------- - ZLN^wb_ - ----------------------------------------------------------------------*/ -typedef struct tagFntCellCharHeader -{ - u32 cell_offset; // tFntCellCharzւ̃ItZbg - u32 oam_offset; // tFntOamCharzւ̃ItZbg - u32 char_offset; // LN^f[^ւ̃ItZbg - u32 char_size; // LN^f[^̃TCY - u32 char_mode : 3; // OBJVRAMMODE_CHAR_1DEXOBJtO -} tFntCellCharHeader; - -/** -------------------------------------------------------------------- - ZLN^ - ----------------------------------------------------------------------*/ -typedef struct tagFntCellCharInfo -{ - u16 width : 8; // Z̑傫B - u16 height : 8; - u16 oam_index; // oam_offset[oam_index] A - u16 oam_num; // oam_numoamgp܂B -} tFntCellCharInfo; - -/** -------------------------------------------------------------------- - OAM - ----------------------------------------------------------------------*/ -typedef struct tagFntCellCharOam -{ - GXOamAttr attr; // CharNamé̕Agp܂Bi[hʒu[U`ɂ邽߁Bj - u16 char_index; // LN^f[^̃CfbNXB - u16 char_num; // LN^f[^̐BiőA64炢j -} tFntCellCharOam; - - - - -/** ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - - ^b`̏ꏊ擾邽߂̍\ - - ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ -/** -------------------------------------------------------------------- - [W - ----------------------------------------------------------------------*/ -typedef struct tagFntRegion -{ - // ʒu - tFntPosition x; - tFntPosition y; - - // TCY - u16 width : 8; // Z̑傫B - u16 height : 8; -} tFntRegion; - -#endif // FNT_STRUCT_H_ diff --git a/build/tests/DispOwnerInfo/main.rsf b/build/tests/DispOwnerInfo/main.rsf deleted file mode 100644 index cc22e856..00000000 --- a/build/tests/DispOwnerInfo/main.rsf +++ /dev/null @@ -1,41 +0,0 @@ -# -# Nitro ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).sbin" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.sbin" - OverlayTable "$(MAKEROM_ARM9:r)_table.sbin" - Nef "$(MAKEROM_ARM9:r).nef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7:r).sbin" - OverlayDefs "$(MAKEROM_ARM7:r)_defs.sbin" - OverlayTable "$(MAKEROM_ARM7:r)_table.sbin" - Nef "$(MAKEROM_ARM7:r).nef" -} - -Property -{ - BannerFile ./banner/myGameBanner.bnr -# ForChina TRUE -# ForKorea TRUE -# RomSpeedType MROM -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - - Align 512 - Padding 0xFF - - HostRoot data - Root /data - File *.bncmp *.bnfr -} - diff --git a/build/tests/DispOwnerInfo/mlib/ARM9-TS/Release/libfnt.a b/build/tests/DispOwnerInfo/mlib/ARM9-TS/Release/libfnt.a deleted file mode 100644 index 8a3c56756f3f89ba41f8cc13e3e407ac2f14b03e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 432814 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

Uj&E^-Npa5ZTFMTDxc&_ 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%0AG?ovu5-_gUE(-4FxyiU>7KAM(`j`(wcK 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 A&;S4c diff --git a/build/tests/DispOwnerInfo/mlib/ARM9-TS/Rom/libfnt.a b/build/tests/DispOwnerInfo/mlib/ARM9-TS/Rom/libfnt.a deleted file mode 100644 index 6d345064df1bdc76703ff85bb974a377c764237f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 431910 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%0AFUtd{lE$P!}V?C>XiNGzWl&9~GR63PmEM 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ցj - ܂ASDKconfig.h̖ONitroConfigData.hƓt@CĂ̂ŁACN[hȂ悤AMakefileŃRpCIPL2_BUILD_V{^悤ύXB - - Revision 1.2 2004/05/19 08:25:28 yosiokat - XVO̒ljB - - -*/ - - -#ifndef NITRO_CONFIG_DATA_H_ -#define NITRO_CONFIG_DATA_H_ -#if defined(SDK_CW) // NitroConfigDataɃrbgtB[hgĂ̂ŁARpCˑŕs”\B - // āACWȊÕRpC̏ꍇ́Ãwb_𖳌ɂăG[o悤ɂčĊmFB -#ifdef __cplusplus -extern "C" { -#endif - - -#include - -#define USING_COMPONENT // IPL2ł͂Ȃ̂ŁÃXCb`LɁB - - -// define data ------------------------------------ -#define NITRO_CONFIG_DATA_VERSION 5 // NITROݒf[^tH[}bgo[W -#define NITRO_CONFIG_DATA_EX_VERSION 1 // gNITROݒf[^tH[}bgo[W -#define NCD_NICKNAME_LENGTH 10 // jbNl[ -#define NCD_COMMENT_LENGTH 26 // Rg -#define NCD_FAVORITE_COLOR_MAX_NUM 16 // DȐF̍ő吔 - -#define NCD_ROM_ADDR_SHIFT 3 // IPL2wb_NitroConfigDatai[AhX̃Vtgl -#define FONT_ROM_ADDR_SHIFT 2 // IPL2wb_̃tHgf[^i[AhX̃Vtgl -#define NCD_SYS_RSV_SIZE 1024 // VXe\̈TCY -#define NCD_APP_RSV_SIZE 512 // Av@\̈TCY - // NCD_SYS_RSV_ROM_ADDR = ncd_rom_addr - NCD_SYS_RSV_SIZE - // NCD_APP_RSV_ROM_ADDR = ncd_rom_addr - NCD_SYS_RSV_SIZE - NCD_APP_RSV_SIZE -#define USG_BACKLIGHT_DEFAULT 2 // USG̃obNCgftHgl - - -// ݒR[h -typedef enum NvLangCode{ - LANG_JAPANESE =0, // { - LANG_ENGLISH, // p - LANG_FRENCH, // tX - LANG_GERMAN, // hCc - LANG_ITALIAN, // C^A - LANG_SPANISH, // XyC - LANG_CHINESE, // - LANG_HANGUL, // ؍ - LANG_CODE_MAX -}NvLangCode; - -#define LANG_CODE_MAX_WW LANG_CHINESE // ňȑO̒ʏIPL2łLANG_CODE_MAX - -#define LANG_BITMAP_WW ( ( 0x0001 << LANG_JAPANESE ) \ - | ( 0x0001 << LANG_ENGLISH ) \ - | ( 0x0001 << LANG_FRENCH ) \ - | ( 0x0001 << LANG_GERMAN ) \ - | ( 0x0001 << LANG_ITALIAN ) \ - | ( 0x0001 << LANG_SPANISH ) ) // ʏłł̑Ήrbg}bv - -#define LANG_BITMAP_CN ( ( 0x0001 << LANG_ENGLISH ) \ - | ( 0x0001 << LANG_FRENCH ) \ - | ( 0x0001 << LANG_GERMAN ) \ - | ( 0x0001 << LANG_ITALIAN ) \ - | ( 0x0001 << LANG_SPANISH ) \ - | ( 0x0001 << LANG_CHINESE ) ) // łł̑Ήrbg}bv - -#define LANG_BITMAP_KR ( ( 0x0001 << LANG_JAPANESE ) \ - | ( 0x0001 << LANG_ENGLISH ) \ - | ( 0x0001 << LANG_FRENCH ) \ - | ( 0x0001 << LANG_GERMAN ) \ - | ( 0x0001 << LANG_SPANISH ) \ - | ( 0x0001 << LANG_HANGUL ) ) // ؍łł̑Ήrbg}bv - -// tf[^ -typedef struct NvDate{ - u8 month; // :01`12 - u8 day; // :01`31 -}NvDate; // 2byte - -// jbNl[ -typedef struct NvNickname{ - u16 str[NCD_NICKNAME_LENGTH]; // jbNl[iUnicode(UTF16)ōő10AI[R[hȂj - u8 length; // - u8 rsv; -}NvNickname; // 22byte - -// Rg -typedef struct NvComment{ - u16 str[NCD_COMMENT_LENGTH]; //RgiUnicode(UTF16)ōő26AI[R[hȂj - u8 length; // - u8 rsv; -}NvComment; // 54byte - -// I[i[ -typedef struct NvOwnerInfo{ - u8 favoriteColor : 4; // DȐF - u8 rsv : 4; // \B - NvDate birthday; // N - u8 pad; - NvNickname nickname; // jbNl[ - NvComment comment; // Rg -}NvOwnerInfo; // 80byte - -// IPLpڊo܂vf[^ -typedef struct NvAlarm{ - u8 hour; // A[:00`23 - u8 minute; // A[:00`59 - u8 rsv1; // \ - u8 pad; - u16 alarmOn : 1; // A[ON,OFFi0:OFF, 1:ONj - u16 rsv2 : 15; // \ -}NvAlarm; // 6byte - -// ^b`plLu[Vf[^ -typedef struct NvTpCalibData{ - u16 raw_x1; // PLu[V_TP擾lX - u16 raw_y1; // @@@@V@@@@@@@@TP擾lY - u8 dx1; // @@@@V@@@@@@@@LCDW X - u8 dy1; // @@@@V@@@@@@@@LCDW Y - u16 raw_x2; // QLu[V_TP擾lX - u16 raw_y2; // @@@@V@@@@@@@@TP擾lY - u8 dx2; // @@@@V@@@@@@@@LCDW X - u8 dy2; // @@@@V@@@@@@@@LCDW Y -}NvTpCalibData; // 12byte - -// IvV -typedef struct NvOption{ - u16 language : 3; // R[hiLANG_SPANISH܂ł̕WR[hj - u16 agbLcd : 1; // AGB[hŋN鎞ɂǂLCDŋN邩Hi0:TOP,1:BOTTOMj - u16 backLightBrightness : 2; // obNCgPxf[^ - u16 autoBootFlag : 1; // NV[PXŁAj[~ȂŎN邩ǂH(0:OFF, 1:ON) - u16 backLightOffFlag : 1; // obNCgON,OFFtOi0:ON, 1:OFFj - u16 rsv2 : 1; // \B - u16 destroyFlashFlag : 1; // tbVV[PXtO - u16 input_birthday : 1; // a͂ꂽH - u16 input_favoriteColor : 1; // DȐF͂ꂽH - u16 input_tp : 1; // ^b`plLu[VꂽHi V ) - u16 input_language : 1; // ͂ꂽH@ (0:ݒ, 1:ݒς) - u16 input_rtc : 1; // RTCݒ肪ꂽH ( V@@@@@ ) - u16 input_nickname : 1; // jbNl[͂ꂽH ( V@@@@@ ) - u8 rtcLastSetYear; // RTC̑OݒN - u8 rtcClockAdjust; // RTCNbNl - s64 rtcOffset; // RTCݒ莞̃ItZbgli[U[RTCݒύXxɂ̒lɉđ܂Bj -}NvOption; // 12byte - -// NITROeݒf[^ -typedef struct NitroConfigData{ - u8 version; // tbVi[f[^tH[}bg̃o[W - u8 pad; - NvOwnerInfo owner; // I[i[ - NvAlarm alarm; // IPLpڊo܂vf[^ - NvTpCalibData tp; // ^b`plLu[Vf[^ - NvOption option; // IvV -}NitroConfigData; // 112byte - -// NITROeݒf[^NVRAMۑtH[}bg -typedef struct NCDStore{ - NitroConfigData ncd; // NITROeݒf[^ - u16 saveCount; // 0x00-0x7f[văJEgAJEglVf[^LB - u16 crc16; // NITROeݒf[^16bitCRC - u8 pad[ 128 - sizeof(NitroConfigData) - 4]; -}NCDStore; // 128byte // {ȂAsaveCountcrc16256byte̍ŌɕtāAԂɃpfBO𖄂߂B - - -//---------------------------------------------- -// IPL2łł̊gtH[}bg -//---------------------------------------------- -// gNITROݒf[^ -typedef struct NitroConfigDataEx{ - u8 version; // o[W - u8 language; // R[hiLANG_CHINESEȍ~ɊgꂽlBj - u16 valid_language_bitmap; // {IPL2ŗLȌR[hrbg}bv - u8 pad[ 256 - sizeof(NitroConfigData) - 4 - 4 - 2 ]; // 4:saveCount+crc16, 2:NCDEx.version+NCDEx.language, 2:crc16_ex -}NitroConfigDataEx; // 138bytes - -// NITROeݒf[^NVRAMۑtH[}bg -typedef struct NCDStoreEx{ - NitroConfigData ncd; // NITROeݒf[^ - u16 saveCount; // 0x00-0x7f[văJEgAJEglVf[^LB - u16 crc16; // NITROeݒf[^16bitCRC - NitroConfigDataEx ncd_ex; - u16 crc16_ex; -}NCDStoreEx; // 256byte // {ȂAsaveCountcrc16256byte̍ŌɕtāAԂɃpfBO𖄂߂B - - -typedef struct NCDTimeStamp { - u8 minute; - u8 hour; - u8 day; - u8 month; - u8 year; -}NCDTimeStamp; - - -//========================================================= -// NVRAMւ̃[hCg֐ -//========================================================= -#ifdef SDK_ARM9 -extern int NVRAMm_ReadNitroConfigData (NitroConfigData *dstp); -extern void NVRAMm_WriteNitroConfigData(NitroConfigData *dstp); -#endif - - -//========================================================= -// NITROݒf[^ւ̃ANZX֐ -//========================================================= -extern NitroConfigDataEx ncdEx; -extern u16 valid_lang_bitmap; - -#define GetNcdWorkAddr() ( (NitroConfigData *)( HW_NVRAM_USER_INFO ) ) -#define GetNcdExWorkAddr() ( &ncdEx ) - // NITROݒf[^̈̃AhXl - -extern void NCD_ClearOwnerInfo( void ); // jbNl[EaEDȐF̃NA - -#ifdef USING_COMPONENT -extern void NCD_ReadIPL2Header ( void ); // IPL2wb_̓ǂݏoB -extern u8 NCD_GetIPL2Type ( void ); // IPL2^Cv̎擾B -extern u16 NCD_GetIPL2TypeEx ( void ); // gIPL2^Cv̎擾B -extern u8 *NCD_GetIPL2Version ( void ); // IPL2o[W̎擾B -extern u32 NCD_GetNCDRomAddr ( void ); // NCDi[ROMAhX̎擾B -extern u32 NCD_GetSysRsvRomAddr( void ); // VXe\̈ROMAhX̎擾B -extern u32 NCD_GetAppRsvRomAddr( void ); // Av@\̈ROMAhX̎擾B -extern u32 NCD_GetIPL2BM7RomAddr( void ); // u[gj[ARM7R[hROMAhX̎擾B -extern u32 NCD_GetIPL2DataRomAddr( void ); // IPL2f[^ROMAhX̎擾B -extern u32 NCD_GetFontBncmpRomAddr( void ); // tHgf[^bncmpROMAhX擾BiŁA{Vłł̂ݗLBj -extern u32 NCD_GetFontBnfrRomAddr( void ); // tHgf[^bnfr ROMAhX擾BiŁA{Vłł̂ݗLBj -#endif - -//========================================================= -// f[^擾 -//========================================================= - -//----------------------------------- -// I[i[Ŝ̎擾B -static inline NvOwnerInfo *NCD_GetOwnerInfo(void) -{ - return &GetNcdWorkAddr()->owner; -} - -// DȐF̎擾B -static inline u8 NCD_GetFavoriteColor(void) -{ - return (u8)GetNcdWorkAddr()->owner.favoriteColor; -} - -// a̎擾B -static inline NvDate *NCD_GetBirthday(void) -{ - return &GetNcdWorkAddr()->owner.birthday; -} - -// jbNl[̎擾B -static inline NvNickname *NCD_GetNickname(void) -{ - return &GetNcdWorkAddr()->owner.nickname; -} - -// Rg̎擾B -static inline NvComment *NCD_GetComment(void) -{ - return &GetNcdWorkAddr()->owner.comment; -} - - -//----------------------------------- -// A[̎擾B -static inline NvAlarm *NCD_GetAlarmData(void) -{ - return &GetNcdWorkAddr()->alarm; -} - - -//----------------------------------- -// ^b`plLu[Vf[^̎擾B -static inline NvTpCalibData *NCD_GetTPCalibration(void) -{ - return &GetNcdWorkAddr()->tp; -} - - -//----------------------------------- -// IvV̎擾B - -// R[h̎擾 -static inline NvLangCode NCD_GetLanguageOrg(void) -{ - return (NvLangCode)GetNcdWorkAddr()->option.language; -} - -static inline NvLangCode NCD_GetLanguage(void) -{ - return (NvLangCode)GetNcdExWorkAddr()->language; -} - - -// RTCItZbgl̎擾 -static inline s64 NCD_GetRtcOffset(void) -{ - return GetNcdWorkAddr()->option.rtcOffset; -} - -// RTCNbNl̎擾 -static inline u8 NCD_GetRtcClockAdjust(void) -{ - return GetNcdWorkAddr()->option.rtcClockAdjust; -} - -// RTC̑OZbgN̎擾 -static inline u8 NCD_GetRtcLastSetYear(void) -{ - return GetNcdWorkAddr()->option.rtcLastSetYear; -} - -// NV[PX̎NONHi0:OFF, 1:ONj -static inline int NCD_GetAutoBootFlag(void) -{ - return (int)GetNcdWorkAddr()->option.autoBootFlag; -} - -// obNCgOFFHi0:ON, 1:OFFj -static inline int NCD_GetBackLightOffFlag(void) -{ - return (int)GetNcdWorkAddr()->option.backLightOffFlag; -} - -// tbVV[PXǂH -static inline int NCD_GetDestroyFlash(void) -{ - return (int)GetNcdWorkAddr()->option.destroyFlashFlag; -} - -// af[^ZbgĂ邩H -static inline int NCD_GetInputBirthday(void) -{ - return (int)GetNcdWorkAddr()->option.input_birthday; -} - -// DȐFf[^ZbgĂ邩H -static inline int NCD_GetInputFavoriteColor(void) -{ - return (int)GetNcdWorkAddr()->option.input_favoriteColor; -} - -// TPLu[Vf[^ZbgĂ邩H -static inline int NCD_GetInputTP(void) -{ - return (int)GetNcdWorkAddr()->option.input_tp; -} - -// R[hZbgĂ邩H -static inline int NCD_GetInputLanguage(void) -{ - return (int)GetNcdWorkAddr()->option.input_language; -} - -// RTCf[^ZbgĂ邩H -static inline int NCD_GetInputRTC(void) -{ - return (int)GetNcdWorkAddr()->option.input_rtc; -} - -// I[i[̃jbNl[ZbgĂ邩H -static inline int NCD_GetInputNickname(void) -{ - return (int)GetNcdWorkAddr()->option.input_nickname; -} - -//========================================================= -// f[^Zbg -//========================================================= -//----------------------------------- -// I[i[Ŝ̃ZbgB -static inline void NCD_SetOwnerInfo(NvOwnerInfo *owinfop) -{ - SVC_CpuCopy( owinfop, &GetNcdWorkAddr()->owner, sizeof(NvOwnerInfo), 16); -} - -// DȐF̃ZbgB -static inline void NCD_SetFavoriteColor(u8 favoriteColor) -{ - GetNcdWorkAddr()->owner.favoriteColor = favoriteColor; -} - -// ãZbgB -static inline void NCD_SetBirthday(NvDate *birthp) -{ - GetNcdWorkAddr()->owner.birthday.month = birthp->month; - GetNcdWorkAddr()->owner.birthday.day = birthp->day; -} - -// jbNl[̃ZbgB -static inline void NCD_SetNickname(NvNickname *namep) -{ - SVC_CpuCopy( namep, &GetNcdWorkAddr()->owner.nickname, sizeof(NvNickname), 16); -} - -// Rg̃ZbgB -static inline void NCD_SetComment(NvComment *commentp) -{ - SVC_CpuCopy( commentp, &GetNcdWorkAddr()->owner.comment, sizeof(NvComment), 16); -} - - -//----------------------------------- -// A[̃ZbgB -static inline void NCD_SetAlarmData(NvAlarm *alarmp) -{ - SVC_CpuCopy( alarmp, &GetNcdWorkAddr()->alarm, sizeof(NvAlarm), 16); -} - - -//----------------------------------- -// ^b`plLu[Vf[^̃ZbgB -static inline void NCD_SetTPCalibration(NvTpCalibData *tp_calibp) -{ - SVC_CpuCopy( tp_calibp, &GetNcdWorkAddr()->tp, sizeof(NvTpCalibData), 16); -} - - -//----------------------------------- -// IvṼZbgB - -// R[h̃Zbg -#if 0 -static inline void NCD_SetLanguage(NvLangCode language) -{ - GetNcdExWorkAddr()->language = language; - GetNcdExWorkAddr()->valid_language_bitmap = LANG_BITMAP_CHINESE; - - if( language == LANG_CHINESE ) { - GetNcdWorkAddr()->option.language = LANG_ENGLISH; - }else { - GetNcdWorkAddr()->option.language = language; - } -} -#endif - -// RTCItZbgl̃Zbg -static inline void NCD_SetRtcOffset(s64 rtcOffset) -{ - GetNcdWorkAddr()->option.rtcOffset = rtcOffset; -} - -// RTCNbNl̃Zbg -static inline void NCD_SetRtcClockAdjust(u8 rtcClockAdjust) -{ - GetNcdWorkAddr()->option.rtcClockAdjust = rtcClockAdjust; -} - - -// RTCLastSetYearւ̃Zbg -static inline void NCD_SetRtcLastSetYear(u8 rtcLastSetYear) -{ - GetNcdWorkAddr()->option.rtcLastSetYear = rtcLastSetYear; -} - - -// NV[PX̎NON,OFFtOZbgB -static inline void NCD_SetAutoBootFlag(BOOL autoBootFlag) -{ - GetNcdWorkAddr()->option.autoBootFlag = (u16)autoBootFlag; -} - -// obNCgON,OFFtOZbgB -static inline void NCD_SetBackLightOffFlag(BOOL backLightOffFlag) -{ - GetNcdWorkAddr()->option.backLightOffFlag = (u16)backLightOffFlag; -} - -// tbVV[PXǂ̃tOZbgB -static inline void NCD_SetDestroyFlash(BOOL destroy) -{ - GetNcdWorkAddr()->option.destroyFlashFlag = (u16)destroy; -} - -// af[^͍̓ς݃tOZbgB -static inline void NCD_SetInputBirthday(BOOL input) -{ - GetNcdWorkAddr()->option.input_birthday = (u16)input; -} - -// DȐFf[^͍̓ς݃tOZbgB -static inline void NCD_SetInputFavoriteColor(BOOL input) -{ - GetNcdWorkAddr()->option.input_favoriteColor = (u16)input; -} - -// TPLu[Vf[^͍̓ς݃tOZbgB -static inline void NCD_SetInputTP(BOOL input) -{ - GetNcdWorkAddr()->option.input_tp = (u16)input; -} - -// R[h͍̓ς݃tOZbgB -static inline void NCD_SetInputLanguage(BOOL input) -{ - GetNcdWorkAddr()->option.input_language = (u16)input; -} - -// RTCf[^͍̓ς݃tOZbgB -static inline void NCD_SetInputRTC(BOOL input) -{ - GetNcdWorkAddr()->option.input_rtc = (u16)input; -} - -// I[i[̃jbNl[͍̓ς݃tOZbgB -static inline void NCD_SetInputNickname(BOOL input) -{ - GetNcdWorkAddr()->option.input_nickname = (u16)input; -} - - - -#ifdef __cplusplus -} -#endif - -#endif // SDK_CW -#endif // NITRO_CONFIG_DATA_H_ diff --git a/build/tests/DispOwnerInfo/src/data.c b/build/tests/DispOwnerInfo/src/data.c deleted file mode 100644 index 39420c0e..00000000 --- a/build/tests/DispOwnerInfo/src/data.c +++ /dev/null @@ -1,595 +0,0 @@ -/********************************************************************/ -/* data.c */ -/* DebugForIPL2 */ -/* */ -/* Copyright (C) 2003-2004 NINTENDO Co.,Ltd. */ -/********************************************************************/ -/* - f[^Q - - $Log: data.c,v $ - Revision 1.3 2005/04/02 07:43:18 yosiokat - IPL2tHg\̂߂̃f[^`ljB - - Revision 1.2 2005/03/31 06:01:14 yosiokat - CfgB - - Revision 1.1 2004/08/31 06:20:24 Yosiokat - Initial revision - - -*/ - - - -#include -#include "data.h" - -// global variables---------------------------------------- -int (*nowProcess)(void); // ݎs̃vZX -GXOamAttr oamBakM[ 128 ]; // OAM obNAbv -GXOamAttr oamBakS[ 128 ]; // OAM obNAbv -u16 bgBakM[ 32*24 ]; // BG obNAbv -u16 bgBakS[ 32*24 ]; // BG obNAbv -TpWork tpd; // ^b`plf[^ -KeyWork pad; // L[pbh̓f[^ - - -// IPL2tHg\p -tFntEntry font_m; -tFntDrawContext context_m; -u16 canvas_m[ CANVAS_WIDTH * CANVAS_HEIGHT / 4 ] ATTRIBUTE_ALIGN(32); -u16 screen_m[ (CANVAS_WIDTH>>3) * (CANVAS_HEIGHT>>3) ] ATTRIBUTE_ALIGN(32); - -tFntEntry font_s; -tFntDrawContext context_s; -u16 canvas_s[ CANVAS_WIDTH * CANVAS_HEIGHT / 4 ] ATTRIBUTE_ALIGN(32); -u16 screen_s[ (CANVAS_WIDTH>>3) * (CANVAS_HEIGHT>>3) ] ATTRIBUTE_ALIGN(32); - -u16 s_Palette[] = { - 0x0000, 0x001f, 0x03e0, 0x03ff, - 0x7c00, 0x7c1f, 0x7fe0, 0x7fff, - 0x0000, 0x001f, 0x03e0, 0x03ff, - 0x7c00, 0x7c1f, 0x7fe0, 0x7fff, -}; - -/*---------------------- pbgf[^ ---------------------------*/ -#define RGB555(r,g,b) (b<<10|g<<5|r) - -// wix[X -const u16 myPlttData[13][16] = { - {RGB555( 0, 0, 0), RGB555(31, 31, 31), RGB555(15, 15, 15), RGB555( 0, 0, 0),}, // White - {RGB555( 0, 0, 0), RGB555(31, 0, 0), RGB555( 0, 0, 0), RGB555( 0, 0, 0),}, // Red - {RGB555( 0, 0, 0), RGB555( 0, 19, 0), RGB555( 0, 0, 0), RGB555( 0, 0, 0),}, // Green - {RGB555( 0, 0, 0), RGB555( 0, 11, 31), RGB555( 0, 0, 0), RGB555( 0, 0, 0),}, // Blue - {RGB555( 0, 0, 0), RGB555(31, 31, 0), RGB555( 0, 0, 0), RGB555( 0, 0, 0),}, // Yellow - {RGB555( 0, 0, 0), RGB555( 0, 31, 31), RGB555( 0, 0, 0), RGB555( 0, 0, 0),}, // Cyan - {RGB555( 0, 0, 0), RGB555(31, 0, 31), RGB555( 0, 0, 0), RGB555( 0, 0, 0),}, // Purple - {RGB555( 0, 0, 0), RGB555( 0, 31, 0), RGB555( 0, 0, 0), RGB555( 0, 0, 0),}, // Light Green - {RGB555( 0, 0, 0), RGB555( 0, 0, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // HighLight Yellow - {RGB555( 0, 0, 0), RGB555( 0, 0, 0), RGB555( 0, 31, 31), RGB555( 0, 31, 31),}, // HighLight CYAN - {RGB555( 0, 0, 0), RGB555( 0, 0, 0), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // HighLight WHITE - {RGB555( 0, 0, 0), RGB555( 0, 0, 0), RGB555( 0, 11, 31), RGB555( 0, 11, 31),}, // HighLight BLUE - {RGB555( 0, 0, 0), RGB555( 0, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // HighLight RED -}; - - -/*---------------------- LN^f[^ -------------------------*/ -/* -const u32 sampleCharData[8*0x100] = { - 0x00000000,0x00000000,0x00000000,0x00000000, // 0000h - 0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x01010010,0x01010010,0x00000110, // 0001h - 0x00011010,0x01100010,0x00000010,0x00000010, - 0x00000000,0x01011010,0x01010010,0x00010010, // 0002h - 0x00100010,0x00100010,0x00100001,0x00100001, - 0x00000000,0x01010001,0x01010001,0x01111111, // 0003h - 0x00000001,0x00000001,0x00000001,0x01111110, - 0x00000000,0x01010000,0x01111111,0x00100000, // 0004h - 0x00100000,0x00010000,0x00001000,0x00000110, - 0x00000000,0x01010000,0x01010100,0x00001010, // 0005h - 0x00010001,0x00100001,0x01000000,0x00000000, - 0x00000000,0x01011000,0x01011000,0x01111111, // 0006h - 0x00001000,0x00101010,0x01001010,0x01001001, - 0x00000000,0x01010010,0x01101111,0x01010010, // 0007h - 0x00010010,0x00010010,0x00010010,0x00001001, - 0x00000000,0x01010010,0x01011111,0x00000100, // 0008h - 0x00011111,0x00001000,0x00000001,0x00011110, - 0x00000000,0x01010000,0x01011000,0x00000110, // 0009h - 0x00000001,0x00000110,0x00011000,0x00100000, - 0x00000000,0x01010000,0x01111101,0x00010001, // 000ah - 0x00010001,0x00010001,0x00010001,0x00001010, - 0x00000000,0x01010000,0x01011110,0x00100000, // 000bh - 0x00000000,0x00000001,0x00000001,0x00111110, - 0x00000000,0x01010100,0x01011111,0x00001000, // 000ch - 0x00010000,0x00000001,0x00000001,0x00011110, - 0x00000000,0x01010001,0x01010001,0x00000001, // 000dh - 0x01000001,0x01000001,0x00100010,0x00011100, - 0x00000000,0x01010000,0x01111111,0x00011000, // 000eh - 0x00010100,0x00010100,0x00011000,0x00001100, - 0x00000000,0x01010010,0x01111111,0x00010010, // 000fh - 0x00010010,0x00000010,0x00000010,0x00111100, - 0x00000000,0x00001110,0x01010100,0x01010010, // 0010h - 0x00111111,0x00000100,0x00000100,0x00011000, - 0x00000000,0x01010100,0x01011111,0x00000100, // 0011h - 0x01110100,0x00000010,0x00001010,0x01110010, - 0x00000000,0x01010100,0x01011111,0x00000010, // 0012h - 0x00011110,0x00100001,0x00100000,0x00011110, - 0x00000000,0x01010000,0x01011100,0x00100011, // 0013h - 0x01000000,0x01000000,0x00100000,0x00011100, - 0x00000000,0x01010000,0x01111111,0x00010000, // 0014h - 0x00001000,0x00001000,0x00001000,0x00110000, - 0x00000000,0x01010010,0x01010010,0x00001100, // 0015h - 0x00000010,0x00000001,0x00000001,0x00111110, - 0x00000000,0x01010001,0x01111101,0x00010001, // 0016h - 0x00010001,0x00111001,0x01010101,0x00011001, - 0x00000000,0x01010100,0x01010011,0x01110010, // 0017h - 0x00010001,0x00010001,0x00001010,0x00000100, - 0x00000000,0x01011110,0x01011000,0x00000100, // 0018h - 0x00101001,0x01010001,0x01010001,0x00001100, - 0x00000000,0x01010000,0x01011100,0x00010010, // 0019h - 0x00010010,0x00100001,0x01000000,0x00000000, - 0x00000000,0x01011101,0x01010001,0x00111101, // 001ah - 0x00010001,0x00011001,0x00110101,0x00001001, - 0x00000000,0x01110001,0x01011101,0x00110001, // 001bh - 0x00010001,0x00111001,0x01010101,0x00011001, - 0x00000000,0x01110100,0x01010011,0x00110010, // 001ch - 0x00010001,0x00010001,0x00001010,0x00000100, - 0x00000000,0x01101110,0x01011000,0x00100100, // 001dh - 0x00101001,0x01010001,0x01010001,0x00001100, - 0x00000000,0x01110000,0x01011100,0x00110010, // 001eh - 0x00010010,0x00100001,0x01000000,0x00000000, - 0x00000000,0x01111101,0x01010001,0x00111101, // 001fh - 0x00010001,0x00011001,0x00110101,0x00001001, - 0x00000000,0x00000000,0x00000000,0x00000000, // 0020h - 0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00001000,0x00001000,0x00001000, // 0021h - 0x00001000,0x00001000,0x00000000,0x00001000, - 0x00000000,0x01101100,0x01001000,0x00100100, // 0022h - 0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00100100,0x01111111,0x00100100, // 0023h - 0x00100100,0x01111111,0x00010010,0x00010010, - 0x00000000,0x00001000,0x01111110,0x00001001, // 0024h - 0x00111110,0x01001000,0x00111111,0x00001000, - 0x00000000,0x01000010,0x00100101,0x00010010, // 0025h - 0x00001000,0x00100100,0x01010010,0x00100001, - 0x00000000,0x00001110,0x00010001,0x00001001, // 0026h - 0x01000110,0x00101001,0x00110001,0x01001110, - 0x00000000,0x00011000,0x00010000,0x00001000, // 0027h - 0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x01110000,0x00001000,0x00000100, // 0028h - 0x00000100,0x00000100,0x00001000,0x01110000, - 0x00000000,0x00000111,0x00001000,0x00010000, // 0029h - 0x00010000,0x00010000,0x00001000,0x00000111, - 0x00000000,0x00001000,0x01001001,0x00101010, // 002ah - 0x00011100,0x00101010,0x01001001,0x00001000, - 0x00000000,0x00001000,0x00001000,0x00001000, // 002bh - 0x01111111,0x00001000,0x00001000,0x00001000, - 0x00000000,0x00000000,0x00000000,0x00000000, // 002ch - 0x00000000,0x00001100,0x00001000,0x00000100, - 0x00000000,0x00000000,0x00000000,0x00000000, // 002dh - 0x01111111,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000, // 002eh - 0x00000000,0x00000000,0x00000000,0x00001100, - 0x00000000,0x01000000,0x00100000,0x00010000, // 002fh - 0x00001000,0x00000100,0x00000010,0x00000001, - 0x00000000,0x00111110,0x01000001,0x01000001, // 0030h - 0x01000001,0x01000001,0x01000001,0x00111110, - 0x00000000,0x00011100,0x00010000,0x00010000, // 0031h - 0x00010000,0x00010000,0x00010000,0x00010000, - 0x00000000,0x00111110,0x01000001,0x01000000, // 0032h - 0x00111110,0x00000001,0x00000001,0x01111111, - 0x00000000,0x00111110,0x01000001,0x01000000, // 0033h - 0x00111110,0x01000000,0x01000001,0x00111110, - 0x00000000,0x00100000,0x00110000,0x00101000, // 0034h - 0x00100100,0x00100010,0x01111111,0x00100000, - 0x00000000,0x01111111,0x00000001,0x00111111, // 0035h - 0x01000000,0x01000000,0x01000001,0x00111110, - 0x00000000,0x00111110,0x00000001,0x00111111, // 0036h - 0x01000001,0x01000001,0x01000001,0x00111110, - 0x00000000,0x01111111,0x00100000,0x00100000, // 0037h - 0x00010000,0x00010000,0x00001000,0x00001000, - 0x00000000,0x00111110,0x01000001,0x01000001, // 0038h - 0x00111110,0x01000001,0x01000001,0x00111110, - 0x00000000,0x00111110,0x01000001,0x01000001, // 0039h - 0x01000001,0x01111110,0x01000000,0x00111110, - 0x00000000,0x00000000,0x00001100,0x00000000, // 003ah - 0x00000000,0x00000000,0x00001100,0x00000000, - 0x00000000,0x00000000,0x00001100,0x00000000, // 003bh - 0x00000000,0x00001100,0x00001000,0x00000100, - 0x00000000,0x01100000,0x00011000,0x00000110, // 003ch - 0x00000001,0x00000110,0x00011000,0x01100000, - 0x00000000,0x00000000,0x01111111,0x00000000, // 003dh - 0x00000000,0x00000000,0x01111111,0x00000000, - 0x00000000,0x00000011,0x00001100,0x00110000, // 003eh - 0x01000000,0x00110000,0x00001100,0x00000011, - 0x00000000,0x00111110,0x01000001,0x01000001, // 003fh - 0x00110000,0x00001000,0x00000000,0x00001000, - 0x00000000,0x00011100,0x00100010,0x01001001, // 0040h - 0x01010101,0x01010101,0x01010101,0x00111010, - 0x00000000,0x00001000,0x00010100,0x00010100, // 0041h - 0x00100010,0x00111110,0x01000001,0x01000001, - 0x00000000,0x00111111,0x01000001,0x01000001, // 0042h - 0x00111111,0x01000001,0x01000001,0x00111111, - 0x00000000,0x00111100,0x01000010,0x00000001, // 0043h - 0x00000001,0x00000001,0x01000010,0x00111100, - 0x00000000,0x00011111,0x00100001,0x01000001, // 0044h - 0x01000001,0x01000001,0x00100001,0x00011111, - 0x00000000,0x01111111,0x00000001,0x00000001, // 0045h - 0x01111111,0x00000001,0x00000001,0x01111111, - 0x00000000,0x01111111,0x00000001,0x00000001, // 0046h - 0x00111111,0x00000001,0x00000001,0x00000001, - 0x00000000,0x00111100,0x01000010,0x00000001, // 0047h - 0x01111001,0x01000001,0x01000010,0x00111100, - 0x00000000,0x01000001,0x01000001,0x01000001, // 0048h - 0x01111111,0x01000001,0x01000001,0x01000001, - 0x00000000,0x00111110,0x00001000,0x00001000, // 0049h - 0x00001000,0x00001000,0x00001000,0x00111110, - 0x00000000,0x01000000,0x01000000,0x01000000, // 004ah - 0x01000001,0x01000001,0x00100010,0x00011100, - 0x00000000,0x01100001,0x00011001,0x00000101, // 004bh - 0x00000011,0x00000101,0x00011001,0x01100001, - 0x00000000,0x00000001,0x00000001,0x00000001, // 004ch - 0x00000001,0x00000001,0x00000001,0x01111111, - 0x00000000,0x01000001,0x01100011,0x01010101, // 004dh - 0x01001001,0x01000001,0x01000001,0x01000001, - 0x00000000,0x01000001,0x01000011,0x01000101, // 004eh - 0x01001001,0x01010001,0x01100001,0x01000001, - 0x00000000,0x00011100,0x00100010,0x01000001, // 004fh - 0x01000001,0x01000001,0x00100010,0x00011100, - 0x00000000,0x00111111,0x01000001,0x01000001, // 0050h - 0x00111111,0x00000001,0x00000001,0x00000001, - 0x00000000,0x00011100,0x00100010,0x01000001, // 0051h - 0x01000001,0x01011001,0x00100010,0x01011100, - 0x00000000,0x00111111,0x01000001,0x01000001, // 0052h - 0x00111111,0x01000001,0x01000001,0x01000001, - 0x00000000,0x00111110,0x01000001,0x00000001, // 0053h - 0x00111110,0x01000000,0x01000001,0x00111110, - 0x00000000,0x01111111,0x00001000,0x00001000, // 0054h - 0x00001000,0x00001000,0x00001000,0x00001000, - 0x00000000,0x01000001,0x01000001,0x01000001, // 0055h - 0x01000001,0x01000001,0x00100010,0x00011100, - 0x00000000,0x01000001,0x01000001,0x00100010, // 0056h - 0x00100010,0x00010100,0x00010100,0x00001000, - 0x00000000,0x01000001,0x01000001,0x01000001, // 0057h - 0x01001001,0x01010101,0x01100011,0x01000001, - 0x00000000,0x01000001,0x00100010,0x00010100, // 0058h - 0x00001000,0x00010100,0x00100010,0x01000001, - 0x00000000,0x01000001,0x00100010,0x00010100, // 0059h - 0x00001000,0x00001000,0x00001000,0x00001000, - 0x00000000,0x01111111,0x00100000,0x00010000, // 005ah - 0x00001000,0x00000100,0x00000010,0x01111111, - 0x00000000,0x01111100,0x00000100,0x00000100, // 005bh - 0x00000100,0x00000100,0x00000100,0x01111100, - 0x00000000,0x00100010,0x00010100,0x00111110, // 005ch - 0x00001000,0x00111110,0x00001000,0x00001000, - 0x00000000,0x00011111,0x00010000,0x00010000, // 005dh - 0x00010000,0x00010000,0x00010000,0x00011111, - 0x00000000,0x00001000,0x00010100,0x00100010, // 005eh - 0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000, // 005fh - 0x00000000,0x00000000,0x00000000,0x01111111, - 0x00000000,0x00010000,0x00001000,0x00011000, // 0060h - 0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00011110,0x00100001, // 0061h - 0x00111110,0x00100001,0x00100001,0x01011110, - 0x00000000,0x00000001,0x00000001,0x00111111, // 0062h - 0x01000001,0x01000001,0x01000001,0x00111111, - 0x00000000,0x00000000,0x00111100,0x01000010, // 0063h - 0x00000001,0x00000001,0x01000010,0x00111100, - 0x00000000,0x01000000,0x01000000,0x01111110, // 0064h - 0x01000001,0x01000001,0x01000001,0x01111110, - 0x00000000,0x00000000,0x00111110,0x01000001, // 0065h - 0x01111111,0x00000001,0x01000001,0x00111110, - 0x00000000,0x00110000,0x00001000,0x00001000, // 0066h - 0x01111111,0x00001000,0x00001000,0x00001000, - 0x00000000,0x00000000,0x01111110,0x01000001, // 0067h - 0x01000001,0x01111110,0x01000000,0x00111110, - 0x00000000,0x00000001,0x00000001,0x00000001, // 0068h - 0x00111111,0x01000001,0x01000001,0x01000001, - 0x00000000,0x00001000,0x00000000,0x00001000, // 0069h - 0x00001000,0x00001000,0x00001000,0x00001000, - 0x00000000,0x00100000,0x00000000,0x00100000, // 006ah - 0x00100000,0x00100001,0x00100001,0x00011110, - 0x00000000,0x00000001,0x00000001,0x01100001, // 006bh - 0x00011001,0x00000111,0x00011001,0x01100001, - 0x00000000,0x00001000,0x00001000,0x00001000, // 006ch - 0x00001000,0x00001000,0x00001000,0x00001000, - 0x00000000,0x00000000,0x00110111,0x01001001, // 006dh - 0x01001001,0x01001001,0x01001001,0x01001001, - 0x00000000,0x00000000,0x00111111,0x01000001, // 006eh - 0x01000001,0x01000001,0x01000001,0x01000001, - 0x00000000,0x00000000,0x00011100,0x00100010, // 006fh - 0x01000001,0x01000001,0x00100010,0x00011100, - 0x00000000,0x00000000,0x00111101,0x01000011, // 0070h - 0x01000001,0x01000011,0x00111101,0x00000001, - 0x00000000,0x00000000,0x01011110,0x01100001, // 0071h - 0x01000001,0x01100001,0x01011110,0x01000000, - 0x00000000,0x00000000,0x00110001,0x00001101, // 0072h - 0x00000011,0x00000001,0x00000001,0x00000001, - 0x00000000,0x00000000,0x00111110,0x01000001, // 0073h - 0x00001110,0x00110000,0x01000001,0x00111110, - 0x00000000,0x00000100,0x00000100,0x01111111, // 0074h - 0x00000100,0x00000100,0x00000100,0x01111000, - 0x00000000,0x00000000,0x01000001,0x01000001, // 0075h - 0x01000001,0x01000001,0x01000001,0x01111110, - 0x00000000,0x00000000,0x01000001,0x01000001, // 0076h - 0x00100010,0x00100010,0x00010100,0x00001000, - 0x00000000,0x00000000,0x01000001,0x01000001, // 0077h - 0x01001001,0x00101010,0x00101010,0x00010100, - 0x00000000,0x00000000,0x00100001,0x00010010, // 0078h - 0x00001100,0x00001100,0x00010010,0x00100001, - 0x00000000,0x00000000,0x01000001,0x01000001, // 0079h - 0x00100010,0x00011100,0x00001000,0x00000110, - 0x00000000,0x00000000,0x00111111,0x00010000, // 007ah - 0x00001000,0x00000100,0x00000010,0x00111111, - 0x00000000,0x00001000,0x00011110,0x01100100, // 007bh - 0x00011000,0x00100100,0x00000100,0x01111000, - 0x00000000,0x00000000,0x00011110,0x00000100, // 007ch - 0x00011110,0x00110101,0x00101101,0x00010010, - 0x00000000,0x00000000,0x00000000,0x00010001, // 007dh - 0x00100001,0x00100001,0x00000001,0x00000010, - 0x00000000,0x00000000,0x00011100,0x00000000, // 007eh - 0x00011110,0x00100000,0x00100000,0x00011100, - 0x00000000,0x00000000,0x00011100,0x00000000, // 007fh - 0x00111110,0x00010000,0x00001100,0x00110010, - 0x00000000,0x00000000,0x00000100,0x00101111, // 0080h - 0x01000100,0x00011110,0x00100101,0x00010110, - 0x00000000,0x00000000,0x00001010,0x00011110, // 0081h - 0x00101011,0x00100010,0x00010100,0x00000100, - 0x00000000,0x00000000,0x00001000,0x00011101, // 0082h - 0x00101011,0x00101001,0x00011001,0x00000100, - 0x00000000,0x00000000,0x00001000,0x00111000, // 0083h - 0x00001000,0x00011110,0x00101001,0x00000110, - 0x00000000,0x00000000,0x00000000,0x00011100, // 0084h - 0x00100011,0x00100000,0x00100000,0x00011100, - 0x00000000,0x00000110,0x01001001,0x00110000, // 0085h - 0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000100,0x00111111,0x00000100, // 0086h - 0x00111110,0x01010101,0x01001101,0x00100110, - 0x00000000,0x00000000,0x00100001,0x01000001, // 0087h - 0x01000001,0x01000001,0x00000001,0x00000010, - 0x00000000,0x00111100,0x00000000,0x00111110, // 0088h - 0x01000000,0x01000000,0x00100000,0x00011100, - 0x00000000,0x00011100,0x00000000,0x00111110, // 0089h - 0x00010000,0x00001000,0x00010100,0x01100010, - 0x00000000,0x00100100,0x01011111,0x00000100, // 008ah - 0x00111110,0x01000101,0x01000101,0x00100010, - 0x00000000,0x00100010,0x01001111,0x01010010, // 008bh - 0x01010010,0x00010010,0x00010010,0x00001001, - 0x00000000,0x00000100,0x00111110,0x00001000, // 008ch - 0x00111110,0x00010000,0x00000010,0x00111100, - 0x00000000,0x00100000,0x00011000,0x00000110, // 008dh - 0x00000001,0x00000110,0x00011000,0x00100000, - 0x00000000,0x00100000,0x01111101,0x00100001, // 008eh - 0x00100001,0x00100001,0x00100001,0x00010010, - 0x00000000,0x00011110,0x00100000,0x00000000, // 008fh - 0x00000000,0x00000001,0x00000001,0x00111110, - 0x00000000,0x00001000,0x01111111,0x00010000, // 0090h - 0x00100000,0x00000010,0x00000010,0x00111100, - 0x00000000,0x00000001,0x00000001,0x00000001, // 0091h - 0x01000001,0x01000001,0x00100010,0x00011100, - 0x00000000,0x00010000,0x01111111,0x00011000, // 0092h - 0x00010100,0x00010100,0x00011000,0x00001100, - 0x00000000,0x00100010,0x01111111,0x00100010, // 0093h - 0x00100010,0x00000010,0x00000010,0x01111100, - 0x00000000,0x00111100,0x00010000,0x00001100, // 0094h - 0x01111111,0x00001000,0x00001000,0x00110000, - 0x00000000,0x00000100,0x00011111,0x00000100, // 0095h - 0x01110100,0x00000010,0x00001010,0x01110010, - 0x00000000,0x00001000,0x01111111,0x00000100, // 0096h - 0x00111100,0x01000010,0x01000000,0x00111100, - 0x00000000,0x00000000,0x00011100,0x00100011, // 0097h - 0x01000000,0x01000000,0x00100000,0x00011100, - 0x00000000,0x01111111,0x00010000,0x00001000, // 0098h - 0x00001000,0x00001000,0x00001000,0x00110000, - 0x00000000,0x00000010,0x00110010,0x00001100, // 0099h - 0x00000010,0x00000001,0x00000001,0x00111110, - 0x00000000,0x00100100,0x01001111,0x01000010, // 009ah - 0x00010001,0x00111100,0x00010010,0x00001100, - 0x00000000,0x00000010,0x01111010,0x01000010, // 009bh - 0x00000010,0x00000010,0x00001010,0x01110010, - 0x00000000,0x00100010,0x00111110,0x01010010, // 009ch - 0x01001011,0x01101101,0x01010101,0x00110010, - 0x00000000,0x00110010,0x01001011,0x01000110, // 009dh - 0x01000110,0x01110010,0x01001011,0x00110010, - 0x00000000,0x00011100,0x00101010,0x01001001, // 009eh - 0x01001001,0x01000101,0x01000101,0x00110010, - 0x00000000,0x00100001,0x01111101,0x00100001, // 009fh - 0x00100001,0x00111001,0x01100101,0x00011001, - 0x00000000,0x00000100,0x00100011,0x01100010, // 00a0h - 0x00100001,0x00100001,0x00010010,0x00001100, - 0x00000000,0x00000000,0x00000000,0x00000000, // 00a1h - 0x00000000,0x00000100,0x00001010,0x00000100, - 0x00000000,0x01110000,0x00010000,0x00010000, // 00a2h - 0x00010000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000, // 00a3h - 0x00001000,0x00001000,0x00001000,0x00001110, - 0x00000000,0x00000000,0x00000000,0x00000000, // 00a4h - 0x00000000,0x00000010,0x00000100,0x00000100, - 0x00000000,0x00000000,0x00000000,0x00011000, // 00a5h - 0x00011000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x01111111,0x01000000,0x01111111, // 00a6h - 0x01000000,0x01000000,0x00100000,0x00011100, - 0x00000000,0x00000000,0x00111111,0x00100000, // 00a7h - 0x00010100,0x00001100,0x00000100,0x00000010, - 0x00000000,0x00000000,0x00100000,0x00100000, // 00a8h - 0x00010000,0x00001111,0x00001000,0x00001000, - 0x00000000,0x00000000,0x00000100,0x00111111, // 00a9h - 0x00100001,0x00100000,0x00010000,0x00001100, - 0x00000000,0x00000000,0x00000000,0x00111110, // 00aah - 0x00001000,0x00001000,0x00001000,0x01111111, - 0x00000000,0x00000000,0x00010000,0x00111111, // 00abh - 0x00011000,0x00010100,0x00010010,0x00011001, - 0x00000000,0x00000000,0x00000010,0x00111111, // 00ach - 0x00100010,0x00010010,0x00000100,0x00000100, - 0x00000000,0x00000000,0x00000000,0x00111110, // 00adh - 0x00100000,0x00100000,0x00100000,0x01111111, - 0x00000000,0x00000000,0x00111110,0x00100000, // 00aeh - 0x00111110,0x00100000,0x00100000,0x00111110, - 0x00000000,0x00000000,0x00100101,0x00101010, // 00afh - 0x00101010,0x00100000,0x00010000,0x00001110, - 0x00000000,0x00000000,0x00000000,0x00000000, // 00b0h - 0x01111111,0x00000000,0x00000000,0x00000000, - 0x00000000,0x01111111,0x01000000,0x00101000, // 00b1h - 0x00011000,0x00001000,0x00001000,0x00000100, - 0x00000000,0x01000000,0x00100000,0x00011000, // 00b2h - 0x00010111,0x00010000,0x00010000,0x00010000, - 0x00000000,0x00001000,0x01111111,0x01000001, // 00b3h - 0x01000001,0x01000000,0x00100000,0x00011000, - 0x00000000,0x00000000,0x00111110,0x00001000, // 00b4h - 0x00001000,0x00001000,0x00001000,0x01111111, - 0x00000000,0x00100000,0x01111111,0x00110000, // 00b5h - 0x00101000,0x00100100,0x00100010,0x00110001, - 0x00000000,0x00000100,0x01111111,0x01000100, // 00b6h - 0x01000100,0x01000100,0x01000010,0x00100001, - 0x00000000,0x00000100,0x00111111,0x00001000, // 00b7h - 0x01111111,0x00010000,0x00010000,0x00010000, - 0x00000000,0x01111100,0x01000100,0x01000100, // 00b8h - 0x01000010,0x01000000,0x00100000,0x00011000, - 0x00000000,0x00000010,0x01111110,0x00100010, // 00b9h - 0x00100001,0x00100000,0x00010000,0x00001100, - 0x00000000,0x01111110,0x01000000,0x01000000, // 00bah - 0x01000000,0x01000000,0x01000000,0x01111110, - 0x00000000,0x00100010,0x01111111,0x00100010, // 00bbh - 0x00100010,0x00100000,0x00010000,0x00001100, - 0x00000000,0x00000011,0x00000100,0x01000011, // 00bch - 0x01000100,0x00100000,0x00011000,0x00000111, - 0x00000000,0x01111111,0x01000000,0x00100000, // 00bdh - 0x00010000,0x00011000,0x00100100,0x01000011, - 0x00000000,0x00000010,0x01111111,0x01000010, // 00beh - 0x00100010,0x00000010,0x00000010,0x01111100, - 0x00000000,0x01000001,0x01000010,0x01000000, // 00bfh - 0x00100000,0x00100000,0x00011000,0x00000110, - 0x00000000,0x01111110,0x01000010,0x01001110, // 00c0h - 0x01110001,0x01000000,0x00100000,0x00011000, - 0x00000000,0x01100000,0x00011110,0x00010000, // 00c1h - 0x01111111,0x00010000,0x00010000,0x00001100, - 0x00000000,0x01000101,0x01001010,0x01001010, // 00c2h - 0x01000000,0x00100000,0x00010000,0x00001110, - 0x00000000,0x00111110,0x00000000,0x01111111, // 00c3h - 0x00010000,0x00010000,0x00001000,0x00000110, - 0x00000000,0x00000010,0x00000010,0x00000110, // 00c4h - 0x00011010,0x01100010,0x00000010,0x00000010, - 0x00000000,0x00010000,0x00010000,0x01111111, // 00c5h - 0x00010000,0x00010000,0x00001000,0x00000110, - 0x00000000,0x00000000,0x00111110,0x00000000, // 00c6h - 0x00000000,0x00000000,0x00000000,0x01111111, - 0x00000000,0x01111110,0x01000000,0x01000100, // 00c7h - 0x00101000,0x00010000,0x00101000,0x01000110, - 0x00000000,0x00001000,0x01111111,0x00100000, // 00c8h - 0x00010000,0x00011100,0x01101011,0x00001000, - 0x00000000,0x01000000,0x01000000,0x01000000, // 00c9h - 0x00100000,0x00100000,0x00011000,0x00000111, - 0x00000000,0x00010010,0x00100010,0x00100010, // 00cah - 0x01000010,0x01000010,0x01000001,0x01000001, - 0x00000000,0x00000001,0x00000001,0x01111111, // 00cbh - 0x00000001,0x00000001,0x00000001,0x01111110, - 0x00000000,0x01111111,0x01000000,0x01000000, // 00cch - 0x01000000,0x00100000,0x00010000,0x00001110, - 0x00000000,0x00000000,0x00000100,0x00001010, // 00cdh - 0x00010001,0x00100001,0x01000000,0x00000000, - 0x00000000,0x00001000,0x00001000,0x01111111, // 00ceh - 0x00001000,0x00101010,0x01001010,0x01001001, - 0x00000000,0x01111111,0x01000000,0x01000000, // 00cfh - 0x00100010,0x00010100,0x00001000,0x00010000, - 0x00000000,0x00001110,0x01110000,0x00001110, // 00d0h - 0x01110000,0x00000110,0x00011000,0x01100000, - 0x00000000,0x00001000,0x00001000,0x00000100, // 00d1h - 0x00000100,0x00100010,0x01000010,0x01111111, - 0x00000000,0x01000000,0x01000000,0x00100100, // 00d2h - 0x00101000,0x00010000,0x00101100,0x01000011, - 0x00000000,0x01111111,0x00000100,0x01111111, // 00d3h - 0x00000100,0x00000100,0x00000100,0x01111000, - 0x00000000,0x00000010,0x01111111,0x01000010, // 00d4h - 0x00100010,0x00010100,0x00000100,0x00000100, - 0x00000000,0x00000000,0x00111110,0x00100000, // 00d5h - 0x00100000,0x00100000,0x00100000,0x01111111, - 0x00000000,0x01111110,0x01000000,0x01000000, // 00d6h - 0x01111110,0x01000000,0x01000000,0x01111110, - 0x00000000,0x00111110,0x00000000,0x01111111, // 00d7h - 0x01000000,0x01000000,0x00100000,0x00011100, - 0x00000000,0x01000010,0x01000010,0x01000010, // 00d8h - 0x01000010,0x01000000,0x00100000,0x00011000, - 0x00000000,0x00001010,0x00001010,0x00001010, // 00d9h - 0x01001010,0x01001010,0x00101010,0x00011001, - 0x00000000,0x00000010,0x00000010,0x01000010, // 00dah - 0x01000010,0x00100010,0x00010010,0x00001110, - 0x00000000,0x01111111,0x01000001,0x01000001, // 00dbh - 0x01000001,0x01000001,0x01000001,0x01111111, - 0x00000000,0x01111111,0x01000001,0x01000001, // 00dch - 0x01000000,0x01000000,0x00100000,0x00011100, - 0x00000000,0x01000011,0x01000100,0x01000000, // 00ddh - 0x01000000,0x00100000,0x00010000,0x00001111, - 0x00000000,0x00000000,0x00000000,0x00000000, // 00deh - 0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00000000,0x00000000,0x00000000, // 00dfh - 0x00000000,0x00000000,0x00000000,0x00000000, - 0x00000000,0x00011110,0x00001000,0x00000100, // 00e0h - 0x00101001,0x01010001,0x01010001,0x00001100, - 0x00000000,0x00000000,0x00001100,0x00010010, // 00e1h - 0x00010010,0x00100001,0x01000000,0x00000000, - 0x00000000,0x01111101,0x00100001,0x01111101, // 00e2h - 0x00100001,0x00111001,0x01100101,0x00011001, - 0x00000000,0x00111100,0x00010000,0x00111100, // 00e3h - 0x00010000,0x00011100,0x00110010,0x00001100, - 0x00000000,0x00001110,0x00101000,0x00101000, // 00e4h - 0x00111110,0x01100101,0x00100101,0x00010010, - 0x00000000,0x00000100,0x00101111,0x01000100, // 00e5h - 0x00000110,0x01000101,0x01000101,0x00111110, - 0x00000000,0x00100010,0x00100010,0x00111110, // 00e6h - 0x01010010,0x01010101,0x01001101,0x00100110, - 0x00000000,0x00000100,0x00011111,0x00000010, // 00e7h - 0x00011111,0x01000010,0x01000010,0x00111100, - 0x00000000,0x00010010,0x00111110,0x01010011, // 00e8h - 0x01000010,0x00100100,0x00000100,0x00000100, - 0x00000000,0x00001000,0x00111101,0x01001011, // 00e9h - 0x01001001,0x01001001,0x00111000,0x00000100, - 0x00000000,0x00001000,0x00111000,0x00001000, // 00eah - 0x00001000,0x00011110,0x00101001,0x00000110, - 0x00000000,0x00011000,0x00100000,0x00000100, // 00ebh - 0x00111010,0x01000110,0x01000000,0x00111000, - 0x00000000,0x01000010,0x01000010,0x01000010, // 00ech - 0x01000110,0x01000000,0x00100000,0x00011000, - 0x00000000,0x00111110,0x00010000,0x00111100, // 00edh - 0x01000011,0x01001100,0x01010010,0x00111100, - 0x00000000,0x00100010,0x00110011,0x00101010, // 00eeh - 0x00100110,0x00100010,0x00100011,0x01000010, - 0x00000000,0x00111110,0x00010000,0x00111100, // 00efh - 0x01000011,0x01000000,0x01000010,0x00111100, - 0x00000000,0x00000010,0x00111011,0x01000110, // 00f0h - 0x01000010,0x01000011,0x01000010,0x00110010, - 0x00000000,0x00000100,0x00000100,0x00000010, // 00f1h - 0x01000110,0x01000101,0x01000101,0x00111001, - 0x00000000,0x01010100,0x01111111,0x00100100, // 00f2h - 0x00100100,0x00100100,0x00100010,0x00010001, - 0x00000000,0x01010100,0x01011111,0x00000100, // 00f3h - 0x00111111,0x00001000,0x00001000,0x00001000, - 0x00000000,0x01011110,0x01100010,0x00100010, // 00f4h - 0x00100001,0x00100000,0x00010000,0x00001100, - 0x00000000,0x01010010,0x01111110,0x00100010, // 00f5h - 0x00100001,0x00100000,0x00010000,0x00001100, - 0x00000000,0x01010000,0x01111111,0x00100000, // 00f6h - 0x00100000,0x00100000,0x00100000,0x00111111, - 0x00000000,0x01010010,0x01010010,0x00111111, // 00f7h - 0x00010010,0x00010000,0x00010000,0x00001100, - 0x00000000,0x01010011,0x01010100,0x00100011, // 00f8h - 0x00100100,0x00010000,0x00001000,0x00000111, - 0x00000000,0x01010000,0x01011111,0x00010000, // 00f9h - 0x00001000,0x00001100,0x00010010,0x00100001, - 0x00000000,0x01010010,0x01111111,0x00100010, // 00fah - 0x00010010,0x00000010,0x00000010,0x00111100, - 0x00000000,0x01010001,0x01010010,0x00100000, // 00fbh - 0x00100000,0x00010000,0x00001000,0x00000110, - 0x00000000,0x01011110,0x01010010,0x00100110, // 00fch - 0x00111001,0x00100000,0x00010000,0x00001100, - 0x00000000,0x01010000,0x01011110,0x00010000, // 00fdh - 0x01111111,0x00010000,0x00010000,0x00001100, - 0x00000000,0x00100101,0x01001010,0x00101010, // 00feh - 0x00100000,0x00010000,0x00001000,0x00000111, - 0x00000000,0x01011110,0x01010000,0x00111111, // 00ffh - 0x00001000,0x00001000,0x00001000,0x00000110 -}; -*/ - - diff --git a/build/tests/DispOwnerInfo/src/data.h b/build/tests/DispOwnerInfo/src/data.h deleted file mode 100644 index cdfa09ce..00000000 --- a/build/tests/DispOwnerInfo/src/data.h +++ /dev/null @@ -1,108 +0,0 @@ -/********************************************************************/ -/* data.h */ -/* DebugForIPL2 */ -/* */ -/* Copyright (C) 2003-2004 NINTENDO Co.,Ltd. */ -/********************************************************************/ -/* - f[^`@wb_ -*/ - -#ifndef __DATA_H__ -#define __DATA_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -#include -#include - -// define data--------------------------------------------- - - // pbgJ[ -#define WHITE ( 1 << 12 ) -#define RED ( 2 << 12 ) -#define GREEN ( 3 << 12 ) -#define BLUE ( 4 << 12 ) -#define YELLOW ( 5 << 12 ) -#define CYAN ( 6 << 12 ) -#define PURPLE ( 7 << 12 ) -#define LIGHTGREEN ( 8 << 12 ) -#define HIGHLIGHT_Y ( 9 << 12 ) -#define HIGHLIGHT_C ( 10 << 12 ) -#define HIGHLIGHT_W ( 11 << 12 ) -#define HIGHLIGHT_B ( 12 << 12 ) -#define HIGHLIGHT_R ( 13 << 12 ) - - -// fntCũJ[w -#define FNT_BLACK 0 -#define FNT_RED 1 -#define FNT_LIGHT_GREEN 2 -#define FNT_YELLOW 3 -#define FNT_BLUE 4 -#define FNT_PURPLE 5 -#define FNT_VERMILION 6 -#define FNT_WHITE 7 -#define FNT_SYUIRO 8 -#define FNT_GREEN 9 -#define FNT_USER_COLOR 10 - - -#define CANVAS_WIDTH 256 // \LpXhbg -#define CANVAS_HEIGHT 192 // @@@V@@@@@chbg -#define LINE_DOT_NUM 10 - - - // L[f[^[N -typedef struct { - u16 trg; // gK - u16 cont; // x^ -}KeyWork; - - - // ^b`pl[N -typedef struct { - int detached; // ̃f[^͂Ń^b`ꂽƂB - BOOL initial; // ́ATPf^b`܂ŁAf[^擾Ȃ悤ɂB - TPData disp; // ̓͒liLCDWj - TPData raw; // ̓͒liTP Wj - TPData last; // O̓͒liLCDWj -}TpWork; - - -// global variables---------------------------------------- -extern int (*nowProcess)( void ); -extern GXOamAttr oamBakM[ 128 ]; // OAM obNAbv -extern GXOamAttr oamBakS[ 128 ]; // OAM obNAbv -extern u16 bgBakM[ 32*24 ]; // BG obNAbv -extern u16 bgBakS[ 32*24 ]; // BG obNAbv -extern TpWork tpd; // ^b`plf[^ -extern KeyWork pad; // L[pbh̓f[^ - -extern tFntEntry font_m; -extern tFntDrawContext context_m; -extern u16 canvas_m[ CANVAS_WIDTH * CANVAS_HEIGHT / 4 ] ATTRIBUTE_ALIGN(32); -extern u16 screen_m[ (CANVAS_WIDTH>>3) * (CANVAS_HEIGHT>>3) ] ATTRIBUTE_ALIGN(32); - -extern tFntEntry font_s; -extern tFntDrawContext context_s; -extern u16 canvas_s[ CANVAS_WIDTH * CANVAS_HEIGHT / 4 ] ATTRIBUTE_ALIGN(32); -extern u16 screen_s[ (CANVAS_WIDTH>>3) * (CANVAS_HEIGHT>>3) ] ATTRIBUTE_ALIGN(32); - -extern u16 s_Palette[ 0x10 ]; - -// global const data--------------------------------------- -extern const u16 myPlttData[13][16]; - - -// function------------------------------------------------ - - -#ifdef __cplusplus -} -#endif - -#endif // __DATA_H__ diff --git a/build/tests/DispOwnerInfo/src/dispNCD.c b/build/tests/DispOwnerInfo/src/dispNCD.c deleted file mode 100644 index 1efdbacb..00000000 --- a/build/tests/DispOwnerInfo/src/dispNCD.c +++ /dev/null @@ -1,282 +0,0 @@ -/********************************************************************/ -/* dispNCD.c */ -/* DebugForIPL2 */ -/* */ -/* Copyright (C) 2003-2004 NINTENDO Co.,Ltd. */ -/********************************************************************/ -/* - NITROݒf[^\ - - $Log: dispNCD.c,v $ - Revision 1.7.2.2.8.1 2007/01/22 07:36:16 yosiokat - NAT-IPL2ւ̑ΉB - - Revision 1.7.2.3 2006/06/26 04:09:02 yosiokat - DrawNCD_ElemenťR[h̕\蕔CB - - Revision 1.7.2.2 2006/02/01 06:32:43 yosiokat - IPL2o[W擾֐̐B - - Revision 1.7.2.1 2005/10/25 08:19:39 yosiokat - Ełǂ̔֐IsIPLTypeChineseōs悤ύXB - EUSGł̎ɁAobNCgPxiO`Rj\悤ύXB - - Revision 1.7 2005/04/14 05:53:47 yosiokat - NITROݒf[^֌WIɒłɂXCb`FORCE_CHINAljB - - Revision 1.6 2005/04/02 10:04:08 yosiokat - [U[J[̐F\ɑΉB - - Revision 1.5 2005/04/02 07:42:54 yosiokat - [U[l[RgIPL2tHggpđSĕ\ł悤ύXB - - Revision 1.4 2005/04/01 05:47:24 yosiokat - NitroConfigDataExΉIPL2̎ɂ́AR[hEx\悤ύXB - - Revision 1.3 2005/03/31 05:59:15 yosiokat - ER[hCHINESEAUNKNOWN̒ljB - ETPf[^[ÑNAInitTPData()ɕύXB - - Revision 1.2 2005/03/09 04:44:39 yosiokat - @\ljB - - Revision 1.1.1.1 2004/08/31 06:20:24 Yosiokat - no message - - -*/ - -#include -#include "main.h" -#include "NitroConfigData.h" -#include "font.h" - -// define data------------------------------------------ -#define CANCEL_BUTTON_LT_X 2 -#define CANCEL_BUTTON_LT_Y 22 -#define CANCEL_BUTTON_RB_X (CANCEL_BUTTON_LT_X+8) -#define CANCEL_BUTTON_RB_Y (CANCEL_BUTTON_LT_Y+2) - -#define IPL2_GAIJI_SIKAKU 0x25a0 - -/* {̏ : uCɓ̐Fv萔 (GXRgb) */ -#define FAVORITE_COLOR_VALUE_GRAY GX_RGB(12,16,19) -#define FAVORITE_COLOR_VALUE_BROWN GX_RGB(23, 9, 0) -#define FAVORITE_COLOR_VALUE_RED GX_RGB(31, 0, 3) -#define FAVORITE_COLOR_VALUE_PINK GX_RGB(31,17,31) -#define FAVORITE_COLOR_VALUE_ORANGE GX_RGB(31,18, 0) -#define FAVORITE_COLOR_VALUE_YELLOW GX_RGB(30,28, 0) -#define FAVORITE_COLOR_VALUE_LIME_GREEN GX_RGB(21,31, 0) -#define FAVORITE_COLOR_VALUE_GREEN GX_RGB( 0,31, 0) -#define FAVORITE_COLOR_VALUE_DARK_GREEN GX_RGB( 0,20, 7) -#define FAVORITE_COLOR_VALUE_SEA_GREEN GX_RGB( 9,27,17) -#define FAVORITE_COLOR_VALUE_TURQUOISE GX_RGB( 6,23,30) -#define FAVORITE_COLOR_VALUE_BLUE GX_RGB( 0,11,30) -#define FAVORITE_COLOR_VALUE_DARK_BLUE GX_RGB( 0, 0,18) -#define FAVORITE_COLOR_VALUE_PURPLE GX_RGB(17, 0,26) -#define FAVORITE_COLOR_VALUE_VIOLET GX_RGB(26, 0,29) -#define FAVORITE_COLOR_VALUE_MAGENTA GX_RGB(31, 0,18) - - -// extern data------------------------------------------ - -// function's prototype declaration--------------------- -static void DrawNCD_ElementName( void ); -static void DrawNCD_Element( void ); -static void DispUserNameAndComment( u16 color ); - -// global variable ------------------------------------- - -// static variable ------------------------------------- - -// const data ----------------------------------------- -static const u8 *str_lcd[] = { (const u8 *)"TOP", - (const u8 *)"BOTTOM" }; -static const u8 *str_onoff[] = { (const u8 *)"OFF", - (const u8 *)"ON" }; -static const u8 *str_inputFlags[] = { - (const u8 *)"NAME", - (const u8 *)"RTC ", - (const u8 *)"LANG", - (const u8 *)"TP ", - (const u8 *)"COL ", - (const u8 *)"BDAY", }; -static const u8 *str_language[] = { (const u8 *)"JAPANESE", - (const u8 *)"ENGLISH", - (const u8 *)"FRENCH", - (const u8 *)"GERMAN", - (const u8 *)"ITALIAN", - (const u8 *)"SPANISH", - (const u8 *)"CHINISE", - (const u8 *)"HANGUL", - (const u8 *)"UNKNOWN", -}; - -static const u8 *str_userColor[] = { - (const u8 *)"GRAY", - (const u8 *)"BROWN", - (const u8 *)"RED", - (const u8 *)"PINK", - (const u8 *)"ORANGE", - (const u8 *)"YELLOW", - (const u8 *)"LIME GREEN ", - (const u8 *)"GREEN", - (const u8 *)"DARK GREEN", - (const u8 *)"SEA GREEN", - (const u8 *)"TURQUOISE", - (const u8 *)"BLUE", - (const u8 *)"DARK BLUE", - (const u8 *)"PURPLE", - (const u8 *)"VIOLET", - (const u8 *)"MAGENTA", -}; - -static const u16 palette_userColor[] = { - FAVORITE_COLOR_VALUE_GRAY, - FAVORITE_COLOR_VALUE_BROWN, - FAVORITE_COLOR_VALUE_RED, - FAVORITE_COLOR_VALUE_PINK, - FAVORITE_COLOR_VALUE_ORANGE, - FAVORITE_COLOR_VALUE_YELLOW, - FAVORITE_COLOR_VALUE_LIME_GREEN, - FAVORITE_COLOR_VALUE_GREEN, - FAVORITE_COLOR_VALUE_DARK_GREEN, - FAVORITE_COLOR_VALUE_SEA_GREEN, - FAVORITE_COLOR_VALUE_TURQUOISE, - FAVORITE_COLOR_VALUE_BLUE, - FAVORITE_COLOR_VALUE_DARK_BLUE, - FAVORITE_COLOR_VALUE_PURPLE, - FAVORITE_COLOR_VALUE_VIOLET, - FAVORITE_COLOR_VALUE_MAGENTA, -}; - -static const u16 str_sikaku[] = L""; - -//====================================================== -// NITROݒf[^\ -//====================================================== - -// NITROݒf[^\̏ -void SEQ_DispNCD_init( void ) -{ - GXS_SetVisiblePlane( GX_PLANEMASK_NONE ); - GX_SetVisiblePlane ( GX_PLANEMASK_NONE ); - - SVC_CpuClearFast( 0x0000, bgBakM, sizeof(bgBakM) ); - SVC_CpuClearFast( 0x0000, bgBakS, sizeof(bgBakS) ); - - ClearAllStringSJIS(); - -// (void)DrawStringSJIS( 1, 0, YELLOW, (const u8 *)"Disp OwnerInfo [Use SDK 2.00 W]" ); -// (void)DrawStringSJIS( 1, 0, YELLOW, (const u8 *)"Disp OwnerInfo [Use SDK 2.01 WC]" ); - (void)DrawStringSJIS( 1, 0, YELLOW, (const u8 *)"Disp OwnerInfo [Use SDK 5.01 PR1 WCK]" ); - - DrawNCD_ElementName(); - DrawNCD_Element(); - - GX_SetVisiblePlane ( GX_PLANEMASK_BG1 | GX_PLANEMASK_BG2 ); - GXS_SetVisiblePlane( GX_PLANEMASK_BG1 | GX_PLANEMASK_BG2 | GX_PLANEMASK_OBJ ); -} - - -// NITROݒf[^̕\ -int SEQ_DispNCD( void ) -{ - BOOL tp_cancel = FALSE; - - return 0; -} - - -// NITROݒf[^̗vf\ -static void DrawNCD_ElementName( void ) -{ - { // TOP LCD - SetTargetScreenSJIS( BOTTOM_SCREEN ); - (void)DrawStringSJIS( 1, 4, CYAN , (const u8 *)"[OPTION]" ); - (void)DrawStringSJIS( 2, 6, LIGHTGREEN, (const u8 *)"Language :" ); - (void)DrawStringSJIS( 1, 8, CYAN , (const u8 *)"[OWNER]" ); - (void)DrawStringSJIS( 2, 10, LIGHTGREEN, (const u8 *)"fav color:" ); - (void)DrawStringSJIS( 2, 12, LIGHTGREEN, (const u8 *)"birthday :" ); - (void)DrawStringSJIS( 2, 14, LIGHTGREEN, (const u8 *)"nickname :" ); - (void)DrawStringSJIS( 2, 16, LIGHTGREEN, (const u8 *)"comment :" ); -// SetTargetScreenSJIS( BOTTOM_SCREEN ); - } -} - - -// NITROݒf[^̊evf\ -static void DrawNCD_Element( void ) -{ - const u8 *str; - OSOwnerInfo info; - OS_GetOwnerInfo( &info ); - - { // TOP LCD - SetTargetScreenSJIS( BOTTOM_SCREEN ); - if( info.language < LANG_CODE_MAX ) { - str = str_language[ info.language ]; - }else { - str = str_language[ LANG_CODE_MAX ]; - } - (void)DrawStringSJISEx( 12, 6, WHITE, str, 0 ); - -// SetTargetScreenSJIS( BOTTOM_SCREEN ); - } - { - int temp; - - // [U[J[ - { - tFntPosition x = (tFntPosition){ 12 * 8 , FNT_POSX_ORIGIN_LEFT, FNT_H_ALIGN_LEFT }; - tFntPosition y = (tFntPosition){ 11 * 8 + 4, FNT_POSY_ORIGIN_BOTTOM , 0 /*unused*/ }; - temp = info.favoriteColor; - fnt_DrawString( &font_s, &context_s, x, y, 1, 0, str_sikaku, FNT_USER_COLOR ); - (void)DrawDecimalSJIS( 18, 10, WHITE, &temp, 2, 4 ); - (void)DrawStringSJIS ( 20, 10, WHITE, str_userColor[ temp ] ); - GXS_LoadBGPltt( &palette_userColor[ temp ], FNT_USER_COLOR * 2, 2 ); - } - (void)DrawStringSJIS ( 14, 12, WHITE, (const u8 *)"/" ); - (void)DrawDecimalSJIS( 12, 12, WHITE, &info.birthday.month, 2, 1 ); - (void)DrawDecimalSJIS( 15, 12, WHITE, &info.birthday.day, 2, 1 ); - - // [U[l[ARg - DispUserNameAndComment( FNT_WHITE ); - - // [U[l[ARg - (void)DrawDecimalSJIS ( 0, 14, YELLOW, &info.nickNameLength, 2, 1 ); - (void)DrawDecimalSJIS ( 0, 16, YELLOW, &info.commentLength, 2, 1 ); - } -} - - -static void DispUserNameAndComment( u16 color ) -{ - u16 color2 = ( color == FNT_BLACK ) ? (u16)FNT_BLACK : (u16)FNT_YELLOW; - u16 buff[ 256 ]; - tFntPosition x = (tFntPosition){ 12 * 8 , FNT_POSX_ORIGIN_LEFT, FNT_H_ALIGN_LEFT }; - tFntPosition y = (tFntPosition){ 15 * 8 + 4, FNT_POSY_ORIGIN_BOTTOM , 0 /*unused*/ }; - OSOwnerInfo info; - OS_GetOwnerInfo( &info ); - - // [U[l[̕\ - MI_CpuCopy16 ( info.nickName, buff, NCD_NICKNAME_LENGTH * 2 ); - buff[ NCD_NICKNAME_LENGTH ] = 0; - fnt_DrawString( &font_s, &context_s, x, y, 1, 0, buff, color2 ); - buff[ info.nickNameLength ] = 0; - fnt_DrawString( &font_s, &context_s, x, y, 1, 0, buff, color ); - - - // Rg̕\ - y.pos = 19 * 8 + 4; - MI_CpuCopy16( info.comment, buff, (u32)( info.commentLength * 2 ) ); - buff[ info.commentLength ] = 0; - if ( info.commentLength > 13 ) { // 2sɂ܂鎞B - fnt_DrawString( &font_s, &context_s, x, y, 1, 0, &buff[13], color ); - } - buff[ 13 ] = 0; - y.pos -= 2 * 8; - fnt_DrawString( &font_s, &context_s, x, y, 1, 0, buff, color ); -} - - diff --git a/build/tests/DispOwnerInfo/src/font.c b/build/tests/DispOwnerInfo/src/font.c deleted file mode 100644 index 5d57afd5..00000000 --- a/build/tests/DispOwnerInfo/src/font.c +++ /dev/null @@ -1,1094 +0,0 @@ -/********************************************************************/ -/* font.c */ -/* DebugForIPL2 */ -/* */ -/* Copyright (C) 2003-2004 NINTENDO Co.,Ltd. */ -/********************************************************************/ -/* - tHg - - - $Log: font.c,v $ - Revision 1.1 2004/08/31 06:20:24 Yosiokat - Initial revision - - - - - // **** old logs **** - - Revision 1.19 2004/08/25 02:21:40 Yosiokat - E1.14̃Rg͊ԈႢ̂߁AăR~bgB - Esmall fix. - - Revision 1.18 2004/08/25 02:15:51 Yosiokat - ^Ored_ipl2_2004_08_24_pp2_isdbg_fix̍폜B - - Revision 1.17 2004/08/20 11:35:29 Yosiokat - small fix. - - Revision 1.16 2004/08/18 07:17:29 Yosiokat - ㉺LCD^[QbgɂāAʌ‚ɏł悤ύXB - - Revision 1.15 2004/08/17 07:52:03 Yosiokat - ESetTargetScreenSJISljāA㉺LCD̂ǂɂ\”\ɂȂ悤ύXB - - Revision 1.14 2004/08/16 10:03:08 Yosiokat - GetStrEntryŔ͈͊Ohandle^ꂽۂNULLԂ悤ύXB - - Revision 1.13 2004/08/13 07:32:58 Yosiokat - small fix. - - Revision 1.12 2004/08/13 04:33:18 Yosiokat - small fix. - - Revision 1.11 2004/08/10 07:02:10 yosiokat - small fix. - - Revision 1.10 2004/08/07 05:44:44 Yosiokat - ESJIS\֐Ńnhw肵ȂdlɕύXB - ELύXɑΉāANA֐dlύXB - - Revision 1.9 2004/07/29 04:58:42 Yosiokat - \̂̃pfBO𖾎IɒljB - - Revision 1.8 2004/07/13 00:31:48 Yosiokat - ETuLCDVRAMΏۂɂ悤ύXB - - Revision 1.7 2004/06/15 13:09:10 Yosiokat - EMY_PrintfOS_PrintfɁB - - Revision 1.6 2004/06/06 06:28:24 Yosiokat - OS_PrintfOS_PrintfɁB - - Revision 1.5 2004/06/06 02:39:31 Yosiokat - SJISR[hp̒萔`font.hɈړB - - Revision 1.4 2004/05/31 11:53:23 yosiokat - __DEBUG__PRINTɕύXB - - Revision 1.3 2004/05/26 05:07:34 Yosiokat - DrawStringSJISŋ󕶎w肵ۂɈُ퓮삷oOCB - - Revision 1.2 2004/05/26 01:16:57 Yosiokat - SJISx[XɕύXB - - Revision 1.1 2004/05/25 08:59:22 Yosiokat - SJISŐ䂷悤ɕύXB - - -*/ - - -#include -#include "font.h" -#include "data.h" - -// define data---------------------------------- -#define SEARCH_ENTRY_MAX_NUM 128 // dȂ̂h߂́AGg̃T[`񐔏 -#define NITRO_CHAR_SIZE 0x20 // NITROWLN^TCY(4bitJ[j -#define CHAR_CODE_OFFSET (SJIS_CHAR_VRAM_OFFSET / NITRO_CHAR_SIZE) // Lio[XN[ɓ]ۂ̃ItZbgiBG_CHAR_VRAM+0x4000n߂Ă̂ŁAItZbg0x200j -#define DRAW_CHAR_NUM_LIMIT (SJIS_CHAR_VRAM_SIZE / NITRO_CHAR_SIZE) // P‚̕ŕ\łLN^̌E - -#define HANDLE_INDEX 0x40000000 - -// tHg\f[^ -typedef struct FontComponent { - u16 need_tate_dot; // \̂ɕKvȃLPʂ̃hbg - u16 tate_dot; // L̏chbg - u16 yoko_dot; // L̉hbg - u16 org_char_size; // LbyteTCY - u32 org_row_size; // L - u32 start_adr; // LN^oCĩX^[gAhX - u32 end_adr; // LN^oCĩGhAhX -}FontComponent; - - -// VRAMLf[^̃ubNImۃXg -typedef struct CharAllocListTag CharAllocList; -struct CharAllocListTag { - CharAllocList *next; // ̃ubNmۍ\̂ւ̃|C^ - u16 memTop; // L蓖ăe[ucharAllocTbl̐LubN̐擪|Cg - u16 memNum; // mۂubN̐ -}CharAllocListTag; - - -// SJIS\̂߂VRAMGgf[^ -typedef struct StrEntry { - const FontComponent *font; // \tHg̍\vf - u32 dataAddr; // f[^̃AhXiIDƂĎgpj - u32 *charMemp; // IɊmۂVRAMubNւ̃|C^ - u16 charNum; // g[^̃L - u16 drawPos; // \ʒuiBGXN[obt@̐擪2byteItZbgj -}StrEntry; - - -// tHg̕ԊulߓWJpf[^ -typedef struct FontPropotion { - u16 *leftp; // ݂̍tHgf[^ւ̃|C^ - u16 *rightp; // ݂̉EtHgf[^ւ̃|C^ - u16 h_offset; // 16x16hbgPʂ̃LN^f[^݂̌̉ItZbg - u8 pad[2]; - u32 buff16x16[2][16/2]; -}FontPropotion; - -// CNg^CNgȂtOiSetScrDataŎgpj -typedef enum IncFlag { - NO_INC, // CNgȂ - INC_1 // PCNg -}IncFlag; - -// extern data---------------------------- -extern void _binary_f12han_dat(void); -extern void _binary_f12han_dat_end(void); - - -// function's prototype declaration------------- -static void SetScrData(u16 code_top, StrEntry *sEntryp, IncFlag inc_flag); -static u16 MeasureStringCharWidth(const u8 *str); -static void SpreadStringCloser(u8 *str, StrEntry *sEntryp, u16 v_offset); -static void SetFirstFont(u8 **strpp, u16 v_offset, FontPropotion *fontProp); -static u8 * CloseFontChar(u8 **strpp, u16 v_offset, FontPropotion *fontProp); -static u32 CalcCharCodeAddress(u8 **strpp, const FontComponent **font); -static void SpreadFontZen(u16 bit0_color, u16 bit1_color, u8 *fromAdr, u32 *toAdr); -static void InitStrEntryTable( StrEntry **sEntrypp ); -static StrEntry *GetStrEntry( u16 handle ); -static StrEntry **GetStrEntryAddress( u16 handle ); -static int InsertStrEntry(u16 *handle, u16 charNum); -static int InsertStrEntry2(u16 handle, u16 charNum); -static u16 DeleteStrEntry( u16 handle); -static BOOL GetEmptyStrEntry(u32 dataAddr, u16 *handlep); -static u16 SearchStrEntry(u32 dataAddr); -static u8 * HexToDecimalString(const void *hexp, u8 *strp, u16 figure, u16 size); -static u8 * HexToString(const void *hexp, u8 *strp, u16 figure); -static void InitAllocSystemSJIS( TargetScreen target ); -static void *AllocMemoryFromVram( int size ); -static void FreeMemoryToVram( void *p ); - -static u16 DrawStringSJIS_Core(u16 x, u16 y, u16 color, const void *strp, int handleIndex); -static int CalcHandleIndex(u32 dataAddr, int index); - -// global variables----------------------------- - - -// static variables----------------------------- -static int font_init = 0; -static TargetScreen targetScreen = BOTTOM_SCREEN; -static const FontComponent *nowFontHan; -static StrEntry *entryTblS[ STR_ENTRY_MAX_NUM ]; -static StrEntry *entryTblM[ STR_ENTRY_MAX_NUM ]; -static StrEntry **entryTblp; -static u16 *bgBakp; - -// const data----------------------------------- -const u16 tbl_ASCII_to_SJIS[0x100]; -const FontComponent fontTypeTableHan[] = { - { 16, 12, 6, 12, 14*0xbc, (u32)&_binary_f12han_dat, (u32)&_binary_f12han_dat_end}, -}; - - -// functions description------------------------ - -//---------------------------------------------- -// API֐ -//---------------------------------------------- - -// tHgAPȈ -void InitFont( TargetScreen target) -{ - if( font_init & (0x01 << target ) ) { // ^[Qbg݂Ȃ烊^[ - return; - } - - InitAllocSystemSJIS( target ); // ^[QbgVRAMA[i - - if( target == TOP_SCREEN ) { // ^[Qbg̃Gg - InitStrEntryTable( &entryTblM[0] ); - }else { - InitStrEntryTable( &entryTblS[0] ); - } - - if( font_init == 0 ) { // ܂ĂȂȂAXN[ݒɁB - SetTargetScreenSJIS( target ); - } - - SetFont( (FontType)0 ); - font_init |= 0x01 << target; -} - - -// \tHg̐؂ւ -void SetFont(FontType font) -{ - if(font >= FONT_TYPE_MAX) { - font = (FontType)0; - } - nowFontHan = &fontTypeTableHan[font]; -} - - -// \^[QbgXN[̐؂ւ -void SetTargetScreenSJIS( TargetScreen target ) -{ - targetScreen = target; - if( target == TOP_SCREEN ) { - entryTblp = &entryTblM[0]; - bgBakp = bgBakM; - }else { - entryTblp = &entryTblS[0]; - bgBakp = bgBakS; - } -} - - -// w肳ꂽSJIS\BinhwȂŃnhZoZltj -static u16 DrawStringSJIS_Core(u16 x, u16 y, u16 color, const void *strp, int handleIndex) -{ - StrEntry *sEntryp; - int newEntry; - u16 handle; - u16 charNum; - u16 code; - u16 v_offset = 1; // v_offset͈ɂ邱ƂłB - - InitFont( targetScreen ); - - // 󕶎`FbN - if(*(u8 *)strp == 0x00) { - return 0; - } - - // \ɕKvȃLN^̑ - charNum = MeasureStringCharWidth((const u8 *)strp); - if(charNum > DRAW_CHAR_NUM_LIMIT) { // KvLN^TPQȓȂ烁mہB - OS_Printf("SJIS-draw: str length max over.\n"); - return DSJIS_ERR_STR_LENGTH_TOO_LONG; - } - - // nh擾 - if( !GetEmptyStrEntry( (u32)handleIndex, &handle ) ) { - OS_Printf("SJIS-draw: error StrEntry get failed.\n"); - return DSJIS_ERR_ENTRY_GET_FAILED; - } - - // Gg̓o^ - newEntry = InsertStrEntry2( handle, charNum ); - if(newEntry < 0) { - OS_Printf("SJIS-draw: error StrEntry alloc failed.\n"); - return DSJIS_ERR_ENTRY_ALLOC_FAILED; - } - sEntryp = GetStrEntry(handle); // Ggւ̃|C^i[ - sEntryp->dataAddr = (u32)handleIndex; - - // VRAML̓Im - if(newEntry > 0) { - sEntryp->charMemp = AllocMemoryFromVram( charNum * NITRO_CHAR_SIZE * 2 ); - // cQLKvȂ̂ŁANITRO_CHAR_SIZE*2 -// OS_Printf("alloc charMemp = %x\n",sEntryp->charMemp); - if( sEntryp->charMemp == NULL ) { // mۂɎsAGg̃ă^[ - OS_Printf("VRAM char memory alloc failed.\n"); - OS_Free(sEntryp); - return DSJIS_ERR_CHAR_ALLOC_FAILED; - } - } - - // Gg̓o^ - sEntryp->font = nowFontHan; // ݂̃tHg^Cvi[ - sEntryp->drawPos = (u16)(x + y * 0x20); // \ꏊi[B - sEntryp->charNum = charNum; - - // czuʒuwv_offset̋ - if(v_offset) { - if(((nowFontHan->tate_dot & 0x07)== 0)) { // c8dot or 16dot̏ꍇv_offset0 - v_offset = 0; - }else { - if( (16 - nowFontHan->tate_dot) < v_offset ) { // ȊO̎́Ac16dotɎ܂͈͂ɋ - v_offset = (u16)(16 - nowFontHan->tate_dot); - } - } - } - // Ώە̃tHgf[^rbgWJLf[^l߂ȂāAmۂVRAMLɓ] - SpreadStringCloser((u8 *)strp, sEntryp, v_offset); - - // XN[f[^ɍ̃̕Lio[ - code = (u16)( (((u32)sEntryp->charMemp - (u32)G2_GetBG1CharPtr()) / NITRO_CHAR_SIZE) | color ); - SetScrData(code, sEntryp, INC_1); - - return handle; -} - -// nhCfbNX̎Zo -static int CalcHandleIndex(u32 dataAddr, int index) -{ - if(index) { - index += HANDLE_INDEX + (int)dataAddr; // CfbNXZꍇ́Ãf[^̃AhXƔȂ悤ANITRO}bvOɂȂ悤ItZbgZB - }else { - index = (int)dataAddr; - } - return index; -} - - -// w肳ꂽSJIS\BinhwȂj -u16 DrawStringSJIS(u16 x, u16 y, u16 color, const void *strp) -{ - return DrawStringSJIS_Core( x, y, color, strp, (int)strp); // index = strp CoreR[ -} - - -// w肳ꂽl16iŕ\BinhwȂŁj -u16 DrawHexSJIS(u16 x, u16 y, u16 color, const void *hexp, u16 figure) -{ - u8 buff[16]; - u8 *strp = HexToString(hexp, buff, figure); - return DrawStringSJIS_Core(x, y, color, strp, (int)hexp); -} - - -// w肳ꂽl10iŕ\BinhwȂŁj -u16 DrawDecimalSJIS(u16 x, u16 y, u16 color, const void *hexp, u16 figure, u16 size) -{ - u8 buff[16]; - u8 *strp = HexToDecimalString(hexp, buff, figure, size); - return DrawStringSJIS_Core(x, y, color, strp, (int)hexp); -} - - -// w肳ꂽSJIS\BinhwȂŃnhZoZltj -u16 DrawStringSJISEx(u16 x, u16 y, u16 color, const void *strp, int index) -{ - index = CalcHandleIndex( (u32)strp, index); - return DrawStringSJIS_Core( x, y, color, strp, index); // index ZCoreR[ -} - - -// w肳ꂽl16iŕ\BinhwȂŁj -u16 DrawHexSJISEx(u16 x, u16 y, u16 color, const void *hexp, u16 figure, int index) -{ - u8 buff[16]; - u8 *strp = HexToString(hexp, buff, figure); - index = CalcHandleIndex( (u32)hexp, index); - return DrawStringSJIS_Core(x, y, color, strp, index); -} - - -// w肳ꂽl10iŕ\BinhwȂŁj -u16 DrawDecimalSJISEx(u16 x, u16 y, u16 color, const void *hexp, u16 figure, u16 size, int index) -{ - u8 buff[16]; - u8 *strp = HexToDecimalString(hexp, buff, figure, size); - index = CalcHandleIndex( (u32)hexp, index); - return DrawStringSJIS_Core(x, y, color, strp, index); -} - - -// wR[hn܂XN[f[^̃Zbg -static void SetScrData(u16 code_top, StrEntry *sEntryp, IncFlag inc_flag) -{ - u16 i; - u16 lastPos; - u16 pos_l; - u16 *buffp_l; - u16 *buffp_h; - - lastPos = 0x800 >> 1; // obt@ŏIʒu == BGXN[TCY(0x800) - pos_l = (u16)(sEntryp->drawPos + 0x0020); // 8dotLN^\ʒu - buffp_h = bgBakp + sEntryp->drawPos; - buffp_l = buffp_h + 0x0020; - - for(i = 0; i < sEntryp->charNum; i++) { - *buffp_h++ = code_top; - code_top += inc_flag; - if(nowFontHan->need_tate_dot == 16) { // Kvchbg16̏ꍇi8hbgȊOSjAPLZbg - *buffp_l++ = code_top; - } - code_top += inc_flag; - pos_l++; - if(pos_l == lastPos) { - break; - } - } -} - - -// w肳ꂽnhSJISNAB -void ClearStringSJIS_handle(u16 handle) -{ - StrEntry *sEntryp; - - InitFont( targetScreen ); - - sEntryp = GetStrEntry(handle); - if(sEntryp == NULL) { - return; - } - - // XN[f[^̃NA - SetScrData(0x0000, sEntryp, NO_INC); - - // LN^f[^̃NA -// MI_CpuClearFast(sEntryp->charMemp, sEntryp->charNum * NITRO_CHAR_SIZE * 2); - // IɊmۂVRAMLf[^̃NA - FreeMemoryToVram( sEntryp->charMemp ); // ̃GgmۂĂLN^̉B - (void)DeleteStrEntry(handle); -} - - -// w肳ꂽf[^AhXŕ\ĂSJISNAB -void ClearStringSJIS(void *datap) -{ - u16 handle = SearchStrEntry( (u32)datap ); - - if( handle > STR_ENTRY_MAX_NUM ) { - return; - } - ClearStringSJIS_handle(handle); -} - - -// w肳ꂽf[^AhXŕ\ĂSJISNABExnŕ`悵̂ꍇB -void ClearStringSJISEx(void *datap, int handleIndex) -{ - u16 handle; - - handleIndex = CalcHandleIndex( (u32)datap, handleIndex); - - handle = SearchStrEntry( (u32)handleIndex ); - - if( handle > STR_ENTRY_MAX_NUM ) { - return; - } - ClearStringSJIS_handle(handle); -} - - - -// ݓo^ĂSĂSJISNAiISĉj -void ClearAllStringSJIS(void) -{ - u16 handle; - - InitFont( targetScreen ); - - for(handle = 0; handle < STR_ENTRY_MAX_NUM; handle++) { - if( GetStrEntry( handle ) != NULL) { - ClearStringSJIS_handle(handle); - } - } -} - - -// w肳ꂽnhŕ\Ă镶̃J[ύXB -u16 ChangeColorSJIS(u16 handle, u16 new_color) -{ - int i; - u16 *buffp_l; - u16 *buffp_h; - StrEntry *sEntryp = GetStrEntry( handle ); // Ggւ̃|C^i[ - - if((handle > STR_ENTRY_MAX_NUM) || (sEntryp == NULL)) { - return 0; - } - - buffp_h = bgBakp + sEntryp->drawPos; - buffp_l = buffp_h + 0x20; - for(i = 0; i < sEntryp->charNum; i++) { - *buffp_h = (u16)((*buffp_h & 0x0fff) | new_color); - *buffp_l = (u16)((*buffp_l & 0x0fff) | new_color); - buffp_h++; - buffp_l++; - } - return 1; -} - -//---------------------------------------------- -// Gge[ȕ -//---------------------------------------------- - -// Gge[ȕ -static void InitStrEntryTable( StrEntry **sEntrypp ) -{ - u16 i; - for(i = 0; i < STR_ENTRY_MAX_NUM; i++) { - *sEntrypp++ = NULL; - } -} - - -// w肳ꂽnhStrEntry|C^Ԃ -static StrEntry * GetStrEntry( u16 handle ) -{ - if ( handle >= STR_ENTRY_MAX_NUM ) { - return NULL; - }else { -// return entryTblS[ handle ]; - return entryTblp[ handle ]; - } -} - - -// w肳ꂽnhStrEntry|C^ւ̃|C^Ԃ -static StrEntry ** GetStrEntryAddress( u16 handle ) -{ - if ( handle >= STR_ENTRY_MAX_NUM ) { - return NULL; - }else { -// return &entryTblS[ handle ]; - return &entryTblp[ handle ]; - } -} - - -// StrEntry̓o^ -static int InsertStrEntry(u16 *handle, u16 charNum) -{ - StrEntry **sEntrypp = GetStrEntryAddress( *handle ); - - if(*handle >= STR_ENTRY_MAX_NUM) { - return -1; - }else if(*handle > 0) { - if( *sEntrypp != NULL) { // wnhɊɃGgꍇ́AmۃʂVKʂƔׂāA - if( charNum > (*sEntrypp)->charNum ) { // ĊmۂKvȏꍇ́AĊmۂsB -// OS_Printf("SJIS: same entry free to charMemory.\n"); -// OS_Printf("free charMemp = %x\n",(*sEntrypp)->charMemp); - SetScrData( 0x0000, *sEntrypp, NO_INC ); // XN[f[^̃NA - FreeMemoryToVram( (*sEntrypp)->charMemp ); // ̃GgmۂĂLN^̉B - return 1; - }else { - if( charNum < (*sEntrypp)->charNum ) { - SetScrData( 0x0000, *sEntrypp, NO_INC ); // XN[f[^̃NA - } - return 0; // ̃Ggł́ALN^pĎgp - } - } - } - - // *handle == 0 // wnhO̎͐Vnhm - *handle = 0; - sEntrypp = GetStrEntryAddress( *handle ); - - for( ; *handle < STR_ENTRY_MAX_NUM; (*handle)++ ) { - if( *sEntrypp++ == NULL) { // NULLGgT - break; - } - } - if(*handle == STR_ENTRY_MAX_NUM) { - return -1; // NULLGg‚ȂAG[IB - } - - // StrEntrỹm - *sEntrypp = (StrEntry *)OS_Alloc( sizeof(StrEntry) ); - if( *sEntrypp == NULL) { - OS_Printf("StrEntry allocate failed.\n"); - return -1; - }else { - return 1; - } -} - - -// Gg}Q -static int InsertStrEntry2(u16 handle, u16 charNum) -{ - StrEntry **sEntrypp = GetStrEntryAddress( handle ); - - if( *sEntrypp != NULL) { // wnhɊɃGgꍇ́AmۃʂVKʂƔׂāA - if( charNum > (*sEntrypp)->charNum ) { // ĊmۂKvȏꍇ́AĊmۂsB -// OS_Printf("SJIS: same entry free to charMemory.\n"); -// OS_Printf("free charMemp = %x\n",(*sEntrypp)->charMemp); - SetScrData( 0x0000, *sEntrypp, NO_INC ); // XN[f[^̃NA - FreeMemoryToVram( (*sEntrypp)->charMemp ); // ̃GgmۂĂLN^̉B - return 1; - }else { - if( charNum < (*sEntrypp)->charNum ) { - SetScrData( 0x0000, *sEntrypp, NO_INC ); // XN[f[^̃NA - } - return 0; // ̃Ggł́ALN^pĎgp - } - } - - // StrEntrỹVKm - *sEntrypp = (StrEntry *)OS_Alloc( sizeof(StrEntry) ); - if( *sEntrypp == NULL) { - OS_Printf("StrEntry allocate failed.\n"); - return -1; - }else { - return 1; - } -} - - -// w肳ꂽnhStrEntryvfGge[u폜 -static u16 DeleteStrEntry(u16 handle) -{ - StrEntry **sEntrypp = GetStrEntryAddress( handle ); - - if( *sEntrypp == NULL) { - return NULL; - } - - OS_Free( *sEntrypp ); - *sEntrypp = NULL; - - return handle; -} - - -// 󂫃GgTi܌悭Ȃj -static BOOL GetEmptyStrEntry(u32 dataAddr, u16 *handlep) -{ - int i = SEARCH_ENTRY_MAX_NUM; // dȂ̂h߁AT[`񐔂ɐB - u16 handle = (u16)( (dataAddr >> 2) & (STR_ENTRY_MAX_NUM - 1) ); - - while(i--) { - StrEntry *sEntryp = GetStrEntry( handle ); - if( sEntryp == NULL ) { - *handlep = handle; - return TRUE; // VKnhʒum - }else { - if( sEntryp->dataAddr == dataAddr ) { - *handlep = handle; - return TRUE; // nhʒu - } - handle = (u16)( (handle + 1) & (STR_ENTRY_MAX_NUM - 1) ); - } - } - return FALSE; -} - - -// wf[^̃nhTi܌悭Ȃj -static u16 SearchStrEntry(u32 dataAddr) -{ - int i = SEARCH_ENTRY_MAX_NUM; // dȂ̂h߁AT[`񐔂ɐB - u16 handle = (u16)( (dataAddr >> 2) & (STR_ENTRY_MAX_NUM - 1) ); - - while(i--) { - StrEntry *sEntryp = GetStrEntry( handle ); - if(sEntryp != NULL) { - if( sEntryp->dataAddr == dataAddr ) { - return handle; // nhʒu - } - } - handle = (u16)( (handle + 1) & (STR_ENTRY_MAX_NUM - 1) ); - } - return 0xffff; -} - - -//---------------------------------------------- -// LN^VRAM̓Imۏ -//---------------------------------------------- - -// \ɕKvȃLN^̑ -static u16 MeasureStringCharWidth(const u8 *str) -{ - u16 totalWidth = 0; // ̃g[^̉hbgTCY - u16 charNum = 0; // \ɕKvȃLN^ - - // ̃g[^̉hbgTCYZo - while(*str) { // é@SJIS@@ASCII@H - if( ((*str >= SJIS_HIGHER_CODE1_MIN) && (*str <= SJIS_HIGHER_CODE1_MAX)) - || ((*str >= SJIS_HIGHER_CODE2_MIN) && (*str <= SJIS_HIGHER_CODE2_MAX)) ) { - str += 2; // SJIS - totalWidth += nowFontHan->yoko_dot; - }else { - str++; // ASCII - totalWidth += nowFontHan->yoko_dot; - } - } - // g[^hbgA̕\ɕKvȃLN^Zo - charNum = (u16)(totalWidth >> 3); - if(totalWidth & 0x0007) { - charNum = (u16)(charNum + 1); - } - - return charNum; -} - - -//---------------------------------------------- -// tHgf[^NITROLf[^ւ̕ϊ֐Q -//---------------------------------------------- - -// w肳ꂽw胁ubNɓWJȂ]igptHgɂĕl߂sj -static void SpreadStringCloser(u8 *strp, StrEntry *sEntryp, u16 v_offset) -{ - u32 charBuff[(NITRO_CHAR_SIZE * 4) / 4]; // 16x16LQłSL̃obt@BiQWJāAl߂s߁j - u8 *charMemp; - u8 *fromAdr; - u16 i; - u16 charNum; - FontPropotion fontPro; - - // Spread target string char data to WRAM pool - charNum = sEntryp->charNum; - charMemp = (u8 *)sEntryp->charMemp; - fontPro.h_offset = 0; - fontPro.leftp = (u16 *)0x0; - fontPro.rightp = (u16 *)0x0; - - while(1) { - // אڂ2‚1bittHgf[^16x16hbgLN^zɃ[h - if(fontPro.h_offset == 0) { - SetFirstFont(&strp, v_offset, &fontPro); // \16x16hbgPʂɋ؂ɐ擪ɂLN^[h - } - fromAdr = CloseFontChar(&strp, v_offset, &fontPro); // LLN^ɗאڂLN^[h - - // [h1bittHgf[^4bitNITROLf[^ɓWJ - SpreadFontZen(3, 1, fromAdr, (u32 *)charBuff); // LN^f[^4bitɓWJB - - // WJLf[^VRAMɃRs[ - fromAdr = (u8 *)charBuff; - for(i = 0; i < 2; i++) { // 16x16hbgiSLj̃f[^] - MI_CpuCopyFast(fromAdr, charMemp, (NITRO_CHAR_SIZE * 2)); - fromAdr += NITRO_CHAR_SIZE * 2; - charMemp+= NITRO_CHAR_SIZE * 2; - if(--charNum == 0) { - return; - } - } - } -} - - -// ŏ̃tHgf[^obt@ɃZbg -static void SetFirstFont(u8 **strpp, u16 v_offset, FontPropotion *fontProp) -{ - u8 tate; - u8 *fontAdr; - u16 *firstp; - const FontComponent *fontComp; - - if(**strpp == 0x00) { - return; - } - - fontAdr = (u8 *)CalcCharCodeAddress(strpp, &fontComp); // ̃̕R[hAtHgf[^i[AhXZoB - - MI_CpuClearFast(fontProp->buff16x16[0], 64); // 16x16hbgPʂ̈ꎞWJobt@̃NA - - firstp = (u16 *)fontProp->buff16x16[0] + v_offset; - for(tate = 0; tate < fontComp->tate_dot - 1; tate++) { - *firstp = (u16)(*fontAdr++ << 8); - if(fontComp->yoko_dot > 8) { - *firstp |= *fontAdr++; - } - firstp++; - } - fontProp->h_offset = fontComp->yoko_dot; - fontProp->leftp = (u16 *)fontProp->buff16x16[0]; - fontProp->rightp = (u16 *)fontProp->buff16x16[1]; -} - - -// אڂtHgf[^obt@ɃZbg -static u8 * CloseFontChar(u8 **strpp, u16 v_offset, FontPropotion *fontProp) -{ - u8 tate; - u8 *fontAdr; - u16 *temp; - u16 *leftp_tmp; - u16 *rightp_tmp; - const FontComponent *fontComp; - - while(fontProp->h_offset < 16) { - if(**strpp == 0x00) { - break; - } - - fontAdr = (u8 *)CalcCharCodeAddress(strpp, &fontComp); // ̃̕R[hAtHgf[^i[AhXZoB - - leftp_tmp = fontProp->leftp + v_offset; // tHgf[^hbgl߂Ȃ烍[h - rightp_tmp = fontProp->rightp + v_offset; - for(tate=0; tate < fontComp->tate_dot - 1; tate++) { - *rightp_tmp = (u16)(*fontAdr++ << 8); - if(fontComp->yoko_dot > 8) { - *rightp_tmp |= *fontAdr++; - } - - *leftp_tmp |= *rightp_tmp >> fontProp->h_offset; - *rightp_tmp <<= 16 - fontProp->h_offset; - leftp_tmp++; - rightp_tmp++; - } - fontProp->h_offset += fontComp->yoko_dot; - } - fontProp->h_offset -= 16; - temp = fontProp->leftp; - fontProp->leftp = fontProp->rightp; - fontProp->rightp = temp; - return (u8 *)temp; -} - - -// R[hɑΉtHgf[^i[AhXZoB -static u32 CalcCharCodeAddress(u8 **strpp, const FontComponent **font) -{ - u8 higher_code; - u8 lower_code; - u16 sjis_code; - u32 adr; - - // Ώە@SJIS or ASCII@𔻒 - higher_code = *(*strpp)++; - if( ((higher_code >= SJIS_HIGHER_CODE1_MIN) && (higher_code <= SJIS_HIGHER_CODE1_MAX)) - ||((higher_code >= SJIS_HIGHER_CODE2_MIN) && (higher_code <= SJIS_HIGHER_CODE2_MAX)) ) { // SJISH - lower_code = *(*strpp)++; - *font = nowFontHan; - }else { // ASCII - sjis_code = tbl_ASCII_to_SJIS[higher_code]; - higher_code = (u8)(sjis_code >> 8); - lower_code = (u8)(sjis_code & 0x00ff); - *font = nowFontHan; - } - - // R[htHgf[^AhXZo - if(higher_code <= SJIS_HIGHER_CODE1_MIN + 3) { - higher_code -= 0x81; - }else if(higher_code <= SJIS_HIGHER_CODE1_MIN + 6) { - higher_code -= 0x83; - }else if(higher_code <= SJIS_HIGHER_CODE1_MAX) { - higher_code -= 0x84; - }else if(higher_code >= SJIS_HIGHER_CODE2_MIN) { - higher_code -= 0xc4; - } - - if(lower_code < 0x80) { - lower_code -= 0x40; - }else { - lower_code -= 0x41; - } - - adr = (*font)->start_adr - +((*font)->org_row_size) * higher_code - +((*font)->org_char_size+2) * lower_code + 2; - - return adr; -} - - -// wobt@1bittHgf[^4bitNITROLf[^ɓWJB -static void SpreadFontZen(u16 bit0_color, u16 bit1_color, u8 *fromAdr, u32 *toAdr) -{ - int i; - u8 tate; - u8 yoko; - u8 rd_data; - u32 wr_data; - u32 b0c; - u32 b1c; - u32 *toAdr_left; - u32 *toAdr_right; - - toAdr_left = toAdr; - toAdr_right = toAdr + 16; // toAdr + (16 * 4byte) - - for(tate = 0; tate < nowFontHan->need_tate_dot; tate++) { // LN^̏chbgWJ - // Eꂼ8dotLWJ - for(yoko = 0; yoko < 2; yoko++) { - wr_data = 0x00000000; // Cgf[^ - - if(tate < nowFontHan->tate_dot) { - rd_data = *fromAdr++; // E8dotL̓ǂݏo - b0c = (u32)bit0_color; // bit0 ̃J[ - b1c = (u32)bit1_color; // bit1 ̃J[ - - for(i = 0; i < 8; i++) { // 8dot̊e1bit̔ - if(rd_data & 0x80) { - wr_data |= b1c; // "1"J[P - }else { - wr_data |= b0c; // "0"J[O - } - rd_data <<= 1; - b0c <<= 4; - b1c <<= 4; - } - } - - if(yoko==0) { - *toAdr_right++ = wr_data; // 32bit - }else { - *toAdr_left++ = wr_data; - } - } - } -} - - -//---------------------------------------------- -// MALLOCVXȅ -//---------------------------------------------- - -// VRAMɃq[v쐬BiA[iVRAM͂Ȃ̂ŁAWRAM_MAIN, WRAM_SUB̃A[iőpj -static void InitAllocSystemSJIS( TargetScreen target ) -{ - void* tempLo; - OSHeapHandle hh; - - // VRAMɃq[v쐬 - - if( target == TOP_SCREEN ) { - // CLCD - OS_SetArenaLo( OS_ARENA_WRAM_MAIN, (void *)VRAM_M_ARENA_LO ); - OS_SetArenaHi( OS_ARENA_WRAM_MAIN, (void *)VRAM_M_ARENA_HI ); - tempLo = OS_InitAlloc( OS_ARENA_WRAM_MAIN, OS_GetWramMainArenaLo(), OS_GetWramMainArenaHi(), 1 ); - OS_SetArenaLo( OS_ARENA_WRAM_MAIN, tempLo ); - - hh = OS_CreateHeap( OS_ARENA_WRAM_MAIN, OS_GetWramMainArenaLo(), OS_GetWramMainArenaHi() ); - if(hh < 0) OS_Panic( "ARM9-MAIN LCD: Fail to create heap...\n" ); - OS_Printf( " arena lo = %x\n", OS_GetWramMainArenaLo() ); - OS_Printf( "WRAM arena hi = %x\n", OS_GetWramMainArenaHi() ); - hh = OS_SetCurrentHeap( OS_ARENA_WRAM_MAIN, hh ); - }else { // BOTTOM_SCREEN - // TuLCD - OS_SetArenaLo( OS_ARENA_WRAM_SUB, (void *)VRAM_S_ARENA_LO ); - OS_SetArenaHi( OS_ARENA_WRAM_SUB, (void *)VRAM_S_ARENA_HI ); - tempLo = OS_InitAlloc( OS_ARENA_WRAM_SUB, OS_GetWramSubArenaLo(), OS_GetWramSubArenaHi(), 1 ); - OS_SetArenaLo( OS_ARENA_WRAM_SUB, tempLo ); - - hh = OS_CreateHeap( OS_ARENA_WRAM_SUB, OS_GetWramSubArenaLo(), OS_GetWramSubArenaHi() ); - if(hh < 0) OS_Panic( "ARM9-SUB LCD: Fail to create heap...\n" ); - OS_Printf( "WRAM arena lo = %x\n", OS_GetWramSubArenaLo() ); - OS_Printf( "WRAM arena hi = %x\n", OS_GetWramSubArenaHi() ); - hh = OS_SetCurrentHeap( OS_ARENA_WRAM_SUB, hh ); - } -} - - -// VRAMւ̃Lm -static void *AllocMemoryFromVram( int size ) -{ - if ( targetScreen == TOP_SCREEN ) { - return OS_AllocFromWramMain( size ); // cQLKvȂ̂ŁANITRO_CHAR_SIZE*2 - }else { - return OS_AllocFromWramSub ( size ); // cQLKvȂ̂ŁANITRO_CHAR_SIZE*2 - } -} - - -// VRAMւ̃L -static void FreeMemoryToVram( void *p ) -{ - if ( targetScreen == TOP_SCREEN ) { - OS_FreeToWramMain( p ); - }else { - OS_FreeToWramSub( p ); - } -} - - -//---------------------------------------------- -// 16if[^𕶎ɕϊ -//---------------------------------------------- - -// CłvȌ`ł1bytẽf[^ǂݏoB -__inline static u16 ReadByteHWBus(const void *srcp) -{ - if((int)srcp & 0x00000001) return (u16)(*(u16 *)((int)srcp ^ 0x00000001) >> 8); - else return (u16)(*(u16 *)(srcp) & 0x00ff); -} - -// 16if[^10iɕϊ -static u8 *HexToDecimalString(const void *hexp, u8 *strp, u16 figure, u16 size) -{ - u16 i; - u32 target = 0; - - for(i = 0; i < size; i++) { - target |= ReadByteHWBus( ((u8 *)hexp)++ ) << (8 * i); - } - - strp += figure; - *strp-- = 0x00; - for(i = 0; i < figure; i++) { - CP_SetDiv32_32(target, 10); - *strp-- = (u8 )(CP_GetDivRemainder32() + 0x30); - target = (u32) CP_GetDivResult32(); - } - return (strp + 1); -} - - -// 16if[^16iɕϊ -static u8 *HexToString(const void *hexp, u8 *strp, u16 figure) -{ - u16 i; - u8 hex; - - strp += figure; - *strp-- = 0x00; - - for(i = 0; i < figure; i++){ - hex = (u8)ReadByteHWBus(hexp); - if(i & 0x01){ - hex = (u8)( (hex >> 4) & 0x0f); - ((u8 *)hexp)++; - }else{ - hex = (u8)( hex & 0x0f); - } - if(hex < 0x000a) hex += 0x30; - else hex += 0x41 - 0x0a; - *strp-- = hex; - } - return (strp + 1); -} - - -//---------------------------------------------- -// ASCII -> SJIS ϊe[u -//---------------------------------------------- - -const u16 tbl_ASCII_to_SJIS[0x100] = { - // 00 - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - // 10 - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - // 20 - 0x8140,0x8149,0x8168,0x81f2,0x8190,0x8193,0x8195,0x8166, - 0x8169,0x816a,0x8196,0x817b,0x8143,0x817c,0x8144,0x815e, - // 30 - 0x824f,0x8250,0x8251,0x8252,0x8253,0x8254,0x8255,0x8256, - 0x8257,0x8258,0x8146,0x8147,0x8183,0x8181,0x8184,0x8148, - // 40 - 0x8197,0x8260,0x8261,0x8262,0x8263,0x8264,0x8265,0x8266, - 0x8267,0x8268,0x8269,0x826a,0x826b,0x826c,0x826d,0x826e, - // 50 - 0x826f,0x8270,0x8271,0x8272,0x8273,0x8274,0x8275,0x8276, - 0x8277,0x8278,0x8279,0x816d,0x818f,0x816e,0x814f,0x8151, - // 60 - 0x8165,0x8281,0x8282,0x8283,0x8284,0x8285,0x8286,0x8287, - 0x8288,0x8289,0x828a,0x828b,0x828c,0x828d,0x828e,0x828f, - // 70 - 0x8290,0x8291,0x8292,0x8293,0x8294,0x8295,0x8296,0x8297, - 0x8298,0x8299,0x829a,0x816f,0x8162,0x8170,0x8160,0x81fc, - - // 80 - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - // 90 - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - // a0 - 0x81fc,0x8142,0x8175,0x8176,0x8141,0x8145,0x8192,0x8340, - 0x8342,0x8344,0x8346,0x8348,0x8383,0x8385,0x8387,0x8362, - // b0 - 0x815b,0x8341,0x8343,0x8345,0x8347,0x8349,0x834a,0x834c, - 0x834e,0x8350,0x8352,0x8354,0x8356,0x8358,0x835a,0x835c, - // c0 - 0x835e,0x8360,0x8363,0x8365,0x8367,0x8369,0x836a,0x836b, - 0x836c,0x836d,0x836e,0x8371,0x8374,0x8377,0x837a,0x837d, - // d0 - 0x837e,0x837f,0x838a,0x8382,0x8384,0x8386,0x8388,0x8389, - 0x838a,0x838b,0x838c,0x838d,0x838f,0x8393,0x814a,0x814b, - - // e0 - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - // f0 - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, - 0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc,0x81fc, -}; - diff --git a/build/tests/DispOwnerInfo/src/font.h b/build/tests/DispOwnerInfo/src/font.h deleted file mode 100644 index 3d13af9a..00000000 --- a/build/tests/DispOwnerInfo/src/font.h +++ /dev/null @@ -1,123 +0,0 @@ -/********************************************************************/ -/* font.c */ -/* DebugForIPL2 */ -/* */ -/* Copyright (C) 2003-2004 NINTENDO Co.,Ltd. */ -/********************************************************************/ -/* - tHgwb_ - - - $Log: font.h,v $ - Revision 1.2 2005/03/09 04:44:39 yosiokat - @\ljB - - Revision 1.1.1.1 2004/08/31 06:20:24 Yosiokat - no message - - - - - // **** old logs **** - - Revision 1.7 2004/08/18 07:17:26 Yosiokat - ㉺LCD^[QbgɂāAʌ‚ɏł悤ύXB - - Revision 1.6 2004/08/17 07:52:03 Yosiokat - ESetTargetScreenSJISljāA㉺LCD̂ǂɂ\”\ɂȂ悤ύXB - - Revision 1.5 2004/08/07 05:44:43 Yosiokat - ESJIS\֐Ńnhw肵ȂdlɕύXB - ELύXɑΉāANA֐dlύXB - - Revision 1.4 2004/07/13 00:31:48 Yosiokat - ETuLCDVRAMΏۂɂ悤ύXB - - Revision 1.3 2004/06/06 02:39:31 Yosiokat - SJISR[hp̒萔`font.hɈړB - - Revision 1.2 2004/05/26 01:16:57 Yosiokat - SJISx[XɕύXB - - Revision 1.1 2004/05/25 08:59:22 Yosiokat - SJISŐ䂷悤ɕύXB - - -*/ - -#ifndef __FONT_H_ -#define __FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -// define data---------------------------------- -#define STR_ENTRY_MAX_NUM 256 // o^”\ȕf[^̍ő - -#define SJIS_CHAR_VRAM_OFFSET 0x100 // SJISLN^pVRAM̃ItZbgl -#define SJIS_CHAR_VRAM_SIZE (0x8000 + 0x20) // @@V@@@@@@@@@@̃TCYi0x20̓q[ṽwb_j - -#define VRAM_M_ARENA_LO (HW_BG_VRAM + SJIS_CHAR_VRAM_OFFSET - 0x20) -#define VRAM_M_ARENA_HI (VRAM_M_ARENA_LO + SJIS_CHAR_VRAM_SIZE) -#define VRAM_S_ARENA_LO (HW_DB_BG_VRAM + SJIS_CHAR_VRAM_OFFSET - 0x20) -#define VRAM_S_ARENA_HI (VRAM_S_ARENA_LO + SJIS_CHAR_VRAM_SIZE) - // VRAMA[iLo & Hi - // SJISR[hp̒l -#define SJIS_HIGHER_CODE1_MIN 0x81 -#define SJIS_HIGHER_CODE1_MAX 0x9f -#define SJIS_HIGHER_CODE2_MIN 0xe0 -#define SJIS_HIGHER_CODE2_MAX 0xea - -// ֐̃G[^[l -#define DSJIS_ERR_ENTRY_GET_FAILED 0x8000 -#define DSJIS_ERR_ENTRY_ALLOC_FAILED 0x8001 -#define DSJIS_ERR_CHAR_ALLOC_FAILED 0x8002 -#define DSJIS_ERR_STR_MEMORY_OVER 0x8003 -#define DSJIS_ERR_STR_LENGTH_TOO_LONG 0x8004 - -// SetTargetScreenSJIS̈target -typedef enum TargetScreen { - TOP_SCREEN =0, - BOTTOM_SCREEN -}TargetScreen; - -// tHgރf[^iSelectFontŎwj -typedef enum FontType{ // Sp@@p - FONT12, // 12x12 & 12x 7dot - FONT_TYPE_MAX -}FontType; - - -// function's prototype declaration------------- - -void InitFont( TargetScreen target ); -void SetFont( FontType font ); -void SetTargetScreenSJIS( TargetScreen target ); -u16 ChangeColorSJIS( u16 handle, u16 new_color ); - -// ȉ̕\֐́Af[^AhXf[^nhZôŁAnhŗ^ȂėǂAAhX̃f[^𕡐ꏊɔzu邱ƂłȂB -u16 DrawStringSJIS ( u16 x, u16 y, u16 color, const void *str ); -u16 DrawHexSJIS ( u16 x, u16 y, u16 color, const void *hexp, u16 figure ); -u16 DrawDecimalSJIS( u16 x, u16 y, u16 color, const void *hexp, u16 figure, u16 size ); - -// ExńAindex݂邱ƂŁAL֐ŐĂ铯AhXf[^̕ꏊzuɑΉĂB -u16 DrawStringSJISEx ( u16 x, u16 y, u16 color, const void *strp, int index ); -u16 DrawHexSJISEx ( u16 x, u16 y, u16 color, const void *hexp, u16 figure, int index ); -u16 DrawDecimalSJISEx( u16 x, u16 y, u16 color, const void *hexp, u16 figure, u16 size, int index ); - -// \NA֐ -void ClearStringSJIS( void *datap ); -void ClearStringSJISEx( void *datap, int handleIndex ); -void ClearStringSJIS_handle( u16 handle ); -void ClearAllStringSJIS( void ); - - -#ifdef __cplusplus -} -#endif - -#endif // __FONT_H_ - diff --git a/build/tests/DispOwnerInfo/src/initFunc.c b/build/tests/DispOwnerInfo/src/initFunc.c deleted file mode 100644 index ceb4211d..00000000 --- a/build/tests/DispOwnerInfo/src/initFunc.c +++ /dev/null @@ -1,149 +0,0 @@ -/********************************************************************/ -/* initFunc.c */ -/* DebugForIPL2 */ -/* */ -/* Copyright (C) 2003-2004 NINTENDO Co.,Ltd. */ -/********************************************************************/ -/* - ֐Q - - $Log: initFunc.c,v $ - Revision 1.2.10.1 2007/01/22 07:36:16 yosiokat - NAT-IPL2ւ̑ΉB - - Revision 1.2.2.1 2006/02/06 11:34:35 yosiokat - GetIPL2CRC16USG-IPL2-WWłł̃R[hNVRAMi[tH[}bgύXꂽƂ - ΉB - - Revision 1.2 2005/04/02 07:42:19 yosiokat - IPL2tHg"s"ɕύXB - - Revision 1.1 2005/04/02 06:41:18 yosiokat - main.cN̏֐𕪗B - - -*/ - - -#include -#include "data.h" -#include "main.h" - -// define data--------------------------------------------- - -// extern data--------------------------------------------- - -// function's prototype------------------------------------ - -// global variables---------------------------------------- -u32 ipl2_crc32 = 0; - -// static variables---------------------------------------- - - -// const data---------------------------------------------- - - -// ================================================================== -/* function */ - -// \n -void InitDisp( void ) -{ - // CLCD - { - GX_SetBankForBG ( GX_VRAM_BG_128_A ); // @V@@@@@BG p - GX_SetBankForOBJ( GX_VRAM_OBJ_32_FG ); // @V@@@@@OBJp - GX_SetGraphicsMode( GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D ); - G2_SetBG1Control( GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text - GX_BG_COLORMODE_16, // use 256 colors mode - GX_BG_SCRBASE_0xf000, // screen base offset + 0x0000 is the address for BG #0 screen - GX_BG_CHARBASE_0x00000, // character base offset + 0x04000 is the address for BG #0 characters - GX_BG_EXTPLTT_01 // use BGExtPltt slot #0 if BGExtPltt is enabled - ); - G2_SetBG1Priority( 3 ); - G2_BG1Mosaic( FALSE ); - G2_SetBG2ControlText( GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0xf800, - GX_BG_CHARBASE_0x10000 - ); - G2_SetBG2Priority( 2 ); - G2_BG2Mosaic( FALSE ); - MI_CpuClearFast( (void *)HW_BG_VRAM, 0x20000 ); // BG -VRAM NA - MI_CpuClearFast( (void *)HW_OBJ_VRAM, 0x8000 ); // OBJ-VRAM NA - MI_CpuClearFast( (void *)HW_PLTT, HW_PLTT_SIZE ); // pbg NA // NitroSDKłcrt0.cŃNAĂB - MI_CpuFill32( (void *)HW_OAM, 192, HW_OAM_SIZE ); // OAM NA // NitroSDKłcrt0.cŃNAĂB - MI_CpuCopyFast( myPlttData, (void *)( HW_BG_PLTT + 2 * 16 ), sizeof(myPlttData) ); // BGpbg Zbg - MI_CpuCopyFast( myPlttData, (void *)( HW_BG_PLTT + 2 * 16 ), sizeof(myPlttData) ); // OBJpbg Zbg - } - // TuLCD - { - GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K); - GX_SetBankForSubBG ( GX_VRAM_SUB_BG_128_C ); // VRAM-C for BGs - GX_SetBankForSubOBJ( GX_VRAM_SUB_OBJ_128_D ); // VRAM-D for BGs - GXS_SetGraphicsMode( GX_BGMODE_0 ); // BGMODE is 0 - G2S_SetBG1Control( GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text - GX_BG_COLORMODE_16, // use 256 colors mode - GX_BG_SCRBASE_0xf000, // screen base offset + 0x0000 is the address for BG #0 screen - GX_BG_CHARBASE_0x00000, // character base offset + 0x04000 is the address for BG #0 characters - GX_BG_EXTPLTT_01 // use BGExtPltt slot #0 if BGExtPltt is enabled - ); - G2S_SetBG1Priority( 3 ); - G2S_BG1Mosaic( FALSE ); - G2S_SetBG2ControlText( GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0xf800, - GX_BG_CHARBASE_0x10000 - ); - G2S_SetBG2Priority( 2 ); - G2S_BG2Mosaic( FALSE ); - GXS_SetVisiblePlane( GX_PLANEMASK_BG1 | GX_PLANEMASK_BG2 ); // display only BG #0 - MI_CpuFill32( (void *)HW_DB_OAM, 192, HW_OAM_SIZE ); // OAM NA - MI_CpuClearFast( (void *)HW_DB_BG_VRAM, 0x20000 ); // BG -VRAM NA - MI_CpuClearFast( (void *)HW_DB_OBJ_VRAM, 0x20000 ); // OBJ -VRAM NA - MI_CpuCopyFast( myPlttData, (void *)( HW_DB_BG_PLTT + 2 * 16 ), sizeof(myPlttData) ); // BGpbg Zbg - MI_CpuCopyFast( myPlttData, (void *)( HW_DB_BG_PLTT + 2 * 16 ), sizeof(myPlttData) ); // OBJpbg Zbg - } -} - - -//--------------------------------------------------------------------------- -// IPL2tHg -//--------------------------------------------------------------------------- -void InitIPL2Font( void ) -{ - // tHgCX^X̍쐬B - // `p̃LN^obt@쐬B - fnt_CreateFont( &font_m, NITRO_LC_Font_s_bnfr, NITRO_LC_Font_s_bncmp ); - fnt_CreateDrawContext( &context_m, canvas_m, CANVAS_WIDTH, CANVAS_HEIGHT, FNT_DCTYPE_4BITS, &font_m ); - - fnt_CreateFont( &font_s, NITRO_LC_Font_s_bnfr, NITRO_LC_Font_s_bncmp ); - fnt_CreateDrawContext( &context_s, canvas_s, CANVAS_WIDTH, CANVAS_HEIGHT, FNT_DCTYPE_4BITS, &font_s ); - - InitIPL2FontBG(); -} - -//--------------------------------------------------------------------------- -// IPL2tHg\pXN[pbg -//--------------------------------------------------------------------------- -void InitIPL2FontBG( void ) -{ - int x, y; - - GX_LoadBGPltt ( s_Palette, 0, sizeof(s_Palette) ); - GXS_LoadBGPltt( s_Palette, 0, sizeof(s_Palette) ); - for ( y = 0 ; y < (CANVAS_HEIGHT >> 3) ; ++y ) { - for ( x = 0 ; x < (CANVAS_WIDTH >> 3) ; ++x ) { - screen_m[ y * 32 + x] = (u16)(y * 32 + x); - screen_s[ y * 32 + x] = (u16)(y * 32 + x); - } - } - DC_FlushRange ( screen_m, (CANVAS_WIDTH >> 3) * (CANVAS_HEIGHT >> 3) * 2 ); - GX_LoadBG2Scr ( screen_m, 0, (CANVAS_WIDTH >> 3) * (CANVAS_HEIGHT >> 3) * 2 ); - MI_CpuFillFast( canvas_m, 0, sizeof(canvas_m) ); - - DC_FlushRange ( screen_s, (CANVAS_WIDTH >> 3) * (CANVAS_HEIGHT >> 3) * 2 ); - GXS_LoadBG2Scr( screen_s, 0, (CANVAS_WIDTH >> 3) * (CANVAS_HEIGHT >> 3) * 2 ); - MI_CpuFillFast( canvas_s, 0, sizeof(canvas_s) ); -} diff --git a/build/tests/DispOwnerInfo/src/main.c b/build/tests/DispOwnerInfo/src/main.c deleted file mode 100644 index 4929f803..00000000 --- a/build/tests/DispOwnerInfo/src/main.c +++ /dev/null @@ -1,167 +0,0 @@ -/********************************************************************/ -/* main.c */ -/* DebugForIPL2 */ -/* */ -/* Copyright (C) 2003-2004 NINTENDO Co.,Ltd. */ -/********************************************************************/ -/* - C - - $Log: main.c,v $ - Revision 1.7 2005/04/06 08:26:57 yosiokat - IPL2tHg`FbNł̃mۃTCYɔAq[vTCY0x100000ɑB - - Revision 1.6 2005/04/02 07:41:57 yosiokat - EIPL2tHg\ɑΉB - EN̏[`initFunc.cɕB - - Revision 1.5 2005/04/01 05:46:48 yosiokat - fobOϐ\ljB - - Revision 1.4 2005/03/31 05:58:17 yosiokat - ENVRAMANZX֐CAʃ\[XɕB - EIPL2wb_擾p֐p悤ύXB - EGetIPL2CRC16NVRAMANZX֐ύXB - - Revision 1.3 2005/03/09 04:44:39 yosiokat - @\ljB - - Revision 1.2 2004/09/23 11:28:32 Yosiokat - {̃tbVɊi[ĂIPL2 ver\悤ύXB - - Revision 1.1.1.1 2004/08/31 06:20:24 Yosiokat - no message - - -*/ - - -#include -#include "data.h" -#include "main.h" - -// define data--------------------------------------------- - -// extern data--------------------------------------------- - -// function's prototype------------------------------------ -static void VBlankIntr( void ); - -// global variables---------------------------------------- - -// static variables---------------------------------------- - - -// const data---------------------------------------------- - - - -// ================================================================== -/* function */ - -static const char *isbn[4] = { "0-000000-00-0", "000-0000-000", "0000", " 000" }; - -// C -void NitroMain( void ) -{ - /* OS */ - OS_InitPrintServer(); - OS_Init(); -// OS_InitChina(); // SDK 2.01̏ꍇ -// OS_InitChina( isbn ); // SDK 5.1 ̏ꍇ - PXI_InitFifo(); - OS_InitThread(); - OS_InitTick(); - OS_InitAlarm(); - FX_Init(); - TP_Init(); - (void)RTC_Init(); - - /* GX */ - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - /* VuNݒ */ - (void)OS_SetIrqFunction( OS_IE_V_BLANK, VBlankIntr ); - (void)OS_EnableIrqMask( OS_IE_V_BLANK ); - (void)OS_EnableIrqMask(OS_IE_FIFO_RECV); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - (void)GX_VBlankIntr( TRUE ); - - { /* 蓖Ă̏ */ - enum { MAIN_HEAP_SIZE = 0x100000 } ; - void *heapStart, *nstart; - int hh; - - nstart = OS_InitAlloc( OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 16 ); - OS_SetMainArenaLo( nstart ); - heapStart = OS_AllocFromMainArenaLo( (u32)MAIN_HEAP_SIZE, 32 ); - hh = OS_CreateHeap( OS_ARENA_MAIN, heapStart, (void*)( (u32)heapStart + MAIN_HEAP_SIZE ) ); - (void)OS_SetCurrentHeap( OS_ARENA_MAIN, hh ); - } - - { /* FS */ - static u32 fs_tablework[0x100 / 4]; - FS_Init(FS_DMA_NOT_USE); - (void)FS_LoadTable(fs_tablework, sizeof(fs_tablework)); - } - - // Disp - InitDisp(); - InitIPL2Font(); - /* \Jn */ - GX_DispOn(); - GXS_DispOn(); - - // C[v֐̐ݒ - pad.cont = 0xffff; - - SEQ_DispNCD_init(); - nowProcess = SEQ_DispNCD; - - /* C[v */ - while(1) { - SVC_WaitVBlankIntr(); - ReadKeyPad(); - - (void)nowProcess(); - - OS_PrintServer(); - } -} - - -// uuN荞ݏ -static void VBlankIntr( void ) -{ - // OAM, BG-VRAM̍XV - DC_FlushRange ( oamBakM, sizeof(oamBakM) ); - DC_FlushRange ( oamBakS, sizeof(oamBakS) ); - DC_FlushRange ( bgBakM, sizeof(bgBakM) ); - DC_FlushRange ( bgBakS, sizeof(bgBakS) ); - MI_CpuCopyFast( oamBakM, (void*)HW_OAM, sizeof(oamBakM) ); - MI_CpuCopyFast( oamBakS, (void*)HW_DB_OAM, sizeof(oamBakS) ); - MI_CpuCopyFast( bgBakM, (void*)(HW_BG_VRAM + 0xf000), sizeof(bgBakM) ); - MI_CpuCopyFast( bgBakS, (void*)(HW_DB_BG_VRAM + 0xf000), sizeof(bgBakS) ); - - // BG2LN^ɓ]B - DC_FlushRange ( context_m.canvas, sizeof( canvas_m ) ); - GX_LoadBG2Char ( context_m.canvas, 0, sizeof( canvas_m ) ); - DC_FlushRange ( context_s.canvas, sizeof( canvas_s ) ); - GXS_LoadBG2Char( context_s.canvas, 0, sizeof( canvas_s ) ); - - //---- 荞݃`FbNtO - OS_SetIrqCheckFlag( OS_IE_V_BLANK ); -} - - -// L[̓f[^ǂݏo -void ReadKeyPad( void ) -{ - u16 readData = PAD_Read(); - pad.trg = (u16)(readData & (readData ^ pad.cont)); // gK - pad.cont = readData; // x^ -} - diff --git a/build/tests/DispOwnerInfo/src/main.h b/build/tests/DispOwnerInfo/src/main.h deleted file mode 100644 index e654fccb..00000000 --- a/build/tests/DispOwnerInfo/src/main.h +++ /dev/null @@ -1,41 +0,0 @@ -/********************************************************************/ -/* main.h */ -/* DebugForIPL2 */ -/* */ -/* Copyright (C) 2003-2004 NINTENDO Co.,Ltd. */ -/********************************************************************/ -/* - C`@wb_ -*/ - -#ifndef __MAIN_H__ -#define __MAIN_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -#include -#include -#include "myFunc.h" - -// define data-------------------------------------------- -#define MSG_VIEW_COUNT 30 - - -// function----------------------------------------------- -extern void SEQ_DispNCD_init( void ); -extern int SEQ_DispNCD( void ); - -// vONɎgp -extern void InitDisp( void ); -extern void InitIPL2Font( void ); -extern void InitIPL2FontBG( void ); -extern void ReadKeyPad( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __MAIN_H__ diff --git a/build/tests/DispOwnerInfo/src/myChar.c b/build/tests/DispOwnerInfo/src/myChar.c deleted file mode 100644 index 1787d52d..00000000 --- a/build/tests/DispOwnerInfo/src/myChar.c +++ /dev/null @@ -1,667 +0,0 @@ -/********************************************************************/ -/* myChar.c */ -/* NITRO-IPL */ -/* */ -/* Copyright (C) 2003-2004 NINTENDO Co.,Ltd. */ -/********************************************************************/ -/* - LN^pbgf[^ - - - $Log: myChar.c,v $ - Revision 1.1 2005/02/08 04:41:25 yosiokat - VKljB - - Revision 1.2 2004/05/19 08:25:28 yosiokat - XVO̒ljB - - -*/ - -#include "myFunc.h" - -// pbgf[^-------------------------------------------------------------- - -// LN^f[^------------------------------------------------------------ -const u16 myChar[0x2800*8/16]={ - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //0 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //1 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //2 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //3 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //4 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //5 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //6 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //7 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //8 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //9 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //a - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //b - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //c - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //d - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //e - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //f - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //10 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //11 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //12 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //13 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //14 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //15 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //16 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //17 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //18 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //19 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //1a - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //1b - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //1c - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //1d - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //1e - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //1f - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //20 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x1333,0x3321,0x1333,0x3321,0x1333,0x3321, //21 - 0x1333,0x3321,0x2333,0x3332,0x1333,0x3321,0x2333,0x3332, - 0x2113,0x3211,0x2113,0x3211,0x2123,0x3212,0x3213,0x3321, //22 - 0x3323,0x3332,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x2133,0x3321,0x1113,0x3211,0x2123,0x3321, //23 - 0x2133,0x3321,0x1113,0x3211,0x2123,0x3321,0x3233,0x3332, - 0x3333,0x3333,0x1333,0x3332,0x1133,0x3211,0x1213,0x3322, //24 - 0x1123,0x3311,0x1233,0x2112,0x1113,0x3211,0x1223,0x3322, - 0x3333,0x3333,0x2133,0x2133,0x1213,0x3212,0x2123,0x3321, //25 - 0x1233,0x3212,0x2133,0x2121,0x3213,0x3212,0x3323,0x3323, - 0x3333,0x3333,0x1133,0x3331,0x2113,0x3212,0x1123,0x3321, //26 - 0x2113,0x2111,0x3213,0x3213,0x1123,0x2121,0x2233,0x3232, - 0x1133,0x3332,0x1133,0x3332,0x1233,0x3332,0x2133,0x3333, //27 - 0x3233,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3213,0x3333,0x3321,0x1333,0x3332, //28 - 0x1333,0x3332,0x1333,0x3332,0x2333,0x3331,0x3333,0x3312, - 0x3333,0x3333,0x3133,0x3333,0x1233,0x3333,0x2333,0x3321, //29 - 0x3333,0x3321,0x3333,0x3321,0x1333,0x3332,0x2133,0x3333, - 0x3333,0x3333,0x1333,0x3332,0x1213,0x3212,0x1133,0x3321, //2a - 0x1233,0x3332,0x1133,0x3321,0x1213,0x3212,0x1323,0x3222, - 0x3333,0x3333,0x3333,0x3333,0x1333,0x3332,0x1333,0x3332, //2b - 0x1113,0x3211,0x1223,0x3222,0x1333,0x3332,0x2333,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //2c - 0x1133,0x3332,0x1133,0x3332,0x1233,0x3332,0x2133,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //2d - 0x1113,0x3211,0x2223,0x3222,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //2e - 0x3333,0x3333,0x3333,0x3333,0x2133,0x3333,0x2233,0x3333, - 0x3333,0x3333,0x3333,0x2133,0x3333,0x3213,0x3333,0x3321, //2f - 0x1333,0x3332,0x2133,0x3333,0x3213,0x3333,0x3323,0x3333, - 0x3333,0x3333,0x1133,0x3211,0x2113,0x2112,0x2113,0x2113, //30 - 0x2113,0x2113,0x2113,0x2113,0x1123,0x3211,0x2233,0x3322, - 0x3333,0x3333,0x1333,0x3321,0x1133,0x3321,0x1233,0x3321, //31 - 0x1333,0x3321,0x1333,0x3321,0x1333,0x3321,0x2333,0x3322, - 0x3333,0x3333,0x1113,0x3211,0x2223,0x2112,0x1133,0x3211, //32 - 0x2113,0x3322,0x2113,0x3333,0x1113,0x2111,0x2223,0x3222, - 0x3333,0x3333,0x1113,0x3211,0x2223,0x2112,0x1133,0x3211, //33 - 0x2233,0x2112,0x3333,0x2113,0x1113,0x3211,0x2223,0x3322, - 0x3333,0x3333,0x3333,0x3211,0x1333,0x3211,0x2133,0x3211, //34 - 0x3213,0x3211,0x1113,0x2111,0x2223,0x3211,0x3333,0x3322, - 0x3333,0x3333,0x1113,0x3211,0x2213,0x3322,0x1113,0x3211, //35 - 0x2223,0x2112,0x3333,0x2113,0x1113,0x3211,0x2223,0x3322, - 0x3333,0x3333,0x1133,0x3211,0x2113,0x3322,0x1113,0x3211, //36 - 0x2113,0x2112,0x2113,0x2113,0x1123,0x3211,0x2233,0x3322, - 0x3333,0x3333,0x1113,0x2111,0x2223,0x2122,0x3333,0x3213, //37 - 0x3333,0x3321,0x1333,0x3321,0x1333,0x3321,0x2333,0x3332, - 0x3333,0x3333,0x1133,0x3211,0x2113,0x2112,0x1123,0x3211, //38 - 0x2113,0x2112,0x2113,0x2113,0x1123,0x3211,0x2233,0x3322, - 0x3333,0x3333,0x1133,0x3211,0x2113,0x2112,0x2113,0x2113, //39 - 0x1123,0x2111,0x2233,0x2112,0x1133,0x3211,0x2233,0x3322, - 0x3333,0x3333,0x1333,0x3321,0x1333,0x3321,0x2333,0x3322, //3a - 0x3333,0x3333,0x1333,0x3321,0x1333,0x3321,0x2333,0x3322, - 0x3333,0x3333,0x1333,0x3321,0x1333,0x3321,0x2333,0x3322, //3b - 0x3333,0x3333,0x1333,0x3321,0x1333,0x3321,0x2333,0x3321, - 0x3333,0x3333,0x3333,0x3321,0x1333,0x3332,0x2133,0x3333, //3c - 0x2133,0x3333,0x1233,0x3333,0x2333,0x3321,0x3333,0x3322, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1133,0x3211, //3d - 0x2233,0x3222,0x1133,0x3211,0x2233,0x3222,0x3333,0x3333, - 0x3333,0x3333,0x1333,0x3333,0x2333,0x3331,0x3333,0x3212, //3e - 0x3333,0x3213,0x3333,0x3321,0x1333,0x3332,0x2333,0x3333, - 0x3333,0x3333,0x1133,0x3211,0x2113,0x2112,0x2113,0x2113, //3f - 0x3223,0x3211,0x1333,0x3321,0x2333,0x3332,0x1333,0x3321, - 0x3333,0x3333,0x1133,0x3321,0x2213,0x3212,0x1213,0x2121, //40 - 0x2113,0x2121,0x2113,0x2121,0x1213,0x3211,0x1123,0x2121, - 0x3333,0x3333,0x1133,0x3211,0x2113,0x2112,0x2113,0x2113, //41 - 0x1113,0x2111,0x2113,0x2112,0x2113,0x2113,0x2223,0x2223, - 0x3333,0x3333,0x1113,0x3211,0x2113,0x2112,0x1113,0x3211, //42 - 0x2113,0x2112,0x2113,0x2113,0x1113,0x3211,0x2223,0x3322, - 0x3333,0x3333,0x1133,0x3211,0x2113,0x2112,0x2113,0x2223, //43 - 0x2113,0x3333,0x2113,0x2113,0x1123,0x3211,0x2233,0x3322, - 0x3333,0x3333,0x1113,0x3211,0x2113,0x2112,0x2113,0x2113, //44 - 0x2113,0x2113,0x2113,0x2113,0x1113,0x3211,0x2223,0x3322, - 0x3333,0x3333,0x1113,0x2111,0x2113,0x2222,0x1113,0x3211, //45 - 0x2113,0x3222,0x2113,0x3333,0x1113,0x2111,0x2223,0x2222, - 0x3333,0x3333,0x1113,0x2111,0x2113,0x2222,0x1113,0x3211, //46 - 0x2113,0x3222,0x2113,0x3333,0x2113,0x3333,0x2223,0x3333, - 0x3333,0x3333,0x1133,0x3211,0x2113,0x3322,0x2113,0x2111, //47 - 0x2113,0x2112,0x2113,0x2113,0x1123,0x2111,0x2233,0x3222, - 0x3333,0x3333,0x2113,0x2113,0x2113,0x2113,0x1113,0x2111, //48 - 0x2113,0x2112,0x2113,0x2113,0x2113,0x2113,0x2223,0x2223, - 0x3333,0x3333,0x1333,0x3321,0x1333,0x3321,0x1333,0x3321, //49 - 0x1333,0x3321,0x1333,0x3321,0x1333,0x3321,0x2333,0x3322, - 0x3333,0x3333,0x3333,0x2113,0x3333,0x2113,0x3333,0x2113, //4a - 0x2113,0x2113,0x2113,0x2113,0x1123,0x3211,0x2233,0x3322, - 0x3333,0x3333,0x2113,0x2113,0x2113,0x3211,0x1113,0x3322, //4b - 0x1113,0x3331,0x2113,0x3311,0x2113,0x2112,0x2223,0x2223, - 0x3333,0x3333,0x2113,0x3333,0x2113,0x3333,0x2113,0x3333, //4c - 0x2113,0x3333,0x2113,0x3333,0x1113,0x2111,0x2223,0x2222, - 0x3333,0x3333,0x2133,0x2133,0x1113,0x1112,0x1113,0x1112, //4d - 0x1113,0x1111,0x2113,0x1121,0x2113,0x1121,0x3223,0x2232, - 0x3333,0x3333,0x2113,0x2113,0x1113,0x2112,0x1113,0x2112, //4e - 0x2113,0x2111,0x2113,0x2111,0x2113,0x2112,0x2223,0x2223, - 0x3333,0x3333,0x1133,0x3211,0x2113,0x2112,0x2113,0x2113, //4f - 0x2113,0x2113,0x2113,0x2113,0x1123,0x3211,0x2233,0x3322, - 0x3333,0x3333,0x1113,0x3211,0x2113,0x2112,0x1113,0x3211, //50 - 0x2113,0x3322,0x2113,0x3333,0x2113,0x3333,0x2223,0x3333, - 0x3333,0x3333,0x1133,0x3211,0x2113,0x2112,0x2113,0x2113, //51 - 0x2113,0x2113,0x2113,0x2113,0x1123,0x3211,0x2233,0x2111, - 0x3333,0x3333,0x1113,0x3211,0x2113,0x2112,0x1113,0x3211, //52 - 0x2113,0x2112,0x2113,0x2113,0x2113,0x2113,0x2223,0x2223, - 0x3333,0x3333,0x1133,0x2111,0x2113,0x3222,0x1123,0x3331, //53 - 0x1233,0x3311,0x2333,0x2112,0x1113,0x3211,0x2223,0x3322, - 0x3333,0x3333,0x1113,0x2111,0x1223,0x3221,0x1333,0x3321, //54 - 0x1333,0x3321,0x1333,0x3321,0x1333,0x3321,0x2333,0x3322, - 0x3333,0x3333,0x2113,0x2113,0x2113,0x2113,0x2113,0x2113, //55 - 0x2113,0x2113,0x2113,0x2113,0x1123,0x3211,0x2233,0x3322, - 0x3333,0x3333,0x2113,0x2113,0x2113,0x2113,0x2113,0x2113, //56 - 0x2113,0x2113,0x2123,0x3213,0x1233,0x3321,0x2333,0x3332, - 0x3333,0x3333,0x2113,0x1121,0x2113,0x1121,0x2113,0x1121, //57 - 0x1113,0x1111,0x1123,0x2112,0x2133,0x2133,0x3233,0x3233, - 0x3333,0x3333,0x2113,0x2113,0x2113,0x2113,0x1123,0x3211, //58 - 0x1233,0x3211,0x2113,0x2112,0x2113,0x2113,0x3223,0x3223, - 0x3333,0x3333,0x2113,0x2113,0x2113,0x2113,0x2133,0x3213, //59 - 0x1133,0x3211,0x1333,0x3321,0x1333,0x3321,0x2333,0x3322, - 0x3333,0x3333,0x1113,0x2111,0x2223,0x2112,0x1333,0x3221, //5a - 0x1133,0x3332,0x2113,0x3333,0x1113,0x2111,0x2223,0x2222, - 0x3333,0x3333,0x1333,0x3321,0x1333,0x3322,0x1333,0x3332, //5b - 0x1333,0x3332,0x1333,0x3332,0x1333,0x3321,0x2333,0x3322, - 0x3333,0x3333,0x3313,0x3333,0x3123,0x3333,0x1233,0x3333, //5c - 0x2333,0x3331,0x3333,0x3312,0x3333,0x3123,0x3333,0x3233, - 0x3333,0x3333,0x1333,0x3321,0x2333,0x3321,0x3333,0x3321, //5d - 0x3333,0x3321,0x3333,0x3321,0x1333,0x3321,0x2333,0x3322, - 0x3333,0x3333,0x1333,0x3332,0x2133,0x3321,0x3233,0x3322, //5e - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //5f - 0x3333,0x3333,0x3333,0x3333,0x1113,0x2111,0x2223,0x2222, - 0x1333,0x3321,0x1333,0x3321,0x1333,0x3332,0x2333,0x3321, //60 - 0x3333,0x3332,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x3211,0x2213,0x2112, //61 - 0x1123,0x2111,0x2113,0x2112,0x1123,0x2111,0x2233,0x2222, - 0x2113,0x3333,0x2113,0x3333,0x1113,0x3211,0x2113,0x2112, //62 - 0x2113,0x2113,0x2113,0x2113,0x1113,0x3211,0x2223,0x3322, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x3211,0x2113,0x2122, //63 - 0x2113,0x3233,0x2113,0x2133,0x1123,0x3211,0x2233,0x3322, - 0x3333,0x2113,0x3333,0x2113,0x1133,0x2111,0x2113,0x2112, //64 - 0x2113,0x2113,0x2113,0x2113,0x1123,0x2111,0x2233,0x2222, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x3211,0x2113,0x2112, //65 - 0x1113,0x2111,0x2113,0x3222,0x1123,0x2111,0x2233,0x3222, - 0x1333,0x3211,0x1133,0x3322,0x1113,0x3321,0x1123,0x3332, //66 - 0x1133,0x3332,0x1133,0x3332,0x1133,0x3332,0x2233,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x2111,0x2113,0x2112, //67 - 0x2113,0x2113,0x1123,0x2111,0x2213,0x2112,0x1133,0x3211, - 0x2113,0x3333,0x2113,0x3333,0x1113,0x3311,0x2113,0x2112, //68 - 0x2113,0x2113,0x2113,0x2113,0x2113,0x2113,0x2223,0x2223, - 0x1333,0x3321,0x2333,0x3332,0x1333,0x3321,0x1333,0x3321, //69 - 0x1333,0x3321,0x1333,0x3321,0x1333,0x3321,0x2333,0x3322, - 0x3333,0x3211,0x3333,0x3322,0x3333,0x3211,0x3333,0x3211, //6a - 0x3333,0x3211,0x3333,0x3211,0x3213,0x3211,0x1123,0x3321, - 0x2113,0x3333,0x2113,0x3213,0x2113,0x3211,0x1113,0x3321, //6b - 0x1113,0x3321,0x2113,0x3311,0x2113,0x2112,0x2223,0x3223, - 0x1333,0x3321,0x1333,0x3321,0x1333,0x3321,0x1333,0x3321, //6c - 0x1333,0x3321,0x1333,0x3321,0x1333,0x3321,0x2333,0x3322, - 0x3333,0x3333,0x3333,0x3333,0x1111,0x2111,0x1211,0x1121, //6d - 0x1211,0x1121,0x1211,0x1121,0x1211,0x1121,0x2322,0x2232, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x3211,0x2113,0x2112, //6e - 0x2113,0x2113,0x2113,0x2113,0x2113,0x2113,0x2223,0x2223, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x3211,0x2113,0x2112, //6f - 0x2113,0x2113,0x2113,0x2113,0x1123,0x3211,0x2233,0x3322, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x3211,0x2113,0x2112, //70 - 0x2113,0x2113,0x1113,0x3211,0x2113,0x3322,0x2113,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x2111,0x2113,0x2112, //71 - 0x2113,0x2113,0x1123,0x2111,0x2233,0x2112,0x3333,0x2113, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x2112,0x1133,0x2111, //72 - 0x1133,0x3222,0x1133,0x3332,0x1133,0x3332,0x2233,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x3211,0x1113,0x3322, //73 - 0x1133,0x3211,0x2233,0x2111,0x1133,0x3211,0x2233,0x3322, - 0x1133,0x3332,0x1113,0x3321,0x1123,0x3332,0x1133,0x3332, //74 - 0x1133,0x3332,0x1133,0x3332,0x1233,0x3321,0x2333,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x2113,0x2113,0x2113,0x2113, //75 - 0x2113,0x2113,0x2113,0x2113,0x1123,0x3211,0x2233,0x3322, - 0x3333,0x3333,0x3333,0x3333,0x2113,0x2113,0x2113,0x2113, //76 - 0x2113,0x2113,0x2113,0x3213,0x1113,0x3321,0x2223,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x1211,0x1121,0x1211,0x1121, //77 - 0x1211,0x1121,0x1211,0x1121,0x1111,0x2111,0x2222,0x3222, - 0x3333,0x3333,0x3333,0x3333,0x2113,0x2113,0x2113,0x2113, //78 - 0x1123,0x3211,0x2113,0x2112,0x2113,0x2113,0x3223,0x3223, - 0x3333,0x3333,0x3333,0x3333,0x2113,0x2113,0x2113,0x2113, //79 - 0x2113,0x2113,0x1123,0x2111,0x2233,0x2112,0x1133,0x3211, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x2111,0x2223,0x3211, //7a - 0x1333,0x3321,0x1133,0x3332,0x1113,0x2111,0x2223,0x2222, - 0x3333,0x3333,0x3333,0x3321,0x1333,0x3332,0x1333,0x3332, //7b - 0x2133,0x3333,0x1333,0x3332,0x1333,0x3332,0x3333,0x3321, - 0x3333,0x3333,0x1333,0x3332,0x1333,0x3332,0x1333,0x3332, //7c - 0x1333,0x3332,0x1333,0x3332,0x1333,0x3332,0x2333,0x3332, - 0x3333,0x3333,0x1333,0x3332,0x3333,0x3321,0x3333,0x3321, //7d - 0x3333,0x3213,0x3333,0x3321,0x3333,0x3321,0x1333,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3113,0x3333, //7e - 0x1221,0x2133,0x2332,0x3211,0x3333,0x3322,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //7f - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x2211,0x2222,0x2211,0x2222,0x2211,0x2222,0x2211,0x2222, //80 - 0x2211,0x2222,0x2211,0x2222,0x2211,0x2222,0x2211,0x2222, - 0x1111,0x2222,0x1111,0x2222,0x1111,0x2222,0x1111,0x2222, //81 - 0x1111,0x2222,0x1111,0x2222,0x1111,0x2222,0x1111,0x2222, - 0x1111,0x2211,0x1111,0x2211,0x1111,0x2211,0x1111,0x2211, //82 - 0x1111,0x2211,0x1111,0x2211,0x1111,0x2211,0x1111,0x2211, - 0x1111,0x1111,0x1111,0x1111,0x1111,0x1111,0x1111,0x1111, //83 - 0x1111,0x1111,0x1111,0x1111,0x1111,0x1111,0x1111,0x1111, - 0x2222,0x2222,0x2222,0x2222,0x2222,0x2222,0x2222,0x2222, //84 - 0x2222,0x2222,0x2222,0x2222,0x2222,0x2222,0x2222,0x2222, - 0x1333,0x3331,0x1333,0x3331,0x1333,0x3331,0x1333,0x3331, //85 - 0x1333,0x3331,0x1333,0x3331,0x1333,0x3331,0x1333,0x3331, - 0x1333,0x3331,0x1333,0x3331,0x1333,0x3331,0x1333,0x3331, //86 - 0x1111,0x1111,0x1333,0x3331,0x1333,0x3331,0x1333,0x3331, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //87 - 0x1111,0x1111,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x1113,0x3333,0x2213, //88 - 0x3333,0x1213,0x3333,0x1213,0x3333,0x1213,0x3333,0x1213, - 0x3333,0x3333,0x3333,0x3333,0x1111,0x1111,0x2222,0x2222, //89 - 0x1111,0x1111,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x1111,0x1111,0x2222,0x2222, //8a - 0x1111,0x1111,0x1333,0x3331,0x1333,0x3331,0x1333,0x3331, - 0x3333,0x1213,0x3333,0x1213,0x3333,0x1213,0x3333,0x1213, //8b - 0x3333,0x1213,0x3333,0x1213,0x3333,0x1213,0x3333,0x1213, - 0x3133,0x3333,0x1133,0x3333,0x1133,0x3331,0x1133,0x3311, //8c - 0x1133,0x3321,0x1133,0x3332,0x2133,0x3333,0x3233,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1113,0x3332, //8d - 0x2123,0x3213,0x1133,0x3321,0x1213,0x3212,0x2113,0x3321, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //8e - 0x3333,0x3321,0x3213,0x3213,0x3213,0x3213,0x2133,0x3323, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1333,0x3332, //8f - 0x1133,0x3332,0x2213,0x3321,0x3323,0x3321,0x1133,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x2133,0x3333, //90 - 0x1113,0x3321,0x1223,0x3332,0x2133,0x3333,0x1213,0x3321, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1113,0x3312, //91 - 0x2123,0x3323,0x1113,0x3321,0x2113,0x3213,0x2113,0x3321, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3213,0x3321, //92 - 0x1123,0x3211,0x2113,0x3212,0x1223,0x3322,0x1333,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1333,0x3332, //93 - 0x1213,0x3321,0x1113,0x3212,0x1213,0x3211,0x1323,0x3322, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1333,0x3332, //94 - 0x1333,0x3321,0x1133,0x3332,0x1213,0x3321,0x1123,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //95 - 0x1333,0x3321,0x2113,0x3212,0x3223,0x3213,0x1333,0x3321, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //96 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //97 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //98 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //99 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //9a - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //9b - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //9c - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //9d - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //9e - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //9f - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //a0 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //a1 - 0x3333,0x3333,0x1133,0x3321,0x2133,0x3321,0x1133,0x3321, - 0x3333,0x3333,0x1333,0x3211,0x1333,0x3322,0x1333,0x3332, //a2 - 0x1333,0x3332,0x2333,0x3332,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3321, //a3 - 0x3333,0x3321,0x3333,0x3321,0x1133,0x3321,0x2233,0x3322, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //a4 - 0x3333,0x3333,0x3333,0x3333,0x2133,0x3333,0x1333,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //a5 - 0x1333,0x3332,0x2333,0x3332,0x3333,0x3333,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x2111,0x2223,0x2122, //a6 - 0x1113,0x2111,0x2223,0x2122,0x3333,0x3213,0x1113,0x3321, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1113,0x3321, //a7 - 0x2223,0x3321,0x2133,0x3321,0x2133,0x3332,0x3213,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3321, //a8 - 0x1133,0x3332,0x2111,0x3333,0x2122,0x3333,0x2133,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1333,0x3332, //a9 - 0x1113,0x3211,0x2213,0x3212,0x3323,0x3321,0x1133,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //aa - 0x1133,0x3321,0x1233,0x3332,0x1333,0x3332,0x1113,0x3211, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3321, //ab - 0x1113,0x3211,0x2223,0x3321,0x1333,0x3321,0x2113,0x3321, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1213,0x3211, //ac - 0x2111,0x3212,0x2122,0x3323,0x1333,0x3332,0x1333,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //ad - 0x1113,0x3321,0x2223,0x3321,0x3333,0x3321,0x1113,0x3211, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1133,0x3211, //ae - 0x2233,0x3212,0x1133,0x3211,0x2233,0x3212,0x1133,0x3211, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //af - 0x1213,0x3212,0x2323,0x3213,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //b0 - 0x3333,0x3333,0x1113,0x3211,0x2223,0x3322,0x3333,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x1111,0x2111,0x2222,0x3212, //b1 - 0x2133,0x3213,0x2133,0x3321,0x2133,0x3332,0x3211,0x3333, - 0x3333,0x3333,0x3333,0x2133,0x3333,0x3213,0x1333,0x3321, //b2 - 0x2113,0x3321,0x3223,0x3321,0x3333,0x3321,0x3333,0x3321, - 0x3333,0x3333,0x1333,0x3332,0x1113,0x2111,0x2213,0x2122, //b3 - 0x3323,0x2133,0x3333,0x3213,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x3211,0x1223,0x3322, //b4 - 0x1333,0x3332,0x1333,0x3332,0x1333,0x3332,0x1111,0x2111, - 0x3333,0x3333,0x3333,0x3213,0x1113,0x2111,0x2223,0x3212, //b5 - 0x3333,0x3211,0x1333,0x3212,0x1333,0x3212,0x2113,0x3213, - 0x3333,0x3333,0x1333,0x3332,0x1113,0x2111,0x1223,0x2122, //b6 - 0x1333,0x2132,0x2133,0x2133,0x2133,0x2133,0x3213,0x3213, - 0x3333,0x3333,0x1333,0x3332,0x1113,0x2111,0x2223,0x3221, //b7 - 0x3333,0x3321,0x1113,0x1111,0x2223,0x2212,0x3333,0x3213, - 0x3333,0x3333,0x1133,0x2111,0x2133,0x2122,0x3213,0x2133, //b8 - 0x3323,0x3213,0x3333,0x3213,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x3333,0x3213,0x3333,0x1113,0x2111,0x2213,0x3212, //b9 - 0x3321,0x3213,0x3332,0x3321,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x2111,0x2223,0x2122, //ba - 0x3333,0x2133,0x3333,0x2133,0x3333,0x2133,0x1113,0x2111, - 0x3333,0x3333,0x3213,0x3213,0x1111,0x2111,0x2212,0x3212, //bb - 0x3213,0x3213,0x3323,0x3213,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x2113,0x2133,0x3223,0x2133, //bc - 0x2113,0x2133,0x3223,0x2133,0x3333,0x3213,0x1113,0x3321, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x2111,0x2223,0x3212, //bd - 0x3333,0x3321,0x3333,0x3321,0x1333,0x3212,0x2113,0x2133, - 0x3333,0x3333,0x2133,0x3333,0x1133,0x2111,0x2111,0x2122, //be - 0x2122,0x3213,0x2133,0x3323,0x2133,0x3333,0x1133,0x2111, - 0x3333,0x3333,0x3333,0x3333,0x3213,0x2133,0x3213,0x2133, //bf - 0x2123,0x3213,0x3233,0x3213,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x3333,0x1133,0x2111,0x2133,0x2122,0x2133,0x2133, //c0 - 0x1213,0x2111,0x2323,0x2122,0x3333,0x3213,0x1133,0x3321, - 0x3333,0x3333,0x3333,0x3213,0x1113,0x3321,0x2223,0x3321, //c1 - 0x1111,0x2111,0x2222,0x3221,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x1213,0x2132,0x1213,0x2132, //c2 - 0x2323,0x2133,0x3333,0x2133,0x3333,0x3213,0x1113,0x3321, - 0x3333,0x3333,0x1113,0x3211,0x2223,0x3322,0x1111,0x2111, //c3 - 0x2222,0x3221,0x3333,0x3321,0x1333,0x3332,0x2113,0x3333, - 0x3333,0x3333,0x2133,0x3333,0x2133,0x3333,0x2133,0x3333, //c4 - 0x1133,0x3332,0x2133,0x3211,0x2133,0x3322,0x2133,0x3333, - 0x3333,0x3333,0x3333,0x3321,0x1111,0x2111,0x2222,0x3221, //c5 - 0x3333,0x3321,0x3333,0x3321,0x1333,0x3332,0x2113,0x3333, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x3211,0x2233,0x3322, //c6 - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1113,0x2111, - 0x3333,0x3333,0x3333,0x3333,0x1111,0x2111,0x2222,0x3212, //c7 - 0x3133,0x3321,0x1233,0x3332,0x2133,0x3321,0x3211,0x3213, - 0x3333,0x3333,0x1333,0x3332,0x1111,0x2111,0x2222,0x3212, //c8 - 0x3333,0x3321,0x1133,0x3212,0x1211,0x2132,0x1322,0x3232, - 0x3333,0x3333,0x3333,0x3213,0x3333,0x3213,0x3333,0x3213, //c9 - 0x3333,0x3321,0x3333,0x3321,0x1333,0x3332,0x2113,0x3333, - 0x3333,0x3333,0x1333,0x3332,0x3333,0x3321,0x3213,0x3213, //ca - 0x3213,0x3213,0x3321,0x2133,0x3321,0x2133,0x3321,0x2133, - 0x3333,0x3333,0x3213,0x2133,0x3213,0x3211,0x1113,0x3322, //cb - 0x2213,0x3333,0x3213,0x3333,0x3213,0x3333,0x1133,0x2111, - 0x3333,0x3333,0x3333,0x3333,0x1111,0x2111,0x2222,0x2122, //cc - 0x3333,0x3213,0x3333,0x3213,0x3333,0x3321,0x1113,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x2133,0x3333,0x1213,0x3332, //cd - 0x3321,0x3321,0x3332,0x3213,0x3333,0x2133,0x3333,0x3233, - 0x3333,0x3333,0x1333,0x3332,0x1111,0x2111,0x1222,0x3222, //ce - 0x1213,0x3212,0x1213,0x2132,0x1321,0x2132,0x1321,0x2132, - 0x3333,0x3333,0x3333,0x3333,0x1111,0x2111,0x2222,0x2122, //cf - 0x3213,0x3213,0x2133,0x3321,0x1333,0x3332,0x3333,0x3321, - 0x3333,0x3333,0x3113,0x3333,0x1223,0x3311,0x2333,0x2122, //d0 - 0x1133,0x3231,0x2233,0x3212,0x1113,0x3322,0x2223,0x2111, - 0x3333,0x3333,0x1333,0x3332,0x2133,0x3333,0x3213,0x3333, //d1 - 0x3213,0x3213,0x3321,0x2133,0x3321,0x2133,0x1111,0x2111, - 0x3333,0x3333,0x3333,0x3213,0x3213,0x3213,0x2133,0x3321, //d2 - 0x1333,0x3332,0x1333,0x3332,0x2133,0x3321,0x3211,0x3213, - 0x3333,0x3333,0x3333,0x3333,0x1111,0x2111,0x2122,0x3222, //d3 - 0x1111,0x2111,0x2122,0x3222,0x2133,0x3333,0x1133,0x2111, - 0x3333,0x3333,0x2133,0x3333,0x1133,0x2111,0x2111,0x2122, //d4 - 0x2122,0x3213,0x2133,0x3323,0x1333,0x3332,0x1333,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x3321,0x2223,0x3321, //d5 - 0x3333,0x3321,0x3333,0x3321,0x3333,0x3321,0x1111,0x2111, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x2111,0x2223,0x2122, //d6 - 0x1113,0x2111,0x2223,0x2122,0x3333,0x2133,0x1113,0x2111, - 0x3333,0x3333,0x1113,0x3211,0x2223,0x3322,0x1111,0x2111, //d7 - 0x2222,0x2122,0x3333,0x2133,0x3333,0x3213,0x1113,0x3321, - 0x3333,0x3333,0x3213,0x3213,0x3213,0x3213,0x3213,0x3213, //d8 - 0x3213,0x3213,0x3323,0x3213,0x3333,0x3321,0x1113,0x3332, - 0x3333,0x3333,0x1333,0x3332,0x1213,0x3332,0x1213,0x3332, //d9 - 0x1213,0x2132,0x1213,0x2132,0x1213,0x3212,0x1321,0x3321, - 0x3333,0x3333,0x3213,0x3333,0x3213,0x3333,0x3213,0x3333, //da - 0x3213,0x3213,0x3213,0x3213,0x3213,0x3321,0x1113,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x2111,0x2213,0x2122, //db - 0x3213,0x2133,0x3213,0x2133,0x3213,0x2133,0x1113,0x2111, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x2111,0x2213,0x2122, //dc - 0x3323,0x2133,0x3333,0x2133,0x3333,0x3213,0x1133,0x3321, - 0x3333,0x3333,0x3333,0x3333,0x1113,0x2132,0x2223,0x2133, //dd - 0x3333,0x2133,0x3333,0x2133,0x3333,0x3213,0x1113,0x3321, - 0x3333,0x1313,0x1333,0x2322,0x1113,0x2111,0x1223,0x2122, //de - 0x1333,0x2132,0x2133,0x2133,0x2133,0x2133,0x3213,0x3213, - 0x3333,0x1313,0x1333,0x2322,0x1113,0x2111,0x2223,0x3221, //df - 0x3333,0x3321,0x1113,0x1111,0x2223,0x2212,0x3333,0x3213, - 0x3333,0x1213,0x3333,0x2323,0x1133,0x2111,0x2133,0x2122, //e0 - 0x3213,0x3213,0x3323,0x3213,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x1313,0x3213,0x2323,0x1113,0x2111,0x2213,0x3212, //e1 - 0x3321,0x3213,0x3332,0x3321,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x1313,0x3333,0x2323,0x1113,0x2111,0x2223,0x2122, //e2 - 0x3333,0x2133,0x3333,0x2133,0x3333,0x2133,0x1113,0x2111, - 0x3333,0x1313,0x3333,0x2323,0x3213,0x3213,0x1111,0x2111, //e3 - 0x2212,0x3212,0x3213,0x3213,0x3323,0x3321,0x1133,0x3332, - 0x3333,0x1313,0x3333,0x2323,0x2113,0x2133,0x3223,0x2133, //e4 - 0x2113,0x2133,0x3223,0x2133,0x3333,0x3213,0x1113,0x3321, - 0x3333,0x1313,0x3333,0x2323,0x1113,0x2111,0x2223,0x3212, //e5 - 0x3333,0x3321,0x3333,0x3321,0x1333,0x3212,0x2113,0x2133, - 0x3333,0x1313,0x2133,0x2323,0x1133,0x2111,0x2111,0x2122, //e6 - 0x2122,0x3213,0x2133,0x3323,0x2133,0x3333,0x1133,0x2111, - 0x3333,0x1313,0x3333,0x2323,0x3213,0x2133,0x3213,0x2133, //e7 - 0x2123,0x3213,0x3233,0x3213,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x1313,0x3333,0x2323,0x1133,0x2111,0x2133,0x2122, //e8 - 0x1213,0x2111,0x2323,0x2122,0x3333,0x3213,0x1133,0x3321, - 0x3333,0x1313,0x3333,0x2323,0x1113,0x3211,0x2223,0x3321, //e9 - 0x1111,0x2111,0x2222,0x3221,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x1313,0x3333,0x2323,0x1213,0x2132,0x1213,0x2132, //ea - 0x2323,0x2133,0x3333,0x2133,0x3333,0x3213,0x1113,0x3321, - 0x3333,0x1313,0x3333,0x2323,0x1113,0x3211,0x2223,0x3322, //eb - 0x1111,0x2111,0x2222,0x3221,0x3333,0x3321,0x1113,0x3332, - 0x3333,0x3333,0x2133,0x1313,0x2133,0x2323,0x2133,0x3333, //ec - 0x1133,0x3333,0x2133,0x3211,0x2133,0x3322,0x2133,0x3333, - 0x3333,0x1313,0x1333,0x2323,0x3333,0x3331,0x3213,0x3213, //ed - 0x3213,0x3213,0x3321,0x2133,0x3321,0x2133,0x3321,0x2133, - 0x3333,0x1313,0x3213,0x2323,0x3213,0x2111,0x1113,0x3222, //ee - 0x2213,0x3333,0x3213,0x3333,0x3213,0x3333,0x1123,0x2111, - 0x3333,0x1313,0x3333,0x2323,0x1111,0x2111,0x2222,0x2122, //ef - 0x3333,0x3213,0x3333,0x3213,0x3333,0x3321,0x1113,0x3332, - 0x3333,0x3333,0x3333,0x1313,0x2133,0x2323,0x1213,0x3332, //f0 - 0x3321,0x3321,0x3332,0x3213,0x3333,0x2133,0x3333,0x3233, - 0x3333,0x1313,0x1333,0x2323,0x1111,0x2111,0x1222,0x3222, //f1 - 0x1213,0x3212,0x1213,0x2132,0x1321,0x2132,0x1321,0x2132, - 0x3333,0x1313,0x1333,0x2322,0x1113,0x2111,0x2213,0x2122, //f2 - 0x3323,0x2133,0x3333,0x3213,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x3133,0x1333,0x1212,0x3333,0x2121,0x3213,0x3213, //f3 - 0x3213,0x3213,0x3321,0x2133,0x3321,0x2133,0x3321,0x2133, - 0x3333,0x3133,0x3213,0x1213,0x3213,0x2111,0x1113,0x3222, //f4 - 0x2213,0x3333,0x3213,0x3333,0x3213,0x3333,0x1133,0x2111, - 0x3333,0x3133,0x3333,0x1213,0x1111,0x2111,0x2222,0x2122, //f5 - 0x3333,0x3213,0x3333,0x3213,0x3333,0x3321,0x1113,0x3332, - 0x3333,0x3133,0x3333,0x1213,0x2133,0x2123,0x1213,0x3232, //f6 - 0x3321,0x3321,0x3332,0x3213,0x3333,0x2133,0x3333,0x3233, - 0x3333,0x3133,0x1333,0x1212,0x1111,0x2111,0x1222,0x3222, //f7 - 0x1213,0x3212,0x1213,0x2132,0x1321,0x2132,0x1321,0x2132, - 0x3333,0x3333,0x1333,0x3332,0x1113,0x3211,0x2123,0x3322, //f8 - 0x1113,0x2113,0x1223,0x3221,0x2133,0x3332,0x1133,0x2111, - 0x3333,0x3333,0x1333,0x3332,0x1113,0x3321,0x2123,0x2132, //f9 - 0x1113,0x3211,0x2121,0x2121,0x1321,0x2132,0x2113,0x3213, - 0x3333,0x3333,0x3213,0x3333,0x3213,0x3213,0x3213,0x2133, //fa - 0x3213,0x2133,0x3213,0x2133,0x1213,0x3232,0x2133,0x3333, - 0x3333,0x3333,0x1133,0x3321,0x2233,0x3332,0x1333,0x3211, //fb - 0x2113,0x2122,0x3223,0x2133,0x3333,0x3213,0x1133,0x3321, - 0x3333,0x3333,0x1133,0x3321,0x2233,0x3332,0x1113,0x3211, //fc - 0x2223,0x3321,0x1333,0x3332,0x2133,0x3321,0x3213,0x2113, - 0x3333,0x3333,0x2133,0x2133,0x1133,0x2121,0x2113,0x3232, //fd - 0x1123,0x3211,0x2113,0x2122,0x2121,0x2133,0x2113,0x3213, - 0x3333,0x3333,0x3333,0x3321,0x2133,0x3213,0x1111,0x2132, //fe - 0x2122,0x2121,0x3213,0x3321,0x3321,0x3321,0x1132,0x3332, - 0x3333,0x3333,0x1333,0x3332,0x1113,0x3211,0x2223,0x3321, //ff - 0x1133,0x2111,0x2233,0x3212,0x3313,0x3323,0x1133,0x3211, - 0x3333,0x3333,0x3333,0x3213,0x3333,0x3321,0x1333,0x3332, //100 - 0x2133,0x3333,0x1333,0x3332,0x3333,0x3321,0x3333,0x3213, - 0x3333,0x3333,0x3333,0x3213,0x1213,0x2111,0x2213,0x3212, //101 - 0x3213,0x3213,0x3213,0x3213,0x2133,0x3213,0x3233,0x3321, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x3211,0x2233,0x2122, //102 - 0x3333,0x3213,0x3333,0x3323,0x3213,0x3333,0x1133,0x2111, - 0x3333,0x3333,0x1333,0x3332,0x1113,0x3211,0x2223,0x3321, //103 - 0x3333,0x3212,0x3333,0x3213,0x3213,0x3333,0x1123,0x3211, - 0x3333,0x3333,0x3333,0x3333,0x3213,0x3333,0x3213,0x3333, //104 - 0x3213,0x3333,0x3213,0x3333,0x3213,0x3213,0x1123,0x3321, - 0x3333,0x3333,0x3333,0x3321,0x1113,0x2111,0x2223,0x3221, //105 - 0x1133,0x3321,0x2133,0x3321,0x1333,0x3321,0x1113,0x3332, - 0x3333,0x3333,0x3333,0x3333,0x3213,0x3321,0x1113,0x2111, //106 - 0x3211,0x3321,0x3212,0x3321,0x3213,0x2133,0x1133,0x3211, - 0x3333,0x3333,0x2133,0x2133,0x2133,0x2133,0x3233,0x3213, //107 - 0x1113,0x2111,0x1223,0x3222,0x2133,0x3333,0x1333,0x2111, - 0x3333,0x3333,0x1333,0x3332,0x1113,0x3211,0x2123,0x3322, //108 - 0x3213,0x2111,0x3213,0x3222,0x1213,0x3332,0x3321,0x2111, - 0x3333,0x3333,0x1333,0x3332,0x1113,0x3211,0x2123,0x3322, //109 - 0x1213,0x3311,0x2113,0x2122,0x3223,0x2133,0x1333,0x3211, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x3211,0x2211,0x2122, //10a - 0x3322,0x2133,0x3333,0x2133,0x3333,0x3213,0x1133,0x3321, - 0x3333,0x3333,0x3333,0x2113,0x1133,0x3211,0x2211,0x3321, //10b - 0x1322,0x3332,0x1333,0x3332,0x3333,0x3321,0x3333,0x2113, - 0x3333,0x3333,0x3213,0x3333,0x3213,0x2133,0x2133,0x3211, //10c - 0x1133,0x3322,0x2213,0x3333,0x3213,0x3333,0x1133,0x2111, - 0x3333,0x3333,0x2133,0x3333,0x1111,0x2112,0x2212,0x3223, //10d - 0x3213,0x3213,0x1321,0x3211,0x2132,0x2112,0x1333,0x3221, - 0x3333,0x3333,0x3333,0x3333,0x1213,0x2111,0x2213,0x3222, //10e - 0x3213,0x3333,0x3213,0x3333,0x3213,0x3321,0x2133,0x2113, - 0x3333,0x3333,0x3333,0x3321,0x3213,0x3321,0x1213,0x3211, //10f - 0x2113,0x2121,0x1121,0x2112,0x2121,0x2121,0x3213,0x3211, - 0x3333,0x3333,0x3333,0x3333,0x3213,0x3211,0x1211,0x2122, //110 - 0x2112,0x2133,0x3213,0x2111,0x3211,0x2121,0x3212,0x3211, - 0x3333,0x3333,0x3333,0x3333,0x1133,0x3211,0x2113,0x2122, //111 - 0x2121,0x2133,0x2121,0x2133,0x2121,0x2133,0x3213,0x3213, - 0x3333,0x3333,0x3333,0x3213,0x1121,0x2111,0x2221,0x3212, //112 - 0x3321,0x3213,0x1321,0x3211,0x2121,0x2112,0x1332,0x3221, - 0x3333,0x3333,0x2133,0x3333,0x2111,0x3213,0x3212,0x2113, //113 - 0x3321,0x3213,0x3321,0x3213,0x3321,0x3321,0x1113,0x3332, - 0x3333,0x3333,0x1133,0x3333,0x2233,0x3321,0x3333,0x3332, //114 - 0x1213,0x3332,0x3321,0x2121,0x3321,0x2121,0x1132,0x3232, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x1133,0x3332, //115 - 0x2213,0x3321,0x3321,0x3213,0x3332,0x2133,0x3333,0x2233, - 0x3333,0x3333,0x1321,0x2111,0x2321,0x3212,0x1321,0x2111, //116 - 0x2321,0x3212,0x1321,0x3211,0x2121,0x2112,0x1213,0x3221, - 0x3333,0x3333,0x1113,0x3211,0x2223,0x3321,0x1113,0x3211, //117 - 0x2223,0x3321,0x1113,0x3321,0x2221,0x3211,0x1113,0x3322, - 0x3333,0x3333,0x1113,0x3321,0x1223,0x3332,0x2133,0x3213, //118 - 0x1113,0x3211,0x2121,0x2112,0x3211,0x3213,0x3322,0x3321, - 0x3333,0x3333,0x2133,0x3333,0x1111,0x3212,0x2122,0x2133, //119 - 0x2113,0x3333,0x2121,0x2133,0x3213,0x2133,0x1133,0x3211, - 0x3333,0x3333,0x3333,0x3321,0x1213,0x3211,0x2113,0x2121, //11a - 0x1211,0x2132,0x1121,0x2132,0x2121,0x2133,0x3213,0x3213, - 0x3333,0x3333,0x1333,0x3332,0x1113,0x3321,0x2123,0x3332, //11b - 0x1113,0x3321,0x2123,0x2132,0x2133,0x2133,0x1333,0x3211, - 0x3333,0x3333,0x3333,0x3321,0x1213,0x3211,0x2113,0x2121, //11c - 0x3211,0x2132,0x2122,0x3213,0x2133,0x3323,0x1333,0x3332, - 0x3333,0x3333,0x1333,0x3332,0x1321,0x3211,0x1121,0x2122, //11d - 0x1211,0x2132,0x1321,0x2132,0x1332,0x3212,0x2133,0x3323, - 0x3333,0x3333,0x1333,0x3332,0x1333,0x3211,0x1333,0x3322, //11e - 0x1333,0x3332,0x1113,0x3321,0x1221,0x3212,0x2113,0x3323, - 0x3333,0x3333,0x1133,0x3321,0x2233,0x3332,0x2133,0x3211, //11f - 0x1213,0x2122,0x2113,0x2133,0x3223,0x2133,0x1333,0x3211, - 0x3333,0x3333,0x2133,0x3333,0x3213,0x3213,0x3213,0x3213, //120 - 0x2113,0x3213,0x3223,0x3213,0x3333,0x3321,0x1133,0x3332, - 0x3333,0x3333,0x1113,0x3211,0x2223,0x3321,0x1333,0x3211, //121 - 0x2113,0x2122,0x1221,0x2121,0x2132,0x2121,0x1333,0x3211, - 0x3333,0x3333,0x3333,0x3211,0x1213,0x3212,0x1211,0x3212, //122 - 0x2112,0x3213,0x3213,0x3213,0x3211,0x3213,0x3212,0x2133, - 0x3333,0x3333,0x1333,0x3211,0x2113,0x3321,0x1223,0x3332, //123 - 0x1133,0x3211,0x2211,0x2122,0x3322,0x2133,0x1333,0x3211, - 0x3333,0x3333,0x3333,0x3333,0x3213,0x3311,0x1211,0x2122, //124 - 0x2112,0x2133,0x3213,0x2133,0x3211,0x2133,0x3212,0x3211, - 0x3333,0x3333,0x3333,0x3333,0x1333,0x3332,0x1333,0x3332, //125 - 0x2133,0x3333,0x1133,0x3332,0x1213,0x2132,0x3321,0x3211, - 0x3333,0x1313,0x3333,0x2323,0x2133,0x3213,0x1111,0x2132, //126 - 0x2122,0x2121,0x3213,0x3221,0x3321,0x3321,0x1132,0x3332, - 0x3333,0x1313,0x1333,0x2322,0x1113,0x3211,0x2223,0x3321, //127 - 0x1133,0x2111,0x2233,0x3212,0x3313,0x3323,0x1123,0x3211, - 0x3333,0x1313,0x3333,0x2323,0x3333,0x3321,0x1333,0x3332, //128 - 0x2133,0x3333,0x1233,0x3333,0x2333,0x3331,0x3333,0x3312, - 0x3333,0x1313,0x3333,0x2323,0x1213,0x2111,0x3213,0x3213, //129 - 0x3213,0x3213,0x3213,0x3213,0x2123,0x3213,0x3233,0x3321, - 0x3333,0x1313,0x3333,0x2323,0x1133,0x3211,0x2233,0x2122, //12a - 0x3333,0x3213,0x3333,0x3323,0x3213,0x3333,0x1123,0x3111, - 0x3333,0x1313,0x1333,0x2322,0x1113,0x3211,0x2223,0x3321, //12b - 0x3333,0x3212,0x3333,0x3213,0x3213,0x3323,0x1123,0x3211, - 0x3333,0x3333,0x3333,0x3131,0x3213,0x3232,0x3213,0x3333, //12c - 0x3213,0x3333,0x3213,0x3333,0x3213,0x3213,0x1133,0x3321, - 0x3333,0x1313,0x3333,0x2321,0x1113,0x2111,0x2223,0x3321, //12d - 0x1133,0x3321,0x2133,0x3321,0x1333,0x3321,0x1113,0x3332, - 0x3333,0x1313,0x3333,0x2323,0x3213,0x3321,0x1113,0x2111, //12e - 0x2211,0x3221,0x3212,0x3321,0x3213,0x2132,0x1133,0x3211, - 0x3333,0x1313,0x2133,0x2323,0x2133,0x2133,0x3233,0x3213, //12f - 0x1113,0x3111,0x1223,0x3222,0x2133,0x3333,0x1233,0x2111, - 0x3333,0x1313,0x1333,0x2322,0x1113,0x3211,0x2123,0x3322, //130 - 0x3213,0x2111,0x3213,0x3222,0x1213,0x3332,0x2321,0x2111, - 0x3333,0x1313,0x1333,0x2322,0x1113,0x3211,0x2123,0x3322, //131 - 0x1213,0x3211,0x2113,0x2122,0x3223,0x2133,0x1333,0x3211, - 0x3333,0x1313,0x3333,0x2323,0x1133,0x3211,0x2211,0x2122, //132 - 0x3322,0x2133,0x3333,0x2133,0x3333,0x3213,0x1133,0x3321, - 0x3333,0x1313,0x3333,0x2323,0x1133,0x2111,0x2211,0x3221, //133 - 0x1322,0x3332,0x1333,0x3332,0x3333,0x3321,0x3333,0x2113, - 0x3333,0x1313,0x3213,0x2323,0x3213,0x2133,0x2133,0x3211, //134 - 0x1133,0x3322,0x2213,0x3333,0x3213,0x3333,0x1133,0x2111, - 0x3333,0x1313,0x3333,0x2323,0x1121,0x2111,0x2221,0x3212, //135 - 0x3321,0x3213,0x1321,0x3211,0x2121,0x2112,0x1332,0x3221, - 0x3333,0x1313,0x2133,0x2323,0x2111,0x3213,0x3212,0x2113, //136 - 0x3321,0x3213,0x3321,0x3213,0x3321,0x3321,0x1113,0x3332, - 0x3333,0x1313,0x1133,0x2323,0x2233,0x3321,0x3333,0x3332, //137 - 0x1213,0x3332,0x2321,0x2121,0x3321,0x2121,0x1132,0x3232, - 0x3333,0x3333,0x3333,0x3131,0x3333,0x3232,0x1133,0x3332, //138 - 0x2213,0x3321,0x3321,0x3213,0x3332,0x2133,0x3333,0x3233, - 0x3333,0x1313,0x1321,0x2321,0x2321,0x3212,0x1321,0x2111, //139 - 0x2321,0x3212,0x1321,0x3211,0x2121,0x2112,0x1213,0x3221, - 0x3333,0x3133,0x3333,0x1213,0x1121,0x2111,0x2221,0x3212, //13a - 0x3321,0x3213,0x1321,0x3211,0x2121,0x2112,0x1332,0x3221, - 0x3333,0x3133,0x2133,0x1213,0x2111,0x2123,0x3213,0x1113, //13b - 0x3321,0x2213,0x3321,0x3213,0x3321,0x3321,0x1113,0x3332, - 0x3333,0x3133,0x1133,0x1213,0x2233,0x2121,0x3333,0x3232, //13c - 0x1213,0x3332,0x3321,0x2121,0x3321,0x2121,0x1132,0x3232, - 0x3333,0x3313,0x3333,0x2121,0x3333,0x3212,0x1133,0x3322, //13d - 0x2213,0x3321,0x3321,0x3213,0x3332,0x2133,0x3333,0x3233, - 0x3333,0x3133,0x1321,0x1211,0x2321,0x2112,0x1321,0x2111, //13e - 0x2321,0x3212,0x1321,0x3211,0x2121,0x2112,0x1213,0x3221, - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, //13f - 0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333,0x3333, -}; diff --git a/build/tests/DispOwnerInfo/src/myFunc.c b/build/tests/DispOwnerInfo/src/myFunc.c deleted file mode 100644 index eaa7679d..00000000 --- a/build/tests/DispOwnerInfo/src/myFunc.c +++ /dev/null @@ -1,361 +0,0 @@ -/********************************************************************/ -/* myFunc.c */ -/* NITRO-IPL */ -/* */ -/* Copyright (C) 2003-2004 NINTENDO Co.,Ltd. */ -/********************************************************************/ -/* - WTu[`Q - - - $Log: myFunc.c,v $ - Revision 1.1.4.1 2006/02/01 06:29:37 yosiokat - mf_strcpy̎dlύXB - - Revision 1.1 2005/02/08 04:41:25 yosiokat - VKljB - - Revision 1.2 2004/05/19 08:25:28 yosiokat - XVO̒ljB - - -*/ - -#include "myFunc.h" - -// define data---------------------------------- -#define CHAR_INDEX 0x200 // Lx[X0x4000 - - -// function's prototype------------------------- -void mf_copyBuffer(u8 *srcp,u8 *dstp,u16 length); - -// extern data---------------------------------- -//extern u16 bgBakS[32*24]; // BG obNAbv -//extern u32 oamBakS[128*2]; // OAM obNAbv - - -// const data----------------------------------- -const u16 csr_charList1[] ={0x008c, 0x008c, 0x008c, 0x008c}; -const u8 str_time_period[]={" . ."}; - - -// global variable------------------------------ -MyTime myTime; -//KeyWork pad; - -// static variable------------------------------ -static u16 csr_animeCount, csr_animeCharNum; -static u16 key_rapid[4]; -static u16 blinkCount; -static u16 csr_pos_x, csr_pos_y, csr_add_y; - - -// ============================================================================ -// function's description -// ============================================================================ - -// BgBakItZbglZo -__inline static u16 *calcBgOffset(u16 pos_x,u16 pos_y) -{ - return bgBakS+pos_x+(pos_y<<5); -} - - -// CłvȌ`ł1bytẽf[^ǂݏoB -__inline static u16 ReadByteHWBus(const void *srcp) -{ - if((int)srcp & 0x00000001) return (u16)(*(u16 *)((int)srcp ^ 0x00000001) >> 8); - else return (u16)(*(u16 *)(srcp) & 0x00ff); -} - - -// -void mf_init(void) -{ - mf_KEYPAD_initRapid(); - mf_CSR_init(0,0,0); - mf_BLINK_initCounter(); -} -/* -// L[͓ǂݏo -void mf_KEYPAD_read(void) -{ - u16 ReadData= PAD_Read(); - pad.trg = (u16)(ReadData & (ReadData ^ pad.cont)); // gK - pad.cont= ReadData; // x^ -} -*/ - -// L[A˓͏@i\L[̂݁j -void mf_KEYPAD_initRapid(void) -{ - u16 *krp=key_rapid; - - *krp++=0; - *krp++=0; - *krp++=0; - *krp++=0; -} - - -// L[A˓́i\L[̂݁j -void mf_KEYPAD_rapid(void) -{ - u16 mask,i; - - for(i=0;i<4;i++){ - mask=(u16)(0x0001<<(i+4)); - if(pad.cont & mask){ - key_rapid[i]++; - if(key_rapid[i]==30) { - pad.trg|=mask; - key_rapid[i]=20; - } - }else{ - key_rapid[i]=0; - } - } -} - - -// 10if[^\ -void mf_drawDecimal(u16 pos_x,u16 pos_y,u16 color,const void *valuep,u8 drawLength,u8 size) -{ - u16 count,charCode; - u16 *dstp; - u32 mask,divisor,target; - - mask=0xff; - while(--size>0) mask=(mask<<8)|0xff; - target=(*(u32 *)valuep)&mask; - count=10; - divisor=1000000000; - dstp=calcBgOffset(pos_x,pos_y); - while(count) { - CP_SetDiv32_32(target, divisor); - if (count<=drawLength) { - charCode=(u16)(CP_GetDivResult32()+0x0030); - *dstp++ =(u16)( charCode | color | CHAR_INDEX ); - } - target=(u32)CP_GetDivRemainder32(); - CP_SetDiv32_32(divisor, 10); - divisor=(u32)CP_GetDivResult32(); - count--; - } -} - - -// 16if[^\ -void mf_drawHex(u16 pos_x,u16 pos_y,u16 color,const void *valuep,u8 drawLength) -{ - u16 count,charCode; - u16 *dstp=calcBgOffset(pos_x,pos_y)+drawLength-1; - - for(count=0;count>4) & 0x000f); - ((u8 *)valuep)++; - }else{ - charCode=(u16)( charCode & 0x000f); - } - if (charCode<0x000a) charCode+=0x0030; - else charCode+=0x0041-0x000a; - *dstp--=(u16)( charCode | color | CHAR_INDEX ); - } -} - - -// 1bytef[^\i0x00`0xff܂ł11byteŗǂ`悷 -void mf_drawString(u16 pos_x,u16 pos_y, u16 color, const u8 *strp) -{ - u16 data16; - u16 *dstp=calcBgOffset(pos_x,pos_y); - - while(1) { - data16=ReadByteHWBus(strp++); - if(data16==0) break; - *dstp++=(u16)( color | data16 | CHAR_INDEX ); - } -} - - -// 2bytef[^\i0x0100ȍ~12byteKvȕ`悷 -void mf_drawString2(u16 pos_x,u16 pos_y, u16 color, const u16 *strp) -{ - u16 *dstp=calcBgOffset(pos_x,pos_y); - - while(*strp) *dstp++ = (u16)( *strp++ | color | CHAR_INDEX ); -} - - -// `BGNA -void mf_clearRect(u16 pos_x,u16 pos_y,u8 height,u8 width) -{ - u16 i,j; - u16 *dstp=calcBgOffset(pos_x,pos_y); - - for(i=0;i -#include "data.h" - -// define data --------------------------------- - -// Ԍv\ -typedef struct { - int enable; - int frame; - int second; - int minute; - int hour; -}MyTime; - -// L[f[^E[NGA\ -//typedef struct { -// u16 trg; // gK -// u16 cont; // x^ -//}KeyWork; - - -// global variable------------------------------ -extern MyTime myTime; -//extern KeyWork pad; - - -// const data----------------------------------- -extern const u16 myChar[0x2800*8/16]; // LN^[f[^ - - -// function------------------------------------- -extern void mf_init(void); -extern void mf_KEYPAD_read(void); -extern void mf_KEYPAD_initRapid(void); -extern void mf_KEYPAD_rapid(void); -extern void mf_drawDecimal(u16 pos_x,u16 pos_y,u16 color,const void *valuep,u8 drawLength,u8 size); -extern void mf_drawHex(u16 pos_x,u16 pos_y,u16 color,const void *valuep,u8 drawLength); -extern void mf_drawString(u16 pos_x,u16 pos_y,u16 color,const u8 *strp); -extern void mf_drawString2(u16 pos_x,u16 pos_y,u16 color,const u16 *strp); -extern void mf_clearRect(u16 pos_x,u16 pos_y,u8 height,u8 width); -extern void mf_CSR_init(u16 pos_x,u16 pos_y,u16 add_y); -extern void mf_CSR_moveAndAnime(int nowNum); -extern void mf_CSR_anime(const u16 *csr_charListp); -extern void mf_BLINK_initCounter(void); -extern void mf_BLINK_drawString(u16 pos_x,u16 pos_y,u16 color,const u8 *strp); -extern void mf_waitXframe(u16 frame); -extern void mf_TIME_init(void); -extern void mf_TIME_start(int init_flag); -extern void mf_TIME_stop(void); -extern void mf_TIME_count(void); -extern void mf_TIME_draw(u16 pos_x,u16 pos_y,u16 color); -extern u8* mf_strcpy(const u8 *str1p,u8 *str2p); -extern u8 mf_strcmp(const u8 *str1p,const u8 *str2p); - - -#ifdef __cplusplus - -#endif - -#endif // __MY_FUNC_H__ - diff --git a/build/tests/DisplaySystemInformation/ARM7/Makefile b/build/tests/DisplaySystemInformation/ARM7/Makefile deleted file mode 100644 index eab0b68e..00000000 --- a/build/tests/DisplaySystemInformation/ARM7/Makefile +++ /dev/null @@ -1,85 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -override TWL_PLATFORM = TS -TWL_NO_STD_PCHDR = True -TARGET_CODEGEN ?= ALL - -#---------------------------------------------------------------------------- -DISP_INFO = $(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation - -SRCS = overwriteRtc.c crt0.SCR.c main.c - -TARGET_NAME = armadillo - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = $(TARGET_NAME).lsf -LCFILE_TEMPLATE = $(TARGET_NAME).lcf.template -LDRES_TEMPLATE = $(TARGET_NAME).response.template - -CRT0_O = $(DISP_INFO)/ARM7/obj/ARM7-TS.LTD/Release/crt0.SCR.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - -TWL_NO_STD_PCHDR = True - -MACRO_FLAGS += -DSDK_ARM7COMP_LTD -DSDK_SEA -DSDK_NOINIT - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - -#-------------------------------- -# install target -#-------------------------------- -#INSTALL_TARGETS = $(BINDIR)/$(TARGET_NAME).tef \ -# $(BINDIR)/$(TARGET_NAME).TWL.FLX.sbin \ -# $(BINDIR)/$(TARGET_NAME)_defs.TWL.FLX.sbin \ -# $(BINDIR)/$(TARGET_NAME).TWL.LTD.sbin \ -# $(BINDIR)/$(TARGET_NAME)_defs.TWL.LTD.sbin - -#INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE) - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include \ - $(DISP_INFO)/common/include \ - $(TWLSDK_ROOT)/build/libraries/init/common/include - - -LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ - libsdio_sp$(TWL_LIBSUFFIX).a \ - libathdrv_sp$(TWL_LIBSUFFIX).a \ - libwpa_sp$(TWL_LIBSUFFIX).a \ - libsea_sp$(TWL_LIBSUFFIX).a \ - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM7/armadillo.lcf.template b/build/tests/DisplaySystemInformation/ARM7/armadillo.lcf.template deleted file mode 100644 index 6ae1bd6b..00000000 --- a/build/tests/DisplaySystemInformation/ARM7/armadillo.lcf.template +++ /dev/null @@ -1,400 +0,0 @@ -#--------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: armadillo.lcf.template -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- -MEMORY -{ - (RWX) : ORIGIN = , LENGTH = 0x0 > - binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - - binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - - check.WORKRAM (RWX) : ORIGIN = 0x03740000, LENGTH = 0xd0000 > workram.check -} - -KEEP_SECTION -{ - .sinit -} - -SECTIONS -{ - ############################ STATIC ################################# - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_STATIC_START =.; - OBJECT(_start,*) - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_SINIT_START =.; - - - - - - - - - - - - - WRITEW 0; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(4); - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_END =.; - - SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; - __sinit__ = SDK_STATIC_SINIT_START; # for static initializer - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_STATIC_BSS_START =.; - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_BSS_END = .; - - SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; - - } >> - - ############################ STATIC_FOOTER ########################## - .binary.STATIC_FOOTER: - { - WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE - WRITEW _start_ModuleParams - ADDR(.); - WRITEW 0; # NO DIGEST - WRITEW _start_LtdModuleParams - ADDR(.); - - } > binary.STATIC_FOOTER - - ############################ OVERLAYDEFS ############################ - .F: - { - ### module information - WRITEW ADDR(.); # load address - WRITEW _start; # entry address - WRITEW SDK_STATIC_SIZE; # size of module - WRITEW _start_AutoloadDoneCallback; # callback autoload done - - } > F - - ########################### LTDAUTOLOADS ############################ - SDK_LTDAUTOLOAD_TOP_START = 0x02f00000; - SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC ̈悪 4 bytes ̃_~[oCit@C̐擪ɓ # - SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; - SDK_LTDAUTOLOAD_SIZE = 0; - SDK_LTDAUTOLOAD_BSS_END = 0x03740000; - - .binary.LTDAUTOLOAD_TOP: - { - WRITEW 0; - - } > binary.LTDAUTOLOAD_TOP - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDAUTOLOAD..START =.; - - - - - - - - - . = ALIGN(4); - SDK_STATIC_ETABLE_START =.; - __exception_table_start__ =.; - EXCEPTION - __exception_table_end__ =.; - SDK_STATIC_ETABLE_END =.; - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..SINIT_START =.; - - - - - - - - - - - - - WRITEW 0; - - # - # DATA BLOCK: READ WRITE BLOCK - # - . = ALIGN(4); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..END =.; - - SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDAUTOLOAD..BSS_START =.; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..BSS_END =.; - SDK_LTDAUTOLOAD_BSS_END =.; - - SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; - - } >> - - - SDK_MOUNT_INFO_TABLE = SDK_LTDAUTOLOAD_BSS_END; - SDK_LTDAUTOLOAD_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400; - - ######################### LTDAUTOLOAD_INFO ########################## - .binary.LTDAUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_LTDAUTOLOAD..SIZE; - WRITEW SDK_LTDAUTOLOAD..SINIT_START; - WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; - - - } > binary.LTDAUTOLOAD_INFO - - SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; - SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); - - ########################## LTDOVERLAYDEFS ########################### - .L: - { - ### TWL limited extended static module information - WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address - WRITEW SDK_MOUNT_INFO_TABLE; # address of the FS mount information table - WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module - WRITEW 0; # padding - - } > L - - ############################ OTHERS ################################# - SDK_SUBPRIV_ARENA_LO = 0x02ffc000; # CA[i̓TCY 0 - SDK_SEA_KEY_STORE = SDK_LTDAUTOLOAD_BSS_END; - SDK_WRAM_ARENA_LO = SDK_LTDAUTOLOAD_BSS_END + 0x40; - - SDK_IRQ_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; - - .check.WORKRAM: - { - . = SDK_WRAM_ARENA_LO + 0x80 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; - - } > check.WORKRAM -} diff --git a/build/tests/DisplaySystemInformation/ARM7/armadillo.lsf b/build/tests/DisplaySystemInformation/ARM7/armadillo.lsf deleted file mode 100644 index 4519fc34..00000000 --- a/build/tests/DisplaySystemInformation/ARM7/armadillo.lsf +++ /dev/null @@ -1,85 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: armadillo.lsf -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - StackSize 1024 1024 - - Library $(CRT0_O) -} - -#-------- -Ltdautoload SCRWRAM -{ - Address 0x03740000 - - Library libsubpsyscall.a - Library libsyscall_sp.twl.a - Library $(CW_LIBS) - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) - - Object * (.etable) - Object $(OBJDIR)/main.o - Object $(OBJDIR)/overwriteRtc.o - - Library libsea_sp$(LIBSUFFIX).a - Library libcrypto_sp$(LIBSUFFIX).a - - Library libos_sp$(LIBSUFFIX).a - Library libmi_sp$(LIBSUFFIX).a - Library libstd_sp$(LIBSUFFIX).a - Library libmath_sp$(LIBSUFFIX).a - Library libpxi_sp$(LIBSUFFIX).a - Library libexi_sp$(LIBSUFFIX).a - Library libi2c_sp$(LIBSUFFIX).a - Library libsdio_sp$(LIBSUFFIX).a - Library libpad_sp$(LIBSUFFIX).a - Library libscfg_sp$(LIBSUFFIX).a - Library libmcu_sp$(LIBSUFFIX).a - Library libcdc_sp$(LIBSUFFIX).a - Library libsnd_sp$(LIBSUFFIX).a - Library libsndex_sp$(LIBSUFFIX).a - Library libspi_sp$(LIBSUFFIX).a - Library libpm_sp$(LIBSUFFIX).a - Library libtp_sp$(LIBSUFFIX).a - Library libtpex_sp$(LIBSUFFIX).a - Library libmic_sp$(LIBSUFFIX).a - Library libmicex_sp$(LIBSUFFIX).a - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - Library libfatfs_sp$(LIBSUFFIX).a - Library libwm_sp$(LIBSUFFIX).a - Library libnwm_sp$(LIBSUFFIX).a - Library libwvr_sp$(LIBSUFFIX).a - Library libwl_sp$(LIBSUFFIX).a - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a -# Library libfs_sp$(LIBSUFFIX).a -# Library libcard_sp$(LIBSUFFIX).a -# Library libcamera_sp$(LIBSUFFIX).a - - Object * (.wram) - Object * (.ltdwram) - Object * (.rsvwram) - Object * (.main) - Object * (.ltdmain) -} diff --git a/build/tests/DisplaySystemInformation/ARM7/armadillo.response.template b/build/tests/DisplaySystemInformation/ARM7/armadillo.response.template deleted file mode 100644 index b68c3564..00000000 --- a/build/tests/DisplaySystemInformation/ARM7/armadillo.response.template +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -l - - - - - - - -l - - - - - - - - -l - - diff --git a/build/tests/DisplaySystemInformation/ARM7/src/main.c b/build/tests/DisplaySystemInformation/ARM7/src/main.c deleted file mode 100644 index 219de8c5..00000000 --- a/build/tests/DisplaySystemInformation/ARM7/src/main.c +++ /dev/null @@ -1,632 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" - -#include "address.h" - - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -/* eXbhDx */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_WPA 10 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* ROM o^GÅgR[h */ -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/* gp DMA ԍ */ -#define DMA_NO_FATFS FATFS_DMA_4 // = 0 -#define DMA_NO_NWM NWMSP_DMA_7 - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(void); -static void InitializeFatfs(void); -static void InitializeNwm(OSHeapHandle hh); -static void DummyThread(void* arg); - -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); -#endif -static void VBlankIntr(void); - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void -TwlSpMain(void) -{ - OSHeapHandle heapHandle; - - // OSARM9ƓOSCFG̏Lɏo - // WX^Rs[ - MI_CpuMove16( (void*)REG_ROM_ADDR, DISPINFO_SHARED_SCFG_REG_ADDR, DISPINFO_SHARED_SCFG_REG_SIZE ); - // WRAMɑޔĂ镪Rs[ - MI_CpuMove16( (void*)HWi_WSYS04_ADDR, DISPINFO_SHARED_SCFG_WRAM_ADDR, DISPINFO_SHARED_SCFG_WRAM_SIZE ); - - /* OS */ - OS_Init(); - PrintDebugInfo(); - - /* NVRAM 烆[U[ǂݏo */ - ReadUserInfo(); - - /* q[v̈ݒ */ - heapHandle = InitializeAllocateSystem(); - - /* {^̓T[` */ - (void)PAD_InitXYButton(); - - /* ݋ */ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - /* eCu */ - AES_Init(THREAD_PRIO_AES); // AES - SEA_Init(THREAD_PRIO_SEA); // SEA -// FS_Init(FS_DMA_NOT_USE); // FS for CARD -// FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD - InitializeFatfs(); // FAT-FS - InitializeNwm(heapHandle); // TWL - MCU_InitIrq(THREAD_PRIO_MCU); // }CR - CDC_InitLib(); // CODEC -// if (OSi_IsCodecTwlMode() == TRUE) -// { -// CAMERA_Init(); // J -// } - SND_Init(THREAD_PRIO_SND); // TEh - SNDEX_Init(THREAD_PRIO_SNDEX); // TEhg - RTC_Init(THREAD_PRIO_RTC); // RTC - WVR_Begin(heapHandle); // NITRO - SPI_Init(THREAD_PRIO_SPI); - - while (TRUE) - { - OS_Halt(); - - /* \tgEFAZbgv͊ĎȂ */ - /* AGB J[gbW̑}`FbN͍sȂ */ - /* DS J[h̑}`FbN͍sȂ */ - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - OS_TPrintf("ARM7: This component is running on TWL.\n"); - OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle -InitializeAllocateSystem(void) -{ - OSHeapHandle hh; - void* subLo = (void*)OS_GetWramSubArenaLo(); - void* subHi = (void*)OS_GetWramSubArenaHi(); - void* privLo = (void*)OS_GetWramSubPrivArenaLo(); - void* privHi = (void*)OS_GetWramSubPrivArenaHi(); - - if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) - { - /* SUB A[i SUBPRIV A[iɋz */ - OS_SetWramSubArenaHi(subLo); - OS_SetWramSubPrivArenaLo(subLo); - privLo = subLo; - } - - /* A[i 0 NA */ - MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); - - /* q[v쐬 */ - privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); - if (hh < 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - - /* Jgq[vɐݒ */ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - /* q[vTCY̊mF */ - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if (heapSize <= 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - OS_TPrintf("ARM7: heap size [%d]\n", heapSize); - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuBFATFS֐ŃXbhx~ - ׁAx~삷_~[̃Xbh𗧂ĂB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - OSThread thread; - u32 stack[18]; - - /* _~[Xbh쐬 */ - OS_CreateThread(&thread, DummyThread, NULL, - (void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX); - OS_WakeupThreadDirect(&thread); - - /* FATFS */ - /* [TODO] DMA NOT_USE ̂܂܂ŗǂH */ - if(!FATFS_Init(DMA_NO_FATFS, FATFS_DMA_NOT_USE, THREAD_PRIO_FATFS)) - { - /* do nothing */ - } - - /* _~[Xbhj */ - OS_KillThread(&thread, NULL); -} - -/*---------------------------------------------------------------------------* - Name: InitializeNwm - Description: NWMCuB - Arguments: hh - p”\ȃq[ṽnhwB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeNwm(OSHeapHandle hh) -{ - NwmspInit nwmInit; - - /* [TODO] mۂĂq[v̈悪VꎮKvƂĂ郁ʈȏォ̃`FbNKv */ - - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - - nwmInit.dmaNo = DMA_NO_NWM; - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.drvHeap.handle = hh; - - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; - nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.wpaHeap.handle = hh; - - NWMSP_Init(&nwmInit); -} - -/*---------------------------------------------------------------------------* - Name: DummyThread - Description: FATFSCuACDCCuۂɗĂ_~[ - XbhB - Arguments: arg - gpȂB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -DummyThread(void* arg) -{ -#pragma unused(arg) - while (TRUE) - { - } -} - -#ifdef WM_PRECALC_ALLOWEDCHANNEL -extern u16 WMSP_GetAllowedChannel(u16 bitField); -#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } - -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -extern void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c b/build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c deleted file mode 100644 index af04b9d0..00000000 --- a/build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c +++ /dev/null @@ -1,67 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: overwriteRtc.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include - -extern BOOL RTC_IsAvailablePxiCommand(u16 command); - -/*---------------------------------------------------------------------------* - Name: RTC_IsAvailablePxiCommand - - Description: PXI R}hL RTC R}hł邩ǂB - - Arguments: command - R}hB - - Returns: BOOL - LȃR}hłꍇ TRUE ԂBł - ȃR}hłꍇɂ FALSE ԂB - *---------------------------------------------------------------------------*/ -BOOL -RTC_IsAvailablePxiCommand(u16 command) -{ - switch (command) - { - case RTC_PXI_COMMAND_RESET: - case RTC_PXI_COMMAND_SET_HOUR_FORMAT: - case RTC_PXI_COMMAND_READ_DATETIME: - case RTC_PXI_COMMAND_READ_DATE: - case RTC_PXI_COMMAND_READ_TIME: - case RTC_PXI_COMMAND_READ_PULSE: - case RTC_PXI_COMMAND_READ_ALARM1: - case RTC_PXI_COMMAND_READ_ALARM2: - case RTC_PXI_COMMAND_READ_STATUS1: - case RTC_PXI_COMMAND_READ_STATUS2: - case RTC_PXI_COMMAND_READ_ADJUST: - case RTC_PXI_COMMAND_READ_FREE: - case RTC_PXI_COMMAND_WRITE_DATETIME: - case RTC_PXI_COMMAND_WRITE_DATE: - case RTC_PXI_COMMAND_WRITE_TIME: - case RTC_PXI_COMMAND_WRITE_PULSE: - case RTC_PXI_COMMAND_WRITE_ALARM1: - case RTC_PXI_COMMAND_WRITE_ALARM2: - case RTC_PXI_COMMAND_WRITE_STATUS1: - case RTC_PXI_COMMAND_WRITE_STATUS2: - case RTC_PXI_COMMAND_WRITE_ADJUST: - case RTC_PXI_COMMAND_WRITE_FREE: - return TRUE; - } - return FALSE; -} - diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/Makefile b/build/tests/DisplaySystemInformation/ARM7_armadillo/Makefile deleted file mode 100644 index 3b2548aa..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/Makefile +++ /dev/null @@ -1,86 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -override TWL_PLATFORM = TS -TWL_NO_STD_PCHDR = True -TARGET_CODEGEN ?= ARM - -#---------------------------------------------------------------------------- -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SRCS = overwriteRtc.c crt0.SCR.c main.c - -TARGET_NAME = armadillo - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = $(TARGET_NAME).lsf -LCFILE_TEMPLATE = $(TARGET_NAME).lcf.template -LDRES_TEMPLATE = $(TARGET_NAME).response.template - -CRT0_O = crt0.SCR.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - -TWL_NO_STD_PCHDR = True - -MACRO_FLAGS += -DSDK_ARM7COMP_LTD -DSDK_SEA -DSDK_NOINIT - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - -#-------------------------------- -# install target -#-------------------------------- -#INSTALL_TARGETS = $(BINDIR)/$(TARGET_NAME).tef \ -# $(BINDIR)/$(TARGET_NAME).TWL.FLX.sbin \ -# $(BINDIR)/$(TARGET_NAME)_defs.TWL.FLX.sbin \ -# $(BINDIR)/$(TARGET_NAME).TWL.LTD.sbin \ -# $(BINDIR)/$(TARGET_NAME)_defs.TWL.LTD.sbin - -#INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE) - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include \ - $(DISP_INFO)/common/include \ - $(TWLSDK_ROOT)/build/libraries/init/common/include - -LLIBRARY_DIRS += $(DISP_INFO)/ARM7_armadillo/obj/$(TWL_BUILDTYPE_ARM7) - -LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ - libsdio_sp$(TWL_LIBSUFFIX).a \ - libathdrv_sp$(TWL_LIBSUFFIX).a \ - libwpa_sp$(TWL_LIBSUFFIX).a \ - libsea_sp$(TWL_LIBSUFFIX).a \ - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lcf.template b/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lcf.template deleted file mode 100644 index 6ae1bd6b..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lcf.template +++ /dev/null @@ -1,400 +0,0 @@ -#--------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: armadillo.lcf.template -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- -MEMORY -{ - (RWX) : ORIGIN = , LENGTH = 0x0 > - binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - - binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - - check.WORKRAM (RWX) : ORIGIN = 0x03740000, LENGTH = 0xd0000 > workram.check -} - -KEEP_SECTION -{ - .sinit -} - -SECTIONS -{ - ############################ STATIC ################################# - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_STATIC_START =.; - OBJECT(_start,*) - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_SINIT_START =.; - - - - - - - - - - - - - WRITEW 0; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(4); - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_END =.; - - SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; - __sinit__ = SDK_STATIC_SINIT_START; # for static initializer - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_STATIC_BSS_START =.; - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_BSS_END = .; - - SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; - - } >> - - ############################ STATIC_FOOTER ########################## - .binary.STATIC_FOOTER: - { - WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE - WRITEW _start_ModuleParams - ADDR(.); - WRITEW 0; # NO DIGEST - WRITEW _start_LtdModuleParams - ADDR(.); - - } > binary.STATIC_FOOTER - - ############################ OVERLAYDEFS ############################ - .F: - { - ### module information - WRITEW ADDR(.); # load address - WRITEW _start; # entry address - WRITEW SDK_STATIC_SIZE; # size of module - WRITEW _start_AutoloadDoneCallback; # callback autoload done - - } > F - - ########################### LTDAUTOLOADS ############################ - SDK_LTDAUTOLOAD_TOP_START = 0x02f00000; - SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC ̈悪 4 bytes ̃_~[oCit@C̐擪ɓ # - SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; - SDK_LTDAUTOLOAD_SIZE = 0; - SDK_LTDAUTOLOAD_BSS_END = 0x03740000; - - .binary.LTDAUTOLOAD_TOP: - { - WRITEW 0; - - } > binary.LTDAUTOLOAD_TOP - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDAUTOLOAD..START =.; - - - - - - - - - . = ALIGN(4); - SDK_STATIC_ETABLE_START =.; - __exception_table_start__ =.; - EXCEPTION - __exception_table_end__ =.; - SDK_STATIC_ETABLE_END =.; - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..SINIT_START =.; - - - - - - - - - - - - - WRITEW 0; - - # - # DATA BLOCK: READ WRITE BLOCK - # - . = ALIGN(4); - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..END =.; - - SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDAUTOLOAD..BSS_START =.; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..BSS_END =.; - SDK_LTDAUTOLOAD_BSS_END =.; - - SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; - - } >> - - - SDK_MOUNT_INFO_TABLE = SDK_LTDAUTOLOAD_BSS_END; - SDK_LTDAUTOLOAD_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400; - - ######################### LTDAUTOLOAD_INFO ########################## - .binary.LTDAUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_LTDAUTOLOAD..SIZE; - WRITEW SDK_LTDAUTOLOAD..SINIT_START; - WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; - - - } > binary.LTDAUTOLOAD_INFO - - SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; - SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); - - ########################## LTDOVERLAYDEFS ########################### - .L: - { - ### TWL limited extended static module information - WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address - WRITEW SDK_MOUNT_INFO_TABLE; # address of the FS mount information table - WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module - WRITEW 0; # padding - - } > L - - ############################ OTHERS ################################# - SDK_SUBPRIV_ARENA_LO = 0x02ffc000; # CA[i̓TCY 0 - SDK_SEA_KEY_STORE = SDK_LTDAUTOLOAD_BSS_END; - SDK_WRAM_ARENA_LO = SDK_LTDAUTOLOAD_BSS_END + 0x40; - - SDK_IRQ_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; - - .check.WORKRAM: - { - . = SDK_WRAM_ARENA_LO + 0x80 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; - - } > check.WORKRAM -} diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lsf b/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lsf deleted file mode 100644 index 4519fc34..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.lsf +++ /dev/null @@ -1,85 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: armadillo.lsf -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - StackSize 1024 1024 - - Library $(CRT0_O) -} - -#-------- -Ltdautoload SCRWRAM -{ - Address 0x03740000 - - Library libsubpsyscall.a - Library libsyscall_sp.twl.a - Library $(CW_LIBS) - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) - - Object * (.etable) - Object $(OBJDIR)/main.o - Object $(OBJDIR)/overwriteRtc.o - - Library libsea_sp$(LIBSUFFIX).a - Library libcrypto_sp$(LIBSUFFIX).a - - Library libos_sp$(LIBSUFFIX).a - Library libmi_sp$(LIBSUFFIX).a - Library libstd_sp$(LIBSUFFIX).a - Library libmath_sp$(LIBSUFFIX).a - Library libpxi_sp$(LIBSUFFIX).a - Library libexi_sp$(LIBSUFFIX).a - Library libi2c_sp$(LIBSUFFIX).a - Library libsdio_sp$(LIBSUFFIX).a - Library libpad_sp$(LIBSUFFIX).a - Library libscfg_sp$(LIBSUFFIX).a - Library libmcu_sp$(LIBSUFFIX).a - Library libcdc_sp$(LIBSUFFIX).a - Library libsnd_sp$(LIBSUFFIX).a - Library libsndex_sp$(LIBSUFFIX).a - Library libspi_sp$(LIBSUFFIX).a - Library libpm_sp$(LIBSUFFIX).a - Library libtp_sp$(LIBSUFFIX).a - Library libtpex_sp$(LIBSUFFIX).a - Library libmic_sp$(LIBSUFFIX).a - Library libmicex_sp$(LIBSUFFIX).a - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - Library libfatfs_sp$(LIBSUFFIX).a - Library libwm_sp$(LIBSUFFIX).a - Library libnwm_sp$(LIBSUFFIX).a - Library libwvr_sp$(LIBSUFFIX).a - Library libwl_sp$(LIBSUFFIX).a - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a -# Library libfs_sp$(LIBSUFFIX).a -# Library libcard_sp$(LIBSUFFIX).a -# Library libcamera_sp$(LIBSUFFIX).a - - Object * (.wram) - Object * (.ltdwram) - Object * (.rsvwram) - Object * (.main) - Object * (.ltdmain) -} diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.response.template b/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.response.template deleted file mode 100644 index b68c3564..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/armadillo.response.template +++ /dev/null @@ -1,22 +0,0 @@ - - - - - -l - - - - - - - -l - - - - - - - - -l - - diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/crt0.SCR.c b/build/tests/DisplaySystemInformation/ARM7_armadillo/src/crt0.SCR.c deleted file mode 100644 index 52d0ff28..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/crt0.SCR.c +++ /dev/null @@ -1,714 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - libraries - init - ARM7.TWL - File: crt0.SCR.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#ifndef SDK_FINALROM -#include -#endif -#include "boot_sync.h" - -/*---------------------------------------------------------------------------*/ -void _start(void); -void _start_AutoloadDoneCallback(void* argv[]); - -/*---------------------------------------------------------------------------* - OQ - *---------------------------------------------------------------------------*/ -/* JXNvgɂ`V{Q */ -extern void SDK_AUTOLOAD_LIST(void); -extern void SDK_AUTOLOAD_LIST_END(void); -extern void SDK_AUTOLOAD_START(void); -extern void SDK_STATIC_START(void); -extern void SDK_STATIC_BSS_START(void); -extern void SDK_STATIC_BSS_END(void); -extern void SDK_LTDAUTOLOAD_LIST(void); -extern void SDK_LTDAUTOLOAD_LIST_END(void); -extern void SDK_LTDAUTOLOAD_START(void); -extern void SDK_WRAM_ARENA_LO(void); - -/* O֐Q */ -extern void OS_IrqHandler(void); -#ifndef SDK_NOINIT -extern void _fp_init(void); -extern void __call_static_initializers(void); -#endif - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define SDK_NITROCODE_LE 0x2106c0de -#define SDK_NITROCODE_BE 0xdec00621 -#define SDK_TWLCODE_LE 0x6314c0de -#define SDK_TWLCODE_BE 0xdec01463 - -/* .rodata ZNVɔzu郍[hɕKvȏ */ -void* const _start_ModuleParams[] = -{ - (void*)0, - (void*)0, - (void*)0, - (void*)SDK_STATIC_BSS_START, - (void*)SDK_STATIC_BSS_END, - (void*)0, - (void*)0, - (void*)SDK_NITROCODE_BE, - (void*)SDK_NITROCODE_LE, -}; - -void* const _start_LtdModuleParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LIST, - (void*)SDK_LTDAUTOLOAD_LIST_END, - (void*)SDK_LTDAUTOLOAD_START, - (void*)0, - (void*)SDK_TWLCODE_BE, - (void*)SDK_TWLCODE_LE, -}; - -/*---------------------------------------------------------------------------* - Name: ShakeHand - Description: ARM9 ShakeHand ֐ƓB - CłȂԂŎsKvB - Arguments: r0 - ARM9 pϐւ̃|C^B - r1 - ARM7 pϐւ̃|C^B - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_ShakeHand[10] = -{ - 0xe1d020b0, /* ldrh r2, [r0] ; ϐXLǂ */ - 0xe1d130b0, /* ldrh r3, [r1] ; ϐVLǂ */ - 0xe2833001, /* @1: add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe1d0c0b0, /* ldrh r12, [r0] ; ϐX̌Lǂ */ - 0xe152000c, /* cmp r2, r12 ; ϐX̕ω𔻒肷 */ - 0x0afffffa, /* beq @1 ; ωĂȂ΃[v */ - 0xe2833001, /* add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe12fff1e /* bx lr ; nhVFCN */ -}; - -/*---------------------------------------------------------------------------* - Name: Stop - Description: vO~B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_Stop[2] = -{ - 0xef000006, /* @1: swi #6 ; SVC_Halt */ - 0xeafffffd /* b @1 ; [v */ -}; - -/*---------------------------------------------------------------------------* - Name: GotoMain - Description: ARM9 ɓ̏ԂɂȂƂ`ŁAMain ֐փWv - BɎwobt@ 0 NAsBX^bNœ삳 - 邱Ƃz肵ĂׁAX^bN؎gpȂB - Arguments: r0 - 0 NAobt@̐擪AhXB - 4 oCgACꂽAhXłKvB - r1 - 8 bit: ARM9 ɓ`tF[YԍB - 24 bit: 0 NAobt@̃TCYB - 4 ̔{łKvB - r2 - ptF[YǗϐւ̃|C^B - r3 - Main ֐̃|C^BMain ֐ Thumb R[hłꍇ - ɂ́Abx ߂ŃWv邽ߍʼnʃrbg 1 ɂȂ - KvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_GotoMain[10] = -{ - 0xe59fc01c, /* @1: ldr r12, [pc, #28] ; 24 bit }XNp */ - 0xe111000c, /* tst r1, r12 ; NAobt@cTCY`FbN */ - 0xe3a0c000, /* mov r12, #0 ; NApϐp */ - 0x1480c004, /* strne r12, [r0], #4 ; 4 oCgNA */ - 0x12411004, /* subne r1, r1, #4 ; NAobt@cTCY -= 4 */ - 0x1afffff9, /* bne @1 ; cTCY 0 ɂȂ܂Ń[v */ - 0xe1a01c21, /* mov r1, r1, LSR #24 ; tF[YǗϐ̍XVlp */ - 0xe1c210b0, /* strh r1, [r2] ; tF[YǗϐXV */ - 0xe12fff13, /* bx r3 ; Main ֐փWv */ - 0x00fffffc /* 0x00fffffc */ -}; - - -/*---------------------------------------------------------------------------* - ֐vg^Cv - *---------------------------------------------------------------------------*/ -static void INITi_CheckSysConfig(void); -static void INITi_DetectMainMemorySize(void); -static void INITi_Stop(void); -static void INITi_DoAutoload(void); -#ifndef SDK_NOINIT -static void INITi_ShelterStaticInitializer(u32* ptr); -static void INITi_CallStaticInitializers(void); -#endif - -static void* INITi_Copy32(void* dst, void* src, u32 size); -static void* INITi_Fill32(void* dst, u32 value, u32 size); - -/*---------------------------------------------------------------------------*/ -#include - -/*---------------------------------------------------------------------------* - Name: _start - Description: NxN^B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start(void) -{ -@000: - /* ݋֎~ */ - mov r12, #HW_REG_BASE - str r12, [r12, #REG_IME_OFFSET] - - /* SCFG ݒmF */ - bl INITi_CheckSysConfig - - /* `[nꂽޔ */ - ldr r3, =SDK_WRAM_ARENA_LO - sub r2, r3, #0x40 - ldr r1, =HW_LAUNCHER_DELIVER_PARAM_BUF -@001: - cmp r2, r3 - ldrlt r0, [r1], #4 - strlt r0, [r2], #4 - blt @001 - - /* nhVFCNp}CNR[hp WRAM ɃRs[ */ - ldr r1, =microcode_ShakeHand - ldr r2, =HW_PRV_WRAM - add r3, r2, #40 // sizeof(microcode_ShakeHand) -@002: ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @002 - - /* p WRAM ̃R[h ARM9 ƃnhVFCN */ - ldr r0, =HW_BOOT_SHAKEHAND_9 - ldr r1, =HW_BOOT_SHAKEHAND_7 - ldr r2, =HW_PRV_WRAM - mov lr, pc - bx r2 - -@010: - /* X^bN|C^ݒ */ - mov r0, #HW_PSR_SVC_MODE // SuperVisor mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_SVC_STACK_END - mov r0, #HW_PSR_IRQ_MODE // IRQ mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_IRQ_STACK_END - ldr r1, =SDK_IRQ_STACKSIZE - sub r1, sp, r1 - sub sp, sp, #4 // 4 bytes for IRQ stack check code - mov r0, #HW_PSR_SYS_MODE // System mode - msr cpsr_csfx, r0 - sub sp, r1, #4 // 4 bytes for SYS stack check code - - /* X^bN̈NA */ - ldr r0, =SDK_SYS_STACKSIZE - sub r1, r1, r0 - ldr r2, =HW_PRV_WRAM_IRQ_STACK_END - mov r0, #0 -@011: cmp r1, r2 - strlt r0, [r1], #4 - blt @011 - - /* v[hp[^AhXi[ĂȂꍇ́AftHglZbg */ - ldr r0, =HW_PRELOAD_PARAMETER_ADDR - ldr r1, [r0] - cmp r1, #0 - ldreq r1, =HW_PARAM_TWL_SETTINGS_DATA_DEFAULT - streq r1, [r0] - - /* Autoload { */ - bl INITi_DoAutoload - - /* STATIC ZOg .bss ZNV 0 NA */ - mov r1, #0 // r1 = clear value for STATIC bss section - ldr r3, =_start_ModuleParams - ldr r0, [r3, #12] // r0 = start address of STATIC bss section - ldr r2, [r3, #16] - subs r2, r2, r0 // r2 = size of STATIC bss section - blgt INITi_Fill32 - - /* CTCY𒲍 */ - bl INITi_DetectMainMemorySize - -#ifndef SDK_FINALROM - /* fobOo̓EBhEݒ */ - ldr r1, =HW_PRINT_OUTPUT_ARM9 - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9 - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7 << 8) - strh r0, [r1] - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9ERR - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7ERR << 8) - strh r0, [r1, #2] -#endif - - /* IRQ ݃xN^ݒ */ - ldr r1, =HW_INTR_VECTOR_BUF - ldr r0, =OS_IrqHandler - str r0, [r1] - -#ifndef SDK_NOINIT - /* c++ p */ - bl _fp_init - bl TwlSpStartUp - bl __call_static_initializers - bl INITi_CallStaticInitializers -#endif - -@0f0: - /* Main ֐ւ̃Wvp}CNR[hX^bN̒ɃRs[ */ - ldr r1, =microcode_GotoMain - sub r2, sp, #40 - mov r3, sp -@0f1: cmp r2, r3 - ldrlt r0, [r1], #4 - strlt r0, [r2], #4 - blt @0f1 - - /* }CNR[hoR Main ֐փWv */ - ldr r0, =SDK_STATIC_START - bic r0, r0, #0x00000003 - ldr r1, =SDK_STATIC_BSS_END - sub r1, r1, r0 - add r1, r1, #3 - bic r1, r1, #0x00000003 - bic r1, r1, #0xff000000 - mov r2, #BOOT_SYNC_PHASE_4 - mov r2, r2, LSL #24 - orr r1, r1, r2 - ldr r2, =HW_BOOT_SYNC_PHASE - ldr r3, =TwlSpMain - ldr lr, =HW_RESET_VECTOR - sub r12, sp, #40 - bx r12 - /* never return */ -} - -/*---------------------------------------------------------------------------* - Name: _start_AutoloadDoneCallback - Description: I[g[hR[obNB - Arguments: argv - I[g[hp[^ێĂzB - argv[0] = SDK_AUTOLOAD_LIST - argv[1] = SDK_AUTOLOAD_LIST_END - argv[2] = SDK_AUTOLOAD_START - argv[3] = SDK_STATIC_BSS_START - argv[4] = SDK_STATIC_BSS_END - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start_AutoloadDoneCallback(void* argv[]) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CheckSysConfig - Description: SCFG ֘A I/O WX^̓emFB - A7-SCFG ubNANZXLȏꍇɂ́A[_[sݒ菈 - sŃANZX𖳌B - ARM7 p WRAM Ƀ[_[WJĂ I/O WX^m - FŃC̋L̈ɃRs[B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CheckSysConfig(void) -{ - /* A7-SCFG ̃ANZX”۔ */ - ldr r1, =REG_EXT_ADDR - ldr r0, [r1] - ldr r2, =HW_PRV_WRAM_SYSRV - tst r0, #REG_SCFG_EXT_CFG_MASK - beq @invalid - - /* NbNAJTAGWRAMɓWJ */ -/* ldr r3, =REG_JTAG_ADDR // SCFG-JTAG - ldrh r1, [r3] - and r0, r1, #(REG_SCFG_JTAG_CPUJE_MASK | REG_SCFG_JTAG_ARM7SEL_MASK) - and r3, r1, #REG_SCFG_JTAG_DSPJE_MASK - orr r0, r0, r3, LSR #(REG_SCFG_JTAG_DSPJE_SHIFT - HWi_WSYS09_JTAG_DSPJE_SHIFT) - - ldr r3, =REG_CLK_ADDR - ldrh r1, [r3] - and r3, r1, #(REG_SCFG_CLK_AESHCLK_MASK | REG_SCFG_CLK_SD2HCLK_MASK | REG_SCFG_CLK_SD1HCLK_MASK) - orr r0, r0, r3, LSL #(HWi_WSYS09_CLK_SD1HCLK_SHIFT - REG_SCFG_CLK_SD1HCLK_SHIFT) - and r3, r1, #(REG_SCFG_CLK_SNDMCLK_MASK | REG_SCFG_CLK_WRAMHCLK_MASK) - orr r0, r0, r3, LSR #(REG_SCFG_CLK_WRAMHCLK_SHIFT - HWi_WSYS09_CLK_WRAMHCLK_SHIFT) - - strb r0, [r2, #HWi_WSYS09_WRAMOFFSET] -*/ - - /* A7-SCFG ubNւ̃ANZX𖳌 */ -// ldr r1, =REG_EXT_ADDR -// ldr r0, [r1] -// bic r0, r0, #REG_SCFG_EXT_CFG_MASK -// str r0, [r1] - -@invalid: - /* ROM ݒANITRO ݒemF */ - ldrb r0, [r2, #HWi_WSYS08_WRAMOFFSET] - and r0, r0, #(HWi_WSYS08_ROM_ARM7RSEL_MASK | HWi_WSYS08_ROM_ARM9RSEL_MASK | HWi_WSYS08_ROM_ARM9SEC_MASK) - cmp r0, #HWi_WSYS08_ROM_ARM9SEC_MASK - blne INITi_Stop - - /* SCFG WX^ݒL̈ɃRs[ */ - ldr r2, =HW_PRV_WRAM_SYSRV - ldr r3, =HW_SYS_CONF_BUF - ldr r0, [r2, #HWi_WSYS04_WRAMOFFSET] - str r0, [r3, #HWi_WSYS04_OFFSET] - ldrh r0, [r2, #HWi_WSYS08_WRAMOFFSET] - strh r0, [r3, #HWi_WSYS08_OFFSET] - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_DetectMainMemorySize - Description: CTCY𒲍B - ʂ (u16*)HW_MMEMCHECER_SUB Ɋi[B - i[l [OS_CONSOLE_SIZE_16MB|OS_CONSOLE_SIZE_32B] - NOTE: vbgtH[ NITRO ̏ꍇ͍lĂȂB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -#define OSi_IMAGE_DIFFERENCE2 0xb000000 -#define OSi_DETECT_NITRO_MASK (REG_SND_SMX_CNT_E_MASK | REG_SND_SMX_CNT_FSEL_MASK) -#define OSi_DETECT_NITRO_VAL (REG_SND_SMX_CNT_E_MASK) - -#define OSi_CHECKNUM1 0x55 -#define OSi_CHECKNUM2 0xaa -#define OSi_100usWAIT 3352 // 100us = 3351.4cycles(33.514MHz) - -static asm void -INITi_DetectMainMemorySize(void) -{ - ldr r2, =HW_MMEMCHECKER_SUB - add r3, r2, #OSi_IMAGE_DIFFERENCE2 - mov r0, #OS_CONSOLE_SIZE_16MB - - /* OSi_CHECKNUM1 (0x55) ݃eXg */ - mov r1, #OSi_CHECKNUM1 - strb r1, [r3] - - ldr r2, =OSi_100usWAIT -@1 subs r2, r2, #4 - bcs @1 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM1 - bne @check_smix - - /* OSi_CHECKNUM2 (0xaa) ݃eXg */ - mov r1, #OSi_CHECKNUM2 - strb r1, [r3] - - ldr r2, =OSi_100usWAIT -@2 subs r2, r2, #4 - bcs @2 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM2 - moveq r0, #OS_CONSOLE_SIZE_32MB - -@check_smix: - /* SMIX WX^𒲍 */ - ldr r3, =REG_SMX_CNT_ADDR - ldrh r1, [r3] - and r1, r1, #OSi_DETECT_NITRO_MASK - cmp r1, #OSi_DETECT_NITRO_VAL - orreq r0, r0, #OS_CHIPTYPE_SMX_MASK - - /* ʂi[ */ - ldr r2, =HW_MMEMCHECKER_SUB - strb r0, [r2] - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Stop - Description: vO~BARM7 p WRAM Halt JԂ[v - ֐Rs[ARs[֐sB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_Stop(void) -{ - ldr r1, =microcode_Stop - ldr r2, =HW_PRV_WRAM - add r3, r2, #8 // sizeof(microcode_Stop) -@copy_loop: - ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @copy_loop - -@stop_loop: - ldr r0, =HW_PRV_WRAM - mov lr, pc - bx r0 - b @stop_loop - /* never return */ -} - -/*---------------------------------------------------------------------------* - Name: INITi_DoAutoload - Description: NɉāAeI[g[hubŇŒf[^̓WJ - yѕϐ 0 NAsB - NITRO ݊I[g[hZOg݂͑ATWL pZOg - ݂݂̂ƂOB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ - -static asm void -INITi_DoAutoload(void) -{ - stmfd sp!, {lr} - - /* I[g[h{ */ -@000: - ldr r0, =_start_LtdModuleParams - ldr r12, [r0] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_LTDAUTOLOAD_START -@001: - cmp r12, r3 - bge @010 - /* ŒZNV */ - ldr r0, [r12], #4 // r0 = start address of destination range of fixed section - ldr r2, [r12], #4 // r2 = size of fixed section - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} // r0 = start address of destination range of bss section - mov r1, #0 // r1 = clear value for bss section - ldr r2, [r12], #4 // r2 = sizeo of bss section - bl INITi_Fill32 - ldmfd sp!, {r1} - b @001 - - /* I[g[hXgEI[g[hobt@NA */ -@010: - ldr r1, =_start_LtdModuleParams - ldr r12, [r1] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r1, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r0, [r1, #8] // r0 = SDK_LTDAUTOLOAD_START -@011: - cmp r12, r3 - bge @0f0 - mov r1, #0 // r1 = clear value - str r1, [r12], #4 - ldr r2, [r12] // r2 = size of fixed section - str r1, [r12], #4 - str r1, [r12], #4 - str r1, [r12], #4 - bl INITi_Fill32 - b @011 - -@0f0: - /* I[g[hR[obNĂяo */ - ldr r0, =_start_ModuleParams - ldr r1, =_start_LtdModuleParams - ldmfd sp!, {lr} - b _start_AutoloadDoneCallback -} - -#ifndef SDK_NOINIT - -//static asm void -/*---------------------------------------------------------------------------* - Name: INITi_ShelterStaticInitializer - Description: eI[g[hZOg static initializer ւ̃|C^ - e[u IRQ X^bN̍ŏ㕔ɑޔB - Arguments: ptr - ZOg̃|C^e[uւ̃|C^B - e[u NULL ŏI[ĂKvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterStaticInitializer(u32* ptr) -{ - /* mF */ - cmp r0, #0 - bxeq lr - - /* ޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 -@001: - /* ޔꏊ擪󂫏ꏊ𒲍 */ - ldr r2, [r1] - cmp r2, #0 - addne r1, r1, #4 - bne @001 -@002: - /* 󂫏ꏊɃe[uRs[ */ - ldr r2, [r0], #4 - str r2, [r1], #4 - cmp r2, #0 - bne @002 - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CallStaticInitializers - Description: eI[g[hZOg static initializer ĂяoB - I[g[hɂ IRQ X^bN̍ŏ㕔ɑޔĂ - ֐|C^e[u‚ŒĂяoB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CallStaticInitializers(void) -{ - stmdb sp!, {lr} - - /* e[uޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 -@001: - /* e[uɊǗĂ|C^‚ŒĂяo */ - ldr r0, [r1] - cmp r0, #0 - beq @002 - stmfd sp!, {r1} - mov lr, pc - bx r0 - ldmfd sp!, {r1} - /* UĂяo|C^̓[NA (IRQX^bNԎ؂肵Ă) */ - mov r0, #0 - str r0, [r1], #4 - b @001 -@002: - ldmia sp!, {lr} - bx lr -} -#endif - -/*---------------------------------------------------------------------------* - Name: INITi_Copy32 - Description: 32 bit PʂŃRs[sBX^bN 36 oCg邪A - WX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - Rs[ւ̃|C^ ( 4 oCgAC )B - r1 - Rs[ւ̃|C^ ( 4 oCgAC )B - r2 - Rs[钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - Rs[̃Rs[ւ̃|C^ ( r0 + r2 )B - r1 - Rs[̃Rs[ւ̃|C^ ( r1 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Copy32(void* dst, void* src, u32 size) -{ - stmfd sp!, {r3-r11} - - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - ldmia r1!, {r4-r11} - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - ldmneia r1!, {r4-r7} - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - ldmneia r1!, {r4-r5} - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - ldmneia r1!, {r4} - stmneia r0!, {r4} - - ldmfd sp!, {r3-r11} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Fill32 - Description: 32 bit PʂŃobt@ewf[^Ŗ߂BX^bN 36 - oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - obt@ւ̃|C^ ( 4 oCgAC )B - r1 - obt@𖄂߂e 32 bit lŎwB - r2 - obt@𖄂߂钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - ̃obt@ւ̃|C^ ( r0 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Fill32(void* dst, u32 value, u32 size) -{ - stmfd sp!, {r3-r11} - - mov r4, r1 - mov r5, r1 - mov r6, r1 - mov r7, r1 - mov r8, r1 - mov r9, r1 - mov r10, r1 - mov r11, r1 - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - stmneia r0!, {r4} - - ldmfd sp!, {r3-r11} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: NitroSpStartUp - Description: Hook for user start up. - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL void -NitroSpStartUp(void) -{ -} - -#include diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/main.c b/build/tests/DisplaySystemInformation/ARM7_armadillo/src/main.c deleted file mode 100644 index 219de8c5..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/main.c +++ /dev/null @@ -1,632 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" - -#include "address.h" - - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -/* eXbhDx */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_WPA 10 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* ROM o^GÅgR[h */ -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/* gp DMA ԍ */ -#define DMA_NO_FATFS FATFS_DMA_4 // = 0 -#define DMA_NO_NWM NWMSP_DMA_7 - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(void); -static void InitializeFatfs(void); -static void InitializeNwm(OSHeapHandle hh); -static void DummyThread(void* arg); - -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); -#endif -static void VBlankIntr(void); - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void -TwlSpMain(void) -{ - OSHeapHandle heapHandle; - - // OSARM9ƓOSCFG̏Lɏo - // WX^Rs[ - MI_CpuMove16( (void*)REG_ROM_ADDR, DISPINFO_SHARED_SCFG_REG_ADDR, DISPINFO_SHARED_SCFG_REG_SIZE ); - // WRAMɑޔĂ镪Rs[ - MI_CpuMove16( (void*)HWi_WSYS04_ADDR, DISPINFO_SHARED_SCFG_WRAM_ADDR, DISPINFO_SHARED_SCFG_WRAM_SIZE ); - - /* OS */ - OS_Init(); - PrintDebugInfo(); - - /* NVRAM 烆[U[ǂݏo */ - ReadUserInfo(); - - /* q[v̈ݒ */ - heapHandle = InitializeAllocateSystem(); - - /* {^̓T[` */ - (void)PAD_InitXYButton(); - - /* ݋ */ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - /* eCu */ - AES_Init(THREAD_PRIO_AES); // AES - SEA_Init(THREAD_PRIO_SEA); // SEA -// FS_Init(FS_DMA_NOT_USE); // FS for CARD -// FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD - InitializeFatfs(); // FAT-FS - InitializeNwm(heapHandle); // TWL - MCU_InitIrq(THREAD_PRIO_MCU); // }CR - CDC_InitLib(); // CODEC -// if (OSi_IsCodecTwlMode() == TRUE) -// { -// CAMERA_Init(); // J -// } - SND_Init(THREAD_PRIO_SND); // TEh - SNDEX_Init(THREAD_PRIO_SNDEX); // TEhg - RTC_Init(THREAD_PRIO_RTC); // RTC - WVR_Begin(heapHandle); // NITRO - SPI_Init(THREAD_PRIO_SPI); - - while (TRUE) - { - OS_Halt(); - - /* \tgEFAZbgv͊ĎȂ */ - /* AGB J[gbW̑}`FbN͍sȂ */ - /* DS J[h̑}`FbN͍sȂ */ - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - OS_TPrintf("ARM7: This component is running on TWL.\n"); - OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle -InitializeAllocateSystem(void) -{ - OSHeapHandle hh; - void* subLo = (void*)OS_GetWramSubArenaLo(); - void* subHi = (void*)OS_GetWramSubArenaHi(); - void* privLo = (void*)OS_GetWramSubPrivArenaLo(); - void* privHi = (void*)OS_GetWramSubPrivArenaHi(); - - if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) - { - /* SUB A[i SUBPRIV A[iɋz */ - OS_SetWramSubArenaHi(subLo); - OS_SetWramSubPrivArenaLo(subLo); - privLo = subLo; - } - - /* A[i 0 NA */ - MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); - - /* q[v쐬 */ - privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); - if (hh < 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - - /* Jgq[vɐݒ */ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - /* q[vTCY̊mF */ - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if (heapSize <= 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - OS_TPrintf("ARM7: heap size [%d]\n", heapSize); - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuBFATFS֐ŃXbhx~ - ׁAx~삷_~[̃Xbh𗧂ĂB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - OSThread thread; - u32 stack[18]; - - /* _~[Xbh쐬 */ - OS_CreateThread(&thread, DummyThread, NULL, - (void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX); - OS_WakeupThreadDirect(&thread); - - /* FATFS */ - /* [TODO] DMA NOT_USE ̂܂܂ŗǂH */ - if(!FATFS_Init(DMA_NO_FATFS, FATFS_DMA_NOT_USE, THREAD_PRIO_FATFS)) - { - /* do nothing */ - } - - /* _~[Xbhj */ - OS_KillThread(&thread, NULL); -} - -/*---------------------------------------------------------------------------* - Name: InitializeNwm - Description: NWMCuB - Arguments: hh - p”\ȃq[ṽnhwB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeNwm(OSHeapHandle hh) -{ - NwmspInit nwmInit; - - /* [TODO] mۂĂq[v̈悪VꎮKvƂĂ郁ʈȏォ̃`FbNKv */ - - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - - nwmInit.dmaNo = DMA_NO_NWM; - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.drvHeap.handle = hh; - - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; - nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.wpaHeap.handle = hh; - - NWMSP_Init(&nwmInit); -} - -/*---------------------------------------------------------------------------* - Name: DummyThread - Description: FATFSCuACDCCuۂɗĂ_~[ - XbhB - Arguments: arg - gpȂB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -DummyThread(void* arg) -{ -#pragma unused(arg) - while (TRUE) - { - } -} - -#ifdef WM_PRECALC_ALLOWEDCHANNEL -extern u16 WMSP_GetAllowedChannel(u16 bitField); -#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } - -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -extern void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/overwriteRtc.c b/build/tests/DisplaySystemInformation/ARM7_armadillo/src/overwriteRtc.c deleted file mode 100644 index af04b9d0..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_armadillo/src/overwriteRtc.c +++ /dev/null @@ -1,67 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: overwriteRtc.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include - -extern BOOL RTC_IsAvailablePxiCommand(u16 command); - -/*---------------------------------------------------------------------------* - Name: RTC_IsAvailablePxiCommand - - Description: PXI R}hL RTC R}hł邩ǂB - - Arguments: command - R}hB - - Returns: BOOL - LȃR}hłꍇ TRUE ԂBł - ȃR}hłꍇɂ FALSE ԂB - *---------------------------------------------------------------------------*/ -BOOL -RTC_IsAvailablePxiCommand(u16 command) -{ - switch (command) - { - case RTC_PXI_COMMAND_RESET: - case RTC_PXI_COMMAND_SET_HOUR_FORMAT: - case RTC_PXI_COMMAND_READ_DATETIME: - case RTC_PXI_COMMAND_READ_DATE: - case RTC_PXI_COMMAND_READ_TIME: - case RTC_PXI_COMMAND_READ_PULSE: - case RTC_PXI_COMMAND_READ_ALARM1: - case RTC_PXI_COMMAND_READ_ALARM2: - case RTC_PXI_COMMAND_READ_STATUS1: - case RTC_PXI_COMMAND_READ_STATUS2: - case RTC_PXI_COMMAND_READ_ADJUST: - case RTC_PXI_COMMAND_READ_FREE: - case RTC_PXI_COMMAND_WRITE_DATETIME: - case RTC_PXI_COMMAND_WRITE_DATE: - case RTC_PXI_COMMAND_WRITE_TIME: - case RTC_PXI_COMMAND_WRITE_PULSE: - case RTC_PXI_COMMAND_WRITE_ALARM1: - case RTC_PXI_COMMAND_WRITE_ALARM2: - case RTC_PXI_COMMAND_WRITE_STATUS1: - case RTC_PXI_COMMAND_WRITE_STATUS2: - case RTC_PXI_COMMAND_WRITE_ADJUST: - case RTC_PXI_COMMAND_WRITE_FREE: - return TRUE; - } - return FALSE; -} - diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/Makefile b/build/tests/DisplaySystemInformation/ARM7_racoon/Makefile deleted file mode 100644 index bc239513..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/Makefile +++ /dev/null @@ -1,82 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -TWL_NO_STD_PCHDR = True -TARGET_CODEGEN ?= ALL - -#---------------------------------------------------------------------------- - -SRCDIR += ./src - -SRCS = main.c initScfg.c - -TARGET_NAME = racoon - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = $(TARGET_NAME).lsf -LCFILE_TEMPLATE = $(TARGET_NAME).lcf.template -LDRES_TEMPLATE = $(TARGET_NAME).response.template - -CRT0_O = crt0.LTD.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -ifeq ($(TWL_PLATFORM),BB) -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037e0000' -else -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' -endif - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - - -#-------------------------------- -# install target -#-------------------------------- -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include\ - $(DISP_INFO)/common/include -#LLIBRARIES += libwl_sp.TWL.LTD.a libsdio_hcd_twl$(TWL_LIBSUFFIX).a libsdio_busdriver$(TWL_LIBSUFFIX).a libsdio_lib$(TWL_LIBSUFFIX).a libARM7athdrv$(TWL_LIBSUFFIX).a -LLIBRARIES += libwl_sp.TWL.LTD.a -#LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ -# libcdc_sp$(TWL_LIBSUFFIX).a \ -# libtpex_sp$(TWL_LIBSUFFIX).a \ -# libmicex_sp$(TWL_LIBSUFFIX).a \ -# libsdio_hcd_twl$(TWL_LIBSUFFIX).a \ -# libsdio_busdriver$(TWL_LIBSUFFIX).a \ -# libsdio_lib$(TWL_LIBSUFFIX).a \ -# librompatch_sp$(TWL_LIBSUFFIX).a \ -# libARM7athdrv$(TWL_LIBSUFFIX).a - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template deleted file mode 100644 index 90b672ea..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template +++ /dev/null @@ -1,935 +0,0 @@ -#--------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: racoon.lcf.template -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- -MEMORY -{ - (RWX) : ORIGIN = , LENGTH = 0x0 > - - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWXO): ORIGIN = , LENGTH = 0x0 > - - - check.WORKRAM (RWX) : ORIGIN = 0x037c0000, LENGTH = 0x50000 > workram.check - - binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWXO): ORIGIN = , LENGTH = 0x0 > - - - check.LTDMAIN (RWX) : ORIGIN = 0x02f88000, LENGTH = 0x74000 > ltdmain.check - check.RSVWRAM (RWX) : ORIGIN = 0x03040000, LENGTH = 0x08000 > rsvwram.check -} - -KEEP_SECTION -{ - .sinit -} - -SECTIONS -{ - ############################ STATIC ################################# - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_STATIC_START =.; - SDK_STATIC_TEXT_START =.; - #:::::::::: text/rodata - OBJECT(_start,*) - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_STATIC_SINIT_END =.; - #:::::::::: text/rodata - SDK_STATIC_TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(4); - SDK_STATIC_DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - #:::::::::: data - SDK_STATIC_DATA_END =.; - . = ALIGN(4); - SDK_STATIC_END =.; - - SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; - SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; - SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; - __sinit__ = SDK_STATIC_SINIT_START; # for static initializer - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_STATIC_BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(4); - SDK_STATIC_BSS_END = .; - - SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; - - } >> - - - ############################ AUTOLOADS ############################## - SDK_AUTOLOAD.WRAM.START = 0x037c0000; - SDK_AUTOLOAD.WRAM.END = SDK_AUTOLOAD.WRAM.START; - SDK_AUTOLOAD.WRAM.BSS_END = SDK_AUTOLOAD.WRAM.START; - SDK_AUTOLOAD.WRAM.SIZE = 0; - SDK_AUTOLOAD.WRAM.BSS_SIZE = 0; - SDK_AUTOLOAD_START = SDK_STATIC_END; - SDK_AUTOLOAD_SIZE = 0; - SDK_AUTOLOAD_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_AUTOLOAD__ID =; - SDK_AUTOLOAD..ID =; - SDK_AUTOLOAD..START =.; - SDK_AUTOLOAD..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - . = ALIGN(4); - SDK_STATIC_ETABLE_START =.; - __exception_table_start__ =.; - EXCEPTION - __exception_table_end__ =.; - SDK_STATIC_ETABLE_END =.; - - - - - - - - - - - - - - . = ALIGN(4); - SDK_AUTOLOAD..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_AUTOLOAD..SINIT_END =.; - #:::::::::: text/rodata - SDK_AUTOLOAD..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE BLOCK - # - . = ALIGN(4); - SDK_AUTOLOAD..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: data - SDK_AUTOLOAD..DATA_END =.; - . = ALIGN(4); - SDK_AUTOLOAD..END =.; - - SDK_AUTOLOAD..TEXT_SIZE = SDK_AUTOLOAD..TEXT_END - SDK_AUTOLOAD..TEXT_START; - SDK_AUTOLOAD..DATA_SIZE = SDK_AUTOLOAD..DATA_END - SDK_AUTOLOAD..DATA_START; - SDK_AUTOLOAD..SIZE = SDK_AUTOLOAD..END - SDK_AUTOLOAD..START; - SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_AUTOLOAD..BSS_START = .; - #:::::::::: bss - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(4); - SDK_AUTOLOAD..BSS_END = .; - - SDK_AUTOLOAD..BSS_SIZE = SDK_AUTOLOAD..BSS_END - SDK_AUTOLOAD..BSS_START; - - } >> - - - - SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START; - SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END; - SDK_MOUNT_INFO_TABLE = SDK_AUTOLOAD.WRAM.BSS_END; - SDK_AUTOLOAD_WRAM_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400; - SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE; - SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE; - - ############################ AUTOLOAD_INFO ########################## - .binary.AUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_AUTOLOAD..SIZE; - WRITEW SDK_AUTOLOAD..SINIT_START; - WRITEW SDK_AUTOLOAD..BSS_SIZE; - - - } > binary.AUTOLOAD_INFO - - SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; - SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); - SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); - - ############################ STATIC_FOOTER ########################## - .binary.STATIC_FOOTER: - { - WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE - WRITEW _start_ModuleParams - ADDR(.); - WRITEW 0; # NO DIGEST - WRITEW _start_LtdModuleParams - ADDR(.); - } > binary.STATIC_FOOTER - - ############################ OVERLAYS ############################### - SDK_OVERLAY_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_OVERLAY__ID =; ### SEGMENT OVERLAY ID - SDK_OVERLAY..ID =; - SDK_OVERLAY..START =.; - SDK_OVERLAY..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_OVERLAY..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_OVERLAY..SINIT_END =.; - #:::::::::: text/rodata - SDK_OVERLAY..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(4); - SDK_OVERLAY..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - #:::::::::: data - SDK_OVERLAY..DATA_END =.; - . = ALIGN(4); - SDK_OVERLAY..END =.; - - SDK_OVERLAY..TEXT_SIZE = SDK_OVERLAY..TEXT_END - SDK_OVERLAY..TEXT_START; - SDK_OVERLAY..DATA_SIZE = SDK_OVERLAY..DATA_END - SDK_OVERLAY..DATA_START; - SDK_OVERLAY..SIZE = SDK_OVERLAY..END - SDK_OVERLAY..START; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_OVERLAY..BSS_START = .; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(4); - SDK_OVERLAY..BSS_END = .; - - SDK_OVERLAY..BSS_SIZE = SDK_OVERLAY..BSS_END - SDK_OVERLAY..BSS_START; - - } >> - - - - ############################ OVERLAYDEFS ############################ - .F: - { - ### module information - WRITEW ADDR(.); # load address - WRITEW _start; # entry address - WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module - WRITEW _start_AutoloadDoneCallback; # callback autoload done - - ### overlay filename - - WRITES (""); # Overlay - - - } > F - - ############################ OVERLAYTABLE ########################### - .F: - { - - WRITEW ; # overlay ID - WRITEW ADDR(.); # load address - WRITEW SDK_OVERLAY..SIZE; # size of module - WRITEW SDK_OVERLAY..BSS_SIZE; # size of bss - WRITEW SDK_OVERLAY..SINIT_START; # start address of static init - WRITEW SDK_OVERLAY..SINIT_END; # end address of static init - WRITEW ; # ROM file ID - WRITEW 0; # Reserved - - - } > F - - ############################ OTHERS ################################# - SDK_WRAM_ARENA_LO = SDK_AUTOLOAD_WRAM_BSS_END; - - SDK_IRQ_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE = ; # allocated in WRAM - SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; - - .check.WORKRAM: - { - . = . + SDK_AUTOLOAD_WRAM_BSS_END - SDK_AUTOLOAD.WRAM.START + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; - - } > check.WORKRAM - - ########################### LTDAUTOLOADS ############################ - SDK_LTDAUTOLOAD.LTDMAIN.START = 0x02f88000; - SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD.LTDMAIN.BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD.LTDMAIN.SIZE = 0; - SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE = 0; - SDK_LTDAUTOLOAD_TOP_START = 0x02e80000; - SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC ̈悪 4 bytes ̃_~[oCit@C̐擪ɓ # - SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; - SDK_LTDAUTOLOAD_SIZE = 0; - SDK_LTDAUTOLOAD_NUMBER = ; - - .binary.LTDAUTOLOAD_TOP: - { - WRITEW 0; - - } > binary.LTDAUTOLOAD_TOP - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - SDK_LTDAUTOLOAD__ID =; - SDK_LTDAUTOLOAD..ID =; - SDK_LTDAUTOLOAD..START =.; - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDAUTOLOAD..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_LTDAUTOLOAD..SINIT_END =.; - #:::::::::: text/rodata - SDK_LTDAUTOLOAD..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE BLOCK - # - . = ALIGN(4); - SDK_LTDAUTOLOAD..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: data - SDK_LTDAUTOLOAD..DATA_END =.; - . = ALIGN(4); - SDK_LTDAUTOLOAD..END =.; - - SDK_LTDAUTOLOAD..TEXT_SIZE = SDK_LTDAUTOLOAD..TEXT_END - SDK_LTDAUTOLOAD..TEXT_START; - SDK_LTDAUTOLOAD..DATA_SIZE = SDK_LTDAUTOLOAD..DATA_END - SDK_LTDAUTOLOAD..DATA_START; - SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDAUTOLOAD..BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(4); - SDK_LTDAUTOLOAD..BSS_END =.; - - SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; - - } >> - - - - SDK_LTDAUTOLOAD_LTDMAIN_START = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD_LTDMAIN_END = SDK_LTDAUTOLOAD.LTDMAIN.END; - SDK_LTDAUTOLOAD_LTDMAIN_BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END; - SDK_LTDAUTOLOAD_LTDMAIN_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.SIZE; - SDK_LTDAUTOLOAD_LTDMAIN_BSS_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE; - - ######################### LTDAUTOLOAD_INFO ########################## - .binary.LTDAUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_LTDAUTOLOAD..SIZE; - WRITEW SDK_LTDAUTOLOAD..SINIT_START; - WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; - - - } > binary.LTDAUTOLOAD_INFO - - SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; - SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); - - ########################### LTDOVERLAYS ############################# - SDK_LTDOVERLAY_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - SDK_LTDOVERLAY__ID =; - SDK_LTDOVERLAY..ID =; - SDK_LTDOVERLAY..START =.; - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDOVERLAY..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDOVERLAY..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_LTDOVERLAY..SINIT_END =.; - #:::::::::: text/rodata - SDK_LTDOVERLAY..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(4); - SDK_LTDOVERLAY..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - #:::::::::: data - SDK_LTDOVERLAY..DATA_END =.; - . = ALIGN(4); - SDK_LTDOVERLAY..END =.; - - SDK_LTDOVERLAY..TEXT_SIZE = SDK_LTDOVERLAY..TEXT_END - SDK_LTDOVERLAY..TEXT_START; - SDK_LTDOVERLAY..DATA_SIZE = SDK_LTDOVERLAY..DATA_END - SDK_LTDOVERLAY..DATA_START; - SDK_LTDOVERLAY..SIZE = SDK_LTDOVERLAY..END - SDK_LTDOVERLAY..START; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(4); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDOVERLAY..BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(4); - SDK_LTDOVERLAY..BSS_END =.; - - SDK_LTDOVERLAY..BSS_SIZE = SDK_LTDOVERLAY..BSS_END - SDK_LTDOVERLAY..BSS_START; - - } >> - - - - ########################## LTDOVERLAYDEFS ########################### - .L: - { - ### TWL limited extended static module information - WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address - WRITEW SDK_MOUNT_INFO_TABLE; # address of the FS mount information table - WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module - WRITEW 0; # padding - - ### TWL limited overlay filename - - WRITES (""); - - - } > L - - ######################### LTDOVERLAYTABLE ########################### - .L: - { - - WRITES # overlay ID - WRITEW ADDR(.); # load address - WRITEW SDK_LTDOVERLAY..SIZE; # size of module - WRITEW SDK_LTDOVERLAY..BSS_SIZE; # size of bss - WRITEW SDK_LTDOVERLAY..SINIT_START; # start address of static init - WRITEW SDK_LTDOVERLAY..SINIT_END; # end address of static init - WRITEW # ROM file ID - WRITEW 0; # Reserved - - - } > L - - ############################ OTHERS ################################# - SDK_SUBPRIV_ARENA_LO = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END; - .check.LTDMAIN: - { - . = SDK_SUBPRIV_ARENA_LO; - - } > check.LTDMAIN - - .check.RSVWRAM: - { - . = SDK_LTDAUTOLOAD.RSVWRAM.BSS_END; - - } > check.RSVWRAM - -} diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf deleted file mode 100644 index 4a239534..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf +++ /dev/null @@ -1,231 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: racoon.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - Library $(CRT0_O) - Object $(OBJDIR)/initScfg.o - StackSize 1024 1024 -} - -#-------- -Autoload WRAM -{ - Address $(ADDRESS_LTDWRAM) - - Library libsubpsyscall.a \ - libsyscall_sp.twl.a \ - $(CW_LIBS) \ - libos_sp$(LIBSUFFIX).a \ - libmi_sp$(LIBSUFFIX).a \ - libpad_sp$(LIBSUFFIX).a \ - libpxi_sp$(LIBSUFFIX).a \ - libstd_sp$(LIBSUFFIX).a \ - libexi_sp$(LIBSUFFIX).a \ - libsnd_sp$(LIBSUFFIX).a \ - libspi_sp$(LIBSUFFIX).a \ - libpm_sp$(LIBSUFFIX).a \ - libmath_sp$(LIBSUFFIX).a \ - libscfg_sp$(LIBSUFFIX).a \ - libtp_sp$(LIBSUFFIX).a \ - libmic_sp$(LIBSUFFIX).a \ - libfs_sp$(LIBSUFFIX).a \ - libcard_sp$(LIBSUFFIX).a \ - libi2c_sp$(LIBSUFFIX).a \ - libcamera_sp$(LIBSUFFIX).a \ - libcdc_sp$(LIBSUFFIX).a \ - libsndex_sp$(LIBSUFFIX).a \ - libtpex_sp$(LIBSUFFIX).a \ - libmicex_sp$(LIBSUFFIX).a \ - libmcu_sp$(LIBSUFFIX).a \ - - Library libsdio_sp$(LIBSUFFIX).a - - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - - - Object * (.etable) - Object * (.wram) - Object * (.ltdwram) - Object $(OBJDIR)/main.o - - # caches in fatfs library, that should be on WRAM. - # 2007/12/11 OBJECT() ɂ .bss V{̃N܂Ȃ̂ŁA - # ϐ`ӏ pragma .ltdwram ZNVɊ܂܂悤Ɏb΍􂵂܂B -# Object OBJECT( FATFSi___mem_drives_structures , libfatfs_sp$(LIBSUFFIX).a) (.bss) - - ##### - # Sub-routines in WL library , that should be on WRAM. - # in TaskMan.o - Object OBJECT( MainTaskRoutine , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AddTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DeleteTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( LowestIdleTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ExecuteMessage , libwl_sp$(LIBSUFFIX).a ) (.text) - # in BufMan.o - Object OBJECT( NewHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DeleteHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AllocateHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ReleaseHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( MoveHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AddHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( GetHeapBufNextAdrs , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlCmdIf.o - Object OBJECT( RequestCmdTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SendMessageToWmDirect , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlNic.o - Object OBJECT( WStart , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WStop , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WSetStaState , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlIntr.o - Object OBJECT( WlIntr , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrPreTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrActEnd , libwl_sp$(LIBSUFFIX).a ) (.text) -# Object OBJECT( WlIntrAckCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxErr , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxCntup , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrMpEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrStartTx , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrStartRx , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SetParentTbttTxq , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( MacBugTxMp , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AdjustRingPointer , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( CheckKeyTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlIntrTask.o - Object OBJECT( WlIntrTxBeaconTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrMpEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SetParentTbttTxqTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( TakeoutRxFrame , libwl_sp$(LIBSUFFIX).a ) (.text) - # in TxCtrl.o - Object OBJECT( InitTxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) - # in RxCtrl.o - Object OBJECT( InitRxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WaitLoop.o - Object OBJECT( WaitLoop_Rxpe , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_Waitus , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_ClrAid , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_BbpAccess , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_RfAccess , libwl_sp$(LIBSUFFIX).a ) (.text) - - -} - -#-------- -Ltdautoload RSVWRAM -{ - Address 0x03040000 - Object * (.rsvwram) - Library libathdrv_sp$(LIBSUFFIX).a (.bss) - Library libathdrv_sp$(LIBSUFFIX).a (.data) - - ##### - # Sub-routines in TWL WIRELESS Driver , that should be on WRAM. - Object OBJECT( HTCSendPktCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCIssueSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCTrySend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCSendPkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCProcessCreditRpt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevRecvPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCProcessRecvHeader, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCRecvCompleteHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCRecvMessagePendingHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCAddReceivePkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AR6KFreeIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AR6KAllocIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevGetEventAsyncHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevCheckPendingRecvMsgsAsync, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevDsrHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HIFReadWrite, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( hifRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( hifIRQHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HIFAckInterrupt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_credit_distribute, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_alloc, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_alloc_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_put, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_push, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_pull, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_free, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_to_data, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_to_len, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_headroom, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_drv_return_netbuf, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ath_queue_remove_from_head, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ath_queue_insert_tail, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_alloc_cookie, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_driver_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_tx_complete, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_dix_2_dot3, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_data_hdr_add, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_data_hdr_remove, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_ibss_map_epid, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DL_ListInsertTail, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DL_ListRemove, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_control_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_cmd_send, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_control_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_implicit_create_pstream, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCAllocControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCFreeControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( BMILZData, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( bmiBufferSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( BMIWriteMemory, libathdrv_sp$(LIBSUFFIX).a ) (.text) - - - # FATFS core symbols - Object OBJECT(FATFSi_lfi2text, libfatfs_sp$(LIBSUFFIX).a) (.text) # 360 BYTEs - Object OBJECT(FATFSi_pc_findin, libfatfs_sp$(LIBSUFFIX).a) (.text) # 904 BYTEs - Object OBJECT(FATFSi_pc_patcmp_vfat, libfatfs_sp$(LIBSUFFIX).a) (.text) # 436 BYTEs - Object OBJECT(FATFSi_pc_ascii_mfile, libfatfs_sp$(LIBSUFFIX).a) (.text) # 160 BYTEs - Object OBJECT(FATFSi_map_ascii_to_unicode, libfatfs_sp$(LIBSUFFIX).a) (.text) # 48 BYTEs - Object OBJECT(SDCARD_Intr_Thread, libfatfs_sp$(LIBSUFFIX).a) (.text) # 520 BYTEs - Object OBJECT(FATFSi_unicode_cmp_to_ascii_char, libfatfs_sp$(LIBSUFFIX).a) (.text) # 40 BYTEs - Object OBJECT(FATFSi_pc_read_blk, libfatfs_sp$(LIBSUFFIX).a) (.text) # 352 BYTEs -} - -#-------- -Ltdautoload LTDMAIN -{ - Address 0x02f88000 - - Object * (.ltdmain) - Library libwm_sp$(LIBSUFFIX).a \ - libnwm_sp$(LIBSUFFIX).a \ - libwvr_sp$(LIBSUFFIX).a \ - libwl_sp$(LIBSUFFIX).a - - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a - - Library libfatfs_sp$(LIBSUFFIX).a \ - libaes_sp$(LIBSUFFIX).a - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) -} diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template deleted file mode 100644 index 88b18081..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template +++ /dev/null @@ -1,40 +0,0 @@ - - - - - -l - - - - - - - -l - - - - -og ,0 -ol - - - - - -l - - - - - - - - -l - - - - -og ,0 -ol - - - - - -l - - diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c b/build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c deleted file mode 100644 index 611fb1b1..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c +++ /dev/null @@ -1,108 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: viewSystemInfo.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ - *---------------------------------------------------------------------------*/ - -#include -#include - -extern void INIT_InitializeScfg(void); - -#include -/*---------------------------------------------------------------------------* - Name: INIT_InitializeScfg - - Description: [_[s SCFG ubNւ̐ݒ菈sׂ̊֐B - crt0 ̎V{㏑B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -asm void -INIT_InitializeScfg(void) -{ - // SCFG enable? - ldr r2, =REG_EXT_ADDR - ldr r0, [r2] - tst r0, #REG_SCFG_EXT_CFG_MASK - beq @end - - /* NITRO ݊̑M@\𓮍 */ - ldr r1, =REG_WL_ADDR - ldrh r0, [r1] - orr r0, r0, #REG_SCFG_WL_OFFB_MASK - strh r0, [r1] - - /* VKTEhubNւ̃NbN */ - ldr r1, =REG_CLK_ADDR - ldrh r0, [r1] - orr r0, r0, #REG_SCFG_CLK_SNDMCLK_MASK - strh r0, [r1] - - /* ARM7 DMA ɂ͐V DMA H̗p */ - ldr r1, =REG_EXT_ADDR - ldr r0, [r1] - orr r0, r0, #REG_SCFG_EXT_DMAC_MASK - str r0, [r1] - - ldr r2, =HW_PRV_WRAM_SYSRV - //EXT(extentions) - ldr r3, =REG_EXT_ADDR - ldr r0, [r3] - str r0, [r2, #HWi_WSYS04_WRAMOFFSET] - //OPT(bonding option) - ldr r3, =REG_OP_ADDR - ldrb r0, [r3] - //A9ROM(ARM9 ROM) - ldr r3, =REG_A9ROM_ADDR - ldrb r1, [r3] - and r12,r1, #(REG_SCFG_A9ROM_RSEL_MASK | REG_SCFG_A9ROM_SEC_MASK) - orr r0, r0, r12, LSL #(HWi_WSYS08_ROM_ARM9RSEL_SHIFT - REG_SCFG_A9ROM_RSEL_SHIFT) - //A7ROM(ARM7 ROM) - ldr r3, =REG_A7ROM_ADDR - ldrb r1, [r3] - and r12,r1, #(REG_SCFG_A7ROM_RSEL_MASK | REG_SCFG_A7ROM_FUSE_MASK) - orr r0, r0, r12, LSL #(HWi_WSYS08_ROM_ARM7RSEL_SHIFT - REG_SCFG_A7ROM_RSEL_SHIFT) - //DS-WL(DS wireless) - ldr r3, =REG_WL_ADDR - ldrb r1, [r3] - and r12,r1, #REG_SCFG_WL_OFFB_MASK - orr r0, r0, r12, LSL #(HWi_WSYS08_WL_OFFB_SHIFT - REG_SCFG_WL_OFFB_SHIFT) - strb r0, [r2, #HWi_WSYS08_WRAMOFFSET] - //OPT(JTAG info) - ldr r3, =REG_JTAG_ADDR - ldrh r0, [r3] - and r12,r0, #REG_SCFG_JTAG_DSPJE_MASK - orr r0, r0, r12, LSR #(REG_SCFG_JTAG_DSPJE_SHIFT - HWi_WSYS09_JTAG_DSPJE_SHIFT) - //CLK(only wram clock) - ldr r3, =REG_CLK_ADDR - ldrh r1, [r3] - and r12,r1, #(REG_SCFG_CLK_AESHCLK_MASK | REG_SCFG_CLK_SD2HCLK_MASK | REG_SCFG_CLK_SD1HCLK_MASK) - orr r0, r0, r12, LSL #(HWi_WSYS09_CLK_SD1HCLK_SHIFT - REG_SCFG_CLK_SD1HCLK_SHIFT) - and r12,r1, #(REG_SCFG_CLK_SNDMCLK_MASK | REG_SCFG_CLK_WRAMHCLK_MASK) - orr r0, r0, r12, LSR #(REG_SCFG_CLK_WRAMHCLK_SHIFT - HWi_WSYS09_CLK_WRAMHCLK_SHIFT) - strb r0, [r2, #HWi_WSYS09_WRAMOFFSET] - - /* A7-SCFG ubNւ̃ANZX𖳌 */ -// ldr r1, =REG_EXT_ADDR -// ldr r0, [r1] -// bic r0, r0, #REG_SCFG_EXT_CFG_MASK -// str r0, [r1] - -@end: - bx lr -} -#include diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c b/build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c deleted file mode 100644 index ccfd1a6d..00000000 --- a/build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c +++ /dev/null @@ -1,992 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: main.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" -#include "address.h" - -#ifdef SDK_SEA -#include -#endif // ifdef SDK_SEA - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define WM_WL_HEAP_SIZE 0x2100 -#define ATH_DRV_HEAP_SIZE 0x5800 -#define WPA_HEAP_SIZE 0x1C00 - -#define MEM_TYPE_WRAM 0 -#define MEM_TYPE_MAIN 1 - -/* Priorities of each threads */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* [TODO] ȉ New WM ɈڍsقD܂? */ -#define NWM_DMANO NWMSP_DMA_7 -#define THREAD_PRIO_NWM_COMMMAND 9 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_NWM_WPA 10 - -// ROM o^GÅgR[h -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(u8 memType); -static OSHeapHandle InitializeAllocateSystemCore(u8 memType); -#ifdef SDK_TWLHYB -static OSHeapHandle InitializeAllocateSystemCoreEx(u8 memType); -#endif -static void DummyThread(void* arg); -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp); -#endif -static void VBlankIntr(void); -static void InitializeFatfs(void); -static void InitializeNwm(OSHeapHandle drvHeapHandle, OSHeapHandle wpaHeapHandle); -/*---------------------------------------------------------------------------* - OV{Q - *---------------------------------------------------------------------------*/ -#ifdef SDK_TWLHYB -extern void SDK_LTDAUTOLOAD_LTDWRAM_BSS_END(void); -extern void SDK_LTDAUTOLOAD_LTDMAIN_BSS_END(void); -#endif - - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void TwlSpMain(void) -{ - OSHeapHandle wramHeapHandle, mainHeapHandle; - - - // OSARM9ƓOSCFG̏Lɏo - // WX^Rs[ - MI_CpuMove16( (void*)REG_ROM_ADDR, DISPINFO_SHARED_SCFG_REG_ADDR, DISPINFO_SHARED_SCFG_REG_SIZE ); - // WRAMɑޔĂ镪Rs[ - MI_CpuMove16( (void*)HWi_WSYS04_ADDR, DISPINFO_SHARED_SCFG_WRAM_ADDR, DISPINFO_SHARED_SCFG_WRAM_SIZE ); - - // OS - OS_Init(); - PrintDebugInfo(); - - // NVRAM 烆[U[ǂݏo - ReadUserInfo(); - - // q[v̈ݒ - wramHeapHandle = InitializeAllocateSystem(MEM_TYPE_WRAM); - mainHeapHandle = InitializeAllocateSystem(MEM_TYPE_MAIN); - - // {^̓T[` - (void)PAD_InitXYButton(); - - // 荞݋ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - // t@CVXe - FS_Init(FS_DMA_NOT_USE); - FS_CreateReadServerThread(THREAD_PRIO_FS); - - if (OS_IsRunOnTwl() == TRUE) - { - InitializeFatfs(); // FATFS -#ifndef SDK_SEA // Ib菈uI - // NWM -#ifdef SDK_TWLLTD - InitializeNwm(mainHeapHandle, mainHeapHandle); // LIMITED [hł ̃q[v MAIN m -#else - InitializeNwm(wramHeapHandle, mainHeapHandle); // HYBRID [hł ̃q[v WRAM m -#endif -#endif // ifndef SDK_SEA - AES_Init(THREAD_PRIO_AES); // AES - -#ifdef SDK_SEA - SEA_Init(THREAD_PRIO_SEA); -#endif // ifdef SDK_SEA - MCU_InitIrq(THREAD_PRIO_MCU); // MCU - - CDC_InitLib(); // CODECCu - } - - if (OSi_IsCodecTwlMode() == TRUE) - { - // J - CAMERA_Init(); - /* CODEC TWL [hłȂƃVb^[Iɖ‚炷 - @\gpł܂Bׁ̈ACODEC TWL [h̏ꍇ - ɂ̂݃JCugp”\ȏԂɂ܂B */ - } - - // TEh - SND_Init(THREAD_PRIO_SND); - if (OS_IsRunOnTwl() == TRUE) - { - SNDEX_Init(THREAD_PRIO_SNDEX); - } - - // RTC - RTC_Init(THREAD_PRIO_RTC); - - // -#ifndef SDK_SEA // Ib菈uI - WVR_Begin(wramHeapHandle); -#endif // ifdef SDK_SEA - - // SPI - SPI_Init(THREAD_PRIO_SPI); - - - while (TRUE) - { - OS_Halt(); - - //---- check reset - if (OS_IsResetOccurred()) - { - //VIB_STOP - CTRDG_VibPulseEdgeUpdate(NULL); - - OS_ResetSystem(); - } - - //---- check pull out cartridge - CTRDG_CheckPullOut_Polling(); - -#ifndef SDK_SMALL_BUILD - //---- check pull out card - CARD_CheckPullOut_Polling(); -#endif - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - if(OS_IsRunOnTwl()) - { - OS_TPrintf("ARM7: This component is running on TWL.\n"); - } - else - { - OS_TPrintf("ARM7: This component is running on NITRO.\n"); - } -#ifdef SDK_SEA -#ifdef SDK_TWLLTD - OS_TPrintf("ARM7: This component is \"armadillo.TWL\"\n"); -#else /* ifdef SDK_TWLLTD */ -#error invalid parameter combination -#endif /* ifdef SDK_TWLLTD else */ -#else /* ifdef SDK_SEA */ -#ifdef SDK_TWLLTD - OS_TPrintf("ARM7: This component is \"racoon.TWL\"\n"); -#else /* ifdef SDK_TWLLTD */ -#ifdef SDK_WIRELESS_IN_VRAM - OS_TPrintf("ARM7: This component is \"ichneumon.TWL\"\n"); -#else /* ifdef SDK_WIRELESS_IN_VRAM */ - OS_TPrintf("ARM7: This component is \"mongoose.TWL\"\n"); -#endif /* ifdef SDK_WIRELESS_IN_VRAM else */ -#endif /* ifdef SDK_TWLLTD else */ -#endif /* ifdef SDK_SEA else */ -} - -#include -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuBFATFS֐ŃXbhx~ - ׁAx~삷_~[̃Xbh𗧂ĂB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - OSThread thread; - u32 stack[18]; - - // _~[Xbh쐬 - OS_CreateThread(&thread, DummyThread, NULL, - (void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX); - OS_WakeupThreadDirect(&thread); - - - // FATFSCȕ - if(!FATFS_Init( FATFS_DMA_4, FATFS_DMA_5, THREAD_PRIO_FATFS)) - { - // do nothing - } - - // _~[Xbhj - OS_KillThread(&thread, NULL); -} -#include - -#include -/*---------------------------------------------------------------------------* - Name: InitializeNwm - Description: NWMCuB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeNwm(OSHeapHandle drvHeapHandle, OSHeapHandle wpaHeapHandle) -{ - NwmspInit nwmInit; - - nwmInit.dmaNo = NWM_DMANO; - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - -#ifdef SDK_TWLLTD - nwmInit.drvHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ -#else - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; /* [TODO] */ -#endif - nwmInit.drvHeap.handle = drvHeapHandle; - - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; - nwmInit.wpaHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ - nwmInit.wpaHeap.handle = wpaHeapHandle; - - NWMSP_Init(&nwmInit); - -} -#include - -#include -/*---------------------------------------------------------------------------* - Name: DummyThread - Description: FATFSCuACDCCuۂɗĂ_~[ - XbhB - Arguments: arg - gpȂB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -DummyThread(void* arg) -{ -#pragma unused(arg) - while (TRUE) - { - } -} -#include - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle InitializeAllocateSystem(u8 memType) -{ - - OSHeapHandle hh; - -#ifdef SDK_TWLHYB - if( OS_IsRunOnTwl() == TRUE) - { - hh = InitializeAllocateSystemCoreEx(memType); /* Hybrid TWL œ삳 */ - } - else -#endif - { - hh = InitializeAllocateSystemCore(memType); /* Hybrid DS œ삳 or Limited */ - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystemCore - Description: ăVXeB - Hybrid DS œ삳ꍇALimited TWL œ삳ꍇɓ - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle InitializeAllocateSystemCore(u8 memType) -{ - OSHeapHandle hh; - - /* MAIN */ - if(memType == MEM_TYPE_MAIN) - { - { - void* lo = (void*)OS_GetSubPrivArenaLo(); - void* hi = (void*)OS_GetSubPrivArenaHi(); - - // A[i 0 NA - MI_CpuClear8(lo, (u32)hi - (u32)lo); - - // 蓖ď - lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1); - // A[iʃAhXݒ - OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo); - - // q[v쐬 - hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, lo, hi); - - if (hh < 0) - { - OS_Panic("ARM7: Failed to MAIN create heap.\n"); - } - } - // Jgq[vɐݒ - (void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh); - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to MAIN create heap.\n"); - } - - #ifdef SDK_TWLLTD - { - if ((ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE) > heapSize) - { - OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE); - } - } - #endif - OS_TPrintf("ARM7: MAIN heap size is %d\n", heapSize); - } - } - - /* WRAM */ - if( memType == MEM_TYPE_WRAM) - { - { - void* lo = (void*)OS_GetWramSubPrivArenaLo(); - void* hi = (void*)OS_GetWramSubPrivArenaHi(); - - // A[i 0 NA - MI_CpuClear8(lo, (u32)hi - (u32)lo); - - // 蓖ď - lo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, lo, hi, 1); - // A[iʃAhXݒ - OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, lo); - - // q[v쐬 - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, lo, hi); - - if (hh < 0) - { - OS_Panic("ARM7: Failed to WRAM create heap.\n"); - } - } - - // Jgq[vɐݒ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to MAIN create heap.\n"); - } - - if (WM_WL_HEAP_SIZE > heapSize) - { - OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WM_WL_HEAP_SIZE); - } - OS_TPrintf("ARM7: WRAM heap size is %d\n", heapSize); - } - } - return hh; -} - -#ifdef SDK_TWLHYB -#include -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystemCoreEx - Description: ăVXeB - Hybrid TWL œ삳ꍇɓ - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle InitializeAllocateSystemCoreEx(u8 memType) -{ - OSHeapHandle hh; - - if(memType == MEM_TYPE_MAIN) - { - { - void* basicLo = (void*)OS_GetSubPrivArenaLo(); - void* basicHi = (void*)OS_GetSubPrivArenaHi(); - void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDMAIN_BSS_END, 32); - void* extraHi = (void*)MATH_ROUNDDOWN(HW_MAIN_MEM_SUB, 32); - -#if SDK_DEBUG - // debug information - OS_TPrintf("ARM7: MAIN arena basicLo = %p\n", basicLo); - OS_TPrintf("ARM7: MAIN arena basicHi = %p\n", basicHi); - OS_TPrintf("ARM7: MAIN arena extraLo = %p\n", extraLo); - OS_TPrintf("ARM7: MAIN arena extraHi = %p\n", extraHi); -#endif - // A[i 0 NA - MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); - MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); - - // 蓖ď - if ((u32)basicLo < (u32)extraLo) - { - basicLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, basicLo, extraHi, 1); - // A[iʃAhXݒ - OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, basicLo); - } - else - { - extraLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, extraLo, basicHi, 1); - } - - // q[v쐬 - hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, basicLo, basicHi); - - if (hh < 0) - { - OS_Panic("ARM7: Failed to create MAIN heap.\n"); - } - - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to MAIN create heap.\n"); - } - - OS_TPrintf("ARM7: MAIN heap size is %d (before AddToHead)\n", heapSize); - } - - // q[vɊgubNlj - OS_AddToHeap(OS_ARENA_MAIN_SUBPRIV, hh, extraLo, extraHi); - } - // Jgq[vɐݒ - (void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh); - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to MAIN create heap.\n"); - } - - if ((WPA_HEAP_SIZE) > heapSize) - { - OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WPA_HEAP_SIZE); - } - OS_TPrintf("ARM7: MAIN heap size is %d\n", heapSize); - } - } - - if(memType == MEM_TYPE_WRAM) - { - { - void* basicLo = (void*)OS_GetWramSubPrivArenaLo(); - void* basicHi = (void*)OS_GetWramSubPrivArenaHi(); - void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDWRAM_BSS_END, 32); - void* extraHi = (void*)MATH_ROUNDDOWN(HW_WRAM_A_HYB_END, 32); - -#if SDK_DEBUG - // debug information - OS_TPrintf("ARM7: WRAM arena basicLo = %p\n", basicLo); - OS_TPrintf("ARM7: WRAM arena basicHi = %p\n", basicHi); - OS_TPrintf("ARM7: WRAM arena extraLo = %p\n", extraLo); - OS_TPrintf("ARM7: WRAM arena extraHi = %p\n", extraHi); -#endif - - // A[i 0 NA - MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); - MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); - - // 蓖ď - if ((u32)basicLo < (u32)extraLo) - { - basicLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, basicLo, extraHi, 1); - // A[iʃAhXݒ - OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, basicLo); - } - else - { - extraLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, extraLo, basicHi, 1); - } - - // q[v쐬 - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, basicLo, basicHi); - - if (hh < 0) - { - OS_Panic("ARM7: Failed to WRAM create heap.\n"); - } - - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to WRAM create heap.\n"); - } - - if (WM_WL_HEAP_SIZE > heapSize) - { - OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WM_WL_HEAP_SIZE); - } - OS_TPrintf("ARM7: WRAM heap size is %d (before AddToHeap)\n", heapSize); - } - - // q[vɊgubNlj - OS_AddToHeap(OS_ARENA_WRAM_SUBPRIV, hh, extraLo, extraHi); - } - - // Jgq[vɐݒ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - // q[vTCY̊mF - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if( heapSize <= 0) /* q[v̈̊mۂɎs */ - { - OS_Panic("ARM7: Failed to WRAM create heap.\n"); - } - - if (ATH_DRV_HEAP_SIZE + WM_WL_HEAP_SIZE > heapSize) - { - OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WM_WL_HEAP_SIZE + ATH_DRV_HEAP_SIZE ); - } - OS_TPrintf("ARM7: WRAM heap size is %d\n", heapSize); - } - } - - return hh; -} -#include -#endif - -#ifdef WM_PRECALC_ALLOWEDCHANNEL -extern u16 WMSP_GetAllowedChannel(u16 bitField); -#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } - -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile b/build/tests/DisplaySystemInformation/ARM9/Makefile deleted file mode 100644 index e9e4bbbd..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile +++ /dev/null @@ -1,44 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 Makefile.2 Makefile.3\ - Makefile.4 Makefile.5 Makefile.6 Makefile.7\ - Makefile.8 Makefile.9 Makefile.10 Makefile.11\ - Makefile.12 Makefile.13 Makefile.14 Makefile.15\ - Makefile.16 Makefile.17 -#SUBMAKES = Makefile.0 - - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -rb: - ruby makeMaking.rb - -do-build : - $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.0 b/build/tests/DisplaySystemInformation/ARM9/Makefile.0 deleted file mode 100644 index cb3eda39..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.0 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 0 -IS_SECURE_APP = FALSE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = TRUE -GAMECODE = 0B0A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.1 b/build/tests/DisplaySystemInformation/ARM9/Makefile.1 deleted file mode 100644 index 80bab1c8..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.1 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 1 -IS_SECURE_APP = FALSE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = FALSE -GAMECODE = 0B1A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.10 b/build/tests/DisplaySystemInformation/ARM9/Makefile.10 deleted file mode 100644 index 0711243c..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.10 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 10 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = TRUE -INVISIBLE_SCFG = TRUE -GAMECODE = 0B8A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.11 b/build/tests/DisplaySystemInformation/ARM9/Makefile.11 deleted file mode 100644 index 27d1ce33..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.11 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 11 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = TRUE -INVISIBLE_SCFG = FALSE -GAMECODE = 0B9A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.12 b/build/tests/DisplaySystemInformation/ARM9/Makefile.12 deleted file mode 100644 index b8fe42b3..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.12 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 12 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = FALSE -INVISIBLE_SCFG = TRUE -GAMECODE = 0BAA -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.13 b/build/tests/DisplaySystemInformation/ARM9/Makefile.13 deleted file mode 100644 index 93fd362c..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.13 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 13 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = FALSE -INVISIBLE_SCFG = FALSE -GAMECODE = 0BBA -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.14 b/build/tests/DisplaySystemInformation/ARM9/Makefile.14 deleted file mode 100644 index 2cdaeca5..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.14 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 14 -IS_SECURE_APP = TRUE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = TRUE -INVISIBLE_SCFG = TRUE -GAMECODE = 022A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.15 b/build/tests/DisplaySystemInformation/ARM9/Makefile.15 deleted file mode 100644 index 91ea73d3..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.15 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 15 -IS_SECURE_APP = TRUE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = TRUE -INVISIBLE_SCFG = FALSE -GAMECODE = 023A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.16 b/build/tests/DisplaySystemInformation/ARM9/Makefile.16 deleted file mode 100644 index 0c7889df..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.16 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 16 -IS_SECURE_APP = TRUE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = FALSE -INVISIBLE_SCFG = TRUE -GAMECODE = 024A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.17 b/build/tests/DisplaySystemInformation/ARM9/Makefile.17 deleted file mode 100644 index 80892409..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.17 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 17 -IS_SECURE_APP = TRUE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = FALSE -INVISIBLE_SCFG = FALSE -GAMECODE = 025A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.2 b/build/tests/DisplaySystemInformation/ARM9/Makefile.2 deleted file mode 100644 index e093bac7..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.2 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 2 -IS_SECURE_APP = FALSE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = TRUE -GAMECODE = 0B2A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.3 b/build/tests/DisplaySystemInformation/ARM9/Makefile.3 deleted file mode 100644 index 71dede94..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.3 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 3 -IS_SECURE_APP = FALSE -IS_NAND_APP = FALSE -NAND_ACCESS = FALSE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = FALSE -GAMECODE = 0B3A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.4 b/build/tests/DisplaySystemInformation/ARM9/Makefile.4 deleted file mode 100644 index fbc31554..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.4 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 4 -IS_SECURE_APP = FALSE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = TRUE -GAMECODE = 020A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.5 b/build/tests/DisplaySystemInformation/ARM9/Makefile.5 deleted file mode 100644 index e7c3a0ba..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.5 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 5 -IS_SECURE_APP = FALSE -IS_NAND_APP = TRUE -NAND_ACCESS = TRUE -AES_SLOT = DONTCARE -INVISIBLE_SCFG = FALSE -GAMECODE = 021A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.6 b/build/tests/DisplaySystemInformation/ARM9/Makefile.6 deleted file mode 100644 index 2d721c30..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.6 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 6 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = TRUE -INVISIBLE_SCFG = TRUE -GAMECODE = 0B4A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.7 b/build/tests/DisplaySystemInformation/ARM9/Makefile.7 deleted file mode 100644 index 1fc0debe..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.7 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 7 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = TRUE -INVISIBLE_SCFG = FALSE -GAMECODE = 0B5A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.8 b/build/tests/DisplaySystemInformation/ARM9/Makefile.8 deleted file mode 100644 index 5e6f23c9..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.8 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 8 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = FALSE -INVISIBLE_SCFG = TRUE -GAMECODE = 0B6A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile.9 b/build/tests/DisplaySystemInformation/ARM9/Makefile.9 deleted file mode 100644 index 96a07b8c..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile.9 +++ /dev/null @@ -1,143 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### -FILE_IDX = 9 -IS_SECURE_APP = TRUE -IS_NAND_APP = FALSE -NAND_ACCESS = TRUE -AES_SLOT = FALSE -INVISIBLE_SCFG = FALSE -GAMECODE = 0B7A -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/filemove.rb b/build/tests/DisplaySystemInformation/ARM9/filemove.rb deleted file mode 100755 index 6fb1af4c..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/filemove.rb +++ /dev/null @@ -1,23 +0,0 @@ -#! ruby -Ks -startDir = "/cygdrive/c/home/TWL_IPL/build/tests/DisplaySystemInformation/ARM9/bin/ARM9-TS.LTD.thumb/Rom" -dstDir = "/cygdrive/c/home/TWL_IPL/build/tests/DisplaySystemInformation/ARM9/bin/ARM9-TS.LTD.thumb/roms" - -Dir::chdir "./bin/ARM9-TS.LTD.thumb/Rom" - -dirList = Dir::entries "." -`mkdir #{dstDir}` - -for dir in dirList - - puts "===== #{dir} =====" - Dir::chdir "./#{dir}" - - Dir::glob("./*.{tad,srl}").each {|f| - puts "cp #{f} #{dstDir}/" - `cp #{f} #{dstDir}/` - } - - - - Dir::chdir startDir -end diff --git a/build/tests/DisplaySystemInformation/ARM9/main_normal.rsf b/build/tests/DisplaySystemInformation/ARM9/main_normal.rsf deleted file mode 100644 index 10ed7d54..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/main_normal.rsf +++ /dev/null @@ -1,250 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - - # - # TITLE NAME: Your product name within 12bytes - # - TitleName "DispInfo" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - RomHeaderTemplate $(ROM_HEADER_TEMPLATE) - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - #BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - BannerFile ../banner/$(DISPINFO_GAMECODE).bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess $(DISPINFO_SDACCESS) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess $(DISPINFO_NANDACCESS) - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - LockSCFG $(DISPINFO_LOCKSCFG) - -# AESSlottO̓m[}Avł͗płȂ - HwAESSlotA_SSLClientCert FALSE - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType $(DISPINFO_APPTYPE) - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media $(DISPINFO_MEDIA) - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - #DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure $(DISPINFO_SECURE) - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(DISPINFO_GAMECODE) - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile FALSE - -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR - -} diff --git a/build/tests/DisplaySystemInformation/ARM9/main_secure.rsf b/build/tests/DisplaySystemInformation/ARM9/main_secure.rsf deleted file mode 100644 index 3f2e6385..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/main_secure.rsf +++ /dev/null @@ -1,247 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - - # TITLE NAME: Your product name within 12bytes - # - TitleName "DispInfo" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - RomHeaderTemplate $(ROM_HEADER_TEMPLATE) - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile ../banner/$(DISPINFO_GAMECODE).bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess $(DISPINFO_SDACCESS) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess $(DISPINFO_NANDACCESS) - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - LockSCFG $(DISPINFO_LOCKSCFG) - HwAESSlotA_SSLClientCert $(DISPINFO_AES) - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - #Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType $(DISPINFO_APPTYPE) -# AppType SYSTEM - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media $(DISPINFO_MEDIA) -# Media NAND - # - # Data only title : [TRUE/FALSE] - # don't have to edit - ##DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure $(DISPINFO_SECURE) -# Secure TRUE - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(DISPINFO_GAMECODE) - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile FALSE - -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR - -} diff --git a/build/tests/DisplaySystemInformation/ARM9/makeConditions.txt b/build/tests/DisplaySystemInformation/ARM9/makeConditions.txt deleted file mode 100644 index 99e6ff33..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/makeConditions.txt +++ /dev/null @@ -1,19 +0,0 @@ -FILE_IDX IS_SECURE_APP IS_NAND_APP NAND_ACCESS AES_SLOT INVISIBLE_SCFG GAMECODE -0 0 0 1 D 1 0B0A -1 0 0 1 D 0 0B1A -2 0 0 0 D 1 0B2A -3 0 0 0 D 0 0B3A -4 0 1 1 D 1 020A -5 0 1 1 D 0 021A -6 1 0 1 1 1 0B4A -7 1 0 1 1 0 0B5A -8 1 0 1 0 1 0B6A -9 1 0 1 0 0 0B7A -10 1 0 0 1 1 0B8A -11 1 0 0 1 0 0B9A -12 1 0 0 0 1 0BAA -13 1 0 0 0 0 0BBA -14 1 1 1 1 1 022A -15 1 1 1 1 0 023A -16 1 1 1 0 1 024A -17 1 1 1 0 0 025A diff --git a/build/tests/DisplaySystemInformation/ARM9/makeFooter.txt b/build/tests/DisplaySystemInformation/ARM9/makeFooter.txt deleted file mode 100644 index 6231895a..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/makeFooter.txt +++ /dev/null @@ -1,115 +0,0 @@ -###################################### - -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/rom_header_$(call toLower,$(GAMECODE)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(GAMECODE)/libsyscall.a - - -MACRO_FLAGS += -DNAM_ENABLE=$(IS_SECURE_APP) -DDISPINFO_BIN_IDX=$(FILE_IDX) -TWL_NANDAPP = $(IS_NAND_APP) - -DISP_INFO = $(call eupath,$(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation) - -SUBDIRS = - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ - strResource.c misc.c util.c\ - get_versionData.c get_sysmenu.c get_scfg.c get_owner.c\ - get_hw.c get_parental.c get_other.c\ - get_secureUser.c get_font.c get_wl.c get_whitelist.c\ - $(MISC_DIR)/src/cmn.c - -LINCLUDES += $(MISC_DIR)/include \ - $(DISP_INFO)/common/include \ - $(ES_ROOT)/twl/include - -TARGET_BIN = DispInfo_$(FILE_IDX).$(FILE_SUFFIX) - -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libreboot$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - - - -#============================================================================= - -include $(TWLSDK_ROOT)/add-ins/es/commondefs.es -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifeq ($(IS_SECURE_APP),TRUE) - DEFAULT_COMP_ARM7 = armadillo - WRAM_MAP = MAP_TS_SCR - APPTYPE = SYSTEM - MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - ROM_SPEC = main_secure.rsf - MAKETAD_OPTION += -s -else - WRAM_MAP = $(MAKEROM_WRAM_MAPPING) - DEFAULT_COMP_ARM7 = racoon - APPTYPE = USER - ROM_SPEC = main_normal.rsf -endif - -ifeq ($(IS_NAND_APP),TRUE) - MEDIA = NAND - FILE_SUFFIX = tad -else - MEDIA = GAMECARD - FILE_SUFFIX = srl -endif - -ifeq ($(INVISIBLE_SCFG),TRUE) - SCFG_SUFFIX = LockSCFG -else - SCFG_SUFFIX = UnlockSCFG -endif - -BINDIR = ./bin/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) -OBJDIR = ./obj/$(TWL_BUILDTYPE)/DispInfo_$(FILE_IDX) - - -MAKEROM_FLAGS += -DDISPINFO_WRAM_MAP=$(WRAM_MAP) \ - -DDISPINFO_APPTYPE=$(APPTYPE) \ - -DDISPINFO_SECURE=$(IS_SECURE_APP) \ - -DDISPINFO_MEDIA=$(MEDIA) \ - -DDISPINFO_NANDACCESS=$(NAND_ACCESS) \ - -DDISPINFO_LOCKSCFG=$(INVISIBLE_SCFG) \ - -DDISPINFO_AES=$(AES_SLOT) \ - -DDISPINFO_GAMECODE=$(GAMECODE) \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - - -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/makeHeader.txt b/build/tests/DisplaySystemInformation/ARM9/makeHeader.txt deleted file mode 100644 index 0fcb308b..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/makeHeader.txt +++ /dev/null @@ -1,21 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - DisplaySystemInformation -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -###################################### \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/makeMaking.rb b/build/tests/DisplaySystemInformation/ARM9/makeMaking.rb deleted file mode 100755 index 06b04a2a..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/makeMaking.rb +++ /dev/null @@ -1,54 +0,0 @@ -fHead = open("makeHeader.txt") -fFoot = open("makeFooter.txt") -contentHead = fHead.read -contentFoot = fFoot.read -fHead.close -fFoot.close - -fCond = open("makeConditions.txt") -numArg = 0 - -argList = Array.new -fCond.gets.split(/\s+/).each do |arg| - numArg += 1 - argList.push arg -end - -puts "argList" -puts argList - - -fileIdx = 0 - -while l = fCond.gets - next if l[0] == '#' - argIdx = 0 - - puts "file making: Makefile." + fileIdx.to_s - f = open("Makefile." + fileIdx.to_s, "w") - f.puts contentHead - - l.split(/\t+/).each do |value| - strVal = "TRUE" if value == "1" - strVal = "FALSE" if value == "0" - strVal = "DONTCARE" if value == "D" - - if argList[argIdx] == "GAMECODE" || argList[argIdx] == "FILE_IDX" - argSet = "#{argList[argIdx]}\t=\t#{value}" - else - argSet = "#{argList[argIdx]}\t=\t#{strVal}" - end - - f.puts argSet - - argIdx += 1 - end - - f.puts contentFoot - f.close - fileIdx += 1 -end - -fCond.close - -(0...fileIdx).each{ |i| print "Makefile.#{i} "} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/control.c b/build/tests/DisplaySystemInformation/ARM9/src/control.c deleted file mode 100644 index d74e83d5..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/control.c +++ /dev/null @@ -1,425 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: control.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" -#include "drawFunc.h" -#include "control.h" -#include "strResource.h" -#include "viewSystemInfo.h" - -#define SAVE_COUNT_MASK 0x7f // saveCount̒l͈̔͂}XNB(0x00-0x7fj - - -// TSFwb_ -typedef struct TSFHeader{ - union digest { - u8 sha1[ SVC_SHA1_DIGEST_SIZE ]; // SHA-1_CWFXg - u8 rsa[ RSA_KEY_LENGTH ]; // RSA - u8 dst[ RSA_KEY_LENGTH ]; // ]p̍őTCYvf - }digest; - u8 version; // f[^ver. - u8 saveCount; // Z[uJEgi~[OȂt@C͎gpȂj - u8 rsv[2]; // \ - u32 bodyLength; // f[^ -}TSFHeader; // 134bytes - -static const char *s_TSDPath[] = { - (const char *)"nand:/shared1/TWLCFG0.dat", - (const char *)"nand:/shared1/TWLCFG1.dat", -}; - - -static int selectLine[ROOTMENU_SIZE+1]; -BOOL resetUserData( void ); -BOOL breakUserData( u8 idx ); -BOOL resetRTC( void ); -static void TSDi_ClearSettingsDirect( LCFGTWLSettingsData *pTSD ); -static BOOL LCFGi_TSD_WriteSettingsDirectForRecovery( const LCFGTWLSettingsData *pSrcInfo, int index ); -static BOOL LCFGi_TSF_WriteFile( char *pPath, TSFHeader *pHeader, const void *pSrcBody, u8 *pSaveCount ); - - - -BOOL executeControl( int *line, int *changeLine, u8 *mode ) -{ - BOOL controlFlag = FALSE; - - // ㉺ōڕύX - if( ( pad.trg & PAD_KEY_UP ) || ( pad.trg & PAD_KEY_DOWN ) ) - { - controlFlag = TRUE; - *changeLine = !*changeLine; - } - - if( ( pad.trg & PAD_BUTTON_A ) && *changeLine ) - { - BOOL result = TRUE; - controlFlag = TRUE; - - *mode |= MODE_RESULT_DISPLAY_MASK; - - switch( *line ) - { - case MENU_RESET_INFO: - result = resetUserData(); - break; - - case MENU_BREAK_DATA: - result &= breakUserData(0); - result &= breakUserData(1); - break; - - case MENU_RTC_RESET: - result = resetRTC(); - break; - } - - *mode = (u8) ((*mode & ~MODE_RESULT_MASK ) | ( result << MODE_RESULT_SHIFT) ); - } - - // BŃLZĖ߂ - if( (pad.trg & PAD_BUTTON_B) || - ( ( pad.trg & PAD_BUTTON_A ) && !*changeLine) ) - { - controlFlag = TRUE; - *mode = 0; - } - - return controlFlag; -} - -ChangeCotnrolResult changeControl( int *menu, int *line, int *changeLine, u8 *mode ) -{ - int linemax = gAllInfo[*menu][*line].numKindName; - BOOL controlFlag = FALSE; - - if( !gAllInfo[*menu][*line].changable ) - { - // ̊ԈႢ - *mode = 0; - return CHANGE_CONTROL; - } - - // ㉺ōڕύX - if( pad.trg & PAD_KEY_UP ) - { - controlFlag = TRUE; - - if( --(*changeLine) < 0 ) - { - // CfNgʃ}CiXɂȂԍŌ - *changeLine = linemax - 1; - } - } - else if( pad.trg & PAD_KEY_DOWN ) - { - controlFlag = TRUE; - - if( ++(*changeLine) >= linemax ) - { - // CCNgʁAmaxline𒴂ŏ - *changeLine = 0; - } - } - - if( pad.trg & PAD_BUTTON_A ) - { - switch( gAllInfo[*menu][*line].argType ) - { - case ARG_INT: - gAllInfo[*menu][*line].changeFunc.cInt(*changeLine); - break; - - case ARG_BOOL: - gAllInfo[*menu][*line].changeFunc.cBool(*changeLine); - break; - - case ARG_OTHER: - // _lłintłnȂ֐͎cOȑΉ - if( *menu == MENU_SCFG_ARM7 && *line == SCFG_ARM9_RST_DSP ) - { - *changeLine == 0 ? SCFG_ReleaseResetDSP(): SCFG_ResetDSP(); - } - else if( *menu == MENU_SCFG_ARM7 && *line == SCFG_ARM9_EXT_PS ) - { - SCFGPsramBoundary idx = SCFG_PSRAM_BOUNDARY_4MB; - - switch(*changeLine) - { - case 0: - idx = SCFG_PSRAM_BOUNDARY_4MB; - break; - case 1: - idx = SCFG_PSRAM_BOUNDARY_16MB; - break; - case 2: - idx = SCFG_PSRAM_BOUNDARY_32MB; - break; - } - - SCFG_SetPsramBoundary( idx ); - - } - - else if( *menu == MENU_SCFG_ARM7 && *line == SCFG_ARM9_EXT_CFG ) - { - if( *changeLine == 0 ) - { - SCFG_SetConfigBlockInaccessible(); - } - } - - break; - } - - return CHANGE_VALUE_CHANGED; - } - - // BŃLZĖ߂ - if( pad.trg & PAD_BUTTON_B ) - { - controlFlag = TRUE; - *mode = 0; - } - - return controlFlag ? CHANGE_CONTROL : CHANGE_NOTHING ; -} - - -BOOL control( int *menu, int *line, int *changeLine, u8 *mode ) -{ - int linemax = s_numMenu[*menu]; // I𒆃y[W̍ڐ - BOOL controlFlag = FALSE; // 삪TRUEɂȂ - - // ㉺ōڕύX - if( pad.trg & PAD_KEY_UP ) - { - controlFlag = TRUE; - - if( --(*line) < 0 ) - { - // CfNgʃ}CiXɂȂԍŌ - *line = linemax - 1; - } - } - else if( pad.trg & PAD_KEY_DOWN ) - { - controlFlag = TRUE; - - if( ++(*line) >= linemax ) - { - // CCNgʁAmaxline𒴂ŏ - *line = 0; - } - } - - // EŃy[W - if( pad.trg & PAD_KEY_RIGHT ) - { - controlFlag = TRUE; - *line += DISP_NUM_LINES - 2; - - if( *line >= linemax ) - { - *line = linemax - 1; - } - } - else if( pad.trg & PAD_KEY_LEFT ) - { - controlFlag = TRUE; - *line -= DISP_NUM_LINES - 2; - - if( *line < 0 ) - { - *line = 0; - } - } - - // A{^ - if( pad.trg & PAD_BUTTON_A ) - { - if(*menu == MENU_ROOT) - { - controlFlag = TRUE; - - switch( *line ) - { - case MENU_ROOT : - case MENU_OWNER: - case MENU_PARENTAL: - case MENU_SECURE_USER: - case MENU_OTHER: - case MENU_NORMAL_HW: - case MENU_SECURE_HW: - case MENU_SCFG_ARM7: - case MENU_SCFG_ARM9: - case MENU_SYSMENU: - case MENU_FONT: - case MENU_WL: - case MENU_WHITE: - case MENU_VERSION: - // ̉ʂ̑IʒuL^ - selectLine[ROOTMENU_SIZE] = *line; - - // ̃j[ʂJ - *menu = *line; - *line = selectLine[*menu]; - break; - - case MENU_RESET_INFO: - case MENU_BREAK_DATA: - case MENU_RTC_RESET: - *mode |= MODE_EXECUTE_MASK; - *changeLine = 0; // ftHgʒucancelɂĂ - break; - } - } - else if( *menu != MENU_VERSION && *menu != MENU_FONT && gAllInfo[*menu][*line].changable ) - { - controlFlag = TRUE; - - // ύX”\ȍڂ͕ύXʂJ - *mode |= MODE_CHANGE_MASK; - *changeLine = gAllInfo[*menu][*line].iValue; - } - - } - - if( pad.trg & PAD_BUTTON_B ) - { - if( *menu != MENU_ROOT ) - { - controlFlag = TRUE; - - // ݒl\ʂ̂Ƃ̓[gɖ߂ - selectLine[*menu] = *line; - *menu = MENU_ROOT; - *line = selectLine[ROOTMENU_SIZE]; - } - } - - if( ( pad.trg & PAD_BUTTON_SELECT ) && *menu == MENU_SCFG_ARM7 ) - { - controlFlag = TRUE; - - // ARM7SCFG̕\f[^؂ւ - switchViewMode(); - } - - return controlFlag; -} - -BOOL resetUserData( void ) -// idx(0 or 1)Ԗڂ̃[Uf[^Zbg -{ - LCFGTWLTPCalibData calib; - // DisplayInitňReadĂ邩炢񂩂 -// u8 *dataBuf = (u8*) Alloc (LCFG_READ_TEMP); - -// LCFG_ReadTWLSettings( (u8 (*)[ LCFG_READ_TEMP ])dataBuf ); - - // obNAbv‚Ԃ߂ɓ񏑂 - LCFG_TSD_GetTPCalibration( &calib ); // TPLu[V͎cB - LCFG_ClearTWLSettings( LCFG_TSD_GetInstalledSoftBoxCount() ); - LCFG_TSD_SetTPCalibration( &calib ); - - if( ! LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ]) gBufLCFG ) ) - { - OS_TPrintf( "Write Setting failed.\n" ); - return FALSE; - } - - if( ! LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ]) gBufLCFG ) ) - { - OS_TPrintf( "Write Setting failed.\n" ); - return FALSE; - } - - OS_TPrintf("Clear Setting Succeeded.\n" ); - -// TSDi_ClearSettingsDirect( (LCFGTWLSettingsData *)(&dataBuf[ LCFG_TEMP_BUFFER_SIZE*idx ]) ); -// LCFGi_TSD_WriteSettingsDirectForRecovery( (LCFGTWLSettingsData *)&dataBuf[ LCFG_TEMP_BUFFER_SIZE*idx ], idx ); - - return TRUE; -} - -BOOL breakUserData( u8 idx ) -{ - // LCFG APIg킸ɁAFSxŃt@CǂŁAf[^j󂵂Ă珑߂ - FSFile file; - u8 *fileBuf = (u8*) Alloc ( LCFG_TEMP_BUFFER_SIZE ); - - FS_InitFile( &file ); - - if( !FS_OpenFileEx( &file, s_TSDPath[idx], FS_FILEMODE_R | FS_FILEMODE_W ) ) - { - OS_TPrintf("OpenFile failed. result: %d path: %s\n", FS_GetArchiveResultCode(&file), s_TSDPath[idx]); - return FALSE; - } - - // KɃf[^ - MI_CpuFill8( fileBuf, 0xFF, LCFG_TEMP_BUFFER_SIZE ); - - // f[^̏߂ - FS_SeekFileToBegin( &file ); - - if( FS_WriteFile( &file, fileBuf, LCFG_TEMP_BUFFER_SIZE ) == -1 ) - { - OS_TPrintf("writeFile failed. path: %s\n", s_TSDPath[idx]); - return FALSE; - } - - FS_CloseFile( &file ); - - OS_TPrintf("Breaking UserData Succeeded. path: %s\n", s_TSDPath[idx]); - return TRUE; -} - - -BOOL resetRTC( void ) -{ - RTCResult result; - RTCDate date; - RTCTime time; - - date.year = 0; - date.month = 1; - date.day = 1; - date.week = RTC_WEEK_SUNDAY; - - time.hour = 0; - time.minute = 0; - time.second = 0; - - // result͐[Ԃ - result = RTC_SetDate( &date ); - if( result != RTC_RESULT_SUCCESS ) - { - OS_TPrintf("RTC Date Reset Failed. err: %d", result ); - return FALSE; - } - - result |= RTC_SetTime( &time ); - if( result != RTC_RESULT_SUCCESS ) - { - OS_TPrintf("RTC Time Reset Failed. err: %d", result ); - return FALSE; - } - - return TRUE; -} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/control.h b/build/tests/DisplaySystemInformation/ARM9/src/control.h deleted file mode 100644 index 93598285..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/control.h +++ /dev/null @@ -1,41 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: control.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __DISPLAY_SYSTEM_CONTROL_H__ -#define __DISPLAY_SYSTEM_CONTROL_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -typedef enum ChangeCotnrolResult{ - CHANGE_NOTHING, - CHANGE_CONTROL, - CHANGE_VALUE_CHANGED -} ChangeCotnrolResult; - -BOOL executeControl( int *line, int *changeLine, u8 *mode ); -ChangeCotnrolResult changeControl( int *menu, int *line, int *changeLine, u8 *changeMode ); -BOOL control( int *menu, int *line, int *changeLine, u8 *changeMode ); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c deleted file mode 100644 index ea3c8eba..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c +++ /dev/null @@ -1,1085 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: drawFunc.c - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#include -#include -#include -#include -#include - -#include "drawFunc.h" -#include "getInformation.h" -#include "viewSystemInfo.h" -#include "misc.h" -#include "strResource.h" -#include "myIoreg_SCFG.h" - - - -// `֘A -#define HEADER_UP 0 -#define HEADER_LEFT 10 -#define PAGE_LEFT 160 -#define FOOTER_UP 110 -#define FOOTER_LEFT 10 -#define ALLOW_LEFT 0 - -#define AST_LEFT ( ALLOW_LEFT + LINE_OFFSET ) -#define KIND_UP 10 // ږ̏W -#define KIND_LEFT ( AST_LEFT + 10 ) // ږ̍W -#define VALUE_UP KIND_UP // ڒl̏W -#define VALUE_LEFT 140 // ڒl̍W -#define LINE_OFFSET 15 // 1sƂ̃ItZbg -#define ROW_OFFSET 15 // ڂꂽƂ̒igp - -#define REGISTER_NAME_LEFT 10 -#define REGISTER_NAME_UP 15 -#define REGISTER_DATA_LEFT 50 -#define REGISTER_DATA_UP 15 - -#define FOOTER_REGIST 0 -#define FOOTER_CONTROL1 1 -#define FOOTER_CONTROL2 2 -#define FOOTER_MENU 3 -#define FOOTER_LINES 4 - -#define CHANGE_ITEMNAME_UP 20 -#define CHANGE_ITEMNAME_LEFT 20 -#define CHANGE_VALUE_LEFT 80 -#define CHANGE_VALUE_UP 80 -#define CHANGE_ALLOW_LEFT (CHANGE_VALUE_LEFT - 15) -#define CHANGE_NOW_SETTING_UP 150 - -#define RESULT_LEFT CHANGE_ITEMNAME_LEFT -#define RESULT_UP CHANGE_NOW_SETTING_UP - - -#define SCROLL_MARGIN 2 // ʒ[sŃXN[邩 - -#define UNIQUE_BUF 12 -#define BINARY_BUF 18 - -/* global variables -------------------- */ - -static int gDrawIdx[ROOTMENU_SIZE+1] = {0}; // ږڂ牺`悵Ă̂ -static int gMenuLineSize[ROOTMENU_SIZE] = {}; // ej[̑S̍s -static const int gRegisterIdx[2][SCFG_ARM7_MENU_SIZE]; -static BOOL gSelectedARM7SCFGReg = TRUE; // ARM7SCFGŃWX^TCh̕`Ȃtrue,L̈Ȃfalse - -/* function prototypes -------------------- */ - -void calibrateDrawIdx( int menu, int idx ); -void printData( int x, int y, int color, DispInfoEntry *entry ); -void printValue( int menu,int entryLine, int drawOffset, DispInfoEntry *entry ); -void printKindName( int menu, int entryLine, int drawOffset, int selected ); -void printBinary16( int x, int y, u16 value, int selected, int selectSize ); -void printBinary32( int x, int y, u32 value, int selected, int selectSize ); -void drawRegister( int menu, int selected ); -void drawChangeMode( DispInfoEntry *Entry, int changeLine ); -void drawExecuteMode( const char *command, int changeLine, u8 mode ); -void drawFontInfo( int idx, int drawLine, int selected ); -void drawVersion( int idx, int drawLine ,int selected ); -void printUniqueID( int drawLineOffset, char *uniqueId ); -int getPageNum( int valueIdx, const int* pageOffset ); -int countMenuLine( int menu ); -int countLinesDown( int menu, int idx ); - -void drawHeader( int menu, int line) -// ʒ[ɊȒPȏ\ -{ - u16 buf[256]; - -#ifdef VERSION_VIEWER - PrintfSJISSub( HEADER_LEFT, HEADER_UP, TXT_COLOR_RED, "%s $Rev$" , "AppVesionViewer" ); -#else - PrintfSJISSub( HEADER_LEFT, HEADER_UP, TXT_COLOR_RED, "%s %d $Rev$" , "DisplaySystemInfo", DISPINFO_BIN_IDX ); -#endif - - if( menu != MENU_ROOT ) - { - swprintf(buf, 256, L"Root > %s", s_strRootMenu[menu] ); - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_MENU * LINE_OFFSET, TXT_COLOR_BLUE, buf ); - - swprintf(buf, 256, L"%d / %d", line+1 , s_numMenu[menu] ); - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_LINES * LINE_OFFSET, TXT_COLOR_BLUE, buf ); - } - else - { - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_MENU * LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L"Root" ); - swprintf(buf, 256, L"%d / %d", line+1 , ROOTMENU_SIZE ); - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_LINES * LINE_OFFSET, TXT_COLOR_BLUE, buf ); - } - -#ifndef VERSION_VIEWER - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_CONTROL1 * LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L" A: Decide B: Back "); - - if( menu == MENU_SCFG_ARM7 ) - { - PrintfSJISSub( FOOTER_LEFT, FOOTER_UP + FOOTER_REGIST * LINE_OFFSET, TXT_COLOR_RED, s_strSCFGViewMode[ gSelectedARM7SCFGReg ] ); - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_CONTROL2 * LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L" Select: Switch Viewing Area" ); - } -#endif -} - -void printData( int x, int y, int color, DispInfoEntry *entry ) -{ - if( entry->isNumData ) - { - // lf[^炻̂܂܃vg - PrintfSJIS( x, y, color, "%d", entry->iValue ); - } - else if( entry->isSjis ) - { - if( entry->str.sjis == s_strCorrect[0] ) - { - color = TXT_COLOR_RED; - } - - // SJIS - PrintfSJIS( x, y, color, "%s", entry->str.sjis ); - } - else - { - // UTF16 - PutStringUTF16( x, y, color, entry->str.utf ); - } - -} - -int countMenuLine( int menu ) -{ - int i; - int sum = 0; - - for( i=0; ifromLCFG ) - { - // LCFGoRŎ擾f[^͐‚ɂ - txtColor = TXT_COLOR_BLUE; - } - - ////////////////////////////////////////////// - // `sKvꍇ̏͂ // - ////////////////////////////////////////////// - - if( menu == MENU_OWNER && entryLine == OWNER_COLOR ) - { - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawOffset, TXT_UCOLOR_GRAY + entry->iValue , "" ); - printData( VALUE_LEFT + LINE_OFFSET , VALUE_UP + LINE_OFFSET*drawOffset, txtColor, entry ); - return; - } - - if( menu == MENU_NORMAL_HW && entryLine == NORMAL_HW_UNIQUE_ID ) - { - printUniqueID( drawOffset, entry->str.sjis ); - entry->numLines = 4; - return; - } - - if( menu == MENU_PARENTAL && entryLine == PARENTAL_PASSWORD ) - { - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset, txtColor, "%04d", entry->iValue ); - return; - } - - if( menu == MENU_SYSMENU && entryLine == SYSMENU_VERSION_NUM ) - { - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset, - txtColor, "%d.%d", entry->iValue >> 16, entry->iValue & 0xFFFF ); - return; - } - - if( ( menu == MENU_SYSMENU && entryLine == SYSMENU_TIMESTAMP )|| - ( menu == MENU_FONT && entryLine == FONT_TIMESTAMP )) - { - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset, txtColor, "%08lx", entry->iValue ); - return; - } - - if( menu == MENU_SECURE_HW && entryLine == SECURE_HW_LAUNCHER_ID ) - { - char buf[5]; - - if( entry->iValue == 0 ) - { - // 񂪎󂯎ĂȂ - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET * (1 + drawOffset), txtColor, s_strNA ); - } - - MI_CpuCopy( &(entry->iValue), buf, 4 ); - buf[4] = '\0'; - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET * (1 + drawOffset), txtColor, "%s", buf ); - return; - } - - if( ( menu == MENU_SECURE_HW && entryLine == SECURE_HW_FUSE ) || - ( menu == MENU_OTHER && entryLine == OTHER_RTC_OFFSET ) || - ( menu == MENU_OTHER && entryLine == OTHER_TP_RSV ) ) - { - // 168̓ig݂ɕύX - char buf[9] = {0}; - STD_StrLCpy( buf, entry->str.sjis , 9 ); - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET * drawOffset, txtColor, "%s", buf ); - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET * (1+drawOffset), txtColor, "%s", &(entry->str.sjis[8]) ); - return; - } - - if( ( menu == MENU_SYSMENU && entryLine == SYSMENU_EULA_URL ) || - ( menu == MENU_SYSMENU && entryLine == SYSMENU_NUP_HOST )) - { - char buf[17] = {0}; - int i, lineOffset = 0; - - for( i = 0; i < STD_StrLen( entry->str.sjis ) ; i+=16 ) - { - STD_StrLCpy( buf, &(entry->str.sjis[i]), 17 ); - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET * ( drawOffset + lineOffset++), txtColor, "%s", buf ); - } - - entry->numLines = lineOffset > 0 ? lineOffset : 1; - return; - } - - if( ( menu == MENU_OWNER && entryLine == OWNER_COMMENT ) || - ( menu == MENU_PARENTAL && entryLine == PARENTAL_ANSWER )) - { - u16 buf[11] = {0}; - int i, lineOffset = 0; - - for( i = 0; i < wcslen( entry->str.utf ) ; i+=10 ) - { - MI_CpuCopy( &(entry->str.utf[i]), buf, 20 ); - PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET * ( drawOffset + lineOffset++), txtColor, buf ); - } - - // ڂ󕶎ȂƂł1s\͂悤ɂ - entry->numLines = lineOffset > 0 ? lineOffset : 1; - - return; - } - - - ////////////////////////// - // ʏ̍ڕ`͂ // - ////////////////////////// - - if( entry->isAligned ) - { - printData( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset, txtColor, entry ); - } - else - { - // ږĎKvȏꍇ - printData( VALUE_LEFT, VALUE_UP + LINE_OFFSET* ( drawOffset + 1 ), txtColor, entry ); - } -} - -void drawRegister( int menu, int selected ) -{ -#ifndef VERSION_VIEWER - // SCFGWX^̃oCiTuʂɕ`悷 - int selectRegSize = 1; - int selectBitNum; - - if( menu == MENU_SCFG_ARM7 && selected < SCFG_ARM7_MI_SC1_CDET) - { - // ARM7̑O4 - u32 regRom = 0; - u16 regClk = 0; - u16 regJtag = 0; - u32 regExt = 0; - selectBitNum = gRegisterIdx[0][selected]; - - regRom = MI_LoadLE32( &gArm7SCFGReg[DISP_REG_ROM_OFFSET - 0x4000] ); - regClk = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_CLK_OFFSET - 0x4000] ); - regJtag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_JTAG_OFFSET - 0x4000] ); - regExt = MI_LoadLE32( &gArm7SCFGReg[DISP_REG_EXT_OFFSET - 0x4000] ); - - if( selected == SCFG_ARM7_EXT_PS ) - { - selectRegSize = 2; - } - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP, TXT_COLOR_BLACK, s_strARM7RegisterName[0] ); - printBinary32( REGISTER_DATA_LEFT, REGISTER_DATA_UP, regRom, selectBitNum, selectRegSize); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 2*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[1] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 2*LINE_OFFSET, regClk, selectBitNum - 32, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 3*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[2] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 3*LINE_OFFSET, regJtag, selectBitNum - 48, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 4*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[3] ); - printBinary32( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 4*LINE_OFFSET, regExt, selectBitNum - 64, selectRegSize ); - } - else if( menu == MENU_SCFG_ARM7 && selected >= SCFG_ARM7_MI_SC1_CDET ) - { - // SCFǦ㔼4 - u32 regMc1 = MI_LoadLE32( &gArm7SCFGReg[DISP_REG_MC_OFFSET - 0x4000] ); - u16 regMc2 = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MC2_OFFSET - 0x4000] ); - u16 regOldWL = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_WL_OFFSET - 0x4000] ); - u16 regOption = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_OP_OFFSET - 0x4000] ); - selectBitNum = gRegisterIdx[0][selected]; - - if( selected == SCFG_ARM7_MI_SC1_MODE || - selected == SCFG_ARM7_MI_SC2_MODE || - selected == SCFG_ARM7_OP_FORM || - selected == SCFG_ARM7_OP_APP ) - { - selectRegSize = 2; - } - else if( selected == SCFG_ARM7_MI_CC || selected == SCFG_ARM7_MI_CA ) - { - selectRegSize = 16; - } - - // ` - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP, TXT_COLOR_BLACK, s_strARM7RegisterName[4] ); - printBinary32( REGISTER_DATA_LEFT, REGISTER_DATA_UP, regMc1, selectBitNum - 96, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 2*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[5]); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 2*LINE_OFFSET, regMc2, selectBitNum - 128, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 3*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[6] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 3*LINE_OFFSET, regOldWL, selectBitNum - 144, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 4*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[7] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 4*LINE_OFFSET, regOption, selectBitNum - 160, selectRegSize ); - - } - else if( menu == MENU_SCFG_ARM9 ) - { - // ARM9SCFGWX^Zbg - u16 regRom = MI_LoadLE16( (void*) (HW_IOREG + REG_A9ROM_OFFSET) ); - u16 regClk = MI_LoadLE16( (void*) (HW_IOREG + REG_CLK_OFFSET) ); - u16 regRst = MI_LoadLE16( (void*) (HW_IOREG + REG_RST_OFFSET) ); - u32 regExt = MI_LoadLE32( (void*) (HW_IOREG + REG_EXT_OFFSET) ); - u16 regMc = MI_LoadLE16( (void*) (HW_IOREG + REG_MC_OFFSET ) ); - selectBitNum = gRegisterIdx[1][selected]; - - if( selected == SCFG_ARM9_EXT_PS) - { - selectRegSize = 2; - } - - // ` - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP, TXT_COLOR_BLACK, s_strARM9RegisterName[0] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP, regRom, selectBitNum, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + LINE_OFFSET, TXT_COLOR_BLACK, s_strARM9RegisterName[1] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + LINE_OFFSET, regClk, selectBitNum - 16, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 2*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM9RegisterName[2] ); - printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 2*LINE_OFFSET, regRst, selectBitNum - 32, selectRegSize ); - - PrintfSJISSub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 3*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM9RegisterName[3] ); - printBinary32( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 3*LINE_OFFSET, regExt, selectBitNum - 48, selectRegSize ); - - } -#endif // ifndef VERSION_VIEWER -} - -void printBinary32( int x, int y, u32 value, int selected, int selectSize ) -{ - printBinary16( x, y, (u16)(value >> 16), selected - 16, selectSize ); - printBinary16( x, y + LINE_OFFSET, (u16)(value & 0xFFFF), selected, selectSize ); -} - -void printBinary16( int x, int y, u16 value, int selected, int selectSize ) -{ - // 16rbg̃oCifBXvCɕ` - - int i; - int bitNum; - u16 buf[BINARY_BUF] = {0}; // 16bit + 1 space + 1 EOS - u16 mask = 0x8000; - - for( i = 0; i < BINARY_BUF; i++) - { - if( i%9 == 8 ) - { - buf[i] = L'@'; - continue; - } - - if( value & mask ) - { - buf[i] = L'P'; - } - else - { - buf[i] = L'O'; - } - - mask = (u16)( mask >> 1 ); - } - - buf[BINARY_BUF] = L'\0'; - - PutStringUTF16Sub( x, y, TXT_COLOR_BLACK, buf ); - - if( selected >= 16 || selected < 0 ) - { - // `惌WX^ɑIڂɑΉrbgȂ΂ŏI - return; - } - - // }XNZbg - mask = 0x8000; - - // ̕`惌WX^ɑIڂɑΉrbgƂ - // ̃rbgԎŕ\ - for( i = 0, bitNum = 0; bitNum < 16; i++ ) - { - if( i == 8 ) - { - // 8rbgA8rbg̊Ԃ̋ - buf[i] = L'@'; - continue; - } - - if( selected <= 15 - bitNum && 15 - bitNum < selected + selectSize ) - { - buf[i] = ( value & ( mask >> bitNum )) ? L'P': L'O' ; - } - else - { - buf[i] = L'@'; - } - - bitNum++; - } - - PutStringUTF16Sub( x, y, TXT_COLOR_RED, buf ); -} - -void drawChangeMode( DispInfoEntry *entry, int changeLine ) -// lύXʂ̕` -{ - int i; - - // ږ - PrintfSJIS( CHANGE_ITEMNAME_LEFT, CHANGE_ITEMNAME_UP, TXT_COLOR_RED, entry->kind ); - - if( entry->kindNameList != NULL ) - { - // BOOLlŕύXݒ肷鍀ڂ̏ꍇ͒lꗗIƂĕ\ - PrintfSJIS( CHANGE_ITEMNAME_LEFT, CHANGE_NOW_SETTING_UP, TXT_COLOR_BLACK, "Now Setting: %s", entry->kindNameList[entry->iValue] ); - - for( i = 0; i < entry->numKindName; i++ ) - { - int kindColor = TXT_COLOR_BLACK; - - if( i == changeLine ) - { - kindColor = TXT_COLOR_GREEN; - PutStringUTF16( CHANGE_ALLOW_LEFT, CHANGE_VALUE_UP + i*LINE_OFFSET, TXT_COLOR_BLACK, (const u16 *)L"" ); - } - - PrintfSJIS( CHANGE_VALUE_LEFT, CHANGE_VALUE_UP + i*LINE_OFFSET, kindColor, entry->kindNameList[i] ); - } - } - -} - -void drawExecuteMode( const char *command, int changeLine, u8 mode ) -{ -#ifndef VERSION_VIEWER - int i; - - // ږ - PrintfSJIS( CHANGE_ITEMNAME_LEFT, CHANGE_ITEMNAME_UP, TXT_COLOR_RED, command ); - - for( i = 0; i < 2 ; i++ ) - { - int kindColor = TXT_COLOR_BLACK; - - if( i == changeLine ) - { - kindColor = TXT_COLOR_GREEN; - PutStringUTF16( CHANGE_ALLOW_LEFT, CHANGE_VALUE_UP + i*LINE_OFFSET, TXT_COLOR_BLACK, (const u16 *)L"" ); - } - - PrintfSJIS( CHANGE_VALUE_LEFT, CHANGE_VALUE_UP + i*LINE_OFFSET, kindColor, s_strOK[i] ); - } - - if( mode & MODE_RESULT_DISPLAY_MASK ) - { - PrintfSJIS( RESULT_LEFT, RESULT_UP, TXT_COLOR_BLACK, s_strResult[ (mode & MODE_RESULT_MASK) >> MODE_RESULT_SHIFT ] ); - } -#endif // VERSION_VIEWER - -} - -void drawVersion( int idx, int drawLine ,int selected ) -{ - int kindColor = TXT_COLOR_BLACK; - u16 value = gContentsVersion[idx]; - - if( idx == selected) - { - // Iڂ͂납 - kindColor = TXT_COLOR_GREEN; - PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET*drawLine, TXT_COLOR_BLACK, (const u16 *)L""); - } - - - // ږ - // gContentsTitle[i]͓4oCgCjVR[h̃rbOGfBALqA - // K4oCgAṽtO - { - u64 id = gContentsTitle[idx]; - char buf[5] = {0}; - int i; - - for(i = 3; 0<=i; i-- ) - { - buf[i] = (char)(id & 0xFF) ; - id >>= 8; - } - - PrintfSJIS( KIND_LEFT, KIND_UP + LINE_OFFSET*drawLine , kindColor, "%s", buf ); - } - - // l - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLine , TXT_COLOR_BLACK, "%x.%x", value >> 8, value & 0xFF ); -} - -void drawFontInfo( int idx, int drawLine, int selected ) -{ -#ifndef VERSION_VIEWER - int color = TXT_COLOR_BLACK; - int fontIdx = idx / NUM_FONT_INFO; - int dataType = idx % NUM_FONT_INFO; - - static const char* s_strFontDataType[] = { - "name", - "size", - "hash" - }; - - // ޖ - if( idx == selected) - { - color = TXT_COLOR_GREEN; - PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET*drawLine, TXT_COLOR_BLACK, (const u16 *)L""); - } - - PrintfSJIS( KIND_LEFT, KIND_UP + LINE_OFFSET*drawLine , color, "font%d %s", fontIdx, s_strFontDataType[dataType] ); - - // l - switch( dataType ) - { - case 0: - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLine , TXT_COLOR_BLACK, (char*)gFontInfo[fontIdx].name ); - break; - - case 1: - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLine , TXT_COLOR_BLACK, "%d byte", gFontInfo[fontIdx].size ); - break; - - case 2: - if( gFontInfo[fontIdx].isHashOK ) - { - color = TXT_COLOR_BLACK; - } - else - { - color = TXT_COLOR_RED; - } - - PrintfSJIS( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLine , color, s_strCorrect[ gFontInfo[fontIdx].isHashOK ] ); - break; - } -#endif // ifdef VERSION_VIEWER -} -void drawMenu( int menu, int line, int changeLine, u8 mode ) -// ꗗ`悷 -{ - int lineNum = 0; - int i=0; - - drawHeader( menu, line ); - drawRegister( menu, line ); - - if( mode & MODE_CHANGE_MASK ) - { - // ύX[hʂ̕` - drawChangeMode( &gAllInfo[menu][line], changeLine ); - return; - } - - if( mode & MODE_EXECUTE_MASK ) - { - drawExecuteMode( s_strMetaMenu[MENU_ROOT][line] , changeLine, mode ); - return; - } - - // `ʒu̒ - if( line - gDrawIdx[menu] < SCROLL_MARGIN ) - { - gDrawIdx[menu] = line - SCROLL_MARGIN >= 0 ? line - SCROLL_MARGIN : 0; - } - else if( countLinesDown(menu, line) < SCROLL_MARGIN ) - { - calibrateDrawIdx( menu, line ); - } - - for( i = gDrawIdx[menu] ; i < s_numMenu[menu] && lineNum < DISP_NUM_LINES ; i++ ) - { - // •ϒڂȃo[W񂾂Ꮘ - if( menu == MENU_VERSION && VERSION_OTHER <= i ) - { - drawVersion( i - VERSION_OTHER, lineNum++, line - VERSION_OTHER ); - continue; - } - - if( menu == MENU_FONT && FONT_INFO <= i ) - { - drawFontInfo( i - FONT_INFO, lineNum++, line - FONT_INFO ); - continue; - } - - // ږ̕` - printKindName( menu, i, lineNum, line ); - - // l̕` - if( menu == MENU_SCFG_ARM7 && !gSelectedARM7SCFGReg ) - { - // ARM7SCFGŋL̈摤̒l\ĂƂ̓ItZbg - printValue( menu, i, lineNum, &gAllInfo[menu][i + SCFG_ARM7_SHARED_OFFSET] ); - } - else if( menu != MENU_ROOT ) - { - printValue( menu, i, lineNum, &gAllInfo[menu][i] ); - } - - // `ItZbg̍XV - lineNum += menu != MENU_ROOT ? gAllInfo[menu][i].numLines : 1; - } - - /* - // XN[o[ƂoH - // Ŝ̍sc - if( gMenuLineSize[menu] == 0 ) - { - gMenuLineSize[menu] = countMenuLine(menu); - } - */ -} - -int countLinesDown( int menu, int idx ) -// Iڂ艺ɉڕ\Ă邩JEg -{ - int i; - int lines = 0; - - for( i = gDrawIdx[menu]; lines < DISP_NUM_LINES && i < s_numMenu[menu] ; i++ ) - { - lines += ( menu == MENU_VERSION && VERSION_OTHER <= i ) || - ( menu == MENU_FONT && FONT_INFO <= i ) || - ( menu == MENU_ROOT ) ? - 1 : gAllInfo[menu][i].numLines; - } - - return (i-1) - idx; -} - -void calibrateDrawIdx( int menu, int idx ) -// ܂ԂڂƂƕ`ʒû -// ɏ2ڕ\悤ɕ␳s -{ - int i; - int lines = 0; - - // ܂͎Ɖ2ڂ̍sT - for( i = 0; i <= 2 && i + idx < s_numMenu[menu] ; i++ ) - { - lines += ( menu == MENU_VERSION && VERSION_OTHER <= i+idx ) || - ( menu == MENU_FONT && FONT_INFO <= i+idx ) || - ( menu == MENU_ROOT ) ? - 1 : gAllInfo[menu][i + idx].numLines; - } - - // ֒T - for( i = 1; 0 <= idx - i && lines < DISP_NUM_LINES ; i++) - { - lines += ( menu == MENU_VERSION && VERSION_OTHER <= i+idx ) || - ( menu == MENU_FONT && FONT_INFO <= i+idx ) || - ( menu == MENU_ROOT ) ? - 1 : gAllInfo[menu][idx - i].numLines; - } - - // [v]vɉ - i--; - - if( lines < DISP_NUM_LINES ) - { - // idx - i[菬Ȃꍇ - gDrawIdx[menu] = 0; - } - else if( lines == DISP_NUM_LINES ) - { - // \s傤ǂ͂̂܂ - gDrawIdx[menu] = idx - i; - } - else if( lines == DISP_NUM_LINES + 1 && gAllInfo[menu][ idx - i ].numLines != 1) - { - // 1sĂāAˆԏ̍ڂs`悾ꍇ͂̂܂ - gDrawIdx[menu] = idx - i; - } - else - { - // ȊȌꍇ͈ԏ̍sO - gDrawIdx[menu] = idx - i + 1; - } - -} - -void switchViewMode( void ) -// ARM7SCFG̃WX^f[^ƋL̈f[^̕\e؂ւ -{ - gSelectedARM7SCFGReg = !gSelectedARM7SCFGReg; -} - -/* -void drawKindName( int menu, int page, int line ) -// ږ`֐ -{ - int linenum = 0; - int offset = 0; - - if( menu == MENU_ROOT ) - { - // [gj[ɂ̓CfNXf[^Ȃ̂ŁAԊuȂƂOɗ񂷂邾 - for(linenum = 0; linenum < ROOTMENU_SIZE ; linenum++) - { - if( linenum == line ) - { - // I𒆂̍ڂ͕\FĖ\ - PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET*linenum, TXT_COLOR_BLACK, (const u16 *)L"" ); - PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET*linenum, TXT_COLOR_GREEN, s_strMetaMenu[MENU_ROOT][linenum]) ; - } - else - { - PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET*linenum, TXT_COLOR_BLACK, s_strMetaMenu[MENU_ROOT][linenum]) ; - } - } - - } - else - { - for(linenum = s_pageOffset[menu][page] ; linenum < s_pageOffset[menu][page+1] ; linenum++) - { - if( linenum == s_pageOffset[menu][page] + line ) - { - // I𒆂̍ڂ͕\FĖ\ - PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET * gMenuKindOffset[menu][linenum], - TXT_COLOR_BLACK, (const u16 *)L"" ); - PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET * gMenuKindOffset[menu][linenum], - TXT_COLOR_GREEN, s_strMetaMenu[menu][linenum]) ; - } - else - { - PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET * gMenuKindOffset[menu][linenum], - TXT_COLOR_BLACK, s_strMetaMenu[menu][linenum]) ; - } - } - } -} - -void drawOwnerMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - // utf16ŕ`悷̂ - if( valueIdx == OWNER_NICKNAME ) - { - kindOffset[valueIdx] = drawKindOffset; - PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, gUserName) ; - } - else if( valueIdx == OWNER_COMMENT ) - { - kindOffset[valueIdx] = drawKindOffset; - PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, gUserComment) ; - } - else if( valueIdx == OWNER_COLOR ) - { - kindOffset[valueIdx] = drawKindOffset; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_UCOLOR_G5, "" ); - PrintfSJIS( VALUE_LEFT + LINE_OFFSET , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - - } - else - { - // sjisŕ`悷 - kindOffset[valueIdx] = drawKindOffset; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - } - -} - -void drawParentalMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - // utf16ŕ`悷̂ - if(valueIdx == PARENTAL_ANSWER) - { - kindOffset[valueIdx] = drawKindOffset; - PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, gSecretAnswer) ; - } - else - { - // sjisŕ`悷 - kindOffset[valueIdx] = drawKindOffset; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - } -} - - -void drawNormalHWMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - // `悵ÂłɃCfNXf[^ - kindOffset[valueIdx] = drawKindOffset; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - -} - - -void drawSecureHWMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - // sKvȍڂƕ`ʒu邽 - // `ItZbg𒲐鏈Kv - if( valueIdx >= SECURE_HW_FORCE_DISABLE && page == getPageNum( SECURE_HW_FORCE_DISABLE, pageOffset ) ) - { - drawLineOffset++; - } - - if( valueIdx > SECURE_HW_UNIQUE_ID && page == getPageNum( SECURE_HW_UNIQUE_ID, pageOffset ) ) - { - drawLineOffset += OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 / UNIQUE_BUF; - } - - // 悤ɍږ̃ItZbg - if( valueIdx > SECURE_HW_FORCE_DISABLE && page == getPageNum( SECURE_HW_FORCE_DISABLE, pageOffset ) ) - { - drawKindOffset++; - } - - if( valueIdx > SECURE_HW_UNIQUE_ID && page == getPageNum( SECURE_HW_UNIQUE_ID, pageOffset ) ) - { - drawKindOffset += OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 / UNIQUE_BUF; - } - - - // `悷A‚łɃCfNXf[^ - if( valueIdx == SECURE_HW_UNIQUE_ID ) - { - kindOffset[valueIdx] = drawKindOffset; - printUniqueID(drawLineOffset); - } - else - { - kindOffset[valueIdx] = drawKindOffset; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - } -} - -void drawSCFGARM7Menu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - kindOffset[valueIdx] = linenum; -} - -void drawSCFGARM9Menu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - kindOffset[valueIdx] = drawKindOffset; - -} - -void drawVersionMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) -{ - int drawLineOffset = linenum, drawKindOffset = linenum; - - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); - kindOffset[valueIdx] = drawKindOffset; - -} -*/ - -void printUniqueID( int drawLineOffset, char *uniqueId) -// j[NID𐮌`ďo -{ - char buf[UNIQUE_BUF+1]; - int i; - - for( i=0; i * UNIQUE_BUF < OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 ; i++) - { - strncpy(buf, &uniqueId[i * UNIQUE_BUF], UNIQUE_BUF); - buf[UNIQUE_BUF] = '\0'; - PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET * (drawLineOffset + i), TXT_COLOR_BLACK, buf ); - } - -} - -int getPageNum( int valueIdx, const int* pageOffset ) -// valueIdxy[Wڂɂ邩pageOffset璲ׂ -{ - int i; - - for( i=0; i < MAXITEM - 1; i++ ) - { - if( valueIdx > pageOffset[i] && valueIdx < pageOffset[i+1] ) - { - return i; - } - } - - return -1; -} - -const static int gRegisterIdx[2][SCFG_ARM7_MENU_SIZE] = { - // ARM7, ARM9SCFG̊eڂWX^ɂđΉĂ̂XgŋLq - - // ARM7 side - { - DISP_REG_SCFG_ROM_ARM9SEL_SHIFT, - DISP_REG_SCFG_ROM_ARM9RSEL_SHIFT, - DISP_REG_SCFG_ROM_ARM7SEL_SHIFT, - DISP_REG_SCFG_ROM_ARM7RSEL_SHIFT, - DISP_REG_SCFG_ROM_ARM7FUSE_SHIFT, - DISP_REG_SCFG_ROM_ROMWE_SHIFT, - - DISP_REG_SCFG_CLK_SD1HCLK_SHIFT + 32, - DISP_REG_SCFG_CLK_SD2HCLK_SHIFT + 32, - DISP_REG_SCFG_CLK_AESHCLK_SHIFT + 32, - DISP_REG_SCFG_CLK_WRAMHCLK_SHIFT + 32, - DISP_REG_SCFG_CLK_SNDMCLK_SHIFT + 32, - - DISP_REG_SCFG_JTAG_ARM7SEL_SHIFT + 48, - DISP_REG_SCFG_JTAG_CPUJE_SHIFT + 48, - DISP_REG_SCFG_JTAG_DSPJE_SHIFT + 48, - - DISP_REG_SCFG_EXT_DMA_SHIFT + 64, - DISP_REG_SCFG_EXT_SDMA_SHIFT + 64, - DISP_REG_SCFG_EXT_SND_SHIFT + 64, - DISP_REG_SCFG_EXT_MC_SHIFT + 64, - DISP_REG_SCFG_EXT_INTC_SHIFT + 64, - DISP_REG_SCFG_EXT_SPI_SHIFT + 64, - DISP_REG_SCFG_EXT_DSEL_SHIFT + 64, - DISP_REG_SCFG_EXT_SIO_SHIFT + 64, - DISP_REG_SCFG_EXT_LCDC_SHIFT + 64, - DISP_REG_SCFG_EXT_VRAM_SHIFT + 64, - DISP_REG_SCFG_EXT_PSRAM_SHIFT + 64, - DISP_REG_SCFG_EXT_DMAC_SHIFT + 64, - DISP_REG_SCFG_EXT_AES_SHIFT + 64, - DISP_REG_SCFG_EXT_SD1_SHIFT + 64, - DISP_REG_SCFG_EXT_SD2_SHIFT + 64, - DISP_REG_SCFG_EXT_MIC_SHIFT + 64, - DISP_REG_SCFG_EXT_I2S_SHIFT + 64, - DISP_REG_SCFG_EXT_I2C_SHIFT + 64, - DISP_REG_SCFG_EXT_GPIO_SHIFT + 64, - DISP_REG_SCFG_EXT_MC_B_SHIFT + 64, - DISP_REG_SCFG_EXT_WRAM_SHIFT + 64, - DISP_REG_SCFG_EXT_PUENABLE_SHIFT + 64, - DISP_REG_SCFG_EXT_CFG_SHIFT + 64, - - DISP_REG_MI_MC1_SL1_CDET_SHIFT + 96, - DISP_REG_MI_MC1_SL1_M0_SHIFT + 96, - DISP_REG_MI_MC1_SL2_CDET_SHIFT + 96, - DISP_REG_MI_MC1_SL2_M0_SHIFT + 96, - DISP_REG_MI_MC1_SWP_SHIFT + 96, - DISP_REG_MI_MC1_CC_SHIFT + 96, - - DISP_REG_MI_MC2_CA_SHIFT + 128, - - DISP_REG_SCFG_WL_OFFB_SHIFT + 144, - - DISP_REG_SCFG_OP_OP0_SHIFT + 160, - DISP_REG_SCFG_OP_OP0_SHIFT + 160 - }, - - // ARM9 side - { - REG_SCFG_A9ROM_SEC_SHIFT, - REG_SCFG_A9ROM_RSEL_SHIFT, - - REG_SCFG_CLK_CPUSPD_SHIFT + 16, - REG_SCFG_CLK_DSPHCLK_SHIFT + 16, - REG_SCFG_CLK_CAMHCLK_SHIFT + 16, - REG_SCFG_CLK_WRAMHCLK_SHIFT + 16, - REG_SCFG_CLK_CAMCKI_SHIFT + 16, - - REG_SCFG_RST_DSPRSTB_SHIFT + 32, - - REG_SCFG_EXT_DMA_SHIFT + 48, - REG_SCFG_EXT_GEO_SHIFT + 48, - REG_SCFG_EXT_REN_SHIFT + 48, - REG_SCFG_EXT_G2DE_SHIFT + 48, - REG_SCFG_EXT_DIV_SHIFT + 48, - REG_SCFG_EXT_MC_SHIFT + 48, - REG_SCFG_EXT_INTC_SHIFT + 48, - REG_SCFG_EXT_LCDC_SHIFT + 48, - REG_SCFG_EXT_VRAM_SHIFT + 48, - REG_SCFG_EXT_PSRAM_SHIFT + 48, - REG_SCFG_EXT_DMAC_SHIFT + 48, - REG_SCFG_EXT_CAM_SHIFT + 48, - REG_SCFG_EXT_DSP_SHIFT + 48, - REG_SCFG_EXT_MC_B_SHIFT + 48, - REG_SCFG_EXT_WRAM_SHIFT + 48, - REG_SCFG_EXT_CFG_SHIFT + 48, - - } -}; \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h deleted file mode 100644 index 50958e22..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h +++ /dev/null @@ -1,54 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: drawFunc.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __DRAW_FUNC__ -#define __DRAW_FUNC__ - -#include -#include "strResource.h" - -#ifdef __cplusplus -extern "C" { -#endif - - - - -// ej[TCY - -#define DISP_NUM_LINES 11 // y[W̍ڐ - -/* global variables ----------------- */ - -#define MAXITEM 50 -#define MAXPAGE 5 - -// eڂ\Ƃ̍sItZbg\ -extern int gMenuKindOffset[ROOTMENU_SIZE][MAXITEM]; - -/* function prototypes ----------------- */ - -void drawHeader( int menu, int line ); -void drawMenu( int menu, int line, int changeLine, u8 mode ); -void printResult( BOOL res ); -void switchViewMode( void ); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/build/tests/DisplaySystemInformation/ARM9/src/getInformation.h b/build/tests/DisplaySystemInformation/ARM9/src/getInformation.h deleted file mode 100644 index e861e041..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/getInformation.h +++ /dev/null @@ -1,59 +0,0 @@ - -#ifndef __DISPLAY_INFO_GETINFORMATION__ - -#include - -#define __DISPLAY_INFO_GETINFORMATION__ - -// ǂݍ݂ۂ -static BOOL firstRead; - -// NANDAv -extern s32 gNumContents; -extern OSTitleId *gContentsTitle; -extern u16 *gContentsVersion; - -#ifndef VERSION_VIEWER - -#define TWL_SYSMENU_VER_STR_LEN 28 // VXej[o[WMAX bytes -#define TWL_EULA_URL_LEN 128 -#define TWL_NUP_HOSTNAME_LEN 64 - -#define NUM_FONT_INFO 3 // tHg“̃j[BOATCYAnbV̎O - -typedef struct FontInfo{ - u8 *name; // O - u32 size; // 傫 - u8 *data; // f[^{ - u8 *hash; // f[^̃nbVl - BOOL isHashOK; // nbVlm̂̂ƈv邩 -} FontInfo; - - - -// LtHg -extern FontInfo gFontInfo[ OS_SHARED_FONT_MAX ]; - -// LCFGf[^ǂݍނ߂̃obt@ -extern u8 *bufLCFG; - -#endif // ifndef VERSION_VIEWER - -void getVersions( void ); -void getContentsVersion( void ); - -#ifndef VERSION_VIEWER -void getSysmenuInfo( void ); -void getSCFGInfo( void ); -void getOwnerInfo( void ); -void getHWInfo( void ); -void getParentalInfo( void ); -void getOtherInfo( void ); -void getSecureUserInfo( void ); -void getFontInfo( void ); -void getWLInfo( void ); -void getWhiteListInfo( void ); - -#endif // ifndef VERSION_VIEWER - -#endif // ifdef __DISPLAY_INFO_GETINFORMATION__ \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_font.c b/build/tests/DisplaySystemInformation/ARM9/src/get_font.c deleted file mode 100644 index 843b8679..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_font.c +++ /dev/null @@ -1,118 +0,0 @@ -#include -#include - -#include "misc.h" -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" -#include "util.h" - -#define NUM_FONT_HASHDATA 3 - -const static char* s_strFontHash[] = { - "07381F6C1FF7421BA309196FA9FC750706B031AD", - "EF271DAD8B67EDB3DDE2655C6C35288D1334132D", - "28e68d0496ab28d7f082b70fc8f4f9081dee2ccc" -}; - -FontInfo gFontInfo[ OS_SHARED_FONT_MAX ]; - -void loadFontName( OSSharedFontIndex idx ); -void loadFont( OSSharedFontIndex idx ); -void releaseFont( OSSharedFontIndex idx ); -BOOL checkFontHash( OSSharedFontIndex idx ); - - -void getFontInfo( void ) -{ - u32 time; - int tableSize = 0; - u8 *tableBuf; - OSSharedFontIndex fontIdx; - - OS_InitSharedFont(); - - // tHge[uobt@̊m - tableSize = OS_GetSharedFontTableSize(); - tableBuf = (u8*) Alloc ( (u32)tableSize ); - SDK_ASSERT( tableBuf ); - - time = OS_GetSharedFontTimestamp(); - OS_TPrintf("SharedFont Time Stamp %08lx\n", time ); - gAllInfo[MENU_FONT][FONT_TIMESTAMP].iValue = (int) time; - gAllInfo[MENU_FONT][FONT_TIMESTAMP].isNumData = TRUE; - - if( ! OS_LoadSharedFontTable( (void*)tableBuf ) ) - { - OS_TPrintf("Loading shared font table failed.\n"); - Free(tableBuf); - return; - } - - for( fontIdx = (OSSharedFontIndex) 0; fontIdx < OS_SHARED_FONT_MAX; fontIdx++ ) - { - loadFontName( fontIdx ); - - // TCY擾 - gFontInfo[fontIdx].size = (u32) OS_GetSharedFontSize( (OSSharedFontIndex)fontIdx ); - - loadFont( fontIdx ); - gFontInfo[fontIdx].isHashOK = checkFontHash( fontIdx ); - releaseFont( fontIdx ); - } - - Free(tableBuf); - s_numMenu[MENU_FONT] = FONT_INFO + ( NUM_FONT_INFO * OS_SHARED_FONT_MAX ); -} - -void loadFontName( OSSharedFontIndex idx ) -{ - // O擾 - const u8* fontName = OS_GetSharedFontName( (OSSharedFontIndex)idx ); - int fontNameLength = STD_StrLen( (char*)fontName ); - - OS_TPrintf("fontname length: %d\n", fontNameLength ); - if( gFontInfo[idx].name == NULL ){ - // ÔƂɃ蓖ĂĂȂ肵 - - gFontInfo[idx].name = (u8*) Alloc ( sizeof(u8) * (fontNameLength + 1) ); - } - - SDK_ASSERT( gFontInfo[idx].name ); - STD_StrLCpy( (char*)gFontInfo[idx].name, (char*)fontName, fontNameLength + 1 ); -} - -void loadFont( OSSharedFontIndex idx ) -{ - // łʂɕiKvȂ킯Ȃ烁mۂ̂߂ɂ - // nbVlIJ悤ɂ邩ȁH - if( gFontInfo[idx].data == NULL ) - { - // f[^obt@Ƀ蓖ĂĂȂA - // 肵ꍇ͊蓖ĂȂB - - gFontInfo[idx].data = (u8*) Alloc ( gFontInfo[idx].size ); - } - - SDK_ASSERT( gFontInfo[idx].data ); - OS_LoadSharedFont( idx, (void*)gFontInfo[idx].data ); -} - -void releaseFont( OSSharedFontIndex idx ) -{ - if( gFontInfo[idx].data != NULL ) - { - Free( gFontInfo[idx].data ); - } -} - -BOOL checkFontHash( OSSharedFontIndex idx ) -{ - u8 digestBuf[MATH_SHA1_DIGEST_SIZE], cmpBuf[MATH_SHA1_DIGEST_SIZE]; - - // ԁAؗpꂼ̃nbVZo - strToHexa( s_strFontHash[idx], cmpBuf, MATH_SHA1_DIGEST_SIZE ); - MATH_CalcSHA1( digestBuf, gFontInfo[idx].data , gFontInfo[idx].size ); - - return MI_CpuComp8( cmpBuf, digestBuf, MATH_SHA1_DIGEST_SIZE ) == 0; -} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_hw.c b/build/tests/DisplaySystemInformation/ARM9/src/get_hw.c deleted file mode 100644 index 4d69760e..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_hw.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -//#include -#include -#include - - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - -void getNormalHWInfo( void ); -void getSecureHWInfo( void ); - -void getHWInfo( void ) -{ - getNormalHWInfo(); - getSecureHWInfo(); -} - - -void getNormalHWInfo( void ) -{ - int value; - - - if( LCFG_ReadHWNormalInfo() ) - { - value = (int)LCFG_THW_GetRTCAdjust(); - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_RTC_ADJUST].iValue = value; - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_RTC_ADJUST].isNumData = TRUE; - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_RTC_ADJUST].fromLCFG = TRUE; - } - { - int i; - char ascii[] = "0123456789abcdef"; - const u8 *unq = OS_GetMovableUniqueIDPtr(); - // 16i1oCg‹l߂Ă - // obt@3{Ȃ̂́Af[^"%02x-%02x-%02x..."ɒu邽 - for(i=0; i < OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3; i += 3, unq++ ) - { - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_UNIQUE_ID].str.sjis[i] = ascii[(*unq>>4) & 0x0f]; - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_UNIQUE_ID].str.sjis[i+1] = ascii[*unq & 0x0f]; - gAllInfo[MENU_NORMAL_HW][NORMAL_HW_UNIQUE_ID].str.sjis[i+2] = - (i+2) == (OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 - 1) ? (char)'\0' : (char)'-' ; - OS_TPrintf("uniqid: %d\n", *unq); - } - } - -} - -void getSecureHWInfo( void ) -{ - int value; - - value = OS_IsForceDisableWireless(); - gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].iValue = value; - gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].str.sjis = s_strBool[ value ]; - gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].isAligned = FALSE; - gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].numLines = 2; - - value = OS_GetRegion(); - gAllInfo[MENU_SECURE_HW][SECURE_HW_REGION].iValue = value; - gAllInfo[MENU_SECURE_HW][SECURE_HW_REGION].str.sjis = s_strRegion[ value ]; - - { - u8 serialBuf[OS_TWL_HWINFO_SERIALNO_LEN_MAX]; - OS_GetSerialNo( serialBuf ); - snprintf( gAllInfo[MENU_SECURE_HW][SECURE_HW_SERIAL].str.sjis , OS_TWL_HWINFO_SERIALNO_LEN_MAX, "%s", serialBuf); - } - - { - u64 buf; - buf = OS_GetValidLanguageBitmap(); - OS_TPrintf("language bitmap : %lx\n", buf ); - snprintf( gAllInfo[MENU_SECURE_HW][SECURE_HW_LANGUAGE].str.sjis , - DISPINFO_BUFSIZE-1, "%08lx", OS_GetValidLanguageBitmap() ); - - - // fuseRomf[^̓ǂݏo - // secureȃAvȊO̓n[hIɐ؂藣̂Ń[ɂȂ - buf = SCFG_ReadFuseData(); - OS_TPrintf("fuse data : %016llx\n", buf); - snprintf( gAllInfo[MENU_SECURE_HW][SECURE_HW_FUSE].str.sjis , - DISPINFO_BUFSIZE-1, "%016llx", SCFG_ReadFuseData() ); - gAllInfo[MENU_SECURE_HW][SECURE_HW_FUSE].numLines = 2; - - } - - // `̃^CgIDLo̎擾 - if( LCFG_ReadHWSecureInfo() ) - { - const u8 *titleIDLo = LCFG_THW_GetLauncherTitleID_LoPtr(); - value = ( int )( titleIDLo[0] << 8*3 | - titleIDLo[1] << 8*2 | - titleIDLo[2] << 8*1 | - titleIDLo[3] << 8*0 ); - - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].iValue = value; - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].isNumData = TRUE; - } - else - { - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].str.sjis = s_strNA; - } - - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].isAligned = FALSE; - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].numLines = 2; - gAllInfo[MENU_SECURE_HW][SECURE_HW_LAUNCHER_ID].fromLCFG = TRUE; - -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_other.c b/build/tests/DisplaySystemInformation/ARM9/src/get_other.c deleted file mode 100644 index 2b53a7d1..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_other.c +++ /dev/null @@ -1,69 +0,0 @@ -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - -void getOtherInfo( void ) -{ - // ̕ӂ}NŐ - s64 rtcoffset; - int value; - LCFGTWLTPCalibData tpdata; - - value = OS_IsAgreeEULA(); - gAllInfo[MENU_OTHER][OTHER_AGREE_EULA].iValue = value; - gAllInfo[MENU_OTHER][OTHER_AGREE_EULA].str.sjis = s_strBool[value]; - - gAllInfo[MENU_OTHER][OTHER_EULA_VERSION].iValue = OS_GetAgreedEULAVersion(); - gAllInfo[MENU_OTHER][OTHER_EULA_VERSION].isNumData = TRUE; - - value = OS_IsAvailableWireless(); - gAllInfo[MENU_OTHER][OTHER_WIRELESS].iValue = value; - gAllInfo[MENU_OTHER][OTHER_WIRELESS].str.sjis = s_strEnable[value]; - - rtcoffset = OS_GetOwnerRtcOffset(); - snprintf( gAllInfo[MENU_OTHER][OTHER_RTC_OFFSET].str.sjis, - DISPINFO_BUFSIZE-1, "%016llx", rtcoffset ); - gAllInfo[MENU_OTHER][OTHER_RTC_OFFSET].numLines = 2; - - LCFG_TSD_GetTPCalibration( &tpdata ); - gAllInfo[MENU_OTHER][OTHER_TP_RAWX1].iValue = tpdata.data.raw_x1; - gAllInfo[MENU_OTHER][OTHER_TP_RAWX1].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_RAWX1].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_RAWX2].iValue = tpdata.data.raw_x2; - gAllInfo[MENU_OTHER][OTHER_TP_RAWX2].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_RAWX2].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_DX1].iValue = tpdata.data.dx1; - gAllInfo[MENU_OTHER][OTHER_TP_DX1].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_DX1].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_DY1].iValue = tpdata.data.dy1; - gAllInfo[MENU_OTHER][OTHER_TP_DY1].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_DY1].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_RAWY1].iValue = tpdata.data.raw_y1; - gAllInfo[MENU_OTHER][OTHER_TP_RAWY1].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_RAWY1].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_RAWY2].iValue = tpdata.data.raw_y2; - gAllInfo[MENU_OTHER][OTHER_TP_RAWY2].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_RAWY2].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_DX2].iValue = tpdata.data.dx2; - gAllInfo[MENU_OTHER][OTHER_TP_DX2].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_DX2].fromLCFG = TRUE; - - gAllInfo[MENU_OTHER][OTHER_TP_DY2].iValue = tpdata.data.dy2; - gAllInfo[MENU_OTHER][OTHER_TP_DY2].isNumData = TRUE; - gAllInfo[MENU_OTHER][OTHER_TP_DY2].fromLCFG = TRUE; - - snprintf( gAllInfo[MENU_OTHER][OTHER_TP_RSV].str.sjis, - DISPINFO_BUFSIZE, "%016llx", MI_LoadLE64( tpdata.rsv ) ); - gAllInfo[MENU_OTHER][OTHER_TP_RSV].fromLCFG = TRUE; - - -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_owner.c b/build/tests/DisplaySystemInformation/ARM9/src/get_owner.c deleted file mode 100644 index bc9246b4..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_owner.c +++ /dev/null @@ -1,37 +0,0 @@ -#include -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - - -void getOwnerInfo( void ) -// I[i[擾 -{ - OSOwnerInfoEx ownerInfo; - - OS_TPrintf( "...Owner Information\n"); - // {̐ݒ܂ - OS_GetOwnerInfoEx( &ownerInfo ); - - // S̏ɂ‚߂Ă - // DLȂ̂łƂōl - gAllInfo[MENU_OWNER][OWNER_LANGUAGE].str.sjis = s_strLanguage[ ownerInfo.language ]; - gAllInfo[MENU_OWNER][OWNER_LANGUAGE].iValue = ownerInfo.language; - - gAllInfo[MENU_OWNER][OWNER_COLOR].str.sjis = s_strUserColor[ ownerInfo.favoriteColor ]; - gAllInfo[MENU_OWNER][OWNER_COLOR].iValue = ownerInfo.favoriteColor; - - snprintf( gAllInfo[MENU_OWNER][OWNER_BIRTHDAY].str.sjis, DISPINFO_BUFSIZE-1, "%02d/%02d", ownerInfo.birthday.month, ownerInfo.birthday.day); - gAllInfo[MENU_OWNER][OWNER_BIRTHDAY].iValue = ownerInfo.birthday.month * 100 + ownerInfo.birthday.day; - - gAllInfo[MENU_OWNER][OWNER_COUNTRY].str.sjis = s_strCountry[ownerInfo.country]; - gAllInfo[MENU_OWNER][OWNER_COUNTRY].iValue = ownerInfo.country; - - wcsncpy( gAllInfo[MENU_OWNER][OWNER_NICKNAME].str.utf , ownerInfo.nickName, OS_OWNERINFO_NICKNAME_MAX + 1); - gAllInfo[MENU_OWNER][OWNER_NICKNAME].isSjis = FALSE; - wcsncpy( gAllInfo[MENU_OWNER][OWNER_COMMENT].str.utf , ownerInfo.comment, OS_OWNERINFO_COMMENT_MAX + 1 ); - gAllInfo[MENU_OWNER][OWNER_COMMENT].isSjis = FALSE; -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_parental.c b/build/tests/DisplaySystemInformation/ARM9/src/get_parental.c deleted file mode 100644 index 3e0021ca..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_parental.c +++ /dev/null @@ -1,53 +0,0 @@ -#include -#include -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - -void getParentalInfo( void ) -// yA^Rg[擾 -{ - // yA^Rg[܂ - const LCFGTWLParentalControl *pPC = (const LCFGTWLParentalControl *) OS_GetParentalControlInfoPtr(); - - OS_TPrintf( "...Parental Control Information\n" ); - - gAllInfo[MENU_PARENTAL][PARENTAL_FLAG].str.sjis = s_strBool[ pPC->flags.isSetParentalControl ]; - gAllInfo[MENU_PARENTAL][PARENTAL_FLAG].iValue = (int) pPC->flags.isSetParentalControl; - - gAllInfo[MENU_PARENTAL][PARENTAL_PICTOCHAT].str.sjis = s_strBool[ pPC->flags.pictoChat ]; - gAllInfo[MENU_PARENTAL][PARENTAL_PICTOCHAT].iValue = (int) pPC->flags.pictoChat; - - gAllInfo[MENU_PARENTAL][PARENTAL_DOWNLOAD].str.sjis = s_strBool[ pPC->flags.dsDownload ]; - gAllInfo[MENU_PARENTAL][PARENTAL_DOWNLOAD].iValue = (int) pPC->flags.dsDownload; - - gAllInfo[MENU_PARENTAL][PARENTAL_BROWSER].str.sjis = s_strBool[ pPC->flags.browser ]; - gAllInfo[MENU_PARENTAL][PARENTAL_BROWSER].iValue = (int) pPC->flags.browser; - - gAllInfo[MENU_PARENTAL][PARENTAL_WIIPOINT].str.sjis = s_strBool[ pPC->flags.wiiPoint ]; - gAllInfo[MENU_PARENTAL][PARENTAL_WIIPOINT].iValue = (int) pPC->flags.wiiPoint; - - gAllInfo[MENU_PARENTAL][PARENTAL_PHOTO_EXCHANGE].str.sjis = s_strBool[ pPC->flags.photoExchange ]; - gAllInfo[MENU_PARENTAL][PARENTAL_PHOTO_EXCHANGE].iValue = (int) pPC->flags.photoExchange; - - gAllInfo[MENU_PARENTAL][PARENTAL_UGC].str.sjis = s_strBool[ pPC->flags.ugc ]; - gAllInfo[MENU_PARENTAL][PARENTAL_UGC].iValue = (int) pPC->flags.ugc; - - gAllInfo[MENU_PARENTAL][PARENTAL_ORGANIZATION].str.sjis = s_strRatingOrg[ pPC->ogn ]; - gAllInfo[MENU_PARENTAL][PARENTAL_ORGANIZATION].iValue = (int) pPC->ogn; - - gAllInfo[MENU_PARENTAL][PARENTAL_AGE].iValue = pPC->ratingAge; - gAllInfo[MENU_PARENTAL][PARENTAL_AGE].isNumData = TRUE; - - gAllInfo[MENU_PARENTAL][PARENTAL_QUESTION_ID].iValue = pPC->secretQuestionID; - gAllInfo[MENU_PARENTAL][PARENTAL_QUESTION_ID].isNumData = TRUE; - - gAllInfo[MENU_PARENTAL][PARENTAL_PASSWORD].iValue = atoi( pPC->password ) ; - gAllInfo[MENU_PARENTAL][PARENTAL_PASSWORD].isNumData = TRUE; - - wcsncpy( gAllInfo[MENU_PARENTAL][PARENTAL_ANSWER].str.utf , pPC->secretAnswer, OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1); - gAllInfo[MENU_PARENTAL][PARENTAL_ANSWER].isSjis = FALSE; -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_scfg.c b/build/tests/DisplaySystemInformation/ARM9/src/get_scfg.c deleted file mode 100644 index bd9b96e4..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_scfg.c +++ /dev/null @@ -1,1137 +0,0 @@ - -#include -#include "getInformation.h" -#include "viewSystemInfo.h" -#include "strResource.h" -#include "myIoreg_SCFG.h" -//#include "misc.h" - -void getSCFGARM9Info( void ); -void getSCFGARM7InfoReg( void ); -void getSCFGARM7InfoShared( void ); -void setSCFGAccessFlag( BOOL flag ); -void setPsramBoundaryFlag( int idx ); -void setDSPResetFlag( BOOL flag ); -BOOL scfgTotalCheck( void ); -void getTotalCheckResult( void ); -u64 getArm7CheckData( BOOL isSecure, BOOL isNandAccessable, BOOL isVisibleSCFG, BOOL isDebugger ); -u32 getArm9CheckData( void ); - -void getSCFGInfo( void ) -{ - getSCFGARM9Info(); - getSCFGARM7InfoReg(); - getSCFGARM7InfoShared(); - getTotalCheckResult(); -} - -void getSCFGARM9Info( void ) -// ARM9Ŏ擾łSCFG擾 -// ARM9SCFGAPI̓WX^𒼐ڎQƂĂ̂ŁAAPIgĂWX^𒼐ڌĂl -{ - int value; - - // ROM䃌WX^ - - // IsSecureRomAccessible̕Ԃl̓WX^rbg] - value = !SCFG_IsSecureRomAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_SEC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_SEC].str.sjis = s_strJoint[ value ]; - - value = SCFG_GetSystemRomType() == SCFG_SYSTEM_ROM_FOR_NITRO; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_STATE].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_STATE].str.sjis = s_strRomMode[ value ]; - - // NbN䃌WX^ - value = SCFG_GetCpuSpeed(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].str.sjis = s_strCpuSpeed[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].changeFunc.cBool = SCFG_SetCpuSpeed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].kindNameList = s_strCpuSpeed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].numKindName = 2; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].changable = TRUE; - - value = SCFG_IsClockSuppliedToDSP(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].str.sjis = s_strSupply[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].changeFunc.cBool = SCFG_SupplyClockToDSP; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].kindNameList = s_strSupply; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].numKindName = 2; - - value = SCFG_IsClockSuppliedToCamera(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].str.sjis = s_strSupply[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].changeFunc.cBool = SCFG_SupplyClockToCamera; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].kindNameList = s_strSupply; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].numKindName = 2; - - value = SCFG_IsClockSuppliedToWram(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_WRAM].str.sjis = s_strSupply[ value ]; - - value = SCFG_IsCameraCKIClockEnable(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].changeFunc.cBool = SCFG_SetCameraCKIClock; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].numKindName = 2; - - // VKubN䃌WX^ - value = ! SCFG_IsDSPReset(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].str.sjis = s_strBool[ !value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].kindNameList = s_strBool; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].changeFunc.cBool = setDSPResetFlag; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].numKindName = 2; - - // g@\䃌WX^ - - value = SCFG_IsDmacFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].changeFunc.cBool = SCFG_SetDmacFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].numKindName = 2; - - value = SCFG_IsGeometryFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].changeFunc.cBool = SCFG_SetGeometryFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].numKindName = 2; - - value = SCFG_IsRendererFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].changeFunc.cBool = SCFG_SetRendererFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].numKindName = 2; - - value = SCFG_Is2DEngineFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].changeFunc.cBool = SCFG_Set2DEngineFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].numKindName = 2; - - value = SCFG_IsDividerFixed(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].changeFunc.cBool = SCFG_SetDividerFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].numKindName = 2; - - value = SCFG_IsCardFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].changeFunc.cBool = SCFG_SetCardFixed; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].numKindName = 2; - - value = SCFG_IsIntcExpanded(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].changeFunc.cBool = SCFG_SetIntcExpanded; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].numKindName = 2; - - value = SCFG_IsLCDCExpanded(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].changeFunc.cBool = SCFG_SetLCDCExpanded; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].numKindName = 2; - - value = SCFG_IsVRAMExpanded(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].changeFunc.cBool = SCFG_SetVRAMExpanded; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].kindNameList = s_strEnable; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].numKindName = 2; - - { - u8 idx; - value = SCFG_GetPsramdBoundary(); - - if( value == SCFG_PSRAM_BOUNDARY_4MB ) - { - idx = 0; - } - else if ( value == SCFG_PSRAM_BOUNDARY_16MB ) - { - idx = 1; - } - else if ( value == SCFG_PSRAM_BOUNDARY_32MB ) - { - idx = 2; - } - - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].iValue = idx; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].str.sjis = s_strPSRAM[ idx ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].argType = ARG_INT; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].kindNameList = s_strPSRAM; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].numKindName = 3; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].changeFunc.cInt = setPsramBoundaryFlag; - } - - value = SCFG_IsNDmaAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].str.sjis = s_strAccess[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].changeFunc.cBool = SCFG_SetNDmaAccessible; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].kindNameList = s_strAccess; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].numKindName = 2; - - value = SCFG_IsCameraAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].str.sjis = s_strAccess[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].changeFunc.cBool = SCFG_SetCameraAccessible; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].kindNameList = s_strAccess; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].numKindName = 2; - - value = SCFG_IsDSPAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].str.sjis = s_strAccess[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].changeFunc.cBool = SCFG_SetDSPAccessible; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].kindNameList = s_strAccess; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].numKindName = 2; - - value = (reg_SCFG_EXT & REG_SCFG_EXT_MC_B_MASK) || 0; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MCB].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MCB].str.sjis = s_strAccess[ value ]; - - value = SCFG_IsWRAMAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_WRAM].str.sjis = s_strAccess[ value ]; - - value = SCFG_IsConfigBlockAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].str.sjis = s_strAccess[ value ]; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].changable = TRUE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].argType = ARG_BOOL; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].kindNameList = s_strAccess; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].changeFunc.cBool = setSCFGAccessFlag; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].numKindName = 2; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].numLines = 2; - -} - -void getSCFGARM7InfoReg( void ) -{ - // WX^ɒڊi[ĂقSCFGf[^擾 - - - int value; - - // ROM䃌WX^(L)A(H) - { - // SECtOTRUE = ؂藣(ANZXs), FALSE = ڑ(ANZX) - value = ( gArm7SCFGReg[DISP_REG_A9ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A9ROM_SEC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].str.sjis = s_strJoint[ value ]; - - value = ( gArm7SCFGReg[DISP_REG_A9ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A9ROM_RSEL_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].str.sjis = s_strRomMode[ value ]; - - // SECtOTRUE = ؂藣(ANZXs), FALSE = ڑ(ANZX) - value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_SEC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].str.sjis = s_strJoint[ value ]; - - value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_RSEL_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].str.sjis = s_strRomMode[ value ]; - - // FuseROMtOTRUE = ؂藣(ANZXs), FALSE = ڑ(ANZX) - value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_FUSE_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].str.sjis = s_strJoint[ value ]; - - value = ( gArm7SCFGReg[DISP_REG_ROMWE_OFFSET - 0x4000] & DISP_REG_SCFG_ROMWE_WE_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].str.sjis = s_strEnable[ value ]; - } - - // VKubNNbN䃌WX^ - { - u16 flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_CLK_OFFSET - 0x4000] ); - - value = ( flag & DISP_REG_SCFG_CLK_SD1HCLK_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].str.sjis = s_strSupply[ value ]; - - value = ( flag & DISP_REG_SCFG_CLK_SD2HCLK_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].str.sjis = s_strSupply[ value ]; - - value = ( flag & DISP_REG_SCFG_CLK_AESHCLK_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].str.sjis = s_strSupply[ value ]; - - value = ( flag & DISP_REG_SCFG_CLK_WRAMHCLK_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].str.sjis = s_strSupply[ value ]; - - value = ( flag & DISP_REG_SCFG_CLK_SNDMCLK_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].str.sjis = s_strSupply[ value ]; - } - - // JTAG䃌WX^ - { - u16 flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_JTAG_OFFSET - 0x4000] ); - - value = ( flag & DISP_REG_SCFG_JTAG_ARM7SEL_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].numLines = 2; - - value = ( flag & DISP_REG_SCFG_JTAG_CPUJE_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_CPU].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_CPU].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_JTAG_DSPJE_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_DSP].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_DSP].str.sjis = s_strEnable[ value ]; - } - - // g@\䃌WX^ - { - u32 flag = MI_LoadLE32( &gArm7SCFGReg[DISP_REG_EXT_OFFSET - 0x4000] ); - - value = ( flag & DISP_REG_SCFG_EXT_DMA_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_SDMA_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_SND_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_MC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].numLines = 2; - - value = ( flag & DISP_REG_SCFG_EXT_INTC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].numLines = 2; - - value = ( flag & DISP_REG_SCFG_EXT_SPI_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_DSEL_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].numLines = 2; - - value = ( flag & DISP_REG_SCFG_EXT_SIO_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_LCDC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_VRAM_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].str.sjis = s_strEnable[ value ]; - - { - u8 idx = 0; - value = (int) ( (flag & DISP_REG_SCFG_EXT_PSRAM_MASK) >> DISP_REG_SCFG_EXT_PSRAM_SHIFT ); - - - if( value <= 1 ) - { - idx = 0; - } - else if ( value == 2 ) - { - idx = 1; - } - else if ( value == 3 ) - { - idx = 2; - } - - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].str.sjis = s_strPSRAM[idx]; - } - - value = ( flag & DISP_REG_SCFG_EXT_DMAC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_AES_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_SD1_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_SD2_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_MIC_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_I2S_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_I2C_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_GPIO_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_MC_B_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_WRAM_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_PUENABLE_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].str.sjis = s_strEnable[ value ]; - - value = ( flag & DISP_REG_SCFG_EXT_CFG_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].str.sjis = s_strEnable[ value ]; - - } - - // J[h I/F 䃌WX^ - { - u16 flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MC_OFFSET - 0x4000] ); - - value = ( flag & DISP_REG_MI_MC_SL1_CDET_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].str.sjis = s_strBool[ value ]; - - value = ( flag & DISP_REG_MI_MC_SL2_CDET_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_CDET].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_CDET].str.sjis = s_strBool[ value ]; - - value = ( flag & DISP_REG_MI_MC_SWP_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SWP].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SWP].str.sjis = s_strBool[ value ]; - - value = (flag & DISP_REG_MI_MC_SL1_MODE_MASK) >> DISP_REG_MI_MC_SL1_MODE_SHIFT ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_MODE].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_MODE].str.sjis = s_strMCMode[value]; - - value = (flag & DISP_REG_MI_MC_SL2_MODE_MASK) >> DISP_REG_MI_MC_SL2_MODE_SHIFT; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_MODE].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_MODE].str.sjis = s_strMCMode[value]; - - flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MCCHAT_OFFSET - 0x4000] ); - value = (flag & DISP_REG_MI_MCCHAT_CC_MASK) >> DISP_REG_MI_MCCHAT_CC_SHIFT; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CC].iValue = value; - snprintf( gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CC].str.sjis , DISPINFO_BUFSIZE-1, "%04x", value); - - flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MC2_OFFSET - 0x4000] ); - value = (flag & DISP_REG_MI_MC2_CA_MASK ) >> DISP_REG_MI_MC2_CA_SHIFT; - ;gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CA].iValue = value; - snprintf( gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CA].str.sjis , DISPINFO_BUFSIZE-1, "%04x", value ); - } - - // M䃌WX^ - { - u8 flag = gArm7SCFGReg[DISP_REG_WL_OFFSET - 0x4000]; - - value = ( flag & DISP_REG_SCFG_WL_OFFB_MASK ) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_WL_OFFB].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_WL_OFFB].str.sjis = s_strEnable[ value ]; - } - - // IvV[qǂݏoWX^ - { - - u8 flag = gArm7SCFGReg[DISP_REG_OP_OFFSET - 0x4000]; - value = (flag & DISP_REG_SCFG_OP_OPT_MASK) >> DISP_REG_SCFG_OP_OPT_SHIFT; - - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_OP_FORM].iValue = (value & 0x2) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_OP_FORM].str.sjis = value == 3 ? s_strRomForm[1] : s_strRomForm[0]; - - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_OP_APP].iValue = (value & 0x1) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_OP_APP].str.sjis = s_strRomApp[ value ]; - } -} - -void getSCFGARM7InfoShared( void ) -{ - // L̈ɑޔꂽقSCFGf[^擾 - int value; - - // g@\䃌WX^ (4byte) - { - u32 extData = MI_LoadLE32( &gArm7SCFGShared[HWi_WSYS04_OFFSET] ); - - value = (extData & DISP_REG_SCFG_EXT_DMA_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMA].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMA].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_SDMA_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SDMA].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SDMA].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_SND_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SND].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SND].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_MC_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].numLines = 2; - - value = (extData & DISP_REG_SCFG_EXT_INTC_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].numLines = 2; - - value = (extData & DISP_REG_SCFG_EXT_SPI_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SPI].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SPI].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_DSEL_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].str.sjis = s_strEnable[ value ]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].numLines = 2; - - value = (extData & DISP_REG_SCFG_EXT_LCDC_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_LCDC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_LCDC].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_VRAM_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_VRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_VRAM].str.sjis = s_strEnable[ value ]; - - { - u8 idx = 0; - value = (int) ( (extData & HWi_WSYS04_EXT_PSRAM_MASK ) >> HWi_WSYS04_EXT_PSRAM_SHIFT ); - - if( value <= 1 ) - { - idx = 0; - } - else if ( value == 2 ) - { - idx = 1; - } - else if ( value == 3 ) - { - idx = 2; - } - - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PS].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PS].str.sjis = s_strPSRAM[idx]; - } - - value = (extData & DISP_REG_SCFG_EXT_DMAC_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMAC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMAC].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_AES_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_AES].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_AES].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_SD1_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD1].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD1].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_SD2_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD2].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD2].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_MIC_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MIC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MIC].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_I2S_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2S].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2S].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_I2C_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2C].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2C].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_GPIO_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_GPIO].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_GPIO].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_MC_B_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MCB].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MCB].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_WRAM_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_WRAM].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_PUENABLE_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PU].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PU].str.sjis = s_strEnable[ value ]; - - value = (extData & DISP_REG_SCFG_EXT_CFG_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_CFG].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_CFG].str.sjis = s_strEnable[ value ]; - } - - // {fBOAromԁAWX^ ( 1byte ) - { - u8 regData = gArm7SCFGShared[HWi_WSYS08_OFFSET]; - - value = (regData & HWi_WSYS08_OP_OPT_MASK) >> HWi_WSYS08_OP_OPT_SHIFT ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_FORM].iValue = (value & 0x2) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_FORM].str.sjis = value == 3 ? s_strRomForm[1] : s_strRomForm[0]; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_APP].iValue = (value & 0x1) || 0 ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_APP].str.sjis = s_strRomApp[ value ]; - - // rom - value = ( regData & HWi_WSYS08_ROM_ARM9SEC_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_SEC ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_SEC ].str.sjis = s_strJoint[ value ] ; - - value = ( regData & HWi_WSYS08_ROM_ARM9RSEL_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_RSEL ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_RSEL ].str.sjis = s_strRomMode[value] ; - - value = ( regData & HWi_WSYS08_ROM_ARM7RSEL_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_RSEL ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_RSEL ].str.sjis = s_strRomMode[value] ; - - value = ( regData & HWi_WSYS08_ROM_ARM7FUSE_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_FUSE ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_FUSE ].str.sjis = s_strJoint[ value ] ; - - // - value = ( regData & HWi_WSYS08_WL_OFFB_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_WL_OFFB ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_WL_OFFB ].str.sjis = s_strEnable[value] ; - - } - - // jtagAclkWX^ ( 1byte ) - { - u8 regData = gArm7SCFGShared[HWi_WSYS09_OFFSET]; - - value = ( regData & HWi_WSYS09_JTAG_ARM7SEL_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].str.sjis = s_strEnable[value] ; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].isAligned = FALSE; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].numLines = 2; - - value = ( regData & HWi_WSYS09_JTAG_CPUJE_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_CPU ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_CPU ].str.sjis = s_strEnable[value] ; - - value = ( regData & HWi_WSYS09_JTAG_DSPJE_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_DSP ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_DSP ].str.sjis = s_strEnable[value] ; - - value = ( regData & HWi_WSYS09_CLK_SD1HCLK_MASK) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD1 ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD1 ].str.sjis = s_strSupply[value] ; - - value = ( regData & HWi_WSYS09_CLK_SD2HCLK_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD2 ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD2 ].str.sjis = s_strSupply[value] ; - - value = ( regData & HWi_WSYS09_CLK_AESHCLK_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_AES ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_AES ].str.sjis = s_strSupply[value] ; - - value = ( regData & HWi_WSYS09_CLK_WRAMHCLK_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_WRAM ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_WRAM].str.sjis = s_strSupply[value] ; - - value = ( regData & HWi_WSYS09_CLK_SNDMCLK_MASK ) || 0; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SND ].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SND ].str.sjis = s_strSupply[value] ; - } -} - -void setDSPResetFlag( BOOL flag ) -{ - if( flag ) - { - SCFG_ResetDSP(); - } - else - { - SCFG_ReleaseResetDSP(); - } -} - -void setPsramBoundaryFlag( int idx ) -{ - SCFGPsramBoundary value; - - if( idx < 0 || 2 < idx ) - { - return; - } - - OS_TPrintf("call setPsramBoundary( %d )\n", idx ); - - switch( idx ) - { - case 0: - value = SCFG_PSRAM_BOUNDARY_4MB; - break; - - case 1: - value = SCFG_PSRAM_BOUNDARY_16MB; - break; - - case 2: - value = SCFG_PSRAM_BOUNDARY_32MB; - break; - } - - SCFG_SetPsramBoundary( value ); -} - -void setSCFGAccessFlag( BOOL flag ) -{ - // Inaccessible = falseȂ̂ŃtO] - if( !flag ) - { - SCFG_SetConfigBlockInaccessible(); - } -} - -void getTotalCheckResult( void ) -{ - BOOL isSecure; - BOOL isNandAccessable; - BOOL isVisibleSCFG; - BOOL isDebugger; - u64 arm7res; - u32 arm9res; - - isDebugger = ( OS_GetRunningConsoleType() & OS_CONSOLE_TWLDEBUGGER ) || 0; - - switch( DISPINFO_BIN_IDX ) - { - case 0: - case 4: - isSecure = FALSE; - isNandAccessable = TRUE; - isVisibleSCFG = FALSE; - break; - - case 1: - case 5: - isSecure = FALSE; - isNandAccessable = TRUE; - isVisibleSCFG = TRUE; - break; - case 2: - isSecure = FALSE; - isNandAccessable = FALSE; - isVisibleSCFG = FALSE; - break; - case 3: - isSecure = FALSE; - isNandAccessable = FALSE; - isVisibleSCFG = TRUE; - break; - case 6: - case 8: - case 14: - case 16: - isSecure = TRUE; - isNandAccessable = TRUE; - isVisibleSCFG = FALSE; - break; - - case 7: - case 9: - case 15: - case 17: - isSecure = TRUE; - isNandAccessable = TRUE; - isVisibleSCFG = TRUE; - break; - - case 10: - case 12: - isSecure = TRUE; - isNandAccessable = FALSE; - isVisibleSCFG = FALSE; - break; - - case 11: - case 13: - isSecure = TRUE; - isNandAccessable = FALSE; - isVisibleSCFG = TRUE; - break; - - default: - // mast not come here - return; - } - - // SCFGf[^̌ - arm7res = getArm7CheckData( isSecure, isNandAccessable, isVisibleSCFG, isDebugger ); - arm9res = getArm9CheckData( ); - - - // Ƃ0ԂĂΐ - if( !arm7res && !arm9res ) - { - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_TOTAL_CHECK].str.sjis = s_strCorrect[TRUE]; - STD_StrLCpy( gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CHECK_ERROR7].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - STD_StrLCpy( gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CHECK_ERROR9].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - } - else - { - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_TOTAL_CHECK].str.sjis = s_strCorrect[FALSE]; - STD_TSNPrintf( gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CHECK_ERROR7].str.sjis, - DISPINFO_BUFSIZE, "%012llx", arm7res ); - STD_TSNPrintf( gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CHECK_ERROR9].str.sjis, - DISPINFO_BUFSIZE, "%08x", arm9res ); - - } -} -/* -BOOL scfgTotalCheck( BOOL isSecure, BOOL isNandAccessable, BOOL isVisibleSCFG, BOOL isDebugger ) -{ - // ARM7 check - - if( isVisibleSCFG && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].iValue != isSecure && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].iValue == isNandAccessable && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].iValue == 3 && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].iValue == isNandAccessable && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].iValue && - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].iValue ) - { - arm7res = TRUE; - } - else if( !isVisibleSCFG && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].iValue && - ! gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].iValue && - !gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].iValue ) - { - arm7res = TRUE; - } - else - { - arm7res = FALSE; - } - - - // arm9 check - // SCFGLockł - if( gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_SEC].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_STATE].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_WRAM].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].iValue && - ! gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].iValue == 2 && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].iValue && - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].iValue ) - { - arm9res = TRUE; - } - else - { - arm9res = FALSE; - } - - return arm9res && arm7res; -}*/ - -u64 getArm7CheckData( BOOL isSecure, BOOL isNandAccessable, BOOL isVisibleSCFG, BOOL isDebugger ) -{ - // KlɑSĈvĂ΃[A - // vĂȂ΁AvĂȂڂɑΉrbgf[^A - - u64 result = 0; - - int correctValue[SCFG_ARM7_MENU_SIZE] = { - // ROM status - TRUE, FALSE, TRUE, FALSE, 0, FALSE, - // CLK - 0, TRUE, TRUE, TRUE, TRUE, - // JTAG - 0, 0, 0, - // EXP - FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, - TRUE, TRUE, TRUE, 3, TRUE, TRUE, 0, TRUE, - TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, 0, - // MI - FALSE, 2, 0, FALSE, FALSE, 0x1998, 0x264c, - // old wireless - TRUE - // Bonding op͕s - }; - - correctValue[SCFG_ARM7_ROM_ARM7_FUSE] = !isSecure; - correctValue[SCFG_ARM7_CLK_SD1] = isNandAccessable; - correctValue[SCFG_ARM7_JTAG_CPU] = isDebugger; - correctValue[SCFG_ARM7_JTAG_DSP] = isDebugger; - correctValue[SCFG_ARM7_JTAG_A7] = isDebugger; - correctValue[SCFG_ARM7_EXT_SD1] = isNandAccessable; - correctValue[SCFG_ARM7_EXT_CFG] = isVisibleSCFG; - correctValue[SCFG_ARM7_MI_SC2_CDET] = !isDebugger; - - if( isVisibleSCFG ) - { -/* result = - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_ARM9_SEC) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_ARM9_RSEL ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_ARM7_SEC ) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_ARM7_RSEL ) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].iValue != isSecure) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_ARM7_FUSE ) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_ROM_WE ) | - - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].iValue == isNandAccessable) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_CLK_SD1 ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_CLK_SD2 ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_CLK_AES ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_CLK_WRAM ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_CLK_SND ) | - - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_CPU].iValue == isDebugger) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_JTAG_CPU ) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_DSP].iValue == isDebugger ) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_JTAG_DSP ) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].iValue == isDebugger ) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_JTAG_A7 ) | - - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_DMA ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SDMA ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SND ) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_MC ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_INTC ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SPI ) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_DSEL ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SIO ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_LCDC ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_VRAM ) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].iValue == 3) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_PS ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_DMAC ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_AES ) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].iValue == isNandAccessable) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SD1 ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_SD2 ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_MIC ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_I2S ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_I2C ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_GPIO ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_MCB ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_WRAM ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_PU ) | - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].iValue << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_EXT_CFG ) | - - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SC1_CDET) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_MODE].iValue == 2) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SC1_MODE) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_CDET].iValue != isDebugger ) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SC2_CDET) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_MODE].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SC2_MODE) | - (!gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SWP].iValue) << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SWP) | - (gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CC].iValue) == 0x1988) - << (SCFG_ARM7_MENU_SIZE - SCFG_ARM7_MI_SWP) | - ;*/ - int index; - - for( index = 0; index < SCFG_ARM7_MENU_SIZE ; index++ ) - { - if(SCFG_ARM7_OP_FORM <= index) - { - // ̕ӂ̒l͊J@ʎY@ŕς̂ŖڎŔf - //result |= 0 << index; - continue; - } - - OS_TPrintf("%d:%d:%d ", index, gAllInfo[MENU_SCFG_ARM7][index].iValue ,correctValue[index] ); - result |= ( gAllInfo[MENU_SCFG_ARM7][index].iValue != correctValue[index] ) << index; - } - - return result; - } - else - { - int index; - result = 0; - - for( index = 0; index < SCFG_ARM7_MENU_SIZE ; index++ ) - { - result |= ( gAllInfo[MENU_SCFG_ARM7][index].iValue ) << index; - } - - return result; - } - -} - -u32 getArm9CheckData( void ) -{ - u32 result = 0; - int index; - - int correctValue[SCFG_ARM9_MENU_SIZE] = { - // ROM status - TRUE, FALSE, - // CLK - TRUE, FALSE, TRUE, TRUE, FALSE, - // RST - FALSE, - // EXT - FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, - TRUE, TRUE, TRUE, 2, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE - }; - - for( index = 0; index < SCFG_ARM9_MENU_SIZE ; index++ ) - { - if( SCFG_ARM9_TOTAL_CHECK <= index) - { - //result |= 0 << index; - continue; - } - - OS_TPrintf("%d:%d ",gAllInfo[MENU_SCFG_ARM9][index].iValue ,correctValue[index] ); - result |= ( gAllInfo[MENU_SCFG_ARM9][index].iValue != correctValue[index] ) << index; - } - - OS_TPrintf("\nresult: %d\n", result); - return result; - -} - - \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_secureUser.c b/build/tests/DisplaySystemInformation/ARM9/src/get_secureUser.c deleted file mode 100644 index f42a1ee0..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_secureUser.c +++ /dev/null @@ -1,112 +0,0 @@ -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - - -void getSecureUserInfo( void ) -{ - int value; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_INSTALLED_SOFTBOX].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INSTALLED_SOFTBOX].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INSTALLED_SOFTBOX].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_FREE_SOFTBOX].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_FREE_SOFTBOX].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_FREE_SOFTBOX].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_IDX].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_IDX].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_IDX].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_PLATFORM].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_PLATFORM].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_PLATFORM].fromLCFG = TRUE; - - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].isAligned = FALSE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].numLines = 2; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].fromLCFG = TRUE; - STD_StrCpy( gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].str.sjis, "0000" ); - - if( gLCFGAccessible ) - { - - value = LCFG_TSD_IsFinishedInitialSetting(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].str.sjis = s_strBool[ value ]; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].changable = TRUE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].changeFunc.cBool = LCFG_TSD_SetFlagFinishedInitialSetting; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].argType = ARG_BOOL; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].kindNameList = s_strBool; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_SETTINGS].numKindName = 2; - - value = LCFG_TSD_IsFinishedInitialSetting_Launcher(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].str.sjis = s_strBool[ value ]; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].changable = TRUE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].changeFunc.cBool = LCFG_TSD_SetFlagFinishedInitialSetting_Launcher; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].argType = ARG_BOOL; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].kindNameList = s_strBool; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INITIAL_LAUNCHER].numKindName = 2; - - value = LCFG_TSD_IsFinishedBrokenTWLSettings(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].str.sjis = s_strBool[ value ]; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].changable = TRUE; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].changeFunc.cBool = LCFG_TSD_SetFlagFinishedBrokenTWLSettings; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].argType = ARG_BOOL; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].kindNameList = s_strBool; - gAllInfo[MENU_SECURE_USER][SECURE_USER_BROKEN_SETTINGS].numKindName = 2; - - value = LCFG_TSD_GetInstalledSoftBoxCount(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_INSTALLED_SOFTBOX].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_INSTALLED_SOFTBOX].isNumData = TRUE; - - - value = LCFG_TSD_GetFreeSoftBoxCount(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_FREE_SOFTBOX].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_FREE_SOFTBOX].isNumData = TRUE; - - value = LCFG_TSD_GetLastTimeBootSoftIndex(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_IDX].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_IDX].isNumData = TRUE; - - value = LCFG_TSD_GetLastTimeBootSoftPlatform(); - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_PLATFORM].iValue = value; - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_PLATFORM].isNumData = TRUE; - - - { - u64 buf = LCFG_TSD_GetLastTimeBootSoftTitleID(); - - - if( buf ) - // buf0ONAvݒ肳ĂȂ - { - u32 titleID = MI_LoadBE32( &buf ); - - OS_TPrintf("Lastboot ID: %x Title ID: %x\n", buf, titleID ); - - MI_CpuCopy( &titleID, gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].str.sjis, 4 ); - gAllInfo[MENU_SECURE_USER][SECURE_USER_LASTBOOT_ID].str.sjis[8] = '\0'; - } - } - } - - -} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_sysmenu.c b/build/tests/DisplaySystemInformation/ARM9/src/get_sysmenu.c deleted file mode 100644 index 78824d98..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_sysmenu.c +++ /dev/null @@ -1,265 +0,0 @@ -#include -#include -#include -#include -#include - -#include "getInformation.h" -#include "viewSystemInfo.h" -#include "strResource.h" -#include "misc.h" -#include "util.h" - - -#define FILE_VERSION "verdata:/version.bin" -#define FILE_EULA_URL "verdata:/eula_url.bin" -#define FILE_NUP_HOSTNAME "verdata:/nup_host.bin" -#define FILE_TIMESTAMP "verdata:/time_stamp.bin" - -#define FILE_SIGN_NUP_CERT "verdata:/.twl-nup-cert.der" -#define FILE_SIGN_NUP_PRV "verdata:/.twl-nup-prvkey.der" -#define FILE_SIGN_SHOP_CERT "verdata:/.twl-shop-cert.der" -#define FILE_SIGN_SHOP_PRV "verdata:/.twl-shop-prvkey.der" -#define FILE_SIGN_NINTENDO_CAG2 "verdata:/NintendoCA-G2.der" -#define NUM_FILE_SIGN 5 - - -typedef struct SystemMenuVersion { - u16 major; - u16 minor; - u16 str[ TWL_SYSMENU_VER_STR_LEN / sizeof(u16) ]; -}SystemMenuVersion; - -static char* s_strSignFilePath[] = { - FILE_SIGN_NUP_CERT, - FILE_SIGN_NUP_PRV, - FILE_SIGN_SHOP_CERT, - FILE_SIGN_SHOP_PRV, - FILE_SIGN_NINTENDO_CAG2, -}; - -static char* s_strSignHashDev[] = { - "01e03e86fe11c5172ba742045c63e65c2f058e99", - "7497940e3a3591d592b46ff99d75ebe102c27550", - "cf130c7674bae733f3b106109bb06cc0d6ac1a18", - "ab38a52a384ab63ea8397de6eae8a96d6c108888", - "c60b2a5cc90f0630cca33040df6b3378239f3bfa" -}; - -static char* s_strSignHashProd[] = { - "0626f8ac62baaa0b70c543a33962e54507d451d6", - "58c198c8099d579500cb5d9007bf81404a3c41fa", - "72445f08ab30a41aff9e20a2e64ca7d2b263765e", - "43a81069e6b6300dbe08d6fc3583d0c384a37996", - "c60b2a5cc90f0630cca33040df6b3378239f3bfa" -}; - - -void getSysmenuInfo( void ) -{ - u8 *pBuffer = (u8*) Alloc (NA_VERSION_DATA_WORK_SIZE); - - // numLineallined̐ݒ肪KvȂ̂łăG[`FbN͂Ȃ - NA_LoadVersionDataArchive( pBuffer, NA_VERSION_DATA_WORK_SIZE) ; - - - // o[W̓ǂݏo - { - FSFile file; - SystemMenuVersion bufVersion; - s32 len; - - FS_InitFile(&file); - - if ( FS_OpenFileEx(&file, FILE_VERSION, FS_FILEMODE_R)) - { - len = FS_ReadFile(&file, &bufVersion, sizeof(SystemMenuVersion)); - FS_CloseFile(&file); - - gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_NUM].iValue = (int)( bufVersion.major << 16 | bufVersion.minor ); - gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_NUM].isNumData = TRUE; - - wcsncpy( gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_STR].str.utf, bufVersion.str, TWL_SYSMENU_VER_STR_LEN ); - gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_STR].isSjis = FALSE; - } - else - { - // Ȃꍇ̓f[^N/A - gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_STR].str.sjis = s_strNA; - gAllInfo[MENU_SYSMENU][SYSMENU_VERSION_STR].isSjis = TRUE; - } - } - - // EULA URL̓ǂݏo - { - FSFile file; - s32 len; - - FS_InitFile(&file); - - if ( FS_OpenFileEx(&file, FILE_EULA_URL, FS_FILEMODE_R)) { - len = FS_ReadFile(&file, gAllInfo[MENU_SYSMENU][SYSMENU_EULA_URL].str.sjis , TWL_EULA_URL_LEN) ; - FS_CloseFile(&file); - } - else - { - STD_StrLCpy( gAllInfo[MENU_SYSMENU][SYSMENU_EULA_URL].str.sjis, s_strNA, TWL_EULA_URL_LEN ); - } - } - - // NUP HOST NAME ̓ǂݏo - { - FSFile file; - s32 len; - - FS_InitFile(&file); - - if ( FS_OpenFileEx(&file, FILE_NUP_HOSTNAME, FS_FILEMODE_R)) { - len = FS_ReadFile(&file, gAllInfo[MENU_SYSMENU][SYSMENU_NUP_HOST].str.sjis, TWL_NUP_HOSTNAME_LEN); - FS_CloseFile(&file); - } - else - { - STD_StrLCpy( gAllInfo[MENU_SYSMENU][SYSMENU_NUP_HOST].str.sjis, s_strNA , TWL_NUP_HOSTNAME_LEN ); - } - - } - - // ^CX^v ̓ǂݏo - { - FSFile file; - s32 len; - - FS_InitFile(&file); - - if ( FS_OpenFileEx(&file, FILE_TIMESTAMP, FS_FILEMODE_R)) { - len = FS_ReadFile(&file, &gAllInfo[MENU_SYSMENU][SYSMENU_TIMESTAMP].iValue, sizeof(u32) ); - gAllInfo[MENU_SYSMENU][SYSMENU_TIMESTAMP].isNumData = TRUE; - FS_CloseFile(&file); - } - } - - // ̏ƍ - { - FSFile file[NUM_FILE_SIGN]; - u32 fileLen[NUM_FILE_SIGN], maxFileSize = 0; - u8 i; - u8 *srcBuf, *dstBuf, digestBuf[MATH_SHA1_DIGEST_SIZE], - cmpDigestDevBuf[MATH_SHA1_DIGEST_SIZE], cmpDigestProdBuf[MATH_SHA1_DIGEST_SIZE]; - - for( i=0 ; i < NUM_FILE_SIGN; i++ ) - { - // ŏɃGg̍sݒ肵Ă - gAllInfo[MENU_SYSMENU][i + SYSMENU_HASH_IDX].numLines = 2; - gAllInfo[MENU_SYSMENU][i + SYSMENU_HASH_IDX].isAligned = FALSE; - } - - for( i=0 ; i < NUM_FILE_SIGN; i++ ) - { - FS_InitFile( &file[i] ); - - // ꂽt@CꂼI[v - if( !FS_OpenFileEx( &file[i], s_strSignFilePath[i], FS_FILEMODE_R ) ) - { - // JȂNANDANZX֎~ԂȂ̂Ŗ߂ - OS_Printf("sysmenu info error: Openfile failed.\n" ); - return ; - } - - // t@Ceʂꂼ擾 - fileLen[i] = FS_GetFileLength( &file[i] ); - } - - // obt@傫k߂肵Ȃ̂ - // ԑ傫t@CƓ傫̃obt@mۂĂ܂ - for( i=0 ; i < NUM_FILE_SIGN; i++ ) - { - if( maxFileSize < fileLen[i] ) - { - maxFileSize = fileLen[i]; - } - } - - srcBuf = (u8*) Alloc ( maxFileSize ); - dstBuf = (u8*) Alloc ( maxFileSize ); - - // ꂼ̃t@Cɑ΂ď؂s - for( i=0 ; i < NUM_FILE_SIGN; i++ ) - { - u8 idx = (u8)(SYSMENU_HASH_IDX + i) ; - - OS_TPrintf("Checking signature...%s\n", s_strMetaMenu[MENU_SYSMENU][idx] ); - - // t@Cǂݍ - FS_ReadFile( &file[i], srcBuf, (s32)fileLen[i] ); - OS_TPrintf("FileSize: %d byte HeadData: %02x%02x%02x\n", fileLen[i], srcBuf[0], srcBuf[1], srcBuf[2] ); - - if( SYSMENU_NUP_CERT <= idx && idx < SYSMENU_NINTENDO_CAG2 ) - { - s32 result; - - // SYSMENU_NUP_CERT4t@C͈ÍĂ̂ŕ - result = NA_DecodeVersionData( srcBuf, fileLen[i] , dstBuf, fileLen[i] ); - - if( result < 0 ) - { - OS_TPrintf( "NA_DecodeVersionData() Failed. errCode: %d\n", result ); - continue; - } - - // oR[hƃt@CTCYςۂ̂ōXV - fileLen[i] = (u32)result; - - OS_TPrintf("Dacode VersionData... HeadData: %02x%02x%02x\n", dstBuf[0], dstBuf[1], dstBuf[2] ); - - // f[^LbVvZ - MATH_CalcSHA1( digestBuf, dstBuf, fileLen[i] ); - } - else - { - // ȊO͂̂܂܃nbV߂ - MATH_CalcSHA1( digestBuf, srcBuf, fileLen[i] ); - } - - strToHexa( s_strSignHashDev[i] , cmpDigestDevBuf, MATH_SHA1_DIGEST_SIZE ); - strToHexa( s_strSignHashProd[i], cmpDigestProdBuf, MATH_SHA1_DIGEST_SIZE ); - - gAllInfo[MENU_SYSMENU][idx].numLines = 2; - gAllInfo[MENU_SYSMENU][idx].isAligned = FALSE; - - putBinary( cmpDigestDevBuf, MATH_SHA1_DIGEST_SIZE ); - putBinary( cmpDigestProdBuf, MATH_SHA1_DIGEST_SIZE ); - putBinary( digestBuf, MATH_SHA1_DIGEST_SIZE ); - - // nbVlvcorrect,vȂincorrect - if( MI_CpuComp8( cmpDigestDevBuf, digestBuf, MATH_SHA1_DIGEST_SIZE ) == 0 ) - { - gAllInfo[MENU_SYSMENU][idx].str.sjis = - idx == SYSMENU_NINTENDO_CAG2 ? s_strCorrect[1] : s_strSysMenuKey[1]; - } - else if( MI_CpuComp8( cmpDigestProdBuf, digestBuf, MATH_SHA1_DIGEST_SIZE ) == 0 ) - { - gAllInfo[MENU_SYSMENU][idx].str.sjis = - idx == SYSMENU_NINTENDO_CAG2 ? s_strCorrect[1] : s_strSysMenuKey[2]; - } - else - { - gAllInfo[MENU_SYSMENU][idx].str.sjis = s_strSysMenuKey[0]; - } - - - } - - // obt@̊J - Free( srcBuf ); - Free( dstBuf ); - } - - - // SystemMenuVersioñA}Eg - if( !NA_UnloadVersionDataArchive() ) { - return; - } - - Free(pBuffer); -} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_versionData.c b/build/tests/DisplaySystemInformation/ARM9/src/get_versionData.c deleted file mode 100644 index d2269f89..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_versionData.c +++ /dev/null @@ -1,55 +0,0 @@ - -#include -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" -#include "misc.h" - -void getWirelessVersion( void ); -void getContentsVersion( void ); -void getSharedFontVersion( void ); - - -void getContentsVersion( void ) -// RecXgƂɊeRec̃^CgIDƃo[W擾 -{ - NAMTitleInfo info; - int i; - - gNumContents = NAM_GetNumTitles(); - - if( gNumContents < 0 ) - { - // NAMʖڂƂANANDANZXłȂƂ̏ꍇ͏I - return ; - } - - OS_TPrintf(" numContents: %d\n", gNumContents); - - if( gContentsTitle == NULL ) - { - // 񏈗̎̓obt@m - gContentsTitle = (NAMTitleId*) Alloc( sizeof(NAMTitleId) * gNumContents ); - gContentsVersion = (u16*) Alloc( sizeof(u16) * (u32)gNumContents); - SDK_ASSERT( gContentsTitle ); - SDK_ASSERT( gContentsVersion ); - } - - NAM_GetTitleList( gContentsTitle, (u32)gNumContents); - SDK_POINTER_ASSERT( gContentsTitle ); - SDK_POINTER_ASSERT( gContentsVersion ); - - for( i=0; i -#include -#include -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" -#include "util.h" -#include "misc.h" - -#define WHITELIST_TITLEID 0x0003000f484e4841 -#define DS_HASH_TABLE_SIZE (256*1024) - -void getWhitelistHash( void ); -void getNumDHTEntry( void ); -BOOL cmpHash( void *src1, void *src2 ); - -void getWhiteListInfo( void ) -{ - OS_TPrintf("...Whitelist Information\n"); - - getWhitelistHash(); - getNumDHTEntry(); -} - -void getWhitelistHash( void ) -{ - u32 tmdSize=0, fileSize; - ESTitleMeta *tmd; - - FSFile file; - char filePath[NAM_PATH_LEN+1]; - u8 *fileBuf, digestBuf[MATH_SHA1_DIGEST_SIZE]; - - - // ESCugănbVl擾 - // ڂ̌ĂяoŃTCY擾ēڂŒl炤 - ES_GetTmd( WHITELIST_TITLEID, NULL, &tmdSize ); - tmd = (ESTitleMeta*) Alloc ( tmdSize ); - SDK_ASSERT( tmd ); - ES_GetTmd( WHITELIST_TITLEID , tmd, &tmdSize ); - - if( tmd == NULL ) - { - OS_TPrintf("getting tmd hash failed.\n" ); - return; - } - - putBinary( (u8*)&tmd->contents[0].hash , MATH_SHA1_DIGEST_SIZE ); - - // zCgXg̃t@C̎ԂĂ - FS_InitFile( &file ); - NAM_GetTitleBootContentPath( filePath , WHITELIST_TITLEID ); - - OS_TPrintf("filepath : %s\n", filePath ); - - if( ! FS_OpenFileEx( &file, filePath, FS_FILEMODE_R ) ) - { - OS_TPrintf("whitelist info error: FS_OpenFileEx() failed. FSResult: %d\n", FS_GetArchiveResultCode(filePath) ); - return; - } - - fileSize = FS_GetFileLength( &file ); - - fileBuf = (u8*) Alloc ( fileSize ); - SDK_ASSERT( fileBuf ); - - if( fileSize != FS_ReadFile( &file, fileBuf, (s32)fileSize ) ) - { - OS_TPrintf("whitelist info error: FS_ReadFileEx() failed. FSResult: %d\n", FS_GetArchiveResultCode(filePath) ); - return; - } - - MATH_CalcSHA1( digestBuf, fileBuf, fileSize ); - putBinary( digestBuf, MATH_SHA1_DIGEST_SIZE ); - - gAllInfo[MENU_WHITE][WHITE_HASH].str.sjis = s_strCorrect [ cmpHash( digestBuf, &tmd->contents[0].hash ) ]; - - FS_CloseFile( &file ); - Free( tmd ); - Free( fileBuf ); - -} - -void getNumDHTEntry( void ) -{ - DHTFile *dht; - FSFile file; - char filePath[NAM_PATH_LEN+1]; - - dht = (DHTFile*) Alloc (DS_HASH_TABLE_SIZE); - SDK_ASSERT(dht); - - FS_InitFile( &file ); - NAM_GetTitleBootContentPathFast( filePath , WHITELIST_TITLEID ); - - OS_TPrintf("DHTEntry reading...\n"); - - if( ! FS_OpenFileEx( &file, filePath, FS_FILEMODE_R ) ) - { - OS_TPrintf("whitelist info error: FS_OpenFileEx() failed. FSResult: %d\n", FS_GetArchiveResultCode(filePath) ); - return; - } - -/* if( ! FS_SeekFile( &file, sizeof(ROM_Header), FS_SEEK_SET ) ) - { - OS_TPrintf("whitelist info error: FS_SeekFile() failed. FSResult: %d\n", FS_GetArchiveResultCode(filePath) ); - return; - } -*/ - if( ! DHT_PrepareDatabase( dht, &file ) ) - { - OS_TPrintf("whitelist info error: PrepareDatabase() failed.\n" ); - return; - } - - DC_FlushRange( dht, DHT_GetDatabaseLength( dht )); - OS_TPrintf(" dht.header.nums : %d\n", dht->header.nums); - - FS_CloseFile( &file ); - gAllInfo[MENU_WHITE][WHITE_NUM].iValue = (int)dht->header.nums; - gAllInfo[MENU_WHITE][WHITE_NUM].isNumData = TRUE; - - Free(dht); -} - -// ‚̃nbVrĈvĂԂ -// łsrc2̓rbOGfBA˂ -BOOL cmpHash( void *src1, void *src2 ) -{ - u8 *u1 = (u8*)src1; - u8 *u2 = (u8*)src2; - - return MI_CpuComp8( u1, u2, MATH_SHA1_DIGEST_SIZE ) == 0 ; - -} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/get_wl.c b/build/tests/DisplaySystemInformation/ARM9/src/get_wl.c deleted file mode 100644 index 5532d3e8..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/get_wl.c +++ /dev/null @@ -1,142 +0,0 @@ -#include -#include - -#include "viewSystemInfo.h" -#include "strResource.h" -#include "getInformation.h" - -#define WL_TITLEID 0x0003000F484E4341 - -#define WL_FW_LOADSIZE 0x10 -#define WL_FW_LOAD_OFFSET 0xa0 -#define WL_FW_VERSION_LO_IDX 0x1 -#define WL_FW_VERSION_HI_IDX 0x0 -#define WL_FW_VERSION_SIZE 0x2 -#define WL_NUM_FW_IDX 0x2 -#define WL_NUM_FW_SIZE 0x2 -#define WL_FW1_OFFSET_IDX 0x4 -#define WL_FW_TYPE_IDX 0xc -#define WL_FW_TYPE_SIZE 0x4 - -#define WL_FW2_OFFSET_IDX 0xc4 -#define WL_FW2_TYPE_IDX 0xcc - -#define WL_FW_SECTION_OFFSET 0x4 -#define WL_FW_VER_MINUSOFFSET 0x2c - -#define WL_FW_IDX_OFFSET 3 - - - - -void getWLInfo( void ) -{ - FSFile file; - char filePath[NAM_PATH_LEN+1]; - char filebuf[WL_FW_LOADSIZE]; - int res; - - FS_InitFile( &file ); - NAM_GetTitleBootContentPath( filePath , WL_TITLEID); // t@[̃t@CpX擾 - OS_TPrintf("wireless firm path: %s\n", filePath ) ; - - if( FS_OpenFileEx( &file, filePath, FS_FILEMODE_R ) ) - { - int value; - s32 fwOffset, sectionOffset; - - /* - // o[W̓ǂݎ - FS_SeekFile( &file, WL_FW_VERSION_OFFSET, FS_SEEK_SET ); - res = FS_ReadFile( &file, filebuf, WL_FW_VERSION_SIZE ); - - if( res == WL_FW_VERSION_SIZE ) - { - snprintf( gAllInfo[MENU_WL][WL_VERSION].str.sjis, DISPINFO_BUFSIZE-1, "%d.%d", filebuf[0], filebuf[1] ); - gAllInfo[MENU_WL][WL_VERSION].iValue = filebuf[0] *100 + filebuf[1]; - } - - // t@[EFA̐̎擾 - FS_SeekFile( &file, WL_NUM_FW, FS_SEEK_SET ); - res = FS_ReadFile( &file, filebuf, 2 ); - - if( res == WL_NUM_FW_SIZE ) - { - gAllInfo[MENU_WL][WL_NUM_FW].iValue = filebuf[0]; - gAllInfo[MENU_WL][WL_NUM_FW].isNumData = TRUE; - } - - // t@[^Cv̎擾 - FS_SeekFile( &file, WL_FW_TYPE_OFFSET, FS_SEEK_SET ); - res = FS_ReadFile( &file, filebuf, WL_FW_TYPE_SIZE ); - - if( res == WL_FW_TYPE_SIZE ) - { - int value = (int) MI_LoadLE32( filebuf ); - gAllInfo[MENU_WL][WL_FW_TYPE].iValue = value; - gAllInfo[MENU_WL][WL_FW_TYPE].str.sjis = s_strWLFWType[ value ]; - }*/ - - FS_SeekFile( &file, WL_FW_LOAD_OFFSET , FS_SEEK_SET); - res = FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE); - - if( res == WL_FW_LOADSIZE ) - { - int value; - - snprintf( gAllInfo[MENU_WL][WL_VERSION].str.sjis, DISPINFO_BUFSIZE-1, "%d.%d", - filebuf[WL_FW_VERSION_HI_IDX], filebuf[WL_FW_VERSION_LO_IDX] ); - - gAllInfo[MENU_WL][WL_NUM_FW].iValue = (int) MI_LoadLE8( &filebuf[WL_NUM_FW_IDX] ); - gAllInfo[MENU_WL][WL_NUM_FW].isNumData = TRUE; - - fwOffset = (s32)MI_LoadLE32( &filebuf[WL_FW1_OFFSET_IDX] ); - - value = (int) MI_LoadLE32( &filebuf[WL_FW_TYPE_IDX] ); - gAllInfo[MENU_WL][WL_FW1_TYPE].iValue = value; - gAllInfo[MENU_WL][WL_FW1_TYPE].str.sjis = s_strWLFWType[ value ]; - - FS_SeekFile( &file, fwOffset, FS_SEEK_SET ); - FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE ); - sectionOffset = (s32)MI_LoadLE32( &filebuf[WL_FW_SECTION_OFFSET] ); - - FS_SeekFile( &file, fwOffset + sectionOffset - WL_FW_VER_MINUSOFFSET, FS_SEEK_SET ); - FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE ); - snprintf( gAllInfo[MENU_WL][WL_FW1_VER].str.sjis, DISPINFO_BUFSIZE-1, "%08x", - MI_LoadLE32( filebuf ) ); - } - - if( gAllInfo[MENU_WL][WL_NUM_FW].iValue == 2 ) - { - FS_SeekFile( &file, WL_FW2_OFFSET_IDX, FS_SEEK_SET ); - FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE ); - fwOffset = (s32)MI_LoadLE32( filebuf ); - - value = (int) MI_LoadLE32( &filebuf[WL_FW2_TYPE_IDX - WL_FW2_OFFSET_IDX] ); - gAllInfo[MENU_WL][WL_FW2_TYPE].str.sjis = s_strWLFWType[ value ]; - - FS_SeekFile( &file, fwOffset, FS_SEEK_SET ); - FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE ); - sectionOffset = (s32)MI_LoadLE32( &filebuf[WL_FW_SECTION_OFFSET] ); - - FS_SeekFile( &file, fwOffset + sectionOffset - WL_FW_VER_MINUSOFFSET, FS_SEEK_SET ); - FS_ReadFile( &file, filebuf, WL_FW_LOADSIZE ); - snprintf( gAllInfo[MENU_WL][WL_FW2_VER].str.sjis, DISPINFO_BUFSIZE-1, "%08x", - MI_LoadLE32( filebuf ) ); - } - else - { - STD_StrLCpy( gAllInfo[MENU_WL][WL_FW2_VER].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - } - - FS_CloseFile( &file ); - } - else - { - // ǂݍ߂ȂƂ肠N/AēĂ - STD_StrLCpy( gAllInfo[MENU_WL][WL_VERSION].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - STD_StrLCpy( gAllInfo[MENU_WL][WL_FW2_VER].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - STD_StrLCpy( gAllInfo[MENU_WL][WL_FW1_VER].str.sjis, s_strNA, DISPINFO_BUFSIZE ); - } - -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/infodata.xls b/build/tests/DisplaySystemInformation/ARM9/src/infodata.xls deleted file mode 100644 index b78857f80f2ea7b361c0c6127f92627be4c3248f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35328 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 diff --git a/build/tests/DisplaySystemInformation/ARM9/src/main.c b/build/tests/DisplaySystemInformation/ARM9/src/main.c deleted file mode 100644 index 8df2ebd5..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/main.c +++ /dev/null @@ -1,120 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: main.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#include -#include -#include -#include -#include "misc.h" -#include "viewSystemInfo.h" -#include "address.h" - -#define CANVAS0_WIDTH 15 -#define CANVAS0_HEIGHT 10 -#define CANVAS0_LEFT 10 -#define CANVAS0_TOP 10 - -#define CANVAS1_WIDTH 10 -#define CANVAS1_HEIGHT 10 -#define CANVAS1_LEFT 130 -#define CANVAS1_TOP 10 - -#define TEXT_HSPACE 1 // `掞̕ (sNZP) -#define TEXT_VSPACE 1 // `掞̍s (sNZP) -#define CHARACTER_OFFSET 1 - -///////////////////////////// - -void VBlankHandler( void ); - -///////////////////////////// - - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ - - - -void TwlMain( void ) -{ - - OS_Init(); - OS_InitTick(); - OS_TPrintf("Initialize begin\n"); - - // ARM7ŃɃZbgꂽSCFG̃f[^m - MI_CpuMove16( DISPINFO_SHARED_SCFG_REG_ADDR, gArm7SCFGReg, DISPINFO_SHARED_SCFG_REG_SIZE ); - // WRAMɑޔĂ镪Rs[ - MI_CpuMove16( DISPINFO_SHARED_SCFG_WRAM_ADDR, gArm7SCFGShared, DISPINFO_SHARED_SCFG_WRAM_SIZE ); - - //---- interrupt setting - OS_EnableIrq(); - OS_EnableInterrupts(); - - OS_InitSharedFont(); - GX_Init(); - - OS_SetIrqFunction( OS_IE_V_BLANK, VBlankHandler ); - OS_EnableIrqMask( OS_IE_V_BLANK ); - GX_VBlankIntr( TRUE ); - - OS_TPrintf("RTC Initilize...\n"); - RTC_Init(); - - OS_TPrintf("Allocator Initialize...\n"); - InitAllocator(); - CRYPTO_SetAllocator( Alloc, Free ); - -#if NAM_ENABLE - OS_TPrintf("NAM Initialize...\n"); - NAM_Init( Alloc, Free ); -#endif - - InitBG(); - OS_TPrintf("Initialize Finished\n"); - displayInfoInit(); - - OS_TPrintf("begin mainloop\n"); - - - // C[v - while( 1 ) - { - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - - displayInfoMain(); // r[AXV - } - - OS_Terminate(); - -} - - -void VBlankHandler(void) -{ - OS_SetIrqCheckFlag( OS_IE_V_BLANK ); // VuN`FbÑZbg -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/misc.c b/build/tests/DisplaySystemInformation/ARM9/src/misc.c deleted file mode 100644 index 2e81ed3b..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/misc.c +++ /dev/null @@ -1,759 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: misc.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "misc.h" - -// define data----------------------------------------------------------------- -#define NTR_IPL_FONT_DATA "data/NTR_IPL_font_m.NFTR" - -#define STRING_LENGTH_MAX 256 - -#define GRAY(x) GX_RGB(x, x, x) - -enum -{ - TXT_CPALETTE_MAIN, - TXT_CPALETTE_USERCOLOR, - TXT_CPALETTE_USERCOLORSAMPLE, - TXT_CPALETTE_4BPP, - TXT_NUM_CPALEETE -}; - -// fʂ̃J[pbg -GXRgb TXTColorPalette[TXT_NUM_CPALEETE * 16] = -{ - GX_RGB(31, 31, 31), GX_RGB(31, 31, 31), GX_RGB( 0, 0, 0), GX_RGB(31, 0, 0),// {F - GX_RGB( 0, 31, 0), GX_RGB( 0, 0, 31), GX_RGB( 0, 31, 31), GX_RGB(31, 0, 31), - GX_RGB(31, 31, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), - GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), - - GX_RGB( 0, 0, 0), GX_RGB(12, 16, 19), GX_RGB(23, 9, 0), GX_RGB(31, 0, 3),// [U[J[̈ - GX_RGB(31, 17, 31), GX_RGB(31, 18, 0), GX_RGB(30, 28, 0), GX_RGB(21, 31, 0), - GX_RGB( 0, 20, 7), GX_RGB( 9, 27, 17), GX_RGB( 6, 23, 30), GX_RGB( 0, 11, 30), - GX_RGB( 0, 0, 18), GX_RGB(17, 0, 26), GX_RGB(26, 0, 29), GX_RGB(31, 0, 18), - - GX_RGB(12, 16, 19), GX_RGB(23, 9, 0), GX_RGB(31, 0, 3), GX_RGB(31, 17, 31),// [U[J[̃Tv̈ - GX_RGB(31, 18, 0), GX_RGB(30, 28, 0), GX_RGB(21, 31, 0), GX_RGB( 0, 31, 0), - GX_RGB( 0, 20, 7), GX_RGB( 9, 27, 17), GX_RGB( 6, 23, 30), GX_RGB( 0, 11, 30), - GX_RGB( 0, 0, 18), GX_RGB(17, 0, 26), GX_RGB(26, 0, 29), GX_RGB(31, 0, 18), - - GRAY(31), GRAY(29), GRAY(27), GRAY(25), - GRAY(23), GRAY(21), GRAY(19), GRAY(17), - GRAY(15), GRAY(14), GRAY(12), GRAY(10), - GRAY( 8), GRAY( 6), GRAY( 3), GRAY( 0), -}; - -// Ofpbg邽߂̃}N -#define MAKECOLOR(r,g,b) GX_RGB( 0, 0, 0), GX_RGB(r, g, b), MC(r,g,b,1), MC(r,g,b,2),\ - MC(r,g,b,3), MC(r,g,b,4), MC(r,g,b,5), MC(r,g,b,6),\ - MC(r,g,b,7), MC(r,g,b,8), MC(r,g,b,9), MC(r,g,b,10),\ - MC(r,g,b,11), MC(r,g,b,12), MC(r,g,b,13), GX_RGB(31, 31, 31) - -#define MC(r,g,b,i) GX_RGB(r+((31-r)*i)/14, g+((31-g)*i)/14, b+((31-b)*i)/14) - -// [U[J[pbg؂ւp -GXRgb TempPalette[16 * 16] = -{ - MAKECOLOR(12, 16, 19), - MAKECOLOR(23, 9, 0), - MAKECOLOR(31, 0, 3), - MAKECOLOR(31, 17, 31), - MAKECOLOR(31, 18, 0), - MAKECOLOR(30, 28, 0), - MAKECOLOR(21, 31, 0), - MAKECOLOR( 0, 31, 0), - MAKECOLOR( 0, 20, 7), - MAKECOLOR( 9, 27, 17), - MAKECOLOR( 6, 23, 30), - MAKECOLOR( 0, 11, 30), - MAKECOLOR( 0, 0, 18), - MAKECOLOR(17, 0, 26), - MAKECOLOR(26, 0, 29), - MAKECOLOR(31, 0, 18), -}; - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- -#define CANVAS_WIDTH 32 // `̕ (LN^P) -#define CANVAS_HEIGHT 24 // `̍ (LN^P) -#define CANVAS_LEFT 0 // `̈ʒuX (LN^P) -#define CANVAS_TOP 0 // `̈ʒuY (LN^P) - -#define TEXT_HSPACE 1 // `掞̕ (sNZP) -#define TEXT_VSPACE 1 // `掞̍s (sNZP) - -#define CHARACTER_OFFSET 0 // gpLN^̊Jnԍ - -// RTCf[^\ʒu[N -typedef struct RtcDrawPos{ - int date_x; - int date_y; - int time_x; - int time_y; -}RtcDrawPos; - -// function's prototype------------------------------------------------------- -static BOOL WaitDetachTP( void ); -static void StartDetachTP( void ); -static void InitScreen( void ); -static void InitCanvas( void ); - -// global variable------------------------------------------------------------- -KeyWork pad; // L[pbh̓f[^ -TpWork tpd; // ^b`pl̓f[^ -NNSFndAllocator g_allocator; // AP[^ -NNSG2dFont gFont; // tHg -NNSG2dCharCanvas gCanvas; // CharCanvas -NNSG2dTextCanvas gTextCanvas; // TextCanvas -NNSG2dCharCanvas gCanvasSub; // CharCanvas -NNSG2dTextCanvas gTextCanvasSub; // TextCanvas - -// static variable------------------------------------------------------------- -static int s_detach_count; -static RtcDrawPos s_rtcPos; -static RTCDate s_rtcDate; -static RTCTime s_rtcTime; -static u16 s_vcount; - -static char s_strBuffer[ STRING_LENGTH_MAX * 2 ] ATTRIBUTE_ALIGN(2); -static u16 s_strBufferUTF16[ STRING_LENGTH_MAX ]; - -// const data------------------------------------------------------------------ - -// jf[^\pR[h -const u8 *const g_strWeek[] ATTRIBUTE_ALIGN(2) = { - (const u8 *)"SUN", - (const u8 *)"MON", - (const u8 *)"TUE", - (const u8 *)"WED", - (const u8 *)"THU", - (const u8 *)"FRI", - (const u8 *)"SAT", -}; - - -// ============================================================================ -// Ǘ -// ============================================================================ - -// AP[^̏ -void InitAllocator( void ) -{ - // b΍@FS_InitŃnbV`FbNp̃q[vmۂĂ邽߁A - // [U[q[v̊mۑOFS_InitsKvB - - // t@CVXe - FS_Init( FS_DMA_NOT_USE ); - - { - NNSFndAllocator *pAllocator = &g_allocator; - u32 arenaLow = MATH_ROUNDUP ( (u32)OS_GetMainArenaLo(), 16 ); - u32 arenaHigh = MATH_ROUNDDOWN( (u32)OS_GetMainArenaHi(), 16 ); - u32 heapSize = arenaHigh - arenaLow; - void* heapMemory = OS_AllocFromMainArenaLo( heapSize, 16 ); - NNSFndHeapHandle heapHandle; - SDK_NULL_ASSERT( pAllocator ); - - heapHandle = NNS_FndCreateExpHeap( heapMemory, heapSize ); - SDK_ASSERT( heapHandle != NNS_FND_HEAP_INVALID_HANDLE ); - - NNS_FndInitAllocatorForExpHeap( pAllocator, heapHandle, 32 ); - } -} - - -// 蓖 -void *Alloc( u32 size ) -{ - return NNS_FndAllocFromAllocator( &g_allocator, size ); -} - - -// -void Free( void *pBuffer ) -{ - NNS_FndFreeToAllocator( &g_allocator, pBuffer ); -} - - -// ============================================================================ -// ʐݒ -// ============================================================================ - -// BG -void InitBG(void) -{ - // OFF - GX_DispOff(); - GXS_DispOff(); - - // VRAM̊蓖ĂSĉ - GX_DisableBankForBG(); - GX_DisableBankForOBJ(); - GX_DisableBankForSubBG(); - GX_DisableBankForSubOBJ(); - - // C2DGW̏o͂ʂ - GX_SetDispSelect( GX_DISP_SELECT_SUB_MAIN ); - - // CLCD - { - // VRAM蓖 - GX_SetBankForBG ( GX_VRAM_BG_128_A ); - GX_SetBankForOBJ( GX_VRAM_OBJ_128_B ); - - MI_CpuClearFast( (void *)HW_BG_VRAM, 0x20000 ); // BG -VRAM NA - MI_CpuClearFast( (void *)HW_OBJ_VRAM, 0x20000 ); // OBJ-VRAM NA - MI_DmaFill32( 3, (void *)HW_OAM, 192, HW_OAM_SIZE ); // OAM NA - - // J[pbgݒ - GX_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) ); - - // BG[hݒ - GX_SetGraphicsMode( GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D ); - - GX_SetBGScrOffset ( GX_BGSCROFFSET_0x10000 ); - GX_SetBGCharOffset( GX_BGCHAROFFSET_0x00000 ); - } - // TuLCD - { - // VRAM蓖 - GX_SetBankForSubBG ( GX_VRAM_SUB_BG_128_C ); // VRAM-C for BGs - GX_SetBankForSubOBJ( GX_VRAM_SUB_OBJ_128_D ); // VRAM-D for BGs - - MI_CpuClearFast( (void *)HW_DB_BG_VRAM, 0x20000 ); // BG -VRAM NA - MI_CpuClearFast( (void *)HW_DB_OBJ_VRAM, 0x20000 ); // OBJ -VRAM NA - - // J[pbgݒ - GXS_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) ); - - // BG[hݒ - GXS_SetGraphicsMode( GX_BGMODE_0 ); // BGMODE is 0 - } - InitScreen(); - InitCanvas(); -} - - -// XN[ -static void InitScreen( void ) -{ - // C BG 0 ݒ - G2_SetBG0Control( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_256, // J[[h 256F - GX_BG_SCRBASE_0xf800, // XN[x[X - GX_BG_CHARBASE_0x00000, // LN^x[X - GX_BG_EXTPLTT_01 // gpbgXbg - ); - G2_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text - GX_BG_COLORMODE_16, // use 16 colors mode - GX_BG_SCRBASE_0xe800, // screen base offset + 0x0000 is the address for BG #1 screen - GX_BG_CHARBASE_0x10000, // character base offset + 0x04000 is the address for BG #0 characters - GX_BG_EXTPLTT_01 // use BGExtPltt slot #0 if BGExtPltt is enabled - ); - G2_SetBG2ControlText( - GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text - GX_BG_COLORMODE_16, // use 16 colors mode - GX_BG_SCRBASE_0xd800, // screen base offset + 0x0000 is the address for BG #1 screen - GX_BG_CHARBASE_0x14000 // character base offset + 0x04000 is the address for BG #0 characters - ); - GX_SetVisiblePlane( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1); - G2_SetBG2Priority(0); - G2_SetBG0Priority(1); - G2_SetBG1Priority(2); - - // Tu BG 0 ݒ - G2S_SetBG0Control( - GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text - GX_BG_COLORMODE_16, // use 16 colors mode - GX_BG_SCRBASE_0xf800, // screen base offset + 0x0000 is the address for BG #0 screen - GX_BG_CHARBASE_0x00000, // character base offset + 0x04000 is the address for BG #0 characters - GX_BG_EXTPLTT_01 // use BGExtPltt slot #0 if BGExtPltt is enabled - ); - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); // display only BG #0 -} - - -// `̏ -static void InitCanvas( void ) -{ - CMN_InitFileSystem( &g_allocator ); - - // tHgǂݍ݂܂ - { - void* pFontFile; - u32 size = CMN_LoadFile( &pFontFile, NTR_IPL_FONT_DATA, &g_allocator); - NNS_G2D_ASSERT( size > 0 ); - NNS_G2dFontInitUTF16(&gFont, pFontFile); -// NNS_G2dPrintFont(&gFont); - } - - { - // CharCanvas ̏ - NNS_G2dCharCanvasInitForBG( - &gCanvas, - (GXCharFmt256*)G2_GetBG0CharPtr() + CHARACTER_OFFSET, - CANVAS_WIDTH, - CANVAS_HEIGHT, - NNS_G2D_CHARA_COLORMODE_256 - ); - - // TextCanvas̏ - NNS_G2dTextCanvasInit( - &gTextCanvas, - &gCanvas, - &gFont, - TEXT_HSPACE, - TEXT_VSPACE - ); - - // XN[ݒ - NNS_G2dMapScrToCharText( - G2_GetBG0ScrPtr(), - CANVAS_WIDTH, - CANVAS_HEIGHT, - CANVAS_LEFT, - CANVAS_TOP, - NNS_G2D_TEXT_BG_WIDTH_256, - CHARACTER_OFFSET, - TXT_CPALETTE_MAIN - ); - } - { - // CharCanvas ̏ - NNS_G2dCharCanvasInitForBG( - &gCanvasSub, - (GXCharFmt16*)G2S_GetBG0CharPtr() + CHARACTER_OFFSET, - CANVAS_WIDTH, - CANVAS_HEIGHT, - NNS_G2D_CHARA_COLORMODE_16 - ); - - // TextCanvas̏ - NNS_G2dTextCanvasInit( - &gTextCanvasSub, - &gCanvasSub, - &gFont, - TEXT_HSPACE, - TEXT_VSPACE - ); - - // XN[ݒ - NNS_G2dMapScrToCharText( - G2S_GetBG0ScrPtr(), - CANVAS_WIDTH, - CANVAS_HEIGHT, - CANVAS_LEFT, - CANVAS_TOP, - NNS_G2D_TEXT_BG_WIDTH_256, - CHARACTER_OFFSET, - TXT_CPALETTE_MAIN - ); - } -} - - -// UTF16ł̒ڕ\ -void PutStringUTF16( int x, int y, int color, const u16 *strUTF16 ) -{ - NNS_G2dTextCanvasDrawText( &gTextCanvas, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, - strUTF16 ); -} - -void PutStringUTF16Sub( int x, int y, int color, const u16 *strUTF16 ) -{ - NNS_G2dTextCanvasDrawText( &gTextCanvasSub, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, - strUTF16 ); -} - - -// tō쐬\ꍇ̕擾 -int GetPrintfWidth( const NNSG2dTextCanvas *pCanvas, const char *fmt, ... ) -{ - int srcLen; - int dstLen = sizeof(s_strBufferUTF16); - va_list vlist; - va_start(vlist, fmt); - srcLen = STD_TVSNPrintf( s_strBuffer, sizeof(s_strBuffer), fmt, vlist); - va_end(vlist); - s_strBuffer[ srcLen ] = 0; - - (void)STD_ConvertStringSjisToUnicode( s_strBufferUTF16, &dstLen, s_strBuffer, &srcLen, NULL ); - s_strBufferUTF16[ dstLen ] = 0; - - return NNS_G2dTextCanvasGetTextWidth( pCanvas, s_strBufferUTF16 ); -} - - -// SJISPrintf`ŕ\iUTF16ɕϊ) -void PrintfSJIS( int x, int y, int color, const char *fmt, ... ) -{ - int srcLen; - int dstLen = sizeof(s_strBufferUTF16); - va_list vlist; - va_start(vlist, fmt); - srcLen = STD_TVSNPrintf( s_strBuffer, sizeof(s_strBuffer), fmt, vlist); - va_end(vlist); - s_strBuffer[ srcLen ] = 0; - - (void)STD_ConvertStringSjisToUnicode( s_strBufferUTF16, &dstLen, s_strBuffer, &srcLen, NULL ); - s_strBufferUTF16[ dstLen ] = 0; - - NNS_G2dTextCanvasDrawText(&gTextCanvas, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, - s_strBufferUTF16 ); -} - -void PrintfSJISSub( int x, int y, int color, const char *fmt, ... ) -{ - int srcLen; - int dstLen = sizeof(s_strBufferUTF16); - va_list vlist; - va_start(vlist, fmt); - srcLen = STD_TVSNPrintf( s_strBuffer, sizeof(s_strBuffer), fmt, vlist); - va_end(vlist); - s_strBuffer[ srcLen ] = 0; - - (void)STD_ConvertStringSjisToUnicode( s_strBufferUTF16, &dstLen, s_strBuffer, &srcLen, NULL ); - s_strBufferUTF16[ dstLen ] = 0; - - NNS_G2dTextCanvasDrawText(&gTextCanvasSub, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, - s_strBufferUTF16 ); -} - - -// L[͓ǂݏo-------------------------------- -void ReadKeyPad(void) -{ - u16 readData = PAD_Read(); - pad.trg = (u16)(readData & (readData ^ pad.cont)); // gK - pad.cont = readData; // x^ -} - - -// ^b`plf[^̎擾----------------------- -void ReadTP(void) -{ - TP_GetCalibratedPoint( &tpd.last, &tpd.raw ); // OTPf[^ޔ - - if( TP_RequestRawSampling(&tpd.raw) ) { // ^b`pl̃TvO - SVC_CpuClear(0x0000, &tpd.raw, sizeof(tpd.raw), 16); // SPI-busyŃf[^擾Ɏśhf[^ȂhŃ^[B - return; - } - TP_GetCalibratedPoint( &tpd.disp, &tpd.raw ); // TPWLCDWɕϊB - - if( !WaitDetachTP() ) { // TPf^b`҂sB - SVC_CpuClear(0x0000, &tpd.disp, sizeof(tpd.disp), 16); // SPI-busyŃf[^擾Ɏśhf[^ȂhŃ^[B - return; - } -#if 0 - if(tpd.disp.touch) { // ݂TPf[^\ - switch ( tpd.disp.validity ) { - case TP_VALIDITY_VALID: - OS_Printf("( %3d, %3d ) -> ( %3d, %3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); - break; - case TP_VALIDITY_INVALID_X: - OS_Printf("( *%3d, %3d ) -> ( *%3d, %3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); - break; - case TP_VALIDITY_INVALID_Y: - OS_Printf("( %3d, *%3d ) -> ( %3d, *%3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); - break; - case TP_VALIDITY_INVALID_XY: - OS_Printf("( *%3d, *%3d ) -> ( *%3d, *%3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); - break; - } - } -#endif -} - - -// TPf^b`҂ -static BOOL WaitDetachTP( void ) -{ - // s_detach_countnĂAJEgB - if(s_detach_count > 0) { - if(tpd.disp.touch == 0) { // TPĂȂ΁AJEgisKlōē͂󂯕tB - s_detach_count--; - }else { - s_detach_count = TP_CSR_DETACH_COUNT; - } - return FALSE; - } - return TRUE; -} - - -// TPf^b`҂̊Jn -static void StartDetachTP( void ) -{ - s_detach_count = TP_CSR_DETACH_COUNT; -} - - -//====================================================== -// j[ -//====================================================== - -// j[` -void DrawMenu( u16 nowCsr, const MenuParam *pMenu ) -{ - int i; - int color; - - for( i = 0; i < pMenu->num; i++ ) { - if(i == nowCsr) { - if( !pMenu->pos[ i ].enable ) { - color = pMenu->disable_color; - }else { - color = pMenu->select_color; - } - }else { - color = pMenu->normal_color; - } - PutStringUTF16( pMenu->pos[ i ].x, pMenu->pos[ i ].y, color, (pMenu->str_elem)[ i ] ); - } -} - -// ^b`plɂIs֐EėpŁB -// Ƀ`^Ozx̋@\B -// SelectSomethingFunc^̊֐|C^funcɂ́AɎ𖞂֐AXgɂăZbgĎgB -// PDvfŃ^b`ĂTRUEԂAłȂFALSEԂB -// QDɗ^|C^̎wϐɃJ[\ʒuĕԂB -BOOL SelectSomethingByTP( u16 *nowCsr, SelectSomethingFunc func[], int funcnum ) -{ - int i; - static u16 detach_count = 0; - static u16 csr_old = 0xffff; - static u16 same_csr_count = 0; - - // detach_countnĂAJEgB - if( detach_count > 0 ) { - if( tpd.disp.touch == 0 ) { // TPĂȂ΁AJEgisATP_CSR_DETACH_COUNTJEgŃj[I - if( ++detach_count == TP_CSR_DETACH_COUNT ) { - detach_count = 0; - same_csr_count = 0; - *nowCsr = csr_old; - return TRUE; - }else { - return FALSE; - } - } - } - detach_count=0; // detachJEgl̃NA - - for( i = 0; i < funcnum; i++ ) { - if( tpd.disp.touch ) { // ^b`pl^b`ĂȂA - u16 csr; - if( func[i]( &csr, &tpd.disp ) ) { // func͗vfɃ^b`ĂTRUEԂAJ[\ʒuԂĂ֐ - if( tpd.disp.validity == TP_VALIDITY_VALID ) { // J[\̗vfɈړ - if( csr_old == csr ) { - if( same_csr_count < TP_CSR_TOUCH_COUNT ) { - same_csr_count++; - } - if( same_csr_count == TP_CSR_TOUCH_COUNT ) { - *nowCsr = csr; - } - return FALSE; - }else { - csr_old = csr; - } - break; - } - }else { - } - }else { // touch==0 - if( same_csr_count == TP_CSR_TOUCH_COUNT ) { - detach_count = 1; - break; - } - } - } - same_csr_count = 0; - return FALSE; -} - -// ^b`plɂ郁j[I -BOOL SelectMenuByTP( u16 *nowCsr, const MenuParam *pMenu ) -{ - u16 i; - static u16 detach_count = 0; - static u16 csr_old = 0xff; - static u16 same_csr_count = 0; - - // detach_countnĂAJEgB - if( detach_count > 0 ) { - if( tpd.disp.touch == 0 ) { // TPĂȂ΁AJEgisAPOJEgŃj[I - if( ++detach_count == TP_CSR_DETACH_COUNT ) { - detach_count = 0; - return TRUE; - }else { - return FALSE; - } - } - } - detach_count=0; // detachJEgl̃NA - - for( i = 0; i < pMenu->num; i++ ) { - if( tpd.disp.touch ) { // ^b`plj[̗vfŃ^b`ĂȂA - NNSG2dTextRect rect = NNS_G2dTextCanvasGetTextRect( &gTextCanvas, (pMenu->str_elem)[ i ] ); - u16 top_x = (u16)( pMenu->pos[ i ].x ); // j[vfLCDWZo - u16 top_y = (u16)( pMenu->pos[ i ].y ); - u16 bottom_x = (u16)( top_x + rect.width ); - u16 bottom_y = (u16)( top_y + rect.height ); - - - if( WithinRangeTP( top_x, top_y, bottom_x, bottom_y, &tpd.disp ) ) { - if( tpd.disp.validity == TP_VALIDITY_VALID ) { // J[\̗vfɈړ - if( csr_old == i ) { - if( same_csr_count < TP_CSR_TOUCH_COUNT ) { - same_csr_count++; - } - if( same_csr_count == TP_CSR_TOUCH_COUNT ) { - *nowCsr = i; - } - return FALSE; - }else { - csr_old = i; - } - break; - } - }else { - } - }else { // touch==0 - if( same_csr_count == TP_CSR_TOUCH_COUNT ) { - detach_count = 1; - break; - } - } - } - same_csr_count = 0; - return FALSE; -} - - -// ݂̃^b`plWẅɂ邩ǂԂB -BOOL WithinRangeTP( int top_x, int top_y, int bottom_x, int bottom_y, TPData *tgt ) -{ - if( ( tgt->x >= top_x ) && - ( tgt->x <= bottom_x ) && - ( tgt->y >= top_y ) && - ( tgt->y <= bottom_y ) ) { - return TRUE; - }else { - return FALSE; - } -} - - -// oi[ACROBJ̃[h -void SetBannerIconOBJ( GXOamAttr *pDstOAM, BannerFileV1 *bannerp ) -{ - GXS_LoadOBJPltt( bannerp->pltt, 15, BANNER_PLTT_SIZE ); - MI_CpuCopyFast( bannerp->image, (void *)(HW_DB_OBJ_VRAM + 0x20), BANNER_IMAGE_SIZE ); - G2_SetOBJAttr( pDstOAM, // OAM pointer - 32, // X position - 32, // Y position - 0, // Priority - GX_OAM_MODE_NORMAL, // Bitmap mode - FALSE, // mosaic off - GX_OAM_EFFECT_NONE, // affine off - GX_OAM_SHAPE_32x32, // 16x16 size - GX_OAM_COLOR_16, // 16 color - 1, // charactor - 15, // palette - 0); // affine -} - - -//=============================================== -// RTCANZX[` -//=============================================== - -// RTCf[^̎擾 -BOOL GetRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ) -{ - if( forceGetFlag || ( pRTCDraw->vcount++ == 59 ) ) { - pRTCDraw->vcount = 0; - MI_CpuCopy16( &pRTCDraw->date, &pRTCDraw->date_old, sizeof(RTCDate) ); - MI_CpuCopy16( &pRTCDraw->time, &pRTCDraw->time_old, sizeof(RTCTime) ); - (void)RTC_GetDateTime( &pRTCDraw->date, &pRTCDraw->time ); - return TRUE; - } - return FALSE; -} - - -// RTCf[^̕\ -void DrawRTCData( RTCDrawProperty *pRTCDraw ) -{ - void (*pPrintFunc)( int x, int y, int color, const char *fmt, ... ) = - ( pRTCDraw->isTopLCD ) ? PrintfSJISSub : PrintfSJIS; - - // ORTC̏ - { - u32 year = pRTCDraw->date_old.year + 2000; - pPrintFunc( pRTCDraw->date_x, pRTCDraw->date_y, TXT_COLOR_WHITE, "%04d/%02d/%02d[%3s]", - year, - pRTCDraw->date_old.month, - pRTCDraw->date_old.day, - g_strWeek[ pRTCDraw->date_old.week ] - ); - pPrintFunc( pRTCDraw->time_x, pRTCDraw->time_y, TXT_COLOR_WHITE, "%02d:%02d:%02d", - pRTCDraw->time_old.hour, - pRTCDraw->time_old.minute, - pRTCDraw->time_old.second - ); - } - // RTC̕\ - { - u32 year = pRTCDraw->date.year + 2000; - pPrintFunc( pRTCDraw->date_x, pRTCDraw->date_y, TXT_COLOR_BLACK, "%d/%02d/%02d[%3s]", - year, - pRTCDraw->date.month, - pRTCDraw->date.day, - g_strWeek[ pRTCDraw->date.week ] - ); - pPrintFunc( pRTCDraw->time_x, pRTCDraw->time_y, TXT_COLOR_BLACK, "%02d:%02d:%02d", - pRTCDraw->time.hour, - pRTCDraw->time.minute, - pRTCDraw->time.second - ); - } -} - -// RTCf[^̎擾&\ -void GetAndDrawRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ) -{ - if( GetRTCData( pRTCDraw, forceGetFlag ) ) { - DrawRTCData( pRTCDraw ); - } -} - -// [U[J[̈̐؂ւ -void ChangeUserColor( u8 col ) -{ - int l; - if(col > 15) return; - for(l=0;l<16;l++) - { - TXTColorPalette[16+l] = TempPalette[16 * col + l]; - } - GX_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) ); -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/misc.h b/build/tests/DisplaySystemInformation/ARM9/src/misc.h deleted file mode 100644 index ba7cd3bc..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/misc.h +++ /dev/null @@ -1,196 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: misc.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __MISC_H__ -#define __MISC_H__ - -#include -#include - -#define NNS_G2D_UNICODE -#include -#include -#include -#include - -#include "cmn.h" - -#ifdef __cplusplus -extern "C" { -#endif - -// define data---------------------------------------------------------- -#define TP_CSR_TOUCH_COUNT 2 // TPJ[\̃`^Oẑ߂̃JEgl -#define TP_CSR_DETACH_COUNT 2 // TPJ[\uIvƔ肷TPf^b`̃JEgl - -// DrawText ł̍ -#define TXT_DRAWTEXT_FLAG_DEFAULT (NNS_G2D_VERTICALORIGIN_TOP | NNS_G2D_HORIZONTALORIGIN_LEFT | NNS_G2D_HORIZONTALALIGN_LEFT) - -// TXTColorPalette ̐F 256Fpbgւ̃[hz -enum -{ - // pbg0 TXT_CPALETTE_MAIN - TXT_COLOR_NULL=0, - TXT_COLOR_WHITE, - TXT_COLOR_BLACK, - TXT_COLOR_RED, - TXT_COLOR_GREEN, - TXT_COLOR_BLUE, - TXT_COLOR_CYAN, - TXT_COLOR_MAGENTA, - TXT_COLOR_YELLOW, - - // [U[J[Of[Vpbg̈ - TXT_UCOLOR_GNULL=16, - TXT_UCOLOR_G0, - TXT_UCOLOR_G1, - TXT_UCOLOR_G2, - TXT_UCOLOR_G3, - TXT_UCOLOR_G4, - TXT_UCOLOR_G5, - TXT_UCOLOR_G6, - TXT_UCOLOR_G7, - TXT_UCOLOR_G8, - TXT_UCOLOR_G9, - TXT_UCOLOR_G10, - TXT_UCOLOR_G11, - TXT_UCOLOR_G12, - TXT_UCOLOR_G13, - TXT_UCOLOR_GWHITE, - - // [U[J[Tv̈ - TXT_UCOLOR_GRAY=32, - TXT_UCOLOR_BROWN, - TXT_UCOLOR_RED, - TXT_UCOLOR_PINK, - TXT_UCOLOR_ORANGE, - TXT_UCOLOR_YELLOW, - TXT_UCOLOR_LIMEGREEN, - TXT_UCOLOR_GREEN, - TXT_UCOLOR_DARKGREEN, - TXT_UCOLOR_SEAGREEN, - TXT_UCOLOR_TURQUOISE, - TXT_UCOLOR_BLUE, - TXT_UCOLOR_DARKBLUE, - TXT_UCOLOR_PURPLE, - TXT_UCOLOR_VIOLET, - TXT_UCOLOR_MAGENTA, - - // pbg TXT_CPALETTE_4BPP - TXT_COLOR_4BPP_NULL=48, - TXT_COLOR_4BPP_BG=49, - TXT_COLOR_4BPP_TEXT=49 -}; - -// v\ꏊ -#define RTC_DATE_TOP_X ( 9 * 8 ) -#define RTC_DATE_TOP_Y ( 10 * 8 ) -#define RTC_TIME_TOP_X ( 12 * 8 ) -#define RTC_TIME_TOP_Y ( 12 * 8 ) - - -// L[f[^[N -typedef struct { - u16 trg; // gK - u16 cont; // x^ -}KeyWork; - - -// ^b`pl[N -typedef struct { - int detached; // ̃f[^͂Ń^b`ꂽƂB - TPData disp; // ̓͒liLCDWj - TPData raw; // ̓͒liTP Wj - TPData last; // O̓͒liLCDWj -}TpWork; - - -// j[vfW -typedef struct MenuPos { - BOOL enable; - int x; - int y; -}MenuPos; - - -// j[\p[^\ -typedef struct MenuParam { - int num; - int normal_color; - int select_color; - int disable_color; - MenuPos *pos; - const u16 **str_elem; -}MenuParam; - - -// RTCf[^\ʒu[N -typedef struct RTCDrawProperty { - BOOL isTopLCD; - int date_x; - int date_y; - int time_x; - int time_y; - int vcount; - RTCDate date; - RTCTime time; - RTCDate date_old; - RTCTime time_old; -}RTCDrawProperty; - -typedef BOOL (*SelectSomethingFunc)( u16 *csr, TPData *tgt ); - -// global variables-------------------------------------------------- -extern TpWork tpd; // ^b`plf[^ -extern KeyWork pad; // L[pbh̓f[^ -extern const u8 *const g_strWeek[ 7 ]; // j -extern RTCDrawProperty g_rtcDraw; - -extern NNSFndAllocator g_allocator; // AP[^ -extern NNSG2dFont gFont; // tHg -extern NNSG2dCharCanvas gCanvas; // CharCanvas -extern NNSG2dTextCanvas gTextCanvas; // TextCanvas -extern NNSG2dCharCanvas gCanvasSub; // CharCanvas -extern NNSG2dTextCanvas gTextCanvasSub; // TextCanvas - -// function------------------------------------------------------------- -void InitAllocator( void ); -void *Alloc( u32 size ); -void Free( void *pBuffer ); -void InitBG( void ); -int GetPrintfWidth( const NNSG2dTextCanvas *pCanvas, const char *fmt, ... ); -void PutStringUTF16 ( int x, int y, int color, const u16 *strUTF16 ); -void PutStringUTF16Sub( int x, int y, int color, const u16 *strUTF16 ); -void PrintfSJIS ( int x, int y, int color, const char *fmt, ... ); -void PrintfSJISSub( int x, int y, int color, const char *fmt, ... ); -void ReadKeyPad( void ); -void ReadTP( void ); -void DrawMenu( u16 nowCsr, const MenuParam *pMenu ); -BOOL SelectSomethingByTP( u16 *nowCsr, SelectSomethingFunc func[], int funcnum ); -BOOL SelectMenuByTP( u16 *nowCsr, const MenuParam *pMenu ); -BOOL WithinRangeTP( int top_x, int top_y, int bottom_x, int bottom_y, TPData *tgt ); -void SetBannerIconOBJ( GXOamAttr *pDstOAM, BannerFileV1 *bannerp ); -BOOL GetRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ); -void DrawRTCData( RTCDrawProperty *pRTCDraw ); -void GetAndDrawRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ); -void ChangeUserColor( u8 col ); - -#ifdef __cplusplus -} -#endif - -#endif // __MISC_H__ diff --git a/build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h b/build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h deleted file mode 100644 index 8961cca5..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h +++ /dev/null @@ -1,533 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: myIoreg_SCFG.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - *---------------------------------------------------------------------------*/ - -// ARM9Ŏ󂯎ARM7SCFGQƂ邽߂ -// ARM9Ȃ̂ARM7ˑ̃ItZbg񂪕Kv... - - -// }NĒ`h߂̋̍ - -#ifndef __MY_IOREG_SCFG_H__ -#define __MY_IOREG_SCFG_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Definition of Register offsets, addresses and variables. - */ - - -/* ROM */ - -#define DISP_REG_ROM_OFFSET 0x4000 -#define DISP_REG_ROM_ADDR (HW_REG_BASE + DISP_REG_ROM_OFFSET) - -/* A9ROM */ - -#define DISP_REG_A9ROM_OFFSET 0x4000 -#define DISP_REG_A9ROM_ADDR (HW_REG_BASE + DISP_REG_A9ROM_OFFSET) - -/* A7ROM */ - -#define DISP_REG_A7ROM_OFFSET 0x4001 -#define DISP_REG_A7ROM_ADDR (HW_REG_BASE + DISP_REG_A7ROM_OFFSET) - -/* ROMWE */ - -#define DISP_REG_ROMWE_OFFSET 0x4002 -#define DISP_REG_ROMWE_ADDR (HW_REG_BASE + DISP_REG_ROMWE_OFFSET) - -/* CLK */ - -#define DISP_REG_CLK_OFFSET 0x4004 -#define DISP_REG_CLK_ADDR (HW_REG_BASE + DISP_REG_CLK_OFFSET) - -/* JTAG */ - -#define DISP_REG_JTAG_OFFSET 0x4006 -#define DISP_REG_JTAG_ADDR (HW_REG_BASE + DISP_REG_JTAG_OFFSET) - -/* EXT */ - -#define DISP_REG_EXT_OFFSET 0x4008 -#define DISP_REG_EXT_ADDR (HW_REG_BASE + DISP_REG_EXT_OFFSET) - -/* MC */ - -#define DISP_REG_MC_OFFSET 0x4010 -#define DISP_REG_MC_ADDR (HW_REG_BASE + DISP_REG_MC_OFFSET) - -/* MCCHAT */ - -#define DISP_REG_MCCHAT_OFFSET 0x4012 -#define DISP_REG_MCCHAT_ADDR (HW_REG_BASE + DISP_REG_MCCHAT_OFFSET) - -/* MC2 */ - -#define DISP_REG_MC2_OFFSET 0x4014 -#define DISP_REG_MC2_ADDR (HW_REG_BASE + DISP_REG_MC2_OFFSET) - - -/* WL */ - -#define DISP_REG_WL_OFFSET 0x4020 -#define DISP_REG_WL_ADDR (HW_REG_BASE + DISP_REG_WL_OFFSET) - -/* OP */ - -#define DISP_REG_OP_OFFSET 0x4024 -#define DISP_REG_OP_ADDR (HW_REG_BASE + DISP_REG_OP_OFFSET) - - -/* - * Definitions of Register fields - */ - - -/* ROM */ - -#define DISP_REG_SCFG_ROM_ROMWE_SHIFT 16 -#define DISP_REG_SCFG_ROM_ROMWE_SIZE 1 -#define DISP_REG_SCFG_ROM_ROMWE_MASK 0x00010000 - -#define DISP_REG_SCFG_ROM_ARM7FUSE_SHIFT 10 -#define DISP_REG_SCFG_ROM_ARM7FUSE_SIZE 1 -#define DISP_REG_SCFG_ROM_ARM7FUSE_MASK 0x00000400 - -#define DISP_REG_SCFG_ROM_ARM7RSEL_SHIFT 9 -#define DISP_REG_SCFG_ROM_ARM7RSEL_SIZE 1 -#define DISP_REG_SCFG_ROM_ARM7RSEL_MASK 0x00000200 - -#define DISP_REG_SCFG_ROM_ARM7SEL_SHIFT 8 -#define DISP_REG_SCFG_ROM_ARM7SEL_SIZE 1 -#define DISP_REG_SCFG_ROM_ARM7SEL_MASK 0x00000100 - -#define DISP_REG_SCFG_ROM_ARM9RSEL_SHIFT 1 -#define DISP_REG_SCFG_ROM_ARM9RSEL_SIZE 1 -#define DISP_REG_SCFG_ROM_ARM9RSEL_MASK 0x00000002 - -#define DISP_REG_SCFG_ROM_ARM9SEL_SHIFT 0 -#define DISP_REG_SCFG_ROM_ARM9SEL_SIZE 1 -#define DISP_REG_SCFG_ROM_ARM9SEL_MASK 0x00000001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_ROM_FIELD( romwe, arm7fuse, arm7rsel, arm7sel, arm9rsel, arm9sel ) \ - (u32)( \ - ((u32)(romwe) << DISP_REG_SCFG_ROM_ROMWE_SHIFT) | \ - ((u32)(arm7fuse) << DISP_REG_SCFG_ROM_ARM7FUSE_SHIFT) | \ - ((u32)(arm7rsel) << DISP_REG_SCFG_ROM_ARM7RSEL_SHIFT) | \ - ((u32)(arm7sel) << DISP_REG_SCFG_ROM_ARM7SEL_SHIFT) | \ - ((u32)(arm9rsel) << DISP_REG_SCFG_ROM_ARM9RSEL_SHIFT) | \ - ((u32)(arm9sel) << DISP_REG_SCFG_ROM_ARM9SEL_SHIFT)) -#endif - - -/* A9ROM */ - -#define DISP_REG_SCFG_A9ROM_RSEL_SHIFT 1 -#define DISP_REG_SCFG_A9ROM_RSEL_SIZE 1 -#define DISP_REG_SCFG_A9ROM_RSEL_MASK 0x02 - -#define DISP_REG_SCFG_A9ROM_SEC_SHIFT 0 -#define DISP_REG_SCFG_A9ROM_SEC_SIZE 1 -#define DISP_REG_SCFG_A9ROM_SEC_MASK 0x01 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_A9ROM_FIELD( rsel, sec ) \ - (u8)( \ - ((u32)(rsel) << DISP_REG_SCFG_A9ROM_RSEL_SHIFT) | \ - ((u32)(sec) << DISP_REG_SCFG_A9ROM_SEC_SHIFT)) -#endif - - -/* A7ROM */ - -#define DISP_REG_SCFG_A7ROM_FUSE_SHIFT 2 -#define DISP_REG_SCFG_A7ROM_FUSE_SIZE 1 -#define DISP_REG_SCFG_A7ROM_FUSE_MASK 0x04 - -#define DISP_REG_SCFG_A7ROM_RSEL_SHIFT 1 -#define DISP_REG_SCFG_A7ROM_RSEL_SIZE 1 -#define DISP_REG_SCFG_A7ROM_RSEL_MASK 0x02 - -#define DISP_REG_SCFG_A7ROM_SEC_SHIFT 0 -#define DISP_REG_SCFG_A7ROM_SEC_SIZE 1 -#define DISP_REG_SCFG_A7ROM_SEC_MASK 0x01 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_A7ROM_FIELD( fuse, rsel, sec ) \ - (u8)( \ - ((u32)(fuse) << DISP_REG_SCFG_A7ROM_FUSE_SHIFT) | \ - ((u32)(rsel) << DISP_REG_SCFG_A7ROM_RSEL_SHIFT) | \ - ((u32)(sec) << DISP_REG_SCFG_A7ROM_SEC_SHIFT)) -#endif - - -/* ROMWE */ - -#define DISP_REG_SCFG_ROMWE_WE_SHIFT 0 -#define DISP_REG_SCFG_ROMWE_WE_SIZE 1 -#define DISP_REG_SCFG_ROMWE_WE_MASK 0x0001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_ROMWE_FIELD( we ) \ - (u16)( \ - ((u32)(we) << DISP_REG_SCFG_ROMWE_WE_SHIFT)) -#endif - - -/* CLK */ - -#define DISP_REG_SCFG_CLK_SNDMCLK_SHIFT 8 -#define DISP_REG_SCFG_CLK_SNDMCLK_SIZE 1 -#define DISP_REG_SCFG_CLK_SNDMCLK_MASK 0x0100 - -#define DISP_REG_SCFG_CLK_WRAMHCLK_SHIFT 7 -#define DISP_REG_SCFG_CLK_WRAMHCLK_SIZE 1 -#define DISP_REG_SCFG_CLK_WRAMHCLK_MASK 0x0080 - -#define DISP_REG_SCFG_CLK_AESHCLK_SHIFT 2 -#define DISP_REG_SCFG_CLK_AESHCLK_SIZE 1 -#define DISP_REG_SCFG_CLK_AESHCLK_MASK 0x0004 - -#define DISP_REG_SCFG_CLK_SD2HCLK_SHIFT 1 -#define DISP_REG_SCFG_CLK_SD2HCLK_SIZE 1 -#define DISP_REG_SCFG_CLK_SD2HCLK_MASK 0x0002 - -#define DISP_REG_SCFG_CLK_SD1HCLK_SHIFT 0 -#define DISP_REG_SCFG_CLK_SD1HCLK_SIZE 1 -#define DISP_REG_SCFG_CLK_SD1HCLK_MASK 0x0001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_CLK_FIELD( sndmclk, wramhclk, aeshclk, sd2hclk, sd1hclk ) \ - (u16)( \ - ((u32)(sndmclk) << DISP_REG_SCFG_CLK_SNDMCLK_SHIFT) | \ - ((u32)(wramhclk) << DISP_REG_SCFG_CLK_WRAMHCLK_SHIFT) | \ - ((u32)(aeshclk) << DISP_REG_SCFG_CLK_AESHCLK_SHIFT) | \ - ((u32)(sd2hclk) << DISP_REG_SCFG_CLK_SD2HCLK_SHIFT) | \ - ((u32)(sd1hclk) << DISP_REG_SCFG_CLK_SD1HCLK_SHIFT)) -#endif - - -/* JTAG */ - -#define DISP_REG_SCFG_JTAG_DSPJE_SHIFT 8 -#define DISP_REG_SCFG_JTAG_DSPJE_SIZE 1 -#define DISP_REG_SCFG_JTAG_DSPJE_MASK 0x0100 - -#define DISP_REG_SCFG_JTAG_CPUJE_SHIFT 1 -#define DISP_REG_SCFG_JTAG_CPUJE_SIZE 1 -#define DISP_REG_SCFG_JTAG_CPUJE_MASK 0x0002 - -#define DISP_REG_SCFG_JTAG_ARM7SEL_SHIFT 0 -#define DISP_REG_SCFG_JTAG_ARM7SEL_SIZE 1 -#define DISP_REG_SCFG_JTAG_ARM7SEL_MASK 0x0001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_JTAG_FIELD( dspje, cpuje, arm7sel ) \ - (u16)( \ - ((u32)(dspje) << DISP_REG_SCFG_JTAG_DSPJE_SHIFT) | \ - ((u32)(cpuje) << DISP_REG_SCFG_JTAG_CPUJE_SHIFT) | \ - ((u32)(arm7sel) << DISP_REG_SCFG_JTAG_ARM7SEL_SHIFT)) -#endif - - -/* EXT */ - -#define DISP_REG_SCFG_EXT_CFG_SHIFT 31 -#define DISP_REG_SCFG_EXT_CFG_SIZE 1 -#define DISP_REG_SCFG_EXT_CFG_MASK 0x80000000 - -#define DISP_REG_SCFG_EXT_PUENABLE_SHIFT 28 -#define DISP_REG_SCFG_EXT_PUENABLE_SIZE 1 -#define DISP_REG_SCFG_EXT_PUENABLE_MASK 0x10000000 - -#define DISP_REG_SCFG_EXT_SD20_SHIFT 28 -#define DISP_REG_SCFG_EXT_SD20_SIZE 1 -#define DISP_REG_SCFG_EXT_SD20_MASK 0x10000000 - -#define DISP_REG_SCFG_EXT_NEWB_ACCESS_E_SHIFT 16 -#define DISP_REG_SCFG_EXT_NEWB_ACCESS_E_SIZE 10 -#define DISP_REG_SCFG_EXT_NEWB_ACCESS_E_MASK 0x03ff0000 - -#define DISP_REG_SCFG_EXT_WRAM_SHIFT 25 -#define DISP_REG_SCFG_EXT_WRAM_SIZE 1 -#define DISP_REG_SCFG_EXT_WRAM_MASK 0x02000000 - -#define DISP_REG_SCFG_EXT_MC_B_SHIFT 24 -#define DISP_REG_SCFG_EXT_MC_B_SIZE 1 -#define DISP_REG_SCFG_EXT_MC_B_MASK 0x01000000 - -#define DISP_REG_SCFG_EXT_GPIO_SHIFT 23 -#define DISP_REG_SCFG_EXT_GPIO_SIZE 1 -#define DISP_REG_SCFG_EXT_GPIO_MASK 0x00800000 - -#define DISP_REG_SCFG_EXT_I2C_SHIFT 22 -#define DISP_REG_SCFG_EXT_I2C_SIZE 1 -#define DISP_REG_SCFG_EXT_I2C_MASK 0x00400000 - -#define DISP_REG_SCFG_EXT_I2S_SHIFT 21 -#define DISP_REG_SCFG_EXT_I2S_SIZE 1 -#define DISP_REG_SCFG_EXT_I2S_MASK 0x00200000 - -#define DISP_REG_SCFG_EXT_MIC_SHIFT 20 -#define DISP_REG_SCFG_EXT_MIC_SIZE 1 -#define DISP_REG_SCFG_EXT_MIC_MASK 0x00100000 - -#define DISP_REG_SCFG_EXT_SD2_SHIFT 19 -#define DISP_REG_SCFG_EXT_SD2_SIZE 1 -#define DISP_REG_SCFG_EXT_SD2_MASK 0x00080000 - -#define DISP_REG_SCFG_EXT_SD1_SHIFT 18 -#define DISP_REG_SCFG_EXT_SD1_SIZE 1 -#define DISP_REG_SCFG_EXT_SD1_MASK 0x00040000 - -#define DISP_REG_SCFG_EXT_AES_SHIFT 17 -#define DISP_REG_SCFG_EXT_AES_SIZE 1 -#define DISP_REG_SCFG_EXT_AES_MASK 0x00020000 - -#define DISP_REG_SCFG_EXT_DMAC_SHIFT 16 -#define DISP_REG_SCFG_EXT_DMAC_SIZE 1 -#define DISP_REG_SCFG_EXT_DMAC_MASK 0x00010000 - -#define DISP_REG_SCFG_EXT_NITROB_EX_E_SHIFT 8 -#define DISP_REG_SCFG_EXT_NITROB_EX_E_SIZE 8 -#define DISP_REG_SCFG_EXT_NITROB_EX_E_MASK 0x0000ff00 - -#define DISP_REG_SCFG_EXT_PSRAM_SHIFT 14 -#define DISP_REG_SCFG_EXT_PSRAM_SIZE 2 -#define DISP_REG_SCFG_EXT_PSRAM_MASK 0x0000c000 - -#define DISP_REG_SCFG_EXT_VRAM_SHIFT 13 -#define DISP_REG_SCFG_EXT_VRAM_SIZE 1 -#define DISP_REG_SCFG_EXT_VRAM_MASK 0x00002000 - -#define DISP_REG_SCFG_EXT_LCDC_SHIFT 12 -#define DISP_REG_SCFG_EXT_LCDC_SIZE 1 -#define DISP_REG_SCFG_EXT_LCDC_MASK 0x00001000 - -#define DISP_REG_SCFG_EXT_SIO_SHIFT 11 -#define DISP_REG_SCFG_EXT_SIO_SIZE 1 -#define DISP_REG_SCFG_EXT_SIO_MASK 0x00000800 - -#define DISP_REG_SCFG_EXT_DSEL_SHIFT 10 -#define DISP_REG_SCFG_EXT_DSEL_SIZE 1 -#define DISP_REG_SCFG_EXT_DSEL_MASK 0x00000400 - -#define DISP_REG_SCFG_EXT_SPI_SHIFT 9 -#define DISP_REG_SCFG_EXT_SPI_SIZE 1 -#define DISP_REG_SCFG_EXT_SPI_MASK 0x00000200 - -#define DISP_REG_SCFG_EXT_INTC_SHIFT 8 -#define DISP_REG_SCFG_EXT_INTC_SIZE 1 -#define DISP_REG_SCFG_EXT_INTC_MASK 0x00000100 - -#define DISP_REG_SCFG_EXT_NITROB_MOD_E_SHIFT 0 -#define DISP_REG_SCFG_EXT_NITROB_MOD_E_SIZE 8 -#define DISP_REG_SCFG_EXT_NITROB_MOD_E_MASK 0x000000ff - -#define DISP_REG_SCFG_EXT_MC_SHIFT 7 -#define DISP_REG_SCFG_EXT_MC_SIZE 1 -#define DISP_REG_SCFG_EXT_MC_MASK 0x00000080 - -#define DISP_REG_SCFG_EXT_SND_SHIFT 2 -#define DISP_REG_SCFG_EXT_SND_SIZE 1 -#define DISP_REG_SCFG_EXT_SND_MASK 0x00000004 - -#define DISP_REG_SCFG_EXT_SDMA_SHIFT 1 -#define DISP_REG_SCFG_EXT_SDMA_SIZE 1 -#define DISP_REG_SCFG_EXT_SDMA_MASK 0x00000002 - -#define DISP_REG_SCFG_EXT_DMA_SHIFT 0 -#define DISP_REG_SCFG_EXT_DMA_SIZE 1 -#define DISP_REG_SCFG_EXT_DMA_MASK 0x00000001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_EXT_FIELD( cfg, puenable, sd20, newb_access_e, wram, mc_b, gpio, i2c, i2s, mic, sd2, sd1, aes, dmac, nitrob_ex_e, psram, vram, lcdc, sio, dsel, spi, intc, nitrob_mod_e, mc, snd, sdma, dma ) \ - (u32)( \ - ((u32)(cfg) << DISP_REG_SCFG_EXT_CFG_SHIFT) | \ - ((u32)(puenable) << DISP_REG_SCFG_EXT_PUENABLE_SHIFT) | \ - ((u32)(sd20) << DISP_REG_SCFG_EXT_SD20_SHIFT) | \ - ((u32)(newb_access_e) << DISP_REG_SCFG_EXT_NEWB_ACCESS_E_SHIFT) | \ - ((u32)(wram) << DISP_REG_SCFG_EXT_WRAM_SHIFT) | \ - ((u32)(mc_b) << DISP_REG_SCFG_EXT_MC_B_SHIFT) | \ - ((u32)(gpio) << DISP_REG_SCFG_EXT_GPIO_SHIFT) | \ - ((u32)(i2c) << DISP_REG_SCFG_EXT_I2C_SHIFT) | \ - ((u32)(i2s) << DISP_REG_SCFG_EXT_I2S_SHIFT) | \ - ((u32)(mic) << DISP_REG_SCFG_EXT_MIC_SHIFT) | \ - ((u32)(sd2) << DISP_REG_SCFG_EXT_SD2_SHIFT) | \ - ((u32)(sd1) << DISP_REG_SCFG_EXT_SD1_SHIFT) | \ - ((u32)(aes) << DISP_REG_SCFG_EXT_AES_SHIFT) | \ - ((u32)(dmac) << DISP_REG_SCFG_EXT_DMAC_SHIFT) | \ - ((u32)(nitrob_ex_e) << DISP_REG_SCFG_EXT_NITROB_EX_E_SHIFT) | \ - ((u32)(psram) << DISP_REG_SCFG_EXT_PSRAM_SHIFT) | \ - ((u32)(vram) << DISP_REG_SCFG_EXT_VRAM_SHIFT) | \ - ((u32)(lcdc) << DISP_REG_SCFG_EXT_LCDC_SHIFT) | \ - ((u32)(sio) << DISP_REG_SCFG_EXT_SIO_SHIFT) | \ - ((u32)(dsel) << DISP_REG_SCFG_EXT_DSEL_SHIFT) | \ - ((u32)(spi) << DISP_REG_SCFG_EXT_SPI_SHIFT) | \ - ((u32)(intc) << DISP_REG_SCFG_EXT_INTC_SHIFT) | \ - ((u32)(nitrob_mod_e) << DISP_REG_SCFG_EXT_NITROB_MOD_E_SHIFT) | \ - ((u32)(mc) << DISP_REG_SCFG_EXT_MC_SHIFT) | \ - ((u32)(snd) << DISP_REG_SCFG_EXT_SND_SHIFT) | \ - ((u32)(sdma) << DISP_REG_SCFG_EXT_SDMA_SHIFT) | \ - ((u32)(dma) << DISP_REG_SCFG_EXT_DMA_SHIFT)) -#endif - -/* MC1 */ - -#define DISP_REG_MI_MC1_CC_SHIFT 16 -#define DISP_REG_MI_MC1_CC_SIZE 16 -#define DISP_REG_MI_MC1_CC_MASK 0xffff0000 - -#define DISP_REG_MI_MC1_SWP_SHIFT 15 -#define DISP_REG_MI_MC1_SWP_SIZE 1 -#define DISP_REG_MI_MC1_SWP_MASK 0x00008000 - -#define DISP_REG_MI_MC1_SL2_STATUS_SHIFT 4 -#define DISP_REG_MI_MC1_SL2_STATUS_SIZE 4 -#define DISP_REG_MI_MC1_SL2_STATUS_MASK 0x000000f0 - -#define DISP_REG_MI_MC1_SL2_M1_SHIFT 7 -#define DISP_REG_MI_MC1_SL2_M1_SIZE 1 -#define DISP_REG_MI_MC1_SL2_M1_MASK 0x00000080 - -#define DISP_REG_MI_MC1_SL2_M0_SHIFT 6 -#define DISP_REG_MI_MC1_SL2_M0_SIZE 1 -#define DISP_REG_MI_MC1_SL2_M0_MASK 0x00000040 - -#define DISP_REG_MI_MC1_SL2_CDET_SHIFT 4 -#define DISP_REG_MI_MC1_SL2_CDET_SIZE 1 -#define DISP_REG_MI_MC1_SL2_CDET_MASK 0x00000010 - -#define DISP_REG_MI_MC1_SL1_STATUS_SHIFT 0 -#define DISP_REG_MI_MC1_SL1_STATUS_SIZE 4 -#define DISP_REG_MI_MC1_SL1_STATUS_MASK 0x0000000f - -#define DISP_REG_MI_MC1_SL1_M1_SHIFT 3 -#define DISP_REG_MI_MC1_SL1_M1_SIZE 1 -#define DISP_REG_MI_MC1_SL1_M1_MASK 0x00000008 - -#define DISP_REG_MI_MC1_SL1_M0_SHIFT 2 -#define DISP_REG_MI_MC1_SL1_M0_SIZE 1 -#define DISP_REG_MI_MC1_SL1_M0_MASK 0x00000004 - -#define DISP_REG_MI_MC1_SL1_CDET_SHIFT 0 -#define DISP_REG_MI_MC1_SL1_CDET_SIZE 1 -#define DISP_REG_MI_MC1_SL1_CDET_MASK 0x00000001 - - -/* MC */ - -#define DISP_REG_MI_MC_SWP_SHIFT 15 -#define DISP_REG_MI_MC_SWP_SIZE 1 -#define DISP_REG_MI_MC_SWP_MASK 0x8000 - -#define DISP_REG_MI_MC_SL2_MODE_SHIFT 6 -#define DISP_REG_MI_MC_SL2_MODE_SIZE 2 -#define DISP_REG_MI_MC_SL2_MODE_MASK 0x00c0 - -#define DISP_REG_MI_MC_SL2_CDET_SHIFT 4 -#define DISP_REG_MI_MC_SL2_CDET_SIZE 1 -#define DISP_REG_MI_MC_SL2_CDET_MASK 0x0010 - -#define DISP_REG_MI_MC_SL1_MODE_SHIFT 2 -#define DISP_REG_MI_MC_SL1_MODE_SIZE 2 -#define DISP_REG_MI_MC_SL1_MODE_MASK 0x000c - -#define DISP_REG_MI_MC_SL1_CDET_SHIFT 0 -#define DISP_REG_MI_MC_SL1_CDET_SIZE 1 -#define DISP_REG_MI_MC_SL1_CDET_MASK 0x0001 - -#ifndef SDK_ASM -#define DISP_REG_MI_MC_FIELD( swp, sl2_mode, sl2_cdet, sl1_mode, sl1_cdet ) \ - (u16)( \ - ((u32)(swp) << DISP_REG_MI_MC_SWP_SHIFT) | \ - ((u32)(sl2_mode) << DISP_REG_MI_MC_SL2_MODE_SHIFT) | \ - ((u32)(sl2_cdet) << DISP_REG_MI_MC_SL2_CDET_SHIFT) | \ - ((u32)(sl1_mode) << DISP_REG_MI_MC_SL1_MODE_SHIFT) | \ - ((u32)(sl1_cdet) << DISP_REG_MI_MC_SL1_CDET_SHIFT)) -#endif - -/* MCCHAT */ - -#define DISP_REG_MI_MCCHAT_CC_SHIFT 0 -#define DISP_REG_MI_MCCHAT_CC_SIZE 16 -#define DISP_REG_MI_MCCHAT_CC_MASK 0xffff - -#ifndef SDK_ASM -#define DISP_REG_MI_MCCHAT_FIELD( cc ) \ - (u16)( \ - ((u32)(cc) << DISP_REG_MI_MCCHAT_CC_SHIFT)) -#endif - - -/* MC2 */ - -#define DISP_REG_MI_MC2_CA_SHIFT 0 -#define DISP_REG_MI_MC2_CA_SIZE 16 -#define DISP_REG_MI_MC2_CA_MASK 0xffff - -#ifndef SDK_ASM -#define DISP_REG_MI_MC2_FIELD( ca ) \ - (u16)( \ - ((u32)(ca) << DISP_REG_MI_MC2_CA_SHIFT)) -#endif - - -/* WL */ - -#define DISP_REG_SCFG_WL_OFFB_SHIFT 0 -#define DISP_REG_SCFG_WL_OFFB_SIZE 1 -#define DISP_REG_SCFG_WL_OFFB_MASK 0x0001 - -#ifndef SDK_ASM -#define DISP_REG_SCFG_WL_FIELD( offb ) \ - (u16)( \ - ((u32)(offb) << DISP_REG_SCFG_WL_OFFB_SHIFT)) -#endif - - -/* OP */ - -#define DISP_REG_SCFG_OP_OP1_SHIFT 1 -#define DISP_REG_SCFG_OP_OP1_SIZE 1 -#define DISP_REG_SCFG_OP_OP1_MASK 0x0002 - -#define DISP_REG_SCFG_OP_OP0_SHIFT 0 -#define DISP_REG_SCFG_OP_OP0_SIZE 1 -#define DISP_REG_SCFG_OP_OP0_MASK 0x0001 - -#define DISP_REG_SCFG_OP_OPT_SHIFT 0 -#define DISP_REG_SCFG_OP_OPT_SIZE 2 -#define DISP_REG_SCFG_OP_OPT_MASK 0x0003 - -#ifndef SDK_ASM - -#define DISP_REG_SCFG_OP_FIELD( op1, op0, opt ) \ - (u16)( \ - ((u32)(op1) << DISP_REG_SCFG_OP_OP1_SHIFT) | \ - ((u32)(op0) << DISP_REG_SCFG_OP_OP0_SHIFT) | \ - ((u32)(opt) << DISP_REG_SCFG_OP_OPT_SHIFT)) -#endif - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* TWL_IOREG_SCFG_H_ */ -#endif diff --git a/build/tests/DisplaySystemInformation/ARM9/src/strResource.c b/build/tests/DisplaySystemInformation/ARM9/src/strResource.c deleted file mode 100644 index 9e70045d..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/strResource.c +++ /dev/null @@ -1,726 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: strResource.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "drawFunc.h" - - -// VERSION_MENU_SIZEAFONTMENU_SIZERecɉĉ•ςȂ̂constł͂Ȃ - -#ifdef VERSION_VIEWER - -int s_numMenu[] = { - VERSIONMENU_SIZE, - ROOTMENU_SIZE -}; - -const char *s_strRootMenu[] = { - "Installed Content Version" -}; - - -const char **s_strMetaMenu[] = { - NULL, - s_strRootMenu -}; - -#else - -int s_numMenu[] = { - OWNERMENU_SIZE, - PARENTALMENU_SIZE, - SECURE_USER_MENU_SIZE, - OTHERMENU_SIZE, - NORMAL_HW_MENU_SIZE, - SECURE_HW_MENU_SIZE, - SCFG_ARM7_MENU_SIZE, - SCFG_ARM9_MENU_SIZE, - SYSMENU_MENU_SIZE, - FONTMENU_SIZE, - WLMENU_SIZE, - WHITEMENU_SIZE, - VERSIONMENU_SIZE, - 0, - 0, - 0, - ROOTMENU_SIZE -}; - -const char *s_strARM7RegisterName[] = { - "ROM", - "CLK", - "JTAG", - "EXP", - "MC1", - "MC2", - "DSWL", - "OPT", -}; - -const char *s_strARM9RegisterName[] = { - "ROM", - "CLK", - "RST", - "EXP", -}; - -const char *s_strSCFGViewMode[] = { - "", - "" -}; - -const char *s_strRootMenu[] = { - "Owner", - "Parental control", - "Secure User Info", - "Other Info", - "Normal Hardware Info", - "Secure Hardware Info", - "SCFG Info (ARM7 side)", - "SCFG Info (ARM9 side)", - "SystemMenu Version", - "Shared Font", - "Wireless Firmware", - "Whitelist", - "Installed Content Version", - "Reset HW Setting to Default", - "break HW Setting", - "Reset RTC Data" -}; - -const char *s_strOwnerMenu[] = { - "Language", - "Favorite color", - "Birthday", - "Country", - "Nickname", - "Comment" -}; - -const char *s_strParentalMenu[] = { - "Parental control", - "Picto Chat", - "ds Download", - "browser", - "Wii Point", - "Photo Exchange", - "UGC", - "Organization", - "Age", - "Password", - "Quastion id", - "Answer" -}; - -const char *s_strSecureUserMenu[] = { - "Finished Initial Setting(Setting)", - "Finished Initial Setting(Launcher)", - "Finished Broken Setting Sequence", - "Installed Softbox Count", - "Free Softbox Count", - "Last Boot Soft Index", - "Last Boot Soft Platform", - "Last Boot Soft ID" -}; - -const char *s_strOtherMenu[] = { - "Agree EULA", - "EULA Version", - "Wireless", - "RTC Offset", - "TP Calib raw x1", - "TP Calib raw y1", - "TP Calib dx1", - "TP Calib dy1", - "TP Calib raw x2", - "TP Calib raw y2", - "TP Calib dx2", - "TP Calib dy2", - "TP Calib RSV" -}; - -const char *s_strNormalHWMenu[] = { - "RTC Adjustment", - "Unique ID" -}; - -const char *s_strSecureHWMenu[] = { - "Force Disable Wireless", - "Region", - "Serial No", - "Language Bitmap", - "Fuse Data", - "Launcher TitleID Lo" -}; - -const char *s_strSCFGArm9Menu[] = { - "ARM9 SecureROM", - "Rom Status", - - "CPU Speed", - "DSP Clock", - "Camera Clock", - "WRAM Clock", - "Camera CKI", - - "DSP Reset Flag", - - "Fixed DMA", - "Fixed Geometry", - "Fixed Renderer", - "Fixed 2D Engine", - "Fixed Divider", - "Fixed Card I/F", - "Expanded VRAM", - "Expanded LCDC", - "Expanded INTC", - "PSRAM Boundary", - "New DMA Access", - "Camera Access", - "DSP Access", - "MemoryCard I/F", - "WRAM Access", - "CFG Block Access", - "All SCFG Check", - "SCFG Check Err7", - "SCFG Check Err9" -}; - -const char *s_strSCFGArm7Menu[] = { - - // rom - "ARM9 SecureROM", - "ARM9 ROM Type", - "ARM7 SecureROM", - "ARM7 ROM Type", - "ARM7 FuseRom", - "Write Rom Area", - - // VKubNNbN - "SD1 I/F Clock", - "SD2 I/F Clock", - "AES Clock", - "WRAM Clock", - "SND Clock", - - // JTAG - "Chain ARM7 to CPU JTAG", - "CPU JTAG", - "DSP JTAG", - - // g@\ - "Fixed A7-DMAC1", - "Fixed Sound DMA", - "Fixed Sound", - "Fixed Memory Card", - "Expanded A7-INTC", - "Expanded SPI", - "Expanded Sound DMA", - "Expanded SIO", - "Expanded LCDC", - "Expanded VRAM", - "PSRAM Boundary", - "A7-DMAC2 Block", - "AES Block", - "SD1 I/F Block", - "SD2 I/F Block", - "Mic Block", - "I2S I/F Block", - "I2C I/F Block", - "GPIO Block", - "MemoryCard I/F", - "Shared WRAM", - "PU Resistance", - "ALL SCFG Block", - - // J[h I/F - "MC Slot1 DET", - "MC Slot1 Mode", - "MC Slot2 DET", - "MC Slot2 Mode", - "Swap MC1 MC2", - "Chatter. Count", - "MC Counter Data", - - // - "Old Wireless", - - // IvV[qǂݏo - "Option Form", - "Option App for" -}; - -const char *s_strSystemMenu[] = { - "Timestamp", - "Version (numeric)", - "Version (string)", - "EULA URL", - "NUP Hostname", - - ".twl-nup-cert.der" , - ".twl-nup-prvkey.der", - ".twl-shop-cert.der", - ".twl-shop-prvkey.der", - "NintendoCA-G2.der" -}; - -const char *s_strFontMenu[] = { - "Timestamp", -}; - -const char *s_strWLMenu[] = { - "Version", - "Num of FW", - "FW1 type", - "FW1 version", - "FW2 type", - "FW2 version" -}; - -const char *s_strWhiteMenu[] = { - "Num of Entry", - "Tmd Hash" -}; - -const char **s_strMetaMenu[] = { - s_strOwnerMenu, - s_strParentalMenu, - s_strSecureUserMenu, - s_strOtherMenu, - s_strNormalHWMenu, - s_strSecureHWMenu, - s_strSCFGArm7Menu, - s_strSCFGArm9Menu, - s_strSystemMenu, - s_strFontMenu, - s_strWLMenu, - s_strWhiteMenu, - NULL, - NULL, - NULL, - NULL, - s_strRootMenu -}; - -char *s_strAccess[] = { - "Inaccessible", - "Accessible" -}; - -char *s_strJoint[] = { - "Jointed", - "DisJointed" -}; - -char *s_strSupply[] = { - "STOPPED", - "SUPPLIED" -}; - -char *s_strPSRAM[] = { - "4MB", - "16MB", - "32MB" -}; - -char *s_strRomMode[] = { - "TWL 64KB ROM", - "NITRO 8KB ROM" - -}; - -char *s_strCpuSpeed[] = { - "67.03 MHz", - "134.06 MHz" -}; - -char *s_strRomForm[] = { - "Included ROM", - "Downloaded PROM" -}; - -char *s_strRomApp[] = { - "Mass Product", - "Development 1", - "Development 2", - "PROM Download" -}; - -char *s_strWLFWType[] = { - "2in1 module 1.1", - "2in1 module 2.0", - "One Chip (M&M)" -}; - -char *s_strMCMode[] = { - "00", - "01", - "10", - "11" -}; - -char *s_strEnable[] = { - "DISABLED", - "ENABLED" -}; - -char *s_strResult[] = { - "Failed.", - "Succeeded.", - "" -}; - - - -char *s_strSysMenuKey[] = { - "Incorrect", - "correct: dev", - "correct: prod" -}; - -char *s_strBool[] = { - "FALSE", - "TRUE" -}; - - -char *s_strRatingOrg[] = { - "CERO", - "ESRB", - "BBFC", - "USK", - "PEGI general", - "PEGI Finland", - "PEGI Portugal", - "PEGI and BBFC Great Briten", - "OFLC", - "GRB" -}; - - char *s_strRegion[] = { - "JAPAN", - "AMERICA", - "EUROPA", - "AUSTRALIA", - "CHINA", - "KOREA", -}; - - char *s_strUserColor[] = { - "GRAY ", - "BROWN ", - "RED ", - "PINK ", - "ORANGE ", - "YELLOW ", - "LIME GREEN", - "GREEN ", - "DARK GREEN", - "SEA GREEN ", - "TURQUOISE ", - "BLUE ", - "DARK BLUE ", - "PURPLE ", - "VIOLET ", - "MAGENTA ", -}; - -char *s_strLanguage[] = { - "JAPANESE", - "ENGLISH", - "FRENCH", - "GERMAN", - "ITALIAN", - "SPANISH", - "CHINESE", - "KOREAN", -}; - -char *s_strCountry[] = { - "UNDEFINED ", // ݒ - "JAPAN ", // { - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "Anguilla ", // AM - "ANTIGUA_AND_BARBUDA", // AeBOAEo[u[_ - "ARGENTINA ", // A[` - "ARUBA", // Ao - "BAHAMAS", // on} - "BARBADOS", // oohX - "BELIZE", // x[Y - "BOLIVIA", // {rA - "BRAZIL", // uW - "BRITISH_VIRGIN_ISLANDS", // p̃@[W - "CANADA", // Ji_ - "CAYMAN_ISLANDS", // PC} - "CHILE ", // ` - "COLOMBIA", // RrA - "COSTA_RICA", // RX^J - "DOMINICA", // h~jJ - "DOMINICAN_REPUBLIC", // h~jJa - "ECUADOR", // GNAh - "EL_SALVADOR", // GToh - "FRENCH_GUIANA", // tX̃MAi - "GRENADA", // Oi_ - "GUADELOUPE", // OAh[v - "GUATEMALA ", // OAe} - "GUYANA", // KCAi - "HAITI", // nC` - "HONDURAS", // zWX - "JAMAICA", // W}CJ - "MARTINIQUE", // }eBj[N - "MEXICO", // LVR - "MONTSERRAT", // gZg - "NETHERLANDS_ANTILLES", // I_̃AeB - "NICARAGUA", // jJOA - "PANAMA ", // pi} - "PARAGUAY", // pOAC - "PERU", // y[ - "ST_KITTS_AND_NEVIS", // ZgLbcElCrX - "ST_LUCIA", // ZgVA - "ST_VINCENT_AND_THE_GRENADINES", // ZgrZgEOifB[ - "SURINAME", // Xi - "TRINIDAD_AND_TOBAGO", // gj_[hEgoS - "TURKS_AND_CAICOS_ISLANDS", // ^[NXEJCRX - "UNITED_STATES", // AJ - "URUGUAY ", // EOAC - "US_VIRGIN_ISLANDS", // ė̃o[W - "VENEZUELA", // xlYG - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "ALBANIA ", // AojA - "AUSTRALIA", // I[XgA - "AUSTRIA", // I[XgA - "BELGIUM", // xM[ - "BOSNIA_AND_HERZEGOVINA", // {XjAEwcFSri - "BOTSWANA", // {ci - "BULGARIA ", // uKA - "CROATIA", // NA`A - "CYPRUS", // LvX - "CZECH_REPUBLIC", // `FR - "DENMARK", // f}[N - "ESTONIA", // GXgjA - "FINLAND", // tBh - "FRANCE", // tX - "GERMANY", // hCc - "GREECE", // MV - "HUNGARY ", // nK[ - "ICELAND", // ACXh - "IRELAND", // ACh - "ITALY", // C^A - "LATVIA", // grA - "LESOTHO", // \g - "LIECHTENSTEIN", // qeV^C - "LITHUANIA", // gAjA - "LUXEMBOURG", // NZuN - "MACEDONIA", // }PhjA - "MALTA ", // }^ - "MONTENEGRO", // elO - "MOZAMBIQUE", // Ur[N - "NAMIBIA", // i~rA - "NETHERLANDS", // I_ - "NEW_ZEALAND", // j[W[h - "NORWAY", // mEF[ - "POLAND", // |[h - "PORTUGAL", // |gK - "ROMANIA", // [}jA - "RUSSIA ", // VA - "SERBIA", // ZrA - "SLOVAKIA", // XoLA - "SLOVENIA", // XxjA - "SOUTH_AFRICA", // AtJ - "SPAIN", // XyC - "SWAZILAND", // XWh - "SWEDEN", // XEF[f - "SWITZERLAND", // XCX - "TURKEY", // gR - "UNITED_KINGDOM ", // CMX - "ZAMBIA", // UrA - "ZIMBABWE", // WouG - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "TAIWAN ", // p - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "SOUTH_KOREA ", // ؍ - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "HONG_KONG ", // zR - "MACAU", // }JI - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "INDONESIA ", // ChlVA - "SINGAPORE ", // VK|[ - "THAILAND ", // ^C - "PHILIPPINES", // tBs - "MALAYSIA", // }[VA - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "CHINA ", // - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UAE ", // Au񒷍AM - "INDIA ", // Ch - "EGYPT ", // GWvg - "OMAN", // I}[ - "QATAR", // J^[ - "KUWAIT", // NEF[g - "SAUDI_ARABIA", // TEWArA - "SYRIA", // VA - "BAHRAIN", // o[[ - "JORDAN", // _ - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "UNKNOWN", - "OTHERS ", - "UNKNOWN ", -}; - - -#endif // else VERSION_VIEWER - -char *s_strOK[] = { - "CANCEL", - "OK" -}; - -char *s_strCorrect[] = { - "Incorrect", - "Correct" -}; - -char s_strNA[] = { - "N/A" -}; diff --git a/build/tests/DisplaySystemInformation/ARM9/src/strResource.h b/build/tests/DisplaySystemInformation/ARM9/src/strResource.h deleted file mode 100644 index 97c8928f..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/strResource.h +++ /dev/null @@ -1,293 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: strResource.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __DISPLAY_INFO_RESOURCE__ -#define __DISPLAY_INFO_RESOURCE__ - -// j[ID -#ifdef VERSION_VIEWER - #define ROOTMENU_SIZE 1 - #define MENU_ROOT 1 - #define MENU_VERSION 0 - #define MENU_OWNER 10 - #define MENU_PARENTAL 11 - #define MENU_SECURE_USER 12 - #define MENU_OTHER 13 - #define MENU_NORMAL_HW 14 - #define MENU_SECURE_HW 15 - #define MENU_SCFG_ARM7 16 - #define MENU_SCFG_ARM9 17 - #define MENU_SYSMENU 18 - #define MENU_FONT 19 - #define MENU_WL 20 - #define MENU_WHITE 21 - #define MENU_RESET_INFO 22 - #define MENU_BREAK_DATA 23 - #define MENU_RTC_RESET 24 - -#else - #define ROOTMENU_SIZE 16 - - #define MENU_ROOT 16 - #define MENU_OWNER 0 - #define MENU_PARENTAL 1 - #define MENU_SECURE_USER 2 - #define MENU_OTHER 3 - #define MENU_NORMAL_HW 4 - #define MENU_SECURE_HW 5 - #define MENU_SCFG_ARM7 6 - #define MENU_SCFG_ARM9 7 - #define MENU_SYSMENU 8 - #define MENU_FONT 9 - #define MENU_WL 10 - #define MENU_WHITE 11 - #define MENU_VERSION 12 - #define MENU_RESET_INFO 13 - #define MENU_BREAK_DATA 14 - #define MENU_RTC_RESET 15 -#endif // else VERSION_VIEWER - -#define OWNERMENU_SIZE 6 - -#define OWNER_LANGUAGE 0 -#define OWNER_COLOR 1 -#define OWNER_BIRTHDAY 2 -#define OWNER_COUNTRY 3 -#define OWNER_NICKNAME 4 -#define OWNER_COMMENT 5 - -#define PARENTALMENU_SIZE 12 - -#define PARENTAL_FLAG 0 -#define PARENTAL_PICTOCHAT 1 -#define PARENTAL_DOWNLOAD 2 -#define PARENTAL_BROWSER 3 -#define PARENTAL_WIIPOINT 4 -#define PARENTAL_PHOTO_EXCHANGE 5 -#define PARENTAL_UGC 6 -#define PARENTAL_ORGANIZATION 7 -#define PARENTAL_AGE 8 -#define PARENTAL_PASSWORD 9 -#define PARENTAL_QUESTION_ID 10 -#define PARENTAL_ANSWER 11 - -#define SECURE_USER_MENU_SIZE 8 - -#define SECURE_USER_INITIAL_SETTINGS 0 -#define SECURE_USER_INITIAL_LAUNCHER 1 -#define SECURE_USER_BROKEN_SETTINGS 2 -#define SECURE_USER_INSTALLED_SOFTBOX 3 -#define SECURE_USER_FREE_SOFTBOX 4 -#define SECURE_USER_LASTBOOT_IDX 5 -#define SECURE_USER_LASTBOOT_PLATFORM 6 -#define SECURE_USER_LASTBOOT_ID 7 - -#define OTHERMENU_SIZE 13 - -#define OTHER_AGREE_EULA 0 -#define OTHER_EULA_VERSION 1 -#define OTHER_WIRELESS 2 -#define OTHER_RTC_OFFSET 3 -#define OTHER_TP_RAWX1 4 -#define OTHER_TP_RAWY1 5 -#define OTHER_TP_DX1 6 -#define OTHER_TP_DY1 7 -#define OTHER_TP_RAWX2 8 -#define OTHER_TP_RAWY2 9 -#define OTHER_TP_DX2 10 -#define OTHER_TP_DY2 11 -#define OTHER_TP_RSV 12 - -#define NORMAL_HW_MENU_SIZE 2 - -#define NORMAL_HW_RTC_ADJUST 0 -#define NORMAL_HW_UNIQUE_ID 1 - -#define SECURE_HW_MENU_SIZE 6 - -#define SECURE_HW_FORCE_DISABLE 0 -#define SECURE_HW_REGION 1 -#define SECURE_HW_SERIAL 2 -#define SECURE_HW_LANGUAGE 3 -#define SECURE_HW_FUSE 4 -#define SECURE_HW_LAUNCHER_ID 5 - -#define SCFG_ARM9_MENU_SIZE 27 - -#define SCFG_ARM9_ROM_SEC 0 -#define SCFG_ARM9_ROM_STATE 1 -#define SCFG_ARM9_CLK_CPU 2 -#define SCFG_ARM9_CLK_DSP 3 -#define SCFG_ARM9_CLK_CAM 4 -#define SCFG_ARM9_CLK_WRAM 5 -#define SCFG_ARM9_CLK_CAM_CKI 6 -#define SCFG_ARM9_RST_DSP 7 -#define SCFG_ARM9_EXT_DMA 8 -#define SCFG_ARM9_EXT_GEO 9 -#define SCFG_ARM9_EXT_REN 10 -#define SCFG_ARM9_EXT_2DE 11 -#define SCFG_ARM9_EXT_DIV 12 -#define SCFG_ARM9_EXT_MC 13 -#define SCFG_ARM9_EXT_INTC 14 -#define SCFG_ARM9_EXT_LCDC 15 -#define SCFG_ARM9_EXT_VRAM 16 -#define SCFG_ARM9_EXT_PS 17 -#define SCFG_ARM9_EXT_DMAC 18 -#define SCFG_ARM9_EXT_CAM 19 -#define SCFG_ARM9_EXT_DSP 20 -#define SCFG_ARM9_EXT_MCB 21 -#define SCFG_ARM9_EXT_WRAM 22 -#define SCFG_ARM9_EXT_CFG 23 -#define SCFG_ARM9_TOTAL_CHECK 24 -#define SCFG_ARM9_CHECK_ERROR7 25 -#define SCFG_ARM9_CHECK_ERROR9 26 - -#define SCFG_ARM7_MENU_SIZE 47 - -#define SCFG_ARM7_ROM_ARM9_SEC 0 -#define SCFG_ARM7_ROM_ARM9_RSEL 1 -#define SCFG_ARM7_ROM_ARM7_SEC 2 -#define SCFG_ARM7_ROM_ARM7_RSEL 3 -#define SCFG_ARM7_ROM_ARM7_FUSE 4 -#define SCFG_ARM7_ROM_WE 5 -#define SCFG_ARM7_CLK_SD1 6 -#define SCFG_ARM7_CLK_SD2 7 -#define SCFG_ARM7_CLK_AES 8 -#define SCFG_ARM7_CLK_WRAM 9 -#define SCFG_ARM7_CLK_SND 10 -#define SCFG_ARM7_JTAG_A7 11 -#define SCFG_ARM7_JTAG_CPU 12 -#define SCFG_ARM7_JTAG_DSP 13 -#define SCFG_ARM7_EXT_DMA 14 -#define SCFG_ARM7_EXT_SDMA 15 -#define SCFG_ARM7_EXT_SND 16 -#define SCFG_ARM7_EXT_MC 17 -#define SCFG_ARM7_EXT_INTC 18 -#define SCFG_ARM7_EXT_SPI 19 -#define SCFG_ARM7_EXT_DSEL 20 -#define SCFG_ARM7_EXT_SIO 21 -#define SCFG_ARM7_EXT_LCDC 22 -#define SCFG_ARM7_EXT_VRAM 23 -#define SCFG_ARM7_EXT_PS 24 -#define SCFG_ARM7_EXT_DMAC 25 -#define SCFG_ARM7_EXT_AES 26 -#define SCFG_ARM7_EXT_SD1 27 -#define SCFG_ARM7_EXT_SD2 28 -#define SCFG_ARM7_EXT_MIC 29 -#define SCFG_ARM7_EXT_I2S 30 -#define SCFG_ARM7_EXT_I2C 31 -#define SCFG_ARM7_EXT_GPIO 32 -#define SCFG_ARM7_EXT_MCB 33 -#define SCFG_ARM7_EXT_WRAM 34 -#define SCFG_ARM7_EXT_PU 35 -#define SCFG_ARM7_EXT_CFG 36 -#define SCFG_ARM7_MI_SC1_CDET 37 -#define SCFG_ARM7_MI_SC1_MODE 38 -#define SCFG_ARM7_MI_SC2_CDET 39 -#define SCFG_ARM7_MI_SC2_MODE 40 -#define SCFG_ARM7_MI_SWP 41 -#define SCFG_ARM7_MI_CC 42 -#define SCFG_ARM7_MI_CA 43 -#define SCFG_ARM7_WL_OFFB 44 -#define SCFG_ARM7_OP_FORM 45 -#define SCFG_ARM7_OP_APP 46 - -#define SCFG_ARM7_SHARED_OFFSET 47 - -#define SYSMENU_MENU_SIZE 10 - -#define SYSMENU_TIMESTAMP 0 -#define SYSMENU_VERSION_NUM 1 -#define SYSMENU_VERSION_STR 2 -#define SYSMENU_EULA_URL 3 -#define SYSMENU_NUP_HOST 4 - -#define SYSMENU_NUP_CERT 5 -#define SYSMENU_NUP_PRV 6 -#define SYSMENU_SHOP_CERT 7 -#define SYSMENU_SHOP_PRV 8 -#define SYSMENU_NINTENDO_CAG2 9 - -#define SYSMENU_HASH_IDX 5 - -#define FONTMENU_SIZE 1 - -#define FONT_TIMESTAMP 0 -#define FONT_INFO 1 - -#define WLMENU_SIZE 6 - -#define WL_VERSION 0 -#define WL_NUM_FW 1 -#define WL_FW1_TYPE 2 -#define WL_FW1_VER 3 -#define WL_FW2_TYPE 4 -#define WL_FW2_VER 5 - -#define WHITEMENU_SIZE 2 - -#define WHITE_NUM 0 -#define WHITE_HASH 1 - -#define VERSIONMENU_SIZE 0 - -#define VERSION_OTHER 0 - -extern int s_numMenu[]; -extern const char *s_strRootMenu[]; -extern const char *s_strOwnerMenu[]; -extern const char *s_strParentalMenu[]; -extern const char *s_strSecureUserMenu[]; -extern const char *s_strOtherMenu[]; -extern const char *s_strNormalHWMenu[]; -extern const char *s_strSecureHWMenu[]; -extern const char *s_strSCFGARM7Menu[]; -extern const char *s_strSCFGARM9Menu[]; -extern const char *s_strOtherMenu[]; -extern const char *s_strSystemMenu[]; -extern const char *s_strFontMenu[] ; -extern const char *s_strWLMenu[]; -extern const char *s_strWhiteMenu[]; -extern const char **s_strMetaMenu[]; -extern const char *s_strARM7RegisterName[]; -extern const char *s_strARM9RegisterName[]; -extern const char *s_strSCFGViewMode[]; - -extern char *s_strEnable[]; -extern char *s_strJoint[]; -extern char *s_strCorrect[]; -extern char *s_strSysMenuKey[]; -extern char *s_strSupply[]; -extern char *s_strRomMode[]; -extern char *s_strPSRAM[]; -extern char *s_strCpuSpeed[]; -extern char *s_strOK[]; -extern char *s_strWLFWType[]; -extern char *s_strResult[]; -extern char *s_strBool[]; -extern char *s_strAccess[]; -extern char *s_strRomApp[]; -extern char *s_strRomForm[]; -extern char *s_strMCMode[]; -extern char *s_strRatingOrg[]; -extern char *s_strRegion[]; -extern char *s_strUserColor[]; -extern char *s_strLanguage[]; -extern char *s_strCountry[]; -extern char s_strNA[]; - -#endif // ifndef __DISPLAY_INFO_RESOURCE__ \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/util.c b/build/tests/DisplaySystemInformation/ARM9/src/util.c deleted file mode 100644 index 95ece923..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/util.c +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include "util.h" - -u8 ctoh( const char c ); - -void putBinary( u8 *src, u32 size ) -{ - int i; - for( i = 0; i < size; i++ ) - { - OS_TPrintf( "%x", src[i] ); - } - - OS_TPrintf( "\n" ); -} - -u8 ctoh( const char c ) -{ - if( '0' <= c && c <= '9' ) - { - return (u8) (c - '0'); - } - - if( 'a' <= c && c <= 'f' ) - { - return (u8) ((c - 'a') + 10); - } - - if( 'A' <= c && c <= 'F' ) - { - return (u8) ((c - 'A') + 10); - } - - return 0; -} - -void strToHexa( const char *src, u8 *dst, u32 length ) -// 󂯎z16iz֕ϊ -// length͕ł͂ȂoCgȂ̂Œ -{ - int i; - for( i = 0; i < length*2 ; i += 2 ) - { - dst[i/2] = (u8) ( (ctoh( src[i] ) << 4) | ctoh( src[i+1] ) ); - } -} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/util.h b/build/tests/DisplaySystemInformation/ARM9/src/util.h deleted file mode 100644 index dda95543..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/util.h +++ /dev/null @@ -1,10 +0,0 @@ - -#ifndef __DISPLAY_INFO_UTIL__ -#define __DISPLAY_INFO_UTIL__ - -#include - -void putBinary( u8 *src, u32 size ); -void strToHexa( const char *src, u8 *dst, u32 length ); - -#endif \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c deleted file mode 100644 index 88f1d520..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c +++ /dev/null @@ -1,317 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: viewSystemInfo.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include - -#include "misc.h" -#include "viewSystemInfo.h" -#include "strResource.h" -#include "control.h" - -#include "getInformation.h" - -/* function prototype ----------------------------- */ -void getAllInfo( void ); -void initInfo( void ); -void infoAlloc( DispInfoEntry *p, u8 index, u8 size, BOOL isSjis ); -void printAllInfo ( void ); -void getParentalInfo( void ); -void getOtherInfo( void ); - - -/* global variables ----------------------------- */ - -DispInfoEntry* gAllInfo[ROOTMENU_SIZE]; // ꂼ̃j[Ƃɍڂ̒g""”z - -// Rec^Cg֌W -OSTitleId *gContentsTitle; // Rec^Cg̈ꗗ -s32 gNumContents; // gContentsTitleɊ܂܂^Cg̐ -u16 *gContentsVersion; // gContentsTitleꂼ̃o[W - -// ARM7SCFGf[^ێ -u8 gArm7SCFGReg[DISPINFO_SHARED_SCFG_REG_SIZE]; -u8 gArm7SCFGShared[DISPINFO_SHARED_SCFG_WRAM_SIZE]; - -// LCFGReaď -BOOL gLCFGAccessible; -u8 * gBufLCFG; - -/* static data ---------------------------------- */ - - -/* function definition -------------------------- */ - -void displayInfoMain( void ) -{ - static int menu = MENU_ROOT; - static int line = 0; // ݑIĂy[Wioƍs - static int changeLine = 0; // changeModep - static BOOL firstCall = TRUE; // ŏ̌Ăяoۂ - - // 0: changemode 1: executemode 2: result on/off 3:(require 2=true) success/failed - static u8 modeFlag = 0; - - static BOOL isChangeMode = FALSE; - static BOOL executeMode = FALSE; - - BOOL repaintFlag = FALSE; - ChangeCotnrolResult changeResult = CHANGE_NOTHING; - - // ̌Ăяo͑SĂ̏擾Ȃ - if( firstCall ) - { - initInfo(); - getAllInfo(); - } - - if( modeFlag & MODE_CHANGE_MASK ) - { - changeResult = changeControl( &menu, &line, &changeLine, &modeFlag ); - } - else if( modeFlag & MODE_EXECUTE_MASK ) - { - repaintFlag |= executeControl( &line, &changeLine, &modeFlag ); - } - else - { - repaintFlag |= control( &menu, &line, &changeLine, &modeFlag ); - } - - if( changeResult == CHANGE_VALUE_CHANGED ) - { - // lXVꂽƂ͑S擾Ȃ - LCFG_WriteTWLSettings( (u8 (*) [LCFG_WRITE_TEMP] ) gBufLCFG ); - getAllInfo(); - } - - // pbhőIłꏊƂƂXV - if( changeResult == CHANGE_VALUE_CHANGED || changeResult == CHANGE_CONTROL || repaintFlag || firstCall ) - { - // 삪Ƃ̓LoXNAĕ`悵Ȃ - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - NNS_G2dCharCanvasClear( &gCanvasSub, TXT_COLOR_WHITE ); - // ꗗ`悷 - drawMenu( menu, line, changeLine, modeFlag ); - - firstCall = FALSE; - } - -} - -void initInfo( void ) -// Œ蕶őΉłȂڂɕ̈蓖Ă -{ - -#ifndef VERSION_VIEWER - OS_TPrintf("buffer initialize\n"); - - // sjis (char) - infoAlloc( gAllInfo[MENU_OWNER], OWNER_BIRTHDAY, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SECURE_USER], SECURE_USER_LASTBOOT_ID, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_LAUNCHER_ID, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_NORMAL_HW], NORMAL_HW_UNIQUE_ID, OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 , TRUE ); - infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_SERIAL , OS_TWL_HWINFO_SERIALNO_LEN_MAX + 1, TRUE ); - infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_LANGUAGE, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_FUSE, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SCFG_ARM7], SCFG_ARM7_MI_CC, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SCFG_ARM7], SCFG_ARM7_MI_CA, DISPINFO_BUFSIZE , TRUE ); - infoAlloc( gAllInfo[MENU_SCFG_ARM9], SCFG_ARM9_CHECK_ERROR7, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_SCFG_ARM9], SCFG_ARM9_CHECK_ERROR9, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_WL], WL_VERSION, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_WL], WL_FW1_VER, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_WL], WL_FW2_VER, DISPINFO_BUFSIZE, TRUE ); - infoAlloc( gAllInfo[MENU_OTHER], OTHER_RTC_OFFSET, DISPINFO_BUFSIZE, TRUE); - infoAlloc( gAllInfo[MENU_OTHER], OTHER_TP_RSV, DISPINFO_BUFSIZE, TRUE); - - - // utf(u16) - infoAlloc( gAllInfo[MENU_SYSMENU], SYSMENU_EULA_URL, TWL_EULA_URL_LEN + 1, FALSE ); - infoAlloc( gAllInfo[MENU_SYSMENU], SYSMENU_NUP_HOST, TWL_NUP_HOSTNAME_LEN + 1, FALSE ); - infoAlloc( gAllInfo[MENU_OWNER], OWNER_NICKNAME, OS_OWNERINFO_NICKNAME_MAX + 1 , FALSE ); - infoAlloc( gAllInfo[MENU_OWNER], OWNER_COMMENT, OS_OWNERINFO_COMMENT_MAX + 1 , FALSE ); - infoAlloc( gAllInfo[MENU_PARENTAL], PARENTAL_ANSWER, OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1 , FALSE ); - infoAlloc( gAllInfo[MENU_SYSMENU], SYSMENU_VERSION_STR, TWL_SYSMENU_VER_STR_LEN + 1, FALSE ); - - OS_TPrintf( "information alloc succeeded\n" ); -#endif -} - - -void infoAlloc( DispInfoEntry *p, u8 index, u8 size, BOOL isSjis ) -// initInfo̍Ɨp֐BisSjis=truecharAfalseȂu16蓖Ă -{ - if( isSjis ) - { - p[index].str.sjis = (char*) Alloc (sizeof(char) * size); - SDK_ASSERT( p->str.sjis ); - p[index].str.sjis[size] = '\0'; - } - else - { - p[index].str.utf = (u16*) Alloc (sizeof(u16) * size); - SDK_ASSERT( p->str.utf ); - p[index].str.utf[size-1] = '\0'; - } - -} - - -void getAllInfo( void ) -// -{ - static BOOL firstRead = TRUE; - - OS_TPrintf("reflesh Information\n"); - -#ifndef VERSION_VIEWER - getOwnerInfo(); - getParentalInfo(); - getSecureUserInfo(); - getOtherInfo(); - getHWInfo(); - getSCFGInfo(); - getSysmenuInfo(); - getFontInfo(); - - if( firstRead ){ - getWLInfo(); - getWhiteListInfo(); - } -#endif - -#if NAM_ENABLE - if( firstRead ){ - getContentsVersion(); - } -#endif - - - printAllInfo(); - firstRead = FALSE; - OS_TPrintf("reflesh information finished\n"); -} - - -void displayInfoInit( void ) -{ - int loop1, loop2; - - GX_DispOff(); - GXS_DispOff(); - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - OS_TPrintf(" size version: %d\n", s_numMenu[MENU_VERSION]); - // S̏”zZbg - // ”\Ȃ̂͗pӂstaticւ̃|C^őΉ - // KvȂ̂Ƃmalloc - for(loop1=0; loop1isNumData ) - { - OS_TPrintf("%d %d : %d\n", loop1, loop2, entry->iValue); - } - else if( entry->isSjis ) - { - OS_TPrintf("%d %d : %s\n", loop1, loop2, entry->str.sjis); - } - else - { - OS_TPrintf("%d %d : %s\n", loop1, loop2, entry->str.utf); - } - - } - } -} - - diff --git a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h deleted file mode 100644 index 33bdef68..00000000 --- a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h +++ /dev/null @@ -1,101 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: viewSystemInfo.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __LOAD_VIEW_INFO__ -#define __LOAD_VIEW_INFO__ - -#include -#include "drawFunc.h" -#include "address.h" - -#define DISPINFO_BUFSIZE 64 - -#define MODE_CHANGE_MASK 0x1 -#define MODE_EXECUTE_MASK 0x2 -#define MODE_RESULT_DISPLAY_MASK 0x4 -#define MODE_RESULT_MASK 0x8 -#define MODE_RESULT_SHIFT 3 - -#ifdef __cplusplus -extern "C" { -#endif - -//////////////////////////////// - -typedef enum ChangeFuncArg{ - ARG_BOOL, - ARG_INT, - ARG_OTHER -} ChangeFuncArg; - -typedef struct DispInfoEntry -{ - BOOL isNumData; // \Ƃ͐lf[^f[^ - BOOL isSjis; // UTF16ŕ`悷f[^FALSE isNumData=TRUEȂ疢` - BOOL isAligned; // ɕ\łȂTRUEAKvȂFALSE - BOOL fromLCFG; // LCFG擾f[^͐F‚ĕ\ - int numLines; // ږAړe\̂ɕKvȍs - - const char *kind; // ږ - - union { - char* sjis; - u16* utf; - } str; - - int iValue; // f[^̐l^\(CfNXƂ) - - BOOL changable; // ̒lύX”\ۂ - - // changabletruẽGĝݐݒ肳 - ChangeFuncArg argType; // lύX邽߂̊֐̈^ - - // lύX邽߂̊֐ - union { - void (*cBool)(bool); - void (*cInt)(int); - } changeFunc; - - char **kindNameList; // ږꗗ̐擪ւ̃|C^ - int numKindName; // ږꗗ̒ - -} DispInfoEntry; - - -//////////////////////////////// - -// e{́A[U -extern DispInfoEntry* gAllInfo[ROOTMENU_SIZE]; - -extern u8 gArm7SCFGReg[DISPINFO_SHARED_SCFG_REG_SIZE]; // ARM7̃f[^擾pobt@ -extern u8 gArm7SCFGShared[DISPINFO_SHARED_SCFG_WRAM_SIZE]; // ARM7̃f[^擾pobt@ - -extern BOOL gLCFGAccessible; -extern u8* gBufLCFG; - -//////////////////////////////// - -void displayInfoMain( void ); -void displayInfoInit( void ); - -//////////////////////////////// - -#ifdef __cplusplus -} -#endif - -#endif // __LOAD_VIEW_INFO__ diff --git a/build/tests/DisplaySystemInformation/Makefile b/build/tests/DisplaySystemInformation/Makefile deleted file mode 100644 index 6c2cd85e..00000000 --- a/build/tests/DisplaySystemInformation/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner ARM7_armadillo ARM7_racoon ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/banner/MakeFooter.txt b/build/tests/DisplaySystemInformation/banner/MakeFooter.txt deleted file mode 100644 index 91571e63..00000000 --- a/build/tests/DisplaySystemInformation/banner/MakeFooter.txt +++ /dev/null @@ -1,29 +0,0 @@ -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/MakeHeader.txt b/build/tests/DisplaySystemInformation/banner/MakeHeader.txt deleted file mode 100644 index 10cdc670..00000000 --- a/build/tests/DisplaySystemInformation/banner/MakeHeader.txt +++ /dev/null @@ -1,18 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - diff --git a/build/tests/DisplaySystemInformation/banner/Makefile b/build/tests/DisplaySystemInformation/banner/Makefile deleted file mode 100644 index bfd869e7..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = \ - Makefile.0B0A Makefile.0B1A Makefile.0B2A Makefile.0B3A \ - Makefile.020A Makefile.021A Makefile.0B4A Makefile.0B5A \ - Makefile.0B6A Makefile.0B7A Makefile.0B8A Makefile.0B9A \ - Makefile.0BAA Makefile.0BBA Makefile.022A Makefile.023A \ - Makefile.024A Makefile.025A - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.020A b/build/tests/DisplaySystemInformation/banner/Makefile.020A deleted file mode 100644 index 69b02397..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.020A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 020A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.021A b/build/tests/DisplaySystemInformation/banner/Makefile.021A deleted file mode 100644 index bbc7f3ba..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.021A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 021A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.022A b/build/tests/DisplaySystemInformation/banner/Makefile.022A deleted file mode 100644 index 9222801e..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.022A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 022A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.023A b/build/tests/DisplaySystemInformation/banner/Makefile.023A deleted file mode 100644 index adbe8786..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.023A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 023A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.024A b/build/tests/DisplaySystemInformation/banner/Makefile.024A deleted file mode 100644 index 80b12300..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.024A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 024A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.025A b/build/tests/DisplaySystemInformation/banner/Makefile.025A deleted file mode 100644 index 0d270f76..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.025A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 025A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B0A b/build/tests/DisplaySystemInformation/banner/Makefile.0B0A deleted file mode 100644 index 6a1317f5..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B0A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B0A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B1A b/build/tests/DisplaySystemInformation/banner/Makefile.0B1A deleted file mode 100644 index 8cd89489..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B1A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B1A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B2A b/build/tests/DisplaySystemInformation/banner/Makefile.0B2A deleted file mode 100644 index 7a5328be..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B2A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B2A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B3A b/build/tests/DisplaySystemInformation/banner/Makefile.0B3A deleted file mode 100644 index 9840501b..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B3A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B3A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B4A b/build/tests/DisplaySystemInformation/banner/Makefile.0B4A deleted file mode 100644 index d5dc7e7e..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B4A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B4A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B5A b/build/tests/DisplaySystemInformation/banner/Makefile.0B5A deleted file mode 100644 index 39dd75c0..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B5A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B5A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B6A b/build/tests/DisplaySystemInformation/banner/Makefile.0B6A deleted file mode 100644 index 7ea49c4d..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B6A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B6A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B7A b/build/tests/DisplaySystemInformation/banner/Makefile.0B7A deleted file mode 100644 index 29b6af03..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B7A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B7A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B8A b/build/tests/DisplaySystemInformation/banner/Makefile.0B8A deleted file mode 100644 index 2792ec15..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B8A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B8A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0B9A b/build/tests/DisplaySystemInformation/banner/Makefile.0B9A deleted file mode 100644 index 57f5b803..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0B9A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0B9A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0BAA b/build/tests/DisplaySystemInformation/banner/Makefile.0BAA deleted file mode 100644 index 99da9ee9..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0BAA +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0BAA -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/Makefile.0BBA b/build/tests/DisplaySystemInformation/banner/Makefile.0BBA deleted file mode 100644 index f270f2e2..00000000 --- a/build/tests/DisplaySystemInformation/banner/Makefile.0BBA +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0BBA -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/DisplaySystemInformation/banner/banner020A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner020A_v3.bsf deleted file mode 100644 index c7a40f7f582cb71ba7b4990bfdcfea84e921c48e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS^!Smj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`SBJ($lKA#+tJLMX~28{zGq&~ diff --git a/build/tests/DisplaySystemInformation/banner/banner023A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner023A_v3.bsf deleted file mode 100644 index ce71e02156d426cad6064887265339a15bc08710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwS|Qimj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`SBJ($lKA#+tJLMX~28{!(U$4 diff --git a/build/tests/DisplaySystemInformation/banner/banner024A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner024A_v3.bsf deleted file mode 100644 index 74f6562f685a389a6e866d675faf93c5e5fb4c88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwS|p^r9aV#h#0LU27>{O!9>KDS0`s4;40-{+1Z=jo!R#* zU_?xarRSa%PAK$_+*FMzm8Hr;a?Z*PLCgJi{3bSAEn7}fQ7Ow>HI@r^Rch4^QfGNc zcP?BD6~eiTsX7z=RH`=Ioo0pd(PzMt>EB!#7OWZ4Vd9*Xx^cpjNUAfg?481{^cksK dc``#bp3Ir1`fZPNF+XPP?P%=nXztB4U_QuKUf%!! diff --git a/build/tests/DisplaySystemInformation/banner/banner025A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner025A_v3.bsf deleted file mode 100644 index 83d5343d37acd727514f313ccfceb48367b44624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwS|p>r9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WS?N$=_TV=ByadVq81Rb>o;Pp;RYa*-2raw)7dP eTzWDcYft7>Q~kDwx|km`@^&=xb~N*58ZaNtPhRH$ diff --git a/build/tests/DisplaySystemInformation/banner/banner0B0A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B0A_v3.bsf deleted file mode 100644 index cb327e33face66ce9fa7a2ec09d1a0fb436f8569..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwV;iKr9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WB3T$=_TV=ByadVq81Rb>o;Pp;RYa+0msfbw(PO dUOdOzi#OFopS__j<-?0SeT+PP%shDp%m*_-T_*ql diff --git a/build/tests/DisplaySystemInformation/banner/banner0B1A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B1A_v3.bsf deleted file mode 100644 index 93165d660919176d05a4464cf72b8aeabcfc1cc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS|p^r9Y<;5iwdz3+|o+*FMylqJd>8E55&pyhr$eiQ4hmMtf#D3ztH8q0;dDwS#nsk1z! zI}@&ia^b9ri8^Ebl&aR;on|@t=rdr+^lz>V3)T$jFln3>x^c{tP^wd|?4__Pbw(Oj dUOdOfi#O9mpS__j<-?0SeT+SQ%sqJq%m+9CT`vFt diff --git a/build/tests/DisplaySystemInformation/banner/banner0B2A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B2A_v3.bsf deleted file mode 100644 index 42fdbd7138253d13b43e293f73cf9c793375ceba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS^WImj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`4mj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`+|o+*FMylqJd>8E55&pyhr$eiQ4hmMtf#D3ztH8q0;dDwS#nsk1z! zI}@&ia^b9ri8^Ebl&aR;on|@t=rdr+^lz>V3)T$jFln3>x^c{tP^wd|?4_?Obw(Oj dUOdOfi#O9mpS__j<-?0SeT+SQ%sqJq%m+`vT~`1A diff --git a/build/tests/DisplaySystemInformation/banner/banner0B5A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B5A_v3.bsf deleted file mode 100644 index 5a99c64201a629a31e8f3459c9792c26d0645139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS|p>r9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WS?N$=_TV=ByadVq81Rb>o;Pp;RYa+0myhbw(PO dUOdOzi#OFopS__j<-?0SeT+PP%shDp%m-9}U0(nI diff --git a/build/tests/DisplaySystemInformation/banner/banner0B6A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B6A_v3.bsf deleted file mode 100644 index df218cb759b5a1542f26dc091dd2743521438319..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS|p{r9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WS?N$=_TV=ByadVq81Rb>o;Pp;RYa+0myhbw(PO dUOdOzi#OFopS__j<-?0SeT+PP%shDp%m-OOU1tCQ diff --git a/build/tests/DisplaySystemInformation/banner/banner0B7A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B7A_v3.bsf deleted file mode 100644 index 73ee7b0eb84d47d3a6154386a3dfdfedce572a60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmc(by$ZrW5QM+h1K;5wwS|qKr9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WS?N$=_TV=ByadVq81Rb>o;Pp;RYa+0myhbw(PO dUOdOzi#OFopS__j<-?0SeT+PP%shDp%m-coU2gyY diff --git a/build/tests/DisplaySystemInformation/banner/banner0B8A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B8A_v3.bsf deleted file mode 100644 index e3f3f29b23701918a4b4c74d7e6ebf9e40f3cbef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwV;iKr9Y<;5iwdz6oUbc!9>KDS0^zKaFuef?Cj0%&g}aY zFeJiZ>D12($7Fg(ZmLG)$_~mLDQD$|py7TyeiN&$mJKJVD3m3Q8q0;dDy3?Bsk1z! zI~6X4GU2q22X)5!DO9bvTg`Iv(WB3T$=_TV=ByadVq81Rb>o;Pp;RYa*-2rSw)7dP eTzWDcYft7>Q~kDwx|km`@^&=xb~N*58ZaNKhhDD$ diff --git a/build/tests/DisplaySystemInformation/banner/banner0B9A_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0B9A_v3.bsf deleted file mode 100644 index 1082fd896a4fa5fa5a10981ac02e2b9adace2c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;7m+9HjGr9Y<;5iwdz3t2XcbetoBVfRi>EB!#7OWZ4VbVA&bmN#Op;V__*-K$SSNe=p et~{BJjVE)aseao-UCfUec{>_=JDPhl4VVwFe_po$ diff --git a/build/tests/DisplaySystemInformation/banner/banner0BAA_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0BAA_v3.bsf deleted file mode 100644 index eae1319cc9e4ccb09d6c4fd320726ff704dfdd5b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwS^WImj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`SBJ($lKA#+tJLMX~28{w0B;= diff --git a/build/tests/DisplaySystemInformation/banner/banner0BBA_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner0BBA_v3.bsf deleted file mode 100644 index e20c3b3b119d78947460439369f279f148c2ecb9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 728 zcmc(by$ZrW5QM+h1K;5wwS@>4mj0YZM8s$h4JG1Xs zz>o-srBgpE9FyrCxv3hFD?2E2q@0x-f`SBJ($lKA#+tJLMX~28{xo=*_ diff --git a/build/tests/DisplaySystemInformation/banner/bannerOption.txt b/build/tests/DisplaySystemInformation/banner/bannerOption.txt deleted file mode 100644 index 9da03c6f..00000000 --- a/build/tests/DisplaySystemInformation/banner/bannerOption.txt +++ /dev/null @@ -1,19 +0,0 @@ -#gamecode bannerStr -0B0A DisplayInfo_0 -0B1A DisplayInfo_1 -0B2A DisplayInfo_2 -0B3A DisplayInfo_3 -020A DisplayInfo_4 -021A DisplayInfo_5 -0B4A DisplayInfo_6 -0B5A DisplayInfo_7 -0B6A DisplayInfo_8 -0B7A DisplayInfo_9 -0B8A DisplayInfo_10 -0B9A DisplayInfo_11 -0BAA DisplayInfo_12 -0BBA DisplayInfo_13 -022A DisplayInfo_14 -023A DisplayInfo_15 -024A DisplayInfo_16 -025A DisplayInfo_17 diff --git a/build/tests/DisplaySystemInformation/banner/banner_v3.bsf b/build/tests/DisplaySystemInformation/banner/banner_v3.bsf deleted file mode 100644 index 74965f854974c99810a783903e3c4dcfc7a6f3df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 984 zcmc(e-D<)>5QWce3%ABdNqCp-Huc< zf!eqoV7Y?FQ8^qkauw%tA|5-}TW4&bkIvWyFL$kZMgO~E!ydhQ>CvlY4{W30yN)ZS v=zm&ibM{Kzn|^Ed*tA>FoiXcX6Hm#HK&0d%T}>n28u2@G^e`rVZZ-T1$#|8R diff --git a/build/tests/DisplaySystemInformation/banner/icon/020A.bmp b/build/tests/DisplaySystemInformation/banner/icon/020A.bmp deleted file mode 100644 index b6545ca64af6e14db112d9a18fc8c57170e92143..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7A%MC&?3=4<>7=a^maA%!&?r0q#QWmNd?DR)Pg&;3!<1~J8`**H@~ z-W$K}lTh0R2Hz0g3!zTue2g}AO0GtX{H;Gwr$g#!4Z@H5+TS;u7o+3KF(dR4bjpwj{dt&-X6^ZAh8eb>K@Vv?Cha15ug@Si3otiqzR4q(hA&af%iIyYYGov+(i zY$kr)_kxjD81(|TNrXDy`=hn6x#VGv5g+mc&2mVs)F}8-U*3MQnTjbMB)>WIc$bO& f{eUeMxw;rB*u}>WD2xPkE_(vh~G(!WYm<)ms`=8k7 f=Lk6nXUE9K7V>|RkAR68;O%9(=!7Hi5~t(?EV;VQ diff --git a/build/tests/DisplaySystemInformation/banner/icon/023A.bmp b/build/tests/DisplaySystemInformation/banner/icon/023A.bmp deleted file mode 100644 index 33ed807f2701d7b9a0799122b12c3e42e8108a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7=!41PO2t{et0XjmDoul`zle0(507xuki9U?&G*VQh7;L~F^YQDwT&2mv{=^>L zE^@=$%Y7FX5mZXagB=$uvaTx^-c;Pf!&s4G(?7-Bw3=ESbp)wBaTI$cJMUe0^^u>i zsrdl@Jhy^`&6s+_d?Xq>-TKqo)Pr(L#Q0zM7L9VKPG~DQ$*;eDaCkM8N0UM0LysAA gLvv=xj|g_G$_UvX@&Evh7(k3S24WJvAP}eI0~55mp#T5? diff --git a/build/tests/DisplaySystemInformation/banner/icon/024A.bmp b/build/tests/DisplaySystemInformation/banner/icon/024A.bmp deleted file mode 100644 index 7b135f8be69d43fe23014d9a22c3144ce89f3ab7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7=%?-jZ422D107l@*9Nbx_=Zw|?EP0_w=CkwDRssaB?fAKV$x9y3M1zjhIhuqY_4VD~EMASn*tT6d_2>@A i`>A`ygB|KpL#PalcqDaNU}^~S4WR)To>xfTr}P3_&$})F diff --git a/build/tests/DisplaySystemInformation/banner/icon/025A.bmp b/build/tests/DisplaySystemInformation/banner/icon/025A.bmp deleted file mode 100644 index 3e036a6da796ebfc6aae8e5d9732bb15712d94ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7=!41PO2t{et0XjmDoul`zle0(507xuki9U?&G*VQh7;HWU^YQDwT&2mv{=^>L zE^@=$%Y6rn2r8xI!H$a+S=W^dZz}HLVXO$T>7Qb5T1~BvIzVa<9AU3S=e_H$KH~E= zH6MvT&#fTSCZ^snAA!bBxBj#?^`M**82>B3p-~Rinc50Y^6Rf399|9O(PYs0&|_k5 fXwD4z5y1|^l@YQ(=#-a8T&i_F}E;`0y;|0!a^DlA%k0App~44Wc4^TtcR$LBN_ ztHQ7Q-Z080M!!I<0>O^=^KrDWIpraa;UDS)RXeE8(rEaRUrs;SOoN{0or90RSz!eo fU`s||=T~yp<9yB^FtOL;(TZ`*N3!q diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B2A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B2A.bmp deleted file mode 100644 index 454a960e86aa3d65ffa97f7f61630b5d58e6ce2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7B%MHUY2&GjA=mu)~Bl>b>K_Vv(6!P<-yf#(#>KunLP-9zd?)IK!s!&U@n}-~F>1 zi&fy)b5F>yiIFc*D@U;7y+2wDn^R744EqotsM0}ohDO4V{6_VY!_?_vipe1OsQO5< lzJd-~isc}{&RZ&eA@A8Az-blscuyF;qCTFd@Ck*Z>jOTOy9xjR diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B3A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B3A.bmp deleted file mode 100644 index fcd2a5293cb6550835a762d404d9d475487d630c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7B!41PO2&7d9=m>pwj{dt&-X6^ZAhD1odVnFZ6jd!THb)M8B(L{&CASUx6aJWf zp&O#r?h9;0Skzh^*b%}T_1^J9eUYj~a6Fd6#($cq@DP@fbpWwu;tcCRw%#i*^_H)0 zESkix=Ux!B!l)OxX2R9+em|}jR+AiN81aGcD9a(Ws9x}+zS;fc&|wnMG!(cV$SZ8& guo>b*K%Mh3Lfp^x158$8<5xSIB=|YtiG*Y710|5U-2eap diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B4A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B4A.bmp deleted file mode 100644 index f7224baed7881eed0dac60f1c173dcb71393e0ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7B!41PO2&7d9=m>pwj{dt&-X6^ZAh8eY__9y<> z{317^+3pi8A}lE-4|YPl$hxjvSS&H~2)K$c}r{iSPN* zO{?|7ujfw4vVq}O+Ha=XS2dTM=9u_UAE?ujI!c4^qrR>C$zjbU(lix>9^?(| gVe=XCN1!gpX(iG*Y714|{lY5)KL diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B6A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B6A.bmp deleted file mode 100644 index 2d92ad53c9765198d43586e594ceb6264884f81c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7B%MHUY2&GjA=m8Vx`48`DoNQ>O?9xpeSRfWito h4lF5wov-6t<@@YE0Q4sIde05YF&`TiKA~_7eE_+wydeMp diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B7A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B7A.bmp deleted file mode 100644 index 400f5e2ed2c290a2a49dafdd456d0174fe23a49a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7x&XTqe@Az%= zlU%sXcAa1mVM{6PAaccvtm{g_bBlZ2a8{%U`lp$jR#U5;2WWds9AU3yN8NSeM}ACG z^WOON+zG91VEBf6Poz5C-{)yl56R5}bARhk)aghatx5P%-!}c=@ERj(F3PE=p?uRS jaw=(Wl28}@*%s3%P=^qz6G#6T7e9&bLmpqqzE9x=i4nXT diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B8A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B8A.bmp deleted file mode 100644 index b2e14b09b92fbacdc6b7f1d9ae9c6d7231787de3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7=!41PO2t{et0XjmDoul`zle0(j07xu^L_c7hScVwEJ5@*^J*|~4L^m~4u z#$r|Yb=@1XY-;oi+$s@tyx)(jh0T%ETq8czhpKj<&eCZ3k#C%SvY0v|2=dXvqY$MP cI4&%aK$rDS2?KoYPd)1EAJ+M$PY{l&56gYLfdBvi diff --git a/build/tests/DisplaySystemInformation/banner/icon/0B9A.bmp b/build/tests/DisplaySystemInformation/banner/icon/0B9A.bmp deleted file mode 100644 index 342bc36da28a5898482ef611c319d9ed0655fb76..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb79!41PO2&7d9=m>pwj{dt&-X6^ZAh8e5Djgcw6$hxjPKrR6yqw|XrgPt^lshgU29zk8LaD?Hkj&tb5kNTLV zhTiyd-w3sBVDgQQUPyJi-OsB{5t6F~X1?oB)ajHuT9fdnzBc_}gL8yaQGImk3DB`q fjsvlRO?COCkeyib2PCcH=#N=Va?ao3WPJ}G!X3OJ diff --git a/build/tests/DisplaySystemInformation/banner/icon/0BBA.bmp b/build/tests/DisplaySystemInformation/banner/icon/0BBA.bmp deleted file mode 100644 index 70f2589dee6209c3559ac82e4627934edabd80be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmb7A!41PO2&7d9=m>pwj{dt&-X6^ZAhD38>jAbCOHtJlV{@3pM_%vkDq$P-4|FyxTKUkxHF^|skQO~u>|ml&d*ca^iMOGHdAYZN06&0&M+FY^B%hJJwLmt zVHAEncS4p;Ouo@E5}{7__xZFbTymOY#)tYqgHEZlGzdTH>)lTdw2;Slv!Cmsyoo(@ ejQkN)m*cdQMDcOYnuXun`6O9C20W2)Onm@(@Vm_b diff --git a/build/tests/DisplaySystemInformation/banner/icon/gameIcon.bmp b/build/tests/DisplaySystemInformation/banner/icon/gameIcon.bmp deleted file mode 100644 index 8ec56f1cb8439577aae80658921dc540a9bd6dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmY+BKX21O7{(8T#0Z(20Y@2-Jk^e}L}G|L2);9H_b8K_SR3yWp%k)n8x z6xGKF0m-*QrKtA_XgndB(ttlf?eO}K5IoYI{k!+^H$S@4l?RHVW-$&!|7)>S<N4|DcCXFFICQ-#Dv5}pLUv$dfI6>C}}5vSarZL=O)xUDx*;9z#c;IsZRpWV1j z(3aUYFw{f7{OP?tq8-x4IK4a-!1L8-;2y9XiEtV3Ud3_8>X|u - -#define DISPINFO_SHARED_SCFG_REG_ADDR (void*)0x02fff000 -#define DISPINFO_SHARED_SCFG_REG_SIZE 0x26U -#define DISPINFO_SHARED_SCFG_WRAM_ADDR (void*)0x02fff030 -#define DISPINFO_SHARED_SCFG_WRAM_SIZE 0x06U - -#endif \ No newline at end of file diff --git a/build/tests/ETicketViewer/Makefile b/build/tests/ETicketViewer/Makefile deleted file mode 100644 index 09f6d439..00000000 --- a/build/tests/ETicketViewer/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - ETicketViewer -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: -# $Rev: -# $Author: -#---------------------------------------------------------------------------- -override TARGET_PLATFORM = TWL - -TARGET_BIN = TicketViwer.srl - -INCDIR = ./include $(ROOT)/build/libraries/os/common/include -SRCDIR = ./src - -SRCS = main.c screen.c font.c common.c - -LLIBRARIES = liblcfg$(TWL_LIBSUFFIX).a \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -# libnamut$(TWL_LIBSUFFIX).a\ - -ROM_SPEC = ./ROM-TS_sys.rsf - -COMPONENT_NAME = armadillo_SYSMENU -MAKEROM_ARM7_BASE = $(TWL_COMPONENTSDIR)/$(COMPONENT_NAME)/$(TWL_BUILDTYPE_ARM7)/$(COMPONENT_NAME) -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -MAKEROM := $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== - - diff --git a/build/tests/ETicketViewer/ROM-TS_sys.rsf b/build/tests/ETicketViewer/ROM-TS_sys.rsf deleted file mode 100644 index 42fc65e3..00000000 --- a/build/tests/ETicketViewer/ROM-TS_sys.rsf +++ /dev/null @@ -1,318 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2008-07-23#$ -# $Rev: 7566 $ -# $Author: yosiokat $ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] - # - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./resource/rom_header_0tca.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - # PermitLandingNormalJump TRUE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - # PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotA_SSLClientCert: launcher deliver HW AES slot A setting [TRUE/FALSE] - # - #HwAESSlotA_SSLClientCert FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - HwAESSlotB TRUE - - # - # HwAESSlotB for Sign JPEG for Launcher: launcher deliver HW AES slot B setting for Sign JPEG for Launcher [TRUE/FALSE] - # - #HwAESSlotB_SignJPEGForLauncher FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - HwAESSlotC TRUE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess FALSE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [1 - 255] - # - #AgreeEULAVersion 1 - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - #Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media GameCard - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - #DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode 0TCA - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - #GameCardNitroMode TRUE - - # - # Shared2 file size: [DISABLE/0-4194304/0K-4096K/0M-4M] - # - #Shared2File0Size Disable - #Shared2File1Size Disable - #Shared2File2Size Disable - #Shared2File3Size Disable - #Shared2File4Size Disable - #Shared2File5Size Disable -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / PENDING / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/ETicketViewer/include/common.h b/build/tests/ETicketViewer/include/common.h deleted file mode 100644 index 90e2dd88..00000000 --- a/build/tests/ETicketViewer/include/common.h +++ /dev/null @@ -1,67 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - File: common.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-08-30#$ - $Rev: 8166 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#ifndef COMMON_H_ -#define COMMON_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_START 25 // L[s[gJn܂ł̃t[ -#define KEY_REPEAT_SPAN 10 // L[s[g̊Ԋut[ - -/*---------------------------------------------------------------------------* - \ ` - *---------------------------------------------------------------------------*/ - -// L[͏ -typedef struct KeyInfo -{ - u16 cnt; // H͒l - u16 trg; // gK - u16 up; // gK - u16 rep; // ێs[g -} KeyInfo; - -/*---------------------------------------------------------------------------* - Prototype - *---------------------------------------------------------------------------*/ -void InitCommon(void); - -void ReadKey(KeyInfo* pKey); - -void VBlankIntr(void); - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* COMMON_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/ETicketViewer/include/font.h b/build/tests/ETicketViewer/include/font.h deleted file mode 100644 index d4f23ed2..00000000 --- a/build/tests/ETicketViewer/include/font.h +++ /dev/null @@ -1,41 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: font.h - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#ifndef FONT_H_ -#define FONT_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -extern const u32 d_CharData[8 * 256]; -extern const u32 d_PaletteData[8 * 16]; - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/ETicketViewer/include/screen.h b/build/tests/ETicketViewer/include/screen.h deleted file mode 100644 index 799a2b93..00000000 --- a/build/tests/ETicketViewer/include/screen.h +++ /dev/null @@ -1,49 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: screen.h - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#ifndef SCREEN_H_ -#define SCREEN_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -/*---------------------------------------------------------------------------* - ֐ ` - *---------------------------------------------------------------------------*/ -void InitScreen(void); -void ClearScreen(void); -void ClearMainScreen(void); -void ClearSubScreen(void); -void PutMainScreen(s32 x, s32 y, u8 palette, char* text, ...); -void PutSubScreen(s32 x, s32 y, u8 palette, char* text, ...); -void UpdateScreen(void); - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* SCREEN_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/ETicketViewer/src/common.c b/build/tests/ETicketViewer/src/common.c deleted file mode 100644 index c7b9821f..00000000 --- a/build/tests/ETicketViewer/src/common.c +++ /dev/null @@ -1,157 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - File: common.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-08-25#$ - $Rev: 8074 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#include "common.h" - -static void InitInterrupts(void); -static void InitHeap(void); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: InitCommon - - Description: {Iȏ֐ŌĂԁB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void InitCommon(void) -{ - OS_Init(); - OS_InitTick(); - - OS_InitAlarm(); - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - CARD_Init(); // VKlj - CARD_Enable(TRUE); // VKlj - - InitHeap(); - InitInterrupts(); -} - -/*---------------------------------------------------------------------------* - Name: ReadKey - - Description: L[͏擾A͏\̂ҏWB - gKAgKAps[ggK oB - - Arguments: pKey - ҏWL[͏\̂w肷B - - Returns: None. - *---------------------------------------------------------------------------*/ -void ReadKey(KeyInfo* pKey) -{ - static u16 repeat_count[12]; - int i; - u16 r; - - r = PAD_Read(); - pKey->trg = 0x0000; - pKey->up = 0x0000; - pKey->rep = 0x0000; - - for (i = 0; i < 12; i++) - { - if (r & (0x0001 << i)) - { - if (!(pKey->cnt & (0x0001 << i))) - { - pKey->trg |= (0x0001 << i); // gK - repeat_count[i] = 1; - } - else - { - if (repeat_count[i] > KEY_REPEAT_START) - { - pKey->rep |= (0x0001 << i); // ps[g - repeat_count[i] = (u16) (KEY_REPEAT_START - KEY_REPEAT_SPAN); - } - else - { - repeat_count[i]++; - } - } - } - else - { - if (pKey->cnt & (0x0001 << i)) - { - pKey->up |= (0x0001 << i); // gK - } - } - } - - pKey->cnt = r; // HL[ -} - -/*---------------------------------------------------------------------------* - Name: InitInterrupts - - Description: 荞ݐݒB - V uN荞݂‚A荞݃nhݒ肷B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitInterrupts(void) -{ - // V uN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // 荞݋ - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); -} - -/*---------------------------------------------------------------------------* - Name: InitHeap - - Description: C̃A[iɂăăVXeB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitHeap(void) -{ - void* tempLo; - OSHeapHandle hh; - - // C̃A[iɃq[vЂƂ쐬 - tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tempLo); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - // q[v쐬Ɏsꍇُ͈I - OS_Panic("ARM9: Fail to create heap...\n"); - } - (void)OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/ETicketViewer/src/font.c b/build/tests/ETicketViewer/src/font.c deleted file mode 100644 index ebc10e7b..00000000 --- a/build/tests/ETicketViewer/src/font.c +++ /dev/null @@ -1,585 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NitroWiFi - WCM - demos - wcm-list - File: font.c - - Copyright 2005-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: font.c,v $ - Revision 1.2 2006/03/10 09:22:43 kitase_hirotake - INDENT SOURCE - - Revision 1.1 2005/07/21 08:21:06 adachi_hiroaki - VKlj - - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ -#include "font.h" - -/*---------------------------------------------------------------------------* - Character data - *---------------------------------------------------------------------------*/ -const u32 d_CharData[8 * 256] = -{ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01010010, 0x01010010, 0x00000110, // 0001h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 00f6h - 0x00100000, 0x00100000, 0x00100000, 0x00111111, - 0x00000000, 0x01010010, 0x01010010, 0x00111111, // 00f7h - 0x00010010, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01010011, 0x01010100, 0x00100011, // 00f8h - 0x00100100, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01010000, 0x01011111, 0x00010000, // 00f9h - 0x00001000, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x01010010, 0x01111111, 0x00100010, // 00fah - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x01010001, 0x01010010, 0x00100000, // 00fbh - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01011110, 0x01010010, 0x00100110, // 00fch - 0x00111001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01011110, 0x00010000, // 00fdh - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x00100101, 0x01001010, 0x00101010, // 00feh - 0x00100000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -}; - -/*---------------------------------------------------------------------------* - Palette data - *---------------------------------------------------------------------------*/ -const u32 d_PaletteData[8 * 16] = -{ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // black - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001f0000, 0x00000000, 0x00000000, 0x00000000, // red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03e00000, 0x00000000, 0x00000000, 0x00000000, // green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c000000, 0x00000000, 0x00000000, 0x00000000, // blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03ff0000, 0x00000000, 0x00000000, 0x00000000, // yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fe00000, 0x00000000, 0x00000000, 0x00000000, // light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00180000, 0x00000000, 0x00000000, 0x00000000, // dark red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03000000, 0x00000000, 0x00000000, 0x00000000, // dark green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, // dark blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03180000, 0x00000000, 0x00000000, 0x00000000, // dark yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60180000, 0x00000000, 0x00000000, 0x00000000, // dark purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x63000000, 0x00000000, 0x00000000, 0x00000000, // dark light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x56b50000, 0x00000000, 0x00000000, 0x00000000, // gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x2d6b0000, 0x00000000, 0x00000000, 0x00000000, // dark gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fff0000, 0x00000000, 0x00000000, 0x00000000, // white - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/ETicketViewer/src/main.c b/build/tests/ETicketViewer/src/main.c deleted file mode 100644 index 752481c9..00000000 --- a/build/tests/ETicketViewer/src/main.c +++ /dev/null @@ -1,834 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - Nand-2 - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-03#$ - $Rev: 8251 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#include -#include -#include -#include -#include -#include -#include -#include - -#include "application_jump_private.h" -#include "common.h" -#include "screen.h" - -#define TITLE_SHOW_BASE_Y 5 -#define TITLE_MAX_SHOW 0x10 -#define TITLE_NUM_PAGE 300 - -#define ETICKET_NUM_MAX 10 - -#define ES_ERR_OK 0 - -// \Ώۂ[U[Avɂꍇ -#define USER_APP_ONLY - -// fobOp -//#define DEBUG_MODE - -/*---------------------------------------------------------------------------* - ϐ ` - *---------------------------------------------------------------------------*/ -typedef void* (*NAMUTAlloc)(u32 size); -typedef void (*NAMUTFree)(void* ptr); - -static NAMUTAlloc spAllocFunc; -static NAMUTFree spFreeFunc; - -// L[ -static KeyInfo gKey; - -// CXg[Ă NAND Av̐ -static s32 gNandAppNum; -static s32 gNandInstalledAppNum; -static s32 gNandAllAppNum; - -// J[\ʒu -static s32 gCurPos = 0; - -// I𒆂̗vf -static s32 gCurrentElem; - -// y[W -static u32 gCurrentPage; -static u32 gMaxPage; - -// Error -static BOOL gErrorFlg; - -// eTicketType -typedef enum ETicketType { - ETICKET_TYPE_COMMON = 0, - ETICKET_TYPE_PERSONALIZED = 1 -}ETicketType; - -typedef struct DataStruct -{ - NAMTitleId id; - BOOL commonTicketFlg; - BOOL isSrlFlg; - u32 numTicket; - ETicketType tType[ETICKET_NUM_MAX]; - -} DataStruct; - -typedef struct { - u8 pad1[ 12 ]; - u32 deviceId; - u8 pad2[ 216 - 16 ]; -} ESTicketView; - -typedef s32 ESError; - -extern ESError ES_GetTicketViews(u64 titleId, ESTicketView* ticketViewList, u32* ticketViewCnt); - -static DataStruct gDataList[TITLE_NUM_PAGE * 2]; -static DataStruct gInstalledDataList[TITLE_NUM_PAGE]; - -#ifdef DEBUG_MODE -static MATHRandContext32 context; -#endif - -/*---------------------------------------------------------------------------* - Prototype - *---------------------------------------------------------------------------*/ -static void DrawScene(DataStruct* list); -static BOOL GetDataStruct(DataStruct* list, DataStruct* Ilist); - -static void ConvertTitleIdLo(u8* code, u8* titleid_lo); -static void ConvertGameCode(u8* code, u32 game_code); -static void ConvertInitialCode(u8* code, u32 titleid_lo); - -static void* AllocForNAM(u32 size); -static void FreeForNAM(void* ptr); - -static s32 GetETicketType(DataStruct* data, ETicketType *pETicketType ); -static s32 GetTicketViews(ESTicketView** pptv, u32* pNumTicket, NAMTitleId titleId); - -BOOL GetETicketData( void ); -void* MyNAMUT_Alloc(u32 size); -void MyNAMUT_Free(void* buffer); - -#ifdef USER_APP_ONLY -static void getUserApplication(DataStruct* list); -#endif -/*---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: C֐ - *---------------------------------------------------------------------------*/ -void TwlMain(void) -{ - u32 count = 0; - BOOL errorFlg = FALSE; - - InitCommon(); - InitScreen(); - - GX_DispOn(); - GXS_DispOn(); - - spAllocFunc = AllocForNAM; - spFreeFunc = FreeForNAM; - - gNandAppNum = 0; - gNandInstalledAppNum = 0; - gNandAllAppNum = 0; - gErrorFlg = FALSE; - - FS_Init( FS_DMA_NOT_USE ); - - NAM_Init(AllocForNAM, FreeForNAM); - - MI_CpuClear8( gDataList, sizeof(gDataList)); - MI_CpuClear8( gInstalledDataList, sizeof(gInstalledDataList)); - -#ifdef DEBUG_MODE - MATH_InitRand32( &context, 15 ); -#endif - - ClearScreen(); - - PutMainScreen( 7, 12, 0xf6, "--- Now Loading ---"); - PutSubScreen( 7, 12, 0xf6, "--- Now Loading ---"); - - (void) GetETicketData(); - - while(TRUE) - { - // L[͏擾 - ReadKey(&gKey); - - if (gKey.trg & PAD_KEY_DOWN) - { - gCurPos++; - - if ( gCurrentPage != gMaxPage ) - { - if ( gCurPos >= TITLE_MAX_SHOW ) - { - gCurrentPage++; - gCurPos = 0; - } - } - else - { - if( (gNandAllAppNum & 0x0f) == 0 ) - { - if( gCurPos >= TITLE_MAX_SHOW ) - { - gCurrentPage = 0; - gCurPos = 0; - } - } - else if ( gCurPos >= (gNandAllAppNum & 0x0f) ) // oO - { - gCurrentPage = 0; - gCurPos = 0; - } - } - - OS_TPrintf(" gCurPos : %x, gCurrentPage : %x, gNandAllAppNum : %x\n", gCurPos, gCurrentPage, gNandAllAppNum); - } - if (gKey.trg & PAD_KEY_UP) - { - if( gCurPos == 0) - { - if ( gCurrentPage == 0 ) - { - gCurrentPage = gMaxPage; - gCurPos = ((gNandAllAppNum & 0x0f) == 0) ? TITLE_MAX_SHOW - 1 : (gNandAllAppNum & 0x0f) - 1; - } - else - { - gCurrentPage--; - gCurPos = TITLE_MAX_SHOW - 1; - } - } - else - { - gCurPos--; - } - - OS_TPrintf(" gCurPos : %x, gCurrentPage : %x, gNandAllAppNum : %x\n", gCurPos, gCurrentPage, gNandAllAppNum); - } - - if (gKey.trg & PAD_KEY_LEFT) - { - if(gCurrentPage == 0) - { - gCurrentPage = gMaxPage; - } - else - { - gCurrentPage--; - } - - gCurPos = 0; - - OS_TPrintf(" gCurPos : %x, gCurrentPage : %x, gNandAllAppNum : %x\n", gCurPos, gCurrentPage, gNandAllAppNum); - } - if (gKey.trg & PAD_KEY_RIGHT) - { - if(gCurrentPage == gMaxPage) - { - gCurrentPage = 0; - } - else - { - gCurrentPage++; - } - - gCurPos = 0; - - OS_TPrintf(" gCurPos : %x, gCurrentPage : %x, gNandAllAppNum : %x\n", gCurPos, gCurrentPage, gNandAllAppNum); - } - - // I𒆂̗vf - gCurrentElem = (s32)((u32)(gCurrentPage << 4) + (u32)gCurPos); - - // ʕ` - DrawScene(gDataList); - - // uuN҂ - OS_WaitVBlankIntr(); - - // ʃNA - ClearScreen(); - } - - // uuN҂ ŌɉʂXVĂI - OS_WaitVBlankIntr(); - OS_Terminate(); -} - - -/*---------------------------------------------------------------------------* - Name: DrawScene - - Description: ʕ`֐ - - F - 0xf0, // 0xf1, // 0xf2, // - 0xf3, // 0xf4, // 0xf5, // sN - 0xf6, // F 0xf7, // 񂾐 0xf8, // 񂾗 - 0xf9, // 񂾐 0xfa, // 񂾉F 0xfb, // - 0xfc, // 0xfd, // DF 0xfe, // ZDF - *---------------------------------------------------------------------------*/ -#define COMMON_COLOR ((u8)0xff) -#define PERSONALIZED_COLOR ((u8)0xfc) - -#define GAME_CODE_BASE_X 1 - -static void DrawScene(DataStruct* list) -{ - s32 i; - u8 init_code[5]; - u8 color; - u32 start; - - DataStruct* p = list; - - if( gErrorFlg ) - { - PutMainScreen( 10, 12, 0xf1, "--- Error ---"); - PutSubScreen( 10, 12, 0xf1, "--- Error ---"); - - return; - } - - // ꗗ\ - PutMainScreen( 1, 0, 0xf2, "------- eTicket Viewer ------- "); - PutMainScreen( 1, 1, 0xfa, "", (gCurrentPage+1), (gMaxPage+1)); - PutMainScreen( 1, 2, 0xf4, " Game Ticket Ticket"); - PutMainScreen( 1, 3, 0xf4, " Code srl Num Type"); - PutMainScreen( 0, 4, 0xff, "--------------------------------"); - - // J[\\ - if( gCurPos <= TITLE_MAX_SHOW ){ - PutMainScreen( 0, gCurPos+TITLE_SHOW_BASE_Y , 0xf1, ">"); - } - - start = (u32)(gCurrentPage << 4); - p += start; - - for ( i=(s32)start; i < (start + TITLE_MAX_SHOW); i++, p++) - { - s32 tmp_i; - - // NAND Av̐ 1y[WɂȂꍇ͓rŏI - if ( i >= gNandAllAppNum ) - { - break; - } - - tmp_i = (s32)(i & 0xf); - - ConvertInitialCode(init_code, NAM_GetTitleIdLo(p->id)); - - color = p->commonTicketFlg ? COMMON_COLOR : PERSONALIZED_COLOR; - - // Q[R[h\ - PutMainScreen( GAME_CODE_BASE_X, TITLE_SHOW_BASE_Y+tmp_i, color, "%2d:%s", (tmp_i+1), init_code); - - // srl̗L\ - if(p->isSrlFlg) - { - PutMainScreen( GAME_CODE_BASE_X + 9, TITLE_SHOW_BASE_Y+tmp_i, color, "o"); - } - else - { - PutMainScreen( GAME_CODE_BASE_X + 9, TITLE_SHOW_BASE_Y+tmp_i, color, "x"); - } - - // ETicket̐̕\ - PutMainScreen( GAME_CODE_BASE_X + 12, TITLE_SHOW_BASE_Y+tmp_i, color, "%d", p->numTicket); - - // ETicket̃^Cv̕\ - if(p->commonTicketFlg) - { - PutMainScreen(GAME_CODE_BASE_X + 19, TITLE_SHOW_BASE_Y+tmp_i, color, "common"); - } - else - { - PutMainScreen(GAME_CODE_BASE_X + 19, TITLE_SHOW_BASE_Y+tmp_i, color, "personalized"); - } - } - - PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y, 0xff, "--------------------------------"); - - PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y + 1, 0xfa, "Up Down Key : Next Application"); - PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y + 2, 0xfa, "Left Right Key: Page Change"); - - // ڍו\ - ConvertInitialCode(init_code, NAM_GetTitleIdLo(list[gCurrentElem].id)); - PutSubScreen(3, 2, 0xf4, "Selected Title : [ %s ]", init_code); - PutSubScreen(3, 4, 0xff, "- Ticket List -"); - - for( i=0; i < list[gCurrentElem].numTicket; i++){ - if(i > 15) - { - break; - } - - PutSubScreen(5, 6+i, 0xf4, "Ticket%d : ", (i+1)); - - if(list[gCurrentElem].tType[i] == ETICKET_TYPE_COMMON) - { - PutSubScreen(15, 6+i, COMMON_COLOR, "COMMON"); - } - else - { - PutSubScreen(15, 6+i, PERSONALIZED_COLOR, "PERSONALIZED"); - } - } -} - - -/*---------------------------------------------------------------------------* - Name: GetDataStruct - - Description: TitleIDXg擾֐ - NAM_GetTitleList NAM_GetInstalledTitleList g - *---------------------------------------------------------------------------*/ -static BOOL GetDataStruct(DataStruct* list, DataStruct* Ilist) -{ - // ^CgIDXgobt@ - NAMTitleId titleIdList[TITLE_NUM_PAGE]; - s32 i; - - // --- GetTitleList - if ( NAM_GetTitleList(titleIdList, TITLE_NUM_PAGE) != NAM_OK ) - { - OS_PutString("NAM_GetTitleList failed."); - return FALSE; - } - - // f[^Xg̍쐬 - for ( i=0; i= gNandAppNum ) - { - break; - } - - OS_TPrintf("id : 0x%08x\n", titleIdList[i]); - list->id = titleIdList[i]; - list->isSrlFlg = TRUE; - } - - MI_CpuClear8(titleIdList, sizeof(titleIdList)); - - OS_PutString("\n\n"); - - // --- GetInstalledTitleList - if ( NAM_GetInstalledTitleList(titleIdList, TITLE_NUM_PAGE) != NAM_OK ) - { - OS_PutString("NAM_GetInstalledTitleList failed."); - return FALSE; - } - - // f[^Xg̍쐬 - for ( i=0; i= gNandInstalledAppNum ) - { - break; - } - - OS_TPrintf("id : 0x%08x\n", titleIdList[i]); - Ilist->id = titleIdList[i]; - Ilist->isSrlFlg = FALSE; - } - - return TRUE; -} - - -/*---------------------------------------------------------------------------* - Name: GetETicketType - - Description: w肳ꂽ titleID eTicket ^Cv擾 - - Arguments: titleID: common eTicket ǂ𒲂ׂ^Cg titleID - pETicketType : ʂi[ESETicketType|C^ - - Returns: NAM_OK : 擾 - ȊO: 擾s - *---------------------------------------------------------------------------*/ -static s32 GetETicketType(DataStruct* data, ETicketType *pETicketType ) -{ - s32 result; - ESTicketView* ptv; - u32 numTicket; - -#ifdef DEBUG_MODE - u32 i; -#endif - - *pETicketType = ETICKET_TYPE_PERSONALIZED; - - result = GetTicketViews(&ptv, &numTicket, data->id); - -#ifndef DEBUG_MODE - data->numTicket = numTicket; -#else - data->numTicket = MATH_Rand32( &context, 10 ); -#endif - - if( result == NAM_OK ) - { - if( numTicket > 0 ) - { - int i; - // eTicket ́Â܂܂͒lj肦Ȃ̂ŁAvCXg[ꂽAvł́AKCommon eTikcet݂B - // āASĂ eTicket ̂AЂƂ‚ł deviceId 0x00000000 ȂAcommon eTicket ƔfB - for( i = 0; i < numTicket; i++ ) - { - if( ptv[i].deviceId == 0x00000000 ) - { - *pETicketType = ETICKET_TYPE_COMMON; - data->tType[i] = ETICKET_TYPE_COMMON; - } - else - { - data->tType[i] = ETICKET_TYPE_PERSONALIZED; - } - } - } - MyNAMUT_Free(ptv); - } - -#ifdef DEBUG_MODE - for( i=0; inumTicket; i++) - { - if( MATH_Rand32( &context, 10 ) % 5 ) - { - data->tType[i] = ETICKET_TYPE_COMMON; - } - else - { - data->tType[i] = ETICKET_TYPE_PERSONALIZED; - } - } -#endif - - return result; -} - - -/*---------------------------------------------------------------------------* - Name: GetTicketViews - - Description: w肳ꂽ^Cg eTicket 擾 -@@@@@@@@nam_title.c GetTicketViews ֐Rsy - - Arguments: pptv : 擾 eTicket Xg̃|C^i[|C^ - pNumTicket : 擾 eTicket i[|C^ - titleID : eTicket 擾^Cg titleID - - Returns: NAM_OK : 擾 - ȊO : 擾s - *---------------------------------------------------------------------------*/ -static s32 GetTicketViews(ESTicketView** pptv, u32* pNumTicket, NAMTitleId titleId) -{ - s32 result; - u32 numTicket; - ESTicketView* ptv = NULL; - - result = ES_GetTicketViews(titleId, NULL, &numTicket); - - if( result != ES_ERR_OK ) - { - return result; - } - - if( numTicket != 0 ) - { - ptv = MyNAMUT_Alloc(sizeof(ESTicketView) * numTicket); - - if( ptv == NULL ) - { - return NAM_NO_MEMORY; - } - - result = ES_GetTicketViews(titleId, ptv, &numTicket); - } - - if( result == ES_ERR_OK ) - { - *pptv = ptv; - *pNumTicket = numTicket; - } - else - { - MyNAMUT_Free(ptv); - } - - return result; -} - - -/*---------------------------------------------------------------------------* - Name: GetETicketData - - Description: eAvETicketf[^擾 - *---------------------------------------------------------------------------*/ -BOOL GetETicketData( void ) -{ - s32 result = TRUE; - s32 i,j; - - // NAND ɃC|[gĂNAND Av̐擾 - if ( (gNandAppNum = NAM_GetNumTitles()) < 0) - { - OS_Panic("NAM_GetNumTitles() failed."); - } - // ̂^Cg - if ( (gNandInstalledAppNum = NAM_GetNumInstalledTitles()) < 0) - { - OS_Panic("NAM_GetNumInstalledTitles() failed."); - } - // ̎擾 - if ( !GetDataStruct(gDataList, gInstalledDataList) ) - { - OS_Panic("GetDataStruct() failed."); - } - - // NAM_GetTitleList -- 폜Ă邪eTicket̂ݑ݂^CgXgAbvȂ - // NAM_GetInstalledTitleList -- SRL͂邪eTicketȂ^CgXgAbvȂ - // ̂ߗ҂}[W - gNandAllAppNum = gNandAppNum; - for (i=0; i> 4); - if( gMaxPage != 0 && (gNandAllAppNum & 0xf) == 0 ) - { - gMaxPage--; - } - - // ݃y[W̏ - gCurrentPage = 0; - - OS_TPrintf("gNandAllAppNum : %d\n",gNandAllAppNum); - OS_TPrintf("gMaxPage : %d\n",gMaxPage); - - if( gNandAllAppNum == 0 ) - { - gErrorFlg = TRUE; - - return FALSE; - } - - // AvETicketf[^擾 - for (i=0; iid & TITLE_ID_APP_TYPE_MASK)) - { - MI_CpuCopy8(p, &buf[count], sizeof(DataStruct)); - count++; - } - } - - // [U[AṽXgRs[ - MI_CpuCopy8(buf, list, buf_size); - - // Av̍XV - gNandAllAppNum = count; - - // obt@̊J - MyNAMUT_Free(buf); -} -#endif - - -/*---------------------------------------------------------------------------* - UTIL ֐ - *---------------------------------------------------------------------------*/ -static void ConvertTitleIdLo(u8* code, u8* titleid_lo) -{ - u8 tmp[5]; - s32 i; - - for ( i=3; i>=0; i--, titleid_lo++ ) - { - tmp[i] = *titleid_lo; - *code = tmp[i]; - } - - // NULL I[ - *code = 0x00; -} - -static void ConvertGameCode(u8* code, u32 game_code) -{ - u8 tmp[5]; - s32 i; - - ConvertInitialCode(tmp, game_code); - - for ( i=3; i>=0; i--, code++) - { - *code = tmp[i]; - } - - // NULL I[ - *code = 0x00; -} - -static void ConvertInitialCode(u8* code, u32 titleid_lo) -{ - s32 i; - - for ( i=0; i<4; i++, code++) - { - *code = (u8)(titleid_lo >> (8 * (3-i))); - } - - // NULLI[ - *code = 0x00; -} - - -void* MyNAMUT_Alloc(u32 size) -{ - const u32 allocSize = MATH_ROUNDUP32(size); - SDK_ASSERTMSG( spAllocFunc != NULL, "NAMUT_Init should be called previously.\n"); - return spAllocFunc(allocSize); -} - - -static void* AllocForNAM(u32 size) -{ - void* ptr; - ptr = OS_AllocFromMain(size); - - if (ptr == NULL) - { - OS_Panic("alloc failed."); - } - - return ptr; -} - - -void MyNAMUT_Free(void* buffer) -{ - SDK_ASSERTMSG( spFreeFunc != NULL, "NAMUT_Init should be called previously.\n"); - if (buffer) - { - spFreeFunc(buffer); - } -} - - -static void FreeForNAM(void* ptr) -{ - OS_FreeToMain(ptr); -} - - -void VBlankIntr(void) -{ - // eLXg\XV - UpdateScreen(); - - // IRQ `FbNtO47Zbg - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/ETicketViewer/src/screen.c b/build/tests/ETicketViewer/src/screen.c deleted file mode 100644 index c00a4a75..00000000 --- a/build/tests/ETicketViewer/src/screen.c +++ /dev/null @@ -1,194 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: screen.c - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#include -#include "screen.h" -#include "font.h" - -/*---------------------------------------------------------------------------* - 萔 ` - *---------------------------------------------------------------------------*/ -#define TEXT_SCREEN_SIZE 2048 - -/*---------------------------------------------------------------------------* - ϐ ` - *---------------------------------------------------------------------------*/ - -// zXN[[ ㉺ ][ BG ][ LN^ ] -static u16 gScreen[2 ][ 1 ][ TEXT_SCREEN_SIZE / sizeof(u16) ] ATTRIBUTE_ALIGN(32); - -/*---------------------------------------------------------------------------* - Name: InitScreen - - Description: \VXê߂ɁA\ݒB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void InitScreen(void) -{ - // e V-RAM - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void*)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - (void)GX_DisableBankForLCDC(); - - // OAM - MI_CpuFillFast((void*)HW_OAM, 0xc0, HW_OAM_SIZE); - MI_CpuFillFast((void*)HW_DB_OAM, 0xc0, HW_DB_OAM_SIZE); - - // pbg - MI_CpuClearFast((void*)HW_PLTT, HW_PLTT_SIZE); - MI_CpuClearFast((void*)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - // ʐݒ - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - - GX_SetBankForBG(GX_VRAM_BG_128_A); - G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01); - G2_SetBG0Priority(0); - - GX_SetVisiblePlane(GX_PLANEMASK_BG0); - GX_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GX_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - ((u16*)HW_PLTT)[0] = 0x0000; // black - MI_CpuFillFast(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[0][0], TEXT_SCREEN_SIZE); - GX_LoadBG0Scr(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - - // ʐݒ - GX_SetBankForSubBG(GX_VRAM_SUB_BG_32_H); - G2S_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01); - G2S_SetBG0Priority(0); - GXS_SetGraphicsMode(GX_BGMODE_0); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0); - GXS_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GXS_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - ((u16*)HW_DB_PLTT)[0] = 0x0000; // black - MI_CpuFillFast(gScreen[1][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[1][0], TEXT_SCREEN_SIZE); - GXS_LoadBG0Scr(gScreen[1][0], 0, TEXT_SCREEN_SIZE); -} - -/*---------------------------------------------------------------------------* - Name: ClearScreen - - Description: ʂ̃eLXg\NAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ClearScreen(void) -{ - MI_CpuClearFast(gScreen[0][0], TEXT_SCREEN_SIZE); - MI_CpuClearFast(gScreen[1][0], TEXT_SCREEN_SIZE); -} -void ClearMainScreen(void) -{ - MI_CpuClearFast(gScreen[0][0], TEXT_SCREEN_SIZE); - -} -void ClearSubScreen(void) -{ - MI_CpuClearFast(gScreen[1][0], TEXT_SCREEN_SIZE); -} -/*---------------------------------------------------------------------------* - Name: PutMainScreen - - Description: CʂɃeLXgo͂B - - Arguments: text - o͂镶B - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void PutMainScreen(s32 x, s32 y, u8 palette, char* text, ...) -{ - va_list vlist; - char temp[33]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - for (i = 0; i < 32; i++) - { - if (temp[i] == 0x00) - { - break; - } - - gScreen[0][0][((y * 32) + x + i) % (32 * 32)] = (u16) (palette << 12 | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: PrintSubScreen - - Description: TuʂɃeLXgo͂B - - Arguments: text - o͂镶B - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void PutSubScreen(s32 x, s32 y, u8 palette, char* text, ...) -{ - va_list vlist; - char temp[33]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - for (i = 0; i < 32; i++) - { - if (temp[i] == 0x00) - { - break; - } - - gScreen[1][0][((y * 32) + x + i) % (32 * 32)] = (u16) (palette << 12 | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: UpdateScreen - - Description: zXN[ V-RAM ɔfB - V uNԒł̌ĂяozB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void UpdateScreen(void) -{ - // zXN[ V-RAM ɔf - DC_StoreRange(gScreen[0][0], TEXT_SCREEN_SIZE); - GX_LoadBG0Scr(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[1][0], TEXT_SCREEN_SIZE); - GXS_LoadBG0Scr(gScreen[1][0], 0, TEXT_SCREEN_SIZE); -} - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/ErrorLogTest/ARM9/Makefile b/build/tests/ErrorLogTest/ARM9/Makefile deleted file mode 100644 index 32b13e36..00000000 --- a/build/tests/ErrorLogTest/ARM9/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/ErrorLogTest/ARM9/Makefile.0 b/build/tests/ErrorLogTest/ARM9/Makefile.0 deleted file mode 100644 index 3ebe7c11..00000000 --- a/build/tests/ErrorLogTest/ARM9/Makefile.0 +++ /dev/null @@ -1,56 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - ErrorLogTest -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -SUBDIRS = $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/errorLog - -GAMECODE = 0B5A -MEDIA = gamecard -TARGET_BIN = main.srl - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_NANDAPP = TRUE -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(MEDIA) - -#---------------------------------------------------------------------------- - - - -MISC_DIR = ../../../systemMenu_RED/misc -LINCLUDES += $(MISC_DIR)/include - -SRCS = ErrorLogTest.c $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LLIBRARIES += liberrorlog$(TWL_LIBSUFFIX).a - -ROM_SPEC = main.rsf -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -MAKEROM_FLAGS += -DERRLOGTEST_GAMECODE=$(GAMECODE) \ - -DERRLOGTEST_MEDIA=$(MEDIA) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/ErrorLogTest/ARM9/Makefile.1 b/build/tests/ErrorLogTest/ARM9/Makefile.1 deleted file mode 100644 index 5f502fdb..00000000 --- a/build/tests/ErrorLogTest/ARM9/Makefile.1 +++ /dev/null @@ -1,55 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - ErrorLogTest -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -SUBDIRS = $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/errorLog - -GAMECODE = 013A -MEDIA = NAND -TARGET_BIN = main.tad - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_NANDAPP = TRUE -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(MEDIA) -#---------------------------------------------------------------------------- - - - -MISC_DIR = ../../../systemMenu_RED/misc -LINCLUDES += $(MISC_DIR)/include - -SRCS = ErrorLogTest.c $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LLIBRARIES += liberrorlog$(TWL_LIBSUFFIX).a - -ROM_SPEC = main.rsf -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -MAKEROM_FLAGS += -DERRLOGTEST_GAMECODE=$(GAMECODE) \ - -DERRLOGTEST_MEDIA=$(MEDIA) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/ErrorLogTest/ARM9/main.rsf b/build/tests/ErrorLogTest/ARM9/main.rsf deleted file mode 100644 index 8ba5e5dd..00000000 --- a/build/tests/ErrorLogTest/ARM9/main.rsf +++ /dev/null @@ -1,269 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner.bnr - - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess FALSE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [0 - 255] - # - #AgreeEULAVersion 0 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media $(ERRLOGTEST_MEDIA) - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(ERRLOGTEST_GAMECODE) - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 0 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 0K - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - Secure TRUE - AppType System -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} - -Rating -{ - # - # Permited age to play for each rating organization [0 - 31, ALWAYS, FREE] - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / ALWAYS / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/ErrorLogTest/ARM9/src/ErrorLogTest.c b/build/tests/ErrorLogTest/ARM9/src/ErrorLogTest.c deleted file mode 100644 index a3a23892..00000000 --- a/build/tests/ErrorLogTest/ARM9/src/ErrorLogTest.c +++ /dev/null @@ -1,137 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - ErrorLog - File: errorLog.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" - -// Ȃobt@TCY256byte𒴂Əo͂悤ɂȂ -// _vƁAOS_TPrintf()Ăяoɂobt@ɂ͂Ɗi[Ă͗l -// ͌ݒ -#define BUFSIZE 128 - -void VBlankIntr(void); - - -void TwlMain( void ) -{ - int numEntry; - - OS_Init(); - RTC_Init(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - FS_Init( FS_DMA_NOT_USE ); - InitAllocator(); -// FS_DeleteFile("nand:/sys/log/sysmenu.log"); - - ERRORLOG_Init( Alloc, Free ); - - numEntry = ERRORLOG_GetNum(); - OS_TPrintf("API: before numEntry : %d\n", numEntry ); - ERRORLOG_Write( 0x80000 ); - ERRORLOG_Printf( "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" - "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" - "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" - "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" - "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" - "this is overflow message!\nthis is overflow message!\nthis is overflow message!\n" ); - -/* - ERRORLOG_Write( (u64)0x77700040051LL ); - ERRORLOG_Printf( "%d hyoooo nyoronyoro\naboooon dogaaaaaaaan", 2+5 ); - - - ERRORLOG_Printf( "menuRedIplManager.cpp [l.73] RED FATAL 0" ); - ERRORLOG_Printf( "this is too long long long long long long long long long long long long string.\n" - "this is too long long long long long long long long long long long long string.\n" - "this is too long long long long long long long long long long long long string.\n" - "this is too long long long long long long long long long long long long string.\n" ); - */ - -/* - if( numEntry > 2 ) - { - pEntry = ERRORLOG_Read(1); - OS_TPrintf("entry[1] : %02d-%02d-%02d %02d:%02d:%02d errorCode: %d\n", - pEntry->year, - pEntry->month, - pEntry->day, - pEntry->hour, - pEntry->minute, - pEntry->second, - pEntry->errorCode); - } -*/ - OS_TPrintf( "*** log file data\n" ); - - { - // Ot@C̒go - FSFile file; - char buf[BUFSIZE+1]; - int numEntry = 0; - int totalSize = 0, nowSize = 0; - buf[BUFSIZE] = '\0'; - - FS_InitFile( &file ); - FS_OpenFileEx( &file, "nand:/sys/log/sysmenu.log", FS_FILEMODE_R ); - - while( ( nowSize = FS_ReadFile( &file, buf, BUFSIZE ) ) == BUFSIZE ) - { - char *p = buf; - - OS_TPrintf("%s",buf); - totalSize += nowSize; - - while( (p = STD_SearchChar(p, '#')) != NULL) - { - // '#'oĂ񐔂Gg𑝂₷ - numEntry++; - p++; - } - - } - - //OS_TPrintf("%s\n",buf); - OS_TPrintf("\n"); - FS_CloseFile( &file ); - - totalSize += nowSize; - - OS_TPrintf("count: \'#\' count : %d\n", numEntry ); - OS_TPrintf("total Size : %d\n", totalSize); - } - - numEntry = ERRORLOG_GetNum(); - OS_TPrintf("API: end numEntry : %d\n", numEntry ); - - - ERRORLOG_End(); - OS_TPrintf( "*** End of demo\n" ); - OS_Terminate(); -} - -void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - diff --git a/build/tests/ErrorLogTest/Makefile b/build/tests/ErrorLogTest/Makefile deleted file mode 100644 index 737d6bcd..00000000 --- a/build/tests/ErrorLogTest/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - ErrorLogTest -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -SUBDIRS = ARM9 banner - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/ErrorLogTest/about.txt b/build/tests/ErrorLogTest/about.txt deleted file mode 100644 index ba84c322..00000000 --- a/build/tests/ErrorLogTest/about.txt +++ /dev/null @@ -1,11 +0,0 @@ -ErrorLogTest - - -`ɑgݍ܂ꂽErrorLogCũeXgpAvłB -sERRORLOG_Write()ĂяoAG[Ȍ݂sĂ -R\[Ɍ݂̃OGg₻̒go͂ďI܂B -񃍃O݂s߁As邽тɃOGg̑͑܂A -Ot@C16KBŒō쐬Ă邽߁AÂO͏폜Ă܂B - -܂AWrite֐Ăł邽߁AFatalErrorۂɔ -G[O̐⏑݂Ƃɗp邱Ƃ”\łB diff --git a/build/tests/ErrorLogTest/banner/Makefile b/build/tests/ErrorLogTest/banner/Makefile deleted file mode 100644 index 1f8aa1d4..00000000 --- a/build/tests/ErrorLogTest/banner/Makefile +++ /dev/null @@ -1,49 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/ErrorLogTest/banner/banner_v3.bsf b/build/tests/ErrorLogTest/banner/banner_v3.bsf deleted file mode 100644 index d45ce7bcf1672abedee3d05e0883674d3527febd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 820 zcmc(dO>4qH5Qg8YLjS{pXDcG~;L&2VB2tWcU!&DP{2+-+|Gf3tUGK@sGVCxP@6Nol zJAe0<28tEQsO`nzTOEtG}Z85Cv(%S;N{q*I>EOO!=C5lauai<3}N(#17fTuU~gV-2om1|(KsgX8^>NXH=|QR3vs|HqD{ z{N27^T8W->3pN!CTfyFAU1iR>veE3d$s?479&Up@u4n7I12}>cxPUttEqsZXX2lpn zbPp-GCyLS0v?NwYQTtOn-Sc{)fAU@vT4?@MxBI`%{9itiAo7Pp47)_D7IA&OY1t!N Unl7a3Qsb?h(qQ!|75$@8Pl+X@3IG5A diff --git a/build/tests/FakeRomHeader/Makefile b/build/tests/FakeRomHeader/Makefile deleted file mode 100644 index 153cf8bc..00000000 --- a/build/tests/FakeRomHeader/Makefile +++ /dev/null @@ -1,106 +0,0 @@ -#! make -f -#--------------------------------------------------------------------------- -# Project: TwlSDK - tools - mastering.TWL -# File: Makefile.TWL -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: #$ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- -TARGET_PLATFORM = TWL - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - - -TARGETS = $(PREFIX)$(SUFFIX).exe - -SOURCES_C = main.c keys.c - -SOURCES = $(SOURCES_C) - -OBJECTS = $(SOURCES:.c=.o) - -INCDIR = $(TWLSDK_ROOT)/build/tools/makerom.TWL \ - $(TWL_IPL_RED_ROOT)/include - -REVISION_H = revision.h - -#INSTALL_DIR = $(FIRM_INSTALL_TOOLSDIR)/bin -#INSTALL_TARGETS = $(TARGETS) - -MACROS += $(addprefix -I,$(INCDIR)) -DPLATFORM_ENDIAN_LITTLE - -LIBACSIGN = $(ROOT)/build/tools/makerom.TWL/acsign/lib/X86/libacsign_x86.a -LIBAES = $(ROOT)/build/tools/makerom.TWL/aes/lib/X86/libaes_x86.a -LIBDIGEST = $(ROOT)/build/tools/makerom.TWL/digest/lib/X86/libdigest_x86.a -#LIBDGT = $(ROOT)/build/tools/libdgt.TWL/lib/libdgt.TWL.a - -ifeq ($(KEY_LAUNCHER),TRUE) -MACROS += -DKEY_LAUNCHER -SUFFIX = .launcher -else -ifeq ($(KEY_SECURE),TRUE) -MACROS += -DKEY_SECURE -SUFFIX = .secure -else -ifeq ($(KEY_SYSTEM),TRUE) -MACROS += -DKEY_SYSTEM -SUFFIX = .sys -else -MACROS += -DKEY_USER -SUFFIX = .user -endif -endif -endif - -ifeq ($(FOR_RED),TRUE) -MACROS += -DFOR_RED -PREFIX = FakeRomHeader -else -PREFIX = RomVersionChanger -endif - -LDIRT_CLEAN = $(OBJECTS) $(TARGETS) *.BAK $(REVISION_H) - -include $(TWLSDK_ROOT)/build/buildtools/twl/modulerules.x86 - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(REVISION_H) $(OBJECTS) $(LIBACSIGN) $(LIBAES) $(LIBDIGEST) - $(CC_X86) $+ -o $@ -lnetapi32 -lwsock32 - -main.o: main.c - -#main.h: - -# avoid to warning message -#misc.o:WARNING += -Wno-format-y2k - -# - -$(REVISION_H) :: - @if test -e $(TWLSDK_ROOT)/.svn; then \ - LANG=C svn info $(call empath,$(TWLSDK_ROOT)) | grep 'Revision' | sed "s|Revision: \(.*\)|#define SDK_REVISION \"\1\"|" > $(REVISION_H); \ - else \ - echo "#define SDK_REVISION \"-\"" > $(REVISION_H); \ - fi - @if test -e $(TWL_IPL_RED_ROOT)/.svn; then \ - LANG=C svn info $(call empath,$(TWL_IPL_RED_ROOT)) | grep 'Revision' | sed "s|Revision: \(.*\)|#define IPL_REVISION \"\1\"|" >> $(REVISION_H); \ - else \ - echo "#define IPL_REVISION \"-\"" >> $(REVISION_H); \ - fi - -#test: path.c misc.c -# $(CC_X86) -DTEST $+ -o $@ diff --git a/build/tests/FakeRomHeader/README.html b/build/tests/FakeRomHeader/README.html deleted file mode 100644 index 14b8777d..00000000 --- a/build/tests/FakeRomHeader/README.html +++ /dev/null @@ -1,532 +0,0 @@ - - - - - - -ROMバージョンつけかえツール - - - -

-

ROMバージョンつけかえツール

- -
-
-

ROMバージョンつけかえツールとは?

-

本ツールは、TWL向けSRLのROMバージョンを変更するPCツールです。

-
-
-

非対応なROM形式

-
    -
  1. クローンブート対応タイトル
  2. -
-

クローンブート対応タイトルに対して本ツールを使用すると、 -出力SRLではクローンブートができなくなります。 -TWL Hybridタイトルの場合には、警告が出力されますので、 -クローンブート対応でないかを確認してください。

-
    -
  1. TAD形式
  2. -
-

本ツールは SRL 形式のみ対応しています。 -本ツールに TAD を入力すると、エラーとなります。 -あらかじめ TAD⇒SRL 変換をしてから、本ツールをご使用ください。

-
    -
  1. NTR専用ROM
  2. -
-

TWL向けROM (TWL Hybrid/TWL Limited) のみ入力可能です。

-
-
-

使用上の注意

-

本ツールは、再ビルドなしにROMバージョンをつけかえるという、 -一般開発者が行なうことができないROM設定を可能にするツールです。 -したがって、再配布しないようにしてください。 -もし部外に配布する必要が生じた場合には、開発技術部にご確認ください。

-
-
-

実行方法

-

WindowsXP付属のコマンドプロンプト、もしくはcygwinで以下の形式をタイプしてください。

-
-
    -
  • ./RomVersionChecker.exe [オプション] (入力SRLファイル名) (出力SRLファイル名) (ROMバージョン)
  • -
-
-

たとえば、input.srl のROMバージョンを "0F" にしたい場合、以下のようにタイプしてください。

-
-
    -
  • ./RomVersionChecker.exe input.srl output.srl 0F
  • -
-
-
-

注意

-

「ROMバージョン」に入力する値は 16進数 です。 10進数での入力には対応していません。

-

たとえば、ROMバージョンを "0C" に設定したい場合には、 -"12" ではなく、"0C" と入力してください。

-
-
-

オプション

-
    -
  • -h : 使用方法を表示します。
  • -
  • -f : 通常、出力SRLファイルがすでに存在する場合、上書き確認をしますが、 -この上書き確認をスキップし、強制的に上書きします。
  • -
-
-
-
-

エラー

-

プログラムにエラーがあった場合、エラーメッセージが出力されます。

-

また、通常は、プログラムの返り値は "0" ですが、 -エラーが発生した場合には、返り値は "1" となります。

-

返り値は、Windowsコマンドプロンプトの場合、 -%ERRORLEVEL%環境変数に格納されますので、 -バッチファイルなどの分岐に利用することができます。

-

cygwinの場合、返り値の格納先は、 -%ERRORLEVEL%環境変数ではなく、シェル変数 $? となります。

-
-
-

変更履歴

-
    -
  • ver.1.0 (2009/08/18)
  • -
-

初版

-
-
- - diff --git a/build/tests/FakeRomHeader/README.txt b/build/tests/FakeRomHeader/README.txt deleted file mode 100644 index 22bae893..00000000 --- a/build/tests/FakeRomHeader/README.txt +++ /dev/null @@ -1,103 +0,0 @@ -============================================================================= -ROMo[W‚c[ -============================================================================= - -* ڎ - - * `ROMo[W‚c[Ƃ?`_ - * `ΉROM``_ - * `gp̒`_ - * `s@`_ - * `G[`_ - * `ύX`_ - - -ROMo[W‚c[Ƃ? -============================================================================= - -{c[́ATWLSRLROMo[WύXPCc[łB - - -ΉROM` -============================================================================= - -1. N[u[gΉ^Cg - -N[u[gΉ^Cgɑ΂Ė{c[gpƁA -oSRLł̓N[u[głȂȂ܂B -TWL Hybrid^Cg̏ꍇɂ́Axo͂܂̂ŁA -N[u[gΉłȂmFĂB - - -2. TAD` - -{c[ SRL `̂ݑΉĂ܂B -{c[ TAD ͂ƁAG[ƂȂ܂B -炩 TADSRL ϊĂA{c[gpB - - -3. NTRpROM - -TWLROM (TWL Hybrid/TWL Limited) ̂ݓ͉”\łB - - -gp̒ -============================================================================= - -{c[́AărhȂROMo[W‚ƂA -ʊJ҂sȂƂłȂROMݒ”\ɂc[łB -āAĔzzȂ悤ɂĂB -OɔzzKvꍇɂ́AJZpɂmFB - - -s@ -============================================================================= - -WindowsXPt̃R}hvvgAcygwinňȉ̌`^CvĂB - - * ./RomVersionChecker.exe@[IvV]@(SRLt@C)@(oSRLt@C)@(ROMo[W) - -Ƃ΁Ainput.srl ROMo[W "0F" ɂꍇAȉ̂悤Ƀ^CvĂB - - * ./RomVersionChecker.exe@input.srl@output.srl@0F - - ------------------------------------------------------------------------------- - -uROMo[Wvɓ͂l **16i** łB **10ił̓͂ɂ͑ΉĂ܂B** - -Ƃ΁AROMo[W "0C" ɐݒ肵ꍇɂ́A -"12" ł͂ȂA"0C" Ɠ͂ĂB - - -IvV ------------------------------------------------------------------------------- - -* -h : gp@\܂B -* -f : ʏAoSRLt@Cłɑ݂ꍇA㏑mF܂A - ̏㏑mFXLbvAIɏ㏑܂B - - -G[ -============================================================================= - -vOɃG[ꍇAG[bZ[Wo͂܂B - -܂Aʏ́AvO̕Ԃl "0" łA -G[ꍇɂ́AԂl "1" ƂȂ܂B - -ԂĺAWindowsR}hvvg̏ꍇA -%ERRORLEVEL%‹ϐɊi[܂̂ŁA -ob`t@CȂǂ̕ɗp邱Ƃł܂B - -cygwin̏ꍇAԂl̊i[́A -%ERRORLEVEL%‹ϐł͂ȂAVFϐ $? ƂȂ܂B - - -ύX -============================================================================= - -* ver.1.0 (2009/08/18) - - - diff --git a/build/tests/FakeRomHeader/keys.c b/build/tests/FakeRomHeader/keys.c deleted file mode 100644 index 67431383..00000000 --- a/build/tests/FakeRomHeader/keys.c +++ /dev/null @@ -1,243 +0,0 @@ -// p̌f[^ from makerom.TWL - -#include -#include "keys.h" - -#ifdef KEY_USER -// J@pROMwb_J -const u8 g_devPubKey_DER[ 0xa2 ] = { - 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, - 0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xAC, 0x93, 0xBB, - 0x3C, 0x15, 0x5C, 0x5F, 0x25, 0xB0, 0x4C, 0x37, 0xA4, 0x2D, 0x85, 0x29, 0x1D, 0x7A, 0x9D, 0x2D, - 0xD5, 0x79, 0xB5, 0x5D, 0xB1, 0x08, 0x20, 0x9C, 0xF0, 0x4C, 0x56, 0x27, 0x97, 0xF8, 0x7E, 0x3E, - 0xCB, 0x94, 0x06, 0x05, 0x94, 0x00, 0x92, 0x9B, 0xB0, 0x5B, 0x06, 0xF6, 0xAF, 0xAA, 0x9C, 0xA5, - 0xF0, 0x11, 0xA7, 0x8A, 0xCB, 0x0C, 0x11, 0xD6, 0x0C, 0x3D, 0x30, 0xAC, 0x51, 0x79, 0x5A, 0xB5, - 0x7F, 0x11, 0x92, 0x74, 0x48, 0x82, 0x81, 0xBF, 0x3B, 0xFA, 0x93, 0xBF, 0x6B, 0x5B, 0x3F, 0x86, - 0x96, 0x4F, 0xCC, 0x90, 0x12, 0xB2, 0x39, 0x8D, 0x68, 0x16, 0x7B, 0xC6, 0x87, 0xF1, 0xF5, 0x60, - 0x62, 0x39, 0xFB, 0x10, 0x7E, 0x48, 0x7F, 0xDD, 0x82, 0x38, 0x38, 0x76, 0xB5, 0xCE, 0x21, 0x4B, - 0xC9, 0x6F, 0x31, 0x8D, 0x23, 0x57, 0x3D, 0xB6, 0x6C, 0xEE, 0xC2, 0x0D, 0x11, 0x02, 0x03, 0x01, - 0x00, 0x01, -}; -// J@pAvROMwb_閧 -const u8 g_devPrivKey_DER[ 0x263 ] = { - 0x30, 0x82, 0x02, 0x5F, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xAC, 0x93, 0xBB, 0x3C, 0x15, - 0x5C, 0x5F, 0x25, 0xB0, 0x4C, 0x37, 0xA4, 0x2D, 0x85, 0x29, 0x1D, 0x7A, 0x9D, 0x2D, 0xD5, 0x79, - 0xB5, 0x5D, 0xB1, 0x08, 0x20, 0x9C, 0xF0, 0x4C, 0x56, 0x27, 0x97, 0xF8, 0x7E, 0x3E, 0xCB, 0x94, - 0x06, 0x05, 0x94, 0x00, 0x92, 0x9B, 0xB0, 0x5B, 0x06, 0xF6, 0xAF, 0xAA, 0x9C, 0xA5, 0xF0, 0x11, - 0xA7, 0x8A, 0xCB, 0x0C, 0x11, 0xD6, 0x0C, 0x3D, 0x30, 0xAC, 0x51, 0x79, 0x5A, 0xB5, 0x7F, 0x11, - 0x92, 0x74, 0x48, 0x82, 0x81, 0xBF, 0x3B, 0xFA, 0x93, 0xBF, 0x6B, 0x5B, 0x3F, 0x86, 0x96, 0x4F, - 0xCC, 0x90, 0x12, 0xB2, 0x39, 0x8D, 0x68, 0x16, 0x7B, 0xC6, 0x87, 0xF1, 0xF5, 0x60, 0x62, 0x39, - 0xFB, 0x10, 0x7E, 0x48, 0x7F, 0xDD, 0x82, 0x38, 0x38, 0x76, 0xB5, 0xCE, 0x21, 0x4B, 0xC9, 0x6F, - 0x31, 0x8D, 0x23, 0x57, 0x3D, 0xB6, 0x6C, 0xEE, 0xC2, 0x0D, 0x11, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x81, 0x81, 0x00, 0x95, 0xDC, 0xC8, 0x18, 0x19, 0xF8, 0x98, 0x0B, 0x73, 0x78, 0x0C, 0x4D, - 0x7E, 0xD6, 0x06, 0xE9, 0x39, 0x83, 0xEA, 0xBC, 0x59, 0xAF, 0x7C, 0x87, 0xF2, 0x25, 0xD8, 0x02, - 0xF8, 0x57, 0x4C, 0x94, 0xB4, 0xCE, 0x74, 0x9B, 0x76, 0x94, 0x70, 0x1D, 0xA1, 0x0D, 0xAF, 0x33, - 0x4B, 0x28, 0xD5, 0xE9, 0xA0, 0x3F, 0xDD, 0xFD, 0x86, 0x67, 0x36, 0xA8, 0xB2, 0x77, 0x7E, 0xA8, - 0x2C, 0x2E, 0xEB, 0x43, 0x7B, 0xE4, 0xA3, 0x66, 0x7C, 0x3A, 0x00, 0x90, 0xC5, 0xF5, 0xF8, 0x59, - 0xF9, 0x95, 0x88, 0x2A, 0xA8, 0xF4, 0x94, 0x41, 0x05, 0x02, 0xA0, 0x47, 0xC0, 0xC1, 0xB9, 0x80, - 0x1F, 0x49, 0xBB, 0x09, 0xBF, 0x42, 0xBA, 0xE6, 0xEE, 0x8D, 0x21, 0x1D, 0xFB, 0x8F, 0xC7, 0xB7, - 0x71, 0x00, 0xFB, 0x35, 0x13, 0xD8, 0xBC, 0xA3, 0x3F, 0x3A, 0xCF, 0x96, 0xB0, 0x0B, 0x8A, 0x61, - 0x9C, 0x70, 0xF8, 0x91, 0x02, 0x41, 0x00, 0xD8, 0xAA, 0x14, 0x21, 0x49, 0x7A, 0x2C, 0xC3, 0xAA, - 0xDA, 0xFB, 0x17, 0xB0, 0xD7, 0xF5, 0x5A, 0x77, 0xEE, 0xF0, 0xA9, 0x09, 0x18, 0x85, 0x21, 0xD4, - 0x12, 0x4F, 0x85, 0x35, 0x05, 0x20, 0x36, 0x22, 0x65, 0x2C, 0xDD, 0xFA, 0xF5, 0x8E, 0xA5, 0x2E, - 0xC4, 0xFD, 0xD1, 0xFA, 0xC6, 0x8A, 0x0F, 0x98, 0x69, 0xD9, 0x82, 0x50, 0xDF, 0xFA, 0x80, 0xC3, - 0xFE, 0x5E, 0x15, 0x59, 0xA8, 0xD4, 0x05, 0x02, 0x41, 0x00, 0xCB, 0xE8, 0x9A, 0xF2, 0x5F, 0xC1, - 0x75, 0xA5, 0x1E, 0x95, 0xE4, 0x4F, 0x1A, 0x48, 0xA1, 0x75, 0x9A, 0x6E, 0xDB, 0xA2, 0x31, 0xD6, - 0x66, 0x29, 0xEA, 0x19, 0x37, 0x0C, 0xB2, 0x89, 0xD3, 0x03, 0x15, 0xE6, 0x7A, 0x1A, 0xCB, 0xCE, - 0xB9, 0x79, 0x11, 0x9B, 0x71, 0x78, 0xA5, 0xBB, 0x07, 0x6F, 0xA3, 0x05, 0x3B, 0x84, 0x23, 0x47, - 0xAB, 0x20, 0x34, 0x39, 0xB0, 0x59, 0x87, 0xEC, 0xCE, 0x9D, 0x02, 0x41, 0x00, 0xB8, 0xE0, 0x98, - 0x00, 0xB7, 0x64, 0x0B, 0x22, 0x83, 0x7E, 0x0B, 0xD7, 0xF1, 0x4C, 0xB5, 0xCD, 0x96, 0x9D, 0x4A, - 0xB9, 0xD2, 0x4B, 0x1B, 0xFE, 0xFB, 0xA9, 0x0C, 0x35, 0xCC, 0x42, 0x2D, 0x74, 0x43, 0xF1, 0x35, - 0x51, 0xCD, 0x3D, 0x0F, 0x95, 0x1F, 0xCD, 0x74, 0x10, 0x62, 0xFE, 0x5A, 0xFC, 0x67, 0xBF, 0x9A, - 0x9C, 0x3A, 0x4A, 0x84, 0xC4, 0xAF, 0x79, 0x33, 0xEA, 0xDF, 0xF0, 0xD1, 0xC9, 0x02, 0x41, 0x00, - 0xAA, 0x5B, 0x16, 0x00, 0xC2, 0xB1, 0x5D, 0x39, 0x6B, 0x59, 0x2D, 0x5A, 0x4D, 0x0A, 0x3B, 0x22, - 0x86, 0xB8, 0x71, 0x74, 0x8B, 0x90, 0xA4, 0xE0, 0x05, 0xBD, 0xB5, 0x39, 0x3D, 0x7C, 0x5A, 0x37, - 0xAC, 0xB7, 0x56, 0x72, 0x46, 0xAD, 0xDA, 0x54, 0xE4, 0xB9, 0xEA, 0x4E, 0x32, 0xA0, 0x13, 0xF1, - 0x57, 0xD0, 0x4A, 0x4D, 0xF6, 0x2F, 0xAD, 0x2F, 0x85, 0x92, 0x60, 0xDC, 0x1B, 0xEC, 0x63, 0x1D, - 0x02, 0x41, 0x00, 0xAC, 0x40, 0x43, 0xF2, 0x74, 0x2C, 0x56, 0xF4, 0xB9, 0x52, 0xB0, 0xCC, 0x89, - 0xC7, 0x70, 0x33, 0xA9, 0xC0, 0xD3, 0x4E, 0x35, 0xFC, 0x49, 0x69, 0xCB, 0x22, 0x9C, 0x0D, 0xD0, - 0xE1, 0x8F, 0xCC, 0xF4, 0xAD, 0x25, 0xC2, 0xE1, 0x84, 0xD6, 0x34, 0x35, 0x89, 0xFA, 0xC4, 0xBA, - 0x43, 0x34, 0xF4, 0xD2, 0xB2, 0x36, 0x56, 0xB9, 0x96, 0x78, 0x4D, 0x7A, 0xE3, 0x4D, 0xA9, 0x5E, - 0xF5, 0x3E, 0x88, -}; -#endif //#ifdef KEY_USER - -#ifdef KEY_SYSTEM -// JpVXeAv ROMwb_pJ -const u8 g_devPubKey_DER[ 0xa2 ] = { - 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, - 0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xE9, 0x9E, 0xA7, - 0x9F, 0x59, 0x4D, 0xF4, 0xA7, 0x60, 0x04, 0xBD, 0x47, 0xF2, 0xB3, 0x64, 0xCD, 0x16, 0x79, 0xC1, - 0x47, 0x39, 0xF6, 0xA9, 0xF8, 0xEE, 0x1A, 0xD0, 0x72, 0xCF, 0x43, 0x97, 0x0C, 0x93, 0xA1, 0x38, - 0x4E, 0x13, 0x40, 0x6C, 0x10, 0x59, 0x43, 0xE2, 0x71, 0x29, 0x54, 0x14, 0x2C, 0xC5, 0xDA, 0x59, - 0x4D, 0xB4, 0x6A, 0xEF, 0x85, 0x61, 0x6F, 0x7F, 0x1C, 0x59, 0x34, 0x2C, 0xC6, 0x24, 0xF3, 0x7B, - 0xC3, 0xB7, 0x40, 0xD1, 0x46, 0xF8, 0x90, 0xB7, 0xC2, 0x98, 0x50, 0xAF, 0x95, 0x52, 0x42, 0xDB, - 0xAC, 0xD6, 0x7E, 0xA9, 0xC3, 0x3D, 0x1B, 0x51, 0x56, 0x07, 0x06, 0xD0, 0x0B, 0x01, 0xBB, 0x58, - 0x93, 0xEA, 0xA0, 0x2C, 0xC7, 0x7D, 0x6A, 0x31, 0x7E, 0xC9, 0xE2, 0xDA, 0xFE, 0x1F, 0x2E, 0x9D, - 0xA7, 0x54, 0x84, 0xDC, 0x28, 0xB9, 0x18, 0xEA, 0x16, 0xF2, 0x95, 0x55, 0x6D, 0x02, 0x03, 0x01, - 0x00, 0x01, -}; - -// JpVXeAv ROMwb_p閧 -const u8 g_devPrivKey_DER[ 0x263 ] = { - 0x30, 0x82, 0x02, 0x5E, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xE9, 0x9E, 0xA7, 0x9F, 0x59, - 0x4D, 0xF4, 0xA7, 0x60, 0x04, 0xBD, 0x47, 0xF2, 0xB3, 0x64, 0xCD, 0x16, 0x79, 0xC1, 0x47, 0x39, - 0xF6, 0xA9, 0xF8, 0xEE, 0x1A, 0xD0, 0x72, 0xCF, 0x43, 0x97, 0x0C, 0x93, 0xA1, 0x38, 0x4E, 0x13, - 0x40, 0x6C, 0x10, 0x59, 0x43, 0xE2, 0x71, 0x29, 0x54, 0x14, 0x2C, 0xC5, 0xDA, 0x59, 0x4D, 0xB4, - 0x6A, 0xEF, 0x85, 0x61, 0x6F, 0x7F, 0x1C, 0x59, 0x34, 0x2C, 0xC6, 0x24, 0xF3, 0x7B, 0xC3, 0xB7, - 0x40, 0xD1, 0x46, 0xF8, 0x90, 0xB7, 0xC2, 0x98, 0x50, 0xAF, 0x95, 0x52, 0x42, 0xDB, 0xAC, 0xD6, - 0x7E, 0xA9, 0xC3, 0x3D, 0x1B, 0x51, 0x56, 0x07, 0x06, 0xD0, 0x0B, 0x01, 0xBB, 0x58, 0x93, 0xEA, - 0xA0, 0x2C, 0xC7, 0x7D, 0x6A, 0x31, 0x7E, 0xC9, 0xE2, 0xDA, 0xFE, 0x1F, 0x2E, 0x9D, 0xA7, 0x54, - 0x84, 0xDC, 0x28, 0xB9, 0x18, 0xEA, 0x16, 0xF2, 0x95, 0x55, 0x6D, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x81, 0x81, 0x00, 0xCF, 0x67, 0xAA, 0x3B, 0x1F, 0x26, 0xC5, 0x68, 0x7F, 0x27, 0x55, 0xFF, - 0xF5, 0x29, 0x6C, 0xF9, 0x62, 0xD5, 0xCF, 0x50, 0xF3, 0xD5, 0xD8, 0x4B, 0x06, 0xE0, 0xC9, 0x64, - 0xD4, 0x3B, 0x96, 0x73, 0x74, 0xF1, 0x71, 0xB2, 0x67, 0x07, 0x0F, 0xA9, 0x68, 0x06, 0x8B, 0x97, - 0x99, 0x70, 0x6A, 0xC4, 0xE1, 0x16, 0x9B, 0xA8, 0x0F, 0xDF, 0xCC, 0x2B, 0xE7, 0x37, 0xFC, 0x6A, - 0x67, 0x8B, 0x99, 0x9E, 0xD1, 0xDA, 0xCC, 0x68, 0xFC, 0xEB, 0x8D, 0xFE, 0x42, 0x84, 0x72, 0x88, - 0x05, 0xAF, 0x23, 0x32, 0x30, 0x1F, 0xFA, 0xCC, 0x67, 0x52, 0x93, 0x6C, 0xC1, 0x0A, 0xCF, 0xD6, - 0xD3, 0x5F, 0x75, 0xE9, 0x4D, 0x32, 0xC0, 0x31, 0x1B, 0xD4, 0xB5, 0x4B, 0xB4, 0x4E, 0xB0, 0x3E, - 0xD5, 0x6C, 0x3C, 0xDC, 0x57, 0xBB, 0x32, 0x24, 0x41, 0x9C, 0x79, 0xBE, 0xFC, 0xC0, 0x3B, 0x63, - 0x0C, 0x5D, 0xC6, 0xE5, 0x02, 0x41, 0x00, 0xF6, 0x77, 0x12, 0x72, 0x63, 0xD0, 0x9B, 0x22, 0xC6, - 0x4F, 0x19, 0x1E, 0x2A, 0xE1, 0x97, 0xCF, 0x28, 0xD3, 0xC3, 0x5E, 0xFB, 0x22, 0x57, 0xE5, 0x4F, - 0x90, 0x83, 0x53, 0xB0, 0x80, 0xD3, 0x2D, 0xFB, 0x77, 0x55, 0x52, 0x5E, 0x00, 0xD8, 0x72, 0x39, - 0x93, 0xF0, 0x89, 0x83, 0x97, 0xFB, 0x78, 0xD2, 0xB0, 0xCD, 0xED, 0x1C, 0x9B, 0x8F, 0x5D, 0xBD, - 0x00, 0x26, 0x37, 0xA1, 0xE5, 0x38, 0xE7, 0x02, 0x41, 0x00, 0xF2, 0xA8, 0x5D, 0x86, 0xE0, 0x33, - 0xC8, 0x93, 0x5C, 0xB9, 0xBD, 0xCF, 0x27, 0x70, 0x81, 0x79, 0xE1, 0x12, 0x82, 0x09, 0x64, 0xCB, - 0xDB, 0xCF, 0xBB, 0x52, 0xD3, 0x3F, 0x22, 0x90, 0x47, 0x23, 0xAA, 0x20, 0x7D, 0x92, 0xFD, 0xD6, - 0x58, 0x68, 0xF3, 0xB1, 0xFA, 0x7B, 0x81, 0x0D, 0x8F, 0x22, 0xDC, 0x84, 0x08, 0x91, 0x60, 0x07, - 0xE8, 0x98, 0x9A, 0x84, 0xDA, 0x4C, 0x24, 0xC7, 0x10, 0x8B, 0x02, 0x41, 0x00, 0xB3, 0xB0, 0xAA, - 0x75, 0x55, 0xCA, 0x90, 0x60, 0xB1, 0x1E, 0x98, 0x1C, 0x83, 0x7D, 0x08, 0x36, 0x53, 0xF8, 0xD8, - 0x77, 0x16, 0x37, 0xBA, 0xC7, 0x87, 0xD3, 0xBF, 0xBB, 0xB3, 0x72, 0xA9, 0x04, 0xDC, 0x52, 0xEB, - 0x94, 0xEA, 0xCE, 0x49, 0x00, 0x36, 0x74, 0x62, 0xA9, 0x8F, 0x94, 0xAE, 0x16, 0x2F, 0xDE, 0x11, - 0xB4, 0xEE, 0xE7, 0x87, 0x85, 0xFB, 0x36, 0xF1, 0xA6, 0x1B, 0xD5, 0xC8, 0x3F, 0x02, 0x40, 0x73, - 0x18, 0x72, 0xCC, 0x1F, 0x99, 0xD0, 0x40, 0x3D, 0x52, 0x08, 0x7A, 0xB2, 0x5D, 0x45, 0xBC, 0x76, - 0x8A, 0x1D, 0xCD, 0xB0, 0xD6, 0x94, 0xDB, 0x32, 0x21, 0xB5, 0xFB, 0x13, 0x3C, 0xD5, 0xD1, 0x4F, - 0xC7, 0x7B, 0x68, 0x76, 0x27, 0xED, 0xE5, 0x51, 0xF9, 0x90, 0x32, 0x76, 0x62, 0xE5, 0x0A, 0x87, - 0x07, 0xC5, 0x3C, 0x97, 0x0D, 0x09, 0x41, 0x20, 0xC1, 0x74, 0xFD, 0x7A, 0xD0, 0x44, 0xC3, 0x02, - 0x41, 0x00, 0xAF, 0xA3, 0x2C, 0x53, 0x8E, 0x8E, 0xA8, 0xE7, 0x36, 0xC0, 0x5C, 0x9E, 0x95, 0xEE, - 0xC1, 0x97, 0x02, 0x63, 0x7F, 0x3B, 0x4E, 0xB2, 0x0F, 0xF2, 0x7A, 0xBD, 0x57, 0x9C, 0x8B, 0x85, - 0xA8, 0x5D, 0x14, 0x3B, 0x7B, 0xF0, 0xBE, 0xFE, 0x0F, 0x8E, 0x4F, 0xD5, 0xB8, 0x49, 0xE8, 0x90, - 0xF5, 0x12, 0xBF, 0xB2, 0xD6, 0xE2, 0x78, 0x20, 0x26, 0x6C, 0x3F, 0x5C, 0xE4, 0x57, 0x6D, 0xE9, - 0xB4, 0x63, -}; -#endif // #ifdef KEY_SYSTEM - -#ifdef KEY_SECURE -// JpVbvAv ROMwb_pJ -const u8 g_devPubKey_DER[ 0xa2 ] = { - 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, - 0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xA7, 0x9F, 0x54, - 0xA0, 0xC7, 0x45, 0xAE, 0xF6, 0x63, 0xA7, 0x53, 0xB7, 0x0A, 0xCC, 0x0B, 0xCB, 0x65, 0xE1, 0x11, - 0xC6, 0x05, 0x15, 0xB5, 0x6E, 0xBD, 0xAC, 0x0C, 0xCA, 0xF4, 0x7C, 0x68, 0x7A, 0xF9, 0x0E, 0x5D, - 0x98, 0x5B, 0xC8, 0x4D, 0x22, 0x3B, 0xA3, 0xBE, 0x8B, 0x5B, 0x7F, 0x26, 0x44, 0x9F, 0xC4, 0x48, - 0x44, 0xB1, 0x32, 0xB7, 0xBE, 0x63, 0xBA, 0xD6, 0xC1, 0x10, 0xCE, 0xF6, 0xED, 0x47, 0x8F, 0xE1, - 0xFF, 0x7F, 0x5A, 0xD5, 0x5D, 0x94, 0x38, 0x2F, 0xA1, 0xD4, 0xEF, 0x82, 0xB1, 0x0D, 0xC4, 0x43, - 0xEC, 0xBE, 0x77, 0xB6, 0x82, 0x9C, 0xFA, 0x17, 0x87, 0x84, 0x82, 0x25, 0x46, 0xFB, 0xD6, 0x05, - 0xC8, 0x9A, 0x7E, 0xAD, 0x44, 0x40, 0x0D, 0x35, 0x9C, 0x45, 0x44, 0x64, 0x36, 0x61, 0x4B, 0xF7, - 0xE6, 0x31, 0x5C, 0x7D, 0x96, 0x73, 0xE8, 0xAC, 0xB4, 0xE3, 0x5E, 0xD1, 0x9D, 0x02, 0x03, 0x01, - 0x00, 0x01, -}; - -// JpVbvAv ROMwb_p閧 -const u8 g_devPrivKey_DER[ 0x263 ] = { - 0x30, 0x82, 0x02, 0x5D, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xA7, 0x9F, 0x54, 0xA0, 0xC7, - 0x45, 0xAE, 0xF6, 0x63, 0xA7, 0x53, 0xB7, 0x0A, 0xCC, 0x0B, 0xCB, 0x65, 0xE1, 0x11, 0xC6, 0x05, - 0x15, 0xB5, 0x6E, 0xBD, 0xAC, 0x0C, 0xCA, 0xF4, 0x7C, 0x68, 0x7A, 0xF9, 0x0E, 0x5D, 0x98, 0x5B, - 0xC8, 0x4D, 0x22, 0x3B, 0xA3, 0xBE, 0x8B, 0x5B, 0x7F, 0x26, 0x44, 0x9F, 0xC4, 0x48, 0x44, 0xB1, - 0x32, 0xB7, 0xBE, 0x63, 0xBA, 0xD6, 0xC1, 0x10, 0xCE, 0xF6, 0xED, 0x47, 0x8F, 0xE1, 0xFF, 0x7F, - 0x5A, 0xD5, 0x5D, 0x94, 0x38, 0x2F, 0xA1, 0xD4, 0xEF, 0x82, 0xB1, 0x0D, 0xC4, 0x43, 0xEC, 0xBE, - 0x77, 0xB6, 0x82, 0x9C, 0xFA, 0x17, 0x87, 0x84, 0x82, 0x25, 0x46, 0xFB, 0xD6, 0x05, 0xC8, 0x9A, - 0x7E, 0xAD, 0x44, 0x40, 0x0D, 0x35, 0x9C, 0x45, 0x44, 0x64, 0x36, 0x61, 0x4B, 0xF7, 0xE6, 0x31, - 0x5C, 0x7D, 0x96, 0x73, 0xE8, 0xAC, 0xB4, 0xE3, 0x5E, 0xD1, 0x9D, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x81, 0x80, 0x48, 0xCA, 0x9C, 0x49, 0xA5, 0xBF, 0xD1, 0x17, 0x16, 0x77, 0x97, 0x97, 0x29, - 0x8D, 0x2A, 0xA2, 0x0D, 0x80, 0x0B, 0xE3, 0xDE, 0x59, 0x6B, 0x0C, 0xC8, 0x39, 0x6A, 0xE4, 0xC7, - 0xFF, 0x2E, 0xB0, 0x18, 0x6F, 0xF0, 0x9D, 0x35, 0x5E, 0x6A, 0x80, 0xAF, 0x3D, 0x90, 0x85, 0x9C, - 0x1A, 0x3F, 0x58, 0x15, 0xB9, 0x7B, 0x58, 0xB9, 0x4A, 0xB9, 0x18, 0x68, 0xDE, 0xBE, 0x5B, 0xE1, - 0x1C, 0xBF, 0x85, 0xDF, 0x5F, 0x30, 0xFD, 0xD2, 0xEC, 0xC0, 0x77, 0x33, 0x62, 0x58, 0xEC, 0xC1, - 0x47, 0xF7, 0x41, 0xE8, 0x2B, 0x21, 0x83, 0xE0, 0x8E, 0xE0, 0xF4, 0x03, 0x5D, 0x07, 0x84, 0x91, - 0xFA, 0x5B, 0xD8, 0xD3, 0x47, 0x90, 0x6E, 0x7D, 0x81, 0x9C, 0x1A, 0xB3, 0x03, 0x2F, 0xBC, 0x1A, - 0x28, 0x01, 0xBB, 0x78, 0x33, 0x60, 0xD2, 0x32, 0x34, 0x09, 0xEE, 0x08, 0x35, 0x50, 0x7A, 0x02, - 0x77, 0xB9, 0x01, 0x02, 0x41, 0x00, 0xCF, 0x39, 0xB3, 0x95, 0xDB, 0x1A, 0x2C, 0xD5, 0x6B, 0x0E, - 0xD8, 0x7B, 0xEC, 0x36, 0x14, 0xC5, 0x6C, 0x6C, 0x03, 0x34, 0xCB, 0x8A, 0x03, 0xF0, 0x94, 0x9C, - 0x2E, 0xBB, 0xA4, 0x24, 0x85, 0x6F, 0x3C, 0x8B, 0xAD, 0x44, 0x88, 0xA1, 0xDC, 0x88, 0xFE, 0xE7, - 0x02, 0x24, 0xB3, 0x73, 0xEA, 0xD1, 0xF6, 0x61, 0x6A, 0x73, 0x00, 0x86, 0x0B, 0x67, 0xAB, 0x00, - 0xFB, 0xF7, 0xFD, 0x0D, 0x92, 0x91, 0x02, 0x41, 0x00, 0xCF, 0x13, 0x5C, 0xD1, 0x72, 0x12, 0xA5, - 0x1D, 0x3A, 0x86, 0xAB, 0xAC, 0x87, 0x11, 0x37, 0x6D, 0xEB, 0x90, 0x14, 0x41, 0x7B, 0xAA, 0x38, - 0x88, 0xFF, 0xAF, 0xAA, 0xAE, 0x12, 0x3E, 0x7C, 0x28, 0x59, 0xDB, 0xBE, 0xAE, 0x79, 0x20, 0x0C, - 0x4F, 0xE5, 0xAB, 0x97, 0x64, 0x0D, 0x1E, 0x31, 0x54, 0x10, 0xB0, 0x1C, 0x7E, 0x5A, 0x7B, 0x98, - 0x32, 0x00, 0xF7, 0xE0, 0x18, 0x15, 0x53, 0xFC, 0x4D, 0x02, 0x41, 0x00, 0x90, 0x5F, 0x38, 0x01, - 0xD0, 0x9B, 0x44, 0xDF, 0x0F, 0x6E, 0x51, 0x5E, 0xCC, 0xEB, 0xC4, 0xBE, 0xE2, 0xD1, 0xC1, 0xCE, - 0x17, 0x7C, 0x39, 0x50, 0x74, 0x88, 0xF7, 0x7A, 0x1D, 0x5A, 0xA0, 0x68, 0x26, 0x3B, 0x7D, 0xE4, - 0xC0, 0x78, 0x5C, 0x68, 0x49, 0x86, 0xF2, 0x14, 0x55, 0xBE, 0x0D, 0xBC, 0x68, 0x35, 0xE8, 0x6E, - 0xE4, 0xCF, 0x7E, 0xC4, 0xA3, 0xFB, 0xD4, 0x90, 0x2A, 0x8A, 0x39, 0x31, 0x02, 0x41, 0x00, 0x93, - 0x88, 0xE3, 0x17, 0xA2, 0xA3, 0xA0, 0x1A, 0x4C, 0x09, 0x89, 0x24, 0xD9, 0xF2, 0xAD, 0x40, 0x56, - 0x96, 0x07, 0xA8, 0x84, 0x18, 0x4A, 0x41, 0x69, 0x92, 0x5A, 0x13, 0xBD, 0x91, 0xE1, 0x59, 0xCA, - 0x73, 0xE2, 0xCE, 0x62, 0x24, 0x30, 0x41, 0x78, 0x8C, 0x21, 0xC7, 0xBA, 0x04, 0xE9, 0xF6, 0x50, - 0x11, 0x79, 0xAB, 0x98, 0x81, 0xF8, 0x74, 0x9F, 0xF5, 0xFB, 0x26, 0x8D, 0x83, 0x91, 0xFD, 0x02, - 0x40, 0x4D, 0xA4, 0x03, 0x7E, 0x00, 0xB6, 0xA2, 0xEE, 0x85, 0x19, 0x5C, 0xB3, 0xBE, 0x06, 0x48, - 0xF7, 0xA8, 0x27, 0xB3, 0xC9, 0xED, 0x60, 0xE1, 0x56, 0x0A, 0x3F, 0x8D, 0x64, 0x56, 0xBA, 0x2E, - 0xC3, 0xF6, 0x2D, 0x95, 0x38, 0x87, 0x58, 0xD6, 0x95, 0xF7, 0xA6, 0xD6, 0xEE, 0x85, 0x7D, 0xD7, - 0x93, 0x80, 0xF5, 0x1D, 0xBF, 0x5F, 0x3E, 0x3A, 0x22, 0x29, 0x18, 0xE5, 0x95, 0x73, 0x0D, 0xEA, - 0x42, -}; -#endif // #ifdef KEY_SECURE - -#ifdef KEY_LAUNCHER -// JpVXeAv ROMwb_pJ -const u8 g_devPubKey_DER[ 0xa2 ] = { - 0x30, 0x81, 0x9F, 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, - 0x05, 0x00, 0x03, 0x81, 0x8D, 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xBC, 0xFD, 0xA1, - 0xFF, 0x1F, 0x66, 0xDF, 0xEC, 0xB4, 0x69, 0xF8, 0xF7, 0x43, 0x0C, 0x5D, 0x0F, 0x00, 0xD7, 0x20, - 0x49, 0x42, 0x06, 0x03, 0x29, 0x85, 0x0B, 0x99, 0x59, 0x61, 0x98, 0x70, 0x6E, 0xFF, 0xF6, 0xB4, - 0x70, 0x66, 0xF0, 0xDD, 0x8F, 0xDC, 0xE9, 0xF2, 0x0D, 0xD0, 0x21, 0x1D, 0x77, 0xB8, 0x9C, 0x51, - 0x87, 0xC0, 0xB1, 0x33, 0xAB, 0x13, 0x96, 0x0B, 0x47, 0xB8, 0x42, 0x4A, 0x0D, 0xC3, 0x77, 0xE1, - 0x87, 0xB1, 0x6B, 0x24, 0x31, 0x10, 0x8A, 0x47, 0xF2, 0x32, 0xF4, 0xC9, 0x78, 0x25, 0x13, 0xD4, - 0x80, 0x10, 0x05, 0x52, 0xC3, 0xE7, 0x50, 0x7B, 0x29, 0x49, 0xCE, 0x93, 0xD9, 0x8F, 0x2A, 0xB5, - 0x4D, 0xD1, 0xC1, 0x91, 0xD8, 0x07, 0x16, 0x10, 0x15, 0xFF, 0xD6, 0x84, 0x8F, 0x54, 0x3D, 0x91, - 0x5B, 0x37, 0x45, 0x48, 0xE4, 0x6B, 0x62, 0xD2, 0x11, 0x9B, 0x0D, 0x71, 0x69, 0x02, 0x03, 0x01, - 0x00, 0x01, -}; - -// JpVXeAv ROMwb_p閧 -const u8 g_devPrivKey_DER[ 0x263 ] = { - 0x30, 0x82, 0x02, 0x5D, 0x02, 0x01, 0x00, 0x02, 0x81, 0x81, 0x00, 0xBC, 0xFD, 0xA1, 0xFF, 0x1F, - 0x66, 0xDF, 0xEC, 0xB4, 0x69, 0xF8, 0xF7, 0x43, 0x0C, 0x5D, 0x0F, 0x00, 0xD7, 0x20, 0x49, 0x42, - 0x06, 0x03, 0x29, 0x85, 0x0B, 0x99, 0x59, 0x61, 0x98, 0x70, 0x6E, 0xFF, 0xF6, 0xB4, 0x70, 0x66, - 0xF0, 0xDD, 0x8F, 0xDC, 0xE9, 0xF2, 0x0D, 0xD0, 0x21, 0x1D, 0x77, 0xB8, 0x9C, 0x51, 0x87, 0xC0, - 0xB1, 0x33, 0xAB, 0x13, 0x96, 0x0B, 0x47, 0xB8, 0x42, 0x4A, 0x0D, 0xC3, 0x77, 0xE1, 0x87, 0xB1, - 0x6B, 0x24, 0x31, 0x10, 0x8A, 0x47, 0xF2, 0x32, 0xF4, 0xC9, 0x78, 0x25, 0x13, 0xD4, 0x80, 0x10, - 0x05, 0x52, 0xC3, 0xE7, 0x50, 0x7B, 0x29, 0x49, 0xCE, 0x93, 0xD9, 0x8F, 0x2A, 0xB5, 0x4D, 0xD1, - 0xC1, 0x91, 0xD8, 0x07, 0x16, 0x10, 0x15, 0xFF, 0xD6, 0x84, 0x8F, 0x54, 0x3D, 0x91, 0x5B, 0x37, - 0x45, 0x48, 0xE4, 0x6B, 0x62, 0xD2, 0x11, 0x9B, 0x0D, 0x71, 0x69, 0x02, 0x03, 0x01, 0x00, 0x01, - 0x02, 0x81, 0x80, 0x16, 0x65, 0xDC, 0xC8, 0x16, 0x99, 0xA3, 0x9A, 0x32, 0xFB, 0x88, 0x35, 0x0D, - 0xAE, 0x2E, 0x6D, 0x33, 0xC5, 0x4B, 0x1F, 0x43, 0x82, 0xE0, 0xE7, 0x0F, 0xCC, 0x83, 0x1D, 0x13, - 0xB2, 0xF4, 0x48, 0x43, 0x6F, 0xA2, 0x8C, 0xDB, 0xB6, 0x5A, 0x1B, 0xCD, 0xAB, 0xB0, 0x33, 0x30, - 0xE2, 0x6B, 0xD2, 0x9F, 0x7F, 0x6F, 0x2E, 0x2E, 0x89, 0x11, 0xBD, 0x89, 0xB1, 0xB3, 0x9E, 0x89, - 0x58, 0xD9, 0xDB, 0xB9, 0x91, 0x00, 0xDA, 0x17, 0xA9, 0x14, 0xC3, 0x83, 0xFF, 0xFF, 0x46, 0x0F, - 0x5F, 0x81, 0x1B, 0x5B, 0x02, 0xD2, 0x29, 0xEF, 0x48, 0xB7, 0xDF, 0x8C, 0x34, 0xED, 0xA2, 0xEC, - 0xC0, 0x79, 0x50, 0xC6, 0xAD, 0x0B, 0x98, 0x28, 0xC2, 0x17, 0x80, 0x96, 0x67, 0x3A, 0x22, 0xD7, - 0x60, 0x61, 0x98, 0xF6, 0xAB, 0x10, 0x1E, 0xE6, 0x23, 0x06, 0x4B, 0x61, 0xAF, 0xFE, 0xD5, 0xAF, - 0xB8, 0x3D, 0x81, 0x02, 0x41, 0x00, 0xE2, 0x82, 0xC3, 0x83, 0x2A, 0xEF, 0xA0, 0x86, 0x15, 0xFD, - 0x80, 0x23, 0x2B, 0x1C, 0x80, 0x0C, 0xF7, 0xA0, 0xA3, 0x53, 0x2B, 0xAD, 0xF9, 0xF6, 0xF7, 0xA3, - 0x7E, 0x1A, 0x5E, 0xE7, 0x18, 0x6D, 0xF3, 0xD6, 0xDE, 0x68, 0xBB, 0x4A, 0x54, 0xAF, 0xDF, 0xA5, - 0xEC, 0xA7, 0x62, 0xBB, 0xCB, 0x7A, 0xDE, 0x3F, 0xFB, 0x9A, 0x99, 0x2A, 0xF7, 0x2D, 0x23, 0x98, - 0x9A, 0x9F, 0xCE, 0xFB, 0x67, 0xB1, 0x02, 0x41, 0x00, 0xD5, 0x98, 0x63, 0x19, 0x3D, 0x80, 0xDF, - 0x71, 0x13, 0x6A, 0xF4, 0x5E, 0x62, 0x99, 0x16, 0x34, 0x18, 0xF9, 0xDC, 0x58, 0x2F, 0xC3, 0xD8, - 0x8B, 0x68, 0xC1, 0x43, 0x98, 0xF0, 0xEC, 0x39, 0xE3, 0x40, 0x6E, 0x08, 0x9F, 0xED, 0x17, 0xBE, - 0xCC, 0x87, 0x4A, 0xAD, 0x99, 0x15, 0x09, 0xD0, 0xBB, 0xDB, 0x13, 0xF0, 0x53, 0xDF, 0xCB, 0x66, - 0x1A, 0xD1, 0xF2, 0x14, 0xB7, 0x17, 0xFA, 0xCB, 0x39, 0x02, 0x41, 0x00, 0xD8, 0xA2, 0x05, 0x89, - 0x32, 0x8C, 0x41, 0xB3, 0x5B, 0xDE, 0xBA, 0x29, 0x68, 0x76, 0xF6, 0x84, 0xF0, 0x64, 0x23, 0x30, - 0x4D, 0x4B, 0x34, 0x11, 0x1E, 0x60, 0xB0, 0x1F, 0x5A, 0x7A, 0x9C, 0xE3, 0xB3, 0xDC, 0xE1, 0x93, - 0xBA, 0xE4, 0x69, 0x40, 0x57, 0x9E, 0xA2, 0x4A, 0xA8, 0x64, 0x41, 0x44, 0xBE, 0xC0, 0xE4, 0xCA, - 0xC4, 0x08, 0xD2, 0xA3, 0xCA, 0x32, 0x8E, 0x57, 0x9F, 0x26, 0xD4, 0xD1, 0x02, 0x41, 0x00, 0x9B, - 0xD5, 0x50, 0x07, 0xAC, 0x2D, 0x87, 0xD7, 0x71, 0xB9, 0x48, 0x8C, 0x4C, 0x17, 0x30, 0x71, 0xD5, - 0xFF, 0x05, 0x59, 0x79, 0x8F, 0xC3, 0x3F, 0x02, 0xB0, 0x6D, 0xE6, 0xF9, 0x6E, 0xFF, 0x54, 0xE3, - 0x3E, 0xE4, 0x1F, 0xF9, 0xD4, 0xA7, 0x29, 0x85, 0x53, 0x60, 0x90, 0x1D, 0x1F, 0x4A, 0x20, 0xA4, - 0x57, 0x49, 0xB1, 0x87, 0xC7, 0x57, 0xB9, 0x1D, 0x8F, 0x26, 0xB9, 0xE6, 0x4E, 0xDD, 0x51, 0x02, - 0x40, 0x4F, 0xE6, 0xC8, 0x11, 0x14, 0xA2, 0xF9, 0xC3, 0xD1, 0x7B, 0x74, 0x48, 0x8F, 0x33, 0xB4, - 0xF6, 0xFF, 0xEE, 0xDC, 0x4E, 0x34, 0xF9, 0x66, 0xB8, 0x25, 0x3A, 0x05, 0xF5, 0x29, 0x1B, 0x12, - 0x61, 0x6C, 0xCD, 0xF1, 0x0D, 0xE6, 0x68, 0xED, 0x81, 0x44, 0x96, 0x07, 0x5A, 0x43, 0x72, 0x93, - 0xDC, 0xEE, 0xD7, 0x81, 0x82, 0x22, 0x5E, 0x07, 0x15, 0x02, 0xA5, 0xE9, 0x54, 0x59, 0x86, 0x03, - 0x02, -}; -#endif // #ifdef KEY_LAUNCHER diff --git a/build/tests/FakeRomHeader/keys.h b/build/tests/FakeRomHeader/keys.h deleted file mode 100644 index 349ae8e4..00000000 --- a/build/tests/FakeRomHeader/keys.h +++ /dev/null @@ -1,14 +0,0 @@ -// p̌f[^̐錾 - -#include - -// ̎ -//#define KEY_USER -//#define KEY_SYSTEM -//#define KEY_SECURE -//#define KEY_LAUNCHER - -// J@pROMwb_ -extern const u8 g_devPubKey_DER[ 0xa2 ]; -extern const u8 g_devPrivKey_DER[ 0x263 ]; - diff --git a/build/tests/FakeRomHeader/main.c b/build/tests/FakeRomHeader/main.c deleted file mode 100644 index f4edea71..00000000 --- a/build/tests/FakeRomHeader/main.c +++ /dev/null @@ -1,673 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlFirmware - tools - mastering - File: mastering.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: #$ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include -#include // strcasecmp() -#include // getopt() -#include // stat() -#include -#include -#include -#include -#include -#include "revision.h" -#include "keys.h" - -#define CARD_LATENCY_MASK 0x083f1fff -#define CARD_MROM_GAME_LATENCY 0x00010017 -#define CARD_MROM_SECURE_HW_LATENCY 0x001808f8 -#define CARD_MROM_SECURE_SW_LATENCY 0x051e -#define CARD_1TROM_GAME_LATENCY 0x00010657 -#define CARD_1TROM_SECURE_HW_LATENCY 0x081808f8 -#define CARD_1TROM_SECURE_SW_LATENCY 0x0d7e - - -/*---------------------------------------------------------------------------* - - - 錾 & 萔 - - - *---------------------------------------------------------------------------*/ - -// -- p[^ - -// CRC (makerom.TWL/misc.cmakerom.TWL/format_rom_private.hRsy) -#define CRC16_INIT_VALUE (0xffff) -#define CALC_CRC16_SIZE (0x15e) - -// t@CRs[pobt@ -#define BUFSIZE (16*1024) -static u8 buf[ BUFSIZE ]; - -// -- Context - -typedef struct _SContext -{ - // IvV - BOOL bPlatform; - BOOL bSignFlag; - BOOL bDevFlag; - BOOL bVerFlag; - BOOL bDebugger; - BOOL bCheckCard; - int verNum; - BOOL bMROM; - BOOL bNTR; - - FILE *ifp; - FILE *ofp; -} -SContext; - -// -- internal function -static BOOL iMain( SContext *pContext ); -u16 CalcCRC16(u16 start, u8 *data, int size); -BOOL SignRomHeader( ROM_Header *prh ); -BOOL DecryptSignRomHeader( ROM_Header *prh ); -static void SetRomSpeedByIndex(ROM_Header * header, tRomSpeedType idx); - -/*---------------------------------------------------------------------------* - - - O[oϐ - - - *---------------------------------------------------------------------------*/ - -BOOL DebugMode = FALSE; - -/*---------------------------------------------------------------------------* - - - Ƃ̖{ - - - *---------------------------------------------------------------------------*/ - -void usage() -{ - printf( "-----------------------------------------------------------------------------\n" ); -#ifdef FOR_RED - printf( "Usage: fakeRomHeader.exe input_file output_file\n" ); - printf( " input_file : a ROM data file (generated by makerom.TWL).\n" ); - printf( " output_file : a destination file.\n" ); -#else - printf( "Usage: RomVersionChanger.exe input_file output_file new_ROM_version\n" ); - printf( " input_file : a source ROM file.\n" ); - printf( " output_file : a destination ROM file.\n" ); - printf( " new_ROM_version : a new ROM version.\n" ); -#endif - printf( "\nOption:\n" ); - printf( "-h : print help only.\n" ); -#ifdef FOR_RED - printf( "-p : write invalid platform code in a ROM Header.\n" ); - printf( "-s : negate flag for the signature in a ROM Header.\n" ); - printf( "-d : negate a new developer encrypt flag, and assert an old one.\n" ); - printf( "-v NUM: change ROM version in a ROM Header.\n" ); - printf( "-m : [Only NTR limited ROM] Rom speed type replace 1TROM from MROM.\n" ); - printf( "-D : assert a disable flag of debugger alalysis.\n" ); - printf( "-c : assert a check(inspection) card flag.\n" ); - printf( "-N : skip appending signature [using for NTR limited ROM]" ); -#endif - printf( "-f : force to overwrite a output_file.\n" ); - printf( "-----------------------------------------------------------------------------\n" ); -} - -int main(int argc, char *argv[]) -{ - SContext context; - char *pSrc, *pDst; - int opt; - extern char *optarg; - extern int optind, opterr; - struct stat st; - BOOL bResult; - BOOL bForceOverwrite = FALSE; - - printf( "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n" ); -#ifdef FOR_RED - printf( " FakeRomHeader [%s-%s]\n", SDK_REVISION, IPL_REVISION ); -#else - printf( " RomVersionChanger [%s-%s]\n", SDK_REVISION, IPL_REVISION ); -#endif - printf( "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n" ); - - // context ̏ - memset( &context, 0, sizeof(SContext) ); - - // IvV -#ifdef FOR_RED - while( (opt = getopt(argc, argv, "hpsdmv:DcfN")) >= 0 ) -#endif - while( (opt = getopt(argc, argv, "hf")) >= 0 ) - { - switch( opt ) - { - case 'h': - usage(); - return 0; - break; - -#ifdef FOR_RED - case 'p': - context.bPlatform = TRUE; - break; - - case 's': - context.bSignFlag = TRUE; - break; - - case 'd': - context.bDevFlag = TRUE; - break; - - case 'v': - context.bVerFlag = TRUE; - context.verNum = strtol(optarg, NULL, 16); - break; - - case 'm': - context.bMROM = TRUE; - break; - - case 'D': - context.bDebugger = TRUE; - break; - - case 'c': - context.bCheckCard = TRUE; - break; - - case 'N': - context.bNTR = TRUE; - break; -#endif - case 'f': - bForceOverwrite = TRUE; - break; - - default: // IvVw肳ĂȂƂɂs - usage(); - fprintf( stdout, "error: illegal option\n" ); - exit(1); - break; - } - } - argc = argc - optind; - argv = argv + optind; - - // -#ifdef FOR_RED - if( argc != 2 ) - { - usage(); - printf( "error arguments\n" ); - exit(1); - } - else - { - pSrc = argv[0]; - pDst = argv[1]; - } -#else - if( argc != 3 ) // ʔłROMo[WƂĎ󂯎 - { - usage(); - printf( "error arguments\n" ); - exit(1); - } - else - { - pSrc = argv[0]; - pDst = argv[1]; - context.bVerFlag = TRUE; - context.verNum = strtol(argv[2], NULL, 16); - } -#endif - - // ROMo[W1oCgŎ܂邩`FbN - if( context.bVerFlag ) - { - if( (context.verNum < 0) || (255 < context.verNum) ) - { - printf("Error: ROM version (arg 3) must be within [0, 0xFF].\n"); - return -1; - } - } - - printf( "input_file: %s\n", pSrc ); - printf( "output_file: %s\n", pDst ); - printf( "\n" ); - - // ̓t@CƏo̓t@CȂ_ - if( (strlen(pSrc) == strlen(pDst)) && (memcmp(pSrc, pDst, strlen(pSrc)) == 0) ) - { - printf( "The name of output_file must be different from the one of input_file\n" ); - exit(1); - } - - // o̓t@C݂Ƃ㏑邩ǂmF - if( !bForceOverwrite && stat( pDst, &st )==0 ) - { - char ans; - printf( "The %s already exists. Overwrite it? (y or n) ", pDst ); - //fscanf( stdin, "%c", &ans ); - ans = (char)getch(); // ^[L[Ȃ - printf( "%c\n", ans ); // getch ł͓͂\Ȃ̂Ŏŕ\Kv - printf( "\n" ); - if( !(ans=='y') && !(ans=='Y') ) - { - printf( "mastering is aborted.\n" ); - exit(1); - } - } - - // t@CJ - context.ifp = fopen(pSrc, "rb"); - context.ofp = fopen(pDst, "wb+"); - if( !(context.ifp) || !(context.ofp) ) - { - printf( "fopen failed.\n" ); - bResult = FALSE; - goto FINALIZE; - } - - // { - bResult = iMain( &context ); - -// I -FINALIZE: - - if( !bResult ) - { - printf( "\n" ); - printf( "error.\n" ); - } - else - { - printf( "\n" ); - printf( "succeeded.\n" ); - } - if( context.ifp ) fclose(context.ifp); // ̉ - if( context.ofp ) fclose(context.ofp); - - if( (!bResult) && (stat( pDst, &st ) == 0) ) - { - unlink( pDst ); // o̓t@C폜 - } - return ((bResult)?0:1); -} - -/*---------------------------------------------------------------------------* - - ROMwb_̋U - - *---------------------------------------------------------------------------*/ - -static BOOL iMain( SContext *pContext ) -{ - ROM_Header rh; - int size; - - // ROMwb_[h - fseek( pContext->ifp, 0, SEEK_SET ); - if( sizeof(ROM_Header) != fread( &rh, 1, sizeof(ROM_Header), pContext->ifp ) ) - { - printf( "fread failed in reading ROM Header\n" ); - return FALSE; - } - -#ifndef FOR_RED - // ̌ - if( !DecryptSignRomHeader(&rh) ) - { - printf( "Decrypt Sign: Failed\n" ); - return FALSE; - } - printf( "Decrypt Sign: Succeeded\n" ); - - // NTR̂ƂG[(悭肻Ȃ̂ŋXo) - if( rh.s.platform_code == PLATFORM_CODE_NTR ) - { - printf("\n"); - printf("******************** Error *******************\n"); - printf("* *\n"); - printf("* NTR Limited tytle is not supported. *\n"); - printf("* *\n"); - printf("************************************************\n"); - printf("\n"); - return FALSE; - } - - // Hybrid̂Ƃx - if( rh.s.platform_code == PLATFORM_CODE_TWL_HYBLID) - { - printf("\n"); - printf("******************** Warning *******************\n"); - printf("* *\n"); - printf("* Platform is TWL/NTR Hybrid. *\n"); - printf("* *\n"); - printf("* Clone-boot application is not supported. *\n"); - printf("* *\n"); - printf("************************************************\n"); - printf("\n"); - } - printf("Initial Code: %c%c%c%c\n", - rh.s.game_code[0], rh.s.game_code[1], rh.s.game_code[2], rh.s.game_code[3]); -#endif //#ifndef FOR_RED - - // ROMwb_ - { - if( pContext->bPlatform ) - { - printf( "Platform Code: 0x%02x -> 0x01\n", rh.s.platform_code ); - rh.s.platform_code = 0x01; - } - - if( pContext->bSignFlag ) - { - printf( "Enable Signature: 0x%02x -> 0x00\n", rh.s.enable_signature ); - rh.s.enable_signature = 0x0; - } - - if( pContext->bDevFlag ) - { - printf( "Old Dev. Encrypt: 0x%02x -> 0x01x\n", rh.s.developer_encrypt_old ); - printf( "Oew Dev. Encrypt: 0x%02x -> 0x00x\n", rh.s.exFlags.developer_encrypt ); - rh.s.developer_encrypt_old = 0x1; - rh.s.exFlags.developer_encrypt = 0x0; - } - - if( pContext->bVerFlag ) - { - u8 old = rh.s.rom_version; - rh.s.rom_version = (u8)(pContext->verNum & 0xFF); - printf( "ROM version: 0x%02x -> 0x%02X\n", old, rh.s.rom_version ); - } - - if( pContext->bMROM ) - { - if( rh.s.platform_code != 0x00 ) - { - printf( "ERROR: This option is only for NTR Limited." ); - return FALSE; - } - //if( (rh.s.game_cmd_param & CARD_LATENCY_MASK) != CARD_MROM_GAME_LATENCY ) - //{ - // printf( "ERROR: This option is only for MROM Setting" ); - // return FALSE; - //} - SetRomSpeedByIndex( &rh, ONETROM ); - printf( "ROM Speed Type: **** -> 1TROM\n" ); - } - - if( pContext->bDebugger ) - { - if( rh.s.disable_debug == 0 ) - { - rh.s.disable_debug = 0x1; - printf( "Debugger analysis: Enable -> Disable\n" ); - } - else - { - printf( "Debugger analysis: Originally Disable\n" ); - } - } - - if( pContext->bCheckCard ) - { - if( rh.s.inspect_card == 0 ) - { - rh.s.inspect_card = 0x1; - printf( "Check Card Flag: Disable -> Enable\n" ); - } - else - { - printf( "Check Card Flag: Originally Enable\n" ); - } - } - } - - // wb_CRCvZ - printf("Header CRC: 0x%04X -> ", rh.s.header_crc16); - rh.s.header_crc16 = CalcCRC16( CRC16_INIT_VALUE, (u8*)&rh, CALC_CRC16_SIZE ); - printf("0x%04X\n", rh.s.header_crc16); - - // ď - if( !(pContext->bMROM) && !(pContext->bNTR) ) // NTRpIvV̂Ƃ͏Ȃ - { - if( !SignRomHeader( &rh ) ) - { - printf( "Encrypt Sign: Failed\n" ); - printf("\n*** Error: Failed to encrypt the sigunature. ***\n\n"); - return FALSE; - } - printf( "Encrypt Sign: Succeeded\n" ); - } - else - { - printf( "Encrypt Sign: Skip\n" ); - } - - // t@CRs - fseek( pContext->ifp, 0, SEEK_END ); - size = ftell( pContext->ifp ); - fseek( pContext->ifp, 0, SEEK_SET ); - fseek( pContext->ofp, 0, SEEK_SET ); - while( size > 0 ) - { - int len = (BUFSIZE < size)?BUFSIZE:size; - - if( len != fread( buf, 1, len, pContext->ifp ) ) - { - printf( "fread failed in a copying file\n" ); - return FALSE; - } - if( len != fwrite( buf, 1, len, pContext->ofp ) ) - { - printf( "fwrite failed in a copying file\n" ); - return FALSE; - } - - size -= len; - } - - // ROMwb_㏑ - fseek( pContext->ofp, 0, SEEK_SET ); - if( sizeof(ROM_Header) != fwrite( &rh, 1, sizeof(ROM_Header), pContext->ofp ) ) - { - printf( "fwrite failed in a copying file\n" ); - return FALSE; - } - - return TRUE; -} - -/*---------------------------------------------------------------------------* - - CRČvZ - - *---------------------------------------------------------------------------*/ - -static u16 crc16_table[16] = { - 0x0000, 0xCC01, 0xD801, 0x1400, - 0xF001, 0x3C00, 0x2800, 0xE401, - 0xA001, 0x6C00, 0x7800, 0xB401, - 0x5000, 0x9C01, 0x8801, 0x4400 -}; - -u16 CalcCRC16(u16 start, u8 *data, int size) -{ - u16 r1; - u16 total = start; - - while (size-- > 0) - { - // 4bit - r1 = crc16_table[total & 0xf]; - total = (total >> 4) & 0x0fff; - total = total ^ r1 ^ crc16_table[*data & 0xf]; - - // 4bit - r1 = crc16_table[total & 0xf]; - total = (total >> 4) & 0x0fff; - total = total ^ r1 ^ crc16_table[(*data >> 4) & 0xf]; - - data++; - } - return total; -} - - -/*---------------------------------------------------------------------------* - - ROMwb_̏ - - *---------------------------------------------------------------------------*/ - -BOOL SignRomHeader( ROM_Header *prh ) -{ - SignatureData signSrc; // ̂ƂƂȂ_CWFXgl - u8 signDst[ RSA_KEY_LENGTH ]; // ̊i[Tmpobt@ - u8 decryptBlock[ RSA_KEY_LENGTH ]; // ubNobt@ - BOOL result; - int pos; - - // ROMwb_̃_CWFXgZo(擪ؖ̈̒O܂łΏ) - ACSign_DigestUnit( - signSrc.digest, - prh, - (u32)&(prh->certificate) - (u32)prh // this->pRomHeader ̓}l[Wq[vɂ̂ŎAhX擾łȂ - ); - -#ifdef KEY_USER - printf( "Signature Key: USER\n" ); -#endif -#ifdef KEY_SYSTEM - printf( "Signature Key: SYSTEM\n" ); -#endif -#ifdef KEY_SECURE - printf( "Signature Key: SECURE\n" ); -#endif -#ifdef KEY_LAUNCHER - printf( "Signature Key: LAUNCHER\n" ); -#endif - - // _CWFXgɏ - result = ACSign_Encrypto( signDst, g_devPrivKey_DER, &signSrc, sizeof(SignatureData) ); - if( !result ) - { - printf( "\n*** Error: failed to ACSign_Encrypto. ***\n\n" ); - return FALSE; - } - - // ă_CWFXgƈv邩xt@C - result = ACSign_Decrypto( decryptBlock, g_devPubKey_DER, signDst, RSA_KEY_LENGTH ); - for( pos=0; pos < RSA_KEY_LENGTH; pos++ ) - { - if( decryptBlock[pos] == 0x0 ) // ubNf[^T[` - break; - } - if( !result || (memcmp( &signSrc, &(decryptBlock[pos+1]), sizeof(SignatureData) ) != 0) ) - { - printf( "\n*** Error: failed to verify the signature. ***\n\n" ); - return FALSE; - } - - // ROMwb_ɏ㏑ - memcpy( prh->signature, signDst, RSA_KEY_LENGTH ); - - return TRUE; -} // ECSrlResult RCSrl::signRomHeader(void) - -// O -BOOL DecryptSignRomHeader( ROM_Header *prh ) -{ - u8 original[ RSA_KEY_LENGTH ]; // Õf[^i[ - s32 pos = 0; // ubN̐擪AhX - u8 digest[ DIGEST_SIZE_SHA1 ]; // ROMwb_̃_CWFXg - - // - // (1) Jŕ(ubN)[Jϐ(original)Ɋi[ - // (2) ubN]ȕ菜Ĉ(pDst)ɃRs[ - - // I -#ifdef KEY_USER - printf( "Decryption Key: USER\n" ); -#endif -#ifdef KEY_SYSTEM - printf( "Decryption Key: SYSTEM\n" ); -#endif -#ifdef KEY_SECURE - printf( "Decryption Key: SECURE\n" ); -#endif -#ifdef KEY_LAUNCHER - printf( "Decryption Key: LAUNCHER\n" ); -#endif - - // ̉ = Jŕ - if( !ACSign_Decrypto( original, g_devPubKey_DER, prh->signature, RSA_KEY_LENGTH ) ) - { - printf( "\n*** Error: failed to decrypt the signature. ***\n\n" ); - return FALSE; - } - // Of[^𕜍ubNQbg - for( pos=0; pos < (RSA_KEY_LENGTH-2); pos++ ) // {ubN̐擪0x00̓ɂďdl - { - // ÍubN` = 0x00, BlockType, Padding, 0x00, f[^ - if( original[pos] == 0x00 ) // f[^̒O0x00T[` - { - break; - } - } - // xt@C - // ROMwb_̃_CWFXgZo(擪ؖ̈̒O܂łΏ) - ACSign_DigestUnit( digest, prh, (u32)&(prh->certificate) - (u32)prh ); - if( memcmp( &(original[pos+1]), digest, DIGEST_SIZE_SHA1 ) != 0 ) - { - printf( "\n*** Error: failed to verify the signature. ***\n\n" ); - return FALSE; - } - return TRUE; -} - - -/*---------------------------------------------------------------------------* - - ROM Speed Type̐ݒ - - *---------------------------------------------------------------------------*/ - -static ROM_LT romSpeedTypeLatencyTable[] = { - {CARD_1TROM_GAME_LATENCY, CARD_1TROM_SECURE_HW_LATENCY, CARD_1TROM_SECURE_SW_LATENCY}, - {CARD_MROM_GAME_LATENCY, CARD_MROM_SECURE_HW_LATENCY, CARD_MROM_SECURE_SW_LATENCY}, -}; - -static void SetRomSpeedByIndex(ROM_Header * header, tRomSpeedType idx) -{ - ROM_LT *l = &romSpeedTypeLatencyTable[idx]; - - header->s.game_cmd_param &= ~CARD_LATENCY_MASK; - header->s.game_cmd_param |= l->game_latency; - header->s.secure_cmd_param &= ~CARD_LATENCY_MASK; - header->s.secure_cmd_param |= l->secure_hw_latency; - header->s.secure_cmd_latency = l->secure_sw_latency; -} - - -// end of file diff --git a/build/tests/FakeRomHeader/ビルド方法.txt b/build/tests/FakeRomHeader/ビルド方法.txt deleted file mode 100644 index 378135a5..00000000 --- a/build/tests/FakeRomHeader/ビルド方法.txt +++ /dev/null @@ -1,22 +0,0 @@ - -rh@ -============= - -1. @\ - - ӂ‚ make ƁAiZp̋@\łɂȂ܂B - (oCi RomVersionChanger.*.exe ƂȂ܂B) - @\ɂ́Aȉ̃IvV‚ make ĂB - - make FOR_RED=TRUE - - -2. ̕ύX - - ӂ‚ make ƁǍ[UAvpɂȂ܂B - ςƂAȉ̃IvV‚ make ĂB - - make KEY_SYSTEM=TRUE VXeAvp̌I - make KEY_SECURE=TRUE ZLAAvp̌I - make KEY_LAUNCHER=TRUE `Avp̌I - diff --git a/build/tests/FatalErrorChecker/ARM9/Makefile b/build/tests/FatalErrorChecker/ARM9/Makefile deleted file mode 100644 index 12e304a0..00000000 --- a/build/tests/FatalErrorChecker/ARM9/Makefile +++ /dev/null @@ -1,55 +0,0 @@ -#/*---------------------------------------------------------------------------* -# Project: TwlIPL - tests - FatalErrorChecker -# File: makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -# *---------------------------------------------------------------------------*/ -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_NANDAPP = TRUE - -SUBDIRS = - -SRCS = main.c \ - keypad.c \ - kami_font.c \ - graphics.c \ - font_data.c - -LINCLUDES += $(MISC_DIR)/include - -ROM_SPEC = main.rsf - -TARGET_BIN = menu.srl - -LLIBRARIES += liberrorlog$(TWL_LIBSUFFIX).a - -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe -DEFAULT_MAKEROM_ARM7_BASE = $(TWL_COMPONENTSDIR)/armadillo/$(TWL_BUILDTYPE_ARM7)/armadillo -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - - - -#===== End of Makefile ===== diff --git a/build/tests/FatalErrorChecker/ARM9/main.rsf b/build/tests/FatalErrorChecker/ARM9/main.rsf deleted file mode 100644 index f0fc5c0f..00000000 --- a/build/tests/FatalErrorChecker/ARM9/main.rsf +++ /dev/null @@ -1,245 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - TitleName "FatalChecker" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode 01 - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile ../banner/banner.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - LockSCFG FALSE - - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media gamecard - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - #DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode 0G6A - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR - -} diff --git a/build/tests/FatalErrorChecker/ARM9/src/font_data.c b/build/tests/FatalErrorChecker/ARM9/src/font_data.c deleted file mode 100644 index aa1ba501..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/font_data.c +++ /dev/null @@ -1,734 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: font_data.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include - -/*---------------------- afXN[ ---------------------------*/ - -const u16 BgScDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -const u16 BgScDataSub[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -/*---------------------- pbgf[^ ---------------------------*/ -#define RGB555(r,g,b) (b<<10|g<<5|r) - -const u16 PlttDataObj[16][16] = { - {RGB555( 0, 0, 0), RGB555(31, 10, 0), RGB555(31, 0, 0), RGB555(5, 5, 20),}, // Black - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White -}; - -// ʃR\[pbg -const u16 PlttDataMain[16][16] = { - {RGB555( 0, 0, 0), RGB555(31, 10, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Orange - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555( 0, 0, 0), RGB555(0, 0, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Black -}; - -// ʃR\[pbg -const u16 PlttDataSub[16][16] = { - {RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(25, 25, 25), RGB555(31, 31, 31),}, // Black - {RGB555(31, 31, 31), RGB555(21, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555( 0, 21, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555( 0, 0, 21), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(21, 21, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 21, 21), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(21, 0, 21), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(20, 20, 20), RGB555(20, 20, 20), RGB555(20, 20, 20),}, // Gray - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - - // wiJ[͂16ԃpbg - // D ނ炳 sN ݂ Ž - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(20, 20, 20), RGB555(31, 15, 31), RGB555(31, 20, 20), RGB555(20, 29, 31), RGB555(20, 31, 20), RGB555(21, 21, 31), RGB555(31, 0, 0), RGB555(31, 31, 10), RGB555(25, 15, 15), RGB555(31, 31, 31), RGB555(31, 31, 31), } // White -}; - -/*---------------------- LN^f[^ -------------------------*/ - -const u32 sampleCharData[8 * 0x100] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11111111, 0x11111111, // 0001h use for import progress bar - 0x11111111, 0x11111111, 0x00000000, 0x00000000, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh 0 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh 1 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h 2 - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h 3 - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h 4 - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h 5 - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h 6 - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h 7 - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h 8 - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h 9 - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h 10 - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h 11 - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah 12 - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh 13 - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech 14 - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh 15 - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh 16 - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh 17 - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h 18 - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h 19 - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h 20 - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h 21 - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h 22 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h 23 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - - 0x33330000, - 0x33330000, - 0x33000000, - 0x33000000, // 00f6h - 0x33000000, - 0x33000000, - 0x33330000, - 0x33330000, - - - 0x00020000, // 00f7h - 0x00020000, - 0x00020000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00f8h - 0x00000000, - 0x00000000, - 0x00000000, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00f9h - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00fah - 0x11111111, - 0x11111111, - 0x11111111, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00fbh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fch - 0x00020000, - 0x00020000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fdh - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00000000, // 00feh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00020000, - 0x00220000, - 0x02122222, - 0x21111112, - 0x21111112, - 0x02122222, - 0x00220000, - 0x00020000, - - - -/* - 0x00022222, - 0x00002112, - 0x00021112, - 0x00211122, - 0x02111202, - 0x21112000, - 0x02120000, - 0x00200000, -*/ - -/* - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -*/ -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/FatalErrorChecker/ARM9/src/graphics.c b/build/tests/FatalErrorChecker/ARM9/src/graphics.c deleted file mode 100644 index 1de138e9..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/graphics.c +++ /dev/null @@ -1,160 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: praphics.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -//#include -#include -#include "kami_font.h" -#include "graphics.h" - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: InitGraphics - - Description: \̏ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void -InitGraphics(void) -{ - GX_DispOff(); - GXS_DispOff(); - - //---- VRAM NA - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - - //---- OAMƃpbgNA - MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE); - MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void *)HW_DB_OAM, 192, HW_DB_OAM_SIZE); - MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - //---- naioN̐ݒ - GX_SetBankForOBJ(GX_VRAM_OBJ_128_A); - GX_SetBankForSubOBJ(GX_VRAM_SUB_OBJ_128_D); - - //---- afoN̐ݒ - GX_SetBankForBG(GX_VRAM_BG_128_B); - GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C); - - //---- \[hݒ - GX_SetGraphicsMode (GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_3D); - GX_SetVisiblePlane (GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - - //---- 3D - G3X_Init(); - G3X_InitMtxStack(); - G2_SetBG0Priority(0); - G3X_AlphaTest(FALSE, 0); - G3X_AntiAlias(TRUE); - G3X_EdgeMarking(FALSE); - G3X_SetFog(FALSE, (GXFogBlend)0, (GXFogSlope)0, 0); - G3X_SetClearColor(0, 0, 0x7fff, 63, FALSE); - G3_ViewPort(0, 0, 255, 191); - G3_MtxMode(GX_MTXMODE_POSITION_VECTOR); - - //---- 32KoCgOBJ2D}bv[hŎgp - GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_2D); - - // XN[ItZbgyуLN^[ItZbg̐ݒ - GX_SetBGScrOffset(GX_BGSCROFFSET_0x00000); - GX_SetBGCharOffset(GX_BGCHAROFFSET_0x10000); - - G2_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x00000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG0Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x2000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2_BG1Mosaic(FALSE); - G2S_BG1Mosaic(FALSE); - - //---- f[^[h - GX_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBG1Char( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBGPltt ( PlttDataMain, 0, sizeof(PlttDataMain)); - GX_LoadBG1Scr ( BgScDataMain, 0, sizeof(BgScDataMain)); - GX_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GXS_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBG0Char( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBGPltt ( PlttDataSub, 0, sizeof(PlttDataSub)); - GXS_LoadBG0Scr ( BgScDataSub, 0, sizeof(BgScDataSub)); - GXS_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GX_DispOn(); - GXS_DispOn(); -} - -/*---------------------------------------------------------------------------* - Name: DrawLine - - Description: Op|SŐ` - - Arguments: sx - `悷̊Jn_̂W - sy - `悷̊Jn_̂W - ex - `悷̏I_̂W - ey - `悷̏I_̂W - color - `悷̐F - - Returns: None. - *---------------------------------------------------------------------------*/ -void -DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color) -{ - fx16 fsx = (fx16)(((sx - 128) * 0x1000) / 128); - fx16 fsy = (fx16)(((96 - sy) * 0x1000) / 96); - fx16 fex = (fx16)(((ex - 128) * 0x1000) / 128); - fx16 fey = (fx16)(((96 - ey) * 0x1000) / 96); - - G3_Begin(GX_BEGIN_TRIANGLES); - { - G3_Color( color ); - G3_Vtx(fsx, fsy, 0); - G3_Color( color ); - G3_Vtx(fex, fey, 0); - G3_Color( color ); - G3_Vtx(fsx, fsy, 1); - } - G3_End(); -} diff --git a/build/tests/FatalErrorChecker/ARM9/src/graphics.h b/build/tests/FatalErrorChecker/ARM9/src/graphics.h deleted file mode 100644 index ddd8c4f6..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/graphics.h +++ /dev/null @@ -1,46 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: graphics.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef GRAPHICS_H_ -#define GRAPHICS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void InitGraphics(void); -void DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* GRAPHICS_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/FatalErrorChecker/ARM9/src/kami_font.c b/build/tests/FatalErrorChecker/ARM9/src/kami_font.c deleted file mode 100644 index fb3818b6..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/kami_font.c +++ /dev/null @@ -1,407 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_font.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define SCREEN_DATA_COLOR_PLTT_SHIFT 12 -#define NUM_OF_PRINT_TARGET 2 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u8 sXPos; -static u8 sYPos; - -static u32 sBackColorCharData[24*8]; - -static u16 sFontScreenDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -static u16 sFontScreenDataSub[24*32] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -static u16 sBackColorScreenData[32 * 24] = { - 0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de, - 0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df, - 0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0, - 0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1, - 0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2, - 0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3, - 0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4, - 0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5, - 0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6, - 0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7, - 0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8, - 0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9, - 0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea, - 0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb, - 0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec, - 0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed, - 0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee, - 0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef, - 0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0, - 0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1, - 0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2, - 0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3, - 0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4, - 0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5, -}; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -static void kamiFontReturnConsole( void ); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontInit(void) -{ - // wipLN^f[^ - MI_CpuCopy32( &sampleCharData[8 * 0xde], sBackColorCharData, sizeof(sBackColorCharData) ); - - // wipXN[f[^Zbg - DC_FlushRange ( sBackColorScreenData, sizeof(sBackColorScreenData) ); - GXS_LoadBG1Scr ( sBackColorScreenData, 0, sizeof(sBackColorScreenData) ); -} - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontLoadScreenData(void) -{ - DC_FlushRange ( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); - GX_LoadBG0Scr ( sFontScreenDataMain, 0, sizeof(sFontScreenDataMain) ); - - DC_FlushRange ( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); - GXS_LoadBG0Scr ( sFontScreenDataSub, 0, sizeof(sFontScreenDataSub) ); - - // wiLN^f[^ - DC_FlushRange( sBackColorCharData, sizeof(sBackColorCharData) ); - GXS_LoadBG0Char( sBackColorCharData, 0xde*32, sizeof(sBackColorCharData) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClear - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClear(void) -{ - MI_CpuClear8( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClearMain - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClearMain(void) -{ - MI_CpuClear8( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataSub[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataMain[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontFillChar - - Description: zXN[ - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - value - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontFillChar(int lineNo, u8 color1, u8 color2) -{ - s32 i; - u32 line; - int charNo = 0xde + lineNo; - - if (color1 < 0x10) - { - line = (u32)(0x11111111 * color1); - - for (i = 0;i<4; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } - - if (color2 < 0x10) - { - line = (u32)(0x11111111 * color2); - - for (i = 4;i<8; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsole - - Description: zR\[ɕzuB256܂ŁB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsole(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - // I[lj - *(u16 *)(&temp[256]) = 0x0000; - - for(i=0; temp[i] != 0x00; i++) - { - if (temp[i] == 0x0A) - { - // sR[h - kamiFontReturnConsole(); - } - else - { - // ꕶ - sFontScreenDataMain[((sYPos * 32) + sXPos) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - - // XWE[ɓBꍇ͉s - if (++sXPos >= 32) - { - kamiFontReturnConsole(); - } - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsoleEx - - Description: zR\[ɕzuB256܂ŁB - OS_Printf‚łɎsB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsoleEx(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - kamiFontPrintfConsole(color, temp); - OS_TPrintf(temp); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontReturnConsole - - Description: zR\[ɂss - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -kamiFontReturnConsole( void ) -{ - sXPos = 0; - if (sYPos < 23) - { - // ̍s - sYPos++; - } - else - { - // ɍŏIsɓBĂꍇVtgs - MI_CpuCopy32( &sFontScreenDataMain[32], sFontScreenDataMain, sizeof(u16)*32*23 ); - MI_CpuClear32( &sFontScreenDataMain[32*23], sizeof(u16)*32); - } -} - diff --git a/build/tests/FatalErrorChecker/ARM9/src/kami_font.h b/build/tests/FatalErrorChecker/ARM9/src/kami_font.h deleted file mode 100644 index d9855fd0..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/kami_font.h +++ /dev/null @@ -1,95 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_FONT_H_ -#define KAMI_FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -extern u8 prog_state; -enum -{ STATE_NONE, STATE_SELECT, STATE_KS_PARENTINIT, STATE_KS_PARENT, STATE_KS_CHILDINIT, - STATE_KS_CHILDSCAN, STATE_KS_CHILD -}; -extern OSHeapHandle heapHandle; // Heapnh; - -extern const u16 BgScDataMain[32 * 24]; -extern const u16 BgScDataSub[32 * 24]; -extern const u32 sampleCharData[8 * 0x100]; -extern const u16 PlttDataObj[16][16]; -extern const u16 PlttDataMain[16][16]; -extern const u16 PlttDataSub[16][16]; - -void kamiFontInit(void); -void kamiFontClear(void); -void kamiFontClearMain(void); -void kamiFontPut(u16 x, u16 y, u16 color, u16 no); -void kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontFill(s16 x, s16 y, u8 color, s16 value, s32 length); -void kamiFontFillChar(int lineNo, u8 color1, u8 color2); -void kamiFontLoadScreenData(void); -void kamiFontPrintfConsole(u8 color, const char *text, ...); -void kamiFontPrintfConsoleEx(u8 color, const char *text, ...); - -// ʃR\[ppbg -#define CONSOLE_ORANGE 0 -#define CONSOLE_RED 1 -#define CONSOLE_GREEN 2 - -// ʃtHgppbg -#define FONT_COLOR_BLACK 0 -#define FONT_COLOR_RED 1 -#define FONT_COLOR_GREEN 2 -#define FONT_COLOR_BLUE 3 -#define FONT_COLOR_YELLOW 4 -#define FONT_COLOR_CYAN 5 -#define FONT_COLOR_PURPLE 6 - -// ʔwippbg -#define BG_COLOR_TRANS 0 -#define BG_COLOR_WHITE 1 -#define BG_COLOR_BLACK 2 -#define BG_COLOR_GRAY 3 -#define BG_COLOR_PURPLE 4 -#define BG_COLOR_PINK 5 -#define BG_COLOR_BLUE 6 -#define BG_COLOR_GREEN 7 -#define BG_COLOR_VIOLET 8 -#define BG_COLOR_RED 9 -#define BG_COLOR_YELLOW 10 -#define BG_COLOR_BROWN 11 - -#define BG_COLOR_NONE 0xff - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/FatalErrorChecker/ARM9/src/keypad.c b/build/tests/FatalErrorChecker/ARM9/src/keypad.c deleted file mode 100644 index 155c4bc2..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/keypad.c +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "keypad.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_TRIGGER_START 20 -#define KEY_REPEAT_TRIGGER_TERM 5 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u16 Cont; -static u16 Trg; -static u16 Release; -static u16 RepeatTrg; -static u8 key = 60; - -static int repeat_counter; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -void -kamiPadRead(void) -{ - u16 ReadData; - - ReadData = PAD_Read(); - Trg = (u16)(ReadData & (ReadData ^ Cont)); - Release = (u16)(Cont & (ReadData ^ Cont)); - Cont = ReadData; - - RepeatTrg = Trg; - if (++repeat_counter > (KEY_REPEAT_TRIGGER_START + KEY_REPEAT_TRIGGER_TERM)) - { - repeat_counter = KEY_REPEAT_TRIGGER_START; - } - if (repeat_counter == KEY_REPEAT_TRIGGER_START) - { - RepeatTrg = ReadData; - } - if (!ReadData) - { - repeat_counter = 0; - } -} - -BOOL -kamiPadIsTrigger(u16 key) -{ - return (Trg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsRepeatTrigger(u16 key) -{ - return (RepeatTrg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsPress(u16 key) -{ - return (Cont & key)? TRUE : FALSE; -} - diff --git a/build/tests/FatalErrorChecker/ARM9/src/keypad.h b/build/tests/FatalErrorChecker/ARM9/src/keypad.h deleted file mode 100644 index 2f5a1602..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/keypad.h +++ /dev/null @@ -1,48 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_KEY_PAD_H_ -#define KAMI_KEY_PAD_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void kamiPadRead(void); -BOOL kamiPadIsTrigger(u16 key); -BOOL kamiPadIsRepeatTrigger(u16 key); -BOOL kamiPadIsPress(u16 key); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_KEY_PAD_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/FatalErrorChecker/ARM9/src/main.c b/build/tests/FatalErrorChecker/ARM9/src/main.c deleted file mode 100644 index df65d888..00000000 --- a/build/tests/FatalErrorChecker/ARM9/src/main.c +++ /dev/null @@ -1,652 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - Tests - FatalErrorChecker - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "kami_font.h" -#include "graphics.h" -#include "keypad.h" - -#define BUFSIZE 256 - -#define FATAL_ERROR_MAX 51 -#define NUM_ENTRY_PER_PAGE 5 -#define NUM_LINE_PER_ENTRY 4 -#define SKIP_SPAN 5 -#define FOOTER_Y 22 - -#define ASK_LINE_OFFSET 9 -#define RESULT_LINE_OFFSET 13 - -#define SCREEN_WIDTH 32 - -#define DST_LOGFILE_PATH "sdmc:/sysmenu.log" -#define ERRORLOG_LOGFILE_PATH "nand:/sys/log/sysmenu.log" - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ -static char *s_strError[ FATAL_ERROR_MAX ]; -static BOOL nowEntryView; -static BOOL nowAskingCopy; -static BOOL nowAskingDelete; -static BOOL resetConsoleFlag; -static int drawIndex = 0; -static int numEntry; -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void VBlankIntr(void); -static void InitAllocation(void); -static void drawErrorLog( void ); -static BOOL deleteLogfile(); -static void control(); -static void removeLC( char *dst, const char *src ); -static void drawMessage( void ); -static void kamiFontPrintfWrap( s16 x, s16 y, u8 color, char *fmt, ... ); -static s16 kamiFontPrintfWrapSub( s16 x, s16 y, u8 color, char *str ); -static BOOL copyLogToSD( void ); -int convertLF( char *dst, char *src ); -static void drawMenu( void ); -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void -TwlMain() -{ - char tst[] = "\n\n\n\n\na"; - - OS_Init(); - OS_InitArena(); - PXI_Init(); - OS_InitLock(); - OS_InitArenaEx(); - OS_InitIrqTable(); - OS_SetIrqStackChecker(); - MI_Init(); - OSi_InitVramExclusive(); - OS_InitThread(); - OS_InitReset(); - GX_Init(); - - - // VuN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)OS_EnableIrqMask(OS_IE_FIFO_RECV); - (void)OS_EnableIrq(); - (void)GX_VBlankIntr(TRUE); - - // initialize file-system - FS_Init(FS_DMA_NOT_USE); - - // FS_Iniť̕ǂ͗l - InitAllocation(); - - // \֘A - InitGraphics(); - kamiFontInit(); - - /* always preload FS table for faster directory access. */ - { - u32 need_size = FS_GetTableSize(); - void *p_table = OS_Alloc(need_size); - SDK_ASSERT(p_table != NULL); - (void)FS_LoadTable(p_table, need_size); - } - - ERRORLOG_Init( OS_AllocFromMain, OS_FreeToMain ); - - numEntry = ERRORLOG_GetNum(); - nowEntryView = FALSE; - nowAskingCopy = FALSE; - nowAskingDelete = FALSE; - resetConsoleFlag = TRUE; - - while (1) - { - static i = 0 ; - kamiPadRead(); - - // VuN҂ - OS_WaitVBlankIntr(); - - // tHgXN[f[^[h - kamiFontLoadScreenData(); - - if( resetConsoleFlag ) - { - drawMenu(); - resetConsoleFlag = FALSE; - } - - // 쌟oƕ` - control(); - - if( nowEntryView ) - { - drawMessage(); - } - else - { - drawErrorLog(); - } - - } - -} - -static void drawMessage( void ) -{ - char titlebuf[5]; - const ErrorLogEntry *entry = ERRORLOG_Read( drawIndex ); - kamiFontClear(); - - if( entry->isBroken ) - { - kamiFontPrintf( 0, 0 , FONT_COLOR_BLACK, "%02d: Broken Entry", drawIndex); - - kamiFontPrintfWrap( 0, 2, FONT_COLOR_BLACK, "%s\n" ,entry->errorStr ); - - } - else if( entry->isLauncherError ) - { - STD_CopyLStringZeroFill( titlebuf, (char*)&entry->titleId, 5); - - kamiFontPrintf( 0, 0, FONT_COLOR_BLACK, "%02d: RED %02d/%02d/%02d %02d:%02d:%02d" , - drawIndex , entry->year, entry->month, entry->day, - entry->hour, entry->minute, entry->second ); - - kamiFontPrintf( 0, 1, FONT_COLOR_BLACK, "titleID: %s errorCode: %d", - titlebuf, entry->errorCode ); - - kamiFontPrintfWrap( 0, 3, FONT_COLOR_BLACK, s_strError[entry->errorCode] ); - - } - else{ - STD_CopyLStringZeroFill( titlebuf, (char*)&entry->titleId, 5); - - kamiFontPrintf( 0, 0 , FONT_COLOR_BLACK, "%02d: FFT %02d/%02d/%02d %02d:%02d:%02d" , - drawIndex , entry->year, entry->month, entry->day, - entry->hour, entry->minute, entry->second ); - - kamiFontPrintf( 0, 1, FONT_COLOR_BLACK, "titleID: %s", titlebuf ); - - kamiFontPrintfWrap( 0, 3, FONT_COLOR_BLACK, entry->errorStr ); - - } - -} - -static void drawErrorLog( void ) -{ - char titlebuf[5]; - s16 i; - - kamiFontClear(); - - for( i = 0; i < NUM_ENTRY_PER_PAGE && i+drawIndex < numEntry ; i++ ) - { - u8 color = (i == 0) ? (u8)FONT_COLOR_BLUE : (u8)FONT_COLOR_BLACK; - s16 posY = (s16)(i * NUM_LINE_PER_ENTRY); - const ErrorLogEntry *entry = ERRORLOG_Read( i + drawIndex ); - char drawBuf[256 + 1]; - - if( entry->isBroken ) - { -// kamiFontPrintf( 0, posY , color, "%02d: Broken Entry", i + drawIndex); - kamiFontPrintf( 0, posY , color, "%02d: Broken Entry", i + drawIndex); - - // s菜Ă\ - removeLC( drawBuf, entry->errorStr ); - kamiFontPrintf( 0, (s16)( posY + 1), color, drawBuf ); - - } - else if( entry->isLauncherError ) - { - STD_CopyLStringZeroFill( titlebuf, (char*)&entry->titleId, 5); - - kamiFontPrintf( 0, posY , color, "%02d: RED %02d/%02d/%02d %02d:%02d:%02d" , - i + drawIndex , entry->year, entry->month, entry->day, - entry->hour, entry->minute, entry->second ); - - kamiFontPrintf( 0, (s16)( posY + 1), color, "titleID: %s errorCode: %d", - titlebuf, entry->errorCode ); - - kamiFontPrintf( 0, (s16)( posY + 2), color, s_strError[entry->errorCode] ); - } - else{ - STD_CopyLStringZeroFill( titlebuf, (char*)&entry->titleId, 5); - - kamiFontPrintf( 0, posY , color, "%02d: FFT %02d/%02d/%02d %02d:%02d:%02d" , - i + drawIndex , entry->year, entry->month, entry->day, - entry->hour, entry->minute, entry->second ); - - kamiFontPrintf( 0, (s16)( posY + 1), color, "titleID: %s", titlebuf ); - - // s菜Ă\ - removeLC( drawBuf, entry->errorStr ); - kamiFontPrintf( 0, (s16)( posY + 2), color, drawBuf ); - - } - } - - kamiFontPrintf( 0, FOOTER_Y , FONT_COLOR_BLACK, "numEntry : %d", numEntry ); -} - -static void control() -{ - if( nowAskingCopy ) - { - // {ɂ́HĕĂŒ - if( kamiPadIsTrigger( PAD_BUTTON_A )) - { - BOOL result; - kamiFontPrintfMain( 0, ASK_LINE_OFFSET+2, CONSOLE_ORANGE, "now copying..."); - result = copyLogToSD(); - nowAskingCopy = FALSE; - } - - if( kamiPadIsTrigger( PAD_BUTTON_B )) - { - drawMenu(); - nowAskingCopy = FALSE; - } - - return; - } - - if( nowAskingDelete ) - { - // {ɂ́HĕĂŒ - if( kamiPadIsTrigger( PAD_BUTTON_A )) - { - BOOL result; - kamiFontPrintfMain( 0, ASK_LINE_OFFSET+2, CONSOLE_ORANGE, "now deleting..."); - result = deleteLogfile(); - nowAskingDelete = FALSE; - } - - if( kamiPadIsTrigger( PAD_BUTTON_B )) - { - drawMenu(); - nowAskingDelete = FALSE; - } - - return; - } - - if( kamiPadIsTrigger( PAD_KEY_UP ) ) - { - drawIndex--; - } - else if( kamiPadIsTrigger( PAD_KEY_DOWN ) ) - { - drawIndex++; - } - - if( kamiPadIsTrigger( PAD_KEY_LEFT ) ) - { - drawIndex -= SKIP_SPAN; - } - else if( kamiPadIsTrigger( PAD_KEY_RIGHT ) ) - { - drawIndex += SKIP_SPAN; - } - - if( kamiPadIsTrigger( PAD_BUTTON_A ) ) - { - if( 0 < numEntry ) - { - nowEntryView = !nowEntryView ; - } - } - else if( kamiPadIsTrigger( PAD_BUTTON_X ) ) - { - drawMenu(); - kamiFontPrintfMain( 0, ASK_LINE_OFFSET, CONSOLE_ORANGE, "Copy Logfile to SD. OK ?"); - kamiFontPrintfMain( 0, ASK_LINE_OFFSET + 1, CONSOLE_ORANGE, "A: Decide B: Cancel"); - - nowAskingCopy = TRUE; - } - else if ( kamiPadIsTrigger( PAD_BUTTON_Y ) ) - { - drawMenu(); - kamiFontPrintfMain( 0, ASK_LINE_OFFSET, CONSOLE_ORANGE, "Delete Logfile From NAND. OK ?"); - kamiFontPrintfMain( 0, ASK_LINE_OFFSET + 1, CONSOLE_ORANGE, "A: Decide B: Cancel"); - - nowAskingDelete = TRUE; - } - - // ̌ʁA`CfNX͂ݏoC - drawIndex = numEntry-1 < drawIndex ? numEntry-1 : drawIndex ; - drawIndex = drawIndex < 0 ? 0: drawIndex; -} - -// srcs菜dstɈn -static void removeLC( char *dst, const char *src ) -{ - char *idx; - STD_StrCpy( dst, src ); - - while( ( idx = STD_StrChr( dst, '\n' )) != NULL ) - { - *idx = ' '; - } -} - - -static void kamiFontPrintfWrap( s16 x, s16 y, u8 color, char *fmt, ... ) -{ - va_list vlist; - char temp[BUFSIZE + 1]; - char *head, *tail; - - va_start(vlist, fmt); - (void)vsnprintf(temp, BUFSIZE+1, fmt, vlist); - va_end(vlist); - - head = temp; - - // I[lj - temp[BUFSIZE] = '\0'; - - // OctokIȎĉsʁXɏo͂ - tail = STD_StrChr( temp, '\n' ); - while( tail != NULL ) - { - *tail = '\0'; - y += kamiFontPrintfWrapSub( x, y, color, head ); - head = tail+1; - tail = STD_StrChr( head, '\n' ); - } - - kamiFontPrintfWrapSub( x, y, color, head ); -} - -// \”\Ŏ܂Ԃ -// Ԃl͕`ɗps -static s16 kamiFontPrintfWrapSub( s16 x, s16 y, u8 color, char *str ) -{ - char *head = str; - char buf[SCREEN_WIDTH+1]; - s16 linecount = 0; - int length; - - while( SCREEN_WIDTH <= ( length = STD_StrLen( head )) ) - { - STD_StrLCpy( buf, head, SCREEN_WIDTH+1 ); - kamiFontPrintf( x, (s16)(y + linecount++), color, buf ); - head += SCREEN_WIDTH; - } - - kamiFontPrintf( x, (s16)(y + linecount++), color, head ); - - return linecount; - -} - - -static BOOL deleteLogfile( void ) -{ - - if( !FS_DeleteFile( ERRORLOG_LOGFILE_PATH ) ) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Delete Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_DeleteFile" ); - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+2, CONSOLE_ORANGE, - "errorCode : %d", FS_GetArchiveResultCode( ERRORLOG_LOGFILE_PATH ) ); - - return FALSE; - } - - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Delete Succeeded!") ; - return TRUE; -} - -static BOOL copyLogToSD( void ) -{ - FSFile src, dst; - // ňœǂݍ񂾃TCY̔{̕ɂȂ”\ - char buf[BUFSIZE + 1]; - char winbuf[BUFSIZE*2 +1]; - s32 readSize; - s32 writeSize = 0; - - buf[256] = '\0'; - FS_InitFile( &dst ); - - // ܂t@C폜 - FS_DeleteFile( DST_LOGFILE_PATH ); - - if( ! FS_CreateFile( DST_LOGFILE_PATH, FS_PERMIT_R | FS_PERMIT_W ) ) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_CreateFile" ); - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+2, CONSOLE_ORANGE, "errorCode : %d", FS_GetArchiveResultCode( DST_LOGFILE_PATH ) ); - return FALSE; - } - - // t@C쐬ɐ - if( !FS_OpenFileEx( &dst , DST_LOGFILE_PATH, FS_FILEMODE_RW )) - { - // 쐬t@CopenłȂꍇ - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_OpenFile / FS_SetFileLength" ); - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+2, CONSOLE_ORANGE, "errorCode : %d", FS_GetArchiveResultCode( DST_LOGFILE_PATH ) ); - return FALSE; - } - - // TCYύXIAÔ߃t@CTCYύXs‚RWL[hŊJȂĂ - // t@CTCY•ϒɕύX - FS_CloseFile( &dst ); - - if( !FS_OpenFileEx( &dst, DST_LOGFILE_PATH, FS_FILEMODE_RW ) ) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_OpenFile dst" ); - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+2, CONSOLE_ORANGE, "errorCode : %d", FS_GetArchiveResultCode( DST_LOGFILE_PATH ) ); - return FALSE; - } - - if( !FS_OpenFileEx( &src, ERRORLOG_LOGFILE_PATH, FS_FILEMODE_R ) ) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_OpenFile src" ); - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+2, CONSOLE_ORANGE, "errorCode : %d", FS_GetArchiveResultCode( DST_LOGFILE_PATH ) ); - } - - if( !FS_SeekFileToBegin( &src )) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_SeekFileToBegin" ); - return FALSE; - } - - while( ( readSize = FS_ReadFile( &src, buf, 256 )) > 0 ) - { - int size; - size = convertLF( winbuf, buf ); - - if( FS_WriteFile( &dst, winbuf, size ) < 0 ) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_WriteFile" ); - return FALSE; - } - - } - - - if( !FS_CloseFile( &src )) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_CloseFile(src)" ); - } - - - if( !FS_CloseFile( &dst )) - { - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Failed!") ; - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET+1, CONSOLE_ORANGE, "func: FS_CloseFile(dst)" ); - } - kamiFontPrintfMain( 0, RESULT_LINE_OFFSET, CONSOLE_ORANGE, "Copy Succeeded!") ; - - return TRUE; - -} - -static void drawMenu( void ) -{ - int line = 0; - - kamiFontClearMain(); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "How to"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "+-----------------------------+"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "l U/D Key : Scroll Line l"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "l L/R Key : Scroll Page l"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "l A Button : Switch View Mode l"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "l X Button : Copy to SDCard l"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "l Y Button : Delete Logfile l"); - kamiFontPrintfMain( 0, (s16)(line++), CONSOLE_ORANGE, "+-----------------------------+"); -} - -// LFLFCRɒuď߂ -// dst͍ňsrc̓{̗̈悪Kv -int convertLF( char *dst, char *src ) -{ - char *head = src, *tail; - int writesize = 0; - - tail = STD_StrChr( src, '\n' ); - - while( tail != NULL ) - { - *tail = '\0'; - writesize += STD_StrLCpy( &dst[writesize], head,BUFSIZE ); - dst[writesize] = 0x0d; - dst[writesize+1] = 0x0a; - writesize += 2; - - head = tail + 1; - tail = STD_StrChr( head, '\n' ); - } - - writesize += STD_StrLCpy( &dst[writesize], head, BUFSIZE ); - - return writesize; -} - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - - Description: VBlank荞ݏ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // checking VBlank interrupt -} - -/*---------------------------------------------------------------------------* - Name: InitAllocation - - Description: q[v̏. - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitAllocation(void) -{ - void *tmp; - OSHeapHandle hh; - - /* A[ȉ */ - tmp = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tmp); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - OS_Panic("ARM9: Fail to create heap...\n"); - hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - - - -static char *s_strError[ FATAL_ERROR_MAX ] = { - "UNDEFINED", - "NAND", - "HWINFO_NORMAL", - "HWINFO_SECURE", - "TWLSETTINGS", - "SHARED_FONT", - "WLANFIRM_AUTH", - "WLANFIRM_LOAD", - "TITLE_LOAD_FAILED", - "TITLE_POINTER_ERROR", - "AUTHENTICATE_FAILED", - "ENTRY_ADDRESS_ERROR", - "TITLE_BOOTTYPE_ERROR", - "SIGN_DECRYPTION_FAILED", - "SIGN_COMPARE_FAILED", - "HEADER_HASH_CALC_FAILED", - "TITLEID_COMPARE_FAILED", - "VALID_SIGN_FLAG_OFF", - "CHECK_TITLE_LAUNCH_RIGHTS_FAILED", - "MODULE_HASH_CHECK_FAILED", - "MODULE_HASH_CALC_FAILED", - "MEDIA_CHECK_FAILED", - "DL_MAGICCODE_CHECK_FAILED", - "DL_SIGN_DECRYPTION_FAILED", - "DL_HASH_CALC_FAILED", - "DL_SIGN_COMPARE_FAILED", - "WHITELIST_INITDB_FAILED", - "WHITELIST_NOTFOUND", - "DHT_PHASE1_FAILED", - "DHT_PHASE2_FAILED", - "LANDING_TMP_JUMP_FLAG_OFF", - "TWL_BOOTTYPE_UNKNOWN", - "NTR_BOOTTYPE_UNKNOWN", - "PLATFORM_UNKNOWN", - "LOAD_UNFINISHED", - "LOAD_OPENFILE_FAILED", - "LOAD_MEMALLOC_FAILED", - "LOAD_SEEKFILE_FAILED", - "LOAD_READHEADER_FAILED", - "LOAD_LOGOCRC_ERROR = 39", - "LOAD_READDLSIGN_FAILED", - "LOAD_RELOCATEINFO_FAILED", - "LOAD_READMODULE_FAILED", - "NINTENDO_LOGO_CHECK_FAILED", - "SYSMENU_VERSION", - "DHT_PHASE1_CALC_FAILED", - "LOAD_UNKNOWN_BOOTTYPE", - "LOAD_AUTH_HEADER_FAILED", - "LOAD_NEVER_STARTED", - "EJECT_CARD_AFTER_LOAD_START", - "TITLEID_COMPARE_FAILED_NTR" -}; diff --git a/build/tests/FatalErrorChecker/Makefile b/build/tests/FatalErrorChecker/Makefile deleted file mode 100644 index 35985393..00000000 --- a/build/tests/FatalErrorChecker/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - #---------------------------------------------------------------------------- - -SUBDIRS = banner ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/FatalErrorChecker/banner/Makefile b/build/tests/FatalErrorChecker/banner/Makefile deleted file mode 100644 index e373c033..00000000 --- a/build/tests/FatalErrorChecker/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/FatalErrorChecker/banner/banner_v3.bsf b/build/tests/FatalErrorChecker/banner/banner_v3.bsf deleted file mode 100644 index 3690eee110a693f8c032463a8489f820239838bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 900 zcmc(eK~KU!5QX1W6aT{|oW&Ru4jdsZN(?a+xGxn$W2vMRiGN=GW|tqpUNoCbc4pp8 z-^| AX#fBK diff --git a/build/tests/FatalErrorChecker/banner/icon/gameIcon.bmp b/build/tests/FatalErrorChecker/banner/icon/gameIcon.bmp deleted file mode 100644 index 1a32e5af89e7bc8f752f7c3abeb21f56bb6f547e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmbu5%MAiC3`7H>07~FU9o%VW&nYbhL~=ux%o{r^u@|HjUVk#{PbPl7w`)t;@K5Zq z?9y(Wj&eW1-Wu9^uYl)>^)|*J5veUgCyY -#include -#include "misc.h" -#include "fatalErrorMaker.h" - -#define NORMAL_INFO_PATH "nand:/sys/HWINFO_N.dat" -#define SECURE_INFO_PATH "nand:/sys/HWINFO_S.dat" -#define SHARED_FONT_PATH "nand:/sys/TWLFontTable.dat" -#define WIRELESS_TITLEID 0x0003000F484E4341 - -#define NOR_BUFSIZE 128 -#define NOR_SETTING_ADDRESS_OFFSET 0x20 -#define NOR_NANDFLAG_NEGATIVE_OFFSET ( 0x1fe00 - 0x1f380 ) -#define NOR_NANDFLAG_MASK 0x10 - -#define SELECT_MESSAGE "select data for breaking." -#define SUCCESS_MESSAGE "breaking data succeeded." -#define FAIL_MESSAGE "breaking data failed." -#define ALREADY_MESSAGE "this data is broken already." - -#define MENU_LINES 5 -#define INFORMATION_LEFT 20 -#define INFORMATION_UP 150 -#define SELECTION_LEFT 40 -#define RESULT_LEFT 190 -#define SELECTION_UP 30 -#define ALLOW_LEFT 25 -#define LINE_OFFSET 20 -#define HEADER_LEFT 5 -#define HEADER_UP 0 - -typedef enum FatalErrorTarget { - BREAK_HW_NORMAL = 0, - BREAK_HW_SECURE = 1, - BREAK_FONT = 2, - BREAK_WIRELESS = 3, - BREAK_NAND = 4 -} FatalErrorTarget; - - -typedef enum ControlResult { - CONTROL_RESULT_INITIAL = 0, - CONTROL_RESULT_SUCCESS = 1, - CONTROL_RESULT_FAILED = 2, - CONTROL_RESULT_ALREADY = 3, - CONTROL_RESULT_MOVE = 4, - CONTROL_RESULT_NONE = -1 -} ControlResult; - -ControlResult control( int *line, u8 *flag ); -void draw( int select, int result, int flag ); -BOOL breakNAND( void ); -BOOL breakData( FatalErrorTarget tgt ); -static void DumpBinary(u32 offset, void* data, u32 size); -void setParity( u8 *data ); - -static char* s_strInfo[4]; -static char* s_strMenu[ MENU_LINES ]; -static char* s_strFilePath[ MENU_LINES ]; - -void fatalMakerMain( void ) -{ - static int selectLine = 0; - static u8 brokenFlag = 0; // 0: NORMAL, 1: SECURE, 2: FONT, 3: WL, 4: NAND - ControlResult result ; - - result = control( &selectLine, &brokenFlag ); // ͂ĂŏԂXV - - // ʂ̕` - draw( selectLine, result , brokenFlag ); -} - -void draw( int select, int result, int flag ) -{ - static int lastBreakData; - static int lastStatus = CONTROL_RESULT_INITIAL; - int i; - - // 炩̌蓮삪ꍇlastBreakDataXV - if( result != CONTROL_RESULT_NONE && result != CONTROL_RESULT_MOVE ) - { - lastBreakData = select; - lastStatus = result; - } - - // 삪Ƃ̓LpXNA - if( result != CONTROL_RESULT_NONE ) - { - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - } - - // ڂ̗ - for( i = 0; i < MENU_LINES; i++ ) - { - if( i == select ) - { - PrintfSJIS( SELECTION_LEFT, SELECTION_UP + (i * LINE_OFFSET), TXT_COLOR_GREEN, s_strMenu[i] ); - } - else - { - PrintfSJIS( SELECTION_LEFT, SELECTION_UP + (i * LINE_OFFSET), TXT_COLOR_BLACK, s_strMenu[i] ); - } - - // j󂵂ǂ̕\ - if( flag & (1 << i) ) - { - PrintfSJIS( RESULT_LEFT, SELECTION_UP + (i * LINE_OFFSET), TXT_COLOR_RED, "BROKEN" ); - } - } - - PrintfSJIS( HEADER_LEFT, HEADER_UP, TXT_COLOR_RED, "Fatal Error Maker" ); - PrintfSJIS( INFORMATION_LEFT, INFORMATION_UP, TXT_COLOR_BLACK, s_strInfo[ lastStatus ] ); - PrintfSJIS( ALLOW_LEFT, SELECTION_UP + (select * LINE_OFFSET), TXT_COLOR_BLACK, "" ); - -} - -ControlResult control( int *line, u8 *flag ) -{ - BOOL controlFlag = FALSE; // 炩̑삪ǂ - - if( pad.trg & PAD_KEY_UP ) - { - controlFlag = TRUE; - - // fNgă}CiXɂȂ烋[v - if( --*line < 0 ) - { - *line = MENU_LINES-1; - } - } - else if( pad.trg & PAD_KEY_DOWN ) - { - controlFlag = TRUE; - - // CNgmax𒴂烋[v - if( MENU_LINES <= ++*line ) - { - *line = 0; - } - } - - if( pad.trg & PAD_BUTTON_A ) - { - controlFlag = TRUE; - - // Iڂj󂷂 - if( *flag & (1 << *line) ) - { - // tOĂɔjς݂Ȃ̂ʼnȂ - return CONTROL_RESULT_ALREADY; - } - - // f[^ۂɔj󂷂 - if( ! breakData( (FatalErrorTarget)*line ) ) - { - // jɎs - return CONTROL_RESULT_FAILED; - } - - // j󐬌 - *flag |= 1 << *line ; - return CONTROL_RESULT_SUCCESS; - } - - // ɉj󂵂Ȃ - return controlFlag ? CONTROL_RESULT_MOVE : CONTROL_RESULT_NONE; -} - -BOOL breakData( FatalErrorTarget tgt ) -{ - switch( tgt ) - { - case BREAK_FONT: - case BREAK_HW_NORMAL: - case BREAK_HW_SECURE: - case BREAK_WIRELESS: - // SharedFont, NormalInfo, SecureInfoɂ‚Ă͊YpX߂ō폜Ă܂ - if( ! FS_DeleteFile( s_strFilePath[tgt] ) ) - { - OS_TPrintf( "FS_DeleteFile Error. file: %s err: %d\n" , - s_strFilePath[tgt], FS_GetArchiveResultCode( s_strFilePath[tgt] ) ); - - return FALSE; - } - - OS_TPrintf( "delete file succeeded. : %s\n", s_strFilePath[tgt] ); - return TRUE; - - case BREAK_NAND: - return breakNAND() ; - } - - // illegal argument - return FALSE; -} - -BOOL breakNAND( void ) -{ - static u8 buf[NOR_BUFSIZE] ; - u32 settingAddress; - NVRAMResult result; - - - // ܂IPLwb_{̐ݒ̂ItZbg擾 - - // LbVj - DC_InvalidateRange( buf, NOR_BUFSIZE); - result = NVRAMi_Read( NOR_SETTING_ADDRESS_OFFSET , NOR_BUFSIZE, buf ); - - if( result != NVRAM_RESULT_SUCCESS ) - { - // readɎs - OS_TPrintf( "nvram_read() failed. errorcode: %d\n", result ); - return FALSE; - } - - OS_TPrintf("reading address... %x %x \n", buf[0], buf[1] ); - - // i[Ăl8{ݒAhX̊JnAhX - settingAddress = ( (u32)(buf[1]) << 8 | (u32)buf[0]) * 8 ; - OS_TPrintf("settingAddress : %x\n", settingAddress ); - - DC_InvalidateRange( buf, NOR_BUFSIZE); - result = NVRAMi_Read( settingAddress - NOR_NANDFLAG_NEGATIVE_OFFSET , NOR_BUFSIZE, buf ); - - if( result != NVRAM_RESULT_SUCCESS ) - { - // readɎs - OS_TPrintf( "nvram_read() failed. errorcode: %d\n", result ); - return FALSE; - } - - DumpBinary( settingAddress - NOR_NANDFLAG_NEGATIVE_OFFSET , buf, NOR_BUFSIZE ); - - OS_TPrintf(" now flag : %x\n", buf[NOR_BUFSIZE-1] ); - buf[ NOR_BUFSIZE - 1 ] |= NOR_NANDFLAG_MASK; - setParity( &buf[NOR_BUFSIZE-1] ); - OS_TPrintf(" now flag : %x\n", buf[NOR_BUFSIZE-1] ); - - // LbV߂āAꂩnvramɏ - DC_StoreRange(buf, sizeof(buf)); - result = NVRAMi_Write( settingAddress - NOR_NANDFLAG_NEGATIVE_OFFSET , NOR_BUFSIZE, buf ); - - // ǂݒ - DC_InvalidateRange( buf, NOR_BUFSIZE); - result = NVRAMi_Verify( settingAddress - NOR_NANDFLAG_NEGATIVE_OFFSET , NOR_BUFSIZE, buf ); - - if( result != NVRAM_RESULT_SUCCESS ) - { - // writeɎs - OS_TPrintf( "nvram_verify() failed. errorcode: %d\n", result ); - return FALSE; - } - - // ݐ - return TRUE; -} - -void fatalMakerInit( void ) -{ - static char filePath[NAM_PATH_LEN+1]; - - GX_DispOff(); - GXS_DispOff(); - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); - GX_DispOn(); - GXS_DispOn(); - - // t@[̃pX擾 - NAM_GetTitleBootContentPath( filePath , WIRELESS_TITLEID); // - s_strFilePath[ BREAK_WIRELESS ] = filePath; - OS_TPrintf( "wireless path : %s\n", filePath ); -} - -static char* s_strInfo[] = { - SELECT_MESSAGE, - SUCCESS_MESSAGE, - FAIL_MESSAGE, - ALREADY_MESSAGE -}; - -static char* s_strMenu[] = { - "HW Normal Info", - "HW Secure Info", - "Shared Font", - "Wireless Firmware", - "NAND" -}; - -static char* s_strFilePath[] = { - NORMAL_INFO_PATH, - SECURE_INFO_PATH, - SHARED_FONT_PATH, - NULL, // t@[̃pX͂ƂNAMoRœ - NULL -}; - - -/*---------------------------------------------------------------------------* - Name: DumpBinary - Description: oCif[^ 16 i\LŃ_vo͂B - Arguments: offset - 擪AhXwB - data - _v\f[^ւ̃|C^B - size - _v\f[^ʂoCgPʂŎwB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -DumpBinary(u32 offset, void* data, u32 size) -{ -#pragma unused(data) - s32 i; - - if (size > 0) - { - if ((offset % 16) != 0) - { - OS_TPrintf("%08x:", (u32)(offset & ~0xf)); - for (i = 0; i < (offset % 16); i ++) - { - OS_TPrintf(" "); - if ((i % 16) == 7) - { - OS_TPrintf(" -"); - } - } - } - for (i = 0; i < size; i ++) - { - if (((offset + i) % 16) == 0) - { - OS_TPrintf("%08x:", offset + i); - } - OS_TPrintf(" %02x", ((u8*)data)[i]); - if (((offset + i) % 16) == 7) - { - OS_TPrintf(" -"); - } - else if (((offset + i) % 16) == 15) - { - OS_TPrintf("\n"); - } - } - if (((offset + i - 1) % 16) != 15) - { - OS_TPrintf("\n"); - } - } -} - -void setParity( u8 *data ) -{ - u8 i, parity; - - parity = 1; /* ʏƋti1‚0ɂȂj*/ - for( i=0; i<7; i++) { /* 0-7iŏʃrbgparityj */ - parity += ((*data >> i) & 0x01); - } - /* peBrbg㏑ */ - *data &= (u8)(~(0x80)); - *data |= ((parity << 7) & 0x80); -} \ No newline at end of file diff --git a/build/tests/FatalErrorMaker/ARM9/src/fatalErrorMaker.h b/build/tests/FatalErrorMaker/ARM9/src/fatalErrorMaker.h deleted file mode 100644 index 5ac04b27..00000000 --- a/build/tests/FatalErrorMaker/ARM9/src/fatalErrorMaker.h +++ /dev/null @@ -1,34 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - FatalErrorMaker - File: fatalErrorMaker.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __FATAL_ERROR_MAKE__ -#define __FATAL_ERROR_MAKE__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -void fatalMakerMain( void ); -void fatalMakerInit( void ); - -#ifdef __cplusplus -} -#endif - -#endif \ No newline at end of file diff --git a/build/tests/FatalErrorMaker/ARM9/src/main.c b/build/tests/FatalErrorMaker/ARM9/src/main.c deleted file mode 100644 index c3b8f043..00000000 --- a/build/tests/FatalErrorMaker/ARM9/src/main.c +++ /dev/null @@ -1,101 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - DisplaySystemInformation - File: main.c - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include - - -#include "misc.h" -#include "fatalErrorMaker.h" - -///////////////////////////// - -void VBlankHandler( void ); - -///////////////////////////// - - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ - - - -void TwlMain( void ) -{ - - OS_Init(); - OS_InitTick(); - OS_TPrintf("Initialize begin\n"); - - //---- interrupt setting - OS_EnableIrq(); - OS_EnableInterrupts(); - - GX_Init(); - - OS_SetIrqFunction( OS_IE_V_BLANK, VBlankHandler ); - OS_EnableIrqMask( OS_IE_V_BLANK ); - GX_VBlankIntr( TRUE ); - - OS_TPrintf("RTC Initilize...\n"); - RTC_Init(); - - OS_TPrintf("Allocator Initialize...\n"); - InitAllocator(); - - - InitBG(); - OS_TPrintf("Initialize Finished\n"); - - NVRAMi_Init(); - FS_Init( FS_DMA_NOT_USE ); - CRYPTO_SetAllocator( Alloc, Free ); - NAM_Init( Alloc, Free ); - - - fatalMakerInit(); - OS_TPrintf("begin mainloop\n"); - - - // C[v - while( 1 ) - { - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - - fatalMakerMain(); // r[AXV - } - - OS_Terminate(); - -} - - -void VBlankHandler(void) -{ - OS_SetIrqCheckFlag( OS_IE_V_BLANK ); // VuN`FbÑZbg -} diff --git a/build/tests/FatalErrorMaker/Makefile b/build/tests/FatalErrorMaker/Makefile deleted file mode 100644 index 66754bca..00000000 --- a/build/tests/FatalErrorMaker/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/FatalErrorMaker/about.txt b/build/tests/FatalErrorMaker/about.txt deleted file mode 100644 index c58fb52b..00000000 --- a/build/tests/FatalErrorMaker/about.txt +++ /dev/null @@ -1,22 +0,0 @@ -FatalErrorMaker - -NANDAt@[ALtHgAm[}HWAZLAHW -j󂵁AӐ}IFatal ErrorNeXgłB -Nƃj[\̂ŁAj󂵂ڂɃJ[\킹A{^ĂB -LtHgȊO͎NɊmFatal ErrorNƍl̂ŁA -NAND Initializerpł邱ƂmFŎsق悢Ǝv܂B - -@ƂẮANANDȊO̊ef[^͂ꂼ̃t@CFS_DeleteFile()ō폜邱ƂŁA -NANDɊւĂNORtbVɂNAND FATALG[tO(IPL/docs/tbV}bv_NOR.xlsQ) -Ă邱ƂŊYڂ̔jĂ܂B - - -j󂵂Ăt@C͋̓IɈȉ̒ʂłB - -LtHgFnand:/sys/TWLFontTable.dat -m[}Fnand:/sys/HWINFO_N.dat -ZLAFnand:/sys/HWINFO_S.dat - -܂At@[ɊւĂ̓RecƂtitletH_ȉɔzuĂ̂ŁA -NAMCu𗘗păpX擾Ă폜ɂĂ܂B - diff --git a/build/tests/FatalErrorMaker/banner/Makefile b/build/tests/FatalErrorMaker/banner/Makefile deleted file mode 100644 index 960abdc6..00000000 --- a/build/tests/FatalErrorMaker/banner/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = \ - Makefile.012A Makefile.0G4A - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/FatalErrorMaker/banner/Makefile.012A b/build/tests/FatalErrorMaker/banner/Makefile.012A deleted file mode 100644 index cc294ddc..00000000 --- a/build/tests/FatalErrorMaker/banner/Makefile.012A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 012A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/FatalErrorMaker/banner/Makefile.0G4A b/build/tests/FatalErrorMaker/banner/Makefile.0G4A deleted file mode 100644 index 53a0164b..00000000 --- a/build/tests/FatalErrorMaker/banner/Makefile.0G4A +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -GAMECODE = 0G4A -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/$(GAMECODE).bmp -BANNER_SPEC = banner$(GAMECODE)_v3.bsf - -TARGETS = $(GAMECODE).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) - $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) diff --git a/build/tests/FatalErrorMaker/banner/banner.bnr b/build/tests/FatalErrorMaker/banner/banner.bnr deleted file mode 100644 index 7faf2304ca1487fca26bc606bb91cd27e800c539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9152 zcmeI2Pf7zZ6vn?Y7w`aq9>QKg&Fn>z0}NFts0h`CV4*wj;mx}5!iAs{&eXsStnI&m#_J>`#P+FMN?|G?2M>K-5F5VwLs%; z=n}JrM4wg{h=?A$HkneZ9n7r*8znlGgJWQfRe{B(7%x`K`|0Fi?VjC>dvot@<4!Qc z1*W*fDdy~5;RY4Xsa4b~T+?>PHpgx2{u;Vb>(~9){@3qc&p$o?_woHV^!K;sF9ISU z0wN#+BG8{eYKmYV2A|%`hUO>*VJdu JBY@xklTX&bd>sG) diff --git a/build/tests/FatalErrorMaker/banner/banner012A_v3.bsf b/build/tests/FatalErrorMaker/banner/banner012A_v3.bsf deleted file mode 100644 index eaf83c8d4dd4ad3339cb1b6754509c403df4a4f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 824 zcmc(cy$ZrG6ot=fz;_6Ac5rcUR9b&f5v#M*s#w%2ZN;}&zt+A$Gbkb9o|}7;FE{U( zr-4ERvg%aBq9dh@gEF$A?nE(BphOp9Bd@OgI)1a3w_2@rf+8n6)-+aEJ;)T~cF#@NYaB=Z5E8gzF6 diff --git a/build/tests/FatalErrorMaker/banner/banner0G4A_v3.bsf b/build/tests/FatalErrorMaker/banner/banner0G4A_v3.bsf deleted file mode 100644 index 248fcb42c4a03579b9f31a895c49d364fa4eddfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 792 zcmc(c%L>9U6hvohz9P`I3pXxYDvb|R#Ohk&3yWH%t@!uqY3&bWqlAV#H<{*4@_t3? zE0L2`yB-$pl`#&==_a~U?WmkmU8s$sX7AVWo4GpGYNZnt1=X>kvAXI(r=+)q&guzw ziY`$ZI<4m&PR~j~x7xerUyd9dbv0G|w^T+GE!0yB8V{N0j$=4;-S}qcGsL+zq^RCy h4{5A$Lf>J)buA)v;j&`1MMRpm`!P`r#at7tJ*O*U4&8 zcsd#}gYmJ&uF*cv@%<~d9Tj*nTW6h)L5`9F~O}H@z=Nnwa)TNQ{GKzecX=Gj4 z-XI+e8CMltmwb({9JZG_BRAL$f89{eoD=-kWaa9SSrYL&vLUwZ9$!X$N1k;I-EYPy BkNE%q diff --git a/build/tests/FatalErrorMaker/banner/icon/012A.bmp b/build/tests/FatalErrorMaker/banner/icon/012A.bmp deleted file mode 100644 index 8fb6cafb33638fba6207dc00d9979ddc4970f397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmbV|%MHRn3`7@10hGXzI=ItL&Rbdvu;hj;nKyO_$_;SVj%UZ8NgmJTJjxd09lvdU z8W*yoT@P@M!5MS*i%5#kv92pb))|?~a2{O|>_>BR%ZTvw>U7K^Ex4Bniq8*k7GdEY z#Zz0=TokUpq69%br@$Y9Zr6s4?0sxUV4a>XKHxXKDb0j82BMY;8($hUiWK#j}_HTRY_o}MpkV!o)JLboBOUt28>Q(fOy#VQ}yqpkc? rhWcv3I1S*E_rbN7bk>&|sQr=(r};lxY;AO6)x&x4t>)^#;~yk9whz4; diff --git a/build/tests/FatalErrorMaker/banner/icon/gameIcon.bmp b/build/tests/FatalErrorMaker/banner/icon/gameIcon.bmp deleted file mode 100644 index 876eca5ba7f3b6743090775ac5fa180c1fa2f566..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmd6ju?+$-3`GrM07jr>i<3}N(vg}it|gn$u?AN&0}?B+L3p;4Q=q#JU;fYk`p!xA z;W)0vYJ~S-SFw@}>bthp=A5f4B7V3Fk`F&UCwV_^G7M*M0atJbFHj^btVn-4g#@V# zPz*>T_a3#JX3Z;Uzdq)ebn0Xzs%8IghWpod(H~3ZkIc$g2ps~_mFVd_GU@0ox0I&Y V+lt*seW?$0Y}>D2^X3+;;{$QOqip~H diff --git a/build/tests/FileRecoveryTest/Makefile b/build/tests/FileRecoveryTest/Makefile deleted file mode 100644 index c06e7830..00000000 --- a/build/tests/FileRecoveryTest/Makefile +++ /dev/null @@ -1,43 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - FileRecoveryTest -# File: Makefile -# -# Copyright **** Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev:$ -# $Author:$ -#---------------------------------------------------------------------------- -SUBDIRS = $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/util/ - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -#---------------------------------------------------------------------------- - -TARGET_BIN = main.srl - -SRCS = main.c - -LLIBRARIES += libsysmutil$(TWL_LIBSUFFIX).a - -ROM_SPEC = main.rsf - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/FileRecoveryTest/main.rsf b/build/tests/FileRecoveryTest/main.rsf deleted file mode 100644 index 30b63f3e..00000000 --- a/build/tests/FileRecoveryTest/main.rsf +++ /dev/null @@ -1,269 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess FALSE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [0 - 255] - # - #AgreeEULAVersion 0 - - ### - #### END -} - -AppendProperty -{ - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode ABCJ - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 0 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 0K - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - Secure TRUE - AppType System -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} - -Rating -{ - # - # Permited age to play for each rating organization [0 - 31, ALWAYS, FREE] - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / ALWAYS / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/FileRecoveryTest/src/main.c b/build/tests/FileRecoveryTest/src/main.c deleted file mode 100644 index 460c313b..00000000 --- a/build/tests/FileRecoveryTest/src/main.c +++ /dev/null @@ -1,60 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: util_recoveryFile.h - - Copyright **** Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ -*---------------------------------------------------------------------------*/ - -#include -#include - -static char *s_strResult[4]; - -void VBlankIntr(void); - -void TwlMain( void ) -{ - char path[] = "nand:/tmp/a/b/c/d/hogehoge.dat"; - UTL_RecoveryStatus result; - - OS_Init(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - - // Ƃ肠t@CTCY16bytew - result = UTL_RecoveryFile( path, 0x0010 ); - - OS_TPrintf("recovery result: %d\n", result); - OS_TPrintf("%s\n", s_strResult[result] ); - OS_TPrintf( "*** End of demo\n" ); - OS_Terminate(); - - -} - -void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -static char *s_strResult[] = { - "Target file exists and file size matched.", - "File size didn't match. Changing size succeeded.", - "Target file didn't exist. Creating file and setting size succeeded.", - "ERROR: File Recovery Failed." -}; \ No newline at end of file diff --git a/build/tests/HashCheckTemplate/ARM7/Makefile b/build/tests/HashCheckTemplate/ARM7/Makefile deleted file mode 100644 index e2d8e1b7..00000000 --- a/build/tests/HashCheckTemplate/ARM7/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBMAKES = Makefile_ltd Makefile_hyb Makefile_ltd_offset - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM7/Makefile_hyb b/build/tests/HashCheckTemplate/ARM7/Makefile_hyb deleted file mode 100644 index 0f47bbf5..00000000 --- a/build/tests/HashCheckTemplate/ARM7/Makefile_hyb +++ /dev/null @@ -1,88 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - mongoose.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = HYBRID -override TWL_CODEGEN = ARM -TWL_NO_STD_PCHDR = True - -#---------------------------------------------------------------------------- - -SRCDIR += $(ROOT)/build/components/mongoose.TWL/src - -SRCS = main.c initScfg.c - -TARGET_NAME = mongoose_hct - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = mongoose_hct.lsf -LCFILE_TEMPLATE = $(ROOT)/build/components/mongoose.TWL/mongoose.lcf.template -LDRES_TEMPLATE = $(ROOT)/build/components/mongoose.TWL/mongoose.response.template - -LLIBRARY_DIRS += ../crt/ARM7/obj/ARM7-TS.HYB/$(TWL_BUILD_DIR) -CRT0_O = crt0_hct.HYB.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -# If THUMB, use ARM libraries -# CODEGEN THUMB ̏ꍇAARM Ńrĥ THUMB Ƃđ܂B -ifeq ($(TARGET_CODEGEN),THUMB) -TWL_LIBSUFFIX = .TWL$(ARCHGEN_TYPE) -CODEGEN_CC = ARM -endif - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='$(if $(ISDBG_LIBS_NITRO),$(ISDBG_LIBS_NITRO),libstubsisd_sp$(TWL_LIBSUFFIX).a)' - -#-------------------------------- -# install target -#-------------------------------- -INSTALL_TARGETS = $(BINDIR)/$(TARGET_NAME).tef \ - $(BINDIR)/$(TARGET_NAME).TWL.FLX.sbin \ - $(BINDIR)/$(TARGET_NAME)_defs.TWL.FLX.sbin \ - $(BINDIR)/$(TARGET_NAME).TWL.LTD.sbin \ - $(BINDIR)/$(TARGET_NAME)_defs.TWL.LTD.sbin - -INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE) - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include - -#LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ -# libcdc_sp$(TWL_LIBSUFFIX).a \ -# libtpex_sp$(TWL_LIBSUFFIX).a \ -# libmicex_sp$(TWL_LIBSUFFIX).a \ -# libsdio_hcd_twl$(TWL_LIBSUFFIX).a \ -# libsdio_busdriver$(TWL_LIBSUFFIX).a \ -# libsdio_lib$(TWL_LIBSUFFIX).a \ -# librompatch_sp$(TWL_LIBSUFFIX).a \ -# libARM7athdrv$(TWL_LIBSUFFIX).a \ - - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM7/Makefile_ltd b/build/tests/HashCheckTemplate/ARM7/Makefile_ltd deleted file mode 100644 index 5893c9ca..00000000 --- a/build/tests/HashCheckTemplate/ARM7/Makefile_ltd +++ /dev/null @@ -1,81 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -override TWL_CODEGEN = ARM -TWL_NO_STD_PCHDR = True - -#---------------------------------------------------------------------------- - -SRCDIR += $(ROOT)/build/components/mongoose.TWL/src - -SRCS = main.c initScfg.c - -TARGET_NAME = racoon_hct - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = racoon_hct.lsf -LCFILE_TEMPLATE = $(ROOT)/build/components/racoon.TWL/racoon.lcf.template -LDRES_TEMPLATE = $(ROOT)/build/components/racoon.TWL/racoon.response.template - -LLIBRARY_DIRS += ../crt/ARM7/obj/ARM7-TS.LTD/$(TWL_BUILD_DIR) -CRT0_O = crt0_hct.LTD.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#MACRO_FLAGS += -DSDK_ARM7COMP_LTD - -ifeq ($(TWL_PLATFORM),BB) -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037e0000' -else -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' -endif - -MAKELCF_FLAGS += -DADDRESS_FLXMAIN='0x02380000' - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include -#LLIBRARIES += libwl_sp.TWL.LTD.a libsdio_hcd_twl$(TWL_LIBSUFFIX).a libsdio_busdriver$(TWL_LIBSUFFIX).a libsdio_lib$(TWL_LIBSUFFIX).a libARM7athdrv$(TWL_LIBSUFFIX).a -LLIBRARIES += libwl_sp.TWL.LTD.a -#LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ -# libcdc_sp$(TWL_LIBSUFFIX).a \ -# libtpex_sp$(TWL_LIBSUFFIX).a \ -# libmicex_sp$(TWL_LIBSUFFIX).a \ -# libsdio_hcd_twl$(TWL_LIBSUFFIX).a \ -# libsdio_busdriver$(TWL_LIBSUFFIX).a \ -# libsdio_lib$(TWL_LIBSUFFIX).a \ -# librompatch_sp$(TWL_LIBSUFFIX).a \ -# libARM7athdrv$(TWL_LIBSUFFIX).a - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM7/Makefile_ltd_offset b/build/tests/HashCheckTemplate/ARM7/Makefile_ltd_offset deleted file mode 100644 index 123e2195..00000000 --- a/build/tests/HashCheckTemplate/ARM7/Makefile_ltd_offset +++ /dev/null @@ -1,83 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -override TWL_CODEGEN = ARM -TWL_NO_STD_PCHDR = True - -#---------------------------------------------------------------------------- - -SRCDIR += $(ROOT)/build/components/mongoose.TWL/src - -SRCS = main.c initScfg.c - -TARGET_NAME = racoon_hct_offset - -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = racoon_hct.lsf -LCFILE_TEMPLATE = $(ROOT)/build/components/racoon.TWL/racoon.lcf.template -LDRES_TEMPLATE = $(ROOT)/build/components/racoon.TWL/racoon.response.template - -LLIBRARY_DIRS += ../crt/ARM7/obj/ARM7-TS.LTD/$(TWL_BUILD_DIR) -CRT0_O = crt0_hct.LTD.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#MACRO_FLAGS += -DSDK_ARM7COMP_LTD - -ifeq ($(TWL_PLATFORM),BB) -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037e0000' -else -MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' -endif - -MAKELCF_FLAGS += -DADDRESS_FLXMAIN='0x02390000' - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - - -LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include -#LLIBRARIES += libwl_sp.TWL.LTD.a libsdio_hcd_twl$(TWL_LIBSUFFIX).a libsdio_busdriver$(TWL_LIBSUFFIX).a libsdio_lib$(TWL_LIBSUFFIX).a libARM7athdrv$(TWL_LIBSUFFIX).a -LLIBRARIES += libwl_sp.TWL.LTD.a -#LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ -# libcdc_sp$(TWL_LIBSUFFIX).a \ -# libtpex_sp$(TWL_LIBSUFFIX).a \ -# libmicex_sp$(TWL_LIBSUFFIX).a \ -# libsdio_hcd_twl$(TWL_LIBSUFFIX).a \ -# libsdio_busdriver$(TWL_LIBSUFFIX).a \ -# libsdio_lib$(TWL_LIBSUFFIX).a \ -# librompatch_sp$(TWL_LIBSUFFIX).a \ -# libARM7athdrv$(TWL_LIBSUFFIX).a - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM7/mongoose_hct.lsf b/build/tests/HashCheckTemplate/ARM7/mongoose_hct.lsf deleted file mode 100644 index 78e6357d..00000000 --- a/build/tests/HashCheckTemplate/ARM7/mongoose_hct.lsf +++ /dev/null @@ -1,172 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - mongoose.TWL -# File: mongoose.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - Library $(CRT0_O) \ - libos_sp$(LIBSUFFIX).a \ - libsyscall_sp.twl.a \ - libmi_sp$(LIBSUFFIX).a - Object $(OBJDIR)/initScfg.o - StackSize 1024 1024 -} - -#-------- -Autoload WRAM -{ - Address 0x037f8000 - - Library libsubpsyscall.a - Library $(CW_LIBS) - Library libpad_sp$(LIBSUFFIX).a - Library libpxi_sp$(LIBSUFFIX).a - Library libexi_sp$(LIBSUFFIX).a - Library libsnd_sp$(LIBSUFFIX).a - Library libspi_sp$(LIBSUFFIX).a - Library libpm_sp$(LIBSUFFIX).a - Library libmath_sp$(LIBSUFFIX).a - Library libtp_sp$(LIBSUFFIX).a - Library libmic_sp$(LIBSUFFIX).a - Library libfs_sp$(LIBSUFFIX).a - Library libcard_sp$(LIBSUFFIX).a - Library libstd_sp$(LIBSUFFIX).a - Library libctrdg_sp$(LIBSUFFIX).a - - Object * (.etable) - Object * (.wram) - Object $(OBJDIR)/main.o - - ##### - # Sub-routines in WL library , that should be on WRAM. - # in TaskMan.o - Object OBJECT( MainTaskRoutine , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( AddTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( DeleteTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( LowestIdleTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( ExecuteMessage , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in BufMan.o - Object OBJECT( NewHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( DeleteHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( AllocateHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( ReleaseHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( MoveHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( AddHeapBuf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( GetHeapBufNextAdrs , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in WlCmdIf.o - ## Object OBJECT( RequestCmdTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( SendMessageToWmDirect , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in WlNic.o - Object OBJECT( WStart , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WStop , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WSetStaState , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in WlIntr.o - Object OBJECT( WlIntr , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrPreTbtt , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrTbtt , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrActEnd , libwl_sp.TWL$(ARCHGEN).a ) (.text) -# Object OBJECT( WlIntrAckCntOvf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrCntOvf , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrTxErr , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrRxCntup , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrTxEnd , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrRxEnd , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrMpEnd , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrStartTx , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrStartRx , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( SetParentTbttTxq , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( MacBugTxMp , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( AdjustRingPointer , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( CheckKeyTxEnd , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in WlIntrTask.o - Object OBJECT( WlIntrTxBeaconTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrTxEndTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrRxEndTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WlIntrMpEndTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( SetParentTbttTxqTask , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( TakeoutRxFrame , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in TxCtrl.o - Object OBJECT( InitTxCtrl , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in RxCtrl.o - Object OBJECT( InitRxCtrl , libwl_sp.TWL$(ARCHGEN).a ) (.text) - # in WaitLoop.o - Object OBJECT( WaitLoop_Rxpe , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WaitLoop_Waitus , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WaitLoop_ClrAid , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WaitLoop_BbpAccess , libwl_sp.TWL$(ARCHGEN).a ) (.text) - Object OBJECT( WaitLoop_RfAccess , libwl_sp.TWL$(ARCHGEN).a ) (.text) - -} - -#-------- -Autoload MAIN -{ - Address 0x02fe0000 - Library librtc_sp$(LIBSUFFIX).a - Library libnvram_sp$(LIBSUFFIX).a - Library libwvr_sp$(LIBSUFFIX).a - Library libwm_sp$(LIBSUFFIX).a - Library libwl_sp.TWL$(ARCHGEN).a - Library $(ISDBG_LIBS_NITRO) - Library $(ISDBG_LIBS_TWL) -} - -#-------- -Ltdautoload LTDWRAM -{ - Address 0x03000000 - Object * (.ltdwram) - Library libi2c_sp$(LIBSUFFIX).a - Library libcamera_sp$(LIBSUFFIX).a - Library libcdc_sp$(LIBSUFFIX).a - Library libsndex_sp$(LIBSUFFIX).a - Library libtpex_sp$(LIBSUFFIX).a - Library libmicex_sp$(LIBSUFFIX).a - Library libmcu_sp$(LIBSUFFIX).a - Library libscfg_sp$(LIBSUFFIX).a - Library libaes_sp$(LIBSUFFIX).a - - Library libsdio_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a - - Object OBJECT( wpa_sm_rx_eapol , libwpa_sp$(LIBSUFFIX).a ) (.text) - - # FATFS core symbols - Object OBJECT(FATFSi_lfi2text, libfatfs_sp$(LIBSUFFIX).a) (.text) # 360 BYTEs - Object OBJECT(FATFSi_pc_findin, libfatfs_sp$(LIBSUFFIX).a) (.text) # 904 BYTEs - Object OBJECT(FATFSi_pc_patcmp_vfat, libfatfs_sp$(LIBSUFFIX).a) (.text) # 436 BYTEs - Object OBJECT(FATFSi_pc_ascii_mfile, libfatfs_sp$(LIBSUFFIX).a) (.text) # 160 BYTEs - Object OBJECT(FATFSi_map_ascii_to_unicode, libfatfs_sp$(LIBSUFFIX).a) (.text) # 48 BYTEs - Object OBJECT(SDCARD_Intr_Thread, libfatfs_sp$(LIBSUFFIX).a) (.text) # 520 BYTEs - Object OBJECT(FATFSi_unicode_cmp_to_ascii_char, libfatfs_sp$(LIBSUFFIX).a) (.text) # 40 BYTEs - Object OBJECT(FATFSi_pc_read_blk, libfatfs_sp$(LIBSUFFIX).a) (.text) # 352 BYTEs - -} - -#-------- -Ltdautoload LTDMAIN -{ - Address 0x02f88000 - Object * (.ltdmain) - Library libnwm_sp$(LIBSUFFIX).a - Library libfatfs_sp$(LIBSUFFIX).a - - Library libwpa_sp$(LIBSUFFIX).a -} diff --git a/build/tests/HashCheckTemplate/ARM7/racoon_hct.lsf b/build/tests/HashCheckTemplate/ARM7/racoon_hct.lsf deleted file mode 100644 index 2928fee8..00000000 --- a/build/tests/HashCheckTemplate/ARM7/racoon_hct.lsf +++ /dev/null @@ -1,231 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: racoon.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address $(ADDRESS_FLXMAIN) - Library $(CRT0_O) \ - libos_sp$(LIBSUFFIX).a \ - libsyscall_sp.twl.a \ - libmi_sp$(LIBSUFFIX).a - Object $(OBJDIR)/initScfg.o - StackSize 1024 1024 -} - -#-------- -Autoload WRAM -{ - Address $(ADDRESS_LTDWRAM) - - Library libsubpsyscall.a \ - $(CW_LIBS) \ - libpad_sp$(LIBSUFFIX).a \ - libpxi_sp$(LIBSUFFIX).a \ - libstd_sp$(LIBSUFFIX).a \ - libexi_sp$(LIBSUFFIX).a \ - libsnd_sp$(LIBSUFFIX).a \ - libspi_sp$(LIBSUFFIX).a \ - libpm_sp$(LIBSUFFIX).a \ - libmath_sp$(LIBSUFFIX).a \ - libscfg_sp$(LIBSUFFIX).a \ - libtp_sp$(LIBSUFFIX).a \ - libmic_sp$(LIBSUFFIX).a \ - libfs_sp$(LIBSUFFIX).a \ - libcard_sp$(LIBSUFFIX).a \ - libi2c_sp$(LIBSUFFIX).a \ - libcamera_sp$(LIBSUFFIX).a \ - libcdc_sp$(LIBSUFFIX).a \ - libsndex_sp$(LIBSUFFIX).a \ - libtpex_sp$(LIBSUFFIX).a \ - libmicex_sp$(LIBSUFFIX).a \ - libmcu_sp$(LIBSUFFIX).a \ - - Library libsdio_sp$(LIBSUFFIX).a - - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - - - Object * (.etable) - Object * (.wram) - Object * (.ltdwram) - Object $(OBJDIR)/main.o - - # caches in fatfs library, that should be on WRAM. - # 2007/12/11 OBJECT() ɂ .bss V{̃N܂Ȃ̂ŁA - # ϐ`ӏ pragma .ltdwram ZNVɊ܂܂悤Ɏb΍􂵂܂B -# Object OBJECT( FATFSi___mem_drives_structures , libfatfs_sp$(LIBSUFFIX).a) (.bss) - - ##### - # Sub-routines in WL library , that should be on WRAM. - # in TaskMan.o - Object OBJECT( MainTaskRoutine , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AddTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DeleteTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( LowestIdleTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ExecuteMessage , libwl_sp$(LIBSUFFIX).a ) (.text) - # in BufMan.o - Object OBJECT( NewHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DeleteHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AllocateHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ReleaseHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( MoveHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AddHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( GetHeapBufNextAdrs , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlCmdIf.o - Object OBJECT( RequestCmdTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SendMessageToWmDirect , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlNic.o - Object OBJECT( WStart , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WStop , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WSetStaState , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlIntr.o - Object OBJECT( WlIntr , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrPreTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrActEnd , libwl_sp$(LIBSUFFIX).a ) (.text) -# Object OBJECT( WlIntrAckCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxErr , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxCntup , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrMpEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrStartTx , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrStartRx , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SetParentTbttTxq , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( MacBugTxMp , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AdjustRingPointer , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( CheckKeyTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WlIntrTask.o - Object OBJECT( WlIntrTxBeaconTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrTxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrRxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WlIntrMpEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( SetParentTbttTxqTask , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( TakeoutRxFrame , libwl_sp$(LIBSUFFIX).a ) (.text) - # in TxCtrl.o - Object OBJECT( InitTxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) - # in RxCtrl.o - Object OBJECT( InitRxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) - # in WaitLoop.o - Object OBJECT( WaitLoop_Rxpe , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_Waitus , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_ClrAid , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_BbpAccess , libwl_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( WaitLoop_RfAccess , libwl_sp$(LIBSUFFIX).a ) (.text) - - -} - -#-------- -Ltdautoload RSVWRAM -{ - Address 0x03040000 - Object * (.rsvwram) - Library libathdrv_sp$(LIBSUFFIX).a (.bss) - Library libathdrv_sp$(LIBSUFFIX).a (.data) - - ##### - # Sub-routines in TWL WIRELESS Driver , that should be on WRAM. - Object OBJECT( HTCSendPktCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCIssueSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCTrySend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCSendPkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCProcessCreditRpt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevRecvPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCProcessRecvHeader, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCRecvCompleteHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCRecvMessagePendingHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCAddReceivePkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AR6KFreeIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( AR6KAllocIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevGetEventAsyncHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevCheckPendingRecvMsgsAsync, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DevDsrHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HIFReadWrite, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( hifRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( hifIRQHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HIFAckInterrupt, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_credit_distribute, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_alloc, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_alloc_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_put, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_push, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_pull, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_free, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_to_data, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_to_len, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( a_netbuf_headroom, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_drv_return_netbuf, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ath_queue_remove_from_head, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ath_queue_insert_tail, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_alloc_cookie, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_driver_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_tx_complete, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_dix_2_dot3, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_data_hdr_add, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_data_hdr_remove, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( nin_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_ibss_map_epid, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DL_ListInsertTail, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( DL_ListRemove, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_control_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_cmd_send, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( ar6000_control_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( wmi_implicit_create_pstream, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCAllocControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( HTCFreeControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( BMILZData, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( bmiBufferSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) - Object OBJECT( BMIWriteMemory, libathdrv_sp$(LIBSUFFIX).a ) (.text) - - - # FATFS core symbols - Object OBJECT(FATFSi_lfi2text, libfatfs_sp$(LIBSUFFIX).a) (.text) # 360 BYTEs - Object OBJECT(FATFSi_pc_findin, libfatfs_sp$(LIBSUFFIX).a) (.text) # 904 BYTEs - Object OBJECT(FATFSi_pc_patcmp_vfat, libfatfs_sp$(LIBSUFFIX).a) (.text) # 436 BYTEs - Object OBJECT(FATFSi_pc_ascii_mfile, libfatfs_sp$(LIBSUFFIX).a) (.text) # 160 BYTEs - Object OBJECT(FATFSi_map_ascii_to_unicode, libfatfs_sp$(LIBSUFFIX).a) (.text) # 48 BYTEs - Object OBJECT(SDCARD_Intr_Thread, libfatfs_sp$(LIBSUFFIX).a) (.text) # 520 BYTEs - Object OBJECT(FATFSi_unicode_cmp_to_ascii_char, libfatfs_sp$(LIBSUFFIX).a) (.text) # 40 BYTEs - Object OBJECT(FATFSi_pc_read_blk, libfatfs_sp$(LIBSUFFIX).a) (.text) # 352 BYTEs -} - -#-------- -Ltdautoload LTDMAIN -{ - Address 0x02f88000 - - Object * (.ltdmain) - Library libwm_sp$(LIBSUFFIX).a \ - libnwm_sp$(LIBSUFFIX).a \ - libwvr_sp$(LIBSUFFIX).a \ - libwl_sp$(LIBSUFFIX).a - - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a - - Library libfatfs_sp$(LIBSUFFIX).a \ - libaes_sp$(LIBSUFFIX).a - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) -} diff --git a/build/tests/HashCheckTemplate/ARM9/Makefile b/build/tests/HashCheckTemplate/ARM9/Makefile deleted file mode 100644 index a63deeb2..00000000 --- a/build/tests/HashCheckTemplate/ARM9/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBMAKES = Makefile_ltd Makefile_hyb - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM9/Makefile_hyb b/build/tests/HashCheckTemplate/ARM9/Makefile_hyb deleted file mode 100644 index 79a3f290..00000000 --- a/build/tests/HashCheckTemplate/ARM9/Makefile_hyb +++ /dev/null @@ -1,75 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -override TWL_ARCHGEN = HYBRID - -TARGET_NAME = HashCheckTemplate -TARGET_BIN = $(TARGET_NAME).tad - -TITLEID_LO = 0DTA - -ROM_SPEC = main.rsf -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(TITLEID_LO)/rom_header_$(call toLower,$(TITLEID_LO)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(TITLEID_LO)/libsyscall.a - -MISC_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/misc - -SRCS = main.c HashCheckTemplate.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -F -DTITLEID_LO='$(TITLEID_LO)' \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - -#fobOpp[^lj -MAKEROM_FLAGS += -DSYSCALL_C='$(call empath,$(LIBSYSCALL:.a=_c.bin))' \ - -DARM9FLX_EXPAND=0x27c000 \ - -DARM7FLX_EXPAND=0x40000 \ - -DARM9LTD_EXPAND=0x280000 \ - -DARM7LTD_EXPAND=0x108000 - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.DEBUG.exe - -DEFAULT_COMP_ARM7 = mongoose_hct -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -LDIRT_CLEAN = $(TARGET_TAD) -INSTALL_TARGETS = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM9/Makefile_ltd b/build/tests/HashCheckTemplate/ARM9/Makefile_ltd deleted file mode 100644 index bf6f7936..00000000 --- a/build/tests/HashCheckTemplate/ARM9/Makefile_ltd +++ /dev/null @@ -1,75 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -override TWL_ARCHGEN = LIMITED - -TARGET_NAME = HashCheckTemplate -TARGET_BIN = $(TARGET_NAME).tad - -TITLEID_LO = 0DTA - -ROM_SPEC = main.rsf -ROM_HEADER_TEMPLATE = $(SYSMENU_ROM_HEADER_DIR)/$(TITLEID_LO)/rom_header_$(call toLower,$(TITLEID_LO)).template.sbin -LIBSYSCALL = $(SYSMENU_ROM_HEADER_DIR)/$(TITLEID_LO)/libsyscall.a - -MISC_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/misc - -SRCS = main.c HashCheckTemplate.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -F -DTITLEID_LO='$(TITLEID_LO)' \ - -DROM_HEADER_TEMPLATE='$(call empath,$(ROM_HEADER_TEMPLATE))' - -#fobOpp[^lj -MAKEROM_FLAGS += -DSYSCALL_C='$(call empath,$(LIBSYSCALL:.a=_c.bin))' \ - -DARM9FLX_EXPAND=0x27c000 \ - -DARM7FLX_EXPAND=0x40000 \ - -DARM9LTD_EXPAND=0x280000 \ - -DARM7LTD_EXPAND=0x108000 - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.DEBUG.exe - -DEFAULT_COMP_ARM7 = racoon_hct -DEFAULT_MAKEROM_ARM7_BASE = ../ARM7/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - -LDIRT_CLEAN = $(TARGET_TAD) -INSTALL_TARGETS = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/ARM9/main.rsf b/build/tests/HashCheckTemplate/ARM9/main.rsf deleted file mode 100644 index 8f742b9a..00000000 --- a/build/tests/HashCheckTemplate/ARM9/main.rsf +++ /dev/null @@ -1,185 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - RomHeaderTemplate $(ROM_HEADER_TEMPLATE) - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion Japan - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType User - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.c b/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.c deleted file mode 100644 index 3764fe64..00000000 --- a/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.c +++ /dev/null @@ -1,151 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: HashCheckTemplate.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" -#include "HashCheckTemplate.h" - -// define data------------------------------------------ -#define RETURN_BUTTON_TOP_X 2 -#define RETURN_BUTTON_TOP_Y 21 -#define RETURN_BUTTON_BOTTOM_X ( RETURN_BUTTON_TOP_X + 8 ) -#define RETURN_BUTTON_BOTTOM_Y ( RETURN_BUTTON_TOP_Y + 2 ) - -#define UNDEF_CODE 0xe7ffdeff - -// extern data------------------------------------------ - -// function's prototype declaration--------------------- - -// global variable ------------------------------------- -RTCDrawProperty g_rtcDraw = { - TRUE, RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y -}; - -// static variable ------------------------------------- -static BOOL s_switch = TRUE; - -//static u32 dummy[1024*1024/2]={1,2,3,};//2MB - -// const data ----------------------------------------- - -//====================================================== -// Ĕzu`FbJ[i鎖͕\̂݁j -//====================================================== - -/* -static void draw_sub1(u8 *ram_addr, u8 *header_addr, int y) -{ - int l; - PrintfSJIS(8,y,TXT_UCOLOR_DARKGREEN, "ARM9FLX ( VERIFY %s ) :",( (*(u32 *)0x02000180 == UNDEF_CODE) ? "OK" : "NG" )); - - for (l=0; l<20; l++) - { - PrintfSJIS(24+(l%10)*19, y+12+12*(l/10), TXT_COLOR_BLACK, "%.2x", *(ram_addr+l)); - if(s_switch) - { - PrintfSJIS(24+(l%10)*19, y+12+12*(l/10), (*(ram_addr+l) != *(header_addr+l)) ? TXT_COLOR_RED : TXT_COLOR_BLUE, "%.2x", *(header_addr+l)); - } - } -} -*/ - -static void draw_sub2(u8 *ram_addr, u8 *header_addr, int y, const u16 *str) -{ - int l; - PutStringUTF16(8,y,TXT_UCOLOR_DARKGREEN, str); - for (l=0; l<20; l++) - { - PrintfSJIS(24+(l%10)*19, y+12+12*(l/10), TXT_COLOR_BLACK, "%.2x", *(ram_addr+l)); - if(s_switch ) - { - PrintfSJIS(24+(l%10)*19, y+12+12*(l/10), (*(ram_addr+l) != *(header_addr+l)) ? TXT_COLOR_RED : TXT_COLOR_BLUE, "%.2x", *(header_addr+l)); - } - } -} - -static void encryObjdraw(void) -{ - int l; - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"decrypted encryObj (first 200 bytes)"); - for (l=0; l<50; l++) - { - PrintfSJIS(4+(l%4)*64, 24+12*(l/4), TXT_COLOR_BLACK, "%.8x", *(((u32 *)0x02000180)+l) ); - } -} - -static void draw() -{ - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - - PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"SelfDigestChecker"); - PutStringUTF16( 3 * 8, 1 * 12, TXT_COLOR_BLACK, (const u16 *)L"Press A to Check Digest...."); - - draw_sub2((u8 *)0x02000100, (u8 *)(HW_TWL_ROM_HEADER_BUF + 0x38c), 12*2+4, (const u16 *)L"ARM9FLX :" ); - draw_sub2((u8 *)0x02000120, (u8 *)(HW_TWL_ROM_HEADER_BUF + 0x314), 12*5+8, (const u16 *)L"ARM7FLX :" ); - draw_sub2((u8 *)0x02000140, (u8 *)(HW_TWL_ROM_HEADER_BUF + 0x350), 12*8+12, (const u16 *)L"ARM9LTD :" ); - draw_sub2((u8 *)0x02000160, (u8 *)(HW_TWL_ROM_HEADER_BUF + 0x364), 12*11+16, (const u16 *)L"ARM7LTD :" ); -} - -// -void HashCheckTemplateInit( void ) -{ - GX_DispOff(); - GXS_DispOff(); - - draw(); - - GetAndDrawRTCData( &g_rtcDraw, TRUE ); - - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); - GX_DispOn(); - GXS_DispOn(); -} - -static u32 c; -// C[v -void HashCheckTemplateMain(void) -{ - BOOL tp_cancel = FALSE; - - ReadTP(); // ^b`pl͂̎擾 - - // [RETURN]{^`FbN - if(tpd.disp.touch) { - tp_cancel = WithinRangeTP( RETURN_BUTTON_TOP_X * 8, RETURN_BUTTON_TOP_Y * 8 - 4, - RETURN_BUTTON_BOTTOM_X * 8, RETURN_BUTTON_BOTTOM_Y * 8 - 4, &tpd.disp ); - } - - if( ( pad.trg & PAD_BUTTON_A )) { - s_switch = !s_switch; - draw(); - } - - if( ( pad.trg & PAD_BUTTON_X )) { - encryObjdraw(); - } - - if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) { -// SYSM_RebootLauncher(); - } - - GetAndDrawRTCData( &g_rtcDraw, FALSE ); -} - - diff --git a/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.h b/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.h deleted file mode 100644 index fe20f46a..00000000 --- a/build/tests/HashCheckTemplate/ARM9/src/HashCheckTemplate.h +++ /dev/null @@ -1,37 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: HashCheckTemplate.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __HASH_CHECK_TEMPLATE_H__ -#define __HASH_CHECK_TEMPLATE_H__ - -#ifdef __cplusplus -extern "C" { -#endif - - -#include - -// define data---------------------------------------------------------- - -void HashCheckTemplateInit( void ); -void HashCheckTemplateMain( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __HASH_CHECK_TEMPLATE_H__ diff --git a/build/tests/HashCheckTemplate/ARM9/src/main.c b/build/tests/HashCheckTemplate/ARM9/src/main.c deleted file mode 100644 index c42a2d4d..00000000 --- a/build/tests/HashCheckTemplate/ARM9/src/main.c +++ /dev/null @@ -1,87 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "misc.h" -#include "HashCheckTemplate.h" - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- - -// function's prototype------------------------------------------------------- -static void INTR_VBlank( void ); - -// global variable------------------------------------------------------------- - -// static variable------------------------------------------------------------- - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// function's description -// ============================================================================ -void TwlMain(void) -{ - - // ---------------------------------- - OS_Init(); - - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - GX_Init(); - GX_SetPower(GX_POWER_ALL); // eWbN p[ON - - // 荞݋---------------------------- - (void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // foCX------------------------------- - TP_Init(); - (void)RTC_Init(); - - // VXȅ------------------ - OS_SetArenaHi(OS_ARENA_MAIN, (void *)0x02d00000);// arm9MMEMheap - InitAllocator(); - - InitBG(); - HashCheckTemplateInit(); - // C[v---------------------------- - while(1){ - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - ReadTP(); // TP͂̎擾 - - HashCheckTemplateMain(); - } -} - - -// ============================================================================ -// 荞ݏ -// ============================================================================ - -// VuN荞 -static void INTR_VBlank(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // VuN`FbÑZbg -} - diff --git a/build/tests/HashCheckTemplate/Makefile b/build/tests/HashCheckTemplate/Makefile deleted file mode 100644 index 96d468e9..00000000 --- a/build/tests/HashCheckTemplate/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner crt ARM7 ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/banner/Makefile b/build/tests/HashCheckTemplate/banner/Makefile deleted file mode 100644 index cf9ea411..00000000 --- a/build/tests/HashCheckTemplate/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -d -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/HashCheckTemplate/banner/banner_v3.bsf b/build/tests/HashCheckTemplate/banner/banner_v3.bsf deleted file mode 100644 index fb39aad4a39033b30dcca5d04739ce8e3c204888..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmc(dze>YU7{$+8!FRZjS-m1SbhI>95f!6u9n!SYU>i#kEsj2oqocD3u8ux|i@1op z`nxyr0n$OaY_gA1TMG9rK;*Y_Pm2pPOiAI`XC0Lq@b>@dj96F z<{BMq43YvwXEh?DsV<3>#0DTVnu9&XFYz+`)ZYo6F`0s>t3BbZ5GL!|)SkNk%FMAl z1(!pY>H@rN5N>!(F1M>gA}zh$eDt5~qrJDU_QBp_-C37!>B)ZD7yItLuJ(QP0ZL@* z!McEZhtKWu9Nr@|o3YQ>Yvf)Cb=0_L8`T`DCUbU}-n1vG**BTfSwMr{0zFQA;Ei`9%D(-@D8 diff --git a/build/tests/HashCheckTemplate/banner/icon/gameIcon.bmp b/build/tests/HashCheckTemplate/banner/icon/gameIcon.bmp deleted file mode 100644 index 2d6194b192ca27707fe3bef9abd4c538e1860a8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmY+BF;Buk7=}NMiKDVJ*rp~XOj5!RphXuQh*xj`6M|f1fG}vAFu4#KR+e^VqPvM{ zS2ZEtFHkzElgclk#qX{)(KorfKKH%%-q&2|)Z7Fi6XydQd+FGKE&M{I^#qbR#wDB0 zLN1qsVzCICra`4rfo8J_{eB+?g8>YOLzqk^Fr7}p_kEbp=MaV=tk-J*{hwglFbv$$ zR8^HxyDO8n4Wg@gS<0Z4l|?B!G~7sd#Jzd6a>TlQA`EYdfwT1|L5ZBYNOEK!+6JgBv~*TdQ0BJpr} zGi25a?rqw!Z-`z#BZ33Zb9s|A;br*Z%^dz0Ed%S=&1-59{PcDA>U%R64Xrkb7p(XA zDH3e!l9D)NPamH_APm=>7mO~y@wr0A9yp_cqVS!FZgO5Q_KXKa4{g2=W2Lcb` diff --git a/build/tests/HashCheckTemplate/crt/ARM7/Makefile b/build/tests/HashCheckTemplate/crt/ARM7/Makefile deleted file mode 100644 index 75aef4bf..00000000 --- a/build/tests/HashCheckTemplate/crt/ARM7/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - init - ARM7.TWL -# File: Makefile.LTD -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBMAKES = Makefile_ltd Makefile_hyb - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/crt/ARM7/Makefile_hyb b/build/tests/HashCheckTemplate/crt/ARM7/Makefile_hyb deleted file mode 100644 index 1af439e1..00000000 --- a/build/tests/HashCheckTemplate/crt/ARM7/Makefile_hyb +++ /dev/null @@ -1,52 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - init - ARM7.TWL -# File: Makefile.HYB -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL - -# Codegen for sub processer -override TWL_PROC = ARM7 - -# Avoid to use pre-compile-header of "nitro.h" -TWL_NO_STD_PCHDR = True - -# Avoid to build THUMB version object -override TARGET_CODEGEN = ARM - -# Avoid to build LIMITED version object -override TWL_ARCHGEN = HYBRID - -SRCDIR = src -INCDIR = ../common/include - -SRCS = crt0_hct.HYB.c -TARGET_OBJ = crt0_hct.HYB.TWL.o - -MACRO_FLAGS += -DSDK_NOINIT - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -$(OBJDIR)/$(TARGET_OBJ): $(OBJDIR)/$(SRCS:.c=.o) - $(CP) $< $@ - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/crt/ARM7/Makefile_ltd b/build/tests/HashCheckTemplate/crt/ARM7/Makefile_ltd deleted file mode 100644 index 9b602b3f..00000000 --- a/build/tests/HashCheckTemplate/crt/ARM7/Makefile_ltd +++ /dev/null @@ -1,52 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - init - ARM7.TWL -# File: Makefile.LTD -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL - -# Codegen for sub processer -override TWL_PROC = ARM7 - -# Avoid to use pre-compile-header of "nitro.h" -TWL_NO_STD_PCHDR = True - -# Avoid to build THUMB version object -override TARGET_CODEGEN = ARM - -# Avoid to build HYBRID version object -override TWL_ARCHGEN = LIMITED - -SRCDIR = src -INCDIR = ../common/include - -SRCS = crt0_hct.LTD.c -TARGET_OBJ = crt0_hct.LTD.TWL.o - -MACRO_FLAGS += -DSDK_NOINIT - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -$(OBJDIR)/$(TARGET_OBJ): $(OBJDIR)/$(SRCS:.c=.o) - $(CP) $< $@ - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.HYB.c b/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.HYB.c deleted file mode 100644 index 1e2a39f7..00000000 --- a/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.HYB.c +++ /dev/null @@ -1,918 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - libraries - init - ARM7.TWL - File: crt0.HYB.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "boot_sync.h" - - - -/*---------------------------------------------------------------------------*/ -void _start(void); -void _start_AutoloadDoneCallback(void* argv[]); -void WVR_ShelterExtWram(void); -void INIT_InitializeScfg(void); - -#define SDK_NITROCODE_LE 0x2106c0de -#define SDK_NITROCODE_BE 0xdec00621 - -#define SDK_TWLCODE_LE 0x6314c0de -#define SDK_TWLCODE_BE 0xdec01463 - -/* O֐Qƒ` */ -extern void OS_IrqHandler(void); -extern void _fp_init(void); -extern void __call_static_initializers(void); - -/* ֐vg^Cv` */ -static void INITi_SetHMACSHA1ToAppParam(void); -static void INITi_DoAutoload(void); -static void INITi_ShelterLtdBinary(void); -static BOOL INITi_IsRunOnTwl( void ); -static void INITi_CopySysConfig( void ); -static void INITi_DetectMainMemorySize(void); -#ifndef SDK_NOINIT -static void INITi_ShelterStaticInitializer(u32* ptr); -static void INITi_CallStaticInitializers(void); -#endif -static void* INITi_Copy32(void* dst, void* src, u32 size); -static void* INITi_Fill32(void* dst, u32 value, u32 size); - -/* JXNvgɂ`V{Q */ -extern void SDK_WRAM_ARENA_LO(void); -extern void SDK_AUTOLOAD_LIST(void); -extern void SDK_AUTOLOAD_LIST_END(void); -extern void SDK_AUTOLOAD_START(void); -extern void SDK_STATIC_BSS_START(void); -extern void SDK_STATIC_BSS_END(void); - -void* const _start_ModuleParams[] = -{ - (void*)SDK_AUTOLOAD_LIST, - (void*)SDK_AUTOLOAD_LIST_END, - (void*)SDK_AUTOLOAD_START, - (void*)SDK_STATIC_BSS_START, - (void*)SDK_STATIC_BSS_END, - (void*)0, // CompressedStaticEnd. This fixed number will be updated by compstatic tool. - (void*)SDK_CURRENT_VERSION_NUMBER, - (void*)SDK_NITROCODE_BE, - (void*)SDK_NITROCODE_LE, -}; - -extern void SDK_LTDAUTOLOAD_LIST(void); -extern void SDK_LTDAUTOLOAD_LIST_END(void); -extern void SDK_LTDAUTOLOAD_START(void); - -void* const _start_LtdModuleParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LIST, - (void*)SDK_LTDAUTOLOAD_LIST_END, - (void*)SDK_LTDAUTOLOAD_START, - (void*)0, // CompressedLtdautoloadEnd. This fixed number will be updated by compstatic tool. - (void*)SDK_TWLCODE_BE, - (void*)SDK_TWLCODE_LE, -}; - -extern void SDK_LTDAUTOLOAD_LTDMAIN_START(void); - -void* const _start_LtdMainParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LTDMAIN_START, -}; - -#ifdef DEBUG_WRAM_SETTING -u32 const wramMapping[12] = { - 0x8d898581, 0x8c888480, 0x9c989490, 0x8c888480, - 0x9c989490, 0x00000000, 0x09403900, 0x09803940, - 0x00403000, 0x09403900, 0x09803940, 0x0300000f -}; -#endif - -#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) -static const u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = -{ - 0x21, 0x06, 0xc0, 0xde, - 0xba, 0x98, 0xce, 0x3f, - 0xa6, 0x92, 0xe3, 0x9d, - 0x46, 0xf2, 0xed, 0x01, - - 0x76, 0xe3, 0xcc, 0x08, - 0x56, 0x23, 0x63, 0xfa, - 0xca, 0xd4, 0xec, 0xdf, - 0x9a, 0x62, 0x78, 0x34, - - 0x8f, 0x6d, 0x63, 0x3c, - 0xfe, 0x22, 0xca, 0x92, - 0x20, 0x88, 0x97, 0x23, - 0xd2, 0xcf, 0xae, 0xc2, - - 0x32, 0x67, 0x8d, 0xfe, - 0xca, 0x83, 0x64, 0x98, - 0xac, 0xfd, 0x3e, 0x37, - 0x87, 0x46, 0x58, 0x24, -}; - -/* IPL ɂăCɓWJ̃AhX` */ -#define IPL_PARAM_DOWNLOAD_PARAMETER 0x023fe904 -#define IPL_PARAM_CARD_ROM_HEADER 0x023fe940 - -/*---------------------------------------------------------------------------* - Name: ShakeHand - Description: ARM9 ShakeHand ֐ƓB - CłȂԂŎsKvB - Arguments: r0 - ARM9 pϐւ̃|C^B - r1 - ARM7 pϐւ̃|C^B - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_ShakeHand[10] = -{ - 0xe1d020b0, /* ldrh r2, [r0] ; ϐXLǂ */ - 0xe1d130b0, /* ldrh r3, [r1] ; ϐVLǂ */ - 0xe2833001, /* @1: add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe1d0c0b0, /* ldrh r12, [r0] ; ϐX̌Lǂ */ - 0xe152000c, /* cmp r2, r12 ; ϐX̕ω𔻒肷 */ - 0x0afffffa, /* beq @1 ; ωĂȂ΃[v */ - 0xe2833001, /* add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe12fff1e /* bx lr ; nhVFCN */ -}; - -#ifdef DEBUG_WRAM_SETTING -/*---------------------------------------------------------------------------* - Name: WaitAgreement - Description: ARM9 ̋NxN^̏ԂɂȂ܂ő҂B - CłȂԂŎsKvB - Arguments: r0 - ptF[YǗϐւ̃|C^B - r1 - ҋ@tF[YԍB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_WaitAgreement[7] = -{ - 0xe1d020b0, /* @1: ldrh r2, [r0] ; tF[YǗϐLǂ */ - 0xe1510002, /* cmp r1, r2 ; ҋ@tF[YԍƔr */ - 0x012fff1e, /* bxeq lr ; vĂΑҋ@ */ - 0xe3a03010, /* mov r3, #16 ; 󃋁[v񐔏 */ - 0xe2533001, /* @2: subs r3, r3, #1 ; 󃋁[v -- */ - 0x1afffffd, /* bne @2 ; 16 񃋁[v */ - 0xeafffff8 /* b @1 ; 擪ɖ߂ */ -}; -#endif - -/*---------------------------------------------------------------------------* - Name: GotoMain - Description: ARM9 ɓ̏ԂɂȂƂ`ŁAMain ֐փWv - BCłȂԂŎsKvB - Arguments: r0 - Main ֐̃|C^BMain ֐ Thumb R[hłꍇ - ɂ́Abx ߂ŃWv邽ߍʼnʃrbg 1 ɂȂ - KvB - r1 - ptF[YǗϐւ̃|C^B - r2 - ARM9 ɓ`tF[YԍB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_GotoMain[2] = -{ - 0xe1c120b0, /* strh r2, [r1] ; tF[YǗϐXV */ - 0xe12fff10 /* bx r0 ; Main ֐փWv */ -}; - -/*---------------------------------------------------------------------------*/ -#include - -/*---------------------------------------------------------------------------* - Name: _start - Description: NxN^B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start(void) -{ -@000: - /* 荞݋֎~ */ - mov r12, #HW_REG_BASE - str r12, [r12, #REG_IME_OFFSET] // Use that LSB of HW_REG_BASE is 0b0 - - /* nhVFCNp}CNR[hp WRAM ɃRs[ */ - ldr r1, =microcode_ShakeHand - ldr r2, =HW_PRV_WRAM - add r3, r2, #40 -@001: ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @001 - - /* p WRAM ̃R[h ARM9 ƃnhVFCN */ - ldr r0, =HW_BOOT_SHAKEHAND_9 - ldr r1, =HW_BOOT_SHAKEHAND_7 - ldr r2, =HW_PRV_WRAM - mov lr, pc - bx r2 - - // [hꂽAṽ_CWFXgvZăAvԃp[^Ɋi[ - bl INITi_SetHMACSHA1ToAppParam - -@010: - /* X^bN|C^ݒ */ - mov r0, #HW_PSR_SVC_MODE // SuperVisor mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_SVC_STACK_END - mov r0, #HW_PSR_IRQ_MODE // IRQ mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_IRQ_STACK_END - ldr r1, =SDK_IRQ_STACKSIZE - sub r1, sp, r1 - sub sp, sp, #4 // 4 bytes for stack check code - mov r0, #HW_PSR_SYS_MODE // System mode - msr cpsr_csfx, r0 - sub sp, r1, #4 // 4 bytes for stack check code - - /* X^bN̈NA */ - ldr r0, =SDK_SYS_STACKSIZE - sub r1, r1, r0 - ldr r2, =HW_PRV_WRAM_IRQ_STACK_END - mov r0, #0 -@011: cmp r1, r2 - strlt r0, [r1], #4 - blt @011 - - /* SCFG HW_SYS_CONF_BUF փRs[ */ - bl INIT_InitializeScfg - bl INITi_CopySysConfig - - /* TWL n[hEFAœ삵Ă邩ǂ𒲍 */ - bl INITi_IsRunOnTwl - bne @013 - - /* TWL n[hEFAœ삵Ăꍇ */ - /* v[hp[^AhXi[ĂȂꍇ́AftHglZbg */ - ldr r0, =HW_PRELOAD_PARAMETER_ADDR - ldr r1, [r0] - cmp r1, #0 - ldreq r1, =HW_PARAM_TWL_SETTINGS_DATA_DEFAULT - streq r1, [r0] - - b @020 - -@013: /* NTR n[hEFAœ삵Ăꍇ */ - /* u[g^Cv MB ̏ꍇ̂݁AROM wb_ʒuɃRs[ */ - ldr r0, =HW_WM_BOOT_BUF - ldrh r0, [r0] - cmp r0, #OS_BOOTTYPE_DOWNLOAD_MB - bne @020 - /* J[h ROM wb_LGAɑޔ */ - ldr r0, =HW_CARD_ROM_HEADER - ldr r1, =IPL_PARAM_CARD_ROM_HEADER - mov r2, #HW_CARD_ROM_HEADER_SIZE - bl INITi_Copy32 - /* _E[hp[^LGAɑޔ */ - ldr r0, =HW_DOWNLOAD_PARAMETER - ldr r1, =IPL_PARAM_DOWNLOAD_PARAMETER - mov r2, #HW_DOWNLOAD_PARAMETER_SIZE - bl INITi_Copy32 - -@020: - /* Autoload { */ - bl INITi_DoAutoload - - /* STATIC ubN .bss ZNV 0 NA */ - mov r1, #0 // r1 = clear value for STATIC bss section - ldr r3, =_start_ModuleParams - ldr r0, [r3, #12] // r0 = start address of STATIC bss section - ldr r2, [r3, #16] - subs r2, r2, r0 // r2 = size of STATIC bss section - blgt INITi_Fill32 - - //---- detect main memory size - bl INITi_DetectMainMemorySize - -#ifndef SDK_FINALROM - //---- set debug print window - ldr r1, =HW_PRINT_OUTPUT_ARM9 - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9 - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7<<8) - strh r0, [r1] - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9ERR - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7ERR<<8) - strh r0, [r1, #2] -#endif - - /* 荞݃xN^ݒ */ - ldr r1, =HW_INTR_VECTOR_BUF - ldr r0, =OS_IrqHandler - str r0, [r1] - -#ifndef SDK_NOINIT - /* c++ p */ - bl _fp_init - bl TwlSpStartUp - bl __call_static_initializers - bl INITi_CallStaticInitializers -#endif - -@030: - /* Main ֐ւ̃Wvp}CNR[hX^bN̒ɃRs[ */ - ldr r1, =microcode_GotoMain - ldr r0, [r1], #4 - str r0, [sp, #-4] - ldr r0, [r1] - str r0, [sp] - - /* }CNR[hoR Main ֐փWv */ - ldr r0, =TwlSpMain - ldr r1, =HW_BOOT_SYNC_PHASE - mov r2, #BOOT_SYNC_PHASE_4 - ldr lr, =HW_RESET_VECTOR - sub r3, sp, #4 - bx r3 -} - -#include -#include -#include -/*---------------------------------------------------------------------------* - Name: INITi_SetHMACSHA1ToAppParam - Description: ROM[hꂽeAv̈HMACSHA1vZÃAh - Xɕۑ - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -#define UNDEF_CODE 0xe7ffdeff -#define ENCRYPT_DEF_SIZE 0x800 -#define DGT_TGT_ADDR ( HW_MAIN_MEM + 0x0100 ) - -static void INITi_SetHMACSHA1ToAppParam(void) -{ - SVCHMACSHA1Context *pCon = ( SVCHMACSHA1Context * ) (0x2000300 - sizeof(SVCHMACSHA1Context)); - ROM_Header_Short *pROMH = (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF; - u32 bak; - - // arm9_flx - bak = *(u32 *)pROMH->main_autoload_done; - *(u32 *)pROMH->main_autoload_done = 0xE12FFF1E; - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->main_ram_address, pROMH->main_size); - SVC_HMACSHA1GetHash(pCon, (void *)DGT_TGT_ADDR); - *(u32 *)pROMH->main_autoload_done = bak; - // arm7_flx - bak = *(u32 *)pROMH->sub_autoload_done; - *(u32 *)pROMH->sub_autoload_done = 0xE12FFF1E; - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->sub_ram_address, pROMH->sub_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 32)); - *(u32 *)pROMH->sub_autoload_done = bak; - // arm9_ltd - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->main_ltd_ram_address, pROMH->main_ltd_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 2 * 32)); - // arm7_ltd - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->sub_ltd_ram_address, pROMH->sub_ltd_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 3 * 32)); -} - -/*---------------------------------------------------------------------------* - Name: INITi_DoAutoload - Description: NɉāAeI[g[hubŇŒf[^̓WJ - yѕϐ 0 NAsB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -/* - * < iKI[g[h > - * 0x02380000 crt0 yшiڃ[hoCizuĂB - * NITRO ƋL”\ WRAM ɔzuׂoCif[^ 0x037f8000 Ƀ[hB - * NITRO ƋL”\ MAIN ɔzuׂoCif[^ 0x02fe0000 Ƀ[hB - * NITRO ƋL”\ VRAM ɔzuׂoCif[^ꍇ WVR Cũ[_֐ĂяoB - * 0x02400000 ARM9 ̓iڃ[hoCizuĂB - * 0x04000 oCg̓J[h ROM ēǂݏos‚Ȃ̂ŁA0x02f80000 - 0x02f84000 ɑޔB - * 0x02e80000 ɓiڃ[hoCizuĂB - * 0x04000 oCg̓J[h ROM ēǂݏos‚Ȃ̂ŁA0x02f84000 - 0x02f88000 ɑޔB - * TWL ł삵Ȃ WRAM ɔzuׂoCif[^ 0x03000000 Ƀ[hB - * TWL ł삵Ȃ MAIN ɔzuׂoCif[^ 0x02f88000 Ƀ[hB - */ -static asm void -INITi_DoAutoload(void) -{ - stmfd sp!, {lr} - -@01_autoload: - /* NITRO pubNI[g[h */ - ldr r0, =_start_ModuleParams - ldr r12, [r0] // r12 = SDK_AUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_AUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_AUTOLOAD_START -@01_segments_loop: - cmp r12, r3 - bge @02_start - /* VRAM ւ̃I[g[hubNǂ𒲍 */ - ldr r0, [r12], #4 // r0 = start address of destination range of fixed section - ldr r2, =HW_EXT_WRAM - cmp r0, r2 - beq @01_shelter_vram_segment - /* ŒZNV */ - ldr r2, [r12], #4 // r2 = size of fixed section - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 // r0 = start address of source range of static initializers table -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} // r0 = start address of destination range of bss section - mov r1, #0 // r1 = clear value for bss section - ldr r2, [r12], #4 // r2 = size of bss section - bl INITi_Fill32 - ldmfd sp!, {r1} // r1 = end address of source range of the autoload segment - b @01_segments_loop - -@01_shelter_vram_segment: - ldr r2, [r12], #12 // r2 = size of fixed section - add r1, r1, r2 // r1 = end address of source range of the autoload segment - /* VRAM ւ̃I[g[hubNobNAbv */ - stmfd sp!, {r1, r3, r12} - bl WVR_ShelterExtWram - ldmfd sp!, {r1, r3, r12} - b @01_segments_loop - -@02_start: - /* TWL n[hEFAœ삵Ă邩ǂ */ - bl INITi_IsRunOnTwl - bne @03_start - /* ēǂݏos•ޔ */ - bl INITi_ShelterLtdBinary - - /* TWL pI[g[hubN݂̑mF */ - ldr r1, =HW_TWL_ROM_HEADER_BUF - ldr r0, [r1, #ROM_Header.s.sub_ltd_size] - cmp r0, #0 - beq @03_start - -@02_autoload: - /* TWL pubNI[g[h */ - ldr r0, =_start_LtdModuleParams - ldr r12, [r0] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_LTDAUTOLOAD_START -@02_segments_loop: - cmp r12, r3 - bge @03_start - /* ŒZNV */ - ldr r0, [r12], #4 // r0 = start address of destination range of fixed section - ldr r2, [r12], #4 // r2 = size of fixed section - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} // r0 = start address of destination range of bss section - mov r1, #0 // r1 = clear value for bss section - ldr r2, [r12], #4 // r2 = size of bss section - bl INITi_Fill32 - ldmfd sp!, {r1} // r1 = end address of source range of the ltdautoload segment - b @02_segments_loop - -@03_start: - /* I[g[hR[obN֐Ăяo */ - ldr r0, =_start_ModuleParams - ldr r1, =_start_LtdModuleParams - ldmfd sp!, {lr} - b _start_AutoloadDoneCallback -} - -/*---------------------------------------------------------------------------* - Name: INITi_ShelterLtdBinary - Description: TWL p̃I[g[hoCif[^̓AJ[h ROM - ēǂݏołȂ̈̃f[^ޔGAɑޔB - ēǂݏołȂ̈̃f[^ ARM7 p ARM9 p̊g풓 - W[̂Q‚ɕÔ\̂ŁA璷ł͂邪 - ̐擪 0x4000 ꂼޔB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterLtdBinary(void) -{ - stmfd sp!, {lr} - - /* NAND u[gꍇɂ͑ޔf[^̎gȂׁAXLbv */ - ldr r3, =HW_TWL_ROM_HEADER_BUF - ldr r0, [r3, #ROM_Header.s.titleID_Hi] - tst r0, #TITLE_ID_HI_MEDIA_MASK - ldmnefd sp!, {pc} - -@shelter_arm7_ltdautoload_src: - /* ARM7 pg풓W[݂̑mF */ - ldr r1, [r3, #ROM_Header.s.sub_ltd_size] - cmp r1, #0 - beq @shelter_arm9_ltdautoload_src - - /* ARM7 pg풓W[̐擪 16K bytes ޔ */ - ldr r1, [r3, #ROM_Header.s.sub_ltd_ram_address] - ldr r0, =_start_LtdMainParams - ldr r0, [r0] - mov r2, #0x4000 // r2 = size of shelter buffer - sub r0, r0, r2 // r0 = SDK_LTDAUTOLOAD_LTDMAIN_START - 0x4000 - bl INITi_Copy32 - -@shelter_arm9_ltdautoload_src: - /* ARM9 pg풓W[݂̑mF */ - ldr r3, =HW_TWL_ROM_HEADER_BUF - ldr r1, [r3, #ROM_Header.s.main_ltd_size] - cmp r1, #0 - beq @end - - /* ARM9 pg풓W[̐擪 16K bytes ޔ */ - ldr r1, [r3, #ROM_Header.s.main_ltd_ram_address] - ldr r0, =_start_LtdMainParams - ldr r0, [r0] - mov r2, #0x4000 // r2 = size of shelter buffer - sub r0, r0, r2 - sub r0, r0, r2 // r0 = SDK_LTDAUTOLOAD_LTDMAIN_START - 0x8000 - bl INITi_Copy32 - -@end: - ldmfd sp!, {pc} -} - -#ifndef SDK_NOINIT -/*---------------------------------------------------------------------------* - Name: INITi_ShelterStaticInitializer - Description: eI[g[hZOg static initializer ւ̃|C^ - e[u IRQ X^bN̍ŏ㕔ɑޔB - Arguments: ptr - ZOg̃|C^e[uւ̃|C^B - e[u NULL ŏI[ĂKvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterStaticInitializer(u32* ptr) -{ - /* mF */ - cmp r0, #0 - bxeq lr - - /* ޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 - - /* ޔꏊ擪󂫏ꏊ𒲍 */ -@001: ldr r2, [r1] - cmp r2, #0 - addne r1, r1, #4 - bne @001 - - /* 󂫏ꏊɃe[uRs[ */ -@002: ldr r2, [r0], #4 - str r2, [r1], #4 - cmp r2, #0 - bne @002 - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CallStaticInitializers - Description: eI[g[hZOg static initializer ĂяoB - I[g[hɂ IRQ X^bN̍ŏ㕔ɑޔĂ - ֐|C^e[u‚ŒĂяoB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CallStaticInitializers(void) -{ - stmdb sp!, {lr} - - /* e[uޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 - - /* e[uɊǗĂ|C^‚ŒĂяo */ -@001: ldr r0, [r1] - cmp r0, #0 - beq @002 - stmdb sp!, {r1} - mov lr, pc - bx r0 - ldmia sp!, {r1} - /* UĂяo|C^̓[NA (IRQX^bNԎ؂肵Ă) */ - mov r0, #0 - str r0, [r1], #4 - b @001 - -@002: ldmia sp!, {lr} - bx lr -} -#endif - -/*---------------------------------------------------------------------------* - Name: _start_AutoloadDoneCallback - Description: I[g[hR[obNB - Arguments: argv - I[g[hp[^ێĂzB - argv[0] = SDK_AUTOLOAD_LIST - argv[1] = SDK_AUTOLOAD_LIST_END - argv[2] = SDK_AUTOLOAD_START - argv[3] = SDK_STATIC_BSS_START - argv[4] = SDK_STATIC_BSS_END - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start_AutoloadDoneCallback(void* argv[]) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: NitroSpStartUp - Description: Hook for user start up. - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL void -NitroSpStartUp(void) -{ -} - -/*---------------------------------------------------------------------------* - Name: INITi_IsRunOnTwl - - Description: check running platform - - This function is used in only Nitro-TWL hybrid mode. - (In Nitro mode and TWL limited mode, treated as constant) - - Arguments: None - - Returns: TRUE : running on TWL - FALSE : running on NITRO - *---------------------------------------------------------------------------*/ -static asm BOOL INITi_IsRunOnTwl( void ) -{ - ldr r0, =HW_PRV_WRAM_SYSRV - ldrb r0, [r0,#HWi_WSYS08_WRAMOFFSET] - and r0, r0, #HWi_WSYS08_ROM_ARM9SEC_MASK | HWi_WSYS08_ROM_ARM9RSEL_MASK - cmp r0, #HWi_WSYS08_ROM_ARM9SEC_MASK - moveq r0, #TRUE - movne r0, #FALSE - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INIT_InitializeScfg - - Description: [_[s SCFG ubNւ̐ݒ菈sׂ̊֐B - ̎̂ crt0 ̊Oɒ`邽߁AV{ƂB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -INIT_InitializeScfg(void) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CopySysConfig - - Description: copy SCFG registers to HW_SYS_CONF_BUF and HW_PRV_WRAM_SYSRV - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static asm void INITi_CopySysConfig( void ) -{ - //---- copy scfg setting - ldr r2, =HW_PRV_WRAM_SYSRV - ldr r3, =HW_SYS_CONF_BUF - ldr r0, [r2, #HWi_WSYS04_WRAMOFFSET] - str r0, [r3, #HWi_WSYS04_OFFSET] - ldrh r0, [r2, #HWi_WSYS08_WRAMOFFSET] - strh r0, [r3, #HWi_WSYS08_OFFSET] - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_DetectMainMemorySize - - Description: detect main memory size. - result is written into (u32*)HW_MMEMCHECKER_SUB. - value is [OS_CONSOLE_SIZE_4MB|OS_CONSOLE_SIZE_8MB| - OS_CONSOLE_SIZE_16MB|OS_CONSOLE_SIZE_32MB] - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -#define OSi_IMAGE_DIFFERENCE 0x400000 -#define OSi_IMAGE_DIFFERENCE2 0xb000000 -#define OSi_DETECT_NITRO_MASK (REG_SND_SMX_CNT_E_MASK | REG_SND_SMX_CNT_FSEL_MASK) -#define OSi_DETECT_NITRO_VAL (REG_SND_SMX_CNT_E_MASK) - -#define OSi_CHECKNUM1 0x55 -#define OSi_CHECKNUM2 0xaa -#define OSi_100usWAIT 3352 // 100us = 3351.4cycles(33.514MHz) - -static asm void INITi_DetectMainMemorySize( void ) -{ - stmfd sp!, {lr} - - //---- detect memory size - mov r0, #OS_CONSOLE_SIZE_4MB - mov r1, #0 - - ldr r2, =HW_MMEMCHECKER_SUB - sub r3, r2, #OSi_IMAGE_DIFFERENCE -@1: - strh r1, [r2] - ldrh r12, [r3] - cmp r1, r12 - bne @2 - - add r1, r1, #1 - cmp r1, #2 // check 2 loop - bne @1 - - //---- 4MB - b @3 - - //---- 8MB or 16MB or 32MB -@2: - // check if running on twl/nitro - bl INITi_IsRunOnTwl - movne r0, #OS_CONSOLE_SIZE_8MB - bne @3 - - //---- 16MB or 32MB - add r3, r2, #OSi_IMAGE_DIFFERENCE2 - mov r0, #OS_CONSOLE_SIZE_16MB - ldrb r2, [r3] - - mov r1, #OSi_CHECKNUM1 - strb r1, [r3] - - ldr r12, =OSi_100usWAIT -@4 subs r12, r12, #4 - bcs @4 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM1 - bne @3 - - mov r1, #OSi_CHECKNUM2 - strb r1, [r3] - - ldr r12, =OSi_100usWAIT -@5 subs r12, r12, #4 - bcs @5 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM2 - moveq r0, #OS_CONSOLE_SIZE_32MB - -@3: - //---- check SMX_CNT - strb r2, [r3] - ldr r3, =REG_SMX_CNT_ADDR - ldrh r1, [r3] - and r1, r1, #OSi_DETECT_NITRO_MASK - cmp r1, #OSi_DETECT_NITRO_VAL - orreq r0, r0, #OS_CHIPTYPE_SMX_MASK - - ldr r2, =HW_MMEMCHECKER_SUB - strh r0, [r2] - - ldmfd sp!, {lr} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: WVR_ShelterExtWram - Description: WVR Cup g WRAM ɔzuI[g[hubN - Cɑޔ֐̃_~[B - ۂɊg WRAM ɃCuzuKv̂R|[lg - ł́A֐̋V{ʓrNB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL void -WVR_ShelterExtWram(void) -{ -} - -/*---------------------------------------------------------------------------* - Name: INITi_Copy32 - Description: ”\Ȍ 32 oCgPʂŁA[ȕ 4 oCgPʂŃRs[ - sB - X^bN 36 oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - Rs[ւ̃|C^ ( 4 oCgAC )B - r1 - Rs[ւ̃|C^ ( 4 oCgAC )B - r2 - Rs[钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - Rs[̃Rs[ւ̃|C^ ( r0 + r2 )B - r1 - Rs[̃Rs[ւ̃|C^ ( r1 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Copy32(void* dst, void* src, u32 size) -{ - stmfd sp!, {r3-r11} - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - ldmia r1!, {r4-r11} - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - ldmneia r1!, {r4-r7} - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - ldmneia r1!, {r4-r5} - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - ldmneia r1!, {r4} - stmneia r0!, {r4} - ldmfd sp!, {r3-r11} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Fill32 - Description: ”\Ȍ 32 oCgPʂŁA[ȕ 4 oCgPʂŃobt@ - ewf[^Ŗ߂B - X^bN 36 oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - obt@ւ̃|C^ ( 4 oCgAC )B - r1 - obt@𖄂߂e 32 bit lŎwB - r2 - obt@𖄂߂钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - ̃obt@ւ̃|C^ ( r0 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Fill32(void* dst, u32 value, u32 size) -{ - stmfd sp!, {r3-r11} - mov r4, r1 - mov r5, r1 - mov r6, r1 - mov r7, r1 - mov r8, r1 - mov r9, r1 - mov r10, r1 - mov r11, r1 - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - stmneia r0!, {r4} - ldmfd sp!, {r3-r11} - bx lr -} - -#include diff --git a/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.LTD.c b/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.LTD.c deleted file mode 100644 index 110841fd..00000000 --- a/build/tests/HashCheckTemplate/crt/ARM7/src/crt0_hct.LTD.c +++ /dev/null @@ -1,861 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - libraries - init - ARM7.TWL - File: crt0.LTD.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "boot_sync.h" - -/*---------------------------------------------------------------------------*/ -void _start(void); -void _start_AutoloadDoneCallback(void* argv[]); -void INIT_InitializeScfg(void); - -#define SDK_NITROCODE_LE 0x2106c0de -#define SDK_NITROCODE_BE 0xdec00621 - -#define SDK_TWLCODE_LE 0x6314c0de -#define SDK_TWLCODE_BE 0xdec01463 - -/* O֐Qƒ` */ -extern void OS_IrqHandler(void); -extern void _fp_init(void); -extern void __call_static_initializers(void); - -/* ֐vg^Cv` */ -static void INITi_SetHMACSHA1ToAppParam(void); -static void INITi_DoAutoload(void); -static void INITi_ShelterLtdBinary(void); -static BOOL INITi_IsRunOnTwl( void ); -static void INITi_CopySysConfig( void ); -static void INITi_DetectMainMemorySize(void); -#ifndef SDK_NOINIT -static void INITi_ShelterStaticInitializer(u32* ptr); -static void INITi_CallStaticInitializers(void); -#endif -static void* INITi_Copy32(void* dst, void* src, u32 size); -static void* INITi_Fill32(void* dst, u32 value, u32 size); - -/* JXNvgɂ`V{Q */ -extern void SDK_AUTOLOAD_LIST(void); -extern void SDK_AUTOLOAD_LIST_END(void); -extern void SDK_AUTOLOAD_START(void); -extern void SDK_STATIC_BSS_START(void); -extern void SDK_STATIC_BSS_END(void); - -void* const _start_ModuleParams[] = -{ - (void*)SDK_AUTOLOAD_LIST, - (void*)SDK_AUTOLOAD_LIST_END, - (void*)SDK_AUTOLOAD_START, - (void*)SDK_STATIC_BSS_START, - (void*)SDK_STATIC_BSS_END, - (void*)0, // CompressedStaticEnd. This fixed number will be updated by compstatic tool. - (void*)SDK_CURRENT_VERSION_NUMBER, - (void*)SDK_NITROCODE_BE, - (void*)SDK_NITROCODE_LE, -}; - -extern void SDK_LTDAUTOLOAD_LIST(void); -extern void SDK_LTDAUTOLOAD_LIST_END(void); -extern void SDK_LTDAUTOLOAD_START(void); - -void* const _start_LtdModuleParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LIST, - (void*)SDK_LTDAUTOLOAD_LIST_END, - (void*)SDK_LTDAUTOLOAD_START, - (void*)0, // CompressedLtdautoloadEnd. This fixed number will be updated by compstatic tool. - (void*)SDK_TWLCODE_BE, - (void*)SDK_TWLCODE_LE, -}; - -extern void SDK_LTDAUTOLOAD_LTDMAIN_START(void); - -void* const _start_LtdMainParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LTDMAIN_START, -}; - -#ifdef DEBUG_WRAM_SETTING -u32 const wramMapping[12] = { - 0x8d898581, 0x8c888480, 0x9c989490, 0x8c888480, - 0x9c989490, 0x00000000, 0x09403900, 0x09803940, - 0x080037c0, 0x09403900, 0x09803940, 0x0000000f -}; -#endif - -#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) -static const u8 s_digestDefaultKey[ DIGEST_HASH_BLOCK_SIZE_SHA1 ] = -{ - 0x21, 0x06, 0xc0, 0xde, - 0xba, 0x98, 0xce, 0x3f, - 0xa6, 0x92, 0xe3, 0x9d, - 0x46, 0xf2, 0xed, 0x01, - - 0x76, 0xe3, 0xcc, 0x08, - 0x56, 0x23, 0x63, 0xfa, - 0xca, 0xd4, 0xec, 0xdf, - 0x9a, 0x62, 0x78, 0x34, - - 0x8f, 0x6d, 0x63, 0x3c, - 0xfe, 0x22, 0xca, 0x92, - 0x20, 0x88, 0x97, 0x23, - 0xd2, 0xcf, 0xae, 0xc2, - - 0x32, 0x67, 0x8d, 0xfe, - 0xca, 0x83, 0x64, 0x98, - 0xac, 0xfd, 0x3e, 0x37, - 0x87, 0x46, 0x58, 0x24, -}; - -/*---------------------------------------------------------------------------* - Name: ShakeHand - Description: ARM9 ShakeHand ֐ƓB - CłȂԂŎsKvB - Arguments: r0 - ARM9 pϐւ̃|C^B - r1 - ARM7 pϐւ̃|C^B - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_ShakeHand[10] = -{ - 0xe1d020b0, /* ldrh r2, [r0] ; ϐXLǂ */ - 0xe1d130b0, /* ldrh r3, [r1] ; ϐVLǂ */ - 0xe2833001, /* @1: add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe1d0c0b0, /* ldrh r12, [r0] ; ϐX̌Lǂ */ - 0xe152000c, /* cmp r2, r12 ; ϐX̕ω𔻒肷 */ - 0x0afffffa, /* beq @1 ; ωĂȂ΃[v */ - 0xe2833001, /* add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe12fff1e /* bx lr ; nhVFCN */ -}; - -#ifdef DEBUG_WRAM_SETTING -/*---------------------------------------------------------------------------* - Name: WaitAgreement - Description: ARM9 ̋NxN^̏ԂɂȂ܂ő҂B - CłȂԂŎsKvB - Arguments: r0 - ptF[YǗϐւ̃|C^B - r1 - ҋ@tF[YԍB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_WaitAgreement[7] = -{ - 0xe1d020b0, /* @1: ldrh r2, [r0] ; tF[YǗϐLǂ */ - 0xe1510002, /* cmp r1, r2 ; ҋ@tF[YԍƔr */ - 0x012fff1e, /* bxeq lr ; vĂΑҋ@ */ - 0xe3a03010, /* mov r3, #16 ; 󃋁[v񐔏 */ - 0xe2533001, /* @2: subs r3, r3, #1 ; 󃋁[v -- */ - 0x1afffffd, /* bne @2 ; 16 񃋁[v */ - 0xeafffff8 /* b @1 ; 擪ɖ߂ */ -}; -#endif - -/*---------------------------------------------------------------------------* - Name: GotoMain - Description: ARM9 ɓ̏ԂɂȂƂ`ŁAMain ֐փWv - BCłȂԂŎsKvB - Arguments: r0 - Main ֐̃|C^BMain ֐ Thumb R[hłꍇ - ɂ́Abx ߂ŃWv邽ߍʼnʃrbg 1 ɂȂ - KvB - r1 - ptF[YǗϐւ̃|C^B - r2 - ARM9 ɓ`tF[YԍB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_GotoMain[2] = -{ - 0xe1c120b0, /* strh r2, [r1] ; tF[YǗϐXV */ - 0xe12fff10 /* bx r0 ; Main ֐փWv */ -}; - -/*---------------------------------------------------------------------------*/ -#include - -/*---------------------------------------------------------------------------* - Name: _start - Description: NxN^B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start(void) -{ -@000: - /* 荞݋֎~ */ - mov r12, #HW_REG_BASE - str r12, [r12, #REG_IME_OFFSET] // Use that LSB of HW_REG_BASE is 0b0 - - /* nhVFCNp}CNR[hp WRAM ɃRs[ */ - ldr r1, =microcode_ShakeHand - ldr r2, =HW_PRV_WRAM - add r3, r2, #40 -@001: ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @001 - - /* p WRAM ̃R[h ARM9 ƃnhVFCN */ - ldr r0, =HW_BOOT_SHAKEHAND_9 - ldr r1, =HW_BOOT_SHAKEHAND_7 - ldr r2, =HW_PRV_WRAM - mov lr, pc - bx r2 - - // [hꂽAṽ_CWFXgvZăAvԃp[^Ɋi[ - bl INITi_SetHMACSHA1ToAppParam - -@010: - /* X^bN|C^ݒ */ - mov r0, #HW_PSR_SVC_MODE // SuperVisor mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_SVC_STACK_END - mov r0, #HW_PSR_IRQ_MODE // IRQ mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_IRQ_STACK_END - ldr r1, =SDK_IRQ_STACKSIZE - sub r1, sp, r1 - sub sp, sp, #4 // 4 bytes for stack check code - mov r0, #HW_PSR_SYS_MODE - msr cpsr_csfx, r0 - sub sp, r1, #4 // 4 bytes for stack check code - - /* X^bN̈NA */ - ldr r0, =SDK_SYS_STACKSIZE - sub r1, r1, r0 - ldr r2, =HW_PRV_WRAM_IRQ_STACK_END - mov r0, #0 -@011: cmp r1, r2 - strlt r0, [r1], #4 - blt @011 - - /* SCFG HW_SYS_CONF_BUF փRs[ */ - bl INIT_InitializeScfg - bl INITi_CopySysConfig - - /* TWL n[hEFAœ삵Ă邩ǂ𒲍 */ - bl INITi_IsRunOnTwl - /* TWL n[hEFAœ삵ĂȂꍇ͉iv[v */ -@012: bne @012 - - /* v[hp[^AhXi[ĂȂꍇ́AftHglZbg */ - ldr r0, =HW_PRELOAD_PARAMETER_ADDR - ldr r1, [r0] - cmp r1, #0 - ldreq r1, =HW_PARAM_TWL_SETTINGS_DATA_DEFAULT - streq r1, [r0] - -@020: - /* Autoload { */ - bl INITi_DoAutoload - - /* STATIC ubN .bss ZNV 0 NA */ - mov r1, #0 // r1 = clear value for STATIC bss section - ldr r3, =_start_ModuleParams - ldr r0, [r3, #12] // r0 = start address of STATIC bss section - ldr r2, [r3, #16] - subs r2, r2, r0 // r2 = size of STATIC bss section - blgt INITi_Fill32 - - //---- detect main memory size - bl INITi_DetectMainMemorySize - -#ifndef SDK_FINALROM - //---- set debug print window - ldr r1, =HW_PRINT_OUTPUT_ARM9 - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9 - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7<<8) - strh r0, [r1] - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9ERR - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7ERR<<8) - strh r0, [r1, #2] -#endif - - /* 荞݃xN^ݒ */ - ldr r1, =HW_INTR_VECTOR_BUF - ldr r0, =OS_IrqHandler - str r0, [r1] - -#ifndef SDK_NOINIT - /* c++ p */ - bl _fp_init - bl TwlSpStartUp - bl __call_static_initializers - bl INITi_CallStaticInitializers -#endif - -@030: - /* Main ֐ւ̃Wvp}CNR[hX^bN̒ɃRs[ */ - ldr r1, =microcode_GotoMain - ldr r0, [r1], #4 - str r0, [sp, #-4] - ldr r0, [r1] - str r0, [sp] - - /* }CNR[hoR Main ֐փWv */ - ldr r0, =TwlSpMain - ldr r1, =HW_BOOT_SYNC_PHASE - mov r2, #BOOT_SYNC_PHASE_4 - ldr lr, =HW_RESET_VECTOR - sub r3, sp, #4 - bx r3 -} - -#include -#include -#include -/*---------------------------------------------------------------------------* - Name: INITi_SetHMACSHA1ToAppParam - Description: ROM[hꂽeAv̈HMACSHA1vZÃAh - Xɕۑ - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -#define UNDEF_CODE 0xe7ffdeff -#define ENCRYPT_DEF_SIZE 0x800 -#define DGT_TGT_ADDR ( HW_MAIN_MEM + 0x0100 ) - -static void INITi_SetHMACSHA1ToAppParam(void) -{ - SVCHMACSHA1Context *pCon = ( SVCHMACSHA1Context * ) (0x2000300 - sizeof(SVCHMACSHA1Context)); - ROM_Header_Short *pROMH = (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF; - u32 bak; - - // arm9_flx - bak = *(u32 *)pROMH->main_autoload_done; - *(u32 *)pROMH->main_autoload_done = 0xE12FFF1E; - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->main_ram_address, pROMH->main_size); - SVC_HMACSHA1GetHash(pCon, (void *)DGT_TGT_ADDR); - *(u32 *)pROMH->main_autoload_done = bak; - // arm7_flx - bak = *(u32 *)pROMH->sub_autoload_done; - *(u32 *)pROMH->sub_autoload_done = 0xE12FFF1E; - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->sub_ram_address, pROMH->sub_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 32)); - *(u32 *)pROMH->sub_autoload_done = bak; - // arm9_ltd - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->main_ltd_ram_address, pROMH->main_ltd_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 2 * 32)); - // arm7_ltd - SVC_HMACSHA1Init(pCon, (void *)s_digestDefaultKey, DIGEST_HASH_BLOCK_SIZE_SHA1); - SVC_HMACSHA1Update(pCon, pROMH->sub_ltd_ram_address, pROMH->sub_ltd_size); - SVC_HMACSHA1GetHash(pCon, (void *)(DGT_TGT_ADDR + 3 * 32)); -} - -/*---------------------------------------------------------------------------* - Name: INITi_DoAutoload - Description: NɉāAeI[g[hubŇŒf[^̓WJ - yѕϐ 0 NAsB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -/* - * < iKI[g[h > - * 0x02380000 crt0 yшiڃ[hoCizuĂB - * NITRO ƋL”\ WRAM ɔzuׂoCif[^ 0x037c0000 Ƀ[hB - * TWL ł삵Ȃ WRAM ɔzuׂoCif[^𑱂̃AhXɃ[hB - * 0x02400000 ARM9 ̓iڃ[hoCizuĂB - * 0x04000 oCg̓J[h ROM ēǂݏos‚Ȃ̂ŁA0x02f80000 - 0x02f84000 ɑޔB - * 0x02e80000 ɓiڃ[hoCizuĂB - * 0x04000 oCg̓J[h ROM ēǂݏos‚Ȃ̂ŁA0x02f84000 - 0x02f88000 ɑޔB - * NITRO ƋL”\ MAIN ɔzuׂoCif[^ 0x02f88000 Ƀ[hB - * TWL ł삵Ȃ MAIN ɔzuׂoCif[^𑱂̃AhXɃ[hB - */ -static asm void -INITi_DoAutoload(void) -{ - stmfd sp!, {lr} - -@01_autoload: - /* WRAM pubNI[g[h */ - ldr r0, =_start_ModuleParams - ldr r12, [r0] // r12 = SDK_AUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_AUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_AUTOLOAD_START -@01_segments_loop: - cmp r12, r3 - bge @02_start - /* ŒZNV */ - ldr r0, [r12], #4 // r0 = start address of destination range of fixed section - ldr r2, [r12], #4 // r2 = size of fixed section - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 // r0 = start address of source range of static initializers table -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} // r0 = start address of destination range of bss section - mov r1, #0 // r1 = clear value for bss section - ldr r2, [r12], #4 // r2 = size of bss section - bl INITi_Fill32 - ldmfd sp!, {r1} // r1 = end address of source range of the autoload segment - b @01_segments_loop - -@02_start: -#ifndef SDK_SYSMENU_BUILD - /* ēǂݏos•ޔ */ - bl INITi_ShelterLtdBinary -#endif // SDK_SYSMENU_BUILD - - /* CpI[g[hubN݂̑mF */ - ldr r1, =HW_TWL_ROM_HEADER_BUF - ldr r0, [r1, #ROM_Header.s.sub_ltd_size] - cmp r0, #0 - beq @03_start - -@02_autoload: - /* CpubNI[g[h */ - ldr r0, =_start_LtdModuleParams - ldr r12, [r0] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_AUTOLOAD_START -@02_segments_loop: - cmp r12, r3 - bge @03_start - /* ŒZNV */ - ldr r0, [r12], #4 - ldr r2, [r12], #4 - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} - mov r1, #0 - ldr r2, [r12], #4 - bl INITi_Fill32 - ldmfd sp!, {r1} - b @02_segments_loop - -@03_start: - /* I[g[hR[obN֐Ăяo */ - ldr r0, =_start_ModuleParams - ldr r1, =_start_LtdModuleParams - ldmfd sp!, {lr} - b _start_AutoloadDoneCallback -} - -/*---------------------------------------------------------------------------* - Name: INITi_ShelterLtdBinary - Description: TWL p̃I[g[hoCif[^̓AJ[h ROM - ēǂݏołȂ̈̃f[^ޔGAɑޔB - ēǂݏołȂ̈̃f[^ ARM7 p ARM9 p̊g풓 - W[̂Q‚ɕÔ\̂ŁA璷ł͂邪 - ̐擪 0x4000 ꂼޔB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterLtdBinary(void) -{ - stmfd sp!, {lr} - - /* NAND u[gꍇɂ͑ޔf[^̎gȂׁAXLbv */ - ldr r3, =HW_TWL_ROM_HEADER_BUF - ldr r0, [r3, #ROM_Header.s.titleID_Hi] - tst r0, #TITLE_ID_HI_MEDIA_MASK - ldmnefd sp!, {pc} - -@shelter_arm7_ltdautoload_src: - /* ARM7 pg풓W[݂̑mF */ - ldr r1, [r3, #ROM_Header.s.sub_ltd_size] - cmp r1, #0 - beq @shelter_arm9_ltdautoload_src - - /* ARM7 pg풓W[̐擪 16K bytes ޔ */ - ldr r1, [r3, #ROM_Header.s.sub_ltd_ram_address] - ldr r0, =_start_LtdMainParams - ldr r0, [r0] - mov r2, #0x4000 // r2 = size of shelter buffer - sub r0, r0, r2 // r0 = SDK_LTDAUTOLOAD_LTDMAIN_START - 0x4000 - bl INITi_Copy32 - -@shelter_arm9_ltdautoload_src: - /* ARM9 pg풓W[݂̑mF */ - ldr r3, =HW_TWL_ROM_HEADER_BUF - ldr r1, [r3, #ROM_Header.s.main_ltd_size] - cmp r1, #0 - beq @end - - /* ARM9 pg풓W[̐擪 16K bytes ޔ */ - ldr r1, [r3, #ROM_Header.s.main_ltd_ram_address] - ldr r0, =_start_LtdMainParams - ldr r0, [r0] - mov r2, #0x4000 // r2 = size of shelter buffer - sub r0, r0, r2 - sub r0, r0, r2 // r0 = SDK_LTDAUTOLOAD_LTDMAIN_START - 0x8000 - bl INITi_Copy32 - -@end: - ldmfd sp!, {pc} -} - -#ifndef SDK_NOINIT -/*---------------------------------------------------------------------------* - Name: INITi_ShelterStaticInitializer - Description: eI[g[hZOg static initializer ւ̃|C^ - e[u IRQ X^bN̍ŏ㕔ɑޔB - Arguments: ptr - ZOg̃|C^e[uւ̃|C^B - e[u NULL ŏI[ĂKvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterStaticInitializer(u32* ptr) -{ - /* mF */ - cmp r0, #0 - bxeq lr - - /* ޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 - - /* ޔꏊ擪󂫏ꏊ𒲍 */ -@001: ldr r2, [r1] - cmp r2, #0 - addne r1, r1, #4 - bne @001 - - /* 󂫏ꏊɃe[uRs[ */ -@002: ldr r2, [r0], #4 - str r2, [r1], #4 - cmp r2, #0 - bne @002 - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CallStaticInitializers - Description: eI[g[hZOg static initializer ĂяoB - I[g[hɂ IRQ X^bN̍ŏ㕔ɑޔĂ - ֐|C^e[u‚ŒĂяoB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CallStaticInitializers(void) -{ - stmdb sp!, {lr} - - /* e[uޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 - - /* e[uɊǗĂ|C^‚ŒĂяo */ -@001: ldr r0, [r1] - cmp r0, #0 - beq @002 - stmdb sp!, {r1} - mov lr, pc - bx r0 - ldmia sp!, {r1} - /* UĂяo|C^̓[NA (IRQX^bNԎ؂肵Ă) */ - mov r0, #0 - str r0, [r1], #4 - b @001 - -@002: ldmia sp!, {lr} - bx lr -} -#endif - -/*---------------------------------------------------------------------------* - Name: _start_AutoloadDoneCallback - Description: I[g[hR[obNB - Arguments: argv - I[g[hp[^ێĂzB - argv[0] = SDK_AUTOLOAD_LIST - argv[1] = SDK_AUTOLOAD_LIST_END - argv[2] = SDK_AUTOLOAD_START - argv[3] = SDK_STATIC_BSS_START - argv[4] = SDK_STATIC_BSS_END - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start_AutoloadDoneCallback(void* argv[]) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: NitroSpStartUp - Description: Hook for user start up. - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL void -NitroSpStartUp(void) -{ -} - -/*---------------------------------------------------------------------------* - Name: INITi_IsRunOnTwl - - Description: check running platform - - This function is used in only Nitro-TWL hybrid mode. - (In Nitro mode and TWL limited mode, treated as constant) - - Arguments: None - - Returns: TRUE : running on TWL - FALSE : running on NITRO - *---------------------------------------------------------------------------*/ -static asm BOOL INITi_IsRunOnTwl( void ) -{ - ldr r0, =HW_PRV_WRAM_SYSRV - ldrb r0, [r0,#HWi_WSYS08_WRAMOFFSET] - and r0, r0, #HWi_WSYS08_ROM_ARM9SEC_MASK | HWi_WSYS08_ROM_ARM9RSEL_MASK - cmp r0, #HWi_WSYS08_ROM_ARM9SEC_MASK - moveq r0, #TRUE - movne r0, #FALSE - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INIT_InitializeScfg - - Description: [_[s SCFG ubNւ̐ݒ菈sׂ̊֐B - ̎̂ crt0 ̊Oɒ`邽߁AV{ƂB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -INIT_InitializeScfg(void) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CopySysConfig - - Description: copy SCFG registers to HW_SYS_CONF_BUF and HW_PRV_WRAM_SYSRV - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static asm void INITi_CopySysConfig( void ) -{ - //---- copy scfg setting - ldr r2, =HW_PRV_WRAM_SYSRV - ldr r3, =HW_SYS_CONF_BUF - ldr r0, [r2, #HWi_WSYS04_WRAMOFFSET] - str r0, [r3, #HWi_WSYS04_OFFSET] - ldrh r0, [r2, #HWi_WSYS08_WRAMOFFSET] - strh r0, [r3, #HWi_WSYS08_OFFSET] - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_DetectMainMemorySize - - Description: detect main memory size. - result is written into (u32*)HW_MMEMCHECKER_SUB. - value is [OS_CONSOLE_SIZE_4MB|OS_CONSOLE_SIZE_8MB| - OS_CONSOLE_SIZE_16MB|OS_CONSOLE_SIZE_32MB] - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -#define OSi_IMAGE_DIFFERENCE 0x400000 -#define OSi_IMAGE_DIFFERENCE2 0xb000000 -#define OSi_DETECT_NITRO_MASK (REG_SND_SMX_CNT_E_MASK | REG_SND_SMX_CNT_FSEL_MASK) -#define OSi_DETECT_NITRO_VAL (REG_SND_SMX_CNT_E_MASK) - -#define OSi_CHECKNUM1 0x55 -#define OSi_CHECKNUM2 0xaa -#define OSi_100usWAIT 3352 // 100us = 3351.4cycles(33.514MHz) - -static asm void INITi_DetectMainMemorySize( void ) -{ - stmfd sp!, {lr} - - //---- detect memory size - mov r0, #OS_CONSOLE_SIZE_4MB - mov r1, #0 - - ldr r2, =HW_MMEMCHECKER_SUB - sub r3, r2, #OSi_IMAGE_DIFFERENCE -@1: - strh r1, [r2] - ldrh r12, [r3] - cmp r1, r12 - bne @2 - - add r1, r1, #1 - cmp r1, #2 // check 2 loop - bne @1 - - //---- 4MB - b @3 - - //---- 8MB or 16MB or 32MB -@2: - // check if running on twl/nitro - bl INITi_IsRunOnTwl - movne r0, #OS_CONSOLE_SIZE_8MB - bne @3 - - //---- 16MB or 32MB - add r3, r2, #OSi_IMAGE_DIFFERENCE2 - mov r0, #OS_CONSOLE_SIZE_16MB - ldrb r2, [r3] - - mov r1, #OSi_CHECKNUM1 - strb r1, [r3] - - ldr r12, =OSi_100usWAIT -@4 subs r12, r12, #4 - bcs @4 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM1 - bne @3 - - mov r1, #OSi_CHECKNUM2 - strb r1, [r3] - - ldr r12, =OSi_100usWAIT -@5 subs r12, r12, #4 - bcs @5 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM2 - moveq r0, #OS_CONSOLE_SIZE_32MB - -@3: - //---- check SMX_CNT - strb r2, [r3] - ldr r3, =REG_SMX_CNT_ADDR - ldrh r1, [r3] - and r1, r1, #OSi_DETECT_NITRO_MASK - cmp r1, #OSi_DETECT_NITRO_VAL - orreq r0, r0, #OS_CHIPTYPE_SMX_MASK - - ldr r2, =HW_MMEMCHECKER_SUB - strh r0, [r2] - - ldmfd sp!, {lr} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Copy32 - Description: ”\Ȍ 32 oCgPʂŁA[ȕ 4 oCgPʂŃRs[ - sB - X^bN 36 oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - Rs[ւ̃|C^ ( 4 oCgAC )B - r1 - Rs[ւ̃|C^ ( 4 oCgAC )B - r2 - Rs[钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - Rs[̃Rs[ւ̃|C^ ( r0 + r2 )B - r1 - Rs[̃Rs[ւ̃|C^ ( r1 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Copy32(void* dst, void* src, u32 size) -{ - stmfd sp!, {r3-r11} - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - ldmia r1!, {r4-r11} - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - ldmneia r1!, {r4-r7} - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - ldmneia r1!, {r4-r5} - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - ldmneia r1!, {r4} - stmneia r0!, {r4} - ldmfd sp!, {r3-r11} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Fill32 - Description: ”\Ȍ 32 oCgPʂŁA[ȕ 4 oCgPʂŃobt@ - ewf[^Ŗ߂B - X^bN 36 oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - obt@ւ̃|C^ ( 4 oCgAC )B - r1 - obt@𖄂߂e 32 bit lŎwB - r2 - obt@𖄂߂钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - ̃obt@ւ̃|C^ ( r0 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Fill32(void* dst, u32 value, u32 size) -{ - stmfd sp!, {r3-r11} - mov r4, r1 - mov r5, r1 - mov r6, r1 - mov r7, r1 - mov r8, r1 - mov r9, r1 - mov r10, r1 - mov r11, r1 - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - stmneia r0!, {r4} - ldmfd sp!, {r3-r11} - bx lr -} - -#include diff --git a/build/tests/HashCheckTemplate/crt/Makefile b/build/tests/HashCheckTemplate/crt/Makefile deleted file mode 100644 index e7337139..00000000 --- a/build/tests/HashCheckTemplate/crt/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - init -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_PLATFORM := TWL NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = ARM7 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/HashCheckTemplate/crt/common/include/boot_sync.h b/build/tests/HashCheckTemplate/crt/common/include/boot_sync.h deleted file mode 100644 index c744ffe2..00000000 --- a/build/tests/HashCheckTemplate/crt/common/include/boot_sync.h +++ /dev/null @@ -1,35 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - libraries - init - common - File: boot_sync.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef TWL_LIBRARIES_INIT_COMMON_BOOT_SYNC_H_ -#define TWL_LIBRARIES_INIT_COMMON_BOOT_SYNC_H_ -#ifdef __cplusplus -extern "C" { -#endif -/*---------------------------------------------------------------------------*/ - -#define BOOT_SYNC_PHASE_1 1 -#define BOOT_SYNC_PHASE_2 2 -#define BOOT_SYNC_PHASE_3 3 -#define BOOT_SYNC_PHASE_4 4 -#define BOOT_SYNC_PHASE_5 5 -#define BOOT_SYNC_PHASE_6 6 - -/*---------------------------------------------------------------------------*/ -#ifdef __cplusplus -} /* extern "C" */ -#endif -#endif /* TWL_LIBRARIES_INIT_COMMON_BOOT_SYNC_H_ */ diff --git a/build/tests/HashCheckTemplate/memo.txt b/build/tests/HashCheckTemplate/memo.txt deleted file mode 100644 index cf41343d..00000000 --- a/build/tests/HashCheckTemplate/memo.txt +++ /dev/null @@ -1,49 +0,0 @@ -yISfobKR[hύXӏz -EARM9.flx.static, ARM7.flx.static - _start_AutoloadDoneCallback̐擪R[hISfobK̃j^vOւ̕ɏ̂ŁA -@nbV𐳂vZꍇ́ÃAhX̃R[hX̒lł0xE12FFF1E(= BX LR)ɃAvŏĂ -@KvB -Eu[N|Cgݒӏ -@u[N|Cgݒӏ́AfobKɂĖ`߂ߍ܂̂ŁAnbV𐳂vZꍇ́ASĂ -@u[N|Cg𖳌ɂKvB - -ȂÁAP̃u[gȂ牽PAȂOK. - - - -yblowfishÍVXeR[z -ARM9FLX̐擪0x800oCg(2koCg)̓VXeR[zuABlowfishÍĂiÍ̈jB -ŁA`[u[gOɈÍB -wb_ɖߍ܂ĂARM9FLX̃nbV́AÍꂽԂł̃nbVłB -HashCheckTemplateARM9FLX̃nbVvZ鎞_ł́AłɈÍĂ邽߁AvZȂB -ǂɂĉÖÍ̈ɓKvB - - -EROMwb_"NTRJ"̏ꍇ -@AvP[VŏLÍ̈00Ŗ߂ΌvZB -@HashCheckTemplatê悤ȃeXgvOł́AÍ̈00Ŗ߂邽߂łB -@Í̈悪00ł̊mF -@1)ÍA擪0x800oCĝ擪2oCg̈Íʂ"encryObj"łȂꍇ͑Ŝ̈ÍAꏈ -@ ƂĖ`߃R[hi0xe7ffdeffjŖ߂B -@ āAÍ̈ɓ镔sɖ`߃R[hŖ܂Ă̂mFΗǂB - -@2)makeromʔłmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exegpBiSDKɓYtj -@ makeromgpāAMAKEROM_FLAGSŁA-DSYSCALL_C̎wȂꍇAROMwb_nitro_whitelist_phase2_diegst -@ LÍ̈ԂARM9.FLX.static̃nbVli[B - -EROMwb_"NTRJ"ȊO̐ROMwb_gpĂꍇ -@makeromʔłmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exegpBiSDKɓYtj -@makeromgpāAMAKEROM_FLAGS += -DSYSCALL_C='hoge/libsyscall_c.bin'̌`ŁAROMwb_ɓYtĂ -@N[u[gp̃fR[hς݃VXeR[oCiw肷邱ƂŁAROMwb_nitro_whitelist_phase2_diegst -@LÍ̈fR[hԂARM9.FLX.static̃nbVli[B - - - -ystaticTCYgz -@makeromʔłmakerom.TWL.DEBUG.exe/makerom.TWL.sys.DEBUG.exe/makerom.TWL.secure.DEBUG.exegpBiSDKɓYtj -@MAKEROM_FLAGSɉL`lj邱ƂŁAΏۃZOgwTCY_lŊgłB - ARM9.FLX.static : -DARM9FLX_EXPAND=gTCY@i`[Őu[g”\ max TCY = 0x27c000) - ARM7.FLX.static : -DARM7FLX_EXPAND=gTCY@i@@V@@@@@@@@@@ max TCY = 0x40000) - ARM9.LTD.static : -DARM9LTD_EXPAND=gTCY@i@@V@@@@@@@@@@ max TCY = 0x280000) - ARM7.LTD.static : -DARM7LTD_EXPAND=gTCY@i@@V@@@@@@@@@@ max TCY = 0x108000) - diff --git a/build/tests/HashCheckTemplate/test_roms/rombreak.bat b/build/tests/HashCheckTemplate/test_roms/rombreak.bat deleted file mode 100644 index 83c6ea10..00000000 --- a/build/tests/HashCheckTemplate/test_roms/rombreak.bat +++ /dev/null @@ -1,199 +0,0 @@ -mkdir break_dev -mkdir prod -mkdir break_prod - -"../../../tools/rombreaker/rombreaker.exe" -i twl_0E8A.srl -b HEADER -o "break_dev/twl_0E8A.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0E9A.nand.srl -b HEADER -o "break_dev/twl_0E9A.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EAA.srl -b ARM9FLX -o "break_dev/twl_0EAA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EBA.nand.srl -b ARM9FLX -o "break_dev/twl_0EBA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ECA.srl -b ARM7FLX -o "break_dev/twl_0ECA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EDA.nand.srl -b ARM7FLX -o "break_dev/twl_0EDA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EEA.srl -b ARM9LTD -o "break_dev/twl_0EEA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EFA.nand.srl -b ARM9LTD -o "break_dev/twl_0EFA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EGA.srl -b ARM7LTD -o "break_dev/twl_0EGA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EHA.nand.srl -b ARM7LTD -o "break_dev/twl_0EHA.nand.srl" - -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EIA.nand.srl -b HEADER -o "break_dev/twl_0EIA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EJA.nand.srl -b ARM9FLX -o "break_dev/twl_0EJA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EKA.nand.srl -b ARM7FLX -o "break_dev/twl_0EKA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ELA.nand.srl -b ARM9LTD -o "break_dev/twl_0ELA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EMA.nand.srl -b ARM7LTD -o "break_dev/twl_0EMA.nand.srl" - -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ENA.srl -b HEADER -o "break_dev/twl_0ENA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EOA.nand.srl -b HEADER -o "break_dev/twl_0EOA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EPA.srl -b ARM9FLX -o "break_dev/twl_0EPA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EQA.nand.srl -b ARM9FLX -o "break_dev/twl_0EQA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ERA.srl -b ARM7FLX -o "break_dev/twl_0ERA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ESA.nand.srl -b ARM7FLX -o "break_dev/twl_0ESA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0ETA.srl -b ARM9LTD -o "break_dev/twl_0ETA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EUA.nand.srl -b ARM9LTD -o "break_dev/twl_0EUA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EVA.srl -b ARM7LTD -o "break_dev/twl_0EVA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i twl_0EWA.nand.srl -b ARM7LTD -o "break_dev/twl_0EWA.nand.srl" - -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0E8A.srl "prod/twl_0E8A.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0E9A.nand.srl "prod/twl_0E9A.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EAA.srl "prod/twl_0EAA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EBA.nand.srl "prod/twl_0EBA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ECA.srl "prod/twl_0ECA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EDA.nand.srl "prod/twl_0EDA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EEA.srl "prod/twl_0EEA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EFA.nand.srl "prod/twl_0EFA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EGA.srl "prod/twl_0EGA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EHA.nand.srl "prod/twl_0EHA.nand.srl" - -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EIA.nand.srl "prod/twl_0EIA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EJA.nand.srl "prod/twl_0EJA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EKA.nand.srl "prod/twl_0EKA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ELA.nand.srl "prod/twl_0ELA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EMA.nand.srl "prod/twl_0EMA.nand.srl" - -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ENA.srl "prod/twl_0ENA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EOA.nand.srl "prod/twl_0EOA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EPA.srl "prod/twl_0EPA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EQA.nand.srl "prod/twl_0EQA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ERA.srl "prod/twl_0ERA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ESA.nand.srl "prod/twl_0ESA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0ETA.srl "prod/twl_0ETA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EUA.nand.srl "prod/twl_0EUA.nand.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EVA.srl "prod/twl_0EVA.srl" -"%TWL_IPL_RED_PRIVATE_ROOT%/tools/bin/mastering.TWL.exe" -t twl_0EWA.nand.srl "prod/twl_0EWA.nand.srl" - -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0E8A.srl -b HEADER -o "break_prod/twl_0E8A.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0E9A.nand.srl -b HEADER -o "break_prod/twl_0E9A.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EAA.srl -b ARM9FLX -o "break_prod/twl_0EAA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EBA.nand.srl -b ARM9FLX -o "break_prod/twl_0EBA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ECA.srl -b ARM7FLX -o "break_prod/twl_0ECA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EDA.nand.srl -b ARM7FLX -o "break_prod/twl_0EDA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EEA.srl -b ARM9LTD -o "break_prod/twl_0EEA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EFA.nand.srl -b ARM9LTD -o "break_prod/twl_0EFA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EGA.srl -b ARM7LTD -o "break_prod/twl_0EGA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EHA.nand.srl -b ARM7LTD -o "break_prod/twl_0EHA.nand.srl" - -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EIA.nand.srl -b HEADER -o "break_prod/twl_0EIA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EJA.nand.srl -b ARM9FLX -o "break_prod/twl_0EJA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EKA.nand.srl -b ARM7FLX -o "break_prod/twl_0EKA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ELA.nand.srl -b ARM9LTD -o "break_prod/twl_0ELA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EMA.nand.srl -b ARM7LTD -o "break_prod/twl_0EMA.nand.srl" - -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ENA.srl -b HEADER -o "break_prod/twl_0ENA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EOA.nand.srl -b HEADER -o "break_prod/twl_0EOA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EPA.srl -b ARM9FLX -o "break_prod/twl_0EPA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EQA.nand.srl -b ARM9FLX -o "break_prod/twl_0EQA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ERA.srl -b ARM7FLX -o "break_prod/twl_0ERA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ESA.nand.srl -b ARM7FLX -o "break_prod/twl_0ESA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0ETA.srl -b ARM9LTD -o "break_prod/twl_0ETA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EUA.nand.srl -b ARM9LTD -o "break_prod/twl_0EUA.nand.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EVA.srl -b ARM7LTD -o "break_prod/twl_0EVA.srl" -"../../../tools/rombreaker/rombreaker.exe" -i prod/twl_0EWA.nand.srl -b ARM7LTD -o "break_prod/twl_0EWA.nand.srl" - - -mkdir "break_dev/tad" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0E9A.nand.srl -v 0 -o break_dev/tad/twl_0E9A.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EBA.nand.srl -v 0 -o break_dev/tad/twl_0EBA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EDA.nand.srl -v 0 -o break_dev/tad/twl_0EDA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EFA.nand.srl -v 0 -o break_dev/tad/twl_0EFA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EHA.nand.srl -v 0 -o break_dev/tad/twl_0EHA.tad - -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EIA.nand.srl -s -v 0 -o break_dev/tad/twl_0EIA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EJA.nand.srl -s -v 0 -o break_dev/tad/twl_0EJA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EKA.nand.srl -s -v 0 -o break_dev/tad/twl_0EKA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0ELA.nand.srl -s -v 0 -o break_dev/tad/twl_0ELA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EMA.nand.srl -s -v 0 -o break_dev/tad/twl_0EMA.tad - -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EOA.nand.srl -s -v 0 -o break_dev/tad/twl_0EOA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EQA.nand.srl -s -v 0 -o break_dev/tad/twl_0EQA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0ESA.nand.srl -s -v 0 -o break_dev/tad/twl_0ESA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EUA.nand.srl -s -v 0 -o break_dev/tad/twl_0EUA.tad -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe break_dev/twl_0EWA.nand.srl -s -v 0 -o break_dev/tad/twl_0EWA.tad - -mkdir "break_prod/0E9A/v0" -cd "break_prod/0E9A/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0E9A.nand.srl -v 0 -p -o twl_0E9A.tad -mv properties ../ -cd ../../ - -mkdir "0EBA/v0" -cd "0EBA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EBA.nand.srl -v 0 -p -o twl_0EBA.tad -mv properties ../ -cd ../../ - -mkdir "0EDA/v0" -cd "0EDA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EDA.nand.srl -v 0 -p -o twl_0EDA.tad -mv properties ../ -cd ../../ - -mkdir "0EFA/v0" -cd "0EFA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EFA.nand.srl -v 0 -p -o twl_0EFA.tad -mv properties ../ -cd ../../ - -mkdir "0EHA/v0" -cd "0EHA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EHA.nand.srl -v 0 -p -o twl_0EHA.tad -mv properties ../ -cd ../../ - - -mkdir "0EIA/v0" -cd "0EIA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EIA.nand.srl -s -v 0 -p -o twl_0EIA.tad -mv properties ../ -cd ../../ - -mkdir "0EJA/v0" -cd "0EJA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EJA.nand.srl -s -v 0 -p -o twl_0EJA.tad -mv properties ../ -cd ../../ - -mkdir "0EKA/v0" -cd "0EKA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EKA.nand.srl -s -v 0 -p -o twl_0EKA.tad -mv properties ../ -cd ../../ - -mkdir "0ELA/v0" -cd "0ELA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0ELA.nand.srl -s -v 0 -p -o twl_0ELA.tad -mv properties ../ -cd ../../ - -mkdir "0EMA/v0" -cd "0EMA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EMA.nand.srl -s -v 0 -p -o twl_0EMA.tad -mv properties ../ -cd ../../ - - -mkdir "0EOA/v0" -cd "0EOA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EOA.nand.srl -s -v 0 -p -o twl_0EOA.tad -mv properties ../ -cd ../../ - -mkdir "0EQA/v0" -cd "0EQA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EQA.nand.srl -s -v 0 -p -o twl_0EQA.tad -mv properties ../ -cd ../../ - -mkdir "0ESA/v0" -cd "0ESA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0ESA.nand.srl -s -v 0 -p -o twl_0ESA.tad -mv properties ../ -cd ../../ - -mkdir "0EUA/v0" -cd "0EUA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EUA.nand.srl -s -v 0 -p -o twl_0EUA.tad -mv properties ../ -cd ../../ - -mkdir "0EWA/v0" -cd "0EWA/v0" -%TWLSDK_ROOT%/build/tools/maketad/bin/maketad.exe ../../twl_0EWA.nand.srl -s -v 0 -p -o twl_0EWA.tad -mv properties ../ -cd ../../ diff --git a/build/tests/HashCheckTemplate/test_roms/破壊ずみROMの作り方.txt b/build/tests/HashCheckTemplate/test_roms/破壊ずみROMの作り方.txt deleted file mode 100644 index 10b74350..00000000 --- a/build/tests/HashCheckTemplate/test_roms/破壊ずみROMの作り方.txt +++ /dev/null @@ -1,9 +0,0 @@ -TestMaker - -make boottest -make - -ƁÃfBNgƃfBNgɂȂĂԂrombreak.batsB -ivexplorer_uNbNOKj - -braek_devbreak_prod̒srltad܂łB diff --git a/build/tests/JumpToSettingForZonetest/ARM9.TWL/Makefile b/build/tests/JumpToSettingForZonetest/ARM9.TWL/Makefile deleted file mode 100644 index 08b0b206..00000000 --- a/build/tests/JumpToSettingForZonetest/ARM9.TWL/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckPreloadParameters -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -# nandapp ɂꍇ͂̕ӂƂ̃Rg͂ -# rsf̕mediaNandɂi - -TWL_NANDAPP = TRUE - - -SRCS = main.c font.c screen.c keypad.c -LINCLUDES = ./include -SRCDIR = ./src - #TARGET_BIN = NewApp.srl -TARGET_BIN = JumpToSetting.tad -ROM_SPEC = main.rsf - - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe -DEFAULT_MAKEROM_ARM7_BASE = $(TWL_COMPONENTSDIR)/armadillo/$(TWL_BUILDTYPE_ARM7)/armadillo -DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - - MAKETAD_OPTION += -s -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/JumpToSettingForZonetest/ARM9.TWL/include/font.h b/build/tests/JumpToSettingForZonetest/ARM9.TWL/include/font.h deleted file mode 100644 index 9e703b04..00000000 --- a/build/tests/JumpToSettingForZonetest/ARM9.TWL/include/font.h +++ /dev/null @@ -1,43 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - OS - demos - consoleType-1 - File: font.h - - Copyright 2003-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: main.c,v $ - Revision 1.23 2006/01/18 02:11:29 kitase_hirotake - do-indent - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ -#ifndef FONT_H_ -#define FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -extern const u32 d_CharData[8 * 256]; -extern const u32 d_PaletteData[8 * 16]; - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/JumpToSettingForZonetest/ARM9.TWL/include/keypad.h b/build/tests/JumpToSettingForZonetest/ARM9.TWL/include/keypad.h deleted file mode 100644 index 2f5a1602..00000000 --- a/build/tests/JumpToSettingForZonetest/ARM9.TWL/include/keypad.h +++ /dev/null @@ -1,48 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_KEY_PAD_H_ -#define KAMI_KEY_PAD_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void kamiPadRead(void); -BOOL kamiPadIsTrigger(u16 key); -BOOL kamiPadIsRepeatTrigger(u16 key); -BOOL kamiPadIsPress(u16 key); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_KEY_PAD_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/JumpToSettingForZonetest/ARM9.TWL/include/screen.h b/build/tests/JumpToSettingForZonetest/ARM9.TWL/include/screen.h deleted file mode 100644 index 7e55f3e1..00000000 --- a/build/tests/JumpToSettingForZonetest/ARM9.TWL/include/screen.h +++ /dev/null @@ -1,52 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - OS - demos - consoleType-1 - File: screen.h - - Copyright 2003-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: main.c,v $ - Revision 1.23 2006/01/18 02:11:29 kitase_hirotake - do-indent - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ -#ifndef SCREEN_H_ -#define SCREEN_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ -#include - -extern u16 gScreen[32 * 32]; - -#define CONSOLE_BLACK 0 -#define CONSOLE_RED 1 -#define CONSOLE_GREEN 2 -#define CONSOLE_BLUE 3 -#define CONSOLE_YELLOW 4 -#define CONSOLE_WHITE 15 - -void ClearScreen(void); -void PrintString(s16 x, s16 y, u8 palette, char *text, ...); -void ColorString(s16 x, s16 y, s16 length, u8 palette); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* SCREEN_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/JumpToSettingForZonetest/ARM9.TWL/main.rsf b/build/tests/JumpToSettingForZonetest/ARM9.TWL/main.rsf deleted file mode 100644 index 623fabb5..00000000 --- a/build/tests/JumpToSettingForZonetest/ARM9.TWL/main.rsf +++ /dev/null @@ -1,197 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - TitleName "JumpSetting" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode "01" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType SYSTEM - Secure TRUE - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode 0JSA - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 1 - - # - # Use Shared2 fikle size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 128K -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} diff --git a/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/font.c b/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/font.c deleted file mode 100644 index c5c4bf70..00000000 --- a/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/font.c +++ /dev/null @@ -1,580 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - OS - demos - consoleType-1 - File: font.c - - Copyright 2003-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: main.c,v $ - Revision 1.23 2006/01/18 02:11:29 kitase_hirotake - do-indent - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ -#include "font.h" - -/*---------------------------------------------------------------------------* - Character data - *---------------------------------------------------------------------------*/ -const u32 d_CharData[8 * 256] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01010010, 0x01010010, 0x00000110, // 0001h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 00f6h - 0x00100000, 0x00100000, 0x00100000, 0x00111111, - 0x00000000, 0x01010010, 0x01010010, 0x00111111, // 00f7h - 0x00010010, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01010011, 0x01010100, 0x00100011, // 00f8h - 0x00100100, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01010000, 0x01011111, 0x00010000, // 00f9h - 0x00001000, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x01010010, 0x01111111, 0x00100010, // 00fah - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x01010001, 0x01010010, 0x00100000, // 00fbh - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01011110, 0x01010010, 0x00100110, // 00fch - 0x00111001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01011110, 0x00010000, // 00fdh - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x00100101, 0x01001010, 0x00101010, // 00feh - 0x00100000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -}; - - -/*---------------------------------------------------------------------------* - Palette data - *---------------------------------------------------------------------------*/ -const u32 d_PaletteData[8 * 16] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // black - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001f0000, 0x00000000, 0x00000000, 0x00000000, // red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03e00000, 0x00000000, 0x00000000, 0x00000000, // green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c000000, 0x00000000, 0x00000000, 0x00000000, // blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03ff0000, 0x00000000, 0x00000000, 0x00000000, // yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fe00000, 0x00000000, 0x00000000, 0x00000000, // light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00180000, 0x00000000, 0x00000000, 0x00000000, // dark red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03000000, 0x00000000, 0x00000000, 0x00000000, // dark green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, // dark blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03180000, 0x00000000, 0x00000000, 0x00000000, // dark yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60180000, 0x00000000, 0x00000000, 0x00000000, // dark purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x63000000, 0x00000000, 0x00000000, 0x00000000, // dark light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x56b50000, 0x00000000, 0x00000000, 0x00000000, // gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x2d6b0000, 0x00000000, 0x00000000, 0x00000000, // dark gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fff0000, 0x00000000, 0x00000000, 0x00000000, // white - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/keypad.c b/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/keypad.c deleted file mode 100644 index 155c4bc2..00000000 --- a/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/keypad.c +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "keypad.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_TRIGGER_START 20 -#define KEY_REPEAT_TRIGGER_TERM 5 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u16 Cont; -static u16 Trg; -static u16 Release; -static u16 RepeatTrg; -static u8 key = 60; - -static int repeat_counter; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -void -kamiPadRead(void) -{ - u16 ReadData; - - ReadData = PAD_Read(); - Trg = (u16)(ReadData & (ReadData ^ Cont)); - Release = (u16)(Cont & (ReadData ^ Cont)); - Cont = ReadData; - - RepeatTrg = Trg; - if (++repeat_counter > (KEY_REPEAT_TRIGGER_START + KEY_REPEAT_TRIGGER_TERM)) - { - repeat_counter = KEY_REPEAT_TRIGGER_START; - } - if (repeat_counter == KEY_REPEAT_TRIGGER_START) - { - RepeatTrg = ReadData; - } - if (!ReadData) - { - repeat_counter = 0; - } -} - -BOOL -kamiPadIsTrigger(u16 key) -{ - return (Trg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsRepeatTrigger(u16 key) -{ - return (RepeatTrg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsPress(u16 key) -{ - return (Cont & key)? TRUE : FALSE; -} - diff --git a/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/main.c b/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/main.c deleted file mode 100644 index 87a0dc63..00000000 --- a/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/main.c +++ /dev/null @@ -1,174 +0,0 @@ - -#include -#include -#include "font.h" -#include "screen.h" -#include "keypad.h" - -#define DAMMY_TITLEID_HI 0x00030005 -#define DAMMY_TITLEID_LO 0x484e4a00 -#define JUMP_GAMECODE 0x00030015484e4241ULL -#define JUMP_PARAMETER 50 - -void VBlankIntr(void); -void myInit(void); - -void TwlMain( void ) -{ - unsigned char regioncode; - myInit(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - - PrintString(0, 0, CONSOLE_WHITE, "Press A key To AppJump"); - - switch(OS_GetRegion()){ - case OS_TWL_REGION_JAPAN: - regioncode = 'J'; - break; - case OS_TWL_REGION_AMERICA: - regioncode = 'E'; - break; - case OS_TWL_REGION_EUROPE: - regioncode = 'P'; - break; - case OS_TWL_REGION_AUSTRALIA: - regioncode = 'U'; - break; - case OS_TWL_REGION_KOREA: - regioncode = 'K'; - break; - case OS_TWL_REGION_CHINA: - regioncode = 'C'; - break; - default: - PrintString(0, 1, CONSOLE_RED, "Illegal Region setting!"); - OS_Terminate(); - goto ERROR; - } - - - while(1){ - kamiPadRead(); - - if(kamiPadIsTrigger(PAD_BUTTON_A)){ - OSDeliverArgInfo info; - u32 dammycode_lo = (u32)(DAMMY_TITLEID_LO | (u32)regioncode); - - // romheader̃^CgIDx - PrintString(0,3, CONSOLE_WHITE, "%x", dammycode_lo); - OS_WaitVBlankIntr(); - MI_StoreLE32((void*)(HW_TWL_ROM_HEADER_BUF + 0x230), dammycode_lo); - MI_StoreLE32((void*)(HW_TWL_ROM_HEADER_BUF + 0x234), DAMMY_TITLEID_HI); - - OS_InitDeliverArgInfo(&info, 0); - OS_SetSysParamToDeliverArg(JUMP_PARAMETER); - OS_EncodeDeliverArg(); - OS_DoApplicationJump(JUMP_GAMECODE, OS_APP_JUMP_NORMAL); - - PrintString(0, 1, CONSOLE_RED, "Jump Failed"); - } - - OS_WaitVBlankIntr(); - } - -ERROR: - - OS_WaitVBlankIntr(); - OS_Terminate(); -} - - -static void -VBlankIntr(void) -{ - //---- upload pseudo screen to VRAM - DC_FlushRange(gScreen, sizeof(gScreen)); - GX_LoadBG0Scr(gScreen, 0, sizeof(gScreen)); - GXS_LoadBG0Scr(gScreen, 0, sizeof(gScreen)); - - - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // checking VBlank interrupt -} - - -void myInit(void) -{ - //---- init - OS_Init(); - OS_InitTick(); - OS_InitAlarm(); - FX_Init(); - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - //---- init displaying - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - (void)GX_DisableBankForLCDC(); - - MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE); - MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void *)HW_DB_OAM, 192, HW_DB_OAM_SIZE); - MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - //---- setting 2D for top screen - GX_SetBankForBG(GX_VRAM_BG_128_A); - - G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0xf800, GX_BG_CHARBASE_0x00000, GX_BG_EXTPLTT_01); - G2_SetBG0Priority(0); - G2_BG0Mosaic(FALSE); - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - GX_SetVisiblePlane(GX_PLANEMASK_BG0); - - GX_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GX_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - - - - //---- setting 2D for bottom screen - GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C); - - G2S_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0xf800, GX_BG_CHARBASE_0x00000, GX_BG_EXTPLTT_01); - G2S_SetBG0Priority(0); - G2S_BG0Mosaic(FALSE); - GXS_SetGraphicsMode(GX_BGMODE_0); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0); - - GXS_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GXS_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - - - //---- screen - MI_CpuFillFast((void *)gScreen, 0, sizeof(gScreen)); - DC_FlushRange(gScreen, sizeof(gScreen)); - /* DMAIOWX^փANZX̂ŃLbV Wait ͕sv */ - // DC_WaitWriteBufferEmpty(); - GX_LoadBG0Scr(gScreen, 0, sizeof(gScreen)); - GXS_LoadBG0Scr(gScreen, 0, sizeof(gScreen)); - - //---- init interrupt - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - //---- FileSytem init - FS_Init(FS_DMA_NOT_USE); - - //---- start displaying - GX_DispOn(); - GXS_DispOn(); -} - diff --git a/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/screen.c b/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/screen.c deleted file mode 100644 index 5b7b735e..00000000 --- a/build/tests/JumpToSettingForZonetest/ARM9.TWL/src/screen.c +++ /dev/null @@ -1,112 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - OS - demos - consoleType-1 - File: screen.c - - Copyright 2003-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: main.c,v $ - Revision 1.23 2006/01/18 02:11:29 kitase_hirotake - do-indent - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ -#include -#include "screen.h" - -u16 gScreen[32 * 32]; - -/*---------------------------------------------------------------------------* - Name: ClearScreen - - Description: clear screen buffer - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ClearScreen(void) -{ - MI_CpuClearFast((void *)gScreen, sizeof(gScreen)); -} - -/*---------------------------------------------------------------------------* - Name: PrintString - - Description: enter string into screen buffer - string must be within 32 chars - - Arguments: x : x - y : y - palette : color (0-15) - text : string. end mark is NULL - - Returns: None. - *---------------------------------------------------------------------------*/ -void PrintString(s16 x, s16 y, u8 palette, char *text, ...) -{ - va_list vlist; - char temp[32 + 2], *tempPtr; - s32 i; - u16 *p, *pLimit; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0; - p = &gScreen[((y * 32) + x) % (32 * 32)]; - pLimit = &gScreen[32 * 32]; - tempPtr = &temp[0]; - - for (i = 0; *tempPtr; i++, tempPtr++) - { - *p = (u16)((palette << 12) | *tempPtr); - if (++p >= pLimit) - { - p = &gScreen[0]; - } - } -} - -/*---------------------------------------------------------------------------* - Name: ColorString - - Description: change string color which is put in screen buffer - - Arguments: x : x - y : y - length : number of characters to change color - palette : color (0-15) - - Returns: None. - *---------------------------------------------------------------------------*/ -void ColorString(s16 x, s16 y, s16 length, u8 palette) -{ - s32 i; - u16 *p, *pLimit; - - if (length < 0) - return; - - p = &gScreen[((y * 32) + x) % (32 * 32)]; - pLimit = &gScreen[32 * 32]; - - for (i = 0; i < length; i++) - { - u16 temp = *p; - temp &= 0x0fff; - temp |= (palette << 12); - *p = temp; - - if (++p >= pLimit) - { - p = &gScreen[0]; - } - } -} diff --git a/build/tests/JumpToSettingForZonetest/Makefile b/build/tests/JumpToSettingForZonetest/Makefile deleted file mode 100644 index 063c7eaf..00000000 --- a/build/tests/JumpToSettingForZonetest/Makefile +++ /dev/null @@ -1,33 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - camera -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - -#---------------------------------------------------------------------------- - -SUBDIRS = \ - banner \ - ARM9.TWL - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/JumpToSettingForZonetest/banner/Makefile b/build/tests/JumpToSettingForZonetest/banner/Makefile deleted file mode 100644 index e373c033..00000000 --- a/build/tests/JumpToSettingForZonetest/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/JumpToSettingForZonetest/banner/banner_v3.bsf b/build/tests/JumpToSettingForZonetest/banner/banner_v3.bsf deleted file mode 100644 index 8881d35eaeb3ea3ccb5f163a0f58e1489d6c5311..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmc(d%ZkD<6o&t;g6|M;ts;VpSvpvqK}4)G`&e%UFU3~Hmsh`}&f2UT0_nN@NxpM> z?zg&niWSMI;g`X;+Ow8A5{;E%C0LPCZLw>rs{T}$XWp}y?;6dtfh31$^&~Rd=|rR; zHiyvY0(**I;O+5KzbBluWOAZT`@>xkm9*8>Nd14U%vJXbm!nH{fcFE!j%RYYZ%v3) z_@1aXgZ#k1adi~Fy0usKH4ackng*x_bmaAmUy!_3#X9SN+@ZL+<0bou$%-y`#6L zC%NFwbe&)kL8O%9gT+OQ?E6k4sz^k7D4ZdTej@WFYif}Ko2lceI*%M5?53HD0TUq= zaL+qkle1IrpY_YAe_<{+5{>(m8eTAqE%~*6Z1#gc4W+JQwhM>i2rxYl1N8&E!R>vX QQ+-^zH*UMtfAamFFIru_?*IS* diff --git a/build/tests/Launcher_sdlog/Makefile b/build/tests/Launcher_sdlog/Makefile deleted file mode 100644 index 4b5881c4..00000000 --- a/build/tests/Launcher_sdlog/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -export SDLOG ?= ARM9 - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher - -SUBMAKES = sdlog/Makefile scripts/Makefile \ - $(LAUNCHER_DIR)/banner/Makefile $(LAUNCHER_DIR)/ARM9/Makefile_sdlog - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/Launcher_sdlog/jackal.TWL/Makefile b/build/tests/Launcher_sdlog/jackal.TWL/Makefile deleted file mode 100644 index c72c408c..00000000 --- a/build/tests/Launcher_sdlog/jackal.TWL/Makefile +++ /dev/null @@ -1,58 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - mongoose.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -# Definition to override for jackal with sdlog -# - -LLIBRARIES += libossdlog_sp$(TWL_LIBSUFFIX).a -LLIBRARY_DIRS += $(call eupath, $(TWL_IPL_RED_ROOT)/build/tests/Launcher_sdlog/lib/$(TWL_LIBTYPE)) - -COMPONENT_DIR += $(SYSMENU_ROOT)/build/components/jackal.TWL -COMPONENT_SRC_DIR += $(COMPONENT_DIR)/../hyena.TWL/src - -override SUBDIRS = $(SYSMENU_ROOT)/build/libraries/aes \ - $(SYSMENU_ROOT)/build/components/jackal.TWL/wram_regs - -override SRCS =$(COMPONENT_SRC_DIR)/crt0.LTD.c $(COMPONENT_SRC_DIR)/main.c $(COMPONENT_SRC_DIR)/initScfg.c - -override TARGET_NAME = jackal - -# Generate my own lsf from original lsf of mongoose -LSF_ORG = $(COMPONENT_DIR)/$(TARGET_NAME).lsf -MAKE_LSF = make_lsf.pl -AUTOGEN_LSF = $(TARGET_NAME)_sdlog.lsf - -LDIRT_CLEAN = $(AUTOGEN_LSF) - -override TARGET_NEF = $(TARGET_NAME).tef -override LCFILE_SPEC = $(AUTOGEN_LSF) -override LCFILE_TEMPLATE = $(COMPONENT_DIR)/$(TARGET_NAME).lcf.template - -override TWL_INSTALL_COMPONENTSDIR= $(call eupath, $(TWL_IPL_RED_ROOT)/build/tests/Launcher_sdlog/components) -override INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE) - -# - -include $(TWL_IPL_RED_ROOT)/build/components/jackal.TWL/Makefile - -$(AUTOGEN_LSF): $(LSF_ORG) $(MAKE_LSF) - @echo " make:" $@ - @perl $(MAKE_LSF) $(TARGET_NAME) - -#===== End of Makefile ===== - diff --git a/build/tests/Launcher_sdlog/jackal.TWL/make_lsf.pl b/build/tests/Launcher_sdlog/jackal.TWL/make_lsf.pl deleted file mode 100755 index cc4770f1..00000000 --- a/build/tests/Launcher_sdlog/jackal.TWL/make_lsf.pl +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlWLAN - components - mongoose_sdlog.TWL -# File: make_lsf.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $ROOT; - -my $COMPONENT = $ARGV[0]; -print $COMPONENT; -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $ROOT = $ENV{$_}; - } -} - -my $src = sprintf("$ROOT/build/components/%s.TWL/%s.lsf", $COMPONENT, $COMPONENT); -my $dst = sprintf("%s_sdlog.lsf", $COMPONENT); - - -my $rn = "\x0D\x0A"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/libos_sp/ ) - { - my $tmp = $line; - $tmp =~ s/libos_sp/libossdlog_sp/; - - print OUT $tmp; - next; - } - - print OUT $line; -} -close(OUT); diff --git a/build/tests/Launcher_sdlog/readme.txt b/build/tests/Launcher_sdlog/readme.txt deleted file mode 100644 index 1a1c542a..00000000 --- a/build/tests/Launcher_sdlog/readme.txt +++ /dev/null @@ -1,48 +0,0 @@ - SDLOGΉŃ`[ɂ‚ - -@ł̂ŃfobOpɁASDJ[hɃfobOvgo͂郉`[łB - -TwlIPL/build/tests/Launcher_sdlogɈړărhƁA -fBNgHNAA.tad쐬܂̂ŁANandInitializerImportĉB - -ARM9̃fobOvĝ݂o - -$ make SDLOG=ARM9 - -ARM9/ARM7̃fobOvgo - -$ make SDLOG=ALL - - - SDLOG()CuKt@X - -// SDLOGVXe̊JnBJnȍ~AOS_PrintfnASDOobt@ɒ~ρSDJ[hos܂B -// -// path: o͂t@CuSDJ[h̃fBNg(:sdmc:/log) -// filename: o͂t@C -// buffer: ÖꎞBʂ̃Ocꍇ 1KB ȏ𐄏 -// partitionSize: SD J[hɏރTCYB bufferSize 1/n 𐄏 -// writeType: ㏑ or NjL̎wBt@C݂Ȃꍇ͂ǂVK쐬ƂȂ - -BOOL SDLOG_InitEx(const char* path, const char* filename, char* buffer, u16 bufferSize, u16 partitionSize, SDLOGWriteType writeType); - -// OS_PrintfnȂ -// path: ۑB sdmc:/sample Ǝw肷 sdmc:/sample/Log0.log -// Oۑ(t@C͌ŒłB) -BOOL SDLOG_Init(const char* path, char* buffer, u16 bufferSize, u16 partitionSize, SDLOGWriteType writeType); - - -// SDLOGɃfobOoB -void SDLOG_Printf(const char *fmt, ...); - -// obt@ɒ߂ꂽOI SD J[hɏ -// ł͊mɃOoƂꏊɒlj邱Ƃ𐄏B -void SDLOG_Flush(void); - -// ܂oĂȂO SD J[hɏŃt@CN[Y -void SDLOG_FinishEx(void); // OS_Printf -void SDLOG_Finish(void); // OS_PrintfȂ - -// ARM7̃fobOOo -void SDLOG_PrintServer(void); - diff --git a/build/tests/Launcher_sdlog/scripts/Makefile b/build/tests/Launcher_sdlog/scripts/Makefile deleted file mode 100644 index 75bcf9e9..00000000 --- a/build/tests/Launcher_sdlog/scripts/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher - -SYSMENU_LIBRARIES_DIR = $(SYSMENU_ROOT)/build/libraries_sysmenu - -SYSTEMUPDATER_DIR = $(SYSMENU_ROOT)/build/systemMenu_tools/SystemUpdater - -SCRIPTS_DIR = . - -MAKEFILES_ORG = $(LAUNCHER_DIR)/ARM9/Makefile -MAKE_MAKEFILES = $(SCRIPTS_DIR)/sdlog_makefile.pl -AUTOGEN_MAKEFILES = $(LAUNCHER_DIR)/ARM9/Makefile_sdlog -LDIRT_CLEAN += $(AUTOGEN_MAKEFILES) - -MAIN_ORG = $(LAUNCHER_DIR)/ARM9/src/main.c -MAKE_MAIN = $(SCRIPTS_DIR)/sdlog_main_c.pl -AUTOGEN_MAIN = $(LAUNCHER_DIR)/ARM9/src/main_sdlog.c -LDIRT_CLEAN += $(AUTOGEN_MAIN) - - - -TARGETS = $(AUTOGEN_MAKEFILES) $(AUTOGEN_MAIN) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -$(AUTOGEN_MAKEFILES): $(MAKEFILES_ORG) $(MAKE_MAKEFILES) - @echo " make:" $@ - @perl $(MAKE_MAKEFILES) - -$(AUTOGEN_MAIN): $(MAIN_ORG) $(MAKE_MAIN) - @echo " make:" $@ - @perl $(MAKE_MAIN) - -#===== End of Makefile ===== diff --git a/build/tests/Launcher_sdlog/scripts/sdlog_main_c.pl b/build/tests/Launcher_sdlog/scripts/sdlog_main_c.pl deleted file mode 100755 index 4ac96bbd..00000000 --- a/build/tests/Launcher_sdlog/scripts/sdlog_main_c.pl +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: sdlog_main_c.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $src = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/src/main.c"; -my $dst = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/src/main_sdlog.c"; - - -my $rn = "\x0D\x0A"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - print OUT $line; - - if( $line =~ m/^\#include \"scanWDS\.h\"/ ) - { - print OUT "//\t[AUTO COMMENT] SDLOG̃wb_CN[hAOpobt@`܂B", $rn; - print OUT <<__SDLOG_DEFINE__; -\#ifdef USE_SDLOG -\#include "sd_log_wrapper.h" -\#define BUFFER_SIZE 0x800 -char logBuffer[ (BUFFER_SIZE + 1) ]; -\#endif -__SDLOG_DEFINE__ - } - if( $line =~ m/^[\t ]*RTC_Init\(\);/ ) - { - print OUT "//\t[AUTO COMMENT] SDJ[hOS_Printf̃OL^邽߂ɁASDLOG܂B", $rn; - print OUT <<__SDLOG_INITEX__; -\#ifdef USE_SDLOG - { - RTCDate rDate; - RTCTime rTime; - char filename[FS_ENTRY_LONGNAME_MAX]; - - (void)RTC_GetDateTime(&rDate, &rTime); - OS_SPrintf(filename, "Launcher_%02d%02d%02d_%02d%02d.txt", - rDate.year, rDate.month, rDate.day, - rTime.hour, rTime.minute); - - SDLOG_InitEx("sdmc:/log", filename, logBuffer, - BUFFER_SIZE, 0x80, SDLOG_WRITE_TYPE_CONTINUANCE); - } -\#endif -__SDLOG_INITEX__ - } - - if( $line =~ m/^[\t ]*OS_SetIrqCheckFlag\(OS_IE_V_BLANK\);/ ) - { - print OUT <<__SDLOG_PRINTARM7__; -\#ifdef USE_SDLOG -\#ifdef USE_SDLOG_SUBP - SDLOG_PrintServer(); -\#endif -\#endif -__SDLOG_PRINTARM7__ - } - -} -close(OUT); - diff --git a/build/tests/Launcher_sdlog/scripts/sdlog_makefile.pl b/build/tests/Launcher_sdlog/scripts/sdlog_makefile.pl deleted file mode 100755 index 04931aa7..00000000 --- a/build/tests/Launcher_sdlog/scripts/sdlog_makefile.pl +++ /dev/null @@ -1,103 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: sdlog_makefile.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $rn = "\x0D\x0A"; - -my $src = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile"; -my $dst = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile_sdlog"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/main\.c/ ) - { - $line =~ s/main\.c/main_sdlog\.c/; - } - - if( $line =~ m/^COMPONENT_DIR/ ) - { - $line =~ s/\/build\/components/\/build\/tests\/Launcher_sdlog/; - print OUT $line; - print OUT "override COMPONENTSDIR\t=\t\$(call eupath, \$(COMPONENT_DIR)/../components)", $rn; - next; - } - - if( $line =~ m/^WRAM_MAP_FILE[\t ]*=[\t ]*\$\(COMPONENT_DIR\)\/wram_regs\/wram_regs.rbin/ ) - { - $line =~ s/\$\(COMPONENT_DIR\)/\$\(TWL_IPL_RED_ROOT\)\/build\/components\/\$\(DEFAULT_COMP_ARM7\)\.TWL/; - } - - if( $line =~ m/^INSTALL_DIR/ ) - { - $line =~ s/\$\(SDK_NMENU_DATADIR\)/\$\(TWL_IPL_RED_ROOT\)\/build\/tests\/Launcher_sdlog/; - } - - if( $line =~ m/^TARGET_BIN[\t ]*=[\t ]*\$\(TITLEID_LO\)\.tad/ ) - { - $line =~ s/\.tad/_sdlog\.tad/; - print OUT <<__SDLOG_DESCRIPTIONS__; -\# -------------------------------------------------------------- -\# SDLOG -ifeq (\$(TWL_FINALROM),) \# SDLOG is enabled only on Release and Debug - -ifeq (\$(SDLOG), TRUE) -override SDLOG = ARM9 -endif - -ifneq (\$(filter ARM7,\$(SDLOG)),) -\$(error "Invalid SDLOG option : should be SDLOG=[ARM9/ALL]") -endif - -SDLOG_LIST = \$(if \$(filter ALL,\$(SDLOG)),ARM7 ARM9,\$(SDLOG)) - -ifneq (\$(filter ARM9,\$(SDLOG_LIST)),) -MACRO_FLAGS += -DUSE_SDLOG -ELIBRARIES += libsdlogRed\$(TWL_LIBSUFFIX).a -ELIBRARY_DIRS += \$(SYSMENU_ROOT)/build/tests/Launcher_sdlog/lib/\$(TWL_LIBTYPE) -EINCLUDES += \$(SYSMENU_ROOT)/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/include \\ - \$(ROOT)/build/tests/sdlog/sdlog/include -ifneq (\$(filter ARM7,\$(SDLOG_LIST)),) -MACRO_FLAGS += -DUSE_SDLOG_SUBP -endif \# SDLOG [ARM7] -endif \# SDLOG [ARM9] - -endif \# FINALROM - -__SDLOG_DESCRIPTIONS__ - } - - print OUT $line; -} -close(OUT); - diff --git a/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/Makefile b/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/Makefile deleted file mode 100644 index 75ec2c71..00000000 --- a/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/Makefile +++ /dev/null @@ -1,100 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- -override TARGET_PLATFORM = TWL - -TARGET_CODEGEN ?= ARM -TWL_ARCHGEN ?= LIMITED -TWL_PROC = ARM7 - -OS_LIBRARY_SRC_DIR_BASE = $(ROOT)/build/libraries/os -OS_LIBSRC_ARM7 = $(OS_LIBRARY_SRC_DIR_BASE)/ARM7/src -OS_LIBSRC_ARM7TWL = $(OS_LIBRARY_SRC_DIR_BASE)/ARM7.TWL/src -OS_LIBSRC_COMMON = $(OS_LIBRARY_SRC_DIR_BASE)/common/src - -SRCDIR = src ../common/src ../ARM7/src -INCDIR = $(OS_LIBSRC_ARM7TWL)/../../common/include - -SRCS = $(OS_LIBSRC_ARM7TWL)/os_irqHandler.c \ - $(OS_LIBSRC_COMMON)/os_irqTable.c \ - $(OS_LIBSRC_COMMON)/os_interrupt.c \ - $(OS_LIBSRC_COMMON)/os_pxi.c \ - $(OS_LIBSRC_COMMON)/os_spinLock.c \ - os_printf.c \ - $(OS_LIBSRC_COMMON)/os_thread.c \ - $(OS_LIBSRC_COMMON)/os_context.c \ - $(OS_LIBSRC_COMMON)/os_emulator.c \ - $(OS_LIBSRC_COMMON)/os_message.c \ - $(OS_LIBSRC_COMMON)/os_mutex.c \ - $(OS_LIBSRC_COMMON)/os_init.c \ - $(OS_LIBSRC_COMMON)/os_arena.c \ - $(OS_LIBSRC_COMMON)/os_alloc.c \ - $(OS_LIBSRC_COMMON)/os_exception.c \ - $(OS_LIBSRC_COMMON)/os_timer.c \ - $(OS_LIBSRC_COMMON)/os_tick.c \ - $(OS_LIBSRC_COMMON)/os_alarm.c \ - $(OS_LIBSRC_COMMON)/os_valarm.c \ - $(OS_LIBSRC_COMMON)/os_system.c \ - $(OS_LIBSRC_COMMON)/os_systemWork.c \ - $(OS_LIBSRC_COMMON)/os_profile.c \ - $(OS_LIBSRC_COMMON)/os_reset.c \ - $(OS_LIBSRC_COMMON)/os_ownerInfo.c \ - $(OS_LIBSRC_COMMON)/os_ownerInfoEx.c \ - $(OS_LIBSRC_COMMON)/os_entropy.c \ - $(OS_LIBSRC_ARM7)/os_terminate_sp.c \ - $(OS_LIBSRC_COMMON)/os_event.c \ - $(OS_LIBSRC_COMMON)/os_application_jump.c - -TARGET_LIB = libossdlog_sp$(TWL_LIBSUFFIX).a - -#---------------------------------------------------------------------------- - -# DEBUGŃrh̏ꍇARELEASEłŃrh -# DEBUGł̃Cu𑕂܂B - -ifdef TARGET_DEBUG -TWL_BUILD_TYPE = RELEASE -else -ifdef TWL_DEBUG -TWL_BUILD_TYPE = RELEASE -else -ifdef NITRO_DEBUG -TWL_BUILD_TYPE = RELEASE -endif -endif -endif - -#---------------------------------------------------------------------------- -# HYBRID / LIMITED ̃Cu쐬܂ -TWL_ARCHGEN ?= ALL - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -INSTALL_TARGETS = $(TARGETS) -INSTALL_DIR = $(TWL_IPL_RED_ROOT)/build/tests/Launcher_sdlog/lib/$(TWL_LIBTYPE) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/src/os_printf.c b/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/src/os_printf.c deleted file mode 100644 index 44c337ea..00000000 --- a/build/tests/Launcher_sdlog/sdlog/ARM7.TWL/src/os_printf.c +++ /dev/null @@ -1,1536 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - libraries - OS - File: os_printf.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include - -//---------------- for IS-NITRO-DEBUGGER -#ifdef SDK_LINK_ISD -# pragma warn_extracomma off -# include // has extracomma in enum -# pragma warn_extracomma reset -#else -void ISDPrint(const char *); -#endif - -//---------------- for IS-TWL-DEBUGGER -#ifdef SDK_LINK_ISTD -# pragma warn_extracomma off -# include // has extracomma in enum -# pragma warn_extracomma reset -#else -void ISTDPrintEx(int console, const char *); -#endif -//---- print output -#ifdef SDK_ARM9 -#define OSi_PRINT_OUTPUT (*(u8*)HW_PRINT_OUTPUT_ARM9) -#define OSi_PRINT_ERR_OUTPUT (*(u8*)HW_PRINT_OUTPUT_ARM9ERR) -#else -#define OSi_PRINT_OUTPUT (*(u8*)HW_PRINT_OUTPUT_ARM7) -#define OSi_PRINT_ERR_OUTPUT (*(u8*)HW_PRINT_OUTPUT_ARM7ERR) -#endif - -#ifndef SDK_FINALROM -static char common_buffer[256]; // thread unsafe, but less use of stack -#endif - -#if !defined(SDK_FINALROM) && defined(SDK_NO_MESSAGE) -#undef OSi_Warning -#undef OSi_TWarning -#undef OSi_Panic -#undef OSi_TPanic -void OSi_Warning(const char *file, int line, const char *fmt, ...); -void OSi_TWarning(const char *file, int line, const char *fmt, ...); -void OSi_Panic(const char *file, int line, const char *fmt, ...); -void OSi_TPanic(const char *file, int line, const char *fmt, ...); -#endif /* SDK_NO_MESSAGE */ - - -/*---------------------------------------------------------------------------* - Name: OS_PutChar - OS_FPutChar - - Description: put a letter for debug console - - Arguments: console : output window - c : char code , shuild be 0x01-0xff - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OS_PutChar(char c) -{ - OS_FPutChar((int)OSi_PRINT_OUTPUT, c); -} - -SDK_WEAK_SYMBOL void OS_FPutChar(int console, char c) -{ - char str[2]; - - str[0] = c; - str[1] = '\0'; - - // Because of no putchar-type function on ISDebugger library, - // use 'putstring' for a single letter outputting - OS_FPutString(console, str); -} -#endif - -/*---------------------------------------------------------------------------* - Name: OS_FPutString - - Description: put a string to debug console. - console port are automatically switched depends on emu/hw - - Arguments: console : output window - str : string - - Returns: None. - *---------------------------------------------------------------------------*/ -static void OS_PutStringDefault(const char* str); -static void OS_FPutStringInit(int console, const char *str); - -#ifndef SDK_FINALROM -static void OS_FPutStringDummy(int console, const char *str); -static void OS_FPutStringAris(int console, const char *str); -static void OS_FPutStringISD(int console, const char *str); -static void OS_FPutStringISTD(int console, const char *str); -#ifdef SDK_ARM7 -static void OS_FPutStringPrnSrv(int console, const char *str); -#endif -#endif - -#ifndef SDK_FINALROM -void (*OS_PutString) (const char *str) = OS_PutStringDefault; -void (*OS_FPutString) (int console, const char *str) = OS_FPutStringInit; -void (*OSi_FuncTerminate) (void) = OS_Terminate; -//---- hook function -static OSFPutStringHookType OSi_FPutStringHook = NULL; -#endif - - -/*---------------------------------------------------------------------------* - Name: OS_PutStringDefault - Description: OS_PutString initializer - *---------------------------------------------------------------------------*/ -static void OS_PutStringDefault(const char* str) -{ -#pragma unused(str) -#ifndef SDK_FINALROM - OS_FPutString(OS_PRINT_OUTPUT_CURRENT, str); -#endif -} - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringInit - Description: OS_FPutString initializer - *---------------------------------------------------------------------------*/ -static void OS_FPutStringInit(int console, const char *str) -{ -#ifndef SDK_FINALROM - OSIntrMode intr = OS_DisableInterrupts(); - u32 consoleType = OS_GetConsoleType(); - - OS_FPutString = OS_FPutStringDummy; - -#ifdef SDK_ARM9 - //---- arm9 - if ( consoleType & OS_CONSOLE_ENSATA ) - { - OS_FPutString = OS_FPutStringAris; - } - else if ( consoleType & OS_CONSOLE_TWLDEBUGGER ) - { - OS_FPutString = OS_FPutStringISTD; - } - else if ( consoleType & OS_CONSOLE_ISDEBUGGER ) - { -#ifndef SDK_TWLLTD - OS_FPutString = OS_FPutStringISD; -#endif - } -#else - //---- arm7 -// if ( consoleType & OS_CONSOLE_TWLDEBUGGER ) -// { -// OS_FPutString = OS_FPutStringISTD; -// } -// else - { - OS_FPutString = OS_FPutStringPrnSrv; - } -#endif - - OS_FPutString(console, str); - - (void)OS_RestoreInterrupts(intr); - -#else -#pragma unused(console, str) -#endif -} - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringDummy - Description: dummy OS_FPutString. do nothing. - *---------------------------------------------------------------------------*/ -static void OS_FPutStringDummy(int console, const char *str) -{ -#pragma unused(console, str) -#ifndef SDK_FINALROM - if ( OSi_FPutStringHook ) - { - OSi_FPutStringHook(OS_FPUTSTRING_DUMMY, console, str); - } -#endif -} - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringAris - Description: OS_FPutString for software simulator called ARIS - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -#ifdef SDK_CW_WARNOFF_SAFESTRB -#include -#endif -static void OS_FPutStringAris(int console, const char *str) -{ - char c; - - if ( console == OS_PRINT_OUTPUT_CURRENT ) - { - console = (int)OSi_PRINT_OUTPUT; - } - else if ( console == OS_PRINT_OUTPUT_ERROR ) - { - console = (int)OSi_PRINT_ERR_OUTPUT; - } - - if ( console != OS_PRINT_OUTPUT_NONE ) - { - while ('\0' != (c = *str)) - { - reg_OS_EMU_CONSOLE_OUT = (u8)c; // Console out - str++; - } - if ( OSi_FPutStringHook ) - { - OSi_FPutStringHook(OS_FPUTSTRING_ARIS, console, str); - } - } -} -#ifdef SDK_CW_WARNOFF_SAFESTRB -#include -#endif -#endif - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringISD - Description: OS_FPutString for hardware emulator called IS Debugger - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -static void OS_FPutStringISD(int console, const char *str) -{ - // ISDPrint ̏ - OS_InitLock(); - - if ( console == OS_PRINT_OUTPUT_CURRENT ) - { - console = (int)OSi_PRINT_OUTPUT; - } - else if ( console == OS_PRINT_OUTPUT_ERROR ) - { - console = (int)OSi_PRINT_ERR_OUTPUT; - } - - if ( console != OS_PRINT_OUTPUT_NONE ) - { - ISDPrint(str); - if ( OSi_FPutStringHook ) - { - OSi_FPutStringHook(OS_FPUTSTRING_ISD, console, str); - } - } -} -#endif - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringISTD - Description: OS_FPutString for hardware emulator called IS TWL Debugger - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -static void OS_FPutStringISTD(int console, const char *str) -{ - // ISTDPrintEx ̏ - OS_InitLock(); - - if ( console == OS_PRINT_OUTPUT_CURRENT ) - { - console = (int)OSi_PRINT_OUTPUT; - } - else if ( console == OS_PRINT_OUTPUT_ERROR ) - { - console = (int)OSi_PRINT_ERR_OUTPUT; - } - - if ( console != OS_PRINT_OUTPUT_NONE ) - { - ISTDPrintEx(console, str); - if ( OSi_FPutStringHook ) - { - OSi_FPutStringHook(OS_FPUTSTRING_ISTD, console, str); - } - } -} -#endif - - -/*---------------------------------------------------------------------------* - Name: OS_VPrintf/OS_TVPrintf - - Description: print formatted strings (vprintf ver.) - - Arguments: fmt : format string - vlist : parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -// If you want to use "vsnprintf()" in ARM7, define SDK_USE_VSNPRINTF. -// "vsnprintf()" is able to print float format but the code size become hugely bigger. -// #define SDK_USE_VSNPRINTF - -#ifndef SDK_FINALROM -#if defined(SDK_ARM9) || defined(SDK_USE_VSNPRINTF) -SDK_WEAK_SYMBOL void OS_VPrintf(const char *fmt, va_list vlist) -{ - OS_VFPrintf(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); -} -SDK_WEAK_SYMBOL void OS_VFPrintf(int console, const char *fmt, va_list vlist) -{ - (void)vsnprintf(common_buffer, sizeof(common_buffer), fmt, vlist); - OS_FPutString(console, common_buffer); -} -#else -SDK_WEAK_SYMBOL void OS_VPrintf(const char *fmt, va_list vlist) -{ - OS_TVFPrintf(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); -} -SDK_WEAK_SYMBOL void OS_VFPrintf(int console, const char *fmt, va_list vlist) -{ - OS_TVFPrintf(console, fmt, vlist); -} -#endif -SDK_WEAK_SYMBOL void OS_TVPrintf(const char *fmt, va_list vlist) -{ - OS_TVFPrintf(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); -} -SDK_WEAK_SYMBOL void OS_TVFPrintf(int console, const char *fmt, va_list vlist) -{ - (void)OS_VSNPrintf(common_buffer, sizeof(common_buffer), fmt, vlist); - OS_FPutString(console, common_buffer); -} -SDK_WEAK_SYMBOL void OS_TVPrintfEx(const char *fmt, va_list vlist) -{ - OS_TVFPrintfEx(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); -} -SDK_WEAK_SYMBOL void OS_TVFPrintfEx(int console, const char *fmt, va_list vlist) -{ - (void)OS_VSNPrintfEx(common_buffer, sizeof(common_buffer), fmt, vlist); - OS_FPutString(console, common_buffer); -} -#endif - -/*---------------------------------------------------------------------------* - Name: OS_Printf/OS_TPrintf/OS_TPrintfEx - OS_FPrintf/OS_TFPrintf/OS_TFPrintfEx - - Description: print formatted strings. - - Arguments: console : output window - fmt : format string - ... and parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OS_Printf(const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_VFPrintf(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); - va_end(vlist); -} - -SDK_WEAK_SYMBOL void OS_FPrintf(int console, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_VFPrintf(console, fmt, vlist); - va_end(vlist); -} - -SDK_WEAK_SYMBOL void OS_TPrintf(const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TVFPrintf(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); - va_end(vlist); -} - -SDK_WEAK_SYMBOL void OS_TFPrintf(int console, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TVFPrintf(console, fmt, vlist); - va_end(vlist); -} - -SDK_WEAK_SYMBOL void OS_TPrintfEx(const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TVFPrintfEx(OS_PRINT_OUTPUT_CURRENT, fmt, vlist); - va_end(vlist); -} - -SDK_WEAK_SYMBOL void OS_TFPrintfEx(int console, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TVFPrintfEx(console, fmt, vlist); - va_end(vlist); -} -#endif - - -/*---------------------------------------------------------------------------* - Name: OSi_Warning / OSi_TWarning - - Description: print warning message. - - Arguments: file : filename of warning location - line : line number of warning location - fmt : format string - ... and parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OSi_Warning(const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_FPrintf(OS_PRINT_OUTPUT_ERROR, "%s:%d Warning:", file, line); - OS_VFPrintf(OS_PRINT_OUTPUT_ERROR, fmt, vlist); - OS_FPrintf(OS_PRINT_OUTPUT_ERROR, "\n"); - va_end(vlist); -} - - -SDK_WEAK_SYMBOL void OSi_TWarning(const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TPrintf("%s:%d Warning:", file, line); - OS_TVPrintf(fmt, vlist); - OS_TPrintf("\n"); - va_end(vlist); -} -#endif - -/*---------------------------------------------------------------------------* - Name: OSi_Panic/OSi_TPanic - - Description: print panic message and halt cpu. - - Arguments: file : filename of panic location - line : line number of panic location - fmt : format string - ... and parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OSi_Panic(const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - (void)OS_DisableInterrupts(); - OS_FPrintf(OS_PRINT_OUTPUT_ERROR, "%s:%d Panic:", file, line); - OS_VFPrintf(OS_PRINT_OUTPUT_ERROR, fmt, vlist); - OS_FPrintf(OS_PRINT_OUTPUT_ERROR, "\n"); - OSi_FuncTerminate(); // Never Returns -} - -SDK_WEAK_SYMBOL void OSi_TPanic(const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - (void)OS_DisableInterrupts(); - OS_TPrintf("%s:%d Panic:", file, line); - OS_TVPrintf(fmt, vlist); - OS_TPrintf("\n"); - OSi_FuncTerminate(); // Never Returns -} -#endif - -/*---------------------------------------------------------------------------* - Name: OSi_FWarning / OSi_TFWarning - - Description: print warning message. - - Arguments: console : output window - file : filename of warning location - line : line number of warning location - fmt : format string - ... and parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OSi_FWarning(int console, const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_FPrintf(console, "%s:%d Warning:", file, line); - OS_VFPrintf(console, fmt, vlist); - OS_FPrintf(console, "\n"); - va_end(vlist); -} - - -SDK_WEAK_SYMBOL void OSi_TFWarning(int console, const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - OS_TFPrintf(console, "%s:%d Warning:", file, line); - OS_TVFPrintf(console, fmt, vlist); - OS_TFPrintf(console, "\n"); - va_end(vlist); -} -#endif - -/*---------------------------------------------------------------------------* - Name: OSi_FPanic/OSi_TFPanic - - Description: print panic message and halt cpu. - - Arguments: file : filename of panic location - line : line number of panic location - fmt : format string - ... and parameters - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifndef SDK_FINALROM -SDK_WEAK_SYMBOL void OSi_FPanic(int console, const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - (void)OS_DisableInterrupts(); - OS_FPrintf(console, "%s:%d Panic:", file, line); - OS_VFPrintf(console, fmt, vlist); - OS_FPrintf(console, "\n"); - OSi_FuncTerminate(); // Never Returns -} - -SDK_WEAK_SYMBOL void OSi_TFPanic(int console, const char *file, int line, const char *fmt, ...) -{ - va_list vlist; - - va_start(vlist, fmt); - (void)OS_DisableInterrupts(); - OS_TFPrintf(console, "%s:%d Panic:", file, line); - OS_TVFPrintf(console, fmt, vlist); - OS_TFPrintf(console, "\n"); - OSi_FuncTerminate(); // Never Returns -} -#endif - -/*---------------------------------------------------------------------------* - Name: OS_InitPrintServer - - Description: initialize print server - - this code should be called before OS_InitLock() - - OS_InitLock() are also called from OS_Init() - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -#ifdef SDK_ARM9 -#ifndef SDK_FINALROM -void OS_InitPrintServer(void) -{ - OSPrintServerBuffer *p; - - // first, allocate buffer and register it. - OS_InitArena(); - p = OS_AllocFromSharedArenaHi(sizeof(OSPrintServerBuffer), 4); - p->in = p->out = 0UL; - PXI_SetComponentParam((u32)p); -} -#endif //SDK_FINALROM -#endif //SDK_ARM9 - - -/*---------------------------------------------------------------------------* - Name: OS_PrintServer - - Description: print a string comes from ARM7 via shared memory - - Arguments: str : string - - Returns: None. - *---------------------------------------------------------------------------*/ -#ifdef SDK_ARM9 -#ifndef SDK_FINALROM -#include // to access 'common_buffer' via cache -void OS_PrintServer(void) -{ - OSPrintServerBuffer *p; - register OSPrintWChar word; - - u32 in, out; - int i; - - p = (OSPrintServerBuffer *)PXI_GetComponentParam(); - - //---- If print buffer isn't set up, do nothing. - if (!p) - { - return; - } - - out = p->out; - in = p->in; - - while (in != out) - { - i = 0; - - while (in != out && i < sizeof(common_buffer) - 3) - { - word.s = p->buffer[out].s; - if (word.c[0]) - { - common_buffer[i++] = word.c[0]; // store via cache - - if (word.c[1]) - { - common_buffer[i++] = word.c[1]; // store via cache - } - } - out++; - if (out >= OS_PRINTSRV_WCHARSIZE) - out = 0; - } - common_buffer[i] = '\0'; // store via cache - OS_FPutString(OS_PRINT_OUTPUT_CURRENT, common_buffer); - } - - // tell finished - p->out = out; -} - -#include -#endif //SDK_FINALROM -#endif //SDK_ARM9 - - -/*---------------------------------------------------------------------------* - Name: OS_FPutStringPrnSrv - - Description: sends string to ARM9 via shared memory - - Arguments: console : output window - str : string to be sent - - Returns: None - *---------------------------------------------------------------------------*/ -#ifdef SDK_ARM7 -static void OS_FPutStringPrnSrv(int console, const char *str) -{ -#pragma unused(console, str) -#ifndef SDK_FINALROM - OSPrintServerBuffer *p; - register OSPrintWChar word; - - u32 in, in_tmp, out; - u32 isOdd; - - if ( console == OS_PRINT_OUTPUT_NONE ) - { - return; - } - - p = (OSPrintServerBuffer *)PXI_GetComponentParam(); - in = p->in; - out = p->out; - isOdd = ((u32)str) & 1; - - while (1) - { - in_tmp = in + 1; - if (in_tmp >= OS_PRINTSRV_WCHARSIZE) - in_tmp = 0; - if (out == in_tmp) - break; // Buffer full, then exit - - if (isOdd) - { - p->buffer[in].s = word.s = (u16)((*(u16 *)(str - 1)) & 0xff00); - str++; - isOdd = 0UL; - if (!word.c[1]) - break; - in = in_tmp; - } - else - { - p->buffer[in].s = word.s = *(u16 *)str; - str += 2; - if (!word.c[0]) - break; - in = in_tmp; - if (!word.c[1]) - break; - } - } - p->in = in; -#endif //SDK_FINALROM -} -#endif //SDK_ARM7 - - -#if defined(SDK_CW_WARNOFF_SAFESTRB) -#include -#endif - -/* inner function for sized-buffer output */ -typedef struct dst_string_tag -{ - size_t len; - char *cur; - char *base; -} -dst_string; - -static void string_put_char(dst_string * p, char c) -{ - if (p->len > 0) - *p->cur = c, --p->len; - ++p->cur; -} - -static void string_fill_char(dst_string * p, char c, int n) -{ - if (n > 0) - { - size_t i, k = p->len; - if (k > (size_t) n) - k = (size_t) n; - for (i = 0; i < k; ++i) - p->cur[i] = c; - p->len -= k; - p->cur += n; - } -} - -static void string_put_string(dst_string * p, const char *s, int n) -{ - if (n > 0) - { - size_t i, k = p->len; - if (k > (size_t) n) - k = (size_t) n; - for (i = 0; i < k; ++i) - p->cur[i] = s[i]; - p->len -= k; - p->cur += n; - } -} - -/*---------------------------------------------------------------------------* - Name: OS_SPrintf - - Description: equal to 'OS_VSPrintf' except argument style. - - Arguments: dst : destination buffer. - fmt : format string. - - Returns: length of the generated string. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL int OS_SPrintf(char *dst, const char *fmt, ...) -{ - int ret; - va_list va; - va_start(va, fmt); - ret = OS_VSPrintf(dst, fmt, va); - va_end(va); - return ret; -} - -/*---------------------------------------------------------------------------* - Name: OS_VSPrintf - - Description: equal to 'OS_VSNPrintf' except buffer size argument. - - Arguments: dst : destination buffer. - fmt : format string. - vlist : parameters. - - Returns: length of the generated string. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL int OS_VSPrintf(char *dst, const char *fmt, va_list vlist) -{ - return OS_VSNPrintf(dst, 0x7FFFFFFF, fmt, vlist); -} - -/*---------------------------------------------------------------------------* - Name: OS_SNPrintf - - Description: equal to 'OS_VSNPrintf' except argument style. - - Arguments: dst : destination buffer. - len : destination buffer size. - fmt : format string. - - Returns: length of the generated string. (except '\0') - if(result < len), - put NUL in dst[result]. - else if(len > 0), - put NUL in dst[len - 1]. - else, - do nothing. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL int OS_SNPrintf(char *dst, size_t len, const char *fmt, ...) -{ - int ret; - va_list va; - va_start(va, fmt); - ret = OS_VSNPrintf(dst, len, fmt, va); - va_end(va); - return ret; -} - -/*---------------------------------------------------------------------------* - Name: OS_VSNPrintf - - Description: small-size vsnprintf which is similar to 'vsnprintf' - without following supports. - * CodeWarrior Extensions (#s) - * MSL AltiVec Extensions (v, vh, vl, hv, lv, @) - * indexed argments (%m$, *m$) - * floating-point - * wchar_t - - Note: '+' and '#' do not work, MSL's sprintf(). - to keep same result, they are no implement. - { // exsample - char buf[5]; - sprintf(buf, "%-i\n", 45); // "45" (OK) - sprintf(buf, "%0i\n", 45); // "45" (OK) - sprintf(buf, "% i\n", 45); // " 45" (OK) - sprintf(buf, "%+i\n", 45); // "%+i" ("+45" expected) - sprintf(buf, "%#x\n", 45); // "%#x" ("0x2d" expected) - // but, this works correctly! - sprintf(buf, "% +i\n", 45); // "+45" (OK) - } - - Arguments: dst : destination buffer. - len : destination buffer size. - fmt : format string. - vlist : parameters. - - Returns: length of the generated string. (except '\0') - if(result < len), - put NUL in dst[result]. - else if(len > 0), - put NUL in dst[len - 1]. - else, - do nothing. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL int OS_VSNPrintf(char *dst, size_t len, const char *fmt, va_list vlist) -{ - return STD_TVSNPrintf(dst, len, fmt, vlist); -} - -/*---------------------------------------------------------------------------* - Name: OS_VSNPrintfEx - - Description: OS_VSNPrintfEx is an addition of binary output to OS_VSNPrintfEx. - - Arguments: dst : destination buffer. - len : destination buffer size. - fmt : format string. - vlist : parameters. - - Returns: length of the generated string. (except '\0') - if(result < len), - put NUL in dst[result]. - else if(len > 0), - put NUL in dst[len - 1]. - else, - do nothing. - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL int OS_VSNPrintfEx(char *dst, size_t len, const char *fmt, va_list vlist) -{ - char buf[24]; - int n_buf; - char prefix[2]; - int n_prefix; - - const char *s = fmt; - - dst_string str; - str.len = len, str.cur = str.base = dst; - - while (*s) - { - if ((unsigned int)(((unsigned char)*s ^ 0x20) - 0xA1) < 0x3C) - { - /* Shift JIS character */ - string_put_char(&str, *s++); - if (*s) - string_put_char(&str, *s++); - } - else if (*s != '%') - { - /* normal ASCII character */ - string_put_char(&str, *s++); - } - else - { - /* output with format */ - enum - { - flag_blank = 000001, /* ' ' */ - flag_plus = 000002, /* '+' */ - flag_sharp = 000004, /* '#' */ - flag_minus = 000010, /* '-' */ - flag_zero = 000020, /* '0' */ - flag_l1 = 000040, /* "l" */ - flag_h1 = 000100, /* "h" */ - flag_l2 = 000200, /* "ll" */ - flag_h2 = 000400, /* "hh" */ - flag_unsigned = 010000, /* 'o', 'u', ... */ - flag_binary = 020000, /* 'b' */ - flag_colon = 040000, /* ':' */ - flag_end - }; - int flag = 0, width = 0, precision = -1, radix = 10; - char hex_char = 'a' - 10; - const char *p_start = s; - /* flags */ - for (;;) - { - switch (*++s) - { - case '+': - if (s[-1] != ' ') - break; - flag |= flag_plus; - continue; - case ' ': - flag |= flag_blank; - continue; - case '-': - flag |= flag_minus; - continue; - case '0': - flag |= flag_zero; - continue; - case ':': - flag |= flag_colon; - continue; - } - break; - } - /* width */ - if (*s == '*') - { - ++s, width = va_arg(vlist, int); - if (width < 0) - width = -width, flag |= flag_minus; - } - else - { - while ((*s >= '0') && (*s <= '9')) - width = (width * 10) + *s++ - '0'; - } - /* precision */ - if (*s == '.') - { - ++s, precision = 0; - if (*s == '*') - { - ++s, precision = va_arg(vlist, int); - if (precision < 0) - precision = -1; - } - else - { - while ((*s >= '0') && (*s <= '9')) - precision = (precision * 10) + *s++ - '0'; - } - } - /* option */ - switch (*s) - { - case 'h': - if (*++s != 'h') - flag |= flag_h1; - else - ++s, flag |= flag_h2; - break; - case 'l': - if (*++s != 'l') - flag |= flag_l1; - else - ++s, flag |= flag_l2; - break; - } - - /* type */ - switch (*s) - { - case 'd': /* signed decimal */ - case 'i': /* signed decimal */ - goto put_integer; - case 'o': /* unsigned octal */ - radix = 8; - flag |= flag_unsigned; - goto put_integer; - case 'u': /* unsigned decimal */ - flag |= flag_unsigned; - goto put_integer; - case 'X': /* unsigned hexadecimal */ - hex_char = 'A' - 10; - goto put_hexadecimal; - case 'x': /* unsigned hexadecimal */ - goto put_hexadecimal; - case 'p': /* pointer */ - /* equal to code warrior */ - flag |= flag_sharp; - precision = 8; - goto put_hexadecimal; - - case 'C': /* unicode-character */ - flag |= flag_l1; - case 'c': /* character */ - if (precision >= 0) - goto put_invalid; - { - int c = va_arg(vlist, int); - width -= 1; - if (flag & flag_minus) - { - if (flag & flag_l1) - { - char dst[2]; - - if (STD_ConvertCharUnicodeToSjis(dst, (u16)c) == 1) - { - string_put_char(&str, dst[0]); - } - else - { - string_put_string(&str, dst, 2); - } - } - else - { - string_put_char(&str, (char)c); - } - string_fill_char(&str, ' ', width); - } - else - { - char pad = (char)((flag & flag_zero) ? '0' : ' '); - string_fill_char(&str, pad, width); - - if (flag & flag_l1) - { - char dst[2]; - - if (STD_ConvertCharUnicodeToSjis(dst, (u16)c) == 1) - { - string_put_char(&str, dst[0]); - } - else - { - string_put_string(&str, dst, 2); - } - } - else - { - string_put_char(&str, (char)c); - } - } - ++s; - } - break; - - case 'S': /* unicode-string */ - flag |= flag_l1; - case 's': /* string */ - { - int n_buf = 0; - const char *p_buf = va_arg(vlist, const char *); - - if (precision < 0) - { - while (p_buf[n_buf]) - { - if (flag & flag_l1) - { - n_buf += 2; - } - else - { - ++n_buf; - } - } - } - else - { - while ((n_buf < precision) && p_buf[n_buf]) - { - if (flag & flag_l1) - { - n_buf += 2; - } - else - { - ++n_buf; - } - } - } - if (flag & flag_l1) - { - n_buf /= 2; - } - width -= n_buf; - if (flag & flag_minus) - { - if (flag & flag_l1) - { - u16 *w_buf = (u16 *)p_buf; - char dst[2]; - - while (n_buf--) - { - if (STD_ConvertCharUnicodeToSjis(dst, *w_buf) == 1) - { - string_put_char(&str, dst[0]); - } - else - { - string_put_string(&str, dst, 2); - } - w_buf++; - } - } - else - { - string_put_string(&str, p_buf, n_buf); - } - string_fill_char(&str, ' ', width); - } - else - { - char pad = (char)((flag & flag_zero) ? '0' : ' '); - string_fill_char(&str, pad, width); - - if (flag & flag_l1) - { - u16 *w_buf = (u16 *)p_buf; - char dst[2]; - - while (n_buf--) - { - if (STD_ConvertCharUnicodeToSjis(dst, *w_buf) == 1) - { - string_put_char(&str, dst[0]); - } - else - { - string_put_string(&str, dst, 2); - } - w_buf++; - } - } - else - { - string_put_string(&str, p_buf, n_buf); - } - } - ++s; - } - break; - - case 'B': /* binary */ - hex_char = 'A' - 10; - case 'b': /* binary */ - { - int n_buf = width; - int count = 0; - char *p_buf = va_arg(vlist, char *); - int column_count; - - if (n_buf <= 0) - { - n_buf = 1; - } - if (precision == 0) - { - precision = -1; - } - column_count = precision; - - while (1) - { - char left_char, right_char; - int left = ((p_buf[count] & 0xF0) >> 4); - int right = (p_buf[count] & 0x0F); - - left_char = (char)((left < 10) ? (left + '0') : (left + hex_char)); - right_char = (char)((right < 10) ? (right + '0') : (right + hex_char)); - - string_put_char(&str, left_char); - string_put_char(&str, right_char); - - count++; - - if (count >= n_buf) - break; - - if (column_count > 0) - { - --column_count; - } - - if (column_count == 0) - { - string_put_char(&str, '\n'); - if ((flag & flag_blank) && !(flag & flag_minus)) - { - string_put_char(&str, ' '); - } - column_count = precision; - } - else if (flag & flag_colon) - { - string_put_char(&str, ':'); - } - else if (flag & flag_blank) - { - string_put_char(&str, ' '); - } - } - ++s; - } - break; - - case 'n': /* store the number of output */ - { - int pos = str.cur - str.base; - if (flag & flag_h2) - ; - else if (flag & flag_h1) - *va_arg(vlist, signed short *) = (signed short)pos; - else if (flag & flag_l2) - *va_arg(vlist, u64 *) = (u64)pos; - else - *va_arg(vlist, signed int *) = (signed int)pos; - } - ++s; - break; - - case '%': /* output '%' */ - if (p_start + 1 != s) - goto put_invalid; - string_put_char(&str, *s++); - break; - - default: /* invalid type */ - goto put_invalid; - - put_invalid: - string_put_string(&str, p_start, s - p_start); - break; - - put_hexadecimal: - radix = 16; - flag |= flag_unsigned; - put_integer: - { - u64 val = 0; - n_prefix = 0; - - if (flag & flag_minus) - flag &= ~flag_zero; - if (precision < 0) - precision = 1; - else - flag &= ~flag_zero; - - if (flag & flag_unsigned) - { - if (flag & flag_h2) - val = va_arg(vlist, unsigned char); - else if (flag & flag_h1) - val = va_arg(vlist, unsigned short); - else if (flag & flag_l2) - val = va_arg(vlist, u64); - else - val = va_arg(vlist, unsigned long); - flag &= ~(flag_plus | flag_blank); - if (flag & flag_sharp) - { - if (radix == 16) - { - if (val != 0) - { - prefix[0] = (char)(hex_char + (10 + 'x' - 'a')); - prefix[1] = '0'; - n_prefix = 2; - } - } - else if (radix == 8) - { - prefix[0] = '0'; - n_prefix = 1; - } - } - } - else - { - if (flag & flag_h2) - val = va_arg(vlist, char); - else if (flag & flag_h1) - val = va_arg(vlist, short); - else if (flag & flag_l2) - val = va_arg(vlist, u64); - else - val = va_arg(vlist, long); - if ((val >> 32) & 0x80000000) - { - val = ~val + 1; - prefix[0] = '-'; - n_prefix = 1; - } - else - { - if (val || precision) - { - if (flag & flag_plus) - { - prefix[0] = '+'; - n_prefix = 1; - } - else if (flag & flag_blank) - { - prefix[0] = ' '; - n_prefix = 1; - } - } - } - } - n_buf = 0; - switch (radix) - { - case 8: - while (val != 0) - { - int d = (int)(val & 0x07); - val >>= 3; - buf[n_buf++] = (char)(d + '0'); - } - break; - case 10: - if ((val >> 32) == 0) - { -#if defined(SDK_CW) || defined(SDK_RX) || defined(__MWERKS__) -#pragma optimize_for_size off -#endif - u32 v = (u32)val; - while (v != 0) - { - // u32 ƒ萔̏Zł΁ARpCI - // }WbNio[gpώZɕϊ - u32 r = v / 10; - int d = (int)(v - (r * 10)); - v = r; - buf[n_buf++] = (char)(d + '0'); - } - } - else - { - while (val != 0) - { - u64 r = val / 10; - int d = (int)(val - (r * 10)); - val = r; - buf[n_buf++] = (char)(d + '0'); - } - } - break; - case 16: - while (val != 0) - { - int d = (int)(val & 0x0f); - val >>= 4; - buf[n_buf++] = (char)((d < 10) ? (d + '0') : (d + hex_char)); - } - break; - } - if ((n_prefix > 0) && (prefix[0] == '0')) - { - n_prefix = 0; - buf[n_buf++] = '0'; - } - } - goto put_to_stream; - - put_to_stream: - { - int n_pad = precision - n_buf; - if (flag & flag_zero) - { - if (n_pad < width - n_buf - n_prefix) - n_pad = width - n_buf - n_prefix; - } - if (n_pad > 0) - width -= n_pad; - width -= n_prefix + n_buf; - if (!(flag & flag_minus)) - string_fill_char(&str, ' ', width); - while (n_prefix > 0) - string_put_char(&str, prefix[--n_prefix]); - string_fill_char(&str, '0', n_pad); - while (n_buf > 0) - string_put_char(&str, buf[--n_buf]); - if (flag & flag_minus) - string_fill_char(&str, ' ', width); - ++s; - } - break; - } - } - } - - if (str.len > 0) - *str.cur = '\0'; - else if (len > 0) - str.base[len - 1] = '\0'; - return str.cur - str.base; -} - - -#if defined(SDK_CW_WARNOFF_SAFESTRB) -#include -#endif - -//================================================================================ -// Set output of print (for IS-TWL-DEBUGGER) -//================================================================================ -#ifndef SDK_FINALROM -#ifdef SDK_LINK_ISTD -/*---------------------------------------------------------------------------* - Name: OS_SetPrintOutput - - Description: Specify the output window OS_Printf uses. - This is only for IS-TWL-DEBUGGER. - - Arguments: proc : processor - OS_PRINT_OUTPUT_PROC_ARM9 : ARM9 - OS_PRINT_OUTPUT_PROC_ARM7 : ARM7 - OS_PRINT_OUTPUT_PROC_ARM9ERR : ARM9 for error - OS_PRINT_OUTPUT_PROC_ARM7ERR : ARM7 for error - num : window number (0-3) - - Returns: None. - *---------------------------------------------------------------------------*/ -void OS_SetPrintOutput( OSPrintOutputProc proc, int num ) -{ - SDK_ASSERT( (0<=num && num<=OS_PRINT_OUTPUT_WINDOW_MAX) || num==OS_PRINT_OUTPUT_NONE ); - SDK_ASSERT( 0<=(int)proc && (int)proc<=OS_PRINT_OUTPUT_PROC_ARM7ERR ); - *(u8*)(HW_PRINT_OUTPUT_ARM9 + proc) = (u8)num; -} -#endif -#endif - -//================================================================================ -// FPutString hook -//================================================================================ -#ifndef SDK_FINALROM -/*---------------------------------------------------------------------------* - Name: OS_SetFPutStringHook - - Description: set hook function in FPutString - - Arguments: func : hook function - - Returns: None. - *---------------------------------------------------------------------------*/ -void OS_SetFPutStringHook( OSFPutStringHookType func ) -{ - OSi_FPutStringHook = func; -} - -/*---------------------------------------------------------------------------* - Name: OS_GetFPutStringHook - - Description: get hook function in FPutString - - Arguments: None. - - Returns: hook function - *---------------------------------------------------------------------------*/ -OSFPutStringHookType OS_GetFPutStringHook(void) -{ - return OSi_FPutStringHook; -} -#endif - -//================================================================================ -// DUMMY PRINT (stub for FINALROM) -//================================================================================ -#ifdef SDK_FINALROM -#ifdef OS_Printf -#undef OS_Printf -#endif -void OS_Printf(const char *fmt, ...); -void OS_Printf(const char *fmt, ...) -{ -#pragma unused( fmt ) -} -#endif diff --git a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/Makefile b/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/Makefile deleted file mode 100644 index dca6850a..00000000 --- a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/Makefile +++ /dev/null @@ -1,46 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TWL WLAN - libraries - os -# File: Makefile -# -# Copyright 2003 - 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -#---------------------------------------------------------------------------- - -TARGET_PLATFORM := TWL - -TWL_PROC = ARM9 - -TARGET_CODEGEN ?= ARM -TWL_ARCHGEN ?= LIMITED - -SRCDIR = ./src -INCDIR = ./include $(ROOT)/build/tests/sdlog/sdlog/include \ - $(ROOT)/build/tests/sdlog/sdlog/src - -SRCS = sd_log_wrapper.c - -SRCS += $(ROOT)/build/tests/sdlog/sdlog/src/os_log.c - -#---------------------------------------------------------------------------- - -TARGET_LIB = libsdlogRed$(TWL_LIBSUFFIX).a - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -INSTALL_TARGETS = $(TARGETS) -INSTALL_DIR = $(TWL_IPL_RED_ROOT)/build/tests/Launcher_sdlog/lib/$(TWL_LIBTYPE) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/include/sd_log_wrapper.h b/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/include/sd_log_wrapper.h deleted file mode 100644 index d32dc48e..00000000 --- a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/include/sd_log_wrapper.h +++ /dev/null @@ -1,44 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - SDLOG - include - File: sd_log_wrapper.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef TWL_SD_LOG_WRAPPER_H_ -#define TWL_SD_LOG_WRAPPER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include "log.h" -#include "sd_log.h" - -BOOL SDLOG_InitEx(const char* path, const char* filename, char* buffer, u16 bufferSize, u16 partitionSize, SDLOGWriteType writeType); - -void SDLOG_FinishEx(void); - -inline -void SDLOG_PrintServer(void) -{ - OS_PrintServer(); -} - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* TWL_SD_LOG_WRAPPER_H_ */ -#endif diff --git a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/src/sd_log_wrapper.c b/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/src/sd_log_wrapper.c deleted file mode 100644 index d974dd09..00000000 --- a/build/tests/Launcher_sdlog/sdlog/ARM9.TWL/src/sd_log_wrapper.c +++ /dev/null @@ -1,179 +0,0 @@ - -#include -#include -#include "sd_log_wrapper.h" - -#include "sd_log.c" - -/* Function Prototype */ -static void OS_FPutStringSD(int console, const char *str); -static void SDLOGi_WriteThreadEx(void* arg); - -/* Static */ -static void (*HookedFPutString)(int console, const char *string); - -void TwlStartUp(void) -{ - OS_InitPrintServer(); // Should be called before PXI_Init() -} - -/*---------------------------------------------------------------------------* - Name: SDLOG_Init - - Description: Initialize - - Arguments: None - - Returns: t@C̍쐬Ɏsꍇ FALSE Ԃ - *---------------------------------------------------------------------------*/ -BOOL SDLOG_InitEx(const char* path, const char* filename, char* buffer, u16 bufferSize, u16 partitionSize, SDLOGWriteType writeType) -{ - if( isInitialized ) - { - return FALSE; - } - - if( !FS_IsAvailable() ) - { - FS_Init(FS_DMA_NOT_USE); - } - - OS_InitLog(); - - { - int i = 0; - FS_InitFile(&work.logInfo[i].file); - - /* t@CVXȅ */ - { - char tmpPath[256]; - - STD_TSPrintf(tmpPath, "%s/%s", path, filename); - - if( writeType == SDLOG_WRITE_TYPE_OVERWRITE ) - { - /* ㏑ݒ̏ꍇ̓t@C폜 */ - (void)FS_DeleteFileAuto(tmpPath); - } - - if( !FS_CreateDirectoryAuto( path, FS_PERMIT_W | FS_PERMIT_R ) ) - { - //OS_TPrintf("%s L:%04d Error(%d)\n", __FILE__, __LINE__, FS_GetArchiveResultCode(tmpPath) ); - } - - if( !FS_CreateFile( tmpPath, FS_PERMIT_W | FS_PERMIT_R ) ) - { - //OS_TPrintf("%s L:%04d Error(%d)\n", __FILE__, __LINE__, FS_GetArchiveResultCode(tmpPath) ); - } - - if(!FS_OpenFileEx(&work.logInfo[i].file, tmpPath, FS_PERMIT_R | FS_PERMIT_W)) - { - //OS_TPrintf("%s L:%04d Error(%d)\n", __FILE__, __LINE__, FS_GetArchiveResultCode(tmpPath) ); - goto file_error; - } - - if( writeType == SDLOG_WRITE_TYPE_CONTINUANCE ) - { - /* NjLݒ̏ꍇ̓t@C[܂ŃV[N */ - FS_SeekFileToEnd(&work.logInfo[i].file); - } - } - - /* OS_Log ̏ݒ */ - work.logInfo[i].buffer = buffer; - work.logInfo[i].current = 0; - work.logInfo[i].bufferSize = bufferSize; - work.logInfo[i].partitionSize = partitionSize; - work.logInfo[i].writeType = writeType; - - OS_InitLogBuffer(&work.logInfo[i].info, buffer, partitionSize); - OS_SetLogWarningOffset(&work.logInfo[i].info, OS_LOG_WARNING_OFFSET_FULL ); - OS_SetLogAnnounceType(&work.logInfo[i].info, OS_LOG_ANNOUNCE_IMM); - - OS_SetLogCallback(&work.logInfo[i].info, SDlogCallback, (void *)i ); - } - - /* Jg IS_TWL_DEBBUGER Ɠo̓[ */ - OS_SetLogCurrentInfo(&work.logInfo[0].info); - - /* Thread */ - if( OS_IsThreadAvailable() == FALSE ) - { - /*XbhVXeオĂȂꍇ͗グ*/ - OS_InitThread(); - } - - OS_InitMessageQueue(&work.writeQueue, work.writeMsg, WRITE_MESSAGE_COUNT ); - OS_CreateThread(&work.writeThread, SDLOGi_WriteThreadEx, NULL, - work.writeThreadStack+SDLOG_THREAD_STACK_SIZE/sizeof(u32), SDLOG_THREAD_STACK_SIZE, 15); - OS_WakeupThreadDirect(&work.writeThread); - - HookedFPutString = OS_FPutString; - OS_FPutString = OS_FPutStringSD; - - SDLOG_Printf("------------ START ------------\n"); - - isInitialized =TRUE; - - return TRUE; - -file_error: - return FALSE; -} - - -void OS_FPutStringSD(int console, const char *str) -{ -#pragma unused (console) - OS_LockMutex( &work.logInfo[0].info.mutex ); - OS_LogFPutString( &work.logInfo[0].info, str ); - OS_UnlockMutex( &work.logInfo[0].info.mutex ); -} - - -void SDLOG_FinishEx(void) -{ - SDLOG_Finish(); - - if (OS_FPutString == OS_FPutStringSD) { - OS_FPutString = HookedFPutString; - } -} - - -static void SDLOGi_WriteThreadEx(void* arg) -{ -#pragma unused(arg) - - u32 num; - const char* buffer; - u32 dataSize; - - OSMessage msg; - - while(TRUE) - { - - (void)OS_ReceiveMessage(&work.writeQueue, &msg, OS_MESSAGE_BLOCK); - num =(u32) msg; - (void)OS_ReceiveMessage(&work.writeQueue, &msg, OS_MESSAGE_BLOCK); - buffer =(const char*) msg; - (void)OS_ReceiveMessage(&work.writeQueue, &msg, OS_MESSAGE_BLOCK); - dataSize =(u32) msg; - - if(FS_WriteFile(&work.logInfo[num].file, buffer, (u16)dataSize) < 0) - { - if (OS_FPutString == OS_FPutStringSD) { - OS_FPutString = HookedFPutString; - OS_TPrintf("%s L:%d SD Write Error\n",__FILE__, __LINE__); - } - } else { - if (OS_FPutString == HookedFPutString) { - OS_FPutString = OS_FPutStringSD; - } - } - - FS_FlushFile(&work.logInfo[num].file); - - } -} \ No newline at end of file diff --git a/build/tests/Launcher_sdlog/sdlog/Makefile b/build/tests/Launcher_sdlog/sdlog/Makefile deleted file mode 100644 index b3a6c676..00000000 --- a/build/tests/Launcher_sdlog/sdlog/Makefile +++ /dev/null @@ -1,24 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TWL WLAN - libraries - os -# File: Makefile -# -# Copyright 2003 - 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -#---------------------------------------------------------------------------- - -TARGET_PLATFORM := TWL - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -SUBDIRS := $(GSUBDIRS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/Makefile b/build/tests/Makefile deleted file mode 100644 index f1c4722d..00000000 --- a/build/tests/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS_P = \ - CheckDSHashTable \ - FatalErrorMaker \ - RomTypeTest \ - WirelessChecker \ - CheckPreloadParameters \ - FileRecoveryTest \ - Shared2File \ - build4WLDev \ - CheckSharedFont \ - HashCheckTemplate \ - SimpleBenchmark \ - compressSharedFontLoad/compSharedFont \ - compressSharedFontLoad/testLoadSpeed \ - DisplaySystemInformation \ - Launcher_sdlog \ - TestMaker \ - yuv2rgb \ - ErrorLogTest \ - Makefile \ - WDSTest \ - FatalErrorChecker \ - WDSWrapperTest \ - - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/NotLaunchRom/Makefile b/build/tests/NotLaunchRom/Makefile deleted file mode 100644 index 103cac67..00000000 --- a/build/tests/NotLaunchRom/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 Makefile.2 - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/NotLaunchRom/Makefile.0 b/build/tests/NotLaunchRom/Makefile.0 deleted file mode 100644 index a464e703..00000000 --- a/build/tests/NotLaunchRom/Makefile.0 +++ /dev/null @@ -1,51 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckPreloadParameters -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -IS_NAND_APP = TRUE -TWL_ARCHGEN = LIMITED - -TWL_NANDAPP = TRUE - -TARGET_BIN = notLaunch_secure.tad -ROM_SPEC = secure.rsf - -TARGET_PLATFORM = TWL - -SRCS = data.c main.c - - -BINDIR = ./bin/$(TWL_BUILDTYPE) - - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -MAKETAD_OPTION += -s -MAKEROM = $(TWLSDK_ROOT)/tools/bin/makerom.TWL.secure.exe -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/NotLaunchRom/Makefile.1 b/build/tests/NotLaunchRom/Makefile.1 deleted file mode 100644 index d01da319..00000000 --- a/build/tests/NotLaunchRom/Makefile.1 +++ /dev/null @@ -1,51 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckPreloadParameters -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -IS_NAND_APP = TRUE -TWL_ARCHGEN = LIMITED - -TWL_NANDAPP = TRUE - -TARGET_BIN = notLaunch_system.tad -ROM_SPEC = system.rsf - -TARGET_PLATFORM = TWL - -SRCS = data.c main.c - - -BINDIR = ./bin/$(TWL_BUILDTYPE) - - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -MAKETAD_OPTION += -s -MAKEROM = $(call eupath,$(TWLSDK_ROOT)/tools/bin/makerom.TWL.sys.exe) -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/NotLaunchRom/Makefile.2 b/build/tests/NotLaunchRom/Makefile.2 deleted file mode 100644 index b893f5e1..00000000 --- a/build/tests/NotLaunchRom/Makefile.2 +++ /dev/null @@ -1,54 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - CheckPreloadParameters -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -FILE_IDX = 0 -IS_NAND_APP = TRUE -TWL_ARCHGEN = LIMITED -GAMECODE = 010A - -TWL_NANDAPP = TRUE -TARGET_BIN = notLaunch_user.tad - -TARGET_PLATFORM = TWL - -SRCS = data.c main.c -ROM_SPEC = user.rsf - -BINDIR = ./bin/$(TWL_BUILDTYPE) - - - -MAKEROM_FLAGS += -DLOGOCHECK_MEDIA=$(MEDIA) \ - -DLOGOCHECK_BANNERPATH=$(BANNERPATH) \ - -DLOGOCHECK_GAMECODE=$(GAMECODE) - - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/NotLaunchRom/include/data.h b/build/tests/NotLaunchRom/include/data.h deleted file mode 100644 index 524c8fe8..00000000 --- a/build/tests/NotLaunchRom/include/data.h +++ /dev/null @@ -1,28 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - GX - demos - UnitTours/2D_CharBg_1 - File: data.h - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef BG_DATA_H_ -#define BG_DATA_H_ - -#define SCREEN_SIZE (32 * 24) - -/*-------------------------- Data -------------------------------*/ -#define CHAR_SIZE (16 * 128 * sizeof(int)) -extern const unsigned int d_64_256_bg_schDT[16 * 128]; -extern const unsigned int d_64_256_bg_sclDT[8 * 16]; - -#endif diff --git a/build/tests/NotLaunchRom/secure.rsf b/build/tests/NotLaunchRom/secure.rsf deleted file mode 100644 index a267fce7..00000000 --- a/build/tests/NotLaunchRom/secure.rsf +++ /dev/null @@ -1,196 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode "01" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile $(LOGOCHECK_BANNERPATH) - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion Japan - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - Secure TRUE - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch FALSE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media NAND - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode 011A - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 1 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 128K -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/NotLaunchRom/src/data.c b/build/tests/NotLaunchRom/src/data.c deleted file mode 100644 index a8c960e0..00000000 --- a/build/tests/NotLaunchRom/src/data.c +++ /dev/null @@ -1,573 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - GX - demos - UnitTours/2D_CharBg_1 - File: data.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "data.h" - -/*---------------------- Palette Data ---------------------------*/ -const unsigned int d_64_256_bg_sclDT[8 * 16] = { - 0x628a7ffe, 0x6f0d6acb, 0x6aec6f2f, 0x77757352, // 0000h - 0x51e6460d, 0x66f05a27, 0x41845a8f, 0x49c53943, - 0x41c73567, 0x4e2c5668, 0x62ad41cb, 0x566c2924, // 0010h - 0x5eb1524f, 0x45e93566, 0x1ca16f55, 0x24e26b13, - 0x31442d02, 0x10607798, 0x7bba39aa, 0x7bdc779b, // 0020h - 0x66c90820, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0030h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0040h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0050h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0070h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0080h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0090h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00c0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00d0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00e0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00f0h - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------- Character Data -------------------------*/ -const unsigned int d_64_256_bg_schDT[16 * 128] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0001h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x0f000000, - 0x00000000, 0x090d0000, 0x00000000, 0x0f0f0d0f, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0002h - 0x00000000, 0x01010000, 0x09000000, 0x0201010a, - 0x0f0e0d00, 0x0101010a, 0x090f0f0f, 0x1101010a, - 0x0a090f09, 0x11010101, 0x010a090f, 0x11010109, - 0x00000000, 0x00000000, 0x02010000, 0x04030302, // 0003h - 0x05020201, 0x04040403, 0x03050101, 0x06040404, - 0x04121110, 0x06060604, 0x17111016, 0x0b070603, - 0x1b111a1a, 0x0815171b, 0x17131b1b, 0x08080817, - 0x00000000, 0x00000000, 0x04030304, 0x00000304, // 0004h - 0x06070706, 0x06070706, 0x07060b04, 0x07070707, - 0x06151413, 0x06070b06, 0x0c080808, 0x18181318, - 0x0c180808, 0x18180c18, 0x0c18080c, 0x0c0c0c18, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0005h - 0x00000808, 0x00000000, 0x0b0c0b06, 0x00000006, - 0x0707060b, 0x00080b07, 0x07060c18, 0x13190b07, - 0x07060c18, 0x180b1c07, 0x0b0c1919, 0x1c060707, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0006h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x0000000c, 0x00000000, - 0x00000b06, 0x00000000, 0x0b0b0707, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0007h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0008h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0009h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 000fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0010h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x0d000000, 0x00000000, 0x23000000, - 0x00000000, 0x1d0e0000, 0x00000000, 0x0e0e0e00, - 0x1d000000, 0x0f090d0d, 0x0f0f0000, 0x0a0a0f0d, // 0011h - 0x1f0e0f00, 0x0a0a0d1d, 0x201d0e0f, 0x21090f0d, - 0x0f1d0e0f, 0x16200f0f, 0x0f0e0e20, 0x201f160d, - 0x0f090f0e, 0x161f2016, 0x0d0f090d, 0x1f1f0e1f, - 0x01010a0d, 0x1b020201, 0x0101010a, 0x03030502, // 0012h - 0x0201010a, 0x04030201, 0x01010a21, 0x04040111, - 0x11112121, 0x1317021b, 0x1a1a2121, 0x1b241b16, - 0x16090a09, 0x1b101b10, 0x1a020201, 0x151b1b1b, - 0x0604171b, 0x0c180c06, 0x0606171b, 0x180b0b06, // 0013h - 0x06041313, 0x0b0c180b, 0x0c0c130b, 0x0b0c0c0c, - 0x08150b17, 0x180c1813, 0x13041314, 0x19181308, - 0x0c0c141b, 0x19181813, 0x17141b15, 0x0c181808, - 0x180c0b0b, 0x190c0c0c, 0x0c0c070b, 0x070c0c0c, // 0014h - 0x0c181e07, 0x0707190c, 0x0c0c0b1e, 0x0722071e, - 0x19180c18, 0x1c220707, 0x1e190c0b, 0x1c1c0707, - 0x1c070707, 0x25071c07, 0x07070707, 0x1c1c0722, - 0x190c0c1e, 0x07070706, 0x1919191e, 0x19191e1e, // 0015h - 0x1e19191e, 0x1919191e, 0x1c1e1e1c, 0x1e19191e, - 0x221e1e1e, 0x1e1e1e22, 0x221c1c1c, 0x1c220722, - 0x221c1c25, 0x22222225, 0x22262525, 0x25252525, - 0x0707071c, 0x0000000b, 0x071c190c, 0x00000b06, // 0016h - 0x07061919, 0x000b061c, 0x1e1e1e1e, 0x0b0b0707, - 0x071e1e1e, 0x06060707, 0x07071e1c, 0x1c07071c, - 0x1e070722, 0x1c071e19, 0x1e1c2222, 0x0707070b, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0017h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0000000c, 0x00000000, 0x00000006, 0x00000000, - 0x00000c0b, 0x00000000, 0x000c0b06, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0018h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0019h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 001fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x20200e00, 0x00000000, 0x200e0e1d, // 0020h - 0x00000000, 0x0d0e201d, 0x0e000000, 0x0e201f20, - 0x20000000, 0x0d0e0e0d, 0x20000000, 0x0f0f0d0e, - 0x1f200000, 0x0d0f0f20, 0x200e0000, 0x200d0e1d, - 0x1f0d090d, 0x0921211f, 0x2009090d, 0x0a211621, // 0021h - 0x0d09090f, 0x0a201f21, 0x0909090f, 0x090d0d0f, - 0x0f090f0f, 0x1f1a090f, 0x0a0f0f09, 0x110a0909, - 0x0a0d0d09, 0x01110a01, 0x0a210f0f, 0x0a090102, - 0x1a020502, 0x0b1b101b, 0x1a120505, 0x04131010, // 0022h - 0x11161103, 0x0404131a, 0x1111110a, 0x04060b1a, - 0x1a1b0a21, 0x0c03151b, 0x101b020a, 0x24111a10, - 0x1b120105, 0x0b171313, 0x1b110102, 0x0b131b15, - 0x0c141506, 0x19181819, 0x0c140b06, 0x07190c0b, // 0023h - 0x14140b06, 0x071c1e06, 0x08081904, 0x07070618, - 0x13142414, 0x07071813, 0x130c1414, 0x1c1e1918, - 0x0c040604, 0x0c180808, 0x14080b0b, 0x0c181808, - 0x221e1e1c, 0x221c1c1c, 0x221e191e, 0x25221c22, // 0024h - 0x221e191e, 0x25252225, 0x221e1919, 0x25221c22, - 0x1c1e1e07, 0x25221c07, 0x1e1e1c07, 0x221c1c1e, - 0x2207071e, 0x221c1c22, 0x1e19190c, 0x22221e1e, - 0x25252525, 0x25252626, 0x27272525, 0x22262627, // 0025h - 0x27272725, 0x22262727, 0x27272725, 0x22262727, - 0x27272725, 0x25252727, 0x27272525, 0x25252527, - 0x25252525, 0x25252525, 0x25252522, 0x25252525, - 0x07222222, 0x07070707, 0x22222222, 0x07070722, // 0026h - 0x22221c1c, 0x07071e07, 0x22071c1c, 0x190c0c19, - 0x1c071c22, 0x180c191e, 0x07222222, 0x180c1e1e, - 0x07070722, 0x18191c1e, 0x071c1c22, 0x191e1c07, - 0x000c0c1e, 0x00000000, 0x13131819, 0x00000000, // 0027h - 0x17180c06, 0x00000000, 0x14180b1e, 0x00000014, - 0x08130b0b, 0x00000014, 0x130c0b0b, 0x00000008, - 0x080c0b19, 0x00001308, 0x080c060b, 0x00001408, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0028h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0029h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x201d0000, 0x090f0e23, 0x201f0000, 0x090f0f20, // 0030h - 0x0d0d2000, 0x090f0f0d, 0x0d0d0e00, 0x090f0f0f, - 0x0d0d2000, 0x0f090f0d, 0x0d0e1d00, 0x0e090f0f, - 0x0e1d1d00, 0x200f0f0f, 0x1d1f2000, 0x0d0e0f0f, - 0x0f200d09, 0x02020202, 0x0f0e0d0a, 0x0201010a, // 0031h - 0x090f090a, 0x020a010a, 0x0d210d0f, 0x0502010a, - 0x1f1f231d, 0x0a0a0a20, 0x20201d23, 0x1f20161d, - 0x1f201d1d, 0x201f1d1d, 0x1f1f0e0e, 0x211d1f1f, - 0x1b111102, 0x1311241b, 0x11112112, 0x1b1b1110, // 0032h - 0x1a111b02, 0x141b1116, 0x10111103, 0x13150b13, - 0x15101a11, 0x04040404, 0x1b1a1a1f, 0x06040415, - 0x101a1a1a, 0x04040413, 0x1b112111, 0x24241b1b, - 0x14141b14, 0x190c0c13, 0x08131414, 0x18180c08, // 0033h - 0x08142414, 0x180c0b0c, 0x08131713, 0x0c0b070b, - 0x17131315, 0x0b06070b, 0x15241404, 0x080c0406, - 0x13141b0b, 0x0814130c, 0x1414241b, 0x13081314, - 0x1919190c, 0x25071e19, 0x190c1818, 0x22221e19, // 0034h - 0x19191813, 0x22221c19, 0x0c190c0c, 0x07220719, - 0x0b18180c, 0x07070706, 0x07190c18, 0x07070707, - 0x1e181813, 0x07070707, 0x180c1813, 0x07070618, - 0x25222222, 0x22252525, 0x22072222, 0x07222222, // 0035h - 0x22072222, 0x1e071e1c, 0x1c070707, 0x1e071c1e, - 0x07070707, 0x07070707, 0x07070707, 0x071e061e, - 0x07070707, 0x1c1e0b1e, 0x07070707, 0x1c1e0707, - 0x07071c07, 0x06061c07, 0x071e1e07, 0x06061c1c, // 0036h - 0x0719191e, 0x06061c06, 0x1e1e0619, 0x1c1c060b, - 0x180c0707, 0x06071c19, 0x18181e22, 0x06061c0c, - 0x18190707, 0x0606060c, 0x06060707, 0x06060604, - 0x0b06060b, 0x00001717, 0x0b0c0b0c, 0x00000403, // 0037h - 0x1914180b, 0x00130b04, 0x15170606, 0x00130c0c, - 0x0b0b0606, 0x00131b14, 0x06060606, 0x00041413, - 0x030b0606, 0x000b1413, 0x24241706, 0x000b1414, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0038h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0039h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 003fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x20200e00, 0x0f0d090f, 0x0e1d2000, 0x2021210f, // 0040h - 0x0d201d00, 0x1f0f0f0f, 0x0d0e2000, 0x0f090d0d, - 0x0d0d0e00, 0x090f0d0d, 0x0d0d0e00, 0x0f090f0f, - 0x0f0e0000, 0x1f0f0f0f, 0x20230000, 0x230e0f0f, - 0x1d0e0909, 0x11211f1d, 0x0d09090d, 0x090d200d, // 0041h - 0x0a0a0d1f, 0x020a090a, 0x0a09201f, 0x0201010a, - 0x09090d0e, 0x01020a0f, 0x0909090d, 0x020a0d0f, - 0x0a090f1d, 0x09200e0a, 0x090f0920, 0x161f210f, - 0x1b1b1a1a, 0x1b111010, 0x05151201, 0x17030117, // 0042h - 0x05030502, 0x04041701, 0x02010502, 0x04041717, - 0x05010101, 0x03151112, 0x02010102, 0x151b1112, - 0x17120a0a, 0x1b161202, 0x11111a1f, 0x12161112, - 0x1314141b, 0x08131313, 0x1314141b, 0x13140813, // 0043h - 0x24241013, 0x17241b1b, 0x13131504, 0x17241414, - 0x13130404, 0x04132413, 0x04040404, 0x04031703, - 0x04060404, 0x04040404, 0x04040604, 0x03030b04, - 0x0b060c08, 0x07070b0b, 0x0604060b, 0x0604060c, // 0044h - 0x0b040606, 0x0b0b0617, 0x0b040606, 0x0b040404, - 0x0b0b0406, 0x0b0b190b, 0x15030304, 0x0b15130b, - 0x03030304, 0x1b0b0b0b, 0x03030b0b, 0x240b0b03, - 0x071c061c, 0x06060707, 0x06060606, 0x06060606, // 0045h - 0x0606040b, 0x0c0b0404, 0x06060b0c, 0x170c0406, - 0x06040b03, 0x0404040b, 0x0b041513, 0x040b150b, - 0x0b040b1b, 0x15151503, 0x030b0414, 0x03170303, - 0x0606071c, 0x0b0b0b0b, 0x0604040b, 0x04030b0b, // 0046h - 0x0b040b15, 0x1504040b, 0x0b150b0b, 0x0b040603, - 0x0b17150b, 0x04040b04, 0x0b150b03, 0x04151503, - 0x15040404, 0x04030303, 0x15040404, 0x03121215, - 0x13241413, 0x00051b1b, 0x04131b17, 0x00151503, // 0047h - 0x040b1b17, 0x00171704, 0x13150b17, 0x00010117, - 0x10111504, 0x00010512, 0x10111504, 0x0001051b, - 0x11130504, 0x00000312, 0x13111703, 0x00000104, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0048h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0049h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 004fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x1d280000, 0x1d231d1d, 0x23280000, 0x0e231d1d, // 0050h - 0x20000000, 0x0f1d1d0e, 0x20000000, 0x090d0d0e, - 0x0e000000, 0x090f0e0d, 0x00000000, 0x0f0d200e, - 0x00000000, 0x0e0d0d0e, 0x00000000, 0x23200e00, - 0x200f0a0f, 0x0d201d1d, 0x0d0a0909, 0x011f1f20, // 0051h - 0x0a21200a, 0x0f0d0d0f, 0x0a1f0e09, 0x0f210f01, - 0x0a0a0e0d, 0x2020090a, 0x1d0d0d0d, 0x211d200e, - 0x231d1d1d, 0x0a1d231d, 0x23282323, 0x011f1f0f, - 0x1a1a1209, 0x03131111, 0x16120305, 0x121b101a, // 0052h - 0x21111209, 0x12161111, 0x1221090a, 0x1b160911, - 0x0101120f, 0x11161a01, 0x0212090a, 0x121a1101, - 0x1e180102, 0x120a1212, 0x14150202, 0x12091b16, - 0x03050303, 0x03031703, 0x0403171b, 0x15151504, // 0053h - 0x04030505, 0x17150304, 0x04030505, 0x03030304, - 0x03030502, 0x02020404, 0x03051201, 0x17050403, - 0x03051201, 0x05050303, 0x05021212, 0x02050305, - 0x15031515, 0x17171515, 0x03151b1b, 0x04040b15, // 0054h - 0x12101b17, 0x04040315, 0x1b130504, 0x03040312, - 0x03040101, 0x03030305, 0x0305171b, 0x05030303, - 0x03050502, 0x05030303, 0x03051212, 0x01050303, - 0x15050415, 0x04150517, 0x15151504, 0x04151512, // 0055h - 0x01050304, 0x04041513, 0x05150303, 0x04040305, - 0x05050503, 0x03040217, 0x05050502, 0x03030117, - 0x03011b02, 0x05030303, 0x03051112, 0x01050503, - 0x03040404, 0x17101715, 0x03040404, 0x121b1205, // 0056h - 0x05030304, 0x12020215, 0x05040403, 0x01121705, - 0x05030303, 0x01010205, 0x01050505, 0x1b05111a, - 0x1b030505, 0x12011111, 0x01121212, 0x01111205, - 0x031b1203, 0x00001205, 0x05111705, 0x00002111, // 0057h - 0x1b1b0205, 0x00000016, 0x11010502, 0x00000016, - 0x02011212, 0x00000012, 0x2912011b, 0x00000000, - 0x12120111, 0x00000000, 0x00091112, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0058h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0059h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x23281d00, 0x00000000, 0x23280000, // 0060h - 0x00000000, 0x23000000, 0x00000000, 0x23000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x1f231d23, 0x091d0f0e, 0x1f1d1d1d, 0x201d201f, // 0061h - 0x1d1d1d23, 0x20231d1d, 0x1d1d2323, 0x0e201f23, - 0x1f1d201d, 0x200f1d23, 0x1f1f2300, 0x1d0d1623, - 0x1f230000, 0x1d1d1f23, 0x1d000000, 0x1f1d1f1d, - 0x1f160a02, 0x1a16211d, 0x1f200e0a, 0x1f23231f, // 0062h - 0x1d0e0e0e, 0x1d1d1d1d, 0x1d1f1d1d, 0x1f1f1d1d, - 0x1d201d1d, 0x0d0f201f, 0x201d1d1d, 0x2902201d, - 0x1d0e2323, 0x090a0d23, 0x231d1d1f, 0x0f0a0a1d, - 0x031b1611, 0x05020503, 0x0112161f, 0x05052902, // 0063h - 0x12291a1f, 0x09010212, 0x09291220, 0x1f0d0a12, - 0x09290512, 0x0d1f110a, 0x29292929, 0x29090a01, - 0x29120a0a, 0x01292929, 0x2929090f, 0x01091229, - 0x05111f12, 0x12011205, 0x111f1105, 0x11011201, // 0064h - 0x1f1f1a09, 0x0a120511, 0x16211f1f, 0x01122911, - 0x09090a11, 0x0a290202, 0x29292929, 0x1f12091b, - 0x0d120229, 0x0d090916, 0x1d0d0a29, 0x120a0d1f, - 0x05030212, 0x01020205, 0x05030212, 0x05020205, // 0065h - 0x03050501, 0x03291b12, 0x02050505, 0x03011111, - 0x05050501, 0x29122929, 0x05022921, 0x01120105, - 0x02022909, 0x09090205, 0x02020229, 0x09120205, - 0x01091f21, 0x161f0d09, 0x12161601, 0x1f16111b, // 0066h - 0x12110504, 0x21160d01, 0x29010102, 0x12160f01, - 0x01020201, 0x021b1202, 0x12021229, 0x0005020a, - 0x12121201, 0x00002912, 0x2909110a, 0x00000029, - 0x00201101, 0x00000000, 0x00002912, 0x00000000, // 0067h - 0x00000001, 0x00000000, 0x00000029, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0068h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0069h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 006fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0070h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x200d2123, 0x00000000, 0x0d0f0000, // 0071h - 0x00000000, 0x0d000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x1d231d1d, 0x0d0d0f1f, 0x20201f20, 0x1d1f0a0d, // 0072h - 0x0909090d, 0x0e090a0a, 0x20200d00, 0x0a0a0a0e, - 0x23000000, 0x0a091d23, 0x00000000, 0x09090000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x090a090d, 0x12090d0d, 0x0e0e200f, 0x01010e20, // 0073h - 0x290d1d0d, 0x0d110d0a, 0x010e231d, 0x230d0502, - 0x1d1d200e, 0x23210a0e, 0x200e090a, 0x1d231f1d, - 0x090a0000, 0x1d1f2020, 0x00000000, 0x00000000, - 0x1f1d0d29, 0x200d201d, 0x211f2112, 0x20112120, // 0074h - 0x1621201f, 0x09161d0d, 0x1d21201f, 0x1d1d1d23, - 0x0d202121, 0x201f210d, 0x0f0d200d, 0x1f1d200f, - 0x0d201d1d, 0x00001d1d, 0x00000000, 0x00000000, - 0x2912090f, 0x0a292929, 0x121d2021, 0x090a0912, // 0075h - 0x091d210a, 0x09091112, 0x0f1d1111, 0x00090a0f, - 0x091d1d1d, 0x00000009, 0x00001d1d, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x0912120a, 0x00000000, 0x00001201, 0x00000000, // 0076h - 0x0000000a, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0077h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0078h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0079h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007ah - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007bh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007ch - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007dh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 007fh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - - -/* EOF */ diff --git a/build/tests/NotLaunchRom/src/main.c b/build/tests/NotLaunchRom/src/main.c deleted file mode 100644 index 32bb2741..00000000 --- a/build/tests/NotLaunchRom/src/main.c +++ /dev/null @@ -1,109 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - GX - demos - UnitTours/2D_CharBg_1 - File: main.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -//--------------------------------------------------------------------------- -// A sample that use BG #0 as text mode: -// -// This sample simply displays a sphere on the display. -// -// HOWTO: -// 1. Transfer the character data by GX_LoadBGxChar(). -// 2. Transfer the palette data by GX_LoadBGPltt(). -// 3. Transfer the screen data by GX_LoadBGxScr(). -// -// Do not forget to flush the corresponding cache if you modified the data -// before transfer. -//--------------------------------------------------------------------------- - -#ifdef SDK_TWL -#include -#else -#include -#endif -#include "DEMO.h" -#include "data.h" - -static u16 sScrnBuf[SCREEN_SIZE]; // Buffer for screen data(BG #0) - -#ifdef SDK_TWL -void TwlMain(void) -#else -void NitroMain(void) -#endif -{ - //--------------------------------------------------------------------------- - // Initialize: - // They enable IRQ interrupts, initialize VRAM, and set BG #0 for text mode. - //--------------------------------------------------------------------------- - DEMOInitCommon(); - DEMOInitVRAM(); - DEMOInitDisplayBG0Only(); - - //--------------------------------------------------------------------------- - // Transmitting the character data and the palette data - //--------------------------------------------------------------------------- - GX_LoadBG0Char(d_64_256_bg_schDT, 0, sizeof(d_64_256_bg_schDT)); - GX_LoadBGPltt(d_64_256_bg_sclDT, 0, sizeof(d_64_256_bg_sclDT)); - - { - int i, j; - for (i = 0; i < 8; i++) - { - for (j = 0; j < 8; j++) - { - sScrnBuf[(i * 32) + j] = (u16)((i * 0x10) + j); - } - } - } - // Store the data onto the main memory, and invalidate the cache. - DC_FlushRange(sScrnBuf, sizeof(sScrnBuf)); - /* DMAIOWX^փANZX̂ŃLbV Wait ͕sv */ - // DC_WaitWriteBufferEmpty(); - - // DMA transfer to BG #0 screen - GX_LoadBG0Scr(sScrnBuf, 0, sizeof(sScrnBuf)); - - DEMOStartDisplay(); - - //--------------------------------------------------------------------------- - // Main Loop - //--------------------------------------------------------------------------- - while (1) - { -#ifdef SDK_AUTOTEST - GX_SetBankForLCDC(GX_VRAM_LCDC_C); - EXT_TestSetVRAMForScreenShot(GX_VRAM_LCDC_C); - EXT_TestScreenShot(100, 0xC7953680); - EXT_TestTickCounter(); -#endif //SDK_AUTOTEST - - OS_WaitVBlankIntr(); // Waiting the end of VBlank interrupt - GX_LoadBG0Scr(sScrnBuf, 0, sizeof(sScrnBuf)); - } -} - -//--------------------------------------------------------------------------- -// VBlank interrupt function: -// -// Interrupt handlers are registered on the interrupt table by OS_SetIRQFunction. -// OS_EnableIrqMask selects IRQ interrupts to enable, and -// OS_EnableIrq enables IRQ interrupts. -// Notice that you have to call 'OS_SetIrqCheckFlag' to check a VBlank interrupt. -//--------------------------------------------------------------------------- -void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // checking VBlank interrupt -} diff --git a/build/tests/NotLaunchRom/system.rsf b/build/tests/NotLaunchRom/system.rsf deleted file mode 100644 index 7dd8942e..00000000 --- a/build/tests/NotLaunchRom/system.rsf +++ /dev/null @@ -1,195 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode "01" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile $(LOGOCHECK_BANNERPATH) - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion Japan - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch FALSE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media NAND - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode 011A - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 1 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 128K -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/NotLaunchRom/user.rsf b/build/tests/NotLaunchRom/user.rsf deleted file mode 100644 index 85b18697..00000000 --- a/build/tests/NotLaunchRom/user.rsf +++ /dev/null @@ -1,195 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - MakerCode "01" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile $(LOGOCHECK_BANNERPATH) - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion Japan - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType User - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media NAND - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(LOGOCHECK_GAMECODE) - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 1 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 128K -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/Makefile b/build/tests/RomTypeTest/ARM9/Makefile deleted file mode 100644 index 3ef269e2..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 Makefile.2 Makefile.3 Makefile.4 Makefile.5 \ - Makefile.6 Makefile.7 Makefile.8 Makefile.9 Makefile.a Makefile.b \ - Makefile.c Makefile.h \ - Makefile.i Makefile.j Makefile.k - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.0 b/build/tests/RomTypeTest/ARM9/Makefile.0 deleted file mode 100644 index a0db88bd..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.0 +++ /dev/null @@ -1,61 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 0 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = RT$(TARGET_NUMBER)A -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.1 b/build/tests/RomTypeTest/ARM9/Makefile.1 deleted file mode 100644 index 295a0190..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.1 +++ /dev/null @@ -1,61 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 1 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = RT$(TARGET_NUMBER)A -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.2 b/build/tests/RomTypeTest/ARM9/Makefile.2 deleted file mode 100644 index fdb9e52e..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.2 +++ /dev/null @@ -1,61 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 2 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = RT$(TARGET_NUMBER)A -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.3 b/build/tests/RomTypeTest/ARM9/Makefile.3 deleted file mode 100644 index dceb5ad8..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.3 +++ /dev/null @@ -1,61 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 3 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = RT$(TARGET_NUMBER)A -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.4 b/build/tests/RomTypeTest/ARM9/Makefile.4 deleted file mode 100644 index 023be1e1..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.4 +++ /dev/null @@ -1,61 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 4 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).srl -TITLEID_LO = RT$(TARGET_NUMBER)A -#TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.5 b/build/tests/RomTypeTest/ARM9/Makefile.5 deleted file mode 100644 index 25957624..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.5 +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 5 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.6 b/build/tests/RomTypeTest/ARM9/Makefile.6 deleted file mode 100644 index 9eccec93..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.6 +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 6 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.7 b/build/tests/RomTypeTest/ARM9/Makefile.7 deleted file mode 100644 index fae03c69..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.7 +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 7 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.8 b/build/tests/RomTypeTest/ARM9/Makefile.8 deleted file mode 100644 index b1b44b6f..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.8 +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 8 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.9 b/build/tests/RomTypeTest/ARM9/Makefile.9 deleted file mode 100644 index 26a85d17..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.9 +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 9 -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.a b/build/tests/RomTypeTest/ARM9/Makefile.a deleted file mode 100644 index 83348305..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.a +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = a -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.b b/build/tests/RomTypeTest/ARM9/Makefile.b deleted file mode 100644 index 08b8224b..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.b +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = b -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.c b/build/tests/RomTypeTest/ARM9/Makefile.c deleted file mode 100644 index f8bd7ad8..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.c +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = c -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.h b/build/tests/RomTypeTest/ARM9/Makefile.h deleted file mode 100644 index ad5100a2..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.h +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = h -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.i b/build/tests/RomTypeTest/ARM9/Makefile.i deleted file mode 100644 index a1a1cb33..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.i +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = i -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.j b/build/tests/RomTypeTest/ARM9/Makefile.j deleted file mode 100644 index be75d339..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.j +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = j -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/Makefile.k b/build/tests/RomTypeTest/ARM9/Makefile.k deleted file mode 100644 index caf16051..00000000 --- a/build/tests/RomTypeTest/ARM9/Makefile.k +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = k -TARGET_NAME = RomTypeTest$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = RT$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c RomTypeTest.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -MAKETAD_OPTION += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/ARM9/main0.rsf b/build/tests/RomTypeTest/ARM9/main0.rsf deleted file mode 100644 index 4ba1965f..00000000 --- a/build/tests/RomTypeTest/ARM9/main0.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_0.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main1.rsf b/build/tests/RomTypeTest/ARM9/main1.rsf deleted file mode 100644 index 3f11e2da..00000000 --- a/build/tests/RomTypeTest/ARM9/main1.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_1.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main2.rsf b/build/tests/RomTypeTest/ARM9/main2.rsf deleted file mode 100644 index 045dddc3..00000000 --- a/build/tests/RomTypeTest/ARM9/main2.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_2.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main3.rsf b/build/tests/RomTypeTest/ARM9/main3.rsf deleted file mode 100644 index 78932ce2..00000000 --- a/build/tests/RomTypeTest/ARM9/main3.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_3.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main4.rsf b/build/tests/RomTypeTest/ARM9/main4.rsf deleted file mode 100644 index 68adda4e..00000000 --- a/build/tests/RomTypeTest/ARM9/main4.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_4.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - #Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main5.rsf b/build/tests/RomTypeTest/ARM9/main5.rsf deleted file mode 100644 index 95188af0..00000000 --- a/build/tests/RomTypeTest/ARM9/main5.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_5.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main6.rsf b/build/tests/RomTypeTest/ARM9/main6.rsf deleted file mode 100644 index b8155275..00000000 --- a/build/tests/RomTypeTest/ARM9/main6.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_6.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main7.rsf b/build/tests/RomTypeTest/ARM9/main7.rsf deleted file mode 100644 index bfc391a5..00000000 --- a/build/tests/RomTypeTest/ARM9/main7.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_7.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main8.rsf b/build/tests/RomTypeTest/ARM9/main8.rsf deleted file mode 100644 index 7ee473d5..00000000 --- a/build/tests/RomTypeTest/ARM9/main8.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_8.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/main9.rsf b/build/tests/RomTypeTest/ARM9/main9.rsf deleted file mode 100644 index 9cdf6617..00000000 --- a/build/tests/RomTypeTest/ARM9/main9.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_9.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/maina.rsf b/build/tests/RomTypeTest/ARM9/maina.rsf deleted file mode 100644 index b575ba4e..00000000 --- a/build/tests/RomTypeTest/ARM9/maina.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_a.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/mainb.rsf b/build/tests/RomTypeTest/ARM9/mainb.rsf deleted file mode 100644 index 85a3c914..00000000 --- a/build/tests/RomTypeTest/ARM9/mainb.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_b.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/mainc.rsf b/build/tests/RomTypeTest/ARM9/mainc.rsf deleted file mode 100644 index ac929d83..00000000 --- a/build/tests/RomTypeTest/ARM9/mainc.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_c.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/mainh.rsf b/build/tests/RomTypeTest/ARM9/mainh.rsf deleted file mode 100644 index 02d4c355..00000000 --- a/build/tests/RomTypeTest/ARM9/mainh.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_h.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/maini.rsf b/build/tests/RomTypeTest/ARM9/maini.rsf deleted file mode 100644 index 28e76872..00000000 --- a/build/tests/RomTypeTest/ARM9/maini.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_i.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess TRUE - SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/mainj.rsf b/build/tests/RomTypeTest/ARM9/mainj.rsf deleted file mode 100644 index 084716a8..00000000 --- a/build/tests/RomTypeTest/ARM9/mainj.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_j.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/maink.rsf b/build/tests/RomTypeTest/ARM9/maink.rsf deleted file mode 100644 index c53b6cd6..00000000 --- a/build/tests/RomTypeTest/ARM9/maink.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_k.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - #AppType USER - AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/RomTypeTest/ARM9/src/RomTypeTest.c b/build/tests/RomTypeTest/ARM9/src/RomTypeTest.c deleted file mode 100644 index 0f77a0a7..00000000 --- a/build/tests/RomTypeTest/ARM9/src/RomTypeTest.c +++ /dev/null @@ -1,419 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: DS_Chat.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" -#include "RomTypeTest.h" - -// define data------------------------------------------ -#define RETURN_BUTTON_TOP_X 2 -#define RETURN_BUTTON_TOP_Y 21 -#define RETURN_BUTTON_BOTTOM_X ( RETURN_BUTTON_TOP_X + 8 ) -#define RETURN_BUTTON_BOTTOM_Y ( RETURN_BUTTON_TOP_Y + 2 ) - -#define ENABLE_CONTENT 0 -#define ENABLE_SHARED2 0 - -#if (ENABLE_CONTENT == 1) -#define CTRUE TRUE -#else -#define CTRUE FALSE -#endif - -#if (ENABLE_SHARED2 == 1) -#define STRUE TRUE -#else -#define STRUE FALSE -#endif - -#define TEST_NUM 15 - -typedef enum AccessPermission { - PERMISSION_NA = 0, - PERMISSION_RO, - PERMISSION_RW, - PERMISSION_ERROR, - PERMISSION_MAX -} -AccessPermission; - -// extern data------------------------------------------ - -// function's prototype declaration--------------------- -static AccessPermission RWExTestCore( char *path, char *testfile ); -static AccessPermission SRLTest( void ); -static AccessPermission ContentTest( void ); -static void FinalizeRWTest( FSFile *file, char* filename ); -static AccessPermission RWTestCore( char *path, char *testfile ); -static AccessPermission RWTest( char *path ); -static void TestFSPermission( void ); - -// global variable ------------------------------------- -RTCDrawProperty g_rtcDraw = { - TRUE, RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y -}; - -// static variable ------------------------------------- -static BOOL s_quiettest = FALSE; - -// const data ----------------------------------------- -static AccessPermission s_answer_data[TEST_NUM]; - -static const u16 *s_answer_str[PERMISSION_MAX] = -{ - L"NA", - L"RO", - L"RW", - L"~", -}; - -static const u16 *s_test_name[TEST_NUM] = -{ - L"nand:", - L"nand2:", - L"content:", - L"shared1:", - L"shared2:", - L"photo:", - L"dataPub:", - L"dataPrv:", - L"sdmc:", - L"nand:/sys", - L"nand:/import", - L"nand:/tmp", - L"nand:/", - L"nand:/", - L"nand:/" -}; - -//====================================================== -// eXgvO -//====================================================== - -static AccessPermission RWExistTestCore( char *path, char *testfile ) -{ - char filename[256]; - int len; - char buf[5]; - FSFile file[1]; - AccessPermission result = PERMISSION_RW; - - FS_InitFile( file ); - STD_TSNPrintf( filename, 256, "%s/%s", path, testfile ); - - // RWL[ht@CI[v - if ( !FS_OpenFileEx( file, filename, FS_FILEMODE_RWL ) ) - { - // RWL[ht@CI[vs - if( !s_quiettest ) OS_TPrintf("%s:RWL mode open failed.\n",filename); - FS_CloseFile( file ); - // R[ht@CI[v - if ( !FS_OpenFileEx( file, filename, FS_FILEMODE_R ) ) - { - // R[ht@CI[vs - if( !s_quiettest ) OS_TPrintf("%s:R mode open failed.\n",filename); - return PERMISSION_NA; - } - result = PERMISSION_RO; - } - - // t@C[h - len = FS_ReadFile( file, buf, 3 ); - if( len != 3 ) - { - // [hs - if( !s_quiettest ) OS_TPrintf("%s:read failed.\n",filename); - FS_CloseFile( file ); - return PERMISSION_ERROR; - } - - // t@CN[Y - if( !FS_CloseFile( file ) ) - { - // N[Ys - if( !s_quiettest ) OS_TPrintf("%s:close failed.\n",filename); - return PERMISSION_ERROR; - } - - return result; -} - -static AccessPermission BannerTest( void ) -{ - return RWExistTestCore( "nand:", "" ); -} - -static AccessPermission SRLTest( void ) -{ - return RWExistTestCore( "nand:", "" ); -} - -static AccessPermission ContentTest( void ) -{ - return RWExistTestCore( "content:", "title.tmd" ); -} - -static AccessPermission Shared1Test( void ) -{ - return RWExistTestCore( "shared1:", "TWLCFG0.dat" ); -} - -static void FinalizeRWTest( FSFile *file, char* filename ) -{ - FS_CloseFile( file ); - FS_DeleteFile( filename ); -} - -// pX͍ŌɃXbVȂ -static AccessPermission RWTestCore( char *path, char *testfile ) -{ - char filename[256]; - int len; - char buf[5]; - FSFile file[1]; - - FS_InitFile( file ); - STD_TSNPrintf( filename, 256, "%s/%s", path, testfile ); - - // t@CcĂƌȂ̂ō폜ɑ点ĂieXgʂɂ͉ej - FS_DeleteFile(filename); - - // t@C쐬eXg - if ( FS_CreateFile(filename, FS_PERMIT_R | FS_PERMIT_W) ) - { - // t@CI[v - if ( !FS_OpenFileEx( file, filename, FS_FILEMODE_W ) ) - { - // t@CI[vs - if( !s_quiettest ) OS_TPrintf("%s:open failed.\n",filename); - FS_DeleteFile( filename ); - return PERMISSION_ERROR; - } - // t@CCg - len = FS_WriteFile( file, "test", 5); - if( len != 5 ) - { - // Cgs - if( !s_quiettest ) OS_TPrintf("%s:write failed.\n",filename); - FinalizeRWTest( file, filename ); - return PERMISSION_ERROR; - } - // t@CN[Y - if( !FS_CloseFile( file ) ) - { - // N[Ys - if( !s_quiettest ) OS_TPrintf("%s:close failed.\n",filename); - FinalizeRWTest( file, filename ); - return PERMISSION_ERROR; - } - - // t@CI[v - if ( !FS_OpenFileEx( file, filename, FS_FILEMODE_R ) ) - { - // t@CI[vs - if( !s_quiettest ) OS_TPrintf("%s:open failed.\n",filename); - FS_DeleteFile( filename ); - return PERMISSION_ERROR; - } - // t@C[h - len = FS_ReadFile( file, buf, len ); - if( len != 5 || STD_CompareString( buf, "test" ) != 0 ) - { - // [hs - if( !s_quiettest ) OS_TPrintf("%s:read failed.\n",filename); - FinalizeRWTest( file, filename ); - return PERMISSION_ERROR; - } - // t@CN[Y - if( !FS_CloseFile( file ) ) - { - // N[Ys - if( !s_quiettest ) OS_TPrintf("%s:close failed.\n",filename); - FinalizeRWTest( file, filename ); - return PERMISSION_ERROR; - } - // t@Cf[g - if( !FS_DeleteFile( filename )) - { - // f[gs - if( !s_quiettest ) OS_TPrintf("%s:delete failed.\n",filename); - FinalizeRWTest( file, filename ); - return PERMISSION_ERROR; - } - }else - { - // t@C쐬s - FSResult fs_result = FS_GetArchiveResultCode( filename ); - if( !s_quiettest ) OS_TPrintf("%s:cleate failed.\n",filename); - OS_TPrintf( "FS_GetArchiveResultCode(%s) : %d\n", filename, fs_result ); - if( FS_RESULT_ERROR == fs_result ) - { - // t@C쐬NO_ENTRY݂ȂfBNg̉Ƀt@C낤Ƃ}EgĂȂ - // ǂɂANZXłȂAfBNg݂̑mF鎖łȂ̂ŁAp[~bVNAƂĈ - return PERMISSION_NA; - }else if( FS_RESULT_PERMISSION_DENIED == fs_result ) - { - // PERMISSION_DENIEDꍇAROłȂmFKv - if ( !FS_OpenFileEx( file, filename, FS_FILEMODE_R ) ) - { - if( FS_RESULT_PERMISSION_DENIED == FS_GetArchiveResultCode( filename ) ) - { - // ˋ̃t@CR[hœǂݍƂʂDENIEDȂp[~bVNA - return PERMISSION_NA; - } - } - return PERMISSION_ERROR; - } - // ƂERROR - return PERMISSION_ERROR; - } - - return PERMISSION_RW; -} - -static AccessPermission RWTest( char *path ) -{ - return RWTestCore( path, "test.txt" ); -} - -static AccessPermission TMPJumpTest( void ) -{ - return RWTestCore( "nand:", "" ); -} - -static void TestFSPermission( void ) -{ - AccessPermission result[TEST_NUM]; - BOOL test_ok = TRUE; - int l; - - result[0] = RWTest( "nand:" ); // nand: - result[1] = RWTest( "nand2:" ); // nand2: - result[2] = ContentTest(); // content: - result[3] = Shared1Test(); // shared1: - result[4] = RWTest( "shared2:" ); // shared2: - result[5] = RWTest( "photo:" ); // photo: - result[6] = RWTest( "dataPub:" ); // dataPub: - result[7] = RWTest( "dataPrv:" ); // dataPrv: - result[8] = RWTest( "sdmc:" ); // sdmc: - result[9] = RWTest( "nand:/sys" ); // nand:/sys - result[10] = RWTest( "nand:/import" ); // nand:/import - result[11] = RWTest( "nand:/tmp" ); // nand:/tmp - result[12] = SRLTest(); // nand:/ - result[13] = BannerTest(); // nand:/ - result[14] = TMPJumpTest(); // nand:/ - - for( l=0; ltitleID_Lo[1]); - PutStringUTF16( 1 * 8, 11 * 8, TXT_COLOR_WHITE, test_ok ? (const u16 *)L"Test Succeeded." : (const u16 *)L"Test Failed..." ); - - for( l=0; l<15; l++ ) - { - PutStringUTF16Sub( 8*1, l * 12, TXT_COLOR_WHITE, s_test_name[l]); - PutStringUTF16Sub( 8*18 + 8, l * 12, TXT_COLOR_WHITE, s_answer_str[ s_answer_data[l] ]); - PutStringUTF16Sub( 8*18 + 8*7, l * 12, ( result[l]==s_answer_data[l] ? TXT_COLOR_CYAN : TXT_COLOR_YELLOW ), s_answer_str[ result[l] ]); - } - -} - -static void makeAnswerData( void ) -{ - ROM_Header_Short *rhs = (ROM_Header_Short *)(HW_TWL_ROM_HEADER_BUF); - - BOOL isNandApp = (rhs->titleID_Hi & TITLE_ID_HI_MEDIA_MASK) ? TRUE : FALSE; - BOOL isSecureApp = (rhs->titleID_Hi & TITLE_ID_HI_SECURE_FLAG_MASK) ? TRUE : FALSE; - BOOL isNandAccessOn = (rhs->access_control.nand_access) ? TRUE : FALSE; - BOOL isSDCardAccessOn = (rhs->access_control.sd_card_access) ? TRUE : FALSE; - BOOL isEnablePublicSaveData = ( rhs->public_save_data_size != 0 ) ? TRUE : FALSE; - BOOL isEnablePrivateSaveData = ( rhs->private_save_data_size != 0 ) ? TRUE : FALSE; - - // ANZXݒ𐶐AMȂ́AwŃtANZX - s_answer_data[0] = ( ( isNandApp || isNandAccessOn ) && isSecureApp ) ? PERMISSION_RW : PERMISSION_NA; // nand: iNANDAv or NANDANZXONjand SecureApp - s_answer_data[1] = ( ( isNandApp || isNandAccessOn ) && isSecureApp ) ? PERMISSION_RW : PERMISSION_NA; // nand2: iNANDAv or NANDANZXONjand SecureApp - s_answer_data[2] = ( isNandApp && CTRUE ) ? PERMISSION_RO : PERMISSION_NA; // content: ݖBL̏ꍇNANDAv̂ReadOnly - s_answer_data[3] = ( isNandApp || isNandAccessOn ) ? PERMISSION_RO : PERMISSION_NA; // shared1: iNANDAv or NANDANZXONjReadOnly - s_answer_data[4] = ( ( isNandApp || isNandAccessOn ) && STRUE ) ? PERMISSION_RW : PERMISSION_NA; // shared2: ݖBL̏ꍇ́iNANDAv or NANDANZXONj - s_answer_data[5] = ( isNandApp || isNandAccessOn ) ? PERMISSION_RW : PERMISSION_NA; // photo: NANDAv or NANDANZXON - s_answer_data[6] = ( isNandApp && isEnablePublicSaveData ) ? PERMISSION_RW : PERMISSION_NA; // dataPub: NANDAv and dataPub TCYݒ肠 - s_answer_data[7] = ( isNandApp && isEnablePrivateSaveData ) ? PERMISSION_RW : PERMISSION_NA; // dataPrv: NANDAv and dataPrv TCYݒ肠 - s_answer_data[8] = isSDCardAccessOn ? PERMISSION_RW : PERMISSION_NA; // sdmc: SDANZXiSDJ[hhĂȂƎsj - s_answer_data[9] = ( ( isNandApp || isNandAccessOn ) && isSecureApp ) ? PERMISSION_RW : PERMISSION_NA; // nand:/sys iNANDAv or NANDANZXONjand SecureApp - s_answer_data[10] = ( ( isNandApp || isNandAccessOn ) && isSecureApp ) ? PERMISSION_RW : PERMISSION_NA; // nand:/import iNANDAv or NANDANZXONjand SecureApp - s_answer_data[11] = ( ( isNandApp || isNandAccessOn ) && isSecureApp ) ? PERMISSION_RW : PERMISSION_NA; // nand:/tmp iNANDAv or NANDANZXONjand SecureApp - s_answer_data[12] = isNandApp ? ( isSecureApp ? PERMISSION_RW : PERMISSION_RO ) : PERMISSION_NA; // nand:/ NANDAvReadOnlyiSecurȅꍇ̓tANZXj - s_answer_data[13] = isNandApp ? PERMISSION_RW : PERMISSION_NA; // nand:/ NANDAv - s_answer_data[14] = ( isNandApp || isNandAccessOn ) ? PERMISSION_RW : PERMISSION_NA; // nand:/ NANDAv or NANDANZXON -} - -// eXgvȌ -void RomTypeTestInit( void ) -{ - GX_DispOff(); - GXS_DispOff(); - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - - PrintfSJIS( 1 * 8, 9 * 8, TXT_COLOR_BLACK, "FATFSPermissionCheck %c", (char)((ROM_Header_Short *)(HW_TWL_ROM_HEADER_BUF))->titleID_Lo[1]); - PutStringUTF16( 1 * 8, 11 * 8, TXT_COLOR_BLACK, (const u16 *)L"Start." ); - //GetAndDrawRTCData( &g_rtcDraw, TRUE ); - - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); - GX_DispOn(); - GXS_DispOn(); - - s_quiettest = FALSE; - - makeAnswerData(); - - TestFSPermission(); - -} - - -// eXgvÕC[v -void RomTypeTestMain(void) -{ - BOOL tp_cancel = FALSE; - - ReadTP(); // ^b`pl͂̎擾 - - // [RETURN]{^`FbN - if(tpd.disp.touch) { - tp_cancel = WithinRangeTP( RETURN_BUTTON_TOP_X * 8, RETURN_BUTTON_TOP_Y * 8 - 4, - RETURN_BUTTON_BOTTOM_X * 8, RETURN_BUTTON_BOTTOM_Y * 8 - 4, &tpd.disp ); - } - - if( ( pad.trg & PAD_BUTTON_A ) ) { - } - - if( ( pad.trg & PAD_BUTTON_X ) ) { - } - - if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) { -// SYSM_RebootLauncher(); - } - - //GetAndDrawRTCData( &g_rtcDraw, FALSE ); -} - - diff --git a/build/tests/RomTypeTest/ARM9/src/RomTypeTest.h b/build/tests/RomTypeTest/ARM9/src/RomTypeTest.h deleted file mode 100644 index 86e4339b..00000000 --- a/build/tests/RomTypeTest/ARM9/src/RomTypeTest.h +++ /dev/null @@ -1,36 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: RomTypeTest.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __ROM_TYPE_TEST_H__ -#define __ROM_TYPE_TEST_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -// define data---------------------------------------------------------- - -void RomTypeTestInit( void ); -void RomTypeTestMain( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __ROM_TYPE_TEST_H__ diff --git a/build/tests/RomTypeTest/ARM9/src/main.c b/build/tests/RomTypeTest/ARM9/src/main.c deleted file mode 100644 index 72fe2c5e..00000000 --- a/build/tests/RomTypeTest/ARM9/src/main.c +++ /dev/null @@ -1,86 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "misc.h" -#include "RomTypeTest.h" - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- - -// function's prototype------------------------------------------------------- -static void INTR_VBlank( void ); - -// global variable------------------------------------------------------------- - -// static variable------------------------------------------------------------- - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// function's description -// ============================================================================ -void TwlMain(void) -{ - - // ---------------------------------- - OS_Init(); - - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - GX_Init(); - GX_SetPower(GX_POWER_ALL); // eWbN p[ON - - // 荞݋---------------------------- - (void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // foCX------------------------------- - TP_Init(); - (void)RTC_Init(); - - // VXȅ------------------ - InitAllocator(); - - InitBG(); - RomTypeTestInit(); - // C[v---------------------------- - while(1){ - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - ReadTP(); // TP͂̎擾 - - RomTypeTestMain(); - } -} - - -// ============================================================================ -// 荞ݏ -// ============================================================================ - -// VuN荞 -static void INTR_VBlank(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // VuN`FbÑZbg -} - diff --git a/build/tests/RomTypeTest/Makefile b/build/tests/RomTypeTest/Makefile deleted file mode 100644 index 66754bca..00000000 --- a/build/tests/RomTypeTest/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/RomTypeTest/banner/Makefile b/build/tests/RomTypeTest/banner/Makefile deleted file mode 100644 index a03da7d0..00000000 --- a/build/tests/RomTypeTest/banner/Makefile +++ /dev/null @@ -1,35 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 Makefile.2 Makefile.3 Makefile.4 Makefile.5 \ - Makefile.6 Makefile.7 Makefile.8 Makefile.9 Makefile.a Makefile.b \ - Makefile.c Makefile.d Makefile.e Makefile.f Makefile.g Makefile.h \ - Makefile.i Makefile.j Makefile.k - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.0 b/build/tests/RomTypeTest/banner/Makefile.0 deleted file mode 100644 index 97c32d52..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.0 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 0 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.1 b/build/tests/RomTypeTest/banner/Makefile.1 deleted file mode 100644 index 54f8cd07..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.1 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 1 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.2 b/build/tests/RomTypeTest/banner/Makefile.2 deleted file mode 100644 index 13eeca27..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.2 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 2 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.3 b/build/tests/RomTypeTest/banner/Makefile.3 deleted file mode 100644 index 5bfadf81..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.3 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 3 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.4 b/build/tests/RomTypeTest/banner/Makefile.4 deleted file mode 100644 index 7ea01f33..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.4 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 4 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.5 b/build/tests/RomTypeTest/banner/Makefile.5 deleted file mode 100644 index 4c44bd16..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.5 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 5 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.6 b/build/tests/RomTypeTest/banner/Makefile.6 deleted file mode 100644 index a3cb390c..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.6 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 6 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.7 b/build/tests/RomTypeTest/banner/Makefile.7 deleted file mode 100644 index c4e38d94..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.7 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 7 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.8 b/build/tests/RomTypeTest/banner/Makefile.8 deleted file mode 100644 index b42bcec4..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.8 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 8 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.9 b/build/tests/RomTypeTest/banner/Makefile.9 deleted file mode 100644 index 5657c255..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.9 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 9 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.a b/build/tests/RomTypeTest/banner/Makefile.a deleted file mode 100644 index fc320423..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.a +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = a - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.b b/build/tests/RomTypeTest/banner/Makefile.b deleted file mode 100644 index 77b38975..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.b +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = b - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.c b/build/tests/RomTypeTest/banner/Makefile.c deleted file mode 100644 index c80098fe..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.c +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = c - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.d b/build/tests/RomTypeTest/banner/Makefile.d deleted file mode 100644 index 1187190a..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.d +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = d - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.e b/build/tests/RomTypeTest/banner/Makefile.e deleted file mode 100644 index 32024fb5..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.e +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = e - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.f b/build/tests/RomTypeTest/banner/Makefile.f deleted file mode 100644 index 2360a8d6..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.f +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = f - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.g b/build/tests/RomTypeTest/banner/Makefile.g deleted file mode 100644 index 3d947db4..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.g +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = g - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.h b/build/tests/RomTypeTest/banner/Makefile.h deleted file mode 100644 index 55893d65..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.h +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = h - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.i b/build/tests/RomTypeTest/banner/Makefile.i deleted file mode 100644 index 298a0bdb..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.i +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = i - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.j b/build/tests/RomTypeTest/banner/Makefile.j deleted file mode 100644 index e8d5ea6a..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.j +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = j - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/Makefile.k b/build/tests/RomTypeTest/banner/Makefile.k deleted file mode 100644 index b1cff1b6..00000000 --- a/build/tests/RomTypeTest/banner/Makefile.k +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = k - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/RomTypeTest/banner/banner_v3.bsf b/build/tests/RomTypeTest/banner/banner_v3.bsf deleted file mode 100644 index d595b6d35b72e52619f29b85a7cea0a85f471335..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmc(dK}!QM5QX2hg8v~<5IkrR!9$Ohu3Abdt_mL0tb9)y>^dE zV93mSJNw>be!jc9Rjy1%7x5T!s}<)>71dmy+zM`)oR-{Ab)s&=PT%}ZO#d}{(gGzl ziryPVMy1wNJhd4LjkaiaMXc>L03@c^nuYz(jhut!^0RvH$F0knzW#q9$U~moFDJ}z>JQgd8?{HqiSEC9Y(wJ*Wly6 zRcU(T6b&w`xQjJ=XX9JWnaNCF#09x$H~Z>ww#=h~HP(I-nf#Th!L($%5DJTha5`L6s@6ybjn%yN? zRVW_*0osgCYX1V0`n@z_{lZ=Hx%bU`@A8@_&L(AYupeOU!w*rG$gwV8ui2t-`7iaqoEDpxIr^P)f#UzZs0(QsSQt*9@9H z*U3v5MlA`>$3ypd0Ws4kX6(5P%~hCrn6d8-ZIr0!CTmG}KJ`8Ox(K$a)mjo=1^(DR zlKT~IHO*QIp87UQG{g@FzWx6i%$v+YJPf8_r_m8j%SxZFq9Ev^d_#&;uyeTxf$IPUVA8!~?UxO+tjABKw#Pv@%p@SbJx+)K&RSUtYI zM^R?D(L7gj@riN8O5JOQK|)+$ERN>6Qcw6G>w%}RDy5=41OJE4wek$NdgyDSZ$-Qi AC;$Ke diff --git a/build/tests/RomTypeTest/banner/icon/msk_pictchat_icon.bin b/build/tests/RomTypeTest/banner/icon/msk_pictchat_icon.bin deleted file mode 100644 index 5b2734aa29fe5a7cc1474fd910a9f00b579e0a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4480 zcmeHKJ#Q015Ou!H6)6~qMFFxP5(P>HS0O5hMMHJPrU*((r$~Vi#T7C5Z_VA>o4@S`d;40Nt*5jG@JWUM3#MJ4q~&_3TU_60<<4u z(vY8HU>0jS59BGzd6q4m1s*wsXtfRkNWu_4eh7W8EL(0>N)YKXU{^PsxCBni8~dtE^N z*MIc&54F!dKx>~K`psO>Hq@jT>VJXPnuMqR=w!(H&sUu*LVVkbMD3$@RE zpji979$f#nKJ)r_{p)jD($%l6f6d;P?^FMUcw7Iv_tW>Qf9^ACsM}ze+iTqa1#7^< ztk#7{2T|HBg@zQz5Vb_Hs1$jW{ImiE#gy3bEM|~ELTKJz-XMoV z>%a)k01LMQ5Izd}3(kOn^{>yPI-@C9gGa7=;FY3>!3|aat{2x47a=p+e*M4#k4&T; zn~&>?^-ukU_3xCjKl4kh4;uBiHw!dh9k_aww`YH!{huK>Nq@ZQV7T^?y>riRCxUZP zpxMB&xEfM_?LP~K8O;>9@-~3ZhSmRkzkduD^l$hjcej{~sTpJU(0NHom2wJ~ZAfu0CJ+wfuc?XW{m%2P@s>wT03@ vZsoCPTro5DtQ5^h6V=kWJCo5=wbavUBATz3s^#*nGVr<_O+}N{E6vnzcJN>n diff --git a/build/tests/RomTypeTest/banner/test-utf16_0_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_0_v3.TWL.bsf deleted file mode 100644 index f91f07dd3194e6ae787b476305c9c06eedb7da49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(OACTf5QWdyp#LDWu|*GP5wxqwvPFnW+pq^ErA4}^KVO|Y*9Wx77_N@vH)qc1 z`_;k(K5UriNSJ&MkuVOpv+Co^k6>U>z8kX=AtvGQ8saEf zf<5mKVTZz2oJ;MD;jpu!4D`Ra!iAa_(U+RtxU7hC2@>2L{` zK1_y3jTix*vS~nvDLeJt8CErv1;w;Q*QVBQO^aXA%jr2g>uAMjZHEr)XvJvSuieh# UpLKJ3`p1@v(b|hYXvJvy0|FIXJOBUy diff --git a/build/tests/RomTypeTest/banner/test-utf16_1_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_1_v3.TWL.bsf deleted file mode 100644 index b793ddcf5df669bb94c4fba4e972d4b24724dabb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rFRPf_4>Iwg^#a8+M_jv`82A^40mr8?;CnejUee&YaQD zyM-xSn9$LY(E02mVjS^c)y19Jo|%aNSLRJLKrJ3pFpGFEzWz88I%{(yOW^JZDZ#Sjm|#cFd!~;R-f= z=nRJ%Aw0ZfQ;!Z~b`FG`V_iWRP)u8BlUn~Z4Sq!@qZjO~q7{>BTXa}OD<-Ag%IysP TSv#X=HMUets=cg1D<-AC2ZdZj diff --git a/build/tests/RomTypeTest/banner/test-utf16_2_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_2_v3.TWL.bsf deleted file mode 100644 index b5bcbdb4bbea1c7d25e2f2519f8d08eefe4751c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE%y2-;O-*&;-xZPF4Vk$zSQg^k6>U>z8kX=AtvGQ8saEf zf<5mKVTZz2oJ;MD;jpu!4D`Ra!iAa_(U+RtxU7hC2@>2L{` zK1_y3jTix*vS~nvDLeHpGpuST3yNuru1&4qnijvJm(z20*3pX5+72Do(TdTuU%Q>f UKkMf7^p7nSqqP@*(2CLY2NGpmQ~&?~ diff --git a/build/tests/RomTypeTest/banner/test-utf16_4_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_4_v3.TWL.bsf deleted file mode 100644 index e2025bf5df8fda5164a86d1793cead05878e0ab6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE#*1nnxaY!RZ;Hta%4X^}4K<*W0LH)xSE{5p=`oH?VP zcMDUvFrlL(q4U{C#5m%?s*5|bJu?#luFRWg$k_-Hvw9;vhK51$Zo*1{kc7pnkCS8( z4!l2w9SK`0RjLU?$|rXC%}>>LU?$GUPRC`&2R!mBN0T0RjLU?$|rXC%}>>LU?$GUPRC`&2R!mBN0UbqLWB>pF diff --git a/build/tests/RomTypeTest/banner/test-utf16_6_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_6_v3.TWL.bsf deleted file mode 100644 index 9886587c5e481abdf442abfa07b2f72c6ab43094..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE#r1??)bY!RZ;Hta%4X^}4K<*W0LH)xSE{5p=`oH?VP zcMDUvFrlL(q4U{C#5m%?s*5|bJu?#luFRWg$k_-Hvw9;vhK51$Zo*1{kc7pnkCS8( z4!l2w9SK`0RjLU?$|rXC%}>>LU?$GUPRC`&2R!mBN0V1_rYybcN diff --git a/build/tests/RomTypeTest/banner/test-utf16_7_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_7_v3.TWL.bsf deleted file mode 100644 index 27726336a524d6349603fa27a754c88e07a7faf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(OACTf5QWdyp#LDWu|*GP5wxqwvPFnW+pq^ErA4}^KVO|Y*9Wx77_N@vH)qc1 z`_;k(K5UriNSJ&MkuVOpv+Co^k6>U>z8kX=AtvGQ8saEf zf<5mKVTZz2oJ;MD;jpu!4D`Ra!iAa_(U+RtxU7hC2@>2L{` zK1_y3jTix*vS~nvDLb{l8CErv1;w;Q*QVBQO^aXA%jr2g>uAMjZHEr)XvJvSuieh# UpLKJ3`p1@v(b|hYXvJvy11Ke2bN~PV diff --git a/build/tests/RomTypeTest/banner/test-utf16_8_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_8_v3.TWL.bsf deleted file mode 100644 index 8cb61ef207d6623ea3b1d96a0867eb005fdc8dbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE%xDB4wI*&;-xZPF4Vk$zSQgF4Vk$zSQg<0SuH~!~g&Q diff --git a/build/tests/RomTypeTest/banner/test-utf16_b_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_b_v3.TWL.bsf deleted file mode 100644 index 02983981ce6c926d03d15c1cb7ae6e9ef7f7d57c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE%x2-;O-*&;-xZD>VFX^}4K<*W0LH)xSE{5p=`oH?VP zcLy`LFrlL-q4U{C%sAq~s*5|bJu?#_uFTtL$=M2#uzDjsfre4}ZpuoCh=j$fkCS9E z4!l2w9Sd7=HnmfR#mP7iwNeUuyP%GZI{|qgPc+dCr`gvQjX81kB^o;Tkr5 z=nRJ%5j?zPQ;!Z4b_PN&u&JR8D5fj4Nv;2y2EU?{(@S>N(Td5mEjp~D6_e3!?REzL Ttew;I23sm7(_S^86_e3l5(Hh$ diff --git a/build/tests/RomTypeTest/banner/test-utf16_c_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_c_v3.TWL.bsf deleted file mode 100644 index 7475a88ac2e97eb17144dba32b36de9e6d0d63e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%?pA+5XIlsp#MSWVuwDUL(r`v%MKwbUBf;oDJ{}N{qxn^*;MF|GORm0{`Soq zeZN|mz=sVJ9SM`?5DDXeJF7l!%y!IdM7S_-q9JQ7M9S)w^aut9#k(;p5n>V!pCOKt zCD?O+2s;$Ebg^Zg6b_eg z>BD4r)QAz_DU$|tn2Lg$bB0v~WeL+3U7K3}H7$Nc51O9yW)-a%O*?d0MJq83``f(W|PZJZDZ#St*!4_RQnb;Tkr5 z=nRJ%5j?zPQ;!Z4b_PN&u&JR8D5fj4Nv;2y2EU?{(@S>N(Td5mEjp~D6_e3!?REzL Ttew;I23sm7(_S^86_e3l9OPZx diff --git a/build/tests/RomTypeTest/banner/test-utf16_e_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_e_v3.TWL.bsf deleted file mode 100644 index 69ecd6ec9fb9be75906de9a6551b4d6101788c09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(OACTf5QWdyp#LDWu|*GP5wxqwvPFnW+pq^ErA4}^KVO|Y*9Wx77_N@vH)qc1 z`_;k(K5UriNSJ&MkuVOpv+Co^k6>U>z8kX=AtvGQ8saEf zf<5mKVTZz2oJ;MD;jpu!4D`Ra!iAa_(U+RtxU7hC2@>2L{` zK1_y3jTix*vS~nvDLeI^GpuST3yNuru1&4qnijvJm(z20*3pX5+72Do(TdTuU%Q>f UKkMf7^p7nSqqP@*(2CLY2O?Bm zTbRIw2^}2?ozFfZ#sLpjUEG=Nn3)K0W!^+X&RU3=)f?#%Gz^M&V^#u$BrINioFt2| z=lv<{P}q{Qshuz^c9xWe{tuVCQ1b%%QnP!U5#xdly{cNmbLP~9m7M8f%RDL^E@9J$ z&Tyy^!oy28_2@8W=TXQRRuz;1#k7Sssr6se;8%1qdd|)&S~01%MTb?iVp7_z+|J;i TwKIBJV@t)P+KU>rVp94GC&XRs diff --git a/build/tests/RomTypeTest/banner/test-utf16_g_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_g_v3.TWL.bsf deleted file mode 100644 index 3fcb24cf15f6ee448e41094c2576923b68496397..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE%x2-;O-*&;-xZP*2q(jr~d%U9eVf99O0u7_`-ISFO5ebV|AAw{s zj=VpG9Sd7=HnmfR#mP7iwNeUuyP%GZI{|qgPc+dCr`gvQjX8?3u@OB z&>0RjB6xVorXC$8>eVf99O0u7_`-ISFO5ebV|A7{y8 z9C?2VI~KO$Y-*OB z&>0RjB6xVorXC$8>jOWCu87n2z#g=(eIb6b} z50l|hBSwIyY#PvE%Fam08CDv~f@0c2+tm84Y4Iz11wCh{j#f;r?a-l)R!mO&+U+d< US+}64e{89kTzl~ct(ctt05}w01ONa4 diff --git a/build/tests/RomTypeTest/banner/test-utf16_j_v3.TWL.bsf b/build/tests/RomTypeTest/banner/test-utf16_j_v3.TWL.bsf deleted file mode 100644 index cd034555836a9b02398be9d40332e478c6769fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcma)(%L;;E5QWdypmz}3*rE%x2-;O-*&;-xZPF4Vk$zSQg zp)(w6gz)f^O+7k{*?AUnhE)Y+KrwBhO=|tuH24*rjGnWzidIajZP8&Bt(cT{E4MTF UXYGuh*4R=psrI4eVf99O0u7_`-ISF85ebV|A7{y8 z9C?2VI~KO$Y-*OB z&>0RjB6xVorXC$8> -#include - -static void PrintBootType(); - -static void InitDEMOSystem(); -static void InitInteruptSystem(); -static void InitAllocSystem(); -static void InitFileSystem(); - -static char* LoadFile(const char* path); -static BOOL SaveFile(const char* path, void* pData, u32 size); -static u32 GetCounter(const char* root); -static void SetCounter(const char* root, u32 counter); -static void PrintBackup(const char* root); -static BOOL AddBackup(const char* root); -static void PrintAndAddBackup(const char* root); - -// OS_Printf̃tbN֐ -#ifndef SDK_FINALROM -void OS_Printf(const char *fmt, ...) -{ - char dst[256]; - - int ret; - va_list va; - va_start(va, fmt); - ret = OS_VSPrintf(dst, fmt, va); - va_end(va); - - OS_PutString(dst); -} -#endif - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: C֐łB - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -void TwlMain(void) -{ - OS_Init(); - RTC_Init(); - InitInteruptSystem(); - InitFileSystem(); - InitAllocSystem(); - InitDEMOSystem(); - OS_Printf("*** start nandApp demo\n"); - - OS_Printf("Build:%s %s\n", __DATE__, __TIME__); - - PrintBootType(); - - // Shared2 t@C NAND ɕۑ܂B - // ̂ߎgp API FS API ƂȂA - // t@CVXeƂăANZX邱Ƃł܂B - { - // ushared2v AvԂŋLłt@C̃A[JCułB - OS_Printf("Shared2 file %04x:\n", *(u16 *)( HW_TWL_ROM_HEADER_BUF + 0x020c ) ); - PrintAndAddBackup("shared2:"); - - OS_Printf("\n"); - } - - OS_Printf("*** End of demo\n"); - - - // `[ɖ߂悤ɁA - // IȂ - for (;;) - { - // t[XVB - { - DEMO_DrawFlip(); - OS_WaitVBlankIntr(); - } - } - - OS_Terminate(); -} - - -/*---------------------------------------------------------------------------* - Name: LoadFile - - Description: Ńmۂt@Cǂݍ݂܂B - - Arguments: path: ǂݍރt@C̃pXB - - Returns: t@C݂Ȃt@C̓eǂݍ܂ꂽ - Ŋmۂobt@ւ̃|C^Ԃ܂B - ̃|C^ FS_Free ʼnKv܂B - *---------------------------------------------------------------------------*/ -static char* LoadFile(const char* path) -{ - FSFile f; - BOOL bSuccess; - char* pBuffer; - u32 fileSize; - s32 readSize; - - FS_InitFile(&f); - - bSuccess = FS_OpenFileEx(&f, path, FS_FILEMODE_R); - if( ! bSuccess ) - { - return NULL; - } - - fileSize = FS_GetFileLength(&f); - pBuffer = (char*)OS_Alloc(fileSize + 1); - SDK_POINTER_ASSERT(pBuffer); - - readSize = FS_ReadFile(&f, pBuffer, (s32)fileSize); - SDK_ASSERT( readSize == fileSize ); - - bSuccess = FS_CloseFile(&f); - SDK_ASSERT( bSuccess ); - - pBuffer[fileSize] = '\0'; - return pBuffer; -} - -/*---------------------------------------------------------------------------* - Name: SaveFile - - Description: t@C쐬f[^݂܂B - r̃fBNg͍쐬܂B - - Arguments: path: 쐬t@C̃pXB - pData: ރf[^B - size: ރf[^̃TCYB - - Returns: TRUE - *---------------------------------------------------------------------------*/ -static BOOL SaveFile(const char* path, void* pData, u32 size) -{ - FSFile f; - BOOL bSuccess; - FSResult fsResult; - s32 writtenSize; - - FS_InitFile(&f); - - FS_CreateFile(path, (FS_PERMIT_R|FS_PERMIT_W)); - bSuccess = FS_OpenFileEx(&f, path, FS_FILEMODE_W); - if (bSuccess == FALSE) - { - FSResult res = FS_GetArchiveResultCode(path); - OS_Printf("Failed create file:%d\n", res); - return FALSE; - } - SDK_ASSERT( bSuccess ); - - fsResult = FS_SetFileLength(&f, 0); - SDK_ASSERT( fsResult == FS_RESULT_SUCCESS ); - - writtenSize = FS_WriteFile(&f, pData, (s32)size); - SDK_ASSERT( writtenSize == size ); - - bSuccess = FS_CloseFile(&f); - SDK_ASSERT( bSuccess ); - return TRUE; -} - -/*---------------------------------------------------------------------------* - Name: GetCounter - - Description: /counter.bin ɕۑĂJE^lǂݍ݂܂B - - Arguments: root: counter.bin ۑĂfBNg̃pXB - - Returns: JE^lԂ܂B - /counter.bin ݂Ȃꍇ 0 Ԃ܂B - *---------------------------------------------------------------------------*/ -static u32 GetCounter(const char* root) -{ - char path[FS_FILE_NAME_MAX]; - char* pBuffer; - u32 counter = 0; - - STD_TSNPrintf(path, sizeof(path), "%s/counter.bin", root); - - pBuffer = LoadFile(path); - if( pBuffer != NULL ) - { - counter = MI_LoadLE32(pBuffer); - OS_Free(pBuffer); - } - - OS_Printf("%s counter is %d.\n", root, counter); - - return counter; -} - -/*---------------------------------------------------------------------------* - Name: SetCounter - - Description: /counter.bin ɃJE^lۑ܂B - t@Cꍇ͍쐬܂B - - Arguments: root: counter.bin ۑfBNg̃pXB - counter: ۑJE^lB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void SetCounter(const char* root, u32 counter) -{ - char path[FS_FILE_NAME_MAX]; - - STD_TSNPrintf(path, sizeof(path), "%s/counter.bin", root); - (void)SaveFile(path, &counter, sizeof(counter)); -} - -/*---------------------------------------------------------------------------* - Name: PrintBackup - - Description: w肳ꂽfBNg̓e print ܂B - TufBNg̓e print ܂B - - Arguments: root: Ώۂ̃fBNg̃pXB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void PrintBackup(const char* root) -{ - FSFile dir; - FSDirectoryEntryInfo entry; - BOOL bSuccess; - int numEntry = 0; - - FS_InitFile(&dir); - - bSuccess = FS_OpenDirectory(&dir, root, FS_FILEMODE_R); - if( bSuccess ) - { - while( FS_ReadDirectory(&dir, &entry) ) - { - // ewGg̓XLbv܂ - if( (STD_CompareString(entry.longname, ".") == 0) - || (STD_CompareString(entry.longname, "..") == 0) ) - { - continue; - } - - if( (entry.attributes & FS_ATTRIBUTE_IS_DIRECTORY) != 0 ) - { - // fBNg - OS_Printf(" d %s\n", entry.longname); - } - else - { - // t@C - - char path[FS_FILE_NAME_MAX]; - char* text; - char* found_cr; - char* found_lf; - - // ŏ̉s܂ł̓e\܂B - STD_TSNPrintf(path, sizeof(path), "%s/%s", root, entry.longname); - text = LoadFile(path); - SDK_POINTER_ASSERT(text); - - found_cr = STD_SearchString(text, "\r"); - if( found_cr != NULL ) - { - *found_cr = '\0'; - } - found_lf = STD_SearchString(text, "\n"); - if( found_lf != NULL ) - { - *found_lf = '\0'; - } - - OS_Printf(" f %-6s %s\n", entry.longname, text); - OS_Free(text); - } - - numEntry++; - } - - bSuccess = FS_CloseDirectory(&dir); - SDK_ASSERT( bSuccess ); - } - - if( numEntry == 0 ) - { - OS_TPrintf(" (no entry)\n"); - } -} - -/*---------------------------------------------------------------------------* - Name: AddBackup - - Description: Ώۂ̃fBNgɃeXgp̃fBNgƃt@C - 쐬܂B - - Arguments: root: Ώۂ̃fBNg̃pXB - - Returns: TRUE - *---------------------------------------------------------------------------*/ -static BOOL AddBackup(const char* root) -{ - char path[FS_FILE_NAME_MAX]; - char text[256]; - u32 counter; - BOOL bSuccess; - u8 GameCode[ 5 ]; - - // ROMwb_GameCode擾 - { - int i; - u8 *p = (u8 *)(HW_TWL_ROM_HEADER_BUF + 0x0233 ); - MI_CpuClear8( GameCode, sizeof(GameCode) ); - for( i = 0; i < 4; i++ ) { - GameCode[ i ] = *p--; - } - } - // t@Cɏޓe𐶐܂B - STD_TSNPrintf(text, sizeof(text), ": generated by %s", GameCode ); - - // t@C̐ɎgpJE^l擾/XV܂B - counter = GetCounter(root); - counter++; - SetCounter(root, counter); - - // fBNg쐬 - STD_TSNPrintf(path, sizeof(path), "%s/dir_%d", root, counter); - bSuccess = FS_CreateDirectory(path, (FS_PERMIT_R|FS_PERMIT_W)); - if (bSuccess == FALSE) - { - FSResult res = FS_GetArchiveResultCode(path); - OS_Printf("Failed create directory:%d\n", res); - return FALSE; - } - SDK_ASSERT( bSuccess ); - - // t@C쐬 - STD_TSNPrintf(path, sizeof(path), "%s/file_%d", root, counter); - (void)SaveFile(path, text, (u32)STD_GetStringLength(text)); - return TRUE; -} - -/*---------------------------------------------------------------------------* - Name: PrintAndAddBackup - - Description: Ώۂ̃fBNg̓e\AeXgp - fBNgƃt@C쐬܂B - - Arguments: root: Ώۂ̃fBNg̃pXB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void PrintAndAddBackup(const char* root) -{ - PrintBackup(root); - (void)AddBackup(root); -} - - -/*---------------------------------------------------------------------------* - Name: PrintBootType - - Description: BootType print ܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void PrintBootType() -{ - const OSBootType btype = OS_GetBootType(); - - switch( btype ) - { - case OS_BOOTTYPE_ROM: OS_TPrintf("OS_GetBootType = OS_BOOTTYPE_ROM\n"); break; - case OS_BOOTTYPE_NAND: OS_TPrintf("OS_GetBootType = OS_BOOTTYPE_NAND\n"); break; - default: - { - OS_Warning("unknown BootType(=%d)", btype); - } - break; - } -} - -/*---------------------------------------------------------------------------* - Name: InitDEMOSystem - - Description: R\[̉ʏo͗p̕\ݒs܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void InitDEMOSystem() -{ - // ʕ\̏B - DEMOInitCommon(); - DEMOInitVRAM(); - DEMOInitDisplayBitmap(); - DEMOHookConsole(); - DEMOSetBitmapTextColor(GX_RGBA(31, 31, 0, 1)); - DEMOSetBitmapGroundColor(DEMO_RGB_CLEAR); - DEMOStartDisplay(); -} - -/*---------------------------------------------------------------------------* - Name: InitInteruptSystem - - Description: 荞݂܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void InitInteruptSystem() -{ - // •ʊ荞݃tOSĕs‚ - (void)OS_SetIrqMask(0); - - // }X^[荞݃tO‚ - (void)OS_EnableIrq(); - - // IRQ 荞݂‚܂ - (void)OS_EnableInterrupts(); -} - -/*---------------------------------------------------------------------------* - Name: InitAllocSystem - - Description: q[v쐬 OS_Alloc g悤ɂ܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void InitAllocSystem() -{ - void* newArenaLo; - OSHeapHandle hHeap; - - // CA[ĩAP[gVXe - newArenaLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetMainArenaLo(newArenaLo); - - // CA[iɃq[v쐬 - hHeap = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - OS_SetCurrentHeap(OS_ARENA_MAIN, hHeap); -} - -/*---------------------------------------------------------------------------* - Name: InitFileSystem - - Description: FS ܂B - ̊֐ĂяoO InitInteruptSystem() - Ă΂ĂKv܂B - - Arguments: ȂB - - Returns: ȂB - *---------------------------------------------------------------------------*/ -static void InitFileSystem() -{ - // ARM7Ƃ̒ʐMFIFO荞݋ - (void)OS_EnableIrqMask(OS_IE_SPFIFO_RECV); - - // t@CVXe - FS_Init( FS_DMA_NOT_USE ); -} diff --git a/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lcf.template b/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lcf.template deleted file mode 100644 index bdc95bb6..00000000 --- a/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lcf.template +++ /dev/null @@ -1,1048 +0,0 @@ -#--------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ARM9-TS.lcf.template -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- -MEMORY -{ - (RWX) : ORIGIN = , LENGTH = 0x0 > - - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - F (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWXO): ORIGIN = , LENGTH = 0x0 > - - - dummy.MAIN_EX.NITRO (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0 - arena.MAIN.NITRO (RW) : ORIGIN = AFTER(,), LENGTH = 0x0 - arena.MAIN_EX.NITRO (RW) : ORIGIN = AFTER(dummy.MAIN_EX.NITRO,), LENGTH = 0x0 - arena.ITCM (RW) : ORIGIN = AFTER(ITCM,), LENGTH = 0x0 - arena.DTCM (RW) : ORIGIN = AFTER(DTCM,), LENGTH = 0x0 - - check.ITCM (RW) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check - check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check - check.MAIN.NITRO (RW) : ORIGIN = 0x02000000, LENGTH = 0x0f80000 > main.nitro.check - - binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWX) : ORIGIN = , LENGTH = 0x0 >> - - binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> - - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - L (RW) : ORIGIN = 0, LENGTH = 0x0 > - - (RWXO): ORIGIN = , LENGTH = 0x0 > - - - dummy.MAIN_EX.TWL (RW) : ORIGIN = 0x0d000000, LENGTH = 0x0 - arena.MAIN.TWL (RW) : ORIGIN = AFTER(,,LTDMAIN,), LENGTH = 0x0 - arena.MAIN_EX.TWL (RW) : ORIGIN = AFTER(dummy.MAIN_EX.TWL,,,LTDMAIN,), LENGTH = 0x0 - - check.MAIN.TWL (RW) : ORIGIN = 0x02000000, LENGTH = 0x0f80000 > main.twl.check - - binary.MODULE_FILES (RW) : ORIGIN = 0, LENGTH = 0x0 > component.files -} - -FORCE_ACTIVE -{ - SVC_SoftReset -} - -KEEP_SECTION -{ - .sinit -} - -SECTIONS -{ - ############################ STATIC ################################# - .: - { - ALIGNALL(4); - . = ALIGN(32); # Fit to cache line - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_STATIC_START =.; - SDK_STATIC_TEXT_START =.; - #:::::::::: text/rodata - libsyscall.a (.text) - OBJECT(_start,*) - crt0.FLX.TWL.o (.text) - crt0.FLX.TWL.o (.rodata) - # - # .version ZNVljĂ܂B - # ̃ZNVɊ܂܂̓bg`FbN̍ۂ - # KvƂȂ܂̂ŁAK̈ʒuɎc悤ɂĉB - # - * (.version) - OBJECT(TwlMain,*) - - - - - - - * (.exception) - . = ALIGN(4); - SDK_STATIC_ETABLE_START =.; - __exception_table_start__ =.; - EXCEPTION - __exception_table_end__ =.; - SDK_STATIC_ETABLE_END =.; - - - - - - - - - - - - - . = ALIGN(4); - SDK_STATIC_SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_STATIC_SINIT_END =.; - #:::::::::: text/rodata - SDK_STATIC_TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(32); # Fit to cache line - SDK_STATIC_DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - . = ALIGN(4); - - SDK_LTDOVERLAYTABLE_DIGEST =.; - . = . + 20; - SDK_LTDOVERLAYTABLE_DIGEST_END =.; - SDK_OVERLAYTABLE_DIGEST =.; - . = . + 20; - SDK_OVERLAYTABLE_DIGEST_END =.; - SDK_OVERLAY_DIGEST =.; - . = . + * 20; - . = . + * 20; - SDK_OVERLAY_DIGEST_END =.; - #:::::::::: data - . = ALIGN(32); - SDK_STATIC_DATA_END =.; - SDK_STATIC_END =.; - - SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; - SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; - SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; - __sinit__ = SDK_STATIC_SINIT_START; # for static initializer - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(32); # Fit to cache line - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_STATIC_BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(32); - SDK_STATIC_BSS_END = .; - - SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; - - } >> - - - ############################ AUTOLOADS ############################## - SDK_AUTOLOAD.ITCM.START = 0x01ff8000; - SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START; - SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START; - SDK_AUTOLOAD.ITCM.SIZE = 0; - SDK_AUTOLOAD.ITCM.BSS_SIZE = 0; - SDK_AUTOLOAD.DTCM.START = 0x02fe0000; - SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START; - SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START; - SDK_AUTOLOAD.DTCM.SIZE = 0; - SDK_AUTOLOAD.DTCM.BSS_SIZE = 0; - SDK_AUTOLOAD_START = SDK_STATIC_END; - SDK_AUTOLOAD_SIZE = 0; - SDK_AUTOLOAD_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_AUTOLOAD__ID =; - SDK_AUTOLOAD..ID =; - SDK_AUTOLOAD..START =.; - SDK_AUTOLOAD..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_AUTOLOAD..SINIT_START = .; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_AUTOLOAD..SINIT_END = .; - #:::::::::: text/rodata - SDK_AUTOLOAD..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE BLOCK - # - . = ALIGN(32); - SDK_AUTOLOAD..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: data - SDK_AUTOLOAD..DATA_END =.; - . = ALIGN(32); - SDK_AUTOLOAD..END =.; - - SDK_AUTOLOAD..TEXT_SIZE = SDK_AUTOLOAD..TEXT_END - SDK_AUTOLOAD..TEXT_START; - SDK_AUTOLOAD..DATA_SIZE = SDK_AUTOLOAD..DATA_END - SDK_AUTOLOAD..DATA_START; - SDK_AUTOLOAD..SIZE = SDK_AUTOLOAD..END - SDK_AUTOLOAD..START; - SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL - - - # - # BSS BLOCK - # - SDK_AUTOLOAD..BSS_START = .; - #:::::::::: bss - - - - - - - - - - - - - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(32); - SDK_AUTOLOAD..BSS_END = .; - - SDK_AUTOLOAD..BSS_SIZE = SDK_AUTOLOAD..BSS_END - SDK_AUTOLOAD..BSS_START; - - } >> - - - - SDK_AUTOLOAD_ITCM_START = SDK_AUTOLOAD.ITCM.START; - SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END; - SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END; - SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE; - SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE; - SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START; - SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END; - SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END; - SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE; - SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE; - - ############################ AUTOLOAD_INFO ########################## - .binary.AUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_AUTOLOAD..SIZE; - WRITEW SDK_AUTOLOAD..SINIT_START; - WRITEW SDK_AUTOLOAD..BSS_SIZE; - - - } > binary.AUTOLOAD_INFO - - SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; - SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); - SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); - - ############################ STATIC_FOOTER ########################## - .binary.STATIC_FOOTER: - { - WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE - WRITEW _start_ModuleParams - ADDR(.); - WRITEW SDK_OVERLAY_DIGEST - ADDR(.); - WRITEW _start_LtdModuleParams - ADDR(.); - } > binary.STATIC_FOOTER - - ############################ OVERLAYS ############################### - SDK_OVERLAY_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(32); # Fit to cache line - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # TEXT BLOCK: READ ONLY - # - SDK_OVERLAY__ID =; ### SEGMENT OVERLAY ID - SDK_OVERLAY..ID =; - SDK_OVERLAY..START =.; - SDK_OVERLAY..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_OVERLAY..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_OVERLAY..SINIT_END =.; - #:::::::::: text/rodata - SDK_OVERLAY..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(32); - SDK_OVERLAY..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - #:::::::::: data - SDK_OVERLAY..DATA_END =.; - . = ALIGN(32); - SDK_OVERLAY..END =.; - - SDK_OVERLAY..TEXT_SIZE = SDK_OVERLAY..TEXT_END - SDK_OVERLAY..TEXT_START; - SDK_OVERLAY..DATA_SIZE = SDK_OVERLAY..DATA_END - SDK_OVERLAY..DATA_START; - SDK_OVERLAY..SIZE = SDK_OVERLAY..END - SDK_OVERLAY..START; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_OVERLAY..BSS_START = .; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(32); - SDK_OVERLAY..BSS_END = .; - - SDK_OVERLAY..BSS_SIZE = SDK_OVERLAY..BSS_END - SDK_OVERLAY..BSS_START; - - } >> - - - - ############################ OVERLAYDEFS ############################ - .F: - { - ### module information - WRITEW ADDR(.); # load address - WRITEW _start; # entry address - WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module - WRITEW _start_AutoloadDoneCallback; # callback autoload done - - ### overlay filename - - WRITES (""); # Overlay - - - } > F - - ############################ OVERLAYTABLE ########################### - .F: - { - - WRITEW ; # overlay ID - WRITEW ADDR(.); # load address - WRITEW SDK_OVERLAY..SIZE; # size of module - WRITEW SDK_OVERLAY..BSS_SIZE; # size of bss - WRITEW SDK_OVERLAY..SINIT_START; # start address of static init - WRITEW SDK_OVERLAY..SINIT_END; # end address of static init - WRITEW ; # ROM file ID - WRITEW 0; # compressed state - - - } > F - - ############################ ARENA ################################## - .dummy.MAIN_EX.NITRO: - { - . = ALIGN(32); - - } > dummy.MAIN_EX.NITRO - - .arena.MAIN.NITRO: - { - . = ALIGN(32); - SDK_SECTION_ARENA_START =.; - - } > arena.MAIN.NITRO - - .arena.MAIN_EX.NITRO: - { - . = ALIGN(32); - SDK_SECTION_ARENA_EX_START =.; - - } > arena.MAIN_EX.NITRO - - .arena.ITCM: - { - . = ALIGN(32); - SDK_SECTION_ARENA_ITCM_START =.; - - } > arena.ITCM - - .arena.DTCM: - { - . = ALIGN(32); - SDK_SECTION_ARENA_DTCM_START =.; - - } > arena.DTCM - - ############################ OTHERS ################################# - SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START; - SDK_IRQ_STACKSIZE = ; # allocated in DTCM - SDK_SYS_STACKSIZE = ; # when 0 means all remains of DTCM - SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; - - .check.ITCM: - { - . = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE; - - . = . + SDK_OVERLAY..SIZE + SDK_OVERLAY..BSS_SIZE; - - - } > check.ITCM - - .check.DTCM: - { - . = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE; - - . = . + SDK_OVERLAY..SIZE + SDK_OVERLAY..BSS_SIZE; - - . = . + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; - } > check.DTCM - - .check.MAIN.NITRO: - { - . = SDK_SECTION_ARENA_START; - - } > check.MAIN.NITRO - - ########################### LTDAUTOLOADS ############################ - SDK_LTDAUTOLOAD.LTDMAIN.START = SDK_STATIC_BSS_END; - SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD.LTDMAIN.BSS_EDN = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD.LTDMAIN.SIZE = 0; - SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE = 0; - SDK_LTDAUTOLOAD_TOP_START = 0x02400000; - SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC ̈悪 4 bytes ̃_~[oCit@C̐擪ɓ # - SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; - SDK_LTDAUTOLOAD_SIZE = 0; - SDK_LTDAUTOLOAD_NUMBER = ; - - .binary.LTDAUTOLOAD_TOP: - { - WRITEW 0; - - } > binary.LTDAUTOLOAD_TOP - - - .: - { - ALIGNALL(4); - . = ALIGN(32); # Fit to cache line - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - SDK_LTDAUTOLOAD__ID =; - SDK_LTDAUTOLOAD..ID =; - SDK_LTDAUTOLOAD..START =.; - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDAUTOLOAD..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDAUTOLOAD..SINIT_START = .; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_LTDAUTOLOAD..SINIT_END = .; - #:::::::::: text/rodata - SDK_LTDAUTOLOAD..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(32); - SDK_LTDAUTOLOAD..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - - - - - - - #:::::::::: data - SDK_LTDAUTOLOAD..DATA_END =.; - . = ALIGN(32); - SDK_LTDAUTOLOAD..END =.; - - SDK_LTDAUTOLOAD..TEXT_SIZE = SDK_LTDAUTOLOAD..TEXT_END - SDK_LTDAUTOLOAD..TEXT_START; - SDK_LTDAUTOLOAD..DATA_SIZE = SDK_LTDAUTOLOAD..DATA_END - SDK_LTDAUTOLOAD..DATA_START; - SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDAUTOLOAD..BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(32); - SDK_LTDAUTOLOAD..BSS_END =.; - - SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; - - } >> - - - - SDK_LTDAUTOLOAD_LTDMAIN_START = SDK_LTDAUTOLOAD.LTDMAIN.START; - SDK_LTDAUTOLOAD_LTDMAIN_END = SDK_LTDAUTOLOAD.LTDMAIN.END; - SDK_LTDAUTOLOAD_LTDMAIN_BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END; - SDK_LTDAUTOLOAD_LTDMAIN_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.SIZE; - SDK_LTDAUTOLOAD_LTDMAIN_BSS_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE; - - ######################### LTDAUTOLOAD_INFO ########################## - .binary.LTDAUTOLOAD_INFO: - { - - WRITEW ADDR(.); - WRITEW SDK_LTDAUTOLOAD..SIZE; - WRITEW SDK_LTDAUTOLOAD..SINIT_START; - WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; - - - } > binary.LTDAUTOLOAD_INFO - - SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; - SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); - SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); - - ########################### LTDOVERLAYS ############################# - SDK_LTDOVERLAY_NUMBER = ; - - - .: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - SDK_LTDOVERLAY__ID =; - SDK_LTDOVERLAY..ID =; - SDK_LTDOVERLAY..START =.; - # - # TEXT BLOCK: READ ONLY - # - SDK_LTDOVERLAY..TEXT_START =.; - #:::::::::: text/rodata - - - - - - - - - - - - - - - - - - - . = ALIGN(4); - SDK_LTDOVERLAY..SINIT_START =.; - #:::::::::: ctor - - - - - - - - - - - - - WRITEW 0; - #:::::::::: ctor - SDK_LTDOVERLAY..SINIT_END =.; - #:::::::::: text/rodata - SDK_LTDOVERLAY..TEXT_END =.; - - # - # DATA BLOCK: READ WRITE - # - . = ALIGN(32); - SDK_LTDOVERLAY..DATA_START =.; - #:::::::::: data - - - - - - - - - - - - - #:::::::::: data - SDK_LTDOVERLAY..DATA_END =.; - . = ALIGN(32); - SDK_LTDOVERLAY..END =.; - - SDK_LTDOVERLAY..TEXT_SIZE = SDK_LTDOVERLAY..TEXT_END - SDK_LTDOVERLAY..TEXT_START; - SDK_LTDOVERLAY..DATA_SIZE = SDK_LTDOVERLAY..DATA_END - SDK_LTDOVERLAY..DATA_START; - SDK_LTDOVERLAY..SIZE = SDK_LTDOVERLAY..END - SDK_LTDOVERLAY..START; - - } > - - ..bss: - { - ALIGNALL(4); - . = ALIGN(32); - - # - # Definition to refer overlay segment, when same name symbols exist in multiple overlays. - # - - SEARCH_SYMBOL ; - - - # - # BSS BLOCK - # - SDK_LTDOVERLAY..BSS_START =.; - #:::::::::: bss - - - - - - - - - - - - - #:::::::::: bss - . = ALIGN(32); - SDK_LTDOVERLAY..BSS_END =.; - - SDK_LTDOVERLAY..BSS_SIZE = SDK_LTDOVERLAY..BSS_END - SDK_LTDOVERLAY..BSS_START; - - } >> - - - - ########################## LTDOVERLAYDEFS ########################### - .L: - { - ### TWL limited extended static module information - WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address - WRITEW 0; # padding - WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module - WRITEW 0; # padding - - ### TWL limited overlay filename - - WRITES (""); - - - } > L - - ######################### LTDOVERLAYTABLE ########################### - .L: - { - - WRITEW ; # overlay ID - WRITEW ADDR(.); # load address - WRITEW SDK_LTDOVERLAY..SIZE; # size of module - WRITEW SDK_LTDOVERLAY..BSS_SIZE; # size of bss - WRITEW SDK_LTDOVERLAY..SINIT_START; # start address of static init - WRITEW SDK_LTDOVERLAY..SINIT_END; # end address of static init - WRITEW ; # ROM file ID - WRITEW 0; # compressed state - - - } > L - - ############################ ARENA ################################## - .dummy.MAIN_EX.TWL: - { - . = ALIGN(32); - - } > dummy.MAIN_EX.TWL - - .arena.MAIN.TWL: - { - . = ALIGN(32); - SDK_LTDMAIN_ARENA_LO =.; - - } > arena.MAIN.TWL - - .arena.MAIN_EX.TWL: - { - . = ALIGN(32); - SDK_LTDMAIN_EX_ARENA_LO =.; - - } > arena.MAIN_EX.TWL - - .check.MAIN.TWL: - { - . = SDK_LTDMAIN_ARENA_LO; - - } > check.MAIN.TWL - - ############################ OTHERS ################################# - # Module filelist - .binary.MODULE_FILES: - { - WRITES (""); - WRITES (""); - WRITES (""); - WRITES (""); - WRITES (""); - WRITES (""); - - } > binary.MODULE_FILES - -} diff --git a/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lsf b/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lsf deleted file mode 100644 index b4de7a96..00000000 --- a/build/tests/SimpleBenchmark/ARM9/ARM9-TS.lsf +++ /dev/null @@ -1,53 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ARM9-BB.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL LCF SPEC FILE -# - -Static $(TARGET_NAME) -{ - Address 0x02680200 - Object $(OBJS_STATIC) - Library $(LLIBS) $(GLIBS) $(CW_LIBS) -} - -Autoload ITCM -{ - Address 0x01ff8000 - Object * (.itcm) - Object $(OBJS_AUTOLOAD) (.text) - Object $(OBJS_AUTOLOAD) (.rodata) -} - -Autoload DTCM -{ - Address $(ADDRESS_DTCM) - Object * (.dtcm) - Object $(OBJS_AUTOLOAD) (.data) - Object $(OBJS_AUTOLOAD) (.sdata) - Object $(OBJS_AUTOLOAD) (.bss) - Object $(OBJS_AUTOLOAD) (.sbss) -} - -Ltdautoload LTDMAIN -{ - # NITRO/TWL L̃I[o[C݂ꍇ́Aɂ̌ɔzuKv܂B - After $(TARGET_NAME) - Object * (.ltdmain) - Object $(OBJS_LTDAUTOLOAD) - Library $(LLIBS_EX) $(GLIBS_EX) -} diff --git a/build/tests/SimpleBenchmark/ARM9/Makefile b/build/tests/SimpleBenchmark/ARM9/Makefile deleted file mode 100644 index 4144a38b..00000000 --- a/build/tests/SimpleBenchmark/ARM9/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/commondefs - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/SimpleBenchmark/ARM9/Makefile.0 b/build/tests/SimpleBenchmark/ARM9/Makefile.0 deleted file mode 100644 index fcfff216..00000000 --- a/build/tests/SimpleBenchmark/ARM9/Makefile.0 +++ /dev/null @@ -1,77 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- -# R|[lgI ( jackal ) - -export DEFAULT_COMP_ARM7 = jackal - -COMPONENT_DIR = $(TWL_IPL_RED_ROOT)/build/components/$(DEFAULT_COMP_ARM7).TWL -WRAM_MAP_FILE = $(COMPONENT_DIR)/wram_regs/wram_regs.rbin - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 0 -TARGET_NAME = SimpleBenchmark$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TARGET_BIN = $(TARGET_NAME).tad -LCFILE_SPEC = ARM9-TS.lsf -LCFILE_TEMPLATE = ARM9-TS.lcf.template - -TITLEID_LO = SB$(TARGET_NUMBER)A - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c SimpleBenchmark.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LLIBRARIES = libhotsw$(TWL_LIBSUFFIX).a - -LINCLUDES = $(MISC_DIR)/include - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) -ADDRESS_DTCM = 0x0e000000 - -MAKEROM_FLAGS += -DWRAM_MAP_FILE='$(WRAM_MAP_FILE)' -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/SimpleBenchmark/ARM9/Makefile.1 b/build/tests/SimpleBenchmark/ARM9/Makefile.1 deleted file mode 100644 index c9ab05b9..00000000 --- a/build/tests/SimpleBenchmark/ARM9/Makefile.1 +++ /dev/null @@ -1,64 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - simpleShoot-1 -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- - -TWL_NANDAPP = TRUE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -TARGET_NUMBER = 1 -TARGET_NAME = SimpleBenchmark$(TARGET_NUMBER) -BINDIR = ./bin/$(TWL_BUILDTYPE)/$(TARGET_NAME) -TITLEID_LO = SB$(TARGET_NUMBER)A -TARGET_BIN = $(TARGET_NAME).tad - -ROM_SPEC = main$(TARGET_NUMBER).rsf - -MISC_DIR = ../../../systemMenu_RED/misc - -SRCS = main.c SimpleBenchmark.c \ - $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c - -LINCLUDES = $(MISC_DIR)/include - -LLIBRARIES = libhotsw$(TWL_LIBSUFFIX).a - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' -#MAKETAD_FLAGS += -s - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = $(TARGET_TAD) - -#---------------------------------------------------------------------------- - -do-build : $(TARGETS) - - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- - -#===== End of Makefile ===== diff --git a/build/tests/SimpleBenchmark/ARM9/main0.rsf b/build/tests/SimpleBenchmark/ARM9/main0.rsf deleted file mode 100644 index 7b576398..00000000 --- a/build/tests/SimpleBenchmark/ARM9/main0.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_0.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMappingDirect $(WRAM_MAP_FILE) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - #NANDAccess FALSE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/SimpleBenchmark/ARM9/main1.rsf b/build/tests/SimpleBenchmark/ARM9/main1.rsf deleted file mode 100644 index 8045315d..00000000 --- a/build/tests/SimpleBenchmark/ARM9/main1.rsf +++ /dev/null @@ -1,204 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner_1.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - #SDCardAccess FALSE - - # - # NandAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - #AppType SYSTEM - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - #Media GameCard - Media NAND - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure TRUE - Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot ../../../systemMenu_RED/data - Root /data - File NTR_IPL_font_m.NFTR -} diff --git a/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.c b/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.c deleted file mode 100644 index 95ad3985..00000000 --- a/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.c +++ /dev/null @@ -1,119 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: DS_Chat.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "misc.h" -#include "SimpleBenchmark.h" - -// define data------------------------------------------ -#define RETURN_BUTTON_TOP_X 2 -#define RETURN_BUTTON_TOP_Y 21 -#define RETURN_BUTTON_BOTTOM_X ( RETURN_BUTTON_TOP_X + 8 ) -#define RETURN_BUTTON_BOTTOM_Y ( RETURN_BUTTON_TOP_Y + 2 ) - -// extern data------------------------------------------ - -// function's prototype declaration--------------------- - -// global variable ------------------------------------- -RTCDrawProperty g_rtcDraw = { - TRUE, RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y -}; - -// eXgvȌ -void SimpleBenchmarkInit( void ) -{ - OS_InitTick(); - - - if( (u32)OS_GetTitleId() == 0x53423041 ) //SB0A - { - HOTSW_Init(); - } - - GX_DispOff(); - GXS_DispOff(); - - GetAndDrawRTCData( &g_rtcDraw, TRUE ); - - GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); - GX_DispOn(); - GXS_DispOn(); -} - - -// eXgvÕC[v -void SimpleBenchmarkMain(void) -{ - BOOL tp_cancel = FALSE; - OSTick ot; - static u64 tm = 0; - - ReadTP(); // ^b`pl͂̎擾 - - // [RETURN]{^`FbN - if(tpd.disp.touch) { - tp_cancel = WithinRangeTP( RETURN_BUTTON_TOP_X * 8, RETURN_BUTTON_TOP_Y * 8 - 4, - RETURN_BUTTON_BOTTOM_X * 8, RETURN_BUTTON_BOTTOM_Y * 8 - 4, &tpd.disp ); - } - - - ot = OS_GetTick(); - NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); - PrintfSJIS( 0 * 8, 0 * 8, TXT_COLOR_RED, "%d\n",tm); - PutStringUTF16( 1 * 8, 2 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 3 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 4 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 5 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 6 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 7 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 8 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 9 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 10 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 11 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 12 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 13 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 14 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 15 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 16 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 17 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 18 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 19 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 20 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 21 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - PutStringUTF16( 1 * 8, 22 * 8, TXT_COLOR_BLUE, (const u16 *)L"SimpleBenchmarkTestSimpleBenchmarkTest"); - ot = OS_GetTick()-ot; - - tm = OS_TicksToMicroSeconds(ot); - - OS_TPrintf("%d\n", tm); - - if( ( pad.trg & PAD_BUTTON_A ) ) { - } - - if( ( pad.trg & PAD_BUTTON_X ) ) { - } - - if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) { -// SYSM_RebootLauncher(); - } - - GetAndDrawRTCData( &g_rtcDraw, FALSE ); -} - - diff --git a/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.h b/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.h deleted file mode 100644 index c62094e6..00000000 --- a/build/tests/SimpleBenchmark/ARM9/src/SimpleBenchmark.h +++ /dev/null @@ -1,36 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: RomTypeTest.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __SIMPLE_BENCHMARK_H__ -#define __SIMPLE_BENCHMARK_H__ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -// define data---------------------------------------------------------- - -void SimpleBenchmarkInit( void ); -void SimpleBenchmarkMain( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __SIMPLE_BENCHMARK_H__ diff --git a/build/tests/SimpleBenchmark/ARM9/src/main.c b/build/tests/SimpleBenchmark/ARM9/src/main.c deleted file mode 100644 index 7bac66bc..00000000 --- a/build/tests/SimpleBenchmark/ARM9/src/main.c +++ /dev/null @@ -1,86 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "misc.h" -#include "SimpleBenchmark.h" - -// extern data----------------------------------------------------------------- - -// define data----------------------------------------------------------------- - -// function's prototype------------------------------------------------------- -static void INTR_VBlank( void ); - -// global variable------------------------------------------------------------- - -// static variable------------------------------------------------------------- - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// function's description -// ============================================================================ -void TwlMain(void) -{ - - // ---------------------------------- - OS_Init(); - - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - GX_Init(); - GX_SetPower(GX_POWER_ALL); // eWbN p[ON - - // 荞݋---------------------------- - (void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // foCX------------------------------- - TP_Init(); - (void)RTC_Init(); - - // VXȅ------------------ - InitAllocator(); - - InitBG(); - SimpleBenchmarkInit(); - // C[v---------------------------- - while(1){ - OS_WaitIrq(1, OS_IE_V_BLANK); // VuN荞ݑ҂ - - ReadKeyPad(); // L[͂̎擾 - ReadTP(); // TP͂̎擾 - - SimpleBenchmarkMain(); - } -} - - -// ============================================================================ -// 荞ݏ -// ============================================================================ - -// VuN荞 -static void INTR_VBlank(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // VuN`FbÑZbg -} - diff --git a/build/tests/SimpleBenchmark/Makefile b/build/tests/SimpleBenchmark/Makefile deleted file mode 100644 index 66754bca..00000000 --- a/build/tests/SimpleBenchmark/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = banner ARM9 - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/SimpleBenchmark/banner/Makefile b/build/tests/SimpleBenchmark/banner/Makefile deleted file mode 100644 index a11fb47a..00000000 --- a/build/tests/SimpleBenchmark/banner/Makefile +++ /dev/null @@ -1,32 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -SUBDIRS = -SUBMAKES = Makefile.0 Makefile.1 - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - - -# diff --git a/build/tests/SimpleBenchmark/banner/Makefile.0 b/build/tests/SimpleBenchmark/banner/Makefile.0 deleted file mode 100644 index 97c32d52..00000000 --- a/build/tests/SimpleBenchmark/banner/Makefile.0 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 0 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/SimpleBenchmark/banner/Makefile.1 b/build/tests/SimpleBenchmark/banner/Makefile.1 deleted file mode 100644 index 54f8cd07..00000000 --- a/build/tests/SimpleBenchmark/banner/Makefile.1 +++ /dev/null @@ -1,48 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -BNRNUM = 1 - -ICON_DIR = ./icon - -BANNER_SPEC = test-utf16_$(BNRNUM)_v3.TWL.bsf - -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe - -TARGETS = banner_$(BNRNUM).bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) - $(MAKEBANNER) -p TWL $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/SimpleBenchmark/banner/banner_v3.bsf b/build/tests/SimpleBenchmark/banner/banner_v3.bsf deleted file mode 100644 index d595b6d35b72e52619f29b85a7cea0a85f471335..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 762 zcmc(dK}!QM5QX2hg8v~<5IkrR!9$Ohu3Abdt_mL0tb9)y>^dE zV93mSJNw>be!jc9Rjy1%7x5T!s}<)>71dmy+zM`)oR-{Ab)s&=PT%}ZO#d}{(gGzl ziryPVMy1wNJhd4LjkaiaMXc>L03@c^nuYz(jhut!^0RvH$F0knzW#q9$U~moFDJ}z>JQgd8?{HqiSEC9Y(wJ*Wly6 zRcU(T6b&w`xQjJ=XX9JWnaNCF#09x$H~Z>ww#=h~HP(I-nf#Th!L($%5DJTha5`L6s@6ybjn%yN? zRVW_*0osgCYX1V0`n@z_{lZ=Hx%bU`@A8@_&L(AYupeOU!w*rG$gwV8ui2t-`7iaqoEDpxIr^P)f#UzZs0(QsSQt*9@9H z*U3v5MlA`>$3ypd0Ws4kX6(5P%~hCrn6d8-ZIr0!CTmG}KJ`8Ox(K$a)mjo=1^(DR zlKT~IHO*QIp87UQG{g@FzWx6i%$v+YJPf8_r_m8j%SxZFq9Ev^d_#&;uyeTxf$IPUVA8!~?UxO+tjABKw#Pv@%p@SbJx+)K&RSUtYI zM^R?D(L7gj@riN8O5JOQK|)+$ERN>6Qcw6G>w%}RDy5=41OJE4wek$NdgyDSZ$-Qi AC;$Ke diff --git a/build/tests/SimpleBenchmark/banner/icon/msk_pictchat_icon.bin b/build/tests/SimpleBenchmark/banner/icon/msk_pictchat_icon.bin deleted file mode 100644 index 5b2734aa29fe5a7cc1474fd910a9f00b579e0a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4480 zcmeHKJ#Q015Ou!H6)6~qMFFxP5(P>HS0O5hMMHJPrU*((r$~Vi#T7C5Z_VA>o4@S`d;40Nt*5jG@JWUM3#MJ4q~&_3TU_60<<4u z(vY8HU>0jS59BGzd6q4m1s*wsXtfRkNWu_4eh7W8EL(0>N)YKXU{^PsxCBni8~dtE^N z*MIc&54F!dKx>~K`psO>Hq@jT>VJXPnuMqR=w!(H&sUu*LVVkbMD3$@RE zpji979$f#nKJ)r_{p)jD($%l6f6d;P?^FMUcw7Iv_tW>Qf9^ACsM}ze+iTqa1#7^< ztk#7{2T|HBg@zQz5Vb_Hs1$jW{ImiE#gy3bEM|~ELTKJz-XMoV z>%a)k01LMQ5Izd}3(kOn^{>yPI-@C9gGa7=;FY3>!3|aat{2x47a=p+e*M4#k4&T; zn~&>?^-ukU_3xCjKl4kh4;uBiHw!dh9k_aww`YH!{huK>Nq@ZQV7T^?y>riRCxUZP zpxMB&xEfM_?LP~K8O;>9@-~3ZhSmRkzkduD^l$hjcej{~sTpJU(0NHom2wJ~ZAfu0CJ+wfuc?XW{m%2P@s>wT03@ vZsoCPTro5DtQ5^h6V=kWJCo5=wbavUBATz3s^#*nGVr<_O+}N{E6vnzcJN>n diff --git a/build/tests/SimpleBenchmark/banner/test-utf16_0_v3.TWL.bsf b/build/tests/SimpleBenchmark/banner/test-utf16_0_v3.TWL.bsf deleted file mode 100644 index f59e3078bf3dacf2b457265c1b21188f0bdd737c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 802 zcmbtSO$&lh5S*()|3TO^NLNZH~gYF;h>q6#b^d+-9oN>nyYkHMl!E@l$f}Jm>jSchs=WvFI zK3v^UoL+S|pZ;=Xi|ZRTWm^X`Rw=85DCvwbw`6{N`#LP8?85+7(#qi71hUY*@D30R&im+Wn3W@qp6 zel;*c3?D998ZP$458$9zejBoq;zC5gXM%%f z8FqX>728*Ag$t>jGXgRzl!NXMu5cm!Qu>nK9rk$Ogf+cNE$2G2YtBl6X=B4YD;>@e z(ub=Piqo6UHln{w+2Z<6O_|m~#GUk#Zc>?GVafKC+f)^wx^^Bs-bMtYGNq!eig1le hfTgvHaE(fAeX1V+wD7Ak{^N9oYrM? -#include -#include -#include -#include -#include -#ifndef SDK_FINALROM -#include -#endif -#include "boot_sync.h" - -/*---------------------------------------------------------------------------*/ -void _start(void); -void _start_AutoloadDoneCallback(void* argv[]); - -/*---------------------------------------------------------------------------* - OQ - *---------------------------------------------------------------------------*/ -/* JXNvgɂ`V{Q */ -extern void SDK_AUTOLOAD_LIST(void); -extern void SDK_AUTOLOAD_LIST_END(void); -extern void SDK_AUTOLOAD_START(void); -extern void SDK_STATIC_START(void); -extern void SDK_STATIC_BSS_START(void); -extern void SDK_STATIC_BSS_END(void); -extern void SDK_LTDAUTOLOAD_LIST(void); -extern void SDK_LTDAUTOLOAD_LIST_END(void); -extern void SDK_LTDAUTOLOAD_START(void); -extern void SDK_WRAM_ARENA_LO(void); - -/* O֐Q */ -extern void OS_IrqHandler(void); -#ifndef SDK_NOINIT -extern void _fp_init(void); -extern void __call_static_initializers(void); -#endif - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define SDK_NITROCODE_LE 0x2106c0de -#define SDK_NITROCODE_BE 0xdec00621 -#define SDK_TWLCODE_LE 0x6314c0de -#define SDK_TWLCODE_BE 0xdec01463 - -/* .rodata ZNVɔzu郍[hɕKvȏ */ -void* const _start_ModuleParams[] = -{ - (void*)0, - (void*)0, - (void*)0, - (void*)SDK_STATIC_BSS_START, - (void*)SDK_STATIC_BSS_END, - (void*)0, - (void*)0, - (void*)SDK_NITROCODE_BE, - (void*)SDK_NITROCODE_LE, -}; - -void* const _start_LtdModuleParams[] = -{ - (void*)SDK_LTDAUTOLOAD_LIST, - (void*)SDK_LTDAUTOLOAD_LIST_END, - (void*)SDK_LTDAUTOLOAD_START, - (void*)0, - (void*)SDK_TWLCODE_BE, - (void*)SDK_TWLCODE_LE, -}; - -/*---------------------------------------------------------------------------* - Name: ShakeHand - Description: ARM9 ShakeHand ֐ƓB - CłȂԂŎsKvB - Arguments: r0 - ARM9 pϐւ̃|C^B - r1 - ARM7 pϐւ̃|C^B - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_ShakeHand[10] = -{ - 0xe1d020b0, /* ldrh r2, [r0] ; ϐXLǂ */ - 0xe1d130b0, /* ldrh r3, [r1] ; ϐVLǂ */ - 0xe2833001, /* @1: add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe1d0c0b0, /* ldrh r12, [r0] ; ϐX̌Lǂ */ - 0xe152000c, /* cmp r2, r12 ; ϐX̕ω𔻒肷 */ - 0x0afffffa, /* beq @1 ; ωĂȂ΃[v */ - 0xe2833001, /* add r3, r3, #1 ; ϐV ++ */ - 0xe1c130b0, /* strh r3, [r1] ; ϐVLɏ */ - 0xe12fff1e /* bx lr ; nhVFCN */ -}; - -/*---------------------------------------------------------------------------* - Name: Stop - Description: vO~B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_Stop[2] = -{ - 0xef000006, /* @1: swi #6 ; SVC_Halt */ - 0xeafffffd /* b @1 ; [v */ -}; - -/*---------------------------------------------------------------------------* - Name: GotoMain - Description: ARM9 ɓ̏ԂɂȂƂ`ŁAMain ֐փWv - BɎwobt@ 0 NAsBX^bNœ삳 - 邱Ƃz肵ĂׁAX^bN؎gpȂB - Arguments: r0 - 0 NAobt@̐擪AhXB - 4 oCgACꂽAhXłKvB - r1 - 8 bit: ARM9 ɓ`tF[YԍB - 24 bit: 0 NAobt@̃TCYB - 4 ̔{łKvB - r2 - ptF[YǗϐւ̃|C^B - r3 - Main ֐̃|C^BMain ֐ Thumb R[hłꍇ - ɂ́Abx ߂ŃWv邽ߍʼnʃrbg 1 ɂȂ - KvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static const u32 microcode_GotoMain[10] = -{ - 0xe59fc01c, /* @1: ldr r12, [pc, #28] ; 24 bit }XNp */ - 0xe111000c, /* tst r1, r12 ; NAobt@cTCY`FbN */ - 0xe3a0c000, /* mov r12, #0 ; NApϐp */ - 0x1480c004, /* strne r12, [r0], #4 ; 4 oCgNA */ - 0x12411004, /* subne r1, r1, #4 ; NAobt@cTCY -= 4 */ - 0x1afffff9, /* bne @1 ; cTCY 0 ɂȂ܂Ń[v */ - 0xe1a01c21, /* mov r1, r1, LSR #24 ; tF[YǗϐ̍XVlp */ - 0xe1c210b0, /* strh r1, [r2] ; tF[YǗϐXV */ - 0xe12fff13, /* bx r3 ; Main ֐փWv */ - 0x00fffffc /* 0x00fffffc */ -}; - - -/*---------------------------------------------------------------------------* - ֐vg^Cv - *---------------------------------------------------------------------------*/ -static void INITi_CheckSysConfig(void); -static void INITi_DetectMainMemorySize(void); -static void INITi_Stop(void); -static void INITi_DoAutoload(void); -#ifndef SDK_NOINIT -static void INITi_ShelterStaticInitializer(u32* ptr); -static void INITi_CallStaticInitializers(void); -#endif - -static void* INITi_Copy32(void* dst, void* src, u32 size); -static void* INITi_Fill32(void* dst, u32 value, u32 size); - -/*---------------------------------------------------------------------------*/ -#include - -/*---------------------------------------------------------------------------* - Name: _start - Description: NxN^B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start(void) -{ -@000: - /* ݋֎~ */ - mov r12, #HW_REG_BASE - str r12, [r12, #REG_IME_OFFSET] - - /* SCFG ݒmF */ - bl INITi_CheckSysConfig - - /* v[hp[^AhXi[ĂȂꍇ́AftHglZbg */ - ldr r0, =HW_PRELOAD_PARAMETER_ADDR - ldr r1, [r0] - cmp r1, #0 - ldreq r1, =HW_PARAM_TWL_SETTINGS_DATA_DEFAULT - streq r1, [r0] - - /* `[nꂽޔ */ - ldr r3, =SDK_WRAM_ARENA_LO - sub r2, r3, #0x40 - ldr r1, =HW_LAUNCHER_DELIVER_PARAM_BUF -@001: - cmp r2, r3 - ldrlt r0, [r1], #4 - strlt r0, [r2], #4 - blt @001 - - - /* nhVFCNp}CNR[hp WRAM ɃRs[ */ - ldr r1, =microcode_ShakeHand - ldr r2, =HW_PRV_WRAM - add r3, r2, #40 // sizeof(microcode_ShakeHand) -@002: ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @002 - - /* p WRAM ̃R[h ARM9 ƃnhVFCN */ - ldr r0, =HW_BOOT_SHAKEHAND_9 - ldr r1, =HW_BOOT_SHAKEHAND_7 - ldr r2, =HW_PRV_WRAM - mov lr, pc - bx r2 - -@010: - /* X^bN|C^ݒ */ - mov r0, #HW_PSR_SVC_MODE // SuperVisor mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_SVC_STACK_END - mov r0, #HW_PSR_IRQ_MODE // IRQ mode - msr cpsr_c, r0 - ldr sp, =HW_PRV_WRAM_IRQ_STACK_END - ldr r1, =SDK_IRQ_STACKSIZE - sub r1, sp, r1 - sub sp, sp, #4 // 4 bytes for IRQ stack check code - mov r0, #HW_PSR_SYS_MODE // System mode - msr cpsr_csfx, r0 - sub sp, r1, #4 // 4 bytes for SYS stack check code - - /* X^bN̈NA */ - ldr r0, =SDK_SYS_STACKSIZE - sub r1, r1, r0 - ldr r2, =HW_PRV_WRAM_IRQ_STACK_END - mov r0, #0 -@011: cmp r1, r2 - strlt r0, [r1], #4 - blt @011 - - /* Autoload { */ - bl INITi_DoAutoload - - /* STATIC ZOg .bss ZNV 0 NA */ - mov r1, #0 // r1 = clear value for STATIC bss section - ldr r3, =_start_ModuleParams - ldr r0, [r3, #12] // r0 = start address of STATIC bss section - ldr r2, [r3, #16] - subs r2, r2, r0 // r2 = size of STATIC bss section - blgt INITi_Fill32 - - /* CTCY𒲍 */ - bl INITi_DetectMainMemorySize - -#ifndef SDK_FINALROM - /* fobOo̓EBhEݒ */ - ldr r1, =HW_PRINT_OUTPUT_ARM9 - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9 - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7 << 8) - strh r0, [r1] - mov r0, #OS_PRINT_OUTPUT_DEFAULT_ARM9ERR - orr r0, r0, #(OS_PRINT_OUTPUT_DEFAULT_ARM7ERR << 8) - strh r0, [r1, #2] -#endif - - /* IRQ ݃xN^ݒ */ - ldr r1, =HW_INTR_VECTOR_BUF - ldr r0, =OS_IrqHandler - str r0, [r1] - -#ifndef SDK_NOINIT - /* c++ p */ - bl _fp_init - bl TwlSpStartUp - bl __call_static_initializers - bl INITi_CallStaticInitializers -#endif - -@0f0: - /* Main ֐ւ̃Wvp}CNR[hX^bN̒ɃRs[ */ - ldr r1, =microcode_GotoMain - sub r2, sp, #40 - mov r3, sp -@0f1: cmp r2, r3 - ldrlt r0, [r1], #4 - strlt r0, [r2], #4 - blt @0f1 - - /* }CNR[hoR Main ֐փWv */ - ldr r0, =SDK_STATIC_START - bic r0, r0, #0x00000003 - ldr r1, =SDK_STATIC_BSS_END - sub r1, r1, r0 - add r1, r1, #3 - bic r1, r1, #0x00000003 - bic r1, r1, #0xff000000 - mov r2, #BOOT_SYNC_PHASE_4 - mov r2, r2, LSL #24 - orr r1, r1, r2 - ldr r2, =HW_BOOT_SYNC_PHASE - ldr r3, =TwlSpMain - ldr lr, =HW_RESET_VECTOR - sub r12, sp, #40 - bx r12 - /* never return */ -} - -/*---------------------------------------------------------------------------* - Name: _start_AutoloadDoneCallback - Description: I[g[hR[obNB - Arguments: argv - I[g[hp[^ێĂzB - argv[0] = SDK_AUTOLOAD_LIST - argv[1] = SDK_AUTOLOAD_LIST_END - argv[2] = SDK_AUTOLOAD_START - argv[3] = SDK_STATIC_BSS_START - argv[4] = SDK_STATIC_BSS_END - Returns: ȂB - *---------------------------------------------------------------------------*/ -SDK_WEAK_SYMBOL asm void -_start_AutoloadDoneCallback(void* argv[]) -{ - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CheckSysConfig - Description: SCFG ֘A I/O WX^̓emFB - A7-SCFG ubNANZXLȏꍇɂ́A[_[sݒ菈 - sŃANZX𖳌B - ARM7 p WRAM Ƀ[_[WJĂ I/O WX^m - FŃC̋L̈ɃRs[B - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CheckSysConfig(void) -{ - /* A7-SCFG ̃ANZX”۔ */ - ldr r1, =REG_EXT_ADDR - ldr r0, [r1] - ldr r2, =HW_PRV_WRAM_SYSRV - tst r0, #REG_SCFG_EXT_CFG_MASK - beq @invalid - -@valid: - /* ARM7 Secure-ROM ؂藣 */ - ldr r1, =REG_A7ROM_ADDR - ldrb r0, [r1] - orr r0, r0, #REG_SCFG_A7ROM_SEC_MASK - strb r0, [r1] - - /* ARM9 Secure-ROM ؂藣 */ - ldr r1, =REG_A9ROM_ADDR - ldrb r0, [r1] - orr r0, r0, #REG_SCFG_A9ROM_SEC_MASK - strb r0, [r1] - - /* NITRO L */ - ldr r1, =REG_WL_ADDR - ldrh r0, [r1] - orr r0, r0, #REG_SCFG_WL_OFFB_MASK - strh r0, [r1] - - /* ROM ݒANITRO ݒA{fBOIvV WRAM ɓWJ */ - ldr r3, =REG_OP_ADDR // SCFG-OP - ldrb r1, [r3] - and r0, r1, #(REG_SCFG_OP_OP1_MASK | REG_SCFG_OP_OP0_MASK) - ldr r3, =REG_A9ROM_ADDR // SCFG-ROM:0~7 - ldrb r1, [r3] - and r3, r1, #(REG_SCFG_A9ROM_RSEL_MASK | REG_SCFG_A9ROM_SEC_MASK) - orr r0, r0, r3, LSL #(HWi_WSYS08_ROM_ARM9RSEL_SHIFT - REG_SCFG_A9ROM_RSEL_SHIFT) - ldr r3, =REG_A7ROM_ADDR // SCFG-ROM:8~15 - ldrb r1, [r3] - and r3, r1, #(REG_SCFG_A7ROM_RSEL_MASK | REG_SCFG_A7ROM_FUSE_MASK) - orr r0, r0, r3, LSL #(HWi_WSYS08_ROM_ARM7RSEL_SHIFT - REG_SCFG_A7ROM_RSEL_SHIFT) - ldr r3, =REG_WL_ADDR // SCFG-WL - ldrb r1, [r3] - and r3, r1, #REG_SCFG_WL_OFFB_MASK - orr r0, r0, r3, LSL #(HWi_WSYS08_WL_OFFB_SHIFT - REG_SCFG_WL_OFFB_SHIFT) - strb r0, [r2, #HWi_WSYS08_WRAMOFFSET] - - /* eVKubNփNbN */ - ldr r1, =REG_CLK_ADDR - ldrh r0, [r1] - ldr r3, =REG_SCFG_CLK_SNDMCLK_MASK | REG_SCFG_CLK_WRAMHCLK_MASK | REG_SCFG_CLK_AESHCLK_MASK | REG_SCFG_CLK_SD2HCLK_MASK | REG_SCFG_CLK_SD1HCLK_MASK - orr r0, r0, r3 - strh r0, [r1] - - /* JTAG WRAM ɓWJ */ - ldr r3, =REG_JTAG_ADDR // SCFG-JTAG - ldrh r1, [r3] - and r0, r1, #(REG_SCFG_JTAG_CPUJE_MASK | REG_SCFG_JTAG_ARM7SEL_MASK) - and r3, r1, #REG_SCFG_JTAG_DSPJE_MASK - orr r0, r0, r3, LSR #(REG_SCFG_JTAG_DSPJE_SHIFT - HWi_WSYS09_JTAG_DSPJE_SHIFT) - strb r0, [r2, #HWi_WSYS09_WRAMOFFSET] - - /* eg@\L */ - ldr r1, =REG_EXT_ADDR // SCFG_EXT - ldr r0, [r1] - ldr r3, =REG_SCFG_EXT_WRAM_MASK | REG_SCFG_EXT_GPIO_MASK | REG_SCFG_EXT_I2C_MASK | REG_SCFG_EXT_I2S_MASK | REG_SCFG_EXT_MIC_MASK | REG_SCFG_EXT_SD2_MASK | REG_SCFG_EXT_SD1_MASK | REG_SCFG_EXT_AES_MASK | REG_SCFG_EXT_DMAC_MASK - orr r0, r0, r3 - orr r0, r0, #(REG_SCFG_EXT_DSEL_MASK | REG_SCFG_EXT_INTC_MASK) - bic r0, r0, #REG_SCFG_EXT_MC_B_MASK - str r0, [r1] - - /* eg@\̐ݒe WRAM ɓWJ */ - str r0, [r2, #HWi_WSYS04_WRAMOFFSET] - - /* [J[h I/F ̃XbgI */ - ldr r1, =REG_MC1_ADDR // SCFG_MC1 - ldr r0, [r1] - bic r0, r0, #REG_MI_MC1_SWP_MASK - str r0, [r1] - - /* WRAM-A/B/C ARM7 Ɋ蓖Ă邱ƂmF */ - ldr r1, =REG_MBK1_ADDR - ldr r0, [r1] - ldr r3, =0x8d898581 - cmp r0, r3 - blne INITi_Stop - ldr r1, =REG_MBK2_ADDR - ldr r0, [r1] - ldr r3, =0x8d898581 - cmp r0, r3 - blne INITi_Stop - ldr r1, =REG_MBK3_ADDR - ldr r0, [r1] - ldr r3, =0x9d999591 - cmp r0, r3 - blne INITi_Stop - ldr r1, =REG_MBK4_ADDR - ldr r0, [r1] - ldr r3, =0x8d898581 - cmp r0, r3 - blne INITi_Stop - ldr r1, =REG_MBK5_ADDR - ldr r0, [r1] - ldr r3, =0x9d999591 - cmp r0, r3 - blne INITi_Stop - - /* WRAM-A/B/C ̃}bvݒ */ - ldr r1, =REG_MBK6_ADDR - ldr r0, =0x080037c0 - str r0, [r1] - ldr r1, =REG_MBK7_ADDR - ldr r0, =0x07c03780 - str r0, [r1] - ldr r1, =REG_MBK8_ADDR - ldr r0, =0x07803740 - str r0, [r1] - ldr r1, =REG_MBK9_ADDR - ldr r0, =0x00ffff0f - str r0, [r1] - - /* A7-SCFG ubNւ̃ANZX𖳌 */ - ldr r1, =REG_EXT_ADDR - ldr r0, [r1] -/* bic r0, r0, #REG_SCFG_EXT_CFG_MASK */ - str r0, [r1] - -@invalid: - /* ROM ݒANITRO ݒemF */ - ldrb r0, [r2, #HWi_WSYS08_WRAMOFFSET] - and r0, r0, #(HWi_WSYS08_ROM_ARM7RSEL_MASK | HWi_WSYS08_ROM_ARM9RSEL_MASK | HWi_WSYS08_ROM_ARM9SEC_MASK) - cmp r0, #HWi_WSYS08_ROM_ARM9SEC_MASK - blne INITi_Stop - - /* SCFG WX^ݒL̈ɃRs[ */ - ldr r2, =HW_PRV_WRAM_SYSRV - ldr r3, =HW_SYS_CONF_BUF - ldr r0, [r2, #HWi_WSYS04_WRAMOFFSET] - str r0, [r3, #HWi_WSYS04_OFFSET] - ldrh r0, [r2, #HWi_WSYS08_WRAMOFFSET] - strh r0, [r3, #HWi_WSYS08_OFFSET] - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_DetectMainMemorySize - Description: CTCY𒲍B - ʂ (u16*)HW_MMEMCHECER_SUB Ɋi[B - i[l [OS_CONSOLE_SIZE_16MB|OS_CONSOLE_SIZE_32B] - NOTE: vbgtH[ NITRO ̏ꍇ͍lĂȂB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -#define OSi_IMAGE_DIFFERENCE2 0xb000000 -#define OSi_DETECT_NITRO_MASK (REG_SND_SMX_CNT_E_MASK | REG_SND_SMX_CNT_FSEL_MASK) -#define OSi_DETECT_NITRO_VAL (REG_SND_SMX_CNT_E_MASK) - -#define OSi_CHECKNUM1 0x55 -#define OSi_CHECKNUM2 0xaa -#define OSi_100usWAIT 3352 // 100us = 3351.4cycles(33.514MHz) - -static asm void -INITi_DetectMainMemorySize(void) -{ - ldr r2, =HW_MMEMCHECKER_SUB - add r3, r2, #OSi_IMAGE_DIFFERENCE2 - mov r0, #OS_CONSOLE_SIZE_16MB - - /* OSi_CHECKNUM1 (0x55) ݃eXg */ - mov r1, #OSi_CHECKNUM1 - strb r1, [r3] - - ldr r2, =OSi_100usWAIT -@1 subs r2, r2, #4 - bcs @1 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM1 - bne @check_smix - - /* OSi_CHECKNUM2 (0xaa) ݃eXg */ - mov r1, #OSi_CHECKNUM2 - strb r1, [r3] - - ldr r2, =OSi_100usWAIT -@2 subs r2, r2, #4 - bcs @2 - - ldrb r1, [r3] - cmp r1, #OSi_CHECKNUM2 - moveq r0, #OS_CONSOLE_SIZE_32MB - -@check_smix: - /* SMIX WX^𒲍 */ - ldr r3, =REG_SMX_CNT_ADDR - ldrh r1, [r3] - and r1, r1, #OSi_DETECT_NITRO_MASK - cmp r1, #OSi_DETECT_NITRO_VAL - orreq r0, r0, #OS_CHIPTYPE_SMX_MASK - - /* ʂi[ */ - ldr r2, =HW_MMEMCHECKER_SUB - strb r0, [r2] - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Stop - Description: vO~BARM7 p WRAM Halt JԂ[v - ֐Rs[ARs[֐sB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_Stop(void) -{ - ldr r1, =microcode_Stop - ldr r2, =HW_PRV_WRAM - add r3, r2, #8 // sizeof(microcode_Stop) -@copy_loop: - ldr r0, [r1], #4 - str r0, [r2], #4 - cmp r2, r3 - blt @copy_loop - -@stop_loop: - ldr r0, =HW_PRV_WRAM - mov lr, pc - bx r0 - b @stop_loop - /* never return */ -} - -/*---------------------------------------------------------------------------* - Name: INITi_DoAutoload - Description: NɉāAeI[g[hubŇŒf[^̓WJ - yѕϐ 0 NAsB - NITRO ݊I[g[hZOg݂͑ATWL pZOg - ݂݂̂ƂOB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ - -static asm void -INITi_DoAutoload(void) -{ - stmfd sp!, {lr} - - /* I[g[h{ */ -@000: - ldr r0, =_start_LtdModuleParams - ldr r12, [r0] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r0, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r1, [r0, #8] // r1 = SDK_LTDAUTOLOAD_START -@001: - cmp r12, r3 - bge @010 - /* ŒZNV */ - ldr r0, [r12], #4 // r0 = start address of destination range of fixed section - ldr r2, [r12], #4 // r2 = size of fixed section - bl INITi_Copy32 - stmfd sp!, {r0, r1} - /* static initializer e[u */ - ldr r0, [r12], #4 -#ifndef SDK_NOINIT - stmfd sp!, {r3, r12} - bl INITi_ShelterStaticInitializer - ldmfd sp!, {r3, r12} -#endif - /* bss ZNV */ - ldmfd sp!, {r0} // r0 = start address of destination range of bss section - mov r1, #0 // r1 = clear value for bss section - ldr r2, [r12], #4 // r2 = sizeo of bss section - bl INITi_Fill32 - ldmfd sp!, {r1} - b @001 - - /* I[g[hXgEI[g[hobt@NA */ -@010: - ldr r1, =_start_LtdModuleParams - ldr r12, [r1] // r12 = SDK_LTDAUTOLOAD_LIST - ldr r3, [r1, #4] // r3 = SDK_LTDAUTOLOAD_LIST_END - ldr r0, [r1, #8] // r0 = SDK_LTDAUTOLOAD_START -@011: - cmp r12, r3 - bge @0f0 - mov r1, #0 // r1 = clear value - str r1, [r12], #4 - ldr r2, [r12] // r2 = size of fixed section - str r1, [r12], #4 - str r1, [r12], #4 - str r1, [r12], #4 - bl INITi_Fill32 - b @011 - -@0f0: - /* I[g[hR[obNĂяo */ - ldr r0, =_start_ModuleParams - ldr r1, =_start_LtdModuleParams - ldmfd sp!, {lr} - b _start_AutoloadDoneCallback -} - -#ifndef SDK_NOINIT - -static asm void -/*---------------------------------------------------------------------------* - Name: INITi_ShelterStaticInitializer - Description: eI[g[hZOg static initializer ւ̃|C^ - e[u IRQ X^bN̍ŏ㕔ɑޔB - Arguments: ptr - ZOg̃|C^e[uւ̃|C^B - e[u NULL ŏI[ĂKvB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_ShelterStaticInitializer(u32* ptr) -{ - /* mF */ - cmp r0, #0 - bxeq lr - - /* ޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 -@001: - /* ޔꏊ擪󂫏ꏊ𒲍 */ - ldr r2, [r1] - cmp r2, #0 - addne r1, r1, #4 - bne @001 -@002: - /* 󂫏ꏊɃe[uRs[ */ - ldr r2, [r0], #4 - str r2, [r1], #4 - cmp r2, #0 - bne @002 - - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_CallStaticInitializers - Description: eI[g[hZOg static initializer ĂяoB - I[g[hɂ IRQ X^bN̍ŏ㕔ɑޔĂ - ֐|C^e[u‚ŒĂяoB - Arguments: ȂB - Returns: ȂB - *---------------------------------------------------------------------------*/ -static asm void -INITi_CallStaticInitializers(void) -{ - stmdb sp!, {lr} - - /* e[uޔꏊ擪AhXvZ */ - ldr r1, =HW_PRV_WRAM_IRQ_STACK_END - ldr r2, =SDK_IRQ_STACKSIZE - sub r1, r1, r2 - add r1, r1, #4 -@001: - /* e[uɊǗĂ|C^‚ŒĂяo */ - ldr r0, [r1] - cmp r0, #0 - beq @002 - stmfd sp!, {r1} - mov lr, pc - bx r0 - ldmfd sp!, {r1} - /* UĂяo|C^̓[NA (IRQX^bNԎ؂肵Ă) */ - mov r0, #0 - str r0, [r1], #4 - b @001 -@002: - ldmia sp!, {lr} - bx lr -} -#endif - -/*---------------------------------------------------------------------------* - Name: INITi_Copy32 - Description: 32 bit PʂŃRs[sBX^bN 36 oCg邪A - WX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - Rs[ւ̃|C^ ( 4 oCgAC )B - r1 - Rs[ւ̃|C^ ( 4 oCgAC )B - r2 - Rs[钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - Rs[̃Rs[ւ̃|C^ ( r0 + r2 )B - r1 - Rs[̃Rs[ւ̃|C^ ( r1 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Copy32(void* dst, void* src, u32 size) -{ - stmfd sp!, {r3-r11} - - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - ldmia r1!, {r4-r11} - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - ldmneia r1!, {r4-r7} - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - ldmneia r1!, {r4-r5} - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - ldmneia r1!, {r4} - stmneia r0!, {r4} - - ldmfd sp!, {r3-r11} - bx lr -} - -/*---------------------------------------------------------------------------* - Name: INITi_Fill32 - Description: 32 bit PʂŃobt@ewf[^Ŗ߂BX^bN 36 - oCg邪AWX^ r3 - r12 ͔j󂵂ȂB - Arguments: r0 - obt@ւ̃|C^ ( 4 oCgAC )B - r1 - obt@𖄂߂e 32 bit lŎwB - r2 - obt@𖄂߂钷oCgPʂŎw ( 4 ̔{ )B - Returns: r0 - ̃obt@ւ̃|C^ ( r0 + r2 )B - *---------------------------------------------------------------------------*/ -static asm void* -INITi_Fill32(void* dst, u32 value, u32 size) -{ - stmfd sp!, {r3-r11} - - mov r4, r1 - mov r5, r1 - mov r6, r1 - mov r7, r1 - mov r8, r1 - mov r9, r1 - mov r10, r1 - mov r11, r1 - bics r3, r2, #0x0000001f - beq @next - add r3, r0, r3 -@loop: - stmia r0!, {r4-r11} - cmp r3, r0 - bgt @loop -@next: - tst r2, #0x00000010 - stmneia r0!, {r4-r7} - tst r2, #0x00000008 - stmneia r0!, {r4-r5} - tst r2, #0x00000004 - stmneia r0!, {r4} - - ldmfd sp!, {r3-r11} - bx lr -} - -#include diff --git a/build/tests/TestComponent/ARM7.TWL/src/kami_pxi.c b/build/tests/TestComponent/ARM7.TWL/src/kami_pxi.c deleted file mode 100644 index cb0e5ac4..00000000 --- a/build/tests/TestComponent/ARM7.TWL/src/kami_pxi.c +++ /dev/null @@ -1,413 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "kami_pxi.h" -#include "fifo.h" -#include "twl/cdc.h" -#include "formatter.h" -#include "mcu_firm.h" -#include -#include -#include -#include -#include - -/* sdmc.h FATFSCu̔Jwb_̂߁AKvȒ`[JŎB */ -//#include - -typedef enum { - SDMC_PORT_CARD = 0x400, - SDMC_PORT_NAND = 0x401 -}SDMC_PORT_NO; - -#define TRUE 1 /* Don't change */ -#define FALSE 0 /* Don't change */ - -typedef unsigned char byte; /* Don't change */ -typedef unsigned short word; /* Don't change */ -typedef unsigned long dword; /* Don't change */ - -#define BOOLEAN int - -extern BOOL FATFSi_nandRtfsIo( int driveno, dword block, void* buffer, word count, BOOLEAN reading); -extern BOOL sdmcFormatNandLog( BOOL verify_flag); -extern void sdmcGetCID( SDMC_PORT_NO port, u32* dest); -extern void SPI_Lock(u32 id); -extern void SPI_Unlock(u32 id); - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define KAMITEST_MESSAGE_ARRAY_MAX 4 // XbhpbZ[WL[̃TCY -#define KAMITEST_THREAD_STACK_SIZE 2048 // Xbh̃X^bNTCY - -#define KAMITEST_THREAD_PRIORITY 6 - -// ACgăRs[ -#define KAMI_UNPACK_U8(d, s) \ - (*(d) = (u8)((((u8*)s)[0] << 0))) -#define KAMI_UNPACK_U16(d, s) \ - (*(d) = (u16)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8))) -#define KAMI_UNPACK_U32(d, s) \ - (*(d) = (u32)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8) | (((u8*)s)[2] << 16) | (((u8*)s)[3] << 24))) - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef struct KamiWork -{ - BOOL result; - u32 total; - u32 current; - KamiCommand command; - u8 data[KAMITEST_PXI_DATA_SIZE_MAX]; // 㑱f[^i[p - - OSMessageQueue msgQ; // XbhpbZ[WL[ - OSMessage msgArray[KAMITEST_MESSAGE_ARRAY_MAX]; - // bZ[Wi[obt@ - OSThread thread; // KAMIpXbh - u64 stack[KAMITEST_THREAD_STACK_SIZE / sizeof(u64)]; - // KAMIpXbh̃X^bN -} -KamiWork; - -/*---------------------------------------------------------------------------* - ÓIϐ` - *---------------------------------------------------------------------------*/ -static BOOL kamiInitialized; -static KamiWork kamiWork; -static u32 kamiSpiLockId; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); -static void KamiReturnResult(KamiCommand command, KAMIPxiResult result); -static void KamiReturnResultEx(KamiCommand command, KAMIPxiResult result, u8 size, u8* data); -static void KamiThread(void *arg); - -void KamiPxiInit(void) -{ - if (kamiInitialized) - { - return; - } - kamiInitialized = TRUE; - kamiSpiLockId = (u32)OS_GetLockID(); - if (kamiSpiLockId == OS_LOCK_ID_ERROR) - { - OS_Panic("%s: OS_GetLockID failed.\n", __FUNCTION__); - } - - PXI_Init(); - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - - OS_InitMessageQueue(&kamiWork.msgQ, kamiWork.msgArray, KAMITEST_MESSAGE_ARRAY_MAX); - OS_CreateThread(&kamiWork.thread, KamiThread, 0, - (void *)(kamiWork.stack + (KAMITEST_THREAD_STACK_SIZE / sizeof(u64))), - KAMITEST_THREAD_STACK_SIZE, KAMITEST_THREAD_PRIORITY); - OS_WakeupThreadDirect(&kamiWork.thread); -} - -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused( tag ) - if (err) - { - return; - } - if (data & KAMITEST_PXI_START_BIT) // 擪f[^ - { - kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); - kamiWork.current = 0; - kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); - kamiWork.data[kamiWork.current++] = (u8)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); - } - else // 㑱f[^ - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); - kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); - kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); - } - if (kamiWork.current >= kamiWork.total) - { - switch (kamiWork.command) - { - case KAMI_EXE_FORMAT: - case KAMI_NAND_IO: - case KAMI_MCU_WRITE_FIRM: - case KAMI_MCU_IO: - case KAMI_CODEC_IO: - case KAMI_ARM7_IO: - case KAMI_CDC_GO_DSMODE: - case KAMI_CLEAR_NAND_ERRORLOG: - case KAMI_GET_CAMERA_MODULE_TYPE: - case KAMI_GET_NAND_CID: - if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR); - } - break; - - default: - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); - } - } -} - -static void KamiReturnResult(KamiCommand command, KAMIPxiResult result) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | KAMITEST_PXI_RESULT_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - ((1 << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((result << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } -} - -static void KamiReturnResultEx(KamiCommand command, KAMIPxiResult result, u8 size, u8* data) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | KAMITEST_PXI_RESULT_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - (((size+1) << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((result << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - int i; - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } - for (i = 0; i < size; i+= 3) - { - pxiData = (u32)((data[i] << 16) | (data[i+1] << 8) | data[i+2]); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } - } -} - -static void KamiThread(void *arg) -{ -#pragma unused( arg ) - OSMessage msg; - BOOL result; - - while (TRUE) - { - (void)OS_ReceiveMessage(&kamiWork.msgQ, &msg, OS_MESSAGE_BLOCK); - switch (kamiWork.command) - { - case KAMI_EXE_FORMAT: - { - result = ExeFormat((FormatMode)kamiWork.data[0]); // Quick or Full - if (result) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_TRUE); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_NAND_IO: - { - BOOL is_read; - u32 block; - void* buffer; - u32 count; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U32(&block, &kamiWork.data[1]); - KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[5]); - KAMI_UNPACK_U32(&count, &kamiWork.data[9]); - - result = FATFSi_nandRtfsIo( 0, block, buffer, (u16)count, is_read ); - if (result) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_TRUE); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_MCU_WRITE_FIRM: - { - void* buffer; - KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[1]); - - if ( MCU_WriteFirm( buffer ) ) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_MCU_IO: - { - BOOL is_read; - u32 reg_no; - u32 write; - u32 read; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U32(®_no, &kamiWork.data[1]); - KAMI_UNPACK_U32(&write, &kamiWork.data[5]); - - if (is_read) - { - read = MCU_ReadRegister( (u8)reg_no ); - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(u8), (u8*)&read ); - } - else - { - MCU_WriteRegister( (u8)reg_no, (u8)write ); - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - } - break; - - case KAMI_CODEC_IO: - { - BOOL is_read; - u8 page; - u8 reg_no; - u32 write; - u32 read; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U8(&page, &kamiWork.data[1]); - KAMI_UNPACK_U8(®_no, &kamiWork.data[2]); - KAMI_UNPACK_U32(&write, &kamiWork.data[5]); - - if (is_read) - { - SPI_Lock(kamiSpiLockId); // CODECpSPIrbN - read = CDC_ReadSpiRegisterEx( page, reg_no ); - SPI_Unlock(kamiSpiLockId); // CODECpSPIrbN - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(u8), (u8*)&read ); - } - else - { - SPI_Lock(kamiSpiLockId); // CODECpSPIrbN - CDC_WriteSpiRegisterEx( page, reg_no, (u8)write ); - SPI_Unlock(kamiSpiLockId); // CODECpSPIrbN - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - } - break; - - case KAMI_ARM7_IO: - { - BOOL is_read; - u32 addr; - u32 write; - u32 read; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U32(&addr, &kamiWork.data[1]); - KAMI_UNPACK_U32(&write, &kamiWork.data[5]); - - if (is_read) - { - read = *(u32 *)addr; - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(u32), (u8*)&read ); - } - else - { - *(u32 *)addr = write; - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - } - break; - - case KAMI_CDC_GO_DSMODE: - { - CDC_Init(); // IIRȂǂ̃p[^̂ - CDC_GoDsMode(); - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - break; - - case KAMI_CLEAR_NAND_ERRORLOG: - { - if (sdmcFormatNandLog(TRUE)) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - case KAMI_GET_CAMERA_MODULE_TYPE: - { - CameraModuleTypes types; - if (CAMERAi_IsSharpModule(CAMERA_SELECT_IN)) - { - types.in = CAMERA_MODULE_TYPE_SHARP; - } - else if (CAMERAi_IsMicronModule(CAMERA_SELECT_IN)) - { - types.in = CAMERA_MODULE_TYPE_MICRON; - } - else - { - types.in = CAMERA_MODULE_TYPE_UNKNOWN; - } - if (CAMERAi_IsSharpModule(CAMERA_SELECT_OUT)) - { - types.out = CAMERA_MODULE_TYPE_SHARP; - } - else if (CAMERAi_IsMicronModule(CAMERA_SELECT_OUT)) - { - types.out = CAMERA_MODULE_TYPE_MICRON; - } - else - { - types.out = CAMERA_MODULE_TYPE_UNKNOWN; - } - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(CameraModuleTypes), (u8*)&types); - } - break; - - case KAMI_GET_NAND_CID: - { - u8 buffer[16]; - sdmcGetCID( SDMC_PORT_NAND, (u32*)buffer); - KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(buffer), (u8*)buffer ); - } - break; - - default: - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); - } - } -} - -#include diff --git a/build/tests/TestComponent/ARM7.TWL/src/main.c b/build/tests/TestComponent/ARM7.TWL/src/main.c deleted file mode 100644 index b2a99285..00000000 --- a/build/tests/TestComponent/ARM7.TWL/src/main.c +++ /dev/null @@ -1,654 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" -#include "kami_pxi.h" -#include - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -/* eXbhDx */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_WPA 10 -#define THREAD_PRIO_HOTSW 11 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* ROM o^GÅgR[h */ -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/* gp DMA ԍ */ -#define DMA_NO_FATFS FATFS_DMA_4 // = 0 -#define DMA_NO_NWM 3 - -/* J[h`^OJE^ */ -#define CHATTERING_COUNTER 0x1988 // 100ms (0x1988 * 15.3us = 100000us) - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(void); -static void InitializeFatfs(void); -static void InitializeNwm(OSHeapHandle hh); -static void InitializeCardPower(void); -static void InitializeCdc(void); - -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); -#endif -static void VBlankIntr(void); - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void -TwlSpMain(void) -{ - OSHeapHandle heapHandle; - - /* OS */ - OS_Init(); - PrintDebugInfo(); - - /* NVRAM 烆[U[ǂݏo */ - ReadUserInfo(); - - /* q[v̈ݒ */ - heapHandle = InitializeAllocateSystem(); - - /* {^̓T[` */ - (void)PAD_InitXYButton(); - - /* ݋ */ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - -#ifndef NAND_INITIALIZER_LIMITED_MODE - KamiPxiInit(); -#endif - - /* eCu */ - AES_Init(THREAD_PRIO_AES); // AES - SEA_Init(THREAD_PRIO_SEA); // SEA - FS_Init(FS_DMA_NOT_USE); // FS for CARD - FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD - InitializeFatfs(); // FAT-FS - InitializeNwm(heapHandle); // TWL - MCU_InitIrq(THREAD_PRIO_MCU); // }CR - - if (OSi_IsCodecTwlMode() == TRUE) - { - InitializeCdc(); // CODEC - CAMERA_Init(); // J - } - - SND_Init(THREAD_PRIO_SND); // TEh - SNDEX_Init(THREAD_PRIO_SNDEX); // TEhg - RTC_Init(THREAD_PRIO_RTC); // RTC - WVR_Begin(heapHandle); // NITRO - SPI_Init(THREAD_PRIO_SPI); - InitializeCardPower(); // J[hdONivOpj - - while (TRUE) - { - OS_Halt(); - - /* \tgEFAZbgv͊ĎȂ */ - /* AGB J[gbW̑}`FbN͍sȂ */ - /* DS J[h̑}`FbN͍sȂ */ - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - OS_TPrintf("ARM7: This component is running on TWL.\n"); - OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle -InitializeAllocateSystem(void) -{ - OSHeapHandle hh; - void* subLo = (void*)OS_GetWramSubArenaLo(); - void* subHi = (void*)OS_GetWramSubArenaHi(); - void* privLo = (void*)OS_GetWramSubPrivArenaLo(); - void* privHi = (void*)OS_GetWramSubPrivArenaHi(); - - if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) - { - /* SUB A[i SUBPRIV A[iɋz */ - OS_SetWramSubArenaHi(subLo); - OS_SetWramSubPrivArenaLo(subLo); - privLo = subLo; - } - - /* A[i 0 NA */ - MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); - - /* q[v쐬 */ - privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); - if (hh < 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - - /* Jgq[vɐݒ */ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - /* q[vTCY̊mF */ - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if (heapSize <= 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - OS_TPrintf("ARM7: heap size [%d]\n", heapSize); - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - // FATFSCȕ - if(!FATFS_Init( FATFS_DMA_4, FATFS_DMA_5, THREAD_PRIO_FATFS)) - { - // do nothing - } -} - -/*---------------------------------------------------------------------------* - Name: InitializeNwm - Description: NWMCuB - Arguments: hh - p”\ȃq[ṽnhwB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeNwm(OSHeapHandle hh) -{ - NwmspInit nwmInit; - - /* [TODO] mۂĂq[v̈悪VꎮKvƂĂ郁ʈȏォ̃`FbNKv */ - - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - - nwmInit.dmaNo = DMA_NO_NWM; - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.drvHeap.handle = hh; - - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; - nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.wpaHeap.handle = hh; - - NWMSP_Init(&nwmInit); -} - -/*---------------------------------------------------------------------------* - Name: InitializeCardPower - Description: J[hdONB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeCardPower(void) -{ - // `b^OJE^̒lݒ - reg_MI_MC1 = (u32)((reg_MI_MC1 & ~REG_MI_MC1_CC_MASK) | - (CHATTERING_COUNTER << REG_MI_MC1_CC_SHIFT)); - - // `^OJE^҂‚ƂɂCDET0ɂȂ - OS_SpinWait( OS_MSEC_TO_CPUCYC(200) ); - - // J[hXbgPdON - HOTSWi_TurnCardPowerOn(1); -} - -/*---------------------------------------------------------------------------* - Name: InitializeCdc - Description: CDCCuB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeCdc(void) -{ - u32 spiLockId; - - spiLockId = (u32)OS_GetLockID(); - if (spiLockId == OS_LOCK_ID_ERROR) - { - OS_Warning("OS_GetLockID failed.\n"); - } - - /* CODEC */ - SPI_Lock(spiLockId); - CDC_Init(); - SPI_Unlock(spiLockId); -} - -//#ifdef WM_PRECALC_ALLOWEDCHANNEL -//extern u16 WMSP_GetAllowedChannel(u16 bitField); -//#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } -/* -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -*/ -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -extern void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/TestComponent/ARM9.TWL/ARM9-TS.lsf b/build/tests/TestComponent/ARM9.TWL/ARM9-TS.lsf deleted file mode 100644 index 9e89469d..00000000 --- a/build/tests/TestComponent/ARM9.TWL/ARM9-TS.lsf +++ /dev/null @@ -1,57 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ARM9-TS.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL LCF SPEC FILE -# - -Static $(TARGET_NAME) -{ - Address $(ADDRESS_STATIC) - Object $(OBJS_STATIC) - Library $(LLIBS) $(GLIBS) $(CW_LIBS) - StackSize 4096 4096 -} - -Autoload ITCM -{ - Address $(ADDRESS_ITCM) - Object * (.itcm) - Object $(OBJS_AUTOLOAD) (.text) - Object $(OBJS_AUTOLOAD) (.rodata) - Object $(OBJS_AUTOLOAD) (.init) - Object $(OBJS_AUTOLOAD) (.ctor) - Object $(OBJS_AUTOLOAD) (.sinit) -} - -Autoload DTCM -{ - Address $(ADDRESS_DTCM) - Object * (.dtcm) - Object $(OBJS_AUTOLOAD) (.data) - Object $(OBJS_AUTOLOAD) (.sdata) - Object $(OBJS_AUTOLOAD) (.bss) - Object $(OBJS_AUTOLOAD) (.sbss) -} - -Ltdautoload LTDMAIN -{ - # NITRO/TWL L̃I[o[C݂ꍇ́Aɂ̌ɔzuKv܂B - After $(TARGET_NAME) - Object * (.ltdmain) - Object $(OBJS_LTDAUTOLOAD) - Library $(LLIBS_EX) $(GLIBS_EX) -} diff --git a/build/tests/TestComponent/ARM9.TWL/Makefile b/build/tests/TestComponent/ARM9.TWL/Makefile deleted file mode 100644 index 755c4c59..00000000 --- a/build/tests/TestComponent/ARM9.TWL/Makefile +++ /dev/null @@ -1,130 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - systemMenu_RED - NandInitializerRed -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -#---------------------------------------------------------------------------- - -#============================================================================ -#ig݂sꍇ́ATwlIPL/build/buildtools/commondefs"FIRM_USE_PRODUCT_KEYS=TRUE"LɂĂB -#============================================================================ -#============================================================================ -# CX̋DisabletOݒ”\ɂꍇ`܂Biv:Make Cleanj -MACRO_FLAGS += -DUSE_WIRELESS_FORCE_DISABLE_SETTING -#============================================================================ -#============================================================================ -# ef[^݉”\ɂꍇ`܂Biv:Make Cleanj -# ̓Iɂ TWLFontTable.dat wrap.bin cert.sys 3‚łB -MACRO_FLAGS += -DUSE_WRITE_VARIOUS_DATA -#============================================================================ -#============================================================================ -# dev.kp݉”\ɂꍇ`܂Biv:Make Cleanj -#MACRO_FLAGS += -DWRITE_DEVKP_ENABLE -#============================================================================ -#============================================================================ -# }NfobOpƂč쐬ꍇ`܂Biv:Make Cleanj -# Eɂ"nand:/shared2/launcher/wrap.bin"쐬܂B -# EɂĊJpCLS̏ؖ(cert.sys)݂܂B -# E̍Ōɖ{̏s܂B -#MACRO_FLAGS += -DMARIOCLUB_VERSION -#============================================================================ - -SYSM_DISABLE_DEBUG = FALSE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -#TARGET_CODEGEN = THUMB - -TITLEID_LO = 0NRA -#TARGET_TAD = - -TARGET_BIN = TestComponent.srl -LCFILE_SPEC = ARM9-TS.lsf -ROM_SPEC = main.rsf - -MAKEROM_ARM7_BASE = $(SYSMENU_COMPONENTSDIR)/armadillo_uji/$(TWL_BUILDTYPE_ARM7)/armadillo -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - -SRCS = main.c \ - kami_pxi.c \ - font_data.c \ - graphics.c \ - keypad.c \ - kami_font.c \ - - -LINCLUDES = ../common/include \ - $(ROOT)/build/libraries/lcfg/ARM9.TWL/include \ - ../../../systemMenu_tools/common/ARM9/include - -SRCDIR = src \ - ../../../systemMenu_tools/HWInfoWriter/ARM9/src \ - ../../../systemMenu_tools/common/ARM9/src - -#LCFILE = # using default - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - - -ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) -ifdef FIRM_USE_PRODUCT_KEYS -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der' \ - -DHWID_PRIVKEY='private_HWID.der' -else -MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der' \ - -DHWID_PRIVKEY='private_HWID_dev.der' -endif -endif - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ - -DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa' \ - -DCARD_REGION='$(CARD_REGION)' \ - -DDISABLE_DEBUG='$(SYSM_DISABLE_DEBUG)' - -MAKETAD_FLAGS += -s - -SYSMENU_LIBS = \ - libnamut$(TWL_LIBSUFFIX).a - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - liblcfg$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = -#INSTALL_TARGETS = -INSTALL_DIR = $(SDK_NMENU_DATADIR) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#include $(TWLSDK_ROOT)/build/buildtools/modulerules -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/TestComponent/ARM9.TWL/include/graphics.h b/build/tests/TestComponent/ARM9.TWL/include/graphics.h deleted file mode 100644 index ddd8c4f6..00000000 --- a/build/tests/TestComponent/ARM9.TWL/include/graphics.h +++ /dev/null @@ -1,46 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: graphics.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef GRAPHICS_H_ -#define GRAPHICS_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void InitGraphics(void); -void DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* GRAPHICS_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestComponent/ARM9.TWL/include/kami_font.h b/build/tests/TestComponent/ARM9.TWL/include/kami_font.h deleted file mode 100644 index d9855fd0..00000000 --- a/build/tests/TestComponent/ARM9.TWL/include/kami_font.h +++ /dev/null @@ -1,95 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_FONT_H_ -#define KAMI_FONT_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -extern u8 prog_state; -enum -{ STATE_NONE, STATE_SELECT, STATE_KS_PARENTINIT, STATE_KS_PARENT, STATE_KS_CHILDINIT, - STATE_KS_CHILDSCAN, STATE_KS_CHILD -}; -extern OSHeapHandle heapHandle; // Heapnh; - -extern const u16 BgScDataMain[32 * 24]; -extern const u16 BgScDataSub[32 * 24]; -extern const u32 sampleCharData[8 * 0x100]; -extern const u16 PlttDataObj[16][16]; -extern const u16 PlttDataMain[16][16]; -extern const u16 PlttDataSub[16][16]; - -void kamiFontInit(void); -void kamiFontClear(void); -void kamiFontClearMain(void); -void kamiFontPut(u16 x, u16 y, u16 color, u16 no); -void kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...); -void kamiFontFill(s16 x, s16 y, u8 color, s16 value, s32 length); -void kamiFontFillChar(int lineNo, u8 color1, u8 color2); -void kamiFontLoadScreenData(void); -void kamiFontPrintfConsole(u8 color, const char *text, ...); -void kamiFontPrintfConsoleEx(u8 color, const char *text, ...); - -// ʃR\[ppbg -#define CONSOLE_ORANGE 0 -#define CONSOLE_RED 1 -#define CONSOLE_GREEN 2 - -// ʃtHgppbg -#define FONT_COLOR_BLACK 0 -#define FONT_COLOR_RED 1 -#define FONT_COLOR_GREEN 2 -#define FONT_COLOR_BLUE 3 -#define FONT_COLOR_YELLOW 4 -#define FONT_COLOR_CYAN 5 -#define FONT_COLOR_PURPLE 6 - -// ʔwippbg -#define BG_COLOR_TRANS 0 -#define BG_COLOR_WHITE 1 -#define BG_COLOR_BLACK 2 -#define BG_COLOR_GRAY 3 -#define BG_COLOR_PURPLE 4 -#define BG_COLOR_PINK 5 -#define BG_COLOR_BLUE 6 -#define BG_COLOR_GREEN 7 -#define BG_COLOR_VIOLET 8 -#define BG_COLOR_RED 9 -#define BG_COLOR_YELLOW 10 -#define BG_COLOR_BROWN 11 - -#define BG_COLOR_NONE 0xff - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestComponent/ARM9.TWL/include/kami_pxi.h b/build/tests/TestComponent/ARM9.TWL/include/kami_pxi.h deleted file mode 100644 index a9ca7a50..00000000 --- a/build/tests/TestComponent/ARM9.TWL/include/kami_pxi.h +++ /dev/null @@ -1,123 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef TWL_KAMI_TEST_KAMITEST_H_ -#define TWL_KAMI_TEST_KAMITEST_H_ - -#include "fifo.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -// ʒ` -typedef enum KAMIResult -{ - KAMI_RESULT_SUCCESS = 0, - KAMI_RESULT_SUCCESS_TRUE = 0, - KAMI_RESULT_SUCCESS_FALSE, - KAMI_RESULT_INVALID_COMMAND, - KAMI_RESULT_INVALID_PARAMETER, - KAMI_RESULT_ILLEGAL_STATUS, - KAMI_RESULT_BUSY, - KAMI_RESULT_FATAL_ERROR, - KAMI_RESULT_SEND_ERROR, - KAMI_RESULT_MAX -} -KAMIResult; - - -typedef enum { - FORMAT_MODE_QUICK, // QuicktH[}bg - FORMAT_MODE_FULL // FulltH[}bg(ep[eBV0xFFŖ߂j -} FormatMode; - -// R[obN -typedef void (*KAMICallback)(KAMIResult result, void *arg); - - -void KamiPxiInit( void ); - -KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback); -KAMIResult ExeFormat(FormatMode format_mode); -KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read); -KAMIResult kamiMcuWriteFirm(void* buffer ); -KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read); -KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read); -KAMIResult kamiCDC_GoDsMode( void ); -KAMIResult kamiClearNandErrorLog( void ); -KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ); -KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ); -KAMIResult kamiGetNandCID( void* buffer ); -KAMIResult kamiCodecIo(u8 page, u8 reg_no, u8* buffer, u8 value, BOOL is_read); - -// (dv) -// ARM7ǂݏ邽߃[hOInvalidateACgO̓tbVĂB -// -static KAMIResult kamiNandRead(u32 block, void* buffer, u32 count) -{ - return kamiNandIo(block, buffer, count, TRUE); -} -static KAMIResult kamiNandWrite(u32 block, void* buffer, u32 count) -{ - return kamiNandIo(block, buffer, count, FALSE); -} -static KAMIResult kamiMcuRead(u8 reg_no, void* buffer) -{ - return kamiMcuIo((u32)reg_no, buffer, 0, TRUE); -} -static KAMIResult kamiMcuWrite(u8 reg_no, u8 value) -{ - return kamiMcuIo((u32)reg_no, NULL, (u32)value, FALSE); -} -static KAMIResult kamiARM7Read(u32 addr, void* buffer) -{ - return kamiARM7Io(addr, buffer, 0, TRUE); -} -static KAMIResult kamiARM7Write(u32 addr, u8 value) -{ - return kamiARM7Io(addr, NULL, value, FALSE); -} - -static KAMIResult kamiCodecRead(u8 page, u8 reg_no, u8* buffer) -{ - return kamiCodecIo(page, reg_no, buffer, 0, TRUE); -} - -static KAMIResult kamiCodecWrite(u8 page, u8 reg_no, u8 value) -{ - return kamiCodecIo(page, reg_no, NULL, value, FALSE); -} - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_KAMI_TEST_KAMITEST_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestComponent/ARM9.TWL/include/keypad.h b/build/tests/TestComponent/ARM9.TWL/include/keypad.h deleted file mode 100644 index 2f5a1602..00000000 --- a/build/tests/TestComponent/ARM9.TWL/include/keypad.h +++ /dev/null @@ -1,48 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef KAMI_KEY_PAD_H_ -#define KAMI_KEY_PAD_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -#include - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -void kamiPadRead(void); -BOOL kamiPadIsTrigger(u16 key); -BOOL kamiPadIsRepeatTrigger(u16 key); -BOOL kamiPadIsPress(u16 key); - -/*===========================================================================*/ - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* KAMI_KEY_PAD_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestComponent/ARM9.TWL/main.rsf b/build/tests/TestComponent/ARM9.TWL/main.rsf deleted file mode 100644 index 7d39d6cb..00000000 --- a/build/tests/TestComponent/ARM9.TWL/main.rsf +++ /dev/null @@ -1,232 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - RomVersion 2 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 2G - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - CommonClientKey TRUE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - HwAESSlotB TRUE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - HwAESSlotC TRUE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SCFG: scfg lock [TRUE/FALSE] - # - LockSCFG FALSE - - # - # DisableDebug FŏIROMł́AsɃfobOłȂ悤TRUEɂKv܂B - # - DisableDebug $(DISABLE_DEBUG) - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL -# HostRoot $(TWL_IPL_RED_ROOT)/build/systemMenu_tools/NandInitializerRed/data -# Root /data -# File cert.sys -# HostRoot $(PRIVKEY_PATH) -# Root /key -# File $(HWINFO_PRIVKEY) $(HWID_PRIVKEY) -} diff --git a/build/tests/TestComponent/ARM9.TWL/src/font_data.c b/build/tests/TestComponent/ARM9.TWL/src/font_data.c deleted file mode 100644 index aa1ba501..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/font_data.c +++ /dev/null @@ -1,734 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: font_data.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include - -/*---------------------- afXN[ ---------------------------*/ - -const u16 BgScDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -const u16 BgScDataSub[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -/*---------------------- pbgf[^ ---------------------------*/ -#define RGB555(r,g,b) (b<<10|g<<5|r) - -const u16 PlttDataObj[16][16] = { - {RGB555( 0, 0, 0), RGB555(31, 10, 0), RGB555(31, 0, 0), RGB555(5, 5, 20),}, // Black - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White -}; - -// ʃR\[pbg -const u16 PlttDataMain[16][16] = { - {RGB555( 0, 0, 0), RGB555(31, 10, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Orange - {RGB555(31, 31, 31), RGB555(31, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555(0, 31, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555(0, 0, 31), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(31, 31, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(31, 0, 31), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555( 0, 0, 0), RGB555(0, 0, 0), RGB555(0, 0, 0), RGB555(0, 0, 0),}, // Black -}; - -// ʃR\[pbg -const u16 PlttDataSub[16][16] = { - {RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(25, 25, 25), RGB555(31, 31, 31),}, // Black - {RGB555(31, 31, 31), RGB555(21, 0, 0), RGB555(31, 0, 0), RGB555(31, 0, 0),}, // Red - {RGB555(31, 31, 31), RGB555( 0, 21, 0), RGB555(0, 31, 0), RGB555(0, 31, 0),}, // Green - {RGB555(31, 31, 31), RGB555( 0, 0, 21), RGB555(0, 0, 31), RGB555(0, 0, 31),}, // Blue - {RGB555(31, 31, 31), RGB555(21, 21, 0), RGB555(31, 31, 0), RGB555(31, 31, 0),}, // Yellow - {RGB555(31, 31, 31), RGB555(0, 21, 21), RGB555(0, 31, 31), RGB555(0, 31, 31),}, // Cyan - {RGB555(31, 31, 31), RGB555(21, 0, 21), RGB555(31, 0, 31), RGB555(31, 0, 31),}, // Purple - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(20, 20, 20), RGB555(20, 20, 20), RGB555(20, 20, 20),}, // Gray - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555(31, 31, 31),}, // White - - // wiJ[͂16ԃpbg - // D ނ炳 sN ݂ Ž - {RGB555(31, 31, 31), RGB555(31, 31, 31), RGB555( 0, 0, 0), RGB555(20, 20, 20), RGB555(31, 15, 31), RGB555(31, 20, 20), RGB555(20, 29, 31), RGB555(20, 31, 20), RGB555(21, 21, 31), RGB555(31, 0, 0), RGB555(31, 31, 10), RGB555(25, 15, 15), RGB555(31, 31, 31), RGB555(31, 31, 31), } // White -}; - -/*---------------------- LN^f[^ -------------------------*/ - -const u32 sampleCharData[8 * 0x100] = { - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x11111111, 0x11111111, // 0001h use for import progress bar - 0x11111111, 0x11111111, 0x00000000, 0x00000000, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh 0 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh 1 - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h 2 - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h 3 - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h 4 - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h 5 - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h 6 - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h 7 - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h 8 - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h 9 - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h 10 - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h 11 - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah 12 - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh 13 - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech 14 - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh 15 - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh 16 - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh 17 - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h 18 - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h 19 - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h 20 - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h 21 - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h 22 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h 23 - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - - 0x33330000, - 0x33330000, - 0x33000000, - 0x33000000, // 00f6h - 0x33000000, - 0x33000000, - 0x33330000, - 0x33330000, - - - 0x00020000, // 00f7h - 0x00020000, - 0x00020000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00f8h - 0x00000000, - 0x00000000, - 0x00000000, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00f9h - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - 0x11111111, - - 0x11111111, // 00fah - 0x11111111, - 0x11111111, - 0x11111111, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00000000, // 00fbh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fch - 0x00020000, - 0x00020000, - 0x22222222, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00020000, // 00fdh - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - 0x00020000, - - 0x00000000, // 00feh - 0x00000000, - 0x00000000, - 0x22222222, - 0x00000000, - 0x00000000, - 0x00000000, - 0x00000000, - - 0x00020000, - 0x00220000, - 0x02122222, - 0x21111112, - 0x21111112, - 0x02122222, - 0x00220000, - 0x00020000, - - - -/* - 0x00022222, - 0x00002112, - 0x00021112, - 0x00211122, - 0x02111202, - 0x21112000, - 0x02120000, - 0x00200000, -*/ - -/* - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -*/ -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestComponent/ARM9.TWL/src/graphics.c b/build/tests/TestComponent/ARM9.TWL/src/graphics.c deleted file mode 100644 index 1de138e9..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/graphics.c +++ /dev/null @@ -1,160 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: praphics.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -//#include -#include -#include "kami_font.h" -#include "graphics.h" - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: InitGraphics - - Description: \̏ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void -InitGraphics(void) -{ - GX_DispOff(); - GXS_DispOff(); - - //---- VRAM NA - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - - //---- OAMƃpbgNA - MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE); - MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); - MI_CpuFillFast((void *)HW_DB_OAM, 192, HW_DB_OAM_SIZE); - MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - //---- naioN̐ݒ - GX_SetBankForOBJ(GX_VRAM_OBJ_128_A); - GX_SetBankForSubOBJ(GX_VRAM_SUB_OBJ_128_D); - - //---- afoN̐ݒ - GX_SetBankForBG(GX_VRAM_BG_128_B); - GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C); - - //---- \[hݒ - GX_SetGraphicsMode (GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_3D); - GX_SetVisiblePlane (GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_OBJ); - - //---- 3D - G3X_Init(); - G3X_InitMtxStack(); - G2_SetBG0Priority(0); - G3X_AlphaTest(FALSE, 0); - G3X_AntiAlias(TRUE); - G3X_EdgeMarking(FALSE); - G3X_SetFog(FALSE, (GXFogBlend)0, (GXFogSlope)0, 0); - G3X_SetClearColor(0, 0, 0x7fff, 63, FALSE); - G3_ViewPort(0, 0, 255, 191); - G3_MtxMode(GX_MTXMODE_POSITION_VECTOR); - - //---- 32KoCgOBJ2D}bv[hŎgp - GX_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_2D); - - // XN[ItZbgyуLN^[ItZbg̐ݒ - GX_SetBGScrOffset(GX_BGSCROFFSET_0x00000); - GX_SetBGCharOffset(GX_BGCHAROFFSET_0x10000); - - G2_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x00000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG0Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2S_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, - GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x2000 , - GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01 - ); - - G2_BG1Mosaic(FALSE); - G2S_BG1Mosaic(FALSE); - - //---- f[^[h - GX_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBG1Char( sampleCharData, 0, sizeof(sampleCharData)); - GX_LoadBGPltt ( PlttDataMain, 0, sizeof(PlttDataMain)); - GX_LoadBG1Scr ( BgScDataMain, 0, sizeof(BgScDataMain)); - GX_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GXS_LoadOBJ ( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBG0Char( sampleCharData, 0, sizeof(sampleCharData)); - GXS_LoadBGPltt ( PlttDataSub, 0, sizeof(PlttDataSub)); - GXS_LoadBG0Scr ( BgScDataSub, 0, sizeof(BgScDataSub)); - GXS_LoadOBJPltt( PlttDataObj, 0, sizeof(PlttDataObj)); - - GX_DispOn(); - GXS_DispOn(); -} - -/*---------------------------------------------------------------------------* - Name: DrawLine - - Description: Op|SŐ` - - Arguments: sx - `悷̊Jn_̂W - sy - `悷̊Jn_̂W - ex - `悷̏I_̂W - ey - `悷̏I_̂W - color - `悷̐F - - Returns: None. - *---------------------------------------------------------------------------*/ -void -DrawLine(s16 sx, s16 sy, s16 ex, s16 ey, GXRgb color) -{ - fx16 fsx = (fx16)(((sx - 128) * 0x1000) / 128); - fx16 fsy = (fx16)(((96 - sy) * 0x1000) / 96); - fx16 fex = (fx16)(((ex - 128) * 0x1000) / 128); - fx16 fey = (fx16)(((96 - ey) * 0x1000) / 96); - - G3_Begin(GX_BEGIN_TRIANGLES); - { - G3_Color( color ); - G3_Vtx(fsx, fsy, 0); - G3_Color( color ); - G3_Vtx(fex, fey, 0); - G3_Color( color ); - G3_Vtx(fsx, fsy, 1); - } - G3_End(); -} diff --git a/build/tests/TestComponent/ARM9.TWL/src/kami_font.c b/build/tests/TestComponent/ARM9.TWL/src/kami_font.c deleted file mode 100644 index fb3818b6..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/kami_font.c +++ /dev/null @@ -1,407 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_font.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_font.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define SCREEN_DATA_COLOR_PLTT_SHIFT 12 -#define NUM_OF_PRINT_TARGET 2 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u8 sXPos; -static u8 sYPos; - -static u32 sBackColorCharData[24*8]; - -static u16 sFontScreenDataMain[32 * 24] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -static u16 sFontScreenDataSub[24*32] = { - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -}; - -static u16 sBackColorScreenData[32 * 24] = { - 0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de,0xf0de, - 0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df,0xf0df, - 0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0,0xf0e0, - 0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1,0xf0e1, - 0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2,0xf0e2, - 0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3,0xf0e3, - 0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4,0xf0e4, - 0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5,0xf0e5, - 0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6,0xf0e6, - 0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7,0xf0e7, - 0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8,0xf0e8, - 0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9,0xf0e9, - 0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea,0xf0ea, - 0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb,0xf0eb, - 0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec,0xf0ec, - 0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed,0xf0ed, - 0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee,0xf0ee, - 0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef,0xf0ef, - 0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0,0xf0f0, - 0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1,0xf0f1, - 0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2,0xf0f2, - 0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3,0xf0f3, - 0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4,0xf0f4, - 0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5,0xf0f5, -}; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -static void kamiFontReturnConsole( void ); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontInit(void) -{ - // wipLN^f[^ - MI_CpuCopy32( &sampleCharData[8 * 0xde], sBackColorCharData, sizeof(sBackColorCharData) ); - - // wipXN[f[^Zbg - DC_FlushRange ( sBackColorScreenData, sizeof(sBackColorScreenData) ); - GXS_LoadBG1Scr ( sBackColorScreenData, 0, sizeof(sBackColorScreenData) ); -} - -/*---------------------------------------------------------------------------* - Name: - - Description: - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontLoadScreenData(void) -{ - DC_FlushRange ( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); - GX_LoadBG0Scr ( sFontScreenDataMain, 0, sizeof(sFontScreenDataMain) ); - - DC_FlushRange ( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); - GXS_LoadBG0Scr ( sFontScreenDataSub, 0, sizeof(sFontScreenDataSub) ); - - // wiLN^f[^ - DC_FlushRange( sBackColorCharData, sizeof(sBackColorCharData) ); - GXS_LoadBG0Char( sBackColorCharData, 0xde*32, sizeof(sBackColorCharData) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClear - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClear(void) -{ - MI_CpuClear8( sFontScreenDataSub, sizeof(sFontScreenDataSub) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontClearMain - - Description: zXN[NA - - Arguments: None - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontClearMain(void) -{ - MI_CpuClear8( sFontScreenDataMain, sizeof(sFontScreenDataMain) ); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintf(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataSub[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintf - - Description: zXN[ɕzuB32܂ŁB - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfMain(s16 x, s16 y, u8 color, char *text, ...) -{ - va_list vlist; - char temp[32 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - *(u16 *)(&temp[32]) = 0x0000; - for (i = 0;temp[i] != 0x00; i++) - { - sFontScreenDataMain[((y * 32) + x + i) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontFillChar - - Description: zXN[ - - Arguments: x - ̐擪zu x W( ~ 8 hbg )B - y - ̐擪zu y W( ~ 8 hbg )B - color - ̐FpbgԍŎwB - value - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontFillChar(int lineNo, u8 color1, u8 color2) -{ - s32 i; - u32 line; - int charNo = 0xde + lineNo; - - if (color1 < 0x10) - { - line = (u32)(0x11111111 * color1); - - for (i = 0;i<4; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } - - if (color2 < 0x10) - { - line = (u32)(0x11111111 * color2); - - for (i = 4;i<8; i++) - { - sBackColorCharData[8 * lineNo + i] = line; - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsole - - Description: zR\[ɕzuB256܂ŁB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsole(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - // I[lj - *(u16 *)(&temp[256]) = 0x0000; - - for(i=0; temp[i] != 0x00; i++) - { - if (temp[i] == 0x0A) - { - // sR[h - kamiFontReturnConsole(); - } - else - { - // ꕶ - sFontScreenDataMain[((sYPos * 32) + sXPos) % (24 * 32)] = - (u16)((color << SCREEN_DATA_COLOR_PLTT_SHIFT) | temp[i]); - - // XWE[ɓBꍇ͉s - if (++sXPos >= 32) - { - kamiFontReturnConsole(); - } - } - } -} - -/*---------------------------------------------------------------------------* - Name: kamiFontPrintfConsoleEx - - Description: zR\[ɕzuB256܂ŁB - OS_Printf‚łɎsB - - Arguments: color - ̐FpbgԍŎwB - text - zu镶BI[NULLB - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void -kamiFontPrintfConsoleEx(u8 color, const char *text, ...) -{ - va_list vlist; - char temp[256 + 2]; - - va_start(vlist, text); - (void)vsnprintf(temp, 256, text, vlist); - va_end(vlist); - - kamiFontPrintfConsole(color, temp); - OS_TPrintf(temp); -} - -/*---------------------------------------------------------------------------* - Name: kamiFontReturnConsole - - Description: zR\[ɂss - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -kamiFontReturnConsole( void ) -{ - sXPos = 0; - if (sYPos < 23) - { - // ̍s - sYPos++; - } - else - { - // ɍŏIsɓBĂꍇVtgs - MI_CpuCopy32( &sFontScreenDataMain[32], sFontScreenDataMain, sizeof(u16)*32*23 ); - MI_CpuClear32( &sFontScreenDataMain[32*23], sizeof(u16)*32); - } -} - diff --git a/build/tests/TestComponent/ARM9.TWL/src/kami_pxi.c b/build/tests/TestComponent/ARM9.TWL/src/kami_pxi.c deleted file mode 100644 index eb6359ab..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/kami_pxi.c +++ /dev/null @@ -1,743 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_pxi.h" -#include "fifo.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -// l߂ăRs[ -#define KAMI_PACK_U8(d, s) \ - ((d)[0] = (u8)((*((u8*)s) >> 0) & 0xFF)) - - -#define KAMI_PACK_U16(d, s) \ - ((d)[0] = (u8)((*((u16*)s) >> 0) & 0xFF), \ - (d)[1] = (u8)((*((u16*)s) >> 8) & 0xFF)) - -#define KAMI_PACK_U32(d, s) \ - ((d)[0] = (u8)((*((u32*)s) >> 0) & 0xFF), \ - (d)[1] = (u8)((*((u32*)s) >> 8) & 0xFF), \ - (d)[2] = (u8)((*((u32*)s) >> 16) & 0xFF), \ - (d)[3] = (u8)((*((u32*)s) >> 24) & 0xFF)) - - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef struct KamiWork -{ - BOOL lock; - - KamiCommand command; - KAMIPxiResult result; - KAMICallback callback; - void* arg; - - u32 total; - u32 current; - u8* data; -} -KamiWork; - -/*---------------------------------------------------------------------------* - ÓIϐ` - *---------------------------------------------------------------------------*/ -static BOOL kamiInitialized; -static KamiWork kamiWork; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data); -static void KamiSendPxiData(u8 *pData); -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); -static void KamiDone(KAMIResult result); -static void KamiWaitBusy(void); - - -void KamiPxiInit( void ) -{ - kamiWork.lock = FALSE; - - PXI_Init(); - while ( !PXI_IsCallbackReady(PXI_FIFO_TAG_KAMITEST, PXI_PROC_ARM7 )) - { - } - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - if ( 0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, KAMITEST_PXI_START_BIT | (KAMI_TEST_COMMAND << KAMITEST_PXI_COMMAND_SHIFT), 0)) - { - return; - } -} - - - -/////////////////////////////////////////////////////////////////// - -//typedef void (*KAMICallback)(KAMIResult result, void *arg); -/* -void CDC_ReadCallback(KAMIResult result, void* arg); -void CDC_ReadCallback(KAMIResult result, void* arg) -{ - -} -*/ - -/*---------------------------------------------------------------------------* - Name: tH[}bgs֐ - - Description: - - Arguments: FormatMode - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = callback; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode) == FALSE) - { - return KAMI_RESULT_SEND_ERROR; - } - return KAMI_RESULT_SUCCESS; -} - -KAMIResult ExeFormat(FormatMode format_mode) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: NANDANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - // f[^쐬 - KAMI_PACK_U32(&data[0], &block); - KAMI_PACK_U32(&data[4], &buffer); - KAMI_PACK_U32(&data[8], &count); - - if (KamiSendPxiCommand(KAMI_NAND_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiMcuWriteFirm - - Description: MCUt@[XV֐ - - Arguments: buffer : new mcu data buffer - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiMcuWriteFirm(void* buffer ) -{ - OSIntrMode enabled; - u8 data[4+2]; // 3̔{ - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - - // f[^쐬 - KAMI_PACK_U32(&data[0], &buffer); - - if (KamiSendPxiCommand(KAMI_MCU_WRITE_FIRM, 5, (u8)0)) - { - for (i = 0; i < 4; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: MCUANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - if (is_read) - { - kamiWork.data = (u8*)buffer; - } - else - { - kamiWork.data = 0; - } - - // f[^쐬 - KAMI_PACK_U32(&data[0], ®_no); - KAMI_PACK_U32(&data[4], &value); - - if (KamiSendPxiCommand(KAMI_MCU_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: CODECANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiCodecIo(u8 page, u8 reg_no, u8* buffer, u8 value, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - if (is_read) - { - kamiWork.data = (u8*)buffer; - } - else - { - kamiWork.data = 0; - } - - // f[^쐬 - KAMI_PACK_U8(&data[0], &page); - KAMI_PACK_U8(&data[1], ®_no); - KAMI_PACK_U32(&data[4], &value); - - if (KamiSendPxiCommand(KAMI_CODEC_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: ARM7ANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - if (is_read) - { - kamiWork.data = (u8*)buffer; - } - else - { - kamiWork.data = 0; - } - - // f[^쐬 - KAMI_PACK_U32(&data[0], &addr); - KAMI_PACK_U32(&data[4], &value); - - if (KamiSendPxiCommand(KAMI_ARM7_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiCDC_GoDsMode - - Description: CODECDS[h֑Jڂ֐ - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiCDC_GoDsMode( void ) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_CDC_GO_DSMODE, 0, (u8)0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiClearNandErrorLog - - Description: NVRAMNANDG[NA܂B - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiClearNandErrorLog( void ) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_CLEAR_NAND_ERRORLOG, 0, (u8)0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetCameraModuleTypesAsync - - Description: JW[^Cv擾܂i񓯊Łj - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ) -{ - OSIntrMode enabled; - - if (pTypes == NULL) - { - return KAMI_RESULT_INVALID_PARAMETER; - } - - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - kamiWork.callback = callback; - kamiWork.arg = arg; - kamiWork.data = (u8*)pTypes; - (void)OS_RestoreInterrupts(enabled); - - if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0)) - { - return KAMI_RESULT_SUCCESS; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetCameraModuleTypes - - Description: JW[^Cv擾܂iŁj - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ) -{ - OSIntrMode enabled; - - if (pTypes == NULL) - { - return KAMI_RESULT_INVALID_PARAMETER; - } - - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = (u8*)pTypes; - (void)OS_RestoreInterrupts(enabled); - - if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetNandCID - - Description: NANDCID擾܂B - - Arguments: buffer : 16oCgobt@ - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetNandCID(void* buffer ) -{ - OSIntrMode enabled; - u8 data[4+2]; // 3̔{ - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = (u8*)buffer; - - if (KamiSendPxiCommand(KAMI_GET_NAND_CID, 0, 0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - PXI֘A - *---------------------------------------------------------------------------*/ - -static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - ((size << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((data << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - if (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - return FALSE; - } - return TRUE; -} - -static void KamiSendPxiData(u8 *pData) -{ - u32 pxiData = (u32)((pData[0] << 16) | (pData[1] << 8) | pData[2]); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } -} - -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused( tag ) - if (err) - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - if (data & KAMITEST_PXI_START_BIT) // 擪f[^ - { - if (data & KAMITEST_PXI_RESULT_BIT) - { - kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); - kamiWork.current = 0; - kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); - kamiWork.result = (KAMIPxiResult)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); - } - else // m̃f[^ - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - } - else // 㑱f[^ - { - if (kamiWork.data == NULL) - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); - } - } - if (kamiWork.current == kamiWork.total-1) - { - KAMIResult result; - switch (kamiWork.result) - { - case KAMI_PXI_RESULT_SUCCESS: // alias KAMI_PXI_RESULT_SUCCESS_TRUE - result = KAMI_RESULT_SUCCESS; // alias KAMI_RESULT_SUCCESS_TRUE - break; - case KAMI_PXI_RESULT_SUCCESS_FALSE: - result = KAMI_RESULT_SUCCESS_FALSE; - break; - case KAMI_PXI_RESULT_INVALID_COMMAND: - result = KAMI_RESULT_INVALID_COMMAND; - break; - case KAMI_PXI_RESULT_INVALID_PARAMETER: - result = KAMI_RESULT_INVALID_PARAMETER; - break; - case KAMI_PXI_RESULT_ILLEGAL_STATUS: - result = KAMI_RESULT_ILLEGAL_STATUS; - break; - case KAMI_PXI_RESULT_BUSY: - result = KAMI_RESULT_BUSY; - break; - default: - result = KAMI_RESULT_FATAL_ERROR; - } - KamiDone(result); - return; - } -} - -extern void PXIi_HandlerRecvFifoNotEmpty(void); -static void KamiWaitBusy(void) -{ - volatile BOOL *p = &kamiWork.lock; - - while (*p) - { - if (OS_GetCpsrIrq() == OS_INTRMODE_IRQ_DISABLE) - { - PXIi_HandlerRecvFifoNotEmpty(); - } - } -} - -static void KamiDone(KAMIResult result) -{ - KAMICallback callback = kamiWork.callback; - void* arg = kamiWork.arg; - kamiWork.callback = NULL; - kamiWork.arg = NULL; - if (kamiWork.lock) - { - kamiWork.lock = FALSE; - } - if (callback) - { - callback(result, arg); - } -} diff --git a/build/tests/TestComponent/ARM9.TWL/src/keypad.c b/build/tests/TestComponent/ARM9.TWL/src/keypad.c deleted file mode 100644 index 155c4bc2..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/keypad.c +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: keypad.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "keypad.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_TRIGGER_START 20 -#define KEY_REPEAT_TRIGGER_TERM 5 - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static u16 Cont; -static u16 Trg; -static u16 Release; -static u16 RepeatTrg; -static u8 key = 60; - -static int repeat_counter; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -void -kamiPadRead(void) -{ - u16 ReadData; - - ReadData = PAD_Read(); - Trg = (u16)(ReadData & (ReadData ^ Cont)); - Release = (u16)(Cont & (ReadData ^ Cont)); - Cont = ReadData; - - RepeatTrg = Trg; - if (++repeat_counter > (KEY_REPEAT_TRIGGER_START + KEY_REPEAT_TRIGGER_TERM)) - { - repeat_counter = KEY_REPEAT_TRIGGER_START; - } - if (repeat_counter == KEY_REPEAT_TRIGGER_START) - { - RepeatTrg = ReadData; - } - if (!ReadData) - { - repeat_counter = 0; - } -} - -BOOL -kamiPadIsTrigger(u16 key) -{ - return (Trg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsRepeatTrigger(u16 key) -{ - return (RepeatTrg & key)? TRUE : FALSE; -} - -BOOL -kamiPadIsPress(u16 key) -{ - return (Cont & key)? TRUE : FALSE; -} - diff --git a/build/tests/TestComponent/ARM9.TWL/src/main.c b/build/tests/TestComponent/ARM9.TWL/src/main.c deleted file mode 100644 index 64ca2f34..00000000 --- a/build/tests/TestComponent/ARM9.TWL/src/main.c +++ /dev/null @@ -1,230 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include "kami_font.h" -#include "graphics.h" -#include "keypad.h" -#include "kami_pxi.h" - -#define SCRAMBLE_MASK 0x00406000 - -extern void HWInfoWriterInit( void ); - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef void* (*Process)(void); - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static Process sProcess; -static FSEventHook sSDHook; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void VBlankIntr(void); -static void InitAllocation(void); - -static void* DummyProcess0(void) -{ - return DummyProcess0; -} - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void -TwlMain() -{ - // irh`[fobKł̋NΉ - if ( OS_GetRunningConsoleType() & OS_CONSOLE_TWLDEBUGGER ) - { - ROM_Header *dh = (void *)HW_ROM_HEADER_BUF; - dh->s.game_cmd_param &= ~SCRAMBLE_MASK; - } - - OS_Init(); - OS_InitTick(); - OS_InitArena(); - PXI_Init(); - OS_InitLock(); - OS_InitArenaEx(); - OS_InitIrqTable(); - OS_SetIrqStackChecker(); - MI_Init(); - OS_InitVAlarm(); - OSi_InitVramExclusive(); - OS_InitThread(); - OS_InitReset(); - GX_Init(); - FX_Init(); - SND_Init(); - SNDEX_Init(); - TP_Init(); - RTC_Init(); - -#ifndef NAND_INITIALIZER_LIMITED_MODE - KamiPxiInit(); /* ƎPXI */ -#endif - - // VuN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)OS_EnableIrqMask(OS_IE_FIFO_RECV); - (void)OS_EnableIrq(); - (void)GX_VBlankIntr(TRUE); - - // initialize file-system - FS_Init(FS_DMA_NOT_USE); - - // FAThCo܂B - // NANDɃANZX邽߂ɕKvłB - // ̊֐TwlSDK_branchUIGɂ͊܂܂Ă܂B - FS_InitFatDriver(); - - // SDJ[h̑}CxgĎR[obNݒ -// FS_RegisterEventHook("sdmc", &sSDHook, SDEvents, NULL); - - // FS_Iniť̕ǂ͗l - InitAllocation(); - - // \֘A - InitGraphics(); - kamiFontInit(); - - /* always preload FS table for faster directory access. */ - { - u32 need_size = FS_GetTableSize(); - void *p_table = OS_Alloc(need_size); - SDK_ASSERT(p_table != NULL); - (void)FS_LoadTable(p_table, need_size); - } - - // V[PXݒ - sProcess = DummyProcess0; - - kamiFontPrintfConsole( CONSOLE_ORANGE, "This is Test Component\n"); - -#ifdef TWL_CAPTURE_VERSION - // memory-launcheroRŗオTWLCaptureSystemWriterł - // RED_LAUNCHER_VER0ŃtH[}bgɎŝŋIɏ - MI_StoreLE8((void*)HW_TWL_RED_LAUNCHER_VER, 1); -#endif - -#ifdef AUTO_FORMAT_MODE -// HłNANDĂȂ̏ԂFATɃANZX -// 肪邽ߋIɃtH[}bgs 2008/06/18 -// ExeFormat(FORMAT_MODE_QUICK); -// -// SecureǂݍޑOɃtH[}bgĂ܂Secure񂪏Ă܂B -// ƃVANoĂ܂̂ł̏͂ȂB -// HƈقȂNandInitializersiKł̓tH[}bgς݂Ȃ͂B -// ɖtH[}bgłƂĂBadFormatƂȂB2009/03/05 -#endif - - // NAMCu - NAM_Init( OS_AllocFromMain, OS_FreeToMain); - NAMUT_Init( OS_AllocFromMain, OS_FreeToMain); - -/* -{ - u8 temp; - kamiCodecRead( 1, 31, &temp); - OS_Printf("temp = %x\n", temp); - kamiCodecWrite( 1, 31, (temp & 0x7f)); - kamiCodecRead( 1, 31, &temp); - OS_Printf("temp = %x\n", temp); - -} -*/ - - while (1) - { - kamiPadRead(); - - // R}htbV -// (void)SND_FlushCommand(SND_COMMAND_NOBLOCK); - - // VuN҂ - OS_WaitVBlankIntr(); - - // `qlVR}hM -// while (SND_RecvCommandReply(SND_COMMAND_NOBLOCK) != NULL) -// { -// } - - // tHgXN[f[^[h - kamiFontLoadScreenData(); - - sProcess = sProcess(); - } -} - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - - Description: VBlank荞ݏ - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // checking VBlank interrupt -} - -/*---------------------------------------------------------------------------* - Name: InitAllocation - - Description: q[v̏. - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitAllocation(void) -{ - void *tmp; - OSHeapHandle hh; - - /* A[ȉ */ - tmp = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tmp); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - OS_Panic("ARM9: Fail to create heap...\n"); - hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - diff --git a/build/tests/TestComponent/Makefile b/build/tests/TestComponent/Makefile deleted file mode 100644 index d593101e..00000000 --- a/build/tests/TestComponent/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - camera -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - -#---------------------------------------------------------------------------- - -SUBDIRS = \ - banner \ - ARM7.TWL \ - ARM9.TWL \ - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/TestComponent/banner/Makefile b/build/tests/TestComponent/banner/Makefile deleted file mode 100644 index e373c033..00000000 --- a/build/tests/TestComponent/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/TestComponent/banner/banner_v3.bsf b/build/tests/TestComponent/banner/banner_v3.bsf deleted file mode 100644 index a86a720b5783204182ddd4feea8564f590489157..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 884 zcmc(ePiw+J5XIlsLcha;=PDxf;L&3IgGg!G-eXi;P%BAP?1yjrn_WLZajYAPEm7!nLA%GV@DBJs*qqFaNC|4(4{9ZJ($ll%8vSc$*4-z%Or6&kdIu=%2Tc~6 z=@q1Aef5kvu&V^kSuvY4XJyh5;+pyP|f#t;a@T_92{s-nrdszSg diff --git a/build/tests/TestComponent/banner/icon/gameIcon.bmp b/build/tests/TestComponent/banner/icon/gameIcon.bmp deleted file mode 100644 index 349097466463fa57dc9aa396b39cb1368b6a7f24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmah`!41MN3^Wz$hgbSW0wP)B!z;=H{6Q#|cVG}EVIn4Bg>p{QQfQ@Gy2zJ{?Q?s+ z+$zd(#d!qw1uI%3BdVY`n+`R&!Qyq_()+oiwrw*Wr<$B={169+_~V0^6XzEAuWXD} z)dNXW7CFS|MM9FoMI!?}_sBIU-gLTg0meLzIBJ7}1G&KZC-j#PI$q|Rg{iyAjV2g| z>6ATtOl9~rpr;zw7!_bMmEcYyMww@%#v|O}6cJm=URechI~^&yanQb=ZGFz3(ck8m SW6to>_n+vl`K~zge~CV{cWuJ} diff --git a/build/tests/TestComponent/common/include/fifo.h b/build/tests/TestComponent/common/include/fifo.h deleted file mode 100644 index 7e00b943..00000000 --- a/build/tests/TestComponent/common/include/fifo.h +++ /dev/null @@ -1,105 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - camera-test - include - File: fifo.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef TWL_KAMI_TEST_FIFO_H_ -#define TWL_KAMI_TEST_FIFO_H_ - -#include - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define PXI_FIFO_TAG_KAMITEST PXI_FIFO_TAG_USER_1 - -#define KAMI_PXI_CONTINUOUS_PACKET_MAX 10 -#define KAMITEST_PXI_DATA_SIZE_MAX ((KAMI_PXI_CONTINUOUS_PACKET_MAX-1)*3+1) // őf[^ - -#define KAMITEST_PXI_START_BIT 0x02000000 // 擪pPbgӖ -#define KAMITEST_PXI_RESULT_BIT 0x00008000 // PXỈ - -#define KAMITEST_PXI_COMMAND_SHIFT 8 // R}hi[̈ʒu -#define KAMITEST_PXI_COMMAND_MASK 0x00007f00 // R}hi[̃}XN -#define KAMITEST_PXI_DATA_NUMS_MASK 0x00ff0000 // f[^̈ -#define KAMITEST_PXI_DATA_NUMS_SHIFT 16 // f[^ʒu -#define KAMITEST_PXI_1ST_DATA_MASK 0x000000ff // 擪pPbg̃f[^̈ -#define KAMITEST_PXI_1ST_DATA_SHIFT 0 // 擪pPbg̃f[^ʒu - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -typedef enum KAMIPxiResult -{ - KAMI_PXI_RESULT_SUCCESS = 0, // (void/void*^) // ꍇɂ㑱pPbg - KAMI_PXI_RESULT_SUCCESS_TRUE = 0, // (BOOL^) - KAMI_PXI_RESULT_SUCCESS_FALSE, // (BOOL^) - KAMI_PXI_RESULT_INVALID_COMMAND, // sPXIR}h - KAMI_PXI_RESULT_INVALID_PARAMETER, // sȃp[^ - KAMI_PXI_RESULT_ILLEGAL_STATUS, // KAMȈԂɂ菈ss - KAMI_PXI_RESULT_BUSY, // ̃NGXgs - KAMI_PXI_RESULT_FATAL_ERROR, // ̑炩̌ŏɎs - KAMI_PXI_RESULT_MAX -} -KAMIPxiResult; - - -typedef enum KamiCommand -{ - KAMI_TEST_COMMAND, - KAMI_EXE_FORMAT, - KAMI_NAND_IO, - KAMI_MCU_IO, - KAMI_MCU_WRITE_FIRM, - KAMI_ARM7_IO, - KAMI_CDC_GO_DSMODE, - KAMI_CLEAR_NAND_ERRORLOG, - KAMI_GET_CAMERA_MODULE_TYPE, - KAMI_GET_NAND_CID, - KAMI_CODEC_IO -} -KamiCommand; - - -typedef enum CameraModuleType -{ - CAMERA_MODULE_TYPE_UNKNOWN, - CAMERA_MODULE_TYPE_SHARP, - CAMERA_MODULE_TYPE_MICRON -} -CameraModuleType; - - -typedef struct CameraModuleTypes -{ - CameraModuleType in; - CameraModuleType out; -} -CameraModuleTypes; - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_KAMI_TEST_FIFO_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TestMaker/Makefile b/build/tests/TestMaker/Makefile deleted file mode 100644 index a4b0b349..00000000 --- a/build/tests/TestMaker/Makefile +++ /dev/null @@ -1,241 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - GX - demos - UnitTours/3D_Shininess -# File: Makefile -# -# Copyright 2003 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -ifeq ($(GAMECODE),) -#------------------------------------------------------------------------------------ -# sub make N - -CONFIG = ./script/config.py -GENCLS = ./script/clsdir.py -GENFONT = ./script/fontcode.py -GENPARENTAL = ./script/parentalcontrol.py -FONTCODES = ./doc/20080617_DS_fontcodeList_NOE_FIANL.xls -CLSROMPARAM = ./config/romparam_forCLStest.yaml -PCROMPARAM = ./config/twl_parentalcontrol_spec.yaml -EULAROMPARAM = ./config/romparam_forEULAtest.yaml -SHOPROMPARAM = ./config/romparam_forShoptest.yaml -SAVEROMPARAM = ./config/romparam_forSavetest.yaml -FATFSPERMISSIONROMPARAM = ./config/romparam_forFATFSPermissiontest.yaml -BOOTROMPARAM = ./config/romparam_forBoottest.yaml -ROMPARAM = ./romparam.yaml -CODESLIST = ./codeslist - --include $(CODESLIST) - -build: $(GAMECODES) - -.PHONY: $(GAMECODES) clean config clstest fonttest parentaltest - -#---- CLS eXgݒ -clstest: - cp -f $(CLSROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "CLS" - -#---- fontcode eXgݒ -fonttest: - $(GENFONT) $(FONTCODES) $(ROMPARAM) "Reverse" - $(CONFIG) $(ROMPARAM) $(CODESLIST) "FONT" - -#---- parentarlcontrol eXgݒ -parentaltest: - $(GENPARENTAL) $(PCROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "PARENTAL" - -#---- eula eXgݒ -eulatest: - cp -f $(EULAROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "EULA" - -#---- shop eXgݒ -shoptest: - cp -f $(SHOPROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "SHOP" - -#---- savedate eXgݒ -savetest: - cp -f $(SAVEROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "SAVE" - -#---- fatfspermissiontest eXgݒ -fatfspermissiontest: - cp -f $(FATFSPERMISSIONROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "FATFSPERMISSION" - -#---- boottest eXgݒ -boottest: - cp -f $(BOOTROMPARAM) $(ROMPARAM) - $(CONFIG) $(ROMPARAM) $(CODESLIST) "BOOT" - -#---- config -config: - $(CONFIG) $(ROMPARAM) $(CODESLIST) "DEFAULT" - -$(GAMECODES): $(CODESLIST) - install -d $@ && $(MAKE) -k -C $@ -f ../Makefile GAMECODE=$@ TEST_TYPE=$(TEST_TYPE) - -forcls: - $(GENCLS) $(ROMPARAM) - -clean: - rm -Rf $(GAMECODES) - rm -f $(CODESLIST) - rm -Rf roms - rm -Rf forCLS - -else -#------------------------------------------------------------------------------------ -# sub make { - -SUBDIRS = - -#---- sysm_red_misc -MISC_DIR = ../../../systemMenu_RED/misc - -#---- default -BASEDIR = $(ROOT)/build/demos/os/consoleType-1 -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c font.c screen.c -BANNERSRC := $(wildcard ../banner/dummy/Cell/*.nce) -INSTALL_DIR = ../roms -MY_COMMONDEFS = $(TWLSDK_ROOT)/build/buildtools/commondefs \ - $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib -MY_MODULERULES = $(TWLSDK_ROOT)/build/buildtools/modulerules - -TARGET_PLATFORM := TWL -TWL_ARCHGEN := LIMITED -TWL_NANDAPP := TRUE - -ifeq ($(TEST_TYPE),CLS) -BASEDIR = $(ROOT)/build/demos/os/consoleType-1 -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c font.c screen.c -BANNERSRC := $(wildcard ../banner/dummy/Cell/*.nce) -endif - -ifeq ($(TEST_TYPE),FONT) -BASEDIR = $(ROOT)/build/demos/gx/UnitTours/3D_BoxTest -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c data.c -BANNERSRC := $(wildcard ../banner/font/Cell/*.nce) -endif - -ifeq ($(TEST_TYPE),PARENTAL) -BASEDIR = $(ROOT)/build/tests/ogntest/ -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c -BANNERSRC := $(wildcard ../banner/parental/Cell/*.nce) -endif - -ifeq ($(TEST_TYPE),EULA) -BASEDIR = $(ROOT)/build/demos/gx/UnitTours/3D_BoxTest -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c data.c -BANNERSRC := $(wildcard ../banner/eula/Cell/*.nce) -endif - -ifeq ($(TEST_TYPE),SHOP) -BASEDIR = $(ROOT)/build/tests/nandApp/40M -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = main.c -BANNERSRC := $(wildcard ../banner/shop/Cell/*.nce) -MAKEROM_ROMROOT = $(ROOT)/build/tests/nandApp/40M/rom_data -MAKEROM_ROMFILES = *.* -endif - -ifeq ($(TEST_TYPE),SAVE) -BASEDIR = $(ROOT)/build/tests/save_data/DisplayVersion -SRCDIR = $(BASEDIR)/src -INCDIR = $(BASEDIR)/include -SRCS = dataver.c font.c main.c menu.c screen.c -BANNERSRC := $(wildcard $(BASEDIR)/banner/data/Cell/*.nce) -endif - -ifeq ($(TEST_TYPE),FATFSPERMISSION) -TARGET_FIRM = SYSTEMMENU -BASEDIR = ../../RomTypeTest -SRCDIR = $(BASEDIR)/ARM9/src -INCDIR = $(BASEDIR)/ARM9/src $(MISC_DIR)/include -SRCS = main.c RomTypeTest.c $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c -BANNERSRC := $(wildcard ../banner/shop/Cell/*.nce) -INSTALL_DIR = $(BASEDIR)/test_roms -INSTALL_TARGETS += $(BINDIR)/twl_$(GAMECODE).$(INT_ROM_EXT) -MAKEROM_ROMROOT = ../../../systemMenu_RED/ -MAKEROM_ROMFILES = ./data/NTR_IPL_font_m.NFTR -MY_COMMONDEFS = $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -MY_MODULERULES = $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -endif - -ifeq ($(TEST_TYPE),BOOT) -TARGET_FIRM = SYSTEMMENU -BASEDIR = ../../HashCheckTemplate -SUBDIRS = $(BASEDIR)/crt $(BASEDIR)/ARM7 -SRCDIR = $(BASEDIR)/ARM9/src -INCDIR = $(BASEDIR)/ARM9/src $(MISC_DIR)/include -SRCS = main.c HashCheckTemplate.c $(MISC_DIR)/src/misc.c $(MISC_DIR)/src/cmn.c -BANNERSRC := $(wildcard ../banner/shop/Cell/*.nce) -INSTALL_DIR = $(BASEDIR)/test_roms -INSTALL_TARGETS += $(BINDIR)/twl_$(GAMECODE).$(INT_ROM_EXT) -MAKEROM_ROMROOT = ../../../systemMenu_RED/ -MAKEROM_ROMFILES = ./data/NTR_IPL_font_m.NFTR -MY_COMMONDEFS = $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -MY_MODULERULES = $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules -endif - -BANNER = ./banner.bnr -MAKEBANNER = $(TWL_TOOLSDIR)/bin/makebanner.TWL.exe -BANNERCVTR = $(TWL_TOOLSDIR)/bin/bannercvtr.exe - -#---------------------------------------------------------------------------- - -TARGET_BIN = twl_$(GAMECODE).$(TARGET_SUFFIX) -ROM_SPEC = twl_$(GAMECODE).rsf - -#SRCDIR = # using default -#LCFILE = # using default - -INSTALL_TARGETS += $(BINDIR)/$(TARGET_BIN) - -include $(GAMECODE).param - -include $(MY_COMMONDEFS) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -$(TARGETS): $(BANNER) - -$(BANNER): $(BANNER:.bnr=.bin) $(BANNER:.bnr=.bsf) - $(MAKEBANNER) -A $(BANNER:.bnr=.bin) $(BANNER:.bnr=.bsf) $@ - -$(BANNER:.bnr=.bin): $(BANNERSRC) - $(BANNERCVTR) -o $@ $< - -include $(MY_MODULERULES) - -# sub make { -#------------------------------------------------------------------------------------ -endif - -#===== End of Makefile ===== diff --git a/build/tests/TestMaker/banner/dummy/Cell/Cell0.nce b/build/tests/TestMaker/banner/dummy/Cell/Cell0.nce deleted file mode 100644 index becd71774319333118b74774e36603b3341ca2c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6260 zcmeHL&u6kh-Cp;A2>J#yfNBLcV=+6( zm`asO*>=>lZHDq6BVgHa7QGWs2577W8!h`bJTKfCx(?t?iYNp_+7{#n|H2CV<^JD} zvDAVxKPb8wwojcsW3m6O{g20@NXE0VqEh(kB_aj^rG={4ihtul)~T z|6{aKs{Ln-nX%YSLcCKVe@OdJhetG!vZI>`{Aj#q6Q%bP@)j;`r;F{V|6P{z4e6A28 zUyB?qexH^2A{+oA2;;eI2Ei0jKjDSKxaVwvhggPZ$^L}w(Y=sGkRI^;7qi(n2w&ls z=*%;r63-kuJmWuysChwnb~#=uEb(Fp;y{W^r6PqiLZMVBgo>e%Q*@l7hmjJMQYpus z%o2A(i`-eva%agwuo(o4DQS>n#o}S%gr=ng4RZo0l^~s5k)J>~gNb4op~GpVB32kv zsT&O;%I@>W#t#udYF7I3$(;@))32Z0E8h-R4Zi!h*EYmAVMCvZ#>#8QG(Iy@DV;VE^4ph-W24%ggT&Gj%+qS9zoMXkIdYT;#3Tds)ON)5r55iF*pL6y1g zY5k0*r34Lg1}K#vYgJdAK?H+|Vi>8zd8;MY7*nbHeJPv0mo3&`RqClv>y?!1-eVpk z1KDQHSM6?ue632f z81Gwd!IyvU>ihT#+*1TianpI|^EV}}{`Ieil}@E;o#|fuw_ktxQ`!1%f6vc@^xd6r tDV^5WA6P#*$IioN`QryaI7dhM;{)gD$-$!^^Ug-{z)Yvtj~*Tx#vcbIvkCwJ diff --git a/build/tests/TestMaker/banner/dummy/Character/banner_anm_idea03_ALL.ncg b/build/tests/TestMaker/banner/dummy/Character/banner_anm_idea03_ALL.ncg deleted file mode 100644 index 383dda18311a3b63a096cb762263b7b604b81517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4336 zcmeHLO>f&q5LJO5d&ubf6Nng{jWF^bptL|+BsHqQj4lBJwv~(mt^)><_N*JDQ+bPg z<4xL|&WsK`M?UZ@?SJSmX#3Wt1lw4mJ|sv1=Mm$b-I?Kx1-==AN8RrC|NNc#=C22t z%!ACgneGqP^E~v2nGAMUVEB{SL7;9RL5!TO!|IGi$piWL(pQ_1tg8EXe zcc}WF}$RBv#wS%1jtE_G1ik2T&>zd+nU1BFc&_>ol zV4wyexeAwP1~K%lT(564J6y{eEoG?ux5^*k>kv&M0rJOTceeZ;pFFOu}(YBtSrQYSow~nTH+qIUuf&}~kvm13J0*u-QW4}8lk!|l&V4c2UFXn}CXn!TD(17Q2+9y2 z5>)4bY6*MH=CfHjD3|@f_k#p`Bb51kD*Q=R_~nZ5E1vMHzPO|!$Saq%ja*(ta=E)M zpe0Qp;p<9n)(sigAQ2>PY+}_C_E>M$>snl^MR63x3HC-Po6Sl_%Z7| z{J;Ky-bbC9cv-;Xz>T8#xc^60tXJ*S{T?iw%Xwq=%VOV3Nr=U-+domoW zv95)p`54d|ap?42K8A3Dizbbr35GRBdJ3i#1n0Ab8tYmpnlAvY5r_UX5DSPPxMEP|#!OLHqv$MgQSI*fVuYUh+;5=?0oc($VzwS>*$KNHT F{tJ!qCVc<^ diff --git a/build/tests/TestMaker/banner/dummy/ColorPalette/banner_anm_idea03.ncl b/build/tests/TestMaker/banner/dummy/ColorPalette/banner_anm_idea03.ncl deleted file mode 100644 index da86752218073033e1ee62e7bd387771c9c8c825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmeZscJ}%IkAYE#iGe|Yfr%l&(I-Rz%m(p6phdvYO(OY!{W{(4Zu8@FCBu~L^?ffgc5Z$!lLkNjjLV^QgBg7F!6@LH{6KI8#R#A{R^gvWafD|fJ!M#6^0|yTL zkopf0-Wz+8jpJ!zP!Awa`#ihPvpcghyRN#!_^>zs)oeVz=UmI(adAIMzB}h`0uA6| zelds2WG7Q)d<(D2__o3C8T@mDKQj1t2LBm+JbW`qpmi;1N{r21D}Ouh>l*In{rkCo z03GjlM=cm|jYyQ6hZ056TmUj6&<`Xl&n8^q&1u_ACQLpfX#8t^^(zJSnVo3@S@TlHgU7{NZuvF00m1!4RG zjNwYM^(-dP7?fb&lK-#%NCtAEIZ!R@XWFvV!@~PjSQ#>TjF-v8K>b)+d`0j{tobHa zL8SJwn7aPU8X$)__NXj=*XkeEg*ya&-TI;{WM56;FRZ^$F(+a9Uh(%={_Fa$*C0q} z%KGNTP^|-~@j8O?1)y6=Jgf;3^LG{ z!LRrOt1;vTDL<{j5Bq5l*OmYM$0Btt^joaMVjWrN%$hF%-AdwNO^6iz75gyq8zA#+ z^yIRaH3-tfbTMDPfY4-{wvHFu&{tU-MrvtIk87mVabF+;C4z>v+}sq#KVDy|dFZ$a6C|e9_mtJ@QGnm+Kre@wGlMq=J!GQS~Jtg yf6_~yK=WSr=Z|lfqW^Y0(z+!F!`E$$>2!|c50kUW$(QNb@$~C#(m6eO5B@jeQS(ax diff --git a/build/tests/TestMaker/banner/eula/Character/eula.ncg b/build/tests/TestMaker/banner/eula/Character/eula.ncg deleted file mode 100644 index b7de68cd802bc2173cb3893f0b05977217ddae8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4324 zcmeHLOHRW;3=I-X7LCN-U9j#Qsw@Bj6{@=Irb69CR6^w*9Fhy<0+jchaqxunGb}(z z*%S6KKB-{7rj*JG;9A^<=WFHudJ^aaFIk W+x2q&TCXP0Pc>&%J-%zw zvE66-SO32rq(YoQTfexjq3l4}i!$DFqw3P?sO(+!d&}=tQ&S#fHgC02br25oUz9=Q v%IaaZqq+~|(rn%LwlB(FRDo37tHzWEse!19%0|dTL`Np+?CTf81NAxp5;SL7 diff --git a/build/tests/TestMaker/banner/eula/Preview/Preview0.npv b/build/tests/TestMaker/banner/eula/Preview/Preview0.npv deleted file mode 100644 index 2c89eced..00000000 --- a/build/tests/TestMaker/banner/eula/Preview/Preview0.npv +++ /dev/null @@ -1,104 +0,0 @@ -#PROPLIST.VER 100/LINE 103 -PreviewDetail_State = 0 -PreviewDetail_Version = 4 -PreviewDetail_Comment = -PreviewDetail_Bg_State = 18 -PreviewDetail_Bg_NormalPaletteFile_State = 9 -PreviewDetail_Bg_NormalPaletteFile_FileName = -PreviewDetail_Bg_NormalPaletteFile_DataSize = 0 -PreviewDetail_Bg_Screens = 1 -PreviewDetail_Bg_0000Screen_State = 0 -PreviewDetail_Bg_0000Screen_ScreenFile_State = 11 -PreviewDetail_Bg_0000Screen_ScreenFile_FileName = -PreviewDetail_Bg_0000Screen_ScreenFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_CharacterFile_State = 10 -PreviewDetail_Bg_0000Screen_CharacterFile_FileName = -PreviewDetail_Bg_0000Screen_CharacterFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_State = 9 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_FileName = -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_BgSurface = -1 -PreviewDetail_Bg_0000Screen_PositionX = 0 -PreviewDetail_Bg_0000Screen_PositionY = 0 -PreviewDetail_Bg_0000Screen_StartPositionX = 0 -PreviewDetail_Bg_0000Screen_StartPositionY = 0 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleX = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleY = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_Rotate = 0 -PreviewDetail_Bg_0000Screen_Priority = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeX = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeY = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeX = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeY = 0 -PreviewDetail_Bg_0000Screen_Comment = -PreviewDetail_Bg_3DPriority = 0 -PreviewDetail_Cell_State = 17921 -PreviewDetail_Cell_MultiCellFile_State = 13 -PreviewDetail_Cell_MultiCellFile_FileName = -PreviewDetail_Cell_MultiCellFile_DataSize = 0 -PreviewDetail_Cell_CellFile_State = 4 -PreviewDetail_Cell_CellFile_FileName = ..\Cell\Cell0.nce -PreviewDetail_Cell_CellFile_DataSize = 5348 -PreviewDetail_Cell_CharacterFile_State = 2 -PreviewDetail_Cell_CharacterFile_FileName = ..\Character\eula.ncg -PreviewDetail_Cell_CharacterFile_DataSize = 4096 -PreviewDetail_Cell_ColorPaletteFile_State = 1 -PreviewDetail_Cell_ColorPaletteFile_FileName = ..\ColorPalette\eula.ncl -PreviewDetail_Cell_ColorPaletteFile_DataSize = 512 -PreviewDetail_Cell_Animations = 1 -PreviewDetail_Cell_0000Animation_State = 1 -PreviewDetail_Cell_0000Animation_LabelId = 0 -PreviewDetail_Cell_0000Animation_LabelName = CellAnime0 -PreviewDetail_Cell_0000Animation_PositionX = 128 -PreviewDetail_Cell_0000Animation_PositionY = 96 -PreviewDetail_Cell_0000Animation_Comment = -PreviewDetail_Rambank_State = 0 -PreviewDetail_Rambank_CharacterBaseOffset = 0 -PreviewDetail_Rambank_CharacterBaseBlock0 = 0 -PreviewDetail_Rambank_CharacterBaseBlock1 = 0 -PreviewDetail_Rambank_CharacterBaseBlock2 = 0 -PreviewDetail_Rambank_CharacterBaseBlock3 = 0 -PreviewDetail_Rambank_ScreenBaseOffset = 0 -PreviewDetail_Rambank_ScreenBaseBlock0 = 0 -PreviewDetail_Rambank_ScreenBaseBlock1 = 0 -PreviewDetail_Rambank_ScreenBaseBlock2 = 0 -PreviewDetail_Rambank_ScreenBaseBlock3 = 0 -PreviewDetail_Rambank_Vrams = 7 -PreviewDetail_Rambank_0000Vram_State = 58 -PreviewDetail_Rambank_0000Vram_CurrentSize = 4096 -PreviewDetail_Rambank_0000Vram_MaxSize = 131072 -PreviewDetail_Rambank_0001Vram_State = 56 -PreviewDetail_Rambank_0001Vram_CurrentSize = 0 -PreviewDetail_Rambank_0001Vram_MaxSize = 131072 -PreviewDetail_Rambank_0002Vram_State = 24 -PreviewDetail_Rambank_0002Vram_CurrentSize = 0 -PreviewDetail_Rambank_0002Vram_MaxSize = 131072 -PreviewDetail_Rambank_0003Vram_State = 24 -PreviewDetail_Rambank_0003Vram_CurrentSize = 0 -PreviewDetail_Rambank_0003Vram_MaxSize = 131072 -PreviewDetail_Rambank_0004Vram_State = 120 -PreviewDetail_Rambank_0004Vram_CurrentSize = 0 -PreviewDetail_Rambank_0004Vram_MaxSize = 65536 -PreviewDetail_Rambank_0005Vram_State = 248 -PreviewDetail_Rambank_0005Vram_CurrentSize = 0 -PreviewDetail_Rambank_0005Vram_MaxSize = 16384 -PreviewDetail_Rambank_0006Vram_State = 248 -PreviewDetail_Rambank_0006Vram_CurrentSize = 0 -PreviewDetail_Rambank_0006Vram_MaxSize = 16384 -PreviewDetail_Effect_State = 524288 -PreviewDetail_Effect_AlphaCoefficient0 = 0 -PreviewDetail_Effect_AlphaCoefficient1 = 0 -PreviewDetail_Effect_BrightCoefficient = 0 -PreviewDetail_Effect_BgMosaicSizeX = 0 -PreviewDetail_Effect_BgMosaicSizeY = 0 -PreviewDetail_Effect_ObjMosaicSizeX = 0 -PreviewDetail_Effect_ObjMosaicSizeY = 0 -PreviewDetail_Window_State = 32768 -PreviewDetail_Window_WindowRect0Left = 0 -PreviewDetail_Window_WindowRect0Right = 0 -PreviewDetail_Window_WindowRect0Top = 0 -PreviewDetail_Window_WindowRect0Bottom = 0 -PreviewDetail_Window_WindowRect1Left = 0 -PreviewDetail_Window_WindowRect1Right = 0 -PreviewDetail_Window_WindowRect1Top = 0 -PreviewDetail_Window_WindowRect1Bottom = 0 diff --git a/build/tests/TestMaker/banner/eula/Scene/Scene0.nsn b/build/tests/TestMaker/banner/eula/Scene/Scene0.nsn deleted file mode 100644 index d447d80e..00000000 --- a/build/tests/TestMaker/banner/eula/Scene/Scene0.nsn +++ /dev/null @@ -1,54 +0,0 @@ -INTELLIGENT SYSTEMS Co.,Ltd. NITRO-CHARACTER layout format version 1.00 -#PROPLIST.VER 100/LINE 49 -FILE.VERSION = 1 -PALETTE.DOCUMENT0 = ..\ColorPalette\eula.ncl -PALETTE.COUNT = 1 -PREVIEW.DOCUMENT0 = ..\Preview\Preview0.npv -PREVIEW.COUNT = 1 -CHARACTER.DOCUMENT0 = ..\Character\eula.ncg -CHARACTER.DOCUMENT0.FRAME0.WindowPlacement = 2:3:-1:-1:-4:-30:107:187:1251:751 -CHARACTER.DOCUMENT0.FRAME0.LayerID = 0 -CHARACTER.DOCUMENT0.FRAME0.View0.Grid = 1 -CHARACTER.DOCUMENT0.FRAME0.View0.Mag = 10 -CHARACTER.DOCUMENT0.FRAME0.View0.Scroll = 1329,0 -CHARACTER.DOCUMENT0.FRAMECOUNT = 1 -CHARACTER.COUNT = 1 -SCREEN.COUNT = 0 -OBJECT.DOCUMENT0 = ..\Cell\Cell0.nce -OBJECT.DOCUMENT0.FRAME0.WindowPlacement = 0:1:-1:-1:-1:-1:156:74:857:824 -OBJECT.DOCUMENT0.FRAME0.LayerID = 2 -OBJECT.DOCUMENT0.FRAME0.PaneWidth0 = 150 -OBJECT.DOCUMENT0.FRAME0.PaneWidth1 = 527 -OBJECT.DOCUMENT0.FRAME0.PaneWidth2 = 0 -OBJECT.DOCUMENT0.FRAME0.TreeWidth = 93 -OBJECT.DOCUMENT0.FRAME0.List.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.List.Cursor = 0,7 -OBJECT.DOCUMENT0.FRAME0.List.HeaderWidth = 64,256 -OBJECT.DOCUMENT0.FRAME0.View.Grid = 1 -OBJECT.DOCUMENT0.FRAME0.View.Mag = 4 -OBJECT.DOCUMENT0.FRAME0.View.Scroll = 832,320 -OBJECT.DOCUMENT0.FRAME0.Tree.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.HeaderWidth = 30,30,32,32,25,30,20,33,20,60,38,30,21,33,35,20 -OBJECT.DOCUMENT0.FRAMETYPE0 = 1 -OBJECT.DOCUMENT0.FRAME1.WindowPlacement = 0:1:-1:-1:-4:-30:45:26:1239:777 -OBJECT.DOCUMENT0.FRAME1.LayerID = 1 -OBJECT.DOCUMENT0.FRAME1.ColumnSize0 = 231 -OBJECT.DOCUMENT0.FRAME1.ColumnSize1 = 284 -OBJECT.DOCUMENT0.FRAME1.ColumnSize2 = 636 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.HeaderWidth = 59,34,256 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeView.HeaderWidth = 43,37,40,40,40,40,40,256 -OBJECT.DOCUMENT0.FRAME1.Anime.Grid = 0 -OBJECT.DOCUMENT0.FRAME1.Anime.Mag = 4 -OBJECT.DOCUMENT0.FRAME1.Anime.Scroll = 832,0 -OBJECT.DOCUMENT0.FRAMETYPE1 = 2 -OBJECT.DOCUMENT0.FRAMECOUNT = 2 -OBJECT.COUNT = 1 -MULTICELL.COUNT = 0 -NITRO-CHARACTER Scene format version 1.00 -#PROPLIST.VER 100/LINE 1 -Scene.Comment = diff --git a/build/tests/TestMaker/banner/eula/workset.ini b/build/tests/TestMaker/banner/eula/workset.ini deleted file mode 100644 index 75afb17d..00000000 --- a/build/tests/TestMaker/banner/eula/workset.ini +++ /dev/null @@ -1,4 +0,0 @@ -[LastScene] -File=Scene\Scene0.nsn -[Recent] -ExportFolder= diff --git a/build/tests/TestMaker/banner/font/Cell/Cell0.nce b/build/tests/TestMaker/banner/font/Cell/Cell0.nce deleted file mode 100644 index ca5a3fb2634e388dd7b360a46c1e21c792b2b997..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5348 zcmeHLT}~815N;5EVoYQbAAB%22QV9MfXlcladshOO?==%Le`%I(GU*65q$JWKKS5+ zNALjj1zf+cx(a%Cr(uSKpve||Q{C0|(^WM;n;w*#>*GI53%?&Yx9sk_vR73j_SG6svZ7+IZs8B2BYm5h8fBY&EaZ)N0fGx9HxmxI^+3fywRQ1-Z_+~oIkZaJV7 zqW4hwBk=NNcY7HM%n^lhpzNteFp3+g=~{$i=~H#_mj{>nlspoGqFfx)r}=qftbWhY|2`Y z^j?yg_y4R1s39JEbQb>;y`Sy}?-0m*iWb#3Rm4mC?*sf1x!4o&(%2lstU3K}{bz#u zKG3g&eI-~fAxkN~&mbxkaXEMOSRkb6R^Y(?!gC7I(F>O8-A_SR8#A*PgEUs%7)qv} zO$!}C54@QPdD^x+p7+XBO_nR$Zuxk zw=(kE8TnQF&*hb?L#}SlJ+7^1w;Wb>26Wb&9V{BUv{o#KAuDN6+XFd=40~f;$^j7J;6SBF8Ax_ p_jA#EGu*a1RU3m>E3oNwcFGUChr4@6qr;tdpAU{Y2Yc@!{|nQxu~z^9 diff --git a/build/tests/TestMaker/banner/font/Character/font.ncg b/build/tests/TestMaker/banner/font/Character/font.ncg deleted file mode 100644 index 428f74e1da17d8fde4f33bca772e215e52961c9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4324 zcmeHL!A`?43@s8z4vWOyJ8<4VOg#VsCN%B13qs>GZ4%mt@R9sLe}M9y6Srx*mURpe zQaxVcB#vM0I2GzFO|SEh~Q3HjM#wd7)uSY$)URWi0r-hn47u^|84QK;1{VP z*!1h*qlh0m!iH!3RbnT93_c;o5(6g3h+q?;1m-ZKe>jh!HlZOuRH-4X_Ug>XH~D!M zM+x^4NAn|1PP7)(OW#JYf#~Md9o8Zr9t_$EWpbw_7b=wwv8#^StI$r4O^kMR>eVGHOt& diff --git a/build/tests/TestMaker/banner/font/ColorPalette/font.ncl b/build/tests/TestMaker/banner/font/ColorPalette/font.ncl deleted file mode 100644 index 99910793f61513f912c7ab4c8e03e832414baf7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmeZscJ}%IkAYE#iGe|Yfr%l&(I-Rz%m(p6V1bOGn?&;e`gOY7-R8&VN`@)f>-%zw zvE66-SO32rq(YoQTfexjq3l4}i!$DFqw3P?sO(+!d&}=tQ&S#fHgC02br25oUz9=Q v%IaaZqq+~|(rn%LwlB(FRDo37tHzWEse!19%0|dTL`Np+?CTf81NAxp5;SL7 diff --git a/build/tests/TestMaker/banner/font/Preview/Preview0.npv b/build/tests/TestMaker/banner/font/Preview/Preview0.npv deleted file mode 100644 index 2ee73f82..00000000 --- a/build/tests/TestMaker/banner/font/Preview/Preview0.npv +++ /dev/null @@ -1,104 +0,0 @@ -#PROPLIST.VER 100/LINE 103 -PreviewDetail_State = 0 -PreviewDetail_Version = 4 -PreviewDetail_Comment = -PreviewDetail_Bg_State = 18 -PreviewDetail_Bg_NormalPaletteFile_State = 9 -PreviewDetail_Bg_NormalPaletteFile_FileName = -PreviewDetail_Bg_NormalPaletteFile_DataSize = 0 -PreviewDetail_Bg_Screens = 1 -PreviewDetail_Bg_0000Screen_State = 0 -PreviewDetail_Bg_0000Screen_ScreenFile_State = 11 -PreviewDetail_Bg_0000Screen_ScreenFile_FileName = -PreviewDetail_Bg_0000Screen_ScreenFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_CharacterFile_State = 10 -PreviewDetail_Bg_0000Screen_CharacterFile_FileName = -PreviewDetail_Bg_0000Screen_CharacterFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_State = 9 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_FileName = -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_BgSurface = -1 -PreviewDetail_Bg_0000Screen_PositionX = 0 -PreviewDetail_Bg_0000Screen_PositionY = 0 -PreviewDetail_Bg_0000Screen_StartPositionX = 0 -PreviewDetail_Bg_0000Screen_StartPositionY = 0 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleX = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleY = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_Rotate = 0 -PreviewDetail_Bg_0000Screen_Priority = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeX = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeY = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeX = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeY = 0 -PreviewDetail_Bg_0000Screen_Comment = -PreviewDetail_Bg_3DPriority = 0 -PreviewDetail_Cell_State = 17921 -PreviewDetail_Cell_MultiCellFile_State = 13 -PreviewDetail_Cell_MultiCellFile_FileName = -PreviewDetail_Cell_MultiCellFile_DataSize = 0 -PreviewDetail_Cell_CellFile_State = 4 -PreviewDetail_Cell_CellFile_FileName = ..\Cell\Cell0.nce -PreviewDetail_Cell_CellFile_DataSize = 5360 -PreviewDetail_Cell_CharacterFile_State = 2 -PreviewDetail_Cell_CharacterFile_FileName = ..\Character\font.ncg -PreviewDetail_Cell_CharacterFile_DataSize = 4096 -PreviewDetail_Cell_ColorPaletteFile_State = 1 -PreviewDetail_Cell_ColorPaletteFile_FileName = ..\ColorPalette\font.ncl -PreviewDetail_Cell_ColorPaletteFile_DataSize = 512 -PreviewDetail_Cell_Animations = 1 -PreviewDetail_Cell_0000Animation_State = 1 -PreviewDetail_Cell_0000Animation_LabelId = 0 -PreviewDetail_Cell_0000Animation_LabelName = CellAnime0 -PreviewDetail_Cell_0000Animation_PositionX = 128 -PreviewDetail_Cell_0000Animation_PositionY = 96 -PreviewDetail_Cell_0000Animation_Comment = -PreviewDetail_Rambank_State = 0 -PreviewDetail_Rambank_CharacterBaseOffset = 0 -PreviewDetail_Rambank_CharacterBaseBlock0 = 0 -PreviewDetail_Rambank_CharacterBaseBlock1 = 0 -PreviewDetail_Rambank_CharacterBaseBlock2 = 0 -PreviewDetail_Rambank_CharacterBaseBlock3 = 0 -PreviewDetail_Rambank_ScreenBaseOffset = 0 -PreviewDetail_Rambank_ScreenBaseBlock0 = 0 -PreviewDetail_Rambank_ScreenBaseBlock1 = 0 -PreviewDetail_Rambank_ScreenBaseBlock2 = 0 -PreviewDetail_Rambank_ScreenBaseBlock3 = 0 -PreviewDetail_Rambank_Vrams = 7 -PreviewDetail_Rambank_0000Vram_State = 58 -PreviewDetail_Rambank_0000Vram_CurrentSize = 4096 -PreviewDetail_Rambank_0000Vram_MaxSize = 131072 -PreviewDetail_Rambank_0001Vram_State = 56 -PreviewDetail_Rambank_0001Vram_CurrentSize = 0 -PreviewDetail_Rambank_0001Vram_MaxSize = 131072 -PreviewDetail_Rambank_0002Vram_State = 24 -PreviewDetail_Rambank_0002Vram_CurrentSize = 0 -PreviewDetail_Rambank_0002Vram_MaxSize = 131072 -PreviewDetail_Rambank_0003Vram_State = 24 -PreviewDetail_Rambank_0003Vram_CurrentSize = 0 -PreviewDetail_Rambank_0003Vram_MaxSize = 131072 -PreviewDetail_Rambank_0004Vram_State = 120 -PreviewDetail_Rambank_0004Vram_CurrentSize = 0 -PreviewDetail_Rambank_0004Vram_MaxSize = 65536 -PreviewDetail_Rambank_0005Vram_State = 248 -PreviewDetail_Rambank_0005Vram_CurrentSize = 0 -PreviewDetail_Rambank_0005Vram_MaxSize = 16384 -PreviewDetail_Rambank_0006Vram_State = 248 -PreviewDetail_Rambank_0006Vram_CurrentSize = 0 -PreviewDetail_Rambank_0006Vram_MaxSize = 16384 -PreviewDetail_Effect_State = 524288 -PreviewDetail_Effect_AlphaCoefficient0 = 0 -PreviewDetail_Effect_AlphaCoefficient1 = 0 -PreviewDetail_Effect_BrightCoefficient = 0 -PreviewDetail_Effect_BgMosaicSizeX = 0 -PreviewDetail_Effect_BgMosaicSizeY = 0 -PreviewDetail_Effect_ObjMosaicSizeX = 0 -PreviewDetail_Effect_ObjMosaicSizeY = 0 -PreviewDetail_Window_State = 32768 -PreviewDetail_Window_WindowRect0Left = 0 -PreviewDetail_Window_WindowRect0Right = 0 -PreviewDetail_Window_WindowRect0Top = 0 -PreviewDetail_Window_WindowRect0Bottom = 0 -PreviewDetail_Window_WindowRect1Left = 0 -PreviewDetail_Window_WindowRect1Right = 0 -PreviewDetail_Window_WindowRect1Top = 0 -PreviewDetail_Window_WindowRect1Bottom = 0 diff --git a/build/tests/TestMaker/banner/font/Scene/Scene0.nsn b/build/tests/TestMaker/banner/font/Scene/Scene0.nsn deleted file mode 100644 index 59c312c0..00000000 --- a/build/tests/TestMaker/banner/font/Scene/Scene0.nsn +++ /dev/null @@ -1,54 +0,0 @@ -INTELLIGENT SYSTEMS Co.,Ltd. NITRO-CHARACTER layout format version 1.00 -#PROPLIST.VER 100/LINE 49 -FILE.VERSION = 1 -PALETTE.DOCUMENT0 = ..\ColorPalette\font.ncl -PALETTE.COUNT = 1 -PREVIEW.DOCUMENT0 = ..\Preview\Preview0.npv -PREVIEW.COUNT = 1 -CHARACTER.DOCUMENT0 = ..\Character\font.ncg -CHARACTER.DOCUMENT0.FRAME0.WindowPlacement = 0:1:-1:-1:-4:-30:107:187:1251:751 -CHARACTER.DOCUMENT0.FRAME0.LayerID = 0 -CHARACTER.DOCUMENT0.FRAME0.View0.Grid = 1 -CHARACTER.DOCUMENT0.FRAME0.View0.Mag = 2 -CHARACTER.DOCUMENT0.FRAME0.View0.Scroll = 0,0 -CHARACTER.DOCUMENT0.FRAMECOUNT = 1 -CHARACTER.COUNT = 1 -SCREEN.COUNT = 0 -OBJECT.DOCUMENT0 = ..\Cell\Cell0.nce -OBJECT.DOCUMENT0.FRAME0.WindowPlacement = 0:1:-1:-1:-1:-1:156:74:857:824 -OBJECT.DOCUMENT0.FRAME0.LayerID = 2 -OBJECT.DOCUMENT0.FRAME0.PaneWidth0 = 150 -OBJECT.DOCUMENT0.FRAME0.PaneWidth1 = 527 -OBJECT.DOCUMENT0.FRAME0.PaneWidth2 = 0 -OBJECT.DOCUMENT0.FRAME0.TreeWidth = 93 -OBJECT.DOCUMENT0.FRAME0.List.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.List.Cursor = 0,7 -OBJECT.DOCUMENT0.FRAME0.List.HeaderWidth = 64,256 -OBJECT.DOCUMENT0.FRAME0.View.Grid = 1 -OBJECT.DOCUMENT0.FRAME0.View.Mag = 4 -OBJECT.DOCUMENT0.FRAME0.View.Scroll = 832,320 -OBJECT.DOCUMENT0.FRAME0.Tree.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.HeaderWidth = 30,30,32,32,25,30,20,33,20,60,38,30,21,33,35,20 -OBJECT.DOCUMENT0.FRAMETYPE0 = 1 -OBJECT.DOCUMENT0.FRAME1.WindowPlacement = 0:1:-1:-1:-4:-30:45:26:1239:777 -OBJECT.DOCUMENT0.FRAME1.LayerID = 1 -OBJECT.DOCUMENT0.FRAME1.ColumnSize0 = 231 -OBJECT.DOCUMENT0.FRAME1.ColumnSize1 = 284 -OBJECT.DOCUMENT0.FRAME1.ColumnSize2 = 636 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.HeaderWidth = 59,34,256 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeView.HeaderWidth = 43,37,40,40,40,40,40,256 -OBJECT.DOCUMENT0.FRAME1.Anime.Grid = 0 -OBJECT.DOCUMENT0.FRAME1.Anime.Mag = 4 -OBJECT.DOCUMENT0.FRAME1.Anime.Scroll = 832,0 -OBJECT.DOCUMENT0.FRAMETYPE1 = 2 -OBJECT.DOCUMENT0.FRAMECOUNT = 2 -OBJECT.COUNT = 1 -MULTICELL.COUNT = 0 -NITRO-CHARACTER Scene format version 1.00 -#PROPLIST.VER 100/LINE 1 -Scene.Comment = diff --git a/build/tests/TestMaker/banner/font/workset.ini b/build/tests/TestMaker/banner/font/workset.ini deleted file mode 100644 index 75afb17d..00000000 --- a/build/tests/TestMaker/banner/font/workset.ini +++ /dev/null @@ -1,4 +0,0 @@ -[LastScene] -File=Scene\Scene0.nsn -[Recent] -ExportFolder= diff --git a/build/tests/TestMaker/banner/parental/Cell/Cell0.nce b/build/tests/TestMaker/banner/parental/Cell/Cell0.nce deleted file mode 100644 index 32c9539e9911a540315a4f05d7f77a4ee6256bcd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5104 zcmeHL&2Cab6do%6#F)rL7cNYu4`4{&Kw(5}dZC11;-ZNXLevClLwEom&xMOFT=*E= z7x4BwXYRmUI79idx+o`|zwi9cIh@;MTK2S_{VA8GPn4>t$I3R6fK|l}Ti@&fJi=nNG6|5)i>gByhFXF+NnC4N^C3C|u{hiO0?$h?S271wI!< zX5xe!(#4-hz&U&;SQG)zKvAbLR{?4|}o>l6Z*IiDoU@q+c&2p*^w zE=GzIPOh_0_i;lEgW@DhoL^ajea84u<=pdqeg5a`+&5wDj2x!$=lqhsrv;IjxHAVm z{D}m-;9nG41DxenmL(sHArNFx1gJ8LCO>2=D^UZk#t=>5_XRghDdrSHsYywE1?}s< zA~_2zB-Qm+h;x>aY09`OOvt558BA+^UkZxC;hO$N{qZ}ak^kP|d*A=a0rEh#;g1S^ zEVd<~{xCc1Z?XQH`7#iv04Z7;1wwrh0aJ=OW#0?^?G=}l3zmYzzW;+{NL$V_s)4RT z(wF)lY?Jr*&h@{E{+6y3V*C1s*;v}U>KiIOeOQ<4A84#me*tNr@5|dx`%rpY zpyvU8BiLZAwT_#=19`GRZxc#A23Q+5DQ>El$G2T=QcqswwtijyP^(7cL$~AanH;xHNUvHwvtN4SUVkzepI!9E VgVCfn{MbJqO~&WL>Zt!2GFM?jo!0;W diff --git a/build/tests/TestMaker/banner/parental/Character/parental_control.ncg b/build/tests/TestMaker/banner/parental/Character/parental_control.ncg deleted file mode 100644 index ae83167b8a58fcdaae4b0240935895dc3e74104a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4336 zcmeHLL2AP=5LBVZ9wO*nc|qtGf)8zJ8%oGAP)x|p#3A@0eQNcAs*Y4ztv6L( Xe5}e%wJVFsW>wG*v$xseZokzZ>tRXO diff --git a/build/tests/TestMaker/banner/parental/ColorPalette/parental_control.ncl b/build/tests/TestMaker/banner/parental/ColorPalette/parental_control.ncl deleted file mode 100644 index 99910793f61513f912c7ab4c8e03e832414baf7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 zcmeZscJ}%IkAYE#iGe|Yfr%l&(I-Rz%m(p6V1bOGn?&;e`gOY7-R8&VN`@)f>-%zw zvE66-SO32rq(YoQTfexjq3l4}i!$DFqw3P?sO(+!d&}=tQ&S#fHgC02br25oUz9=Q v%IaaZqq+~|(rn%LwlB(FRDo37tHzWEse!19%0|dTL`Np+?CTf81NAxp5;SL7 diff --git a/build/tests/TestMaker/banner/parental/Preview/Preview0.npv b/build/tests/TestMaker/banner/parental/Preview/Preview0.npv deleted file mode 100644 index b57efd88..00000000 --- a/build/tests/TestMaker/banner/parental/Preview/Preview0.npv +++ /dev/null @@ -1,104 +0,0 @@ -#PROPLIST.VER 100/LINE 103 -PreviewDetail_State = 0 -PreviewDetail_Version = 4 -PreviewDetail_Comment = -PreviewDetail_Bg_State = 18 -PreviewDetail_Bg_NormalPaletteFile_State = 9 -PreviewDetail_Bg_NormalPaletteFile_FileName = -PreviewDetail_Bg_NormalPaletteFile_DataSize = 0 -PreviewDetail_Bg_Screens = 1 -PreviewDetail_Bg_0000Screen_State = 0 -PreviewDetail_Bg_0000Screen_ScreenFile_State = 11 -PreviewDetail_Bg_0000Screen_ScreenFile_FileName = -PreviewDetail_Bg_0000Screen_ScreenFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_CharacterFile_State = 10 -PreviewDetail_Bg_0000Screen_CharacterFile_FileName = -PreviewDetail_Bg_0000Screen_CharacterFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_State = 9 -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_FileName = -PreviewDetail_Bg_0000Screen_ExtendPaletteFile_DataSize = 0 -PreviewDetail_Bg_0000Screen_BgSurface = -1 -PreviewDetail_Bg_0000Screen_PositionX = 0 -PreviewDetail_Bg_0000Screen_PositionY = 0 -PreviewDetail_Bg_0000Screen_StartPositionX = 0 -PreviewDetail_Bg_0000Screen_StartPositionY = 0 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleX = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_ScaleY = 1.00 -PreviewDetail_Bg_0000Screen_AffineParam_Rotate = 0 -PreviewDetail_Bg_0000Screen_Priority = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeX = 0 -PreviewDetail_Bg_0000Screen_ScreenSizeY = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeX = 0 -PreviewDetail_Bg_0000Screen_CharacterSizeY = 0 -PreviewDetail_Bg_0000Screen_Comment = -PreviewDetail_Bg_3DPriority = 0 -PreviewDetail_Cell_State = 17921 -PreviewDetail_Cell_MultiCellFile_State = 13 -PreviewDetail_Cell_MultiCellFile_FileName = -PreviewDetail_Cell_MultiCellFile_DataSize = 0 -PreviewDetail_Cell_CellFile_State = 4 -PreviewDetail_Cell_CellFile_FileName = ..\Cell\Cell0.nce -PreviewDetail_Cell_CellFile_DataSize = 5108 -PreviewDetail_Cell_CharacterFile_State = 2 -PreviewDetail_Cell_CharacterFile_FileName = ..\Character\banner_anm_idea03_ALL.ncg -PreviewDetail_Cell_CharacterFile_DataSize = 4096 -PreviewDetail_Cell_ColorPaletteFile_State = 1 -PreviewDetail_Cell_ColorPaletteFile_FileName = ..\ColorPalette\banner_anm_idea03_1 ̃Rs[.ncl -PreviewDetail_Cell_ColorPaletteFile_DataSize = 512 -PreviewDetail_Cell_Animations = 1 -PreviewDetail_Cell_0000Animation_State = 1 -PreviewDetail_Cell_0000Animation_LabelId = 0 -PreviewDetail_Cell_0000Animation_LabelName = CellAnime0 -PreviewDetail_Cell_0000Animation_PositionX = 128 -PreviewDetail_Cell_0000Animation_PositionY = 96 -PreviewDetail_Cell_0000Animation_Comment = -PreviewDetail_Rambank_State = 0 -PreviewDetail_Rambank_CharacterBaseOffset = 0 -PreviewDetail_Rambank_CharacterBaseBlock0 = 0 -PreviewDetail_Rambank_CharacterBaseBlock1 = 0 -PreviewDetail_Rambank_CharacterBaseBlock2 = 0 -PreviewDetail_Rambank_CharacterBaseBlock3 = 0 -PreviewDetail_Rambank_ScreenBaseOffset = 0 -PreviewDetail_Rambank_ScreenBaseBlock0 = 0 -PreviewDetail_Rambank_ScreenBaseBlock1 = 0 -PreviewDetail_Rambank_ScreenBaseBlock2 = 0 -PreviewDetail_Rambank_ScreenBaseBlock3 = 0 -PreviewDetail_Rambank_Vrams = 7 -PreviewDetail_Rambank_0000Vram_State = 58 -PreviewDetail_Rambank_0000Vram_CurrentSize = 4096 -PreviewDetail_Rambank_0000Vram_MaxSize = 131072 -PreviewDetail_Rambank_0001Vram_State = 56 -PreviewDetail_Rambank_0001Vram_CurrentSize = 0 -PreviewDetail_Rambank_0001Vram_MaxSize = 131072 -PreviewDetail_Rambank_0002Vram_State = 24 -PreviewDetail_Rambank_0002Vram_CurrentSize = 0 -PreviewDetail_Rambank_0002Vram_MaxSize = 131072 -PreviewDetail_Rambank_0003Vram_State = 24 -PreviewDetail_Rambank_0003Vram_CurrentSize = 0 -PreviewDetail_Rambank_0003Vram_MaxSize = 131072 -PreviewDetail_Rambank_0004Vram_State = 120 -PreviewDetail_Rambank_0004Vram_CurrentSize = 0 -PreviewDetail_Rambank_0004Vram_MaxSize = 65536 -PreviewDetail_Rambank_0005Vram_State = 248 -PreviewDetail_Rambank_0005Vram_CurrentSize = 0 -PreviewDetail_Rambank_0005Vram_MaxSize = 16384 -PreviewDetail_Rambank_0006Vram_State = 248 -PreviewDetail_Rambank_0006Vram_CurrentSize = 0 -PreviewDetail_Rambank_0006Vram_MaxSize = 16384 -PreviewDetail_Effect_State = 524288 -PreviewDetail_Effect_AlphaCoefficient0 = 0 -PreviewDetail_Effect_AlphaCoefficient1 = 0 -PreviewDetail_Effect_BrightCoefficient = 0 -PreviewDetail_Effect_BgMosaicSizeX = 0 -PreviewDetail_Effect_BgMosaicSizeY = 0 -PreviewDetail_Effect_ObjMosaicSizeX = 0 -PreviewDetail_Effect_ObjMosaicSizeY = 0 -PreviewDetail_Window_State = 32768 -PreviewDetail_Window_WindowRect0Left = 0 -PreviewDetail_Window_WindowRect0Right = 0 -PreviewDetail_Window_WindowRect0Top = 0 -PreviewDetail_Window_WindowRect0Bottom = 0 -PreviewDetail_Window_WindowRect1Left = 0 -PreviewDetail_Window_WindowRect1Right = 0 -PreviewDetail_Window_WindowRect1Top = 0 -PreviewDetail_Window_WindowRect1Bottom = 0 diff --git a/build/tests/TestMaker/banner/parental/Scene/Scene0.nsn b/build/tests/TestMaker/banner/parental/Scene/Scene0.nsn deleted file mode 100644 index 2872adb9..00000000 --- a/build/tests/TestMaker/banner/parental/Scene/Scene0.nsn +++ /dev/null @@ -1,54 +0,0 @@ -INTELLIGENT SYSTEMS Co.,Ltd. NITRO-CHARACTER layout format version 1.00 -#PROPLIST.VER 100/LINE 49 -FILE.VERSION = 1 -PALETTE.DOCUMENT0 = ..\ColorPalette\parental_control.ncl -PALETTE.COUNT = 1 -PREVIEW.DOCUMENT0 = ..\Preview\Preview0.npv -PREVIEW.COUNT = 1 -CHARACTER.DOCUMENT0 = ..\Character\parental_control.ncg -CHARACTER.DOCUMENT0.FRAME0.WindowPlacement = 0:1:-1:-1:-4:-30:404:56:1548:620 -CHARACTER.DOCUMENT0.FRAME0.LayerID = 1 -CHARACTER.DOCUMENT0.FRAME0.View0.Grid = 1 -CHARACTER.DOCUMENT0.FRAME0.View0.Mag = 4 -CHARACTER.DOCUMENT0.FRAME0.View0.Scroll = 0,0 -CHARACTER.DOCUMENT0.FRAMECOUNT = 1 -CHARACTER.COUNT = 1 -SCREEN.COUNT = 0 -OBJECT.DOCUMENT0 = ..\Cell\Cell0.nce -OBJECT.DOCUMENT0.FRAME0.WindowPlacement = 0:1:-1:-1:-1:-1:275:56:852:806 -OBJECT.DOCUMENT0.FRAME0.LayerID = 2 -OBJECT.DOCUMENT0.FRAME0.PaneWidth0 = 150 -OBJECT.DOCUMENT0.FRAME0.PaneWidth1 = 403 -OBJECT.DOCUMENT0.FRAME0.PaneWidth2 = 0 -OBJECT.DOCUMENT0.FRAME0.TreeWidth = 93 -OBJECT.DOCUMENT0.FRAME0.List.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.List.Cursor = 0,7 -OBJECT.DOCUMENT0.FRAME0.List.HeaderWidth = 64,256 -OBJECT.DOCUMENT0.FRAME0.View.Grid = 1 -OBJECT.DOCUMENT0.FRAME0.View.Mag = 4 -OBJECT.DOCUMENT0.FRAME0.View.Scroll = 832,320 -OBJECT.DOCUMENT0.FRAME0.Tree.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME0.Tree.HeaderWidth = 30,30,32,32,25,30,20,33,20,60,38,30,21,33,35,20 -OBJECT.DOCUMENT0.FRAMETYPE0 = 1 -OBJECT.DOCUMENT0.FRAME1.WindowPlacement = 0:1:-1:-1:-4:-30:12:111:1206:862 -OBJECT.DOCUMENT0.FRAME1.LayerID = 0 -OBJECT.DOCUMENT0.FRAME1.ColumnSize0 = 231 -OBJECT.DOCUMENT0.FRAME1.ColumnSize1 = 284 -OBJECT.DOCUMENT0.FRAME1.ColumnSize2 = 636 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.Cursor = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeList.HeaderWidth = 59,34,256 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Scroll = 0,0 -OBJECT.DOCUMENT0.FRAME1.AnimeView.Cursor = 1,6 -OBJECT.DOCUMENT0.FRAME1.AnimeView.HeaderWidth = 43,37,40,40,40,40,40,256 -OBJECT.DOCUMENT0.FRAME1.Anime.Grid = 0 -OBJECT.DOCUMENT0.FRAME1.Anime.Mag = 4 -OBJECT.DOCUMENT0.FRAME1.Anime.Scroll = 832,0 -OBJECT.DOCUMENT0.FRAMETYPE1 = 2 -OBJECT.DOCUMENT0.FRAMECOUNT = 2 -OBJECT.COUNT = 1 -MULTICELL.COUNT = 0 -NITRO-CHARACTER Scene format version 1.00 -#PROPLIST.VER 100/LINE 1 -Scene.Comment = diff --git a/build/tests/TestMaker/banner/parental/workset.ini b/build/tests/TestMaker/banner/parental/workset.ini deleted file mode 100644 index 75afb17d..00000000 --- a/build/tests/TestMaker/banner/parental/workset.ini +++ /dev/null @@ -1,4 +0,0 @@ -[LastScene] -File=Scene\Scene0.nsn -[Recent] -ExportFolder= diff --git a/build/tests/TestMaker/banner/shop/Cell/Cell0.nce b/build/tests/TestMaker/banner/shop/Cell/Cell0.nce deleted file mode 100644 index becd71774319333118b74774e36603b3341ca2c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6260 zcmeHL&u6kh-Cp;A2>J#yfNBLcV=+6( zm`asO*>=>lZHDq6BVgHa7QGWs2577W8!h`bJTKfCx(?t?iYNp_+7{#n|H2CV<^JD} zvDAVxKPb8wwojcsW3m6O{g20@NXE0VqEh(kB_aj^rG={4ihtul)~T z|6{aKs{Ln-nX%YSLcCKVe@OdJhetG!vZI>`{Aj#q6Q%bP@)j;`r;F{V|6P{z4e6A28 zUyB?qexH^2A{+oA2;;eI2Ei0jKjDSKxaVwvhggPZ$^L}w(Y=sGkRI^;7qi(n2w&ls z=*%;r63-kuJmWuysChwnb~#=uEb(Fp;y{W^r6PqiLZMVBgo>e%Q*@l7hmjJMQYpus z%o2A(i`-eva%agwuo(o4DQS>n#o}S%gr=ng4RZo0l^~s5k)J>~gNb4op~GpVB32kv zsT&O;%I@>W#t#udYF7I3$(;@))32Z0E8h-R4Zi!h*EYmAVMCvZ#>#8QG(Iy@DV;VE^4ph-W24%ggT&Gj%+qS9zoMXkIdYT;#3Tds)ON)5r55iF*pL6y1g zY5k0*r34Lg1}K#vYgJdAK?H+|Vi>8zd8;MY7*nbHeJPv0mo3&`RqClv>y?!1-eVpk z1KDQHSM6?ue632f z81Gwd!IyvU>ihT#+*1TianpI|^EV}}{`Ieil}@E;o#|fuw_ktxQ`!1%f6vc@^xd6r tDV^5WA6P#*$IioN`QryaI7dhM;{)gD$-$!^^Ug-{z)Yvtj~*Tx#vcbIvkCwJ diff --git a/build/tests/TestMaker/banner/shop/Character/banner_anm_idea03_ALL.ncg b/build/tests/TestMaker/banner/shop/Character/banner_anm_idea03_ALL.ncg deleted file mode 100644 index 383dda18311a3b63a096cb762263b7b604b81517..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4336 zcmeHLO>f&q5LJO5d&ubf6Nng{jWF^bptL|+BsHqQj4lBJwv~(mt^)><_N*JDQ+bPg z<4xL|&WsK`M?UZ@?SJSmX#3Wt1lw4mJ|sv1=Mm$b-I?Kx1-==AN8RrC|NNc#=C22t z%!ACgneGqP^E~v2nGAMUVEB{SL7;9RL5!TO!|IGi$piWL(pQ_1tg8EXe zcc}WF}$RBv#wS%1jtE_G1ik2T&>zd+nU1BFc&_>ol zV4wyexeAwP1~K%lT(564J6y{eEoG?ux5^*k>kv&M0rJOTceeZ;pFFOu}(YBtSrQYSow~nTH+qIUuf&}~kvm13J0*u-QW4}8lk!|l&V4c2UFXn}CXn!TD(17Q2+9y2 z5>)4bY6*MH=CfHjD3|@f_k#p`Bb51kD*Q=R_~nZ5E1vMHzPO|!$Saq%ja*(ta=E)M zpe0Qp;p<9n)(sigAQ2>PY+}_C_E>M$>snl^MR63x3HC-Po6Sl_%Z7| z{J;Ky-bbC9cv-;Xz>T8#xc^60tXJ*S{T?iw%Xwq=%VOV3Nr=U-+domoW zv95)p`54d|ap?42K8A3Dizbbr35GRBdJ3i#1n0Ab8tYmpnlAvY5r_UX5DSPPxMEP|#!OLHqv$MgQSI*fVuYUh+;5=?0oc($VzwS>*$KNHT F{tJ!qCVc<^ diff --git a/build/tests/TestMaker/banner/shop/ColorPalette/banner_anm_idea03.ncl b/build/tests/TestMaker/banner/shop/ColorPalette/banner_anm_idea03.ncl deleted file mode 100644 index da86752218073033e1ee62e7bd387771c9c8c825..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 556 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 diff --git a/build/tests/TestMaker/config/romparam_forCLStest.yaml b/build/tests/TestMaker/config/romparam_forCLStest.yaml deleted file mode 100644 index 72206362d078810a9f5e7844ba935fb3335db04f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8136 zcmd^@&ubG=5XVOlg#HB{1HBZ%FlkzU^j3{gv`r-0TC_-sNwhI-QriTypwOee2t9fe z{3kpKg5uSKe}G5v;vXRDclKrbvdOO5-E5N=%OlxjcV^zad7qg#$)DfTbl%W0Mbng^ zHM&YmRK%xG{Ek2KO#41Q7bs85xPIa9{EdI{dp=Wsz4n#g@LT@DqN%iHZHXQW37TnZ z3w8duzW?$uYfFdxf;V`dAM)9QpRZPNy~%moW&*ZkoVJpC+Je?>@a_RWuXBYn&}#B2 zK1VW=^prMf7n+Csq4?;Da7Y|kJoJi-WiFGj6FmA7>Y%dnD!?G6zu#v^p`7Zaa zQ;D{yihXZV1y{MZfY%MW2i?Vvrrf=Qr#sl08YCOGoRVbh7~3P&CA~=77#2OlyRxdJ zi*y%WSac0cDzC)$61-@`YMC}VmX)*xpI0EOC6{5X0v}38a!N7>Uvre{lFUG+g;ySS zH{pk~vMeMeOS-KVVYLhoc8+}Yo8Q9RE!eAKHWfKXaurtBJ>sS{bTlNw7AXxC5xv4H zp48w?9doogs}%V%;=Y9;(O1$};6VdJ_C;2wR;VpyVMjdG&l2>YODBnM4d`l(-aVFi z(|GR3cnZ(Q&$xKuFddfhR0zgXHsv~6<}%)&H}Mkgj@lr?7wI;Jj+-ChQYoau2;n7= zTcbVPsdO|4(JqvSCtkF|Qa@`1_2NZT>SxDJy;l_;ZEg4RK$GlW-QBU%8pBn0)7W>; z47vJM|FjW#AYMexgLH^IkRB)g4#$ha;qxGP{r8$*Gwq)R?#O8k?<@#<0)+2z;;;Ha z$e%NUeDNX*`L{y$_Cfoe6}zi0be;5meZ3cT!&C2NHQv5w&Q&i?8ujx=P%mCYrQY4Q z_V#^}`SOb=+%MX3Qy;w6_e*Mm{VV-^DCUFynw`Xc=YkRZix*M(clWNN=D(l6(bjyg z^I=d1$XV%*n${Su*O|l&xM)NMh!;^az}>h0I|JhHdyXRm`fd94JW=^~$7~S)K~I25 z>Gdxe!Mu18g?afO-`%yw!~A6Zj~|8n{>Ys)@-G`fzIYLpe0T3U4)VRo8@}r~-kLAu KyCe5Mk^dL{+uBe7 diff --git a/build/tests/TestMaker/config/romparam_forEULAtest.yaml b/build/tests/TestMaker/config/romparam_forEULAtest.yaml deleted file mode 100644 index 1f9532f937a625523b0be8e863724ba248544e0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5004 zcmeH~!ERDP6o!w9iAkTpg$qJAT_`zFSHul1P;DrfaH41{GGq?FMiLLTCeM0`3=A2A1tvdUUru_#z@e@ zz%Y9Jp>cS0pAG93AMiFG@?E|>{P}VN^D0*YY63JF7roTJA(%*?_lEqe$8F9dYKJfI z=kkljmF|t9A7m-<5)jRlfm-eU&r61^&lIaPusA1GOdW7N8Q~Xp^rLLid z0xB`e67mc{Y|-|Js+1m7HE4};4Wu^mH^(}qEThgca|8KrV;Fr0pLCJG2WEe?FVRca zq}$T#CNg$uA1m!qXRMoA-t_nL<&znB2AR-Y!^eCRn)DCdKPk> zl4I9s&|^yD`6||vIKK|vLp`#GEJ=KlHbcY$x~NHdjzg6AD6xo~nxyAAM2U|QSFkrt z(sLZ5#7Bv@aN?Sz=Qu=(j}ogBo{YptiOUn7jKoKYHzy=Yydj$3bm6<7!)=pqarpL2 zXOBCH?Y^gRJ8gcR2I>6$T&mD}j_c=JGe7^w`;A-A{9L@~Bp=G)dw05iZX>$;xsB-V z=Qg6dpWBG;er_YW`?-zi?&mh*+4y-T@N=7^XQsl@r3zO^Z_ONi=IFRTYW(kC=!>WB n=r*FequYq?j&38mJGzbN?&vn6yQABP?v8FFo{gi+f24l_c->^~ diff --git a/build/tests/TestMaker/config/romparam_forFATFSPermissiontest.yaml b/build/tests/TestMaker/config/romparam_forFATFSPermissiontest.yaml deleted file mode 100644 index 980299c94e8337e09f8837ff500967626e3c1583..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29196 zcmeI5O>Y}j6oxMn5>kHw3l>qj>4KW;d?#X)&z6!e#SRsUswhod8cNctNf1 zyPnhKio5Ct+=iQX>u%9aMPAErtl8iJF(_!ZUO7?*q*!Lw%nd;xLMS^gS9<3g&&Vdk7Fs>(w=<} zuReAMZWodJ&A1Tx2_lmvMo+s(SnBRm{F`J=qSsNwJSvHii>TlT8Mod2ldMT(9Z~Cu zjgd>pv;+RuXtRVkKs3q*(0`_dNSxL-ZL-uV{^7ypgB>RhE z>!{)o85?dH*{%JO*qALw#5S;Yt-ISGZ-T#yCC1m>9NvSZ{%O>)jhqKqcn!vuN-TGp zc2h{R+>y3|KKAhB>`0&AYv`-@aGqHoyp7gx;L#(T@zyJbKC1#(y@m7pz}>?-aoBal z*3e5?e|Ugc%ThUsiT%JjUTfey-bMegg{(L6Xsc3kmk&LEsB%^5@ z$!Ho!GFovQIh+eeS{0o-a=3J4P8^xGo?T1w>&SF$uNrbVQ$sSE#*mDrF(jjD49RF3 zLo%Aikc_4=B%>9_kR!P;q*c+WAx8v;thx8`Np~INAWJQu;^uu!GHo3*RQx10n-R&g z6%^f(Bbhpq(KL=^G>sz}P2)&L(>RjRG>&96jUySYIF206g(IzsP8~TaaHQg%onVVN z7FgtabyhKseitL;yBJZgVT}A^jFgA{t>M`xr=#)Sz1#A4$STI%cM+Y8*Pmz0T9ep% zJsR)zu{$i%{%(zn$DaLN5w{9ss`h$b?hqQy)X9vdaWbQ6oXlt%Co`JH$&99PGNWmn z%xJ}N@)&xX%fCa&s_4|oW2KW}z1BNW;BhJ z8BJqlM$=fC(KJ?OG>w%RtvFU5&xMt(icYOOURt@Qt=#U`@>==j-=-PQ)XI#eu`;7+ ztjuT{D>ItL%8aJ5GNWm%%xJ~2@<%!bDeQV`*qxZ+v@qi(KKFWG>w-TP2*)oD~^{ZbKzyHqEjzVmR`POFQ-RrZ8SEEPq5SD(fwiM$xMyR zXc{9kn#RbCrZF<3X^hNh8Y45B#>k9T93xjTyG$O&m6JL;weoan<-W9Xe_kouxsvT{ z7mTNIGv7arojFhAXU@|Yn)5V{<~)t1Ij=~b&dUr@7nvh!ru1|Vd%E4W#gxsmf!o@V=}@-*YAJk5A2Pcxp%(~PI`G~*S?)A^XCs_HH>Pt|Pc=|1&zyW{)g zlWsd(vb~~aJe8>#Pi1PxQ<<9aRHkM;m8ls|WopJNlBx4CS60#nY#DH^zXLR86P5hg*UF;|wUC5iKG{y)y8;^L;k>UwCPN_WO zEWR$sG5zld+Gz1#^8XC4D2Oc;Qe%B0{o0yrf)DUQOEBkCGi&@9G0s>s8{22TH?mG~ zUo&fLLfn{W8#^FdMips`)Yym_BlMQAJ)$a(A-Nx^q*-4`Y+vcHnPW0fsbkja)y%8W z2{lw?&6!nKvC(`*?pxL{z=XrjU}8*Nq}~a1On?iT9g*{2K~)dTQ`IY$2&t*;hU`U3 z6$KXbWNqvTy(LXhvTD6@n^`;|<75Q};o;7T?C`53gB$0b1yOXQP=Z|D7YD>_vL__B zs1qHg3r0Kz-|LIHv!`w?bfrCZ#I`Ti^~JSQ!~fhDzvaF-{9#`#oITz4#qzyn&iMNK N;>M|=iTR87#TPei6ng*w diff --git a/build/tests/TestMaker/config/twl_parentalcontrol_spec.yaml b/build/tests/TestMaker/config/twl_parentalcontrol_spec.yaml deleted file mode 100644 index 70502ddcee150015f3b84eb0d9024ec8469a6eb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1894 zcmd5+y)Oh&5T8OK@mFl3Q8=07d_;H0xi}w(I}+KP3*sxso}9Zzr$nu}MqDHcrAnm} ztwN&{m7r1*{NBDD&z|ofxoqCf?!I|5zxmB?=jpMY0#$m|Q9W5?(>a& zgm3u)&&Pa-=Z0b$UL%yC0oYT%;tT8^aqV=;KI0wUg{O+7qp4c0FCsde;Wc*LQx?4S zRg-F3y|VA;F2|CIEXR46H#x9TvI`Sa+cdbhE;*`~%{uC$sLPbpq--aajTNU!TE=py z(W_YPs+}R68l-OO#XaWk_8>|Wm+}l!hiBV8+v?e7*Yc}qCa>yQ8a;_p60ssaA3+qR zC7Pi;EzmS@399cP5+p4i6828FxwgfZO)v?fQ6TE8@DM~%DgsXqJk7k|`58wVL69^z z7U}oTIa2(`zK)c z`IW78ulWkSC`%9}fTG{UAqq2y!qCwQ6`-X_T7}s6hmv*nE}91t2X7W-xx6)w`S#J|RdX-L`?Do`j>j=4V{iUpQ>#CVaG`3IDI(u~ XZw>cqQU!gi$UkiAl!>D9{x6D^!GRq=md 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%0A$=OvY$f>k^( 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%0As=VhFnf(1M;gDFAI2He6r_d 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 z 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 z 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

  • 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

    jXZKPw%h35 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 z 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 -close(F); - - -open(OUT, ">$dst1") or die "cant open $dst1\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/TitleName\t+/ ) - { - $line =~ s/\t\#?TitleName.*\".*\"/\tTitleName\t\t\"WLAN CHECKER\"/; - } - - if( $line =~ m/^\tBannerFile/ ) - { - print OUT "\tBannerFile\t\t\$(BANNER_FILE)", $rn; - print OUT $rn, "\t#", $rn; - print OUT "\t# Permit LandingNormalJump: for TWL \"ApplicationJump\" function [TRUE/FALSE]", $rn; - print OUT "\t#", $rn; - print OUT "\tPermitLandingNormalJump\tTRUE", $rn; - next; - } - - print OUT $line; -} -close(OUT); - - -my $src2 = "$ROOT/include/twl/specfiles/ROM-TS_nand.rsf"; -my $dst2 = "wireless_checker_nand.rsf"; - -open(F, $src2) or die "cant open $src2\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst2") or die "cant open $dst2\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^\tBannerFile/ ) - { - print OUT "\tBannerFile\t\t\$(BANNER_FILE)", $rn; - next; - } - - if( $line =~ m/InitialCode\t+/ ) - { - $line =~ s/\t\#?InitialCode.*[a-zA-Z0-9]{4}/\tInitialCode\t\t\t\t000A/; - } - - if( $line =~ m/TitleName\t+/ ) - { - $line =~ s/\t\#?TitleName.*\".*\"/\tTitleName\t\t\"WLAN CHECKER\"/; - } - - if( $line =~ m/PermitLandingNormalJump/ ) - { - $line =~ s/\t\#?.*(TRUE|FALSE)/\tPermitLandingNormalJump\tTRUE/; - } - - print OUT $line; -} \ No newline at end of file diff --git a/build/tests/WirelessChecker/src/frame.cpp b/build/tests/WirelessChecker/src/frame.cpp deleted file mode 100644 index 1d46f3ca..00000000 --- a/build/tests/WirelessChecker/src/frame.cpp +++ /dev/null @@ -1,170 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: main.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "frame.h" - -namespace -{ - -} - -CFrame::CFrame() : m_itemIndex(ITEM_TEST_WM) -{ - OS_InitMessageQueue(&m_EntrMsgq, m_EntrMsg, sizeof(m_EntrMsg)/sizeof(m_EntrMsg[0])); - -} - -CFrame::CFrame(u8 item) -{ - m_itemIndex = item; - OS_InitMessageQueue(&m_EntrMsgq, m_EntrMsg, sizeof(m_EntrMsg)/sizeof(m_EntrMsg[0])); -} - -CFrame::~CFrame() -{ - -} - -void -CFrame::InitDisp() -{ - util::CCanvas* pcm = util::GetMain1Canvas(); - util::CCanvas* pcs = util::GetSub1Canvas(); - - pcm->Clear(util::COLOR_BLACK); - pcs->Clear(util::COLOR_BLACK); - pcm->Printf( -#ifdef CHECK_ON_CTR - 16*1, -#else - 16*5, -#endif - 0, util::COLOR_WHITE, L"@\mFc[" -#ifdef CHECK_ON_CTR - L"(CTR݊[h`FbNp)" -#endif - ); - pcm->Printf(96, 16*1, util::COLOR_WHITE, L"BUILD TIME: %s %s", L""__DATE__, L""__TIME__); - - DrawBorder(pcm, 4, 16*2 + 4, 256 - 8, 192 - (16*2 + 4), util::COLOR_WHITE); - pcm->Printf(16*1, 16*3, util::COLOR_WHITE, L"ON/OFFݒ[ %s ]", TRUE == OS_IsAvailableWireless() ? L"ON ":L"OFF"); - pcm->Printf(16*8, 16*3, util::COLOR_WHITE, L"OFF{[ %s ]", TRUE == OS_IsForceDisableWireless() ? L"Yes":L"No "); - - pcm->Printf(16*2, 16*5, util::COLOR_WHITE, L"DS̏eXg"); - pcm->Printf(16*2, 16*6, util::COLOR_WHITE, L"TWL̏eXg"); - pcm->Printf(16*2, 16*7, util::COLOR_WHITE, L"FATALG[G~[V"); -#ifdef CHECK_ON_CTR - pcm->Printf(16*2, 16*8, util::COLOR_WHITE, L"AvWveXg"); -#else - pcm->Printf(16*2, 16*8, util::COLOR_WHITE, L"FATALG[JoeXg"); -#endif - DrawBorder(pcs, 4, 16*9 + 4, 256 - 8, 192 - (16*9 + 4), util::COLOR_WHITE); -} - -void -CFrame::CursorDisp(int xpos, int ystart, util::PaletteColor color) -{ - util::CCanvas* pcm = util::GetMain1Canvas(); - pcm->Clear(xpos, ystart, 16, 16*ITEM_NUM, util::COLOR_BLACK); - pcm->Print(xpos, ystart + 16*GetItemIndex(), color, L""); -} - -void -CFrame::HelpDisp(util::PaletteColor color) -{ - util::CCanvas* pcs = util::GetSub1Canvas(); - pcs->Clear(8, 16*9 + 8, 256 - 16, 16*2, util::COLOR_BLACK); - - wchar_t *pHelpString1, *pHelpString2; - - switch (GetItemIndex()) - { - case ITEM_TEST_WM: - pHelpString1 = L"DS̏eXgs܂B"; - pHelpString2 = L"LED̓_łmFĂB"; - break; - case ITEM_TEST_NWM: - pHelpString1 = L"TWL̏eXgs܂B"; - pHelpString2 = L"LED̓_łmFĂB"; - break; - case ITEM_TEST_FATAL: - pHelpString1 = L"FATALG[𔭐ATWLgȂ܂"; -#ifdef CHECK_ON_CTR - pHelpString2 = L"HWZbgʼn񕜂܂BCTRł͖łB"; -#else - pHelpString2 = L"HWZbgʼn񕜂܂B"; -#endif - break; - case ITEM_TEST_RECOVERY: -#ifdef CHECK_ON_CTR - pHelpString1 = L"AvWveXg܂B"; - pHelpString2 = L"ċNDS/TWLmFĂB"; -#else - pHelpString1 = L"FATALG[̃Jo[eXg܂B"; - pHelpString2 = L"ċNTWLmFĂB"; -#endif - break; - } - pcs->Print(8, 16*9 + 8, color, pHelpString1); - pcs->Print(8, 16*10 + 8, color, pHelpString2); -} - -BOOL -CFrame::AutoEnter() -{ - return OS_SendMessage(&m_EntrMsgq, (OSMessage)TRUE, OS_MESSAGE_NOBLOCK); -} - -void -CFrame::ProcessButton() -{ - if (util::IsPadTrigger(PAD_KEY_UP)) - { - decRound(); - } else - if (util::IsPadTrigger(PAD_KEY_DOWN)) - { - incRound(); - } - - if (util::IsPadTrigger(PAD_BUTTON_A)) - { - if (FALSE == OS_SendMessage(&m_EntrMsgq, (OSMessage)TRUE, OS_MESSAGE_NOBLOCK)) - { - // already entered - } - } -} - -BOOL -CFrame::IsEnter() -{ - OSMessage msg; - return OS_ReceiveMessage(&m_EntrMsgq, &msg, OS_MESSAGE_NOBLOCK); - -} - -void -CFrame::DrawBorder(util::CCanvas* pCanvas, int px, int py, int pw, int ph, util::PaletteColor color) -{ - pCanvas->Clear(px, py, pw, 1, color); - pCanvas->Clear(px, py + ph - 1, pw, 1, color); - pCanvas->Clear(px, py + 1, 1, ph - 2, color); - pCanvas->Clear(px + pw - 1, py + 1, 1, ph - 2, color); -} diff --git a/build/tests/WirelessChecker/src/frame.h b/build/tests/WirelessChecker/src/frame.h deleted file mode 100644 index 2fec1121..00000000 --- a/build/tests/WirelessChecker/src/frame.h +++ /dev/null @@ -1,72 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: frame.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_FRAME_H_ -#define WIRELESS_CHECHER_FRAME_H_ - -#include -#include "util/util.h" -#include - -class CFrame -{ -public: - enum { - ITEM_TEST_WM, - ITEM_TEST_NWM, - ITEM_TEST_FATAL, - ITEM_TEST_RECOVERY, - ITEM_NUM - }; -private: - u8 m_itemIndex; - OSMessageQueue m_EntrMsgq; - OSMessage m_EntrMsg[1]; - BOOL m_isEnter; - - static const u8 m_itemNum = ITEM_NUM; - void incRound() - { - if (m_itemNum) - { - m_itemIndex = (u8)((m_itemIndex + 1)%m_itemNum); - } - } - void decRound() - { - if (m_itemNum) - { - m_itemIndex = (u8)((m_itemNum + m_itemIndex - 1)%m_itemNum); - } - } -public: - CFrame(); - CFrame(u8 item); - virtual ~CFrame(); - void InitDisp(); - void CursorDisp(int xpos, int ystart, util::PaletteColor color); - void HelpDisp(util::PaletteColor color); - virtual void ProcessButton(); - u8 GetItemIndex() - { - return m_itemIndex; - } - BOOL IsEnter(); - BOOL AutoEnter(); - void DrawBorder(util::CCanvas* pCanvas, int px, int py, int pw, int ph, util::PaletteColor color); -}; - -#endif // WIRELESS_CHECHER_TEST_NWM_H_ diff --git a/build/tests/WirelessChecker/src/main.cpp b/build/tests/WirelessChecker/src/main.cpp deleted file mode 100644 index 06a3cd6a..00000000 --- a/build/tests/WirelessChecker/src/main.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: main.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include "util/util.h" -#include "util/canvas.h" -#include "frame.h" -#include "test_wm.h" -#include "test_nwm.h" -#include "test_fatal.h" -#include "test_recovery.h" -#include - -namespace -{ - -} -// end of anonymous namespace - - -void -TwlStartUp(void) -{ - -} - -void -TwlMain(void) -{ - BOOL isFatalChecking = FALSE; - util::Init(); - - OSDeliverArgInfo argInfo; -#ifndef CHECK_ON_CTR - if (TRUE == OS_IsValidDeliverArg()) - { - OS_InitDeliverArgInfo(&argInfo, 0); - OS_DecodeDeliverArg(); - if( (OS_GetDeliverArgc() > 0) && ( STD_CompareNString( (const char *)OS_GetDeliverArgv(1), "fatal", 3 ) == 0 ) ) - { - isFatalChecking = TRUE; - } - } -#endif - // display on - util::WaitVBlankIntr(); - util::dispOn(); - - CFrame menu(isFatalChecking == TRUE ? CFrame::ITEM_TEST_RECOVERY:CFrame::ITEM_TEST_WM); - if (isFatalChecking == TRUE) - { - menu.AutoEnter(); - } - CTestWm wm; - CTestNwm nwm; - CTestFatal fatal; - CTestRecovery rcv; - menu.InitDisp(); - - for (;;) - { - util::UpdateGamePad(); - menu.ProcessButton(); - menu.CursorDisp(16*1, 16*5, util::COLOR_LIMEGREEN); - menu.HelpDisp(util::COLOR_WHITE); - - if (menu.IsEnter()) - { - BOOL result; - u8 itemidx = menu.GetItemIndex(); - util::CCanvas* pcm = util::GetMain1Canvas(); - - switch (itemidx) - { - case CFrame::ITEM_TEST_WM: - pcm->Clear(16*12, 16*5, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*5, util::COLOR_YELLOW, L"TESTING"); - util::WaitVBlankIntr(); - util::UpdateDisplay(); - result = wm.WirelessTest(); - pcm->Clear(16*12, 16*5, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*5, result == TRUE ? util::COLOR_TURQUOISE:util::COLOR_RED, result == TRUE ? L"SUCCESS":L"FAILURE"); - break; - case CFrame::ITEM_TEST_NWM: - pcm->Clear(16*12, 16*6, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*6, util::COLOR_YELLOW, L"TESTING"); - util::WaitVBlankIntr(); - util::UpdateDisplay(); - result = nwm.WirelessTest(); - pcm->Clear(16*12, 16*6, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*6, result == TRUE ? util::COLOR_TURQUOISE:util::COLOR_RED, result == TRUE ? L"SUCCESS":L"FAILURE"); - break; - case CFrame::ITEM_TEST_FATAL: - pcm->Clear(16*12, 16*7, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*7, util::COLOR_YELLOW, L"TESTING"); - result = fatal.WrackTest(); - pcm->Clear(16*12, 16*7, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*7, result == TRUE ? util::COLOR_TURQUOISE:util::COLOR_RED, result == TRUE ? L"SUCCESS":L"FAILURE"); - break; - case CFrame::ITEM_TEST_RECOVERY: - pcm->Clear(16*12, 16*8, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*8, util::COLOR_YELLOW, L"TESTING"); - if (isFatalChecking == FALSE) - { - result = rcv.RecoveryTest(); - } else { - result = rcv.RecoveryTest2(); - isFatalChecking = FALSE; - } - pcm->Clear(16*12, 16*8, 16*3, 16, util::COLOR_BLACK); - pcm->Print(16*12, 16*8, result == TRUE ? util::COLOR_TURQUOISE:util::COLOR_RED, result == TRUE ? L"SUCCESS":L"FAILURE"); - break; - } - } - - util::WaitVBlankIntr(); - util::UpdateDisplay(); - } - -} diff --git a/build/tests/WirelessChecker/src/test.cpp b/build/tests/WirelessChecker/src/test.cpp deleted file mode 100644 index 4dd480af..00000000 --- a/build/tests/WirelessChecker/src/test.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: main.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "util/canvas.h" -#include "util/util.h" -#include "util/wprintf.h" -#include -#include -#include -#include -//#include -#include -#include "test.h" - -CTest::CTest() : m_state(TEST_STATE_NONE) -{ - m_pc = util::GetSub1Canvas(); -} - -CTest::~CTest() -{ - -} - -BOOL -CTest::Init(void) -{ - return TRUE; -} - -BOOL -CTest::Enable(void) -{ - return TRUE; -} - -BOOL -CTest::ScanTest(void) -{ - return TRUE; -} - -BOOL -CTest::Disable(void) -{ - return TRUE; -} - -BOOL -CTest::End(void) -{ - return TRUE; -} - -u8 -CTest::GetState(void) -{ - return m_state; -} - -void CTest::LogClear(util::CCanvas* pc) -{ - pc->Clear(0, 0, 256, 16*9, util::COLOR_BLACK); - m_line = 0; - util::WaitVBlankIntr(); - util::UpdateDisplay(); -} - -void -CTest::LogPrintf(util::CCanvas* pc, const NNSG2dChar* text, ...) -{ - std::auto_ptr pLocalBuffer(new wchar_t[LOCAL_BUFFER_LEN]); - va_list args; - - va_start(args, text); - util::VSNWPrintf(pLocalBuffer.get(), LOCAL_BUFFER_LEN, text, args); - va_end(args); - pc->Print(16*1, 16*m_line++, util::COLOR_WHITE, pLocalBuffer.get()); - util::WaitVBlankIntr(); - util::UpdateDisplay(); -} diff --git a/build/tests/WirelessChecker/src/test.h b/build/tests/WirelessChecker/src/test.h deleted file mode 100644 index 21c4d985..00000000 --- a/build/tests/WirelessChecker/src/test.h +++ /dev/null @@ -1,54 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: test.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_TEST_H_ -#define WIRELESS_CHECHER_TEST_H_ - -#include -#include "util/util.h" -#include "util/canvas.h" -#include -#include -#include - -class CTest - -{ -private: - u8 m_line; - static const int LOCAL_BUFFER_LEN = 1024; -public: - enum { - TEST_STATE_NONE, - TEST_STATE_INITIALIZED, - TEST_STATE_ENABLED, - TEST_STATE_NUM - }; - u8 m_state; - util::CCanvas *m_pc; - CTest(); - virtual ~CTest(); - virtual BOOL Init(void); - virtual BOOL Enable(void); - virtual BOOL ScanTest(void); - virtual BOOL Disable(void); - virtual BOOL End(void); - u8 GetState(void); - void LogClear(util::CCanvas* pc); - void LogPrintf(util::CCanvas* pc, const NNSG2dChar* text, ...); -}; - -#endif // WIRELESS_CHECHER_TEST_H_ diff --git a/build/tests/WirelessChecker/src/test_fatal.cpp b/build/tests/WirelessChecker/src/test_fatal.cpp deleted file mode 100644 index a3684aca..00000000 --- a/build/tests/WirelessChecker/src/test_fatal.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: test_fatal.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "test_fatal.h" -#include "nwm_arm9_private.h" -#pragma exceptions on - -extern "C" { -extern NWMRetCode NWMi_WrackFirmware(NWMCallbackFunc callback); -} - -namespace -{ - OSMessageQueue m_AsyncMsgq; - OSMessage m_AsyncMsg[1]; - - void m_WrackFirmCallback(void *arg) - { - NWMCallback *cb = (NWMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_FATAL_ERROR ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_InitMessage(void) - { - OS_InitMessageQueue(&m_AsyncMsgq, m_AsyncMsg, sizeof(m_AsyncMsg)/sizeof(m_AsyncMsg[0])); - } - - BOOL m_WaitCallback(void) - { - OSMessage msg; - (void)OS_ReceiveMessage(&m_AsyncMsgq, &msg, OS_MESSAGE_BLOCK); - return (BOOL)msg; - } -} - - - - - -CTestFatal::CTestFatal() -{ - m_InitMessage(); -} - -CTestFatal::~CTestFatal() -{ - -} - -BOOL -CTestFatal::Wrack(void) -{ - try - { - if (m_state < TEST_STATE_INITIALIZED) - { - throw L"Xe[gsł.\n"; - } - - if (NWM_RETCODE_OPERATING != NWMi_WrackFirmware(m_WrackFirmCallback)) - { - throw L"WrackFirmware s.\n"; - } - if (m_WaitCallback() == FALSE) - { - throw L"WrackFirmware 񓯊s.\n"; - } - LogPrintf(m_pc, L"WrackFirmware .\n"); - - } - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - return TRUE; -} - -BOOL -CTestFatal::WrackTest(void) -{ - try - { - if (FALSE == Init()) - { - throw L"Init() s.\n"; - } - - if (FALSE == Wrack()) - { - End(); - throw L"Wrack() s.\n"; - } - - if (FALSE == End()) - { - throw L"End() s.\n"; - } - } - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - LogPrintf(m_pc, L"eXg܂.\n"); - - return TRUE; -} diff --git a/build/tests/WirelessChecker/src/test_fatal.h b/build/tests/WirelessChecker/src/test_fatal.h deleted file mode 100644 index 128d582d..00000000 --- a/build/tests/WirelessChecker/src/test_fatal.h +++ /dev/null @@ -1,37 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: test_fatal.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_TEST_FATAL_H_ -#define WIRELESS_CHECHER_TEST_FATAL_H_ - -#include -#include "test.h" -#include "test_nwm.h" -#include "util/canvas.h" - -class CTestFatal - : public CTestNwm -{ -private: -public: - CTestFatal(); - virtual ~CTestFatal(); - BOOL Wrack(void); - BOOL WrackTest(void); -}; - - -#endif // WIRELESS_CHECHER_TEST_FATAL_H_ diff --git a/build/tests/WirelessChecker/src/test_nwm.cpp b/build/tests/WirelessChecker/src/test_nwm.cpp deleted file mode 100644 index 127afab7..00000000 --- a/build/tests/WirelessChecker/src/test_nwm.cpp +++ /dev/null @@ -1,355 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: test_nwm.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "test_nwm.h" -#pragma exceptions on - -namespace test_nwm -{ - OSMessageQueue m_AsyncMsgq; - OSMessage m_AsyncMsg[1]; - void m_InitMessage(void); - - void m_LoadDeviceCallback(void *arg) - { - NWMCallback *cb = (NWMCallback*)arg; - - // TODO: get FW ver and RegDomain? - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - } - - void m_OpenCallback(void *arg) - { - NWMCallback *cb = (NWMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_UnloadDeviceCallback(void *arg) - { - NWMCallback *cb = (NWMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - } - - void m_CloseCallback(void *arg) - { - NWMCallback *cb = (NWMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_ScanCallback(void *arg) - { - NWMStartScanCallback *cb = (NWMStartScanCallback*)arg; - - OS_TPrintf("Number of BSS: %d\n", cb->bssDescCount); - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->retcode == NWM_RETCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_InitMessage(void) - { - OS_InitMessageQueue(&m_AsyncMsgq, m_AsyncMsg, sizeof(m_AsyncMsg)/sizeof(m_AsyncMsg[0])); - } - - BOOL m_WaitCallback(void) - { - OSMessage msg; - (void)OS_ReceiveMessage(&m_AsyncMsgq, &msg, OS_MESSAGE_BLOCK); - return (BOOL)msg; - } -} - - - - - -CTestNwm::CTestNwm() : m_pNwmBuffer(0), m_pScanBuffer(0) -{ - test_nwm::m_InitMessage(); -} - -CTestNwm::~CTestNwm() -{ - -} - - -BOOL -CTestNwm::Init(void) -{ - LogClear(m_pc); - - try - { - if (m_state != TEST_STATE_NONE) - { - throw L"Xe[gsł.\n"; - } - if (m_pNwmBuffer) - { - delete [] m_pNwmBuffer; - m_pNwmBuffer = 0; - throw L"NWMobt@sł.\n"; - } - - m_pNwmBuffer = new u8 [NWM_SYSTEM_BUF_SIZE + 0x20]; - - - if (NWM_RETCODE_SUCCESS != NWM_Init((void*)MATH_ROUNDUP((u32)m_pNwmBuffer, 32), NWM_SYSTEM_BUF_SIZE, m_DmaNo)) - { - throw L"NWM_Init s.\n"; - } - - LogPrintf(m_pc, L"NWM_Init .\n"); - } - - catch (const wchar_t* string) - { - delete [] m_pNwmBuffer; - m_pNwmBuffer = 0; - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_INITIALIZED; - - return TRUE; -} - -BOOL -CTestNwm::Enable(void) -{ - try { - if (m_state != TEST_STATE_INITIALIZED) - { - throw L"Xe[gsł.\n"; - } - - if (NWM_RETCODE_OPERATING != NWM_LoadDevice(test_nwm::m_LoadDeviceCallback)) - { - throw L"NWM_LoadDevice s.\n"; - } - - if (test_nwm::m_WaitCallback() == FALSE) - { - throw L"NWM_LoadDevice 񓯊s.\n"; - } - LogPrintf(m_pc, L"NWM_LoadDevice .\n"); - - if (NWM_RETCODE_OPERATING != NWM_Open(test_nwm::m_OpenCallback)) - { - throw L"NWM_Open s.\n"; - } - if (test_nwm::m_WaitCallback() == FALSE) - { - throw L"NWM_Open 񓯊s.\n"; - } - LogPrintf(m_pc, L"NWM_Open .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - m_state = TEST_STATE_ENABLED; - return TRUE; -} - -BOOL -CTestNwm::ScanTest(void) -{ - try - { - - if (m_state != TEST_STATE_ENABLED) - { - throw L"Xe[gsł.\n"; - } - - if (m_pScanBuffer) - { - throw L"Scanobt@sł.\n"; - } - - m_pScanBuffer = new u8 [NWM_SIZE_SCANBUF_MAX + 0x20]; - - NWMScanParam param; - - MI_CpuClear8(m_pScanBuffer, NWM_SIZE_SCANBUF_MAX + 0x20); - DC_StoreRange(m_pScanBuffer, NWM_SIZE_SCANBUF_MAX + 0x20); - param.scanBuf = (NWMBssDesc*)MATH_ROUNDUP((u32)m_pScanBuffer, 32); - param.scanBufSize = NWM_SIZE_SCANBUF_MAX; - param.channelList = (u16)(NWM_GetAllowedChannel() >> 1); - param.channelDwellTime = NWM_GetDispersionScanPeriod(NWM_SCANTYPE_ACTIVE); - param.scanType = NWM_SCANTYPE_ACTIVE; - param.ssidLength = 0; - MI_CpuFill8(param.ssid, 0xFF, sizeof(param.ssid)); - - if (NWM_RETCODE_OPERATING != NWM_StartScan(test_nwm::m_ScanCallback, ¶m)) - { - throw L"NWM_StartScan s.\n"; - } - - if (test_nwm::m_WaitCallback() == FALSE) - { - throw L"NWM_StartScan 񓯊s.\n"; - } - - LogPrintf(m_pc, L"NWM_StartScan .\n"); - - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - delete [] m_pScanBuffer; - m_pScanBuffer = 0; - - return TRUE; -} - -BOOL -CTestNwm::Disable(void) -{ - try { - if (m_state != TEST_STATE_ENABLED) - { - throw L"Xe[gsł.\n"; - } - - if (NWM_RETCODE_OPERATING != NWM_Close(test_nwm::m_CloseCallback)) - { - throw L"NWM_Close s.\n"; - } - if (test_nwm::m_WaitCallback() == FALSE) - { - throw L"NWM_Close 񓯊s.\n"; - } - LogPrintf(m_pc, L"NWM_Close .\n"); - - if (NWM_RETCODE_OPERATING != NWM_UnloadDevice(test_nwm::m_UnloadDeviceCallback)) - { - throw L"NWM_UnloadDevice s.\n"; - } - if (test_nwm::m_WaitCallback() == FALSE) - { - throw L"NWM_UnloadDevice 񓯊s.\n"; - } - LogPrintf(m_pc, L"NWM_UnloadDevice .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - m_state = TEST_STATE_INITIALIZED; - return TRUE; - -} - -BOOL -CTestNwm::End(void) -{ - try - { - if (m_state != TEST_STATE_INITIALIZED) - { - throw L"Xe[gsł.\n"; - } - if (NWM_RETCODE_SUCCESS != NWM_End()) - { - throw L"NWM_End s.\n"; - } - - LogPrintf(m_pc, L"NWM_End .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_NONE; - delete [] m_pNwmBuffer; - m_pNwmBuffer = 0; - - return TRUE; -} - -BOOL -CTestNwm::WirelessTest(void) -{ - try - { - if (FALSE == Init()) - { - throw L"Init() s.\n"; - } - if (FALSE == Enable()) - { - End(); - throw L"Enable() s.\n"; - } - if (FALSE == ScanTest()) - { - Disable(); - End(); - throw L"ScanTest() s.\n"; - } - if (FALSE == Disable()) - { - throw L"Disable() s.\n"; - } - if (FALSE == End()) - { - throw L"End() s.\n"; - } - } - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - LogPrintf(m_pc, L"eXg܂.\n"); - - return TRUE; -} diff --git a/build/tests/WirelessChecker/src/test_nwm.h b/build/tests/WirelessChecker/src/test_nwm.h deleted file mode 100644 index cbc725f6..00000000 --- a/build/tests/WirelessChecker/src/test_nwm.h +++ /dev/null @@ -1,52 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: test_nwm.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_TEST_NWM_H_ -#define WIRELESS_CHECHER_TEST_NWM_H_ - -#include -#include "test.h" - -namespace test_nwm -{ - void m_LoadDeviceCallback(void *arg); - void m_OpenCallback(void *arg); - void m_UnloadDeviceCallback(void *arg); - void m_CloseCallback(void *arg); - void m_ScanCallback(void *arg); - BOOL m_WaitCallback(void); -} - -class CTestNwm - : public CTest -{ -private: - static const u8 m_DmaNo = 3; - u8 *m_pNwmBuffer; - u8 *m_pScanBuffer; -public: - CTestNwm(); - virtual ~CTestNwm(); - BOOL Init(void); - BOOL Enable(void); - BOOL ScanTest(void); - BOOL Disable(void); - BOOL End(void); - BOOL WirelessTest(void); -}; - - -#endif // WIRELESS_CHECHER_TEST_NWM_H_ diff --git a/build/tests/WirelessChecker/src/test_recovery.cpp b/build/tests/WirelessChecker/src/test_recovery.cpp deleted file mode 100644 index 625bcc36..00000000 --- a/build/tests/WirelessChecker/src/test_recovery.cpp +++ /dev/null @@ -1,98 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: test_recovery.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "test_recovery.h" -#include "nwm_arm9_private.h" -#pragma exceptions on - - -CTestRecovery::CTestRecovery() -{ -} - -CTestRecovery::~CTestRecovery() -{ - -} - - -BOOL -CTestRecovery::RecoveryTest(void) -{ - try - { - if (FALSE == Init()) - { - throw L"Init() s.\n"; - } - - if (FALSE == Enable()) - { - End(); - throw L"Enable() s.\n"; - } -#ifndef CHECK_ON_CTR - if (FALSE == Wrack()) - { - Disable(); - End(); - throw L"Wrack() s.\n"; - } - - LogPrintf(m_pc, L"FATALG[҂Ă܂.\n"); - - if (TRUE == test_nwm::m_WaitCallback()) - { - Disable(); - End(); - throw L"FATALG[N܂ł.\n"; - } - - LogPrintf(m_pc, L"FATALG[܂.\n"); -#endif - } - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_INITIALIZED; - End(); - LogPrintf(m_pc, L"3bHWZbgs܂.\n"); - OS_Sleep(3000); - - OSDeliverArgInfo argInfo; - OS_InitDeliverArgInfo(&argInfo, 0); - OSi_SetDeliverArgState( OS_DELIVER_ARG_BUF_ACCESSIBLE | OS_DELIVER_ARG_BUF_WRITABLE ); - OS_SetStringToDeliverArg( "fatal" ); - OS_EncodeDeliverArg(); - OS_DoApplicationJump( - *(const OSTitleId*)(HW_TWL_ROM_HEADER_BUF + 0x230), - OS_APP_JUMP_NORMAL); - - return TRUE; -} - -BOOL -CTestRecovery::RecoveryTest2(void) -{ - return WirelessTest(); -} - diff --git a/build/tests/WirelessChecker/src/test_recovery.h b/build/tests/WirelessChecker/src/test_recovery.h deleted file mode 100644 index c346bc17..00000000 --- a/build/tests/WirelessChecker/src/test_recovery.h +++ /dev/null @@ -1,37 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: test_recovery.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_TEST_RECOVERY_H_ -#define WIRELESS_CHECHER_TEST_RECOVERY_H_ - -#include -#include "test.h" -#include "test_fatal.h" -#include "util/canvas.h" - -class CTestRecovery - : public CTestFatal -{ -private: -public: - CTestRecovery(); - ~CTestRecovery(); - BOOL RecoveryTest(void); - BOOL RecoveryTest2(void); -}; - - -#endif // WIRELESS_CHECHER_TEST_RECOVERY_H_ diff --git a/build/tests/WirelessChecker/src/test_wm.cpp b/build/tests/WirelessChecker/src/test_wm.cpp deleted file mode 100644 index f2b2a151..00000000 --- a/build/tests/WirelessChecker/src/test_wm.cpp +++ /dev/null @@ -1,376 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: test_nwm.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "test_wm.h" -#pragma exceptions on - -namespace -{ - OSMessageQueue m_AsyncMsgq; - OSMessage m_AsyncMsg[1]; - - void m_EnableCallback(void *arg) - { - WMCallback *cb = (WMCallback*)arg; - - // TODO: get FW ver and RegDomain? - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - } - - void m_PowerOnCallback(void *arg) - { - WMCallback *cb = (WMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_DisableCallback(void *arg) - { - WMCallback *cb = (WMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - } - - void m_PowerOffCallback(void *arg) - { - WMCallback *cb = (WMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_ScanCallback(void *arg) - { - WMStartScanExCallback *cb = (WMStartScanExCallback*)arg; - - OS_TPrintf("Number of BSS: %d\n", cb->bssDescCount); - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_EndScanCallback(void *arg) - { - WMCallback *cb = (WMCallback*)arg; - - if (FALSE == OS_SendMessage(&m_AsyncMsgq, (OSMessage)(cb->errcode == WM_ERRCODE_SUCCESS ? TRUE:FALSE), OS_MESSAGE_NOBLOCK)) - { - } - - } - - void m_InitMessage(void) - { - OS_InitMessageQueue(&m_AsyncMsgq, m_AsyncMsg, sizeof(m_AsyncMsg)/sizeof(m_AsyncMsg[0])); - } - - BOOL m_WaitCallback(void) - { - OSMessage msg; - (void)OS_ReceiveMessage(&m_AsyncMsgq, &msg, OS_MESSAGE_BLOCK); - return (BOOL)msg; - } -} - - - - - -CTestWm::CTestWm() : m_pWmBuffer(0), m_pScanBuffer(0) -{ - m_InitMessage(); - m_pc = util::GetSub1Canvas(); -} - -CTestWm::~CTestWm() -{ - -} - - -BOOL -CTestWm::Init(void) -{ - LogClear(m_pc); - - try - { - if (m_state != TEST_STATE_NONE) - { - throw L"Xe[gsł.\n"; - } - if (m_pWmBuffer) - { - delete [] m_pWmBuffer; - m_pWmBuffer = 0; - throw L"WMpobt@sł.\n"; - } - - m_pWmBuffer = new u8 [WM_SYSTEM_BUF_SIZE + 0x20]; - - - if (WM_ERRCODE_SUCCESS != WM_Init((void*)MATH_ROUNDUP((u32)m_pWmBuffer, 32), m_DmaNo)) - { - throw L"WM_Init s.\n"; - } - - LogPrintf(m_pc, L"WM_Init .\n"); - - } - - catch (const wchar_t* string) - { - delete [] m_pWmBuffer; - m_pWmBuffer = 0; - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_INITIALIZED; - - return TRUE; -} - -BOOL -CTestWm::Enable(void) -{ - try { - - if (m_state != TEST_STATE_INITIALIZED) - { - throw L"Xe[gsł.\n"; - } - - if (WM_ERRCODE_OPERATING != WM_Enable(m_EnableCallback)) - { - throw L"WM_Enable s.\n"; - } - if (m_WaitCallback() == FALSE) - { - throw L"WM_Enable 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_Enable .\n"); - if (WM_ERRCODE_OPERATING != WM_PowerOn(m_PowerOnCallback)) - { - throw L"WM_PowerOn s.\n"; - } - if (m_WaitCallback() == FALSE) - { - throw L"WM_PowerOn 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_PowerOn .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - m_state = TEST_STATE_ENABLED; - return TRUE; -} - -BOOL -CTestWm::ScanTest(void) -{ - try - { - - if (m_state != TEST_STATE_ENABLED) - { - throw L"Xe[gsł.\n"; - } - - if (m_pScanBuffer) - { - throw L"Scanobt@sł.\n"; - } - - m_pScanBuffer = new u8 [WM_SIZE_SCAN_EX_BUF + 0x20]; - - WMScanExParam param; - - MI_CpuClear8(m_pScanBuffer, WM_SIZE_SCAN_EX_BUF + 0x20); - DC_StoreRange(m_pScanBuffer, WM_SIZE_SCAN_EX_BUF + 0x20); - param.scanBuf = (WMBssDesc*)MATH_ROUNDUP((u32)m_pScanBuffer, 32); - param.scanBufSize = WM_SIZE_SCAN_EX_BUF; - param.channelList = (u16)WM_GetAllowedChannel(); - param.maxChannelTime = WM_GetDispersionScanPeriod(); - param.scanType = WM_SCANTYPE_ACTIVE; - param.ssidLength = 0; - MI_CpuFill8(param.ssid, 0xFF, sizeof(param.ssid)); - param.ssidMatchLength = 0; - - if (WM_ERRCODE_OPERATING != WM_StartScanEx(m_ScanCallback, ¶m)) - { - throw L"WM_StartScanEx s.\n"; - } - - if (m_WaitCallback() == FALSE) - { - throw L"WM_StartScanEx 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_StartScanEx .\n"); - - if (WM_ERRCODE_OPERATING != WM_EndScan(m_EndScanCallback)) - { - throw L"WM_EndScan s.\n"; - } - - if (m_WaitCallback() == FALSE) - { - throw L"WM_EndScan 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_EndScan .\n"); - - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - delete [] m_pScanBuffer; - m_pScanBuffer = 0; - - return TRUE; -} - -BOOL -CTestWm::Disable(void) -{ - try { - if (m_state != TEST_STATE_ENABLED) - { - throw L"Xe[gsł.\n"; - } - - if (WM_ERRCODE_OPERATING != WM_PowerOff(m_PowerOffCallback)) - { - throw L"WM_PowerOff s.\n"; - } - if (m_WaitCallback() == FALSE) - { - throw L"WM_PowerOff 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_PowerOff .\n"); - - if (WM_ERRCODE_OPERATING != WM_Disable(m_DisableCallback)) - { - throw L"WM_Disable s.\n"; - } - if (m_WaitCallback() == FALSE) - { - throw L"WM_Disable 񓯊s.\n"; - } - LogPrintf(m_pc, L"WM_Disable .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_INITIALIZED; - return TRUE; - -} - -BOOL -CTestWm::End(void) -{ - try - { - if (m_state != TEST_STATE_INITIALIZED) - { - throw L"Xe[gsł\n"; - } - if (WM_ERRCODE_SUCCESS != WM_Finish()) - { - throw L"WM_Finish s.\n"; - } - LogPrintf(m_pc, L"WM_Finish .\n"); - } - - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - m_state = TEST_STATE_NONE; - delete [] m_pWmBuffer; - m_pWmBuffer = 0; - - return TRUE; -} - -BOOL -CTestWm::WirelessTest(void) -{ - try - { - if (FALSE == Init()) - { - throw L"Init() s.\n"; - } - if (FALSE == Enable()) - { - End(); - throw L"Enable() s.\n"; - } - if (FALSE == ScanTest()) - { - Disable(); - End(); - throw L"ScanTest() s.\n"; - } - if (FALSE == Disable()) - { - throw L"Disable() s.\n"; - } - if (FALSE == End()) - { - throw L"End() s.\n"; - } - } - catch (const wchar_t* string) - { - LogPrintf(m_pc, L"%s", string); - return FALSE; - } - - LogPrintf(m_pc, L"eXg܂.\n"); - - return TRUE; -} diff --git a/build/tests/WirelessChecker/src/test_wm.h b/build/tests/WirelessChecker/src/test_wm.h deleted file mode 100644 index 958a4919..00000000 --- a/build/tests/WirelessChecker/src/test_wm.h +++ /dev/null @@ -1,43 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: test_wm.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_TEST_WM_H_ -#define WIRELESS_CHECHER_TEST_WM_H_ - -#include -#include "test.h" -#include "util/canvas.h" - -class CTestWm - : public CTest -{ -private: - static const u8 m_DmaNo = 3; - u8 *m_pWmBuffer; - u8 *m_pScanBuffer; -public: - CTestWm(); - virtual ~CTestWm(); - BOOL Init(void); - BOOL Enable(void); - BOOL ScanTest(void); - BOOL Disable(void); - BOOL End(void); - BOOL WirelessTest(void); -}; - - -#endif // WIRELESS_CHECHER_TEST_WM_H_ diff --git a/build/tests/WirelessChecker/src/util/canvas.cpp b/build/tests/WirelessChecker/src/util/canvas.cpp deleted file mode 100644 index 9e9156ef..00000000 --- a/build/tests/WirelessChecker/src/util/canvas.cpp +++ /dev/null @@ -1,175 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: Canvas.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "util/canvas.h" -#include "util/util.h" -#include "util/wprintf.h" -#include -#include -#include -#include -//#include -#include - -namespace util -{ - -CCanvas::CCanvas() -: m_pFont(NULL) -{ -} - -CCanvas::~CCanvas() -{ -} - -void -CCanvas::Init(NNS_GFD_DST_TYPE type, u32 offset, void* pScrBase, const NNSG2dFont* pFont) -{ - m_transType = type; - m_transOffset = offset; - m_pFont = pFont; - - NNS_G2dCharCanvasInitForBG( - &m_cc, - m_offscreen, - CANVAS_WIDTH, - CANVAS_HEIGHT, - NNS_G2D_CHARA_COLORMODE_16 ); - - NNS_G2dTextCanvasInit( - &m_txn, - &m_cc, - m_pFont, - TEXT_HSPACE, - TEXT_VSPACE ); - - NNS_G2dMapScrToCharText( - pScrBase, - CANVAS_WIDTH, - CANVAS_HEIGHT, - CANVAS_LEFT, - CANVAS_TOP, - NNS_G2D_TEXT_BG_WIDTH_256, - CANVAS_CHARACTER_OFFSET, - DEFAULT_COLOR_PALETTE ); -} - -void -CCanvas::Clear(PaletteColor c) -{ - NNS_G2dCharCanvasClear(&m_cc, c); - RegisterTransferTask(); -} - -void -CCanvas::Clear(int x, int y, int w, int h, PaletteColor c) -{ - const int px = MATH_CLAMP(x, 0, HW_LCD_WIDTH); - const int py = MATH_CLAMP(y, 0, HW_LCD_HEIGHT); - const int pw = MATH_CLAMP(x + w, px, HW_LCD_WIDTH) - px; - const int ph = MATH_CLAMP(y + h, py, HW_LCD_HEIGHT) - py; - - if( pw > 0 && ph > 0 ) - { - NNS_G2dCharCanvasClearArea(&m_cc, c, px, py, pw, ph); - RegisterTransferTask(); - } -} - -void -CCanvas::Print(int x, int y, PaletteColor c, const NNSG2dChar* text) -{ - NNS_G2dTextCanvasDrawText( - &m_txn, - x, - y, - c, - DRAWTEXT_FLAG_DEFAULT, - text ); - - RegisterTransferTask(); -} - -void -CCanvas::Printf(int x, int y, PaletteColor c, const NNSG2dChar* text, ...) -{ - std::auto_ptr pLocalBuffer(new wchar_t[LOCAL_BUFFER_LEN]); - va_list args; - - va_start(args, text); - VSNWPrintf(pLocalBuffer.get(), LOCAL_BUFFER_LEN, text, args); - va_end(args); - - Print(x, y, c, pLocalBuffer.get()); -} - - -void -CCanvas::RegisterTransferTask() -{ - if( ! m_bTransferRegsitered ) - { - NNS_GfdRegisterNewVramTransferTask( - m_transType, - m_transOffset, - m_offscreen, - sizeof(m_offscreen) ); - - m_bTransferRegsitered = true; - } -} - -void -CCanvas::ResetTransferTask() -{ - m_bTransferRegsitered = false; -} - - -std::wstring -CCanvas::WrapText(std::wstring text, int width) -{ - int textWidth = 0; - - for( u32 i = 0; i < text.length(); ++i ) - { - const int charWidth = NNS_G2dFontGetCharWidth(m_pFont, text[i]); - - if( text[i] == L'\n' ) - { - textWidth = 0; - } - else if( (textWidth > 0) && ((textWidth + charWidth) > width) ) - { - text.insert(i - 1, 1, L'\n'); - textWidth = 0; - } - else - { - textWidth += charWidth + TEXT_HSPACE; - } - } - - return text; -} - - - -} -// end of namespace tlib diff --git a/build/tests/WirelessChecker/src/util/canvas.h b/build/tests/WirelessChecker/src/util/canvas.h deleted file mode 100644 index 0e6c7781..00000000 --- a/build/tests/WirelessChecker/src/util/canvas.h +++ /dev/null @@ -1,78 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: Canvas.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef TLIB_CONTROL_CANVAS_H_ -#define TLIB_CONTROL_CANVAS_H_ - -#define NNS_G2D_UNICODE -#include -#include -#include -#include -#include "util.h" - -namespace util -{ - -class CCanvas -{ -private: - static const int CANVAS_WIDTH = 32; - static const int CANVAS_HEIGHT = 24; - static const int CANVAS_LEFT = 0; - static const int CANVAS_TOP = 0; - static const int TEXT_HSPACE = 1; - static const int TEXT_VSPACE = 1; - static const int CANVAS_CHARACTER_OFFSET = 1; - - static const int LOCAL_BUFFER_LEN = 1024; - - static const u32 DRAWTEXT_FLAG_DEFAULT = ( NNS_G2D_VERTICALORIGIN_TOP - | NNS_G2D_HORIZONTALORIGIN_LEFT - | NNS_G2D_HORIZONTALALIGN_LEFT ); - -private: - NNSG2dCharCanvas m_cc; - NNSG2dTextCanvas m_txn; - GXCharFmt16 m_offscreen[32 * 24]; - const NNSG2dFont* m_pFont; - NNS_GFD_DST_TYPE m_transType; - u32 m_transOffset; - bool m_bTransferRegsitered; - -public: - CCanvas(); - ~CCanvas(); - -public: - void Init(NNS_GFD_DST_TYPE type, u32 offset, void* pScrBase, const NNSG2dFont* pFont); - void Clear (PaletteColor c); - void Clear (int x, int y, int w, int h, PaletteColor c); - void Print (int x, int y, PaletteColor c, const NNSG2dChar* text); - void Printf(int x, int y, PaletteColor c, const NNSG2dChar* text, ...); - std::wstring WrapText(std::wstring text, int width); - - void ResetTransferTask(); - -protected: - void RegisterTransferTask(); -}; - -} -// end of namespace tlib - - -#endif // TLIB_CONTROL_CANVAS_H_ diff --git a/build/tests/WirelessChecker/src/util/memory.cpp b/build/tests/WirelessChecker/src/util/memory.cpp deleted file mode 100644 index 5e0d1d57..00000000 --- a/build/tests/WirelessChecker/src/util/memory.cpp +++ /dev/null @@ -1,122 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: Memory.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/memory.h" - - -namespace util -{ - - -namespace -{ - NNSFndHeapHandle shHeap; - NNSFndAllocator sAllocator; - OSMutex sLock; -} - - -void -InitMemory() -{ - u32 arenaLow = MATH_ROUNDUP ((u32)OS_GetMainArenaLo(), 16); - u32 arenaHigh = MATH_ROUNDDOWN((u32)OS_GetMainArenaHi(), 16); - u32 heapSize = arenaHigh - arenaLow; - void* heapMemory = OS_AllocFromMainArenaLo(heapSize, 16); - - shHeap = NNS_FndCreateExpHeap(heapMemory, heapSize); - SDK_ASSERT( shHeap != NNS_FND_HEAP_INVALID_HANDLE ); - - NNS_FndInitAllocatorForExpHeap(&sAllocator, shHeap, 4); - - OS_InitMutex(&sLock); -} - -NNSFndHeapHandle -GetHeapHandle() -{ - return shHeap; -} - -NNSFndAllocator* -GetAllocator() -{ - return &sAllocator; -} - -void* -Alloc(size_t size, int align) -{ - OS_LockMutex(&sLock); - SDK_ASSERT(NNS_FndCheckExpHeap(shHeap, NNS_FND_HEAP_ERROR_PRINT)); - void* p = NNS_FndAllocFromExpHeapEx(shHeap, size, align); - OS_UnlockMutex(&sLock); - - return p; -} - -void -Free(void* ptr) -{ - OS_LockMutex(&sLock); - SDK_ASSERT(NNS_FndCheckExpHeap(shHeap, NNS_FND_HEAP_ERROR_PRINT)); - SDK_ASSERT(NNS_FndCheckForMBlockExpHeap(ptr, shHeap, NNS_FND_HEAP_ERROR_PRINT)); - NNS_FndFreeToExpHeap(shHeap, ptr); - OS_UnlockMutex(&sLock); -} - - -} -// end of namespace util - - - - -//------------ global namespace ------------------------------------ - -void* -operator new(size_t size) -{ - // operator new[] 32 byte ACgۏ؂łȂ̂ - // operator new ł 32 byte ACg͍sȂB - return util::Alloc(size, 4); -} - -void* -operator new[](size_t size) -{ - // operator new[] ł 32 byteACgۏ؂łȂB - return util::Alloc(size, 4); -} - -void -operator delete(void* ptr) -{ - if( ptr != NULL ) - { - util::Free(ptr); - } -} - -void -operator delete[](void* ptr) -{ - if( ptr != NULL ) - { - util::Free(ptr); - } -} diff --git a/build/tests/WirelessChecker/src/util/memory.h b/build/tests/WirelessChecker/src/util/memory.h deleted file mode 100644 index c0e1ed39..00000000 --- a/build/tests/WirelessChecker/src/util/memory.h +++ /dev/null @@ -1,38 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: Memory.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef TLIB_SYSTEM_MEMORY_H_ -#define TLIB_SYSTEM_MEMORY_H_ - -#include -#include - -namespace util -{ - -void InitMemory(); - -NNSFndAllocator* GetAllocator(); -NNSFndHeapHandle GetHeapHandle(); -void* Alloc(size_t size, int align=32); -void Free(void* ptr); - -} -// end of namespace tlib - - - -#endif // TLIB_SYSTEM_MEMORY_H_ diff --git a/build/tests/WirelessChecker/src/util/util.cpp b/build/tests/WirelessChecker/src/util/util.cpp deleted file mode 100644 index 5828b7e8..00000000 --- a/build/tests/WirelessChecker/src/util/util.cpp +++ /dev/null @@ -1,276 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checker - File: util.cpp - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/util.h" -#include "util/canvas.h" -#include "util/memory.h" -#include -#include - -extern u8 font_NFTR_begin[]; -extern u8 font_NFTR_end[]; - -namespace util -{ - GamePad System_GamePadState; - int System_BaseWidth; - int System_LineHeight; - - namespace - { - const int REPEAT_START_FRAME = 15; - const int REPEAT_INTERVAL = 30; - const u32 TASK_ARRAY_NUM = 4; - const int CANVAS_CHARACTER_OFFSET = 1; - - GXRgb COLOR_PALETTE[18] = - { - GX_RGB(26, 26, 26), - GX_RGB(31, 31, 31), - GX_RGB( 0, 0, 0), - - GX_RGB(31, 0, 3), - GX_RGB(30, 28, 0), - GX_RGB(21, 31, 0), - GX_RGB( 6, 23, 30), - GX_RGB( 0, 11, 30), - GX_RGB(25, 23, 1), - GX_RGB(22, 22, 22), - GX_RGB(16, 16, 16), - - GX_RGB(29, 31, 31) - }; - NNSG2dFont sFont; - CCanvas sCanvasMain1; - CCanvas sCanvasMain3; - CCanvas sCanvasSub1; - CCanvas sCanvasSub3; - - NNSGfdVramTransferTask sTaskArray[TASK_ARRAY_NUM]; - - void ClearVram( void ) - { - //--------------------------------------------------------------------------- - // All VRAM banks to LCDC - //--------------------------------------------------------------------------- - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - - //--------------------------------------------------------------------------- - // Clear all LCDC space - //--------------------------------------------------------------------------- - MI_CpuClearFast((void *)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - - //--------------------------------------------------------------------------- - // Disable the banks on LCDC - //--------------------------------------------------------------------------- - (void)GX_DisableBankForLCDC(); - - MI_CpuFillFast((void *)HW_OAM, 192, HW_OAM_SIZE); // clear OAM - MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); // clear the standard palette - - MI_CpuFillFast((void*)HW_DB_OAM, 192, HW_DB_OAM_SIZE); // clear OAM - MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); // clear the standard palette - } - - void InitFont(void* pNFTR) - { - NNS_G2dFontInitUTF16(&sFont, pNFTR); - - System_BaseWidth = NNS_G2dFontGetCellWidth(&sFont) / 2; - System_LineHeight = NNS_G2dFontGetLineFeed(&sFont); - } - - void VBlankIntr(void) - { - OS_SetIrqCheckFlag( OS_IE_V_BLANK ); - } - - - } // namespace - - void WaitVBlankIntr(void) - { - SVC_WaitVBlankIntr(); - } - - void dispOn(void) - { - GX_DispOn(); - GXS_DispOn(); - } - - CCanvas* GetMain1Canvas() { return &sCanvasMain1; } - CCanvas* GetMain3Canvas() { return &sCanvasMain3; } - CCanvas* GetSub1Canvas() { return &sCanvasSub1; } - CCanvas* GetSub3Canvas() { return &sCanvasSub3; } - - void UpdateGamePad(void) - { - u16 status = PAD_Read(); - - System_GamePadState.repeatTrigger = false; - - if( status != 0 ) - { - if( System_GamePadState.button == 0 ) - { - System_GamePadState.beginPress = 0; - } - else - { - System_GamePadState.beginPress++; - const int lapse = System_GamePadState.beginPress - REPEAT_START_FRAME; - - if( lapse >= 0 ) - { - if( (lapse % REPEAT_INTERVAL) == 0 ) - { - System_GamePadState.repeatTrigger = true; - } - } - } - } - - System_GamePadState.trigger = (u16)(status & (status ^ System_GamePadState.button)); - System_GamePadState.release = (u16)(System_GamePadState.button & (status ^ System_GamePadState.button)); - System_GamePadState.button = status; - } - - void UpdateDisplay(void) - { - sCanvasMain1.ResetTransferTask(); - sCanvasMain3.ResetTransferTask(); - sCanvasSub1 .ResetTransferTask(); - sCanvasSub3 .ResetTransferTask(); - NNS_GfdDoVramTransfer(); - } - - void Init() - { - OS_Init(); - FX_Init(); - GX_Init(); - - OS_InitTick(); - OS_InitAlarm(); - - GX_DispOff(); - GXS_DispOff(); - - RTC_Init(); - - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - ClearVram(); - - InitMemory(); - - // assign vram banks - GX_SetBankForBG(GX_VRAM_BG_128_A); - GX_SetBankForOBJ(GX_VRAM_OBJ_16_F); - GX_SetBankForSubBG(GX_VRAM_SUB_BG_128_C); - GX_SetBankForSubOBJ(GX_VRAM_SUB_OBJ_16_I); - GX_SetBankForLCDC(GX_VRAM_LCDC_B); - - // init screen - // BG 1 ݒ - G2_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x0000, // XN[x[X - GX_BG_CHARBASE_0x04000, // LN^x[X - GX_BG_EXTPLTT_01 ); // gpbgXbg - - G2S_SetBG1Control( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x0000, // XN[x[X - GX_BG_CHARBASE_0x04000, // LN^x[X - GX_BG_EXTPLTT_01 ); // gpbgXbg - - // BG 2 ݒ - G2_SetBG2ControlText( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x0800, // XN[x[X - GX_BG_CHARBASE_0x0c000 ); // LN^x[X - - G2S_SetBG2ControlText( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x0800, // XN[x[X - GX_BG_CHARBASE_0x0c000 ); // LN^x[X - - // BG 3 ݒ - G2_SetBG3ControlText( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x1000, // XN[x[X - GX_BG_CHARBASE_0x14000 ); // LN^x[X - - G2S_SetBG3ControlText( - GX_BG_SCRSIZE_TEXT_256x256, // XN[TCY 256x256 - GX_BG_COLORMODE_16, // J[[h 16F - GX_BG_SCRBASE_0x1000, // XN[x[X - GX_BG_CHARBASE_0x14000 ); // LN^x[X - - // BG1/3 Ž - GX_SetVisiblePlane ( GX_PLANEMASK_BG1 | GX_PLANEMASK_BG3 ); - GXS_SetVisiblePlane( GX_PLANEMASK_BG1 | GX_PLANEMASK_BG3 ); - - // BG1/2/3 ̗D揇ʐݒ - G2_SetBG1Priority(3); - G2_SetBG2Priority(2); - G2_SetBG3Priority(1); - G2S_SetBG1Priority(3); - G2S_SetBG2Priority(2); - G2S_SetBG3Priority(1); - - GX_LoadBGPltt(COLOR_PALETTE, 0, sizeof(COLOR_PALETTE)); - GXS_LoadBGPltt(COLOR_PALETTE, 0, sizeof(COLOR_PALETTE)); - - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - GXS_SetGraphicsMode(GX_BGMODE_0); - GX_SetBGScrOffset(GX_BGSCROFFSET_0x00000); - GX_SetBGCharOffset(GX_BGCHAROFFSET_0x00000); - - InitFont(font_NFTR_begin); - - { - const u32 chrOffset = CANVAS_CHARACTER_OFFSET * sizeof(GXCharFmt16); - sCanvasMain1.Init(NNS_GFD_DST_2D_BG1_CHAR_MAIN, chrOffset, G2_GetBG1ScrPtr(), &sFont); - sCanvasMain3.Init(NNS_GFD_DST_2D_BG3_CHAR_MAIN, chrOffset, G2_GetBG3ScrPtr(), &sFont); - sCanvasSub1 .Init(NNS_GFD_DST_2D_BG1_CHAR_SUB, chrOffset, G2S_GetBG1ScrPtr(), &sFont); - sCanvasSub3 .Init(NNS_GFD_DST_2D_BG3_CHAR_SUB, chrOffset, G2S_GetBG3ScrPtr(), &sFont); - - NNS_GfdInitVramTransferManager(sTaskArray, TASK_ARRAY_NUM); - } - - PAD_Read(); - } - - u16 GetPadTrigger() - { - return static_cast(System_GamePadState.button); - } - -} // namespace util - diff --git a/build/tests/WirelessChecker/src/util/util.h b/build/tests/WirelessChecker/src/util/util.h deleted file mode 100644 index a84e4afb..00000000 --- a/build/tests/WirelessChecker/src/util/util.h +++ /dev/null @@ -1,103 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Wireless Checher - File: util.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef WIRELESS_CHECHER_UTIL_H_ -#define WIRELESS_CHECHER_UTIL_H_ - -#include - -namespace util -{ - -const int DEFAULT_COLOR_PALETTE = 0; - -enum PaletteColor -{ - COLOR_NULL=0, - COLOR_WHITE, - COLOR_BLACK, - - COLOR_RED, - COLOR_YELLOW, - COLOR_LIMEGREEN, - COLOR_TURQUOISE, - COLOR_BLUE, - COLOR_BROWN, - COLOR_LIGHTGRAY, - COLOR_DARKGRAY, - - COLOR_GUIDE_BG -}; - -struct GamePad -{ - u16 trigger; - u16 release; - u16 button; - bool repeatTrigger; - u8 padding0; - int beginPress; -}; - -void Init(void); -void WaitVBlankIntr(void); -void dispOn(void); -void UpdateGamePad(void); -void UpdateDisplay(void); - -class CCanvas; -CCanvas* GetMain1Canvas(); -CCanvas* GetMain3Canvas(); -CCanvas* GetSub1Canvas(); -CCanvas* GetSub3Canvas(); - -inline u16 -IsPadDown(u16 key) -{ - extern GamePad System_GamePadState; - return static_cast(System_GamePadState.trigger & key); -} -inline u16 -IsPadUp(u16 key) -{ - extern GamePad System_GamePadState; - return static_cast(System_GamePadState.release & key); -} -inline u16 -IsPadPress(u16 key) -{ - extern GamePad System_GamePadState; - return static_cast(System_GamePadState.button & key); -} -inline u16 -IsPadTrigger(u16 key) -{ - extern GamePad System_GamePadState; - if( System_GamePadState.repeatTrigger ) - { - return IsPadPress(key); - } - else - { - return IsPadDown(key); - } -} - -u16 GetPadTrigger(); - -} // namespace util - -#endif // WIRELESS_CHECHER_UTIL_H_ diff --git a/build/tests/WirelessChecker/src/util/wprintf.cpp b/build/tests/WirelessChecker/src/util/wprintf.cpp deleted file mode 100644 index 35879971..00000000 --- a/build/tests/WirelessChecker/src/util/wprintf.cpp +++ /dev/null @@ -1,387 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: WPrintf.cpp - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "util/wprintf.h" - -namespace util -{ -namespace -{ - /* inner function for sized-buffer output */ - - typedef struct dst_string_tag - { - size_t len; - wchar_t *cur; - wchar_t *base; - } dst_string; - - void - string_put_char(dst_string *p, wchar_t c) - { - if(p->len > 0) *p->cur = c, --p->len; - ++p->cur; - } - - void - string_fill_char(dst_string *p, wchar_t c, int n) - { - if(n > 0) { - size_t i, k = p->len; - if(k > (size_t)n) k = (size_t)n; - for( i = 0 ; i < k ; ++i ) - p->cur[i] = c; - p->len -= k; - p->cur += n; - } - } - - void - string_put_string(dst_string *p, const wchar_t *s, int n) - { - if(n > 0) { - size_t i, k = p->len; - if(k > (size_t)n) k = (size_t)n; - for( i = 0 ; i < k ; ++i ) - p->cur[i] = s[i]; - p->len -= k; - p->cur += n; - } - } -} - -// based on OS_VSNPrintf - -/*---------------------------------------------------------------------------* - Name: OS_VSNPrintf - - Description: small-size vsnprintf which is similar to 'vsnprintf' - without following supports. - * CodeWarrior Extensions (#s) - * MSL AltiVec Extensions (v, vh, vl, hv, lv, @) - * indexed argments (%m$, *m$) - * floating-point - * wchar_t - - Note: '+' and '#' do not work, MSL's sprintf(). - to keep same result, they are no implement. - { // exsample - wchar_t buf[5]; - sprintf(buf, "%-i\n", 45); // "45" (OK) - sprintf(buf, "%0i\n", 45); // "45" (OK) - sprintf(buf, "% i\n", 45); // " 45" (OK) - sprintf(buf, "%+i\n", 45); // "%+i" ("+45" expected) - sprintf(buf, "%#x\n", 45); // "%#x" ("0x2d" expected) - // but, this works correctly! - sprintf(buf, "% +i\n", 45); // "+45" (OK) - } - - Arguments: dst : destination buffer. - len : destination buffer size. - fmt : format string. - vlist : parameters. - - Returns: length of the generated string. (except '\0') - if(result < len), - put NUL in dst[result]. - else if(len > 0), - put NUL in dst[len - 1]. - else, - do nothing. - *---------------------------------------------------------------------------*/ -int -VSNWPrintf(wchar_t *dst, size_t len, const wchar_t *fmt, va_list vlist) -{ - wchar_t buf[24]; - int n_buf; - wchar_t prefix[2]; - int n_prefix; - - const wchar_t *s = fmt; - - dst_string str; - str.len = len, str.cur = str.base = dst; - - while(*s) { - if(*s != L'%') { - /* normal character */ - string_put_char(&str, *s++); - } else { - /* output with format */ - enum { - flag_blank = 000001, /* L' ' */ - flag_plus = 000002, /* L'+' */ - flag_sharp = 000004, /* L'#' */ - flag_minus = 000010, /* L'-' */ - flag_zero = 000020, /* L'0' */ - flag_l1 = 000040, /* "l" */ - flag_h1 = 000100, /* "h" */ - flag_l2 = 000200, /* "ll" */ - flag_h2 = 000400, /* "hh" */ - flag_unsigned = 010000, /* L'o', L'u', ... */ - flag_end } ; - int flag = 0, width = 0, precision = -1, radix = 10; - wchar_t hex_char = L'a' - 10; - const wchar_t *p_start = s; - /* flags */ - for( ; ; ) { - switch(*++s) { - case L'+':if(s[-1] != L' ') break; - flag |= flag_plus; continue; - case L' ':flag |= flag_blank;continue; - case L'-':flag |= flag_minus;continue; - case L'0':flag |= flag_zero; continue; - } - break; - } - /* width */ - if(*s == L'*') { - ++s, width = va_arg(vlist, int); - if(width < 0) - width = -width, flag |= flag_minus; - } else { - while((*s >= L'0') && (*s <= L'9')) - width = (width * 10) + *s++ - L'0'; - } - /* precision */ - if(*s == L'.') { - ++s, precision = 0; - if(*s == L'*') { - ++s, precision = va_arg(vlist, int); - if(precision < 0) precision = -1; - } else { - while((*s >= L'0') && (*s <= L'9')) - precision = (precision * 10) + *s++ - L'0'; - } - } - /* option */ - switch(*s) { - case L'h': - if(*++s != L'h') flag |= flag_h1; - else ++s, flag |= flag_h2; - break; - case L'l': - if(*++s != L'l') flag |= flag_l1; - else ++s, flag |= flag_l2; - break; - } - - /* type */ - switch(*s) { - case L'd': /* signed decimal */ - case L'i': /* signed decimal */ - goto put_integer; - case L'o': /* unsigned octal */ - radix = 8; - flag |= flag_unsigned; - goto put_integer; - case L'u': /* unsigned decimal */ - flag |= flag_unsigned; - goto put_integer; - case L'X': /* unsigned hexadecimal */ - hex_char = L'A' - 10; - goto put_hexadecimal; - case L'x': /* unsigned hexadecimal */ - goto put_hexadecimal; - case L'p': /* pointer */ - /* equal to code warrior */ - flag |= flag_sharp; - precision = 8; - goto put_hexadecimal; - - case L'c': /* character */ - if(precision >= 0) - goto put_invalid; - { - int c = va_arg(vlist, int); - width -= 1; - if(flag & flag_minus) { - string_put_char(&str, (wchar_t)c); - string_fill_char(&str, L' ', width); - } else { - wchar_t pad = (wchar_t)( - (flag & flag_zero) ? L'0' : L' '); - string_fill_char(&str, pad, width); - string_put_char(&str, (wchar_t)c); - } - ++s; - } - break; - - case L's': /* string */ - { - int n_buf = 0; - const wchar_t *p_buf = va_arg(vlist, const wchar_t*); - if(precision < 0) { - while(p_buf[n_buf]) - ++n_buf; - } else { - while((n_buf < precision) && p_buf[n_buf]) - ++n_buf; - } - width -= n_buf; - if(flag & flag_minus) { - string_put_string(&str, p_buf, n_buf); - string_fill_char(&str, L' ', width); - } else { - wchar_t pad = (wchar_t)( - (flag & flag_zero) ? L'0' : L' '); - string_fill_char(&str, pad, width); - string_put_string(&str, p_buf, n_buf); - } - ++s; - } - break; - - case L'n': /* store the number of output */ - { - int pos = str.cur - str.base; - if(flag & flag_h2) - ; - else if(flag & flag_h1) - *va_arg(vlist, signed short*) = (signed short)pos; - else if(flag & flag_l2) - *va_arg(vlist, u64*) = (u64)pos; - else - *va_arg(vlist, signed int*) = (signed int)pos; - } - ++s; - break; - - case L'%': /* output L'%' */ - if(p_start + 1 != s) - goto put_invalid; - string_put_char(&str, *s++); - break; - - default: /* invalid type */ - goto put_invalid; - -put_invalid: - string_put_string(&str, p_start, s - p_start); - break; - -put_hexadecimal: - radix = 16; - flag |= flag_unsigned; -put_integer: - { - u64 val = 0; - n_prefix = 0; - - if(flag & flag_minus) - flag &= ~flag_zero; - if(precision < 0) precision = 1; - else flag &= ~flag_zero; - - if(flag & flag_unsigned) { - if(flag & flag_h2) - val = va_arg(vlist, wchar_t); - else if(flag & flag_h1) - val = va_arg(vlist, unsigned short); - else if(flag & flag_l2) - val = va_arg(vlist, u64); - else - val = va_arg(vlist, unsigned long); - flag &= ~(flag_plus | flag_blank); - if(flag & flag_sharp) { - if(radix == 16) { - if(val != 0) { - prefix[0] = (wchar_t)(hex_char + (10 + L'x' - L'a')); - prefix[1] = L'0'; - n_prefix = 2; - } - } else if(radix == 8) { - prefix[0] = L'0'; - n_prefix = 1; - } - } - } else { - if(flag & flag_h2) - val = va_arg(vlist, wchar_t); - else if(flag & flag_h1) - val = va_arg(vlist, short); - else if(flag & flag_l2) - val = va_arg(vlist, u64); - else - val = va_arg(vlist, long); - if((val >> 32) & 0x80000000) { - val = ~val + 1; - prefix[0] = L'-'; - n_prefix = 1; - } else { - if(val || precision) { - if(flag & flag_plus) { - prefix[0] = L'+'; - n_prefix = 1; - } else - if(flag & flag_blank) { - prefix[0] = L' '; - n_prefix = 1; - } - } - } - } - n_buf = 0; - while(val != 0) { - int d = (int)(val % radix); - val /= radix; - buf[n_buf++] = (wchar_t)((d < 10) ? - (d + L'0') : (d + hex_char)); - } - if((n_prefix > 0) && (prefix[0] == L'0')) { - n_prefix = 0; - buf[n_buf++] = L'0'; - } - } - goto put_to_stream; - -put_to_stream: - { - int n_pad = precision - n_buf; - if(flag & flag_zero) { - if(n_pad < width - n_buf - n_prefix) - n_pad = width - n_buf - n_prefix; - } - if(n_pad > 0) width -= n_pad; - width -= n_prefix + n_buf; - if(!(flag & flag_minus)) - string_fill_char(&str, L' ', width); - while(n_prefix > 0) - string_put_char(&str, prefix[--n_prefix]); - string_fill_char(&str, L'0', n_pad); - while(n_buf > 0) - string_put_char(&str, buf[--n_buf]); - if(flag & flag_minus) - string_fill_char(&str, L' ', width); - ++s; - } - break; - } - } - } - - if(str.len > 0) - *str.cur = '\0'; - else if(len > 0) - str.base[len - 1] = '\0'; - return str.cur - str.base; -} - - -} -// end of namespace tlib diff --git a/build/tests/WirelessChecker/src/util/wprintf.h b/build/tests/WirelessChecker/src/util/wprintf.h deleted file mode 100644 index d63dff9f..00000000 --- a/build/tests/WirelessChecker/src/util/wprintf.h +++ /dev/null @@ -1,100 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - Nmenu - File: WPrintf.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef TLIB_SYSTEM_WPRINTF_H_ -#define TLIB_SYSTEM_WPRINTF_H_ - - - -namespace util -{ - -int VSNWPrintf(wchar_t *dst, size_t len, const wchar_t *fmt, va_list vlist); - - -/*---------------------------------------------------------------------------* - Name: OS_SNPrintf - - Description: equal to 'OS_VSNPrintf' except argument style. - - Arguments: dst : destination buffer. - len : destination buffer size. - fmt : format string. - - Returns: length of the generated string. (except '\0') - if(result < len), - put NUL in dst[result]. - else if(len > 0), - put NUL in dst[len - 1]. - else, - do nothing. - *---------------------------------------------------------------------------*/ -inline int -SNWPrintf(wchar_t *dst, size_t len, const wchar_t *fmt, ...) -{ - int ret; - va_list va; - va_start(va, fmt); - ret = VSNWPrintf(dst, len, fmt, va); - va_end(va); - return ret; -} - -/*---------------------------------------------------------------------------* - Name: OS_VSPrintf - - Description: equal to 'OS_VSNPrintf' except buffer size argument. - - Arguments: dst : destination buffer. - fmt : format string. - vlist : parameters. - - Returns: length of the generated string. - *---------------------------------------------------------------------------*/ -inline int -VSWPrintf(wchar_t *dst, const wchar_t *fmt, va_list vlist) -{ - return VSNWPrintf(dst, 0x7FFFFFFF, fmt, vlist); -} - -/*---------------------------------------------------------------------------* - Name: OS_SPrintf - - Description: equal to 'OS_VSPrintf' except argument style. - - Arguments: dst : destination buffer. - fmt : format string. - - Returns: length of the generated string. - *---------------------------------------------------------------------------*/ -inline int -SWPrintf(wchar_t *dst, const wchar_t *fmt, ...) -{ - int ret; - va_list va; - va_start(va, fmt); - ret = VSWPrintf(dst, fmt, va); - va_end(va); - return ret; -} - - -} -// end of namespace tlib - - - -#endif // TLIB_SYSTEM_WPRINTF_H_ diff --git a/build/tests/build4WLDev/Makefile b/build/tests/build4WLDev/Makefile deleted file mode 100644 index 561282d0..00000000 --- a/build/tests/build4WLDev/Makefile +++ /dev/null @@ -1,146 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -# force to build for debugger -export SYSM_BUILD_FOR_DEBUGGER = TRUE - -# SDK configuration for export -override TWL_ARCHGEN := LIMITED -overrice TWL_CODEGEN := THUMB -export TWL_ARCHGEN -export OBJDIR = ./obj.WLAN/$(TWL_BUILDTYPE) -export DEPENDDIR = ./depend.WLAN/$(TWL_BUILDTYPE) -export LIBDIR = ./lib.WLAN/$(TWL_BUILDTYPE) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -export LDIRT_CLEAN = ./obj.WLAN ./depend.WLAN ./lib.WLAN - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher -MACHINESETTINGS_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/MachineSettings -WLANFIRM_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/wlanfirm -DS_HASH_TABLE = $(SYSMENU_ROOT)/build/systemMenu_RED/DSHashTable -SHARED_FONT_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/sharedFont -NANDFIRM_DIR = $(SYSMENU_ROOT)/build/nandfirm/menu-launcher - -SYSTEMUPDATER_DIR = $(SYSMENU_ROOT)/build/systemMenu_tools/SystemUpdaterRegionSelect - -# ۂɏ݂t@C̒uĂdatatH_w -export UPDATER_HOST_ROOT_DIR = $(call empath,$(SYSMENU_ROOT)/build/tests/build4WLDev/data_sysmenu) - -SUBMAKES = $(SYSMENU_ROOT)/build/libraries_sysmenu/Makefile \ - \ - $(LAUNCHER_DIR)/banner/Makefile \ - $(LAUNCHER_DIR)/ARM9/Makefile_autogen_HNAJ \ - $(LAUNCHER_DIR)/ARM9/Makefile_autogen_HNAE \ - $(SYSTEMUPDATER_DIR)/banner/Makefile \ - $(SYSTEMUPDATER_DIR)/ARM7.TWL/Makefile \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/Makefile_autogen - -# COMPILE SWITCH for build SystemMenu - -export SYSM_UPDATER_RELEASE = TRUE - -export SYSM_DO_NOT_SHOW_LAUNCHER = FALSE -export SYSM_DISABLE_WDS_SCAN = FALSE - -############################################# -# For Wireless development -# - -# disable signature check -export SYSM_IGNORE_WLFIRM_SIGNCHECK = TRUE - -export SYSM_DISABLE_WLFIRM_LOAD = FALSE -export SYSM_DISABLE_INITIAL_SETTINGS = TRUE -export SYSM_OUTSIDE_UI = TRUE - -export SYSM_DEV_WHITELIST_CHECK_SKIP = TRUE - -export SYSM_BUILD_FOR_PRODUCTION_TEST = FALSE - -# MAKEROM SWITCH for build SystemMenu -export SYSM_DISABLE_DEBUG = TRUE -export SYSM_USE_WLANFIRM_LOCAL_PUBKEY = FALSE - -# Option for SystemUpdater -export IGNORE_VERSION_CHECK = TRUE - -############################################# -# inhibit reentrant - -FIRST_CALL ?= TRUE -SKIP_SUBDIR ?= TRUE - -DATE_AND_TIME ?= $(shell date +"%y%m%d %H%M") - -DATE ?= $(word 1,$(DATE_AND_TIME)) -TIME ?= $(word 2,$(DATE_AND_TIME)) -TIME_NOZERO = $(shell echo $(TIME) | sed -e 's/^0*\(.\)/\1/') - -ifneq ($(FIRST_CALL),TRUE) -INSTALL_TARGETS = $(SYSTEMUPDATER_DIR)/ARM9.TWL/bin/$(TWL_BUILDTYPE)/SystemUpdater.srl -INSTALL_DIR = . -endif - -GDIRT_INSTALLED += ./$(notdir $(subst .srl,_WL_$(DATE)_*.srl,$(INSTALL_TARGETS))) - -#---------------------------------------------------------------------------- - -do-build: do-core -clean: cl-core -clobber: cl-core - -do-build: MY_TARGET=default -clean: MY_TARGET=clean -clobber: MY_TARGET=clobber - -do-core: -ifeq ($(FIRST_CALL),TRUE) - @echo Enter remake SKIP_SUBDIR=$(SKIP_SUBDIR) - +$(REMAKE) -C ./scripts SKIP_SUBDIR=FALSE $(MY_TARGET) - +$(REMAKE) FIRST_CALL=FALSE SKIP_SUBDIR=FALSE $(MY_TARGET) -endif - -cl-core: -ifeq ($(FIRST_CALL),TRUE) - +$(REMAKE) FIRST_CALL=FALSE SKIP_SUBDIR=FALSE $(MY_TARGET) - +$(REMAKE) -C ./scripts SKIP_SUBDIR=FALSE $(MY_TARGET) -endif - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -# Override generic DO_INSTALL -define DO_INSTALL - $(INSTALL) -d $(INSTALL_DIR) $(AND) \ - $(foreach FILE, $(INSTALL_TARGETS), \ - if [ ! -e $(INSTALL_DIR)/$(FILE) -o \ - $(FILE) -nt $(INSTALL_DIR)/$(FILE) ]; \ - then \ - $(ECHO) " install: $(FILE) -> $(subst .srl,_WL_$(DATE)_$(TIME).srl,$(FILE))" $(AND) \ - $(INSTALL) $(FILE) $(INSTALL_DIR)/$(notdir $(subst .srl,_WL_$(DATE)_$(TIME).srl,$(FILE))); \ - fi $(AND) ) $(TRUE) -endef - -test: - @echo SKIP_SUBDIR=$(SKIP_SUBDIR) -#===== End of Makefile ===== diff --git a/build/tests/build4WLDev/Makefile_environment b/build/tests/build4WLDev/Makefile_environment deleted file mode 100644 index d11a6952..00000000 --- a/build/tests/build4WLDev/Makefile_environment +++ /dev/null @@ -1,41 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -# force to build for debugger -export SYSM_BUILD_FOR_DEBUGGER = TRUE - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -# skip demos -export NITRO_WITHOUT_DEMOS = TRUE -export TWL_WITHOUT_DEMOS = TRUE - -override TWLSYSTEM_ROOT= -export TWLSYSTEM_ROOT - -SUBDIRS = $(ROOT) \ - $(NITROSYSTEM_ROOT) \ - - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/build4WLDev/Makefile_old b/build/tests/build4WLDev/Makefile_old deleted file mode 100644 index dc98d6a4..00000000 --- a/build/tests/build4WLDev/Makefile_old +++ /dev/null @@ -1,144 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -# force to build for debugger -export SYSM_BUILD_FOR_DEBUGGER = TRUE - -# SDK configuration for export -override TWL_ARCHGEN := LIMITED -export TWL_ARCHGEN -export OBJDIR = ./obj.WLAN/$(TWL_BUILDTYPE) -export DEPENDDIR = ./depend.WLAN/$(TWL_BUILDTYPE) -export LIBDIR = ./lib.WLAN/$(TWL_BUILDTYPE) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -export LDIRT_CLEAN = ./obj.WLAN ./depend.WLAN ./lib.WLAN - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher -MACHINESETTINGS_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/MachineSettings -WLANFIRM_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/wlanfirm -DS_HASH_TABLE = $(SYSMENU_ROOT)/build/systemMenu_RED/DSHashTable -SHARED_FONT_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/sharedFont -NANDFIRM_DIR = $(SYSMENU_ROOT)/build/nandfirm/menu-launcher - -SYSTEMUPDATER_DIR = $(SYSMENU_ROOT)/build/systemMenu_tools/SystemUpdater - -# ۂɏ݂t@C̒uĂdatatH_w -export UPDATER_HOST_ROOT_DIR = $(call empath,$(SYSTEMUPDATER_DIR)/data) - -ifdef BUILD_TWLSDK -SUBMAKES += Makefile_environment -endif - -SUBMAKES += $(SYSMENU_ROOT)/build/tools/Makefile \ - $(SYSMENU_ROOT)/build/libraries/Makefile \ - $(SYSMENU_ROOT)/build/libraries_sysmenu/Makefile_autogen \ - \ - $(LAUNCHER_DIR)/Makefile_autogen \ - $(MACHINESETTINGS_DIR)/Makefile_autogen \ - $(WLANFIRM_DIR)/Makefile \ - $(DS_HASH_TABLE)/Makefile \ - $(SHARED_FONT_DIR)/Makefile \ - $(NANDFIRM_DIR)/Makefile \ - $(SYSTEMUPDATER_DIR)/data/Makefile \ - $(SYSTEMUPDATER_DIR)/banner/Makefile \ - $(SYSTEMUPDATER_DIR)/ARM7.TWL/Makefile \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/Makefile - -# COMPILE SWITCH for build SystemMenu - -export SYSM_UPDATER_RELEASE = TRUE - -export SYSM_DO_NOT_SHOW_LAUNCHER = TRUE -export SYSM_DISABLE_WDS_SCAN = FALSE - -############################################# -# For Wireless development -# - -# disable signature check -export SYSM_IGNORE_WLFIRM_SIGNCHECK = TRUE - -export SYSM_DISABLE_WLFIRM_LOAD = FALSE -export SYSM_DISABLE_INITIAL_SETTINGS = TRUE -export SYSM_OUTSIDE_UI = TRUE - -export SYSM_DEV_WHITELIST_CHECK_SKIP = TRUE - -export SYSM_BUILD_FOR_PRODUCTION_TEST = FALSE - -# MAKEROM SWITCH for build SystemMenu -export SYSM_DISABLE_DEBUG = TRUE -export SYSM_USE_WLANFIRM_LOCAL_PUBKEY = FALSE - -DATE_AND_TIME ?= $(shell date +"%y%m%d %H%M") - -DATE ?= $(word 1,$(DATE_AND_TIME)) -TIME ?= $(word 2,$(DATE_AND_TIME)) -TIME_NOZERO = $(shell echo $(TIME) | sed -e 's/^0*\(.\)/\1/') - -INSTALL_TARGETS = $(SYSTEMUPDATER_DIR)/ARM9.TWL/bin/$(TWL_BUILDTYPE)/SystemUpdater.srl -INSTALL_DIR = . - -GDIRT_INSTALLED += ./$(notdir $(subst .srl,_WL_$(DATE)_*.srl,$(INSTALL_TARGETS))) - -#---------------------------------------------------------------------------- - -SKIP_SUBDIR ?= TRUE - -do-build: do-core -clean: cl-core -clobber: cl-core - -do-build: MY_TARGET=default -clean: MY_TARGET=clean -clobber: MY_TARGET=clobber - -do-core: -ifeq ($(SKIP_SUBDIR),TRUE) - +$(REMAKE) -C ./scripts SKIP_SUBDIR=FALSE $(MY_TARGET) - +$(REMAKE) SKIP_SUBDIR=FALSE $(MY_TARGET) -endif - -cl-core: -ifeq ($(SKIP_SUBDIR),TRUE) - +$(REMAKE) SKIP_SUBDIR=FALSE $(MY_TARGET) - +$(REMAKE) -C ./scripts SKIP_SUBDIR=FALSE $(MY_TARGET) -endif - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -# Override generic DO_INSTALL -define DO_INSTALL - $(INSTALL) -d $(INSTALL_DIR) $(AND) \ - $(foreach FILE, $(INSTALL_TARGETS), \ - if [ ! -e $(INSTALL_DIR)/$(FILE) -o \ - $(FILE) -nt $(INSTALL_DIR)/$(FILE) ]; \ - then \ - $(ECHO) " install: $(FILE) -> $(subst .srl,_WL_$(DATE)_$(TIME).srl,$(FILE))" $(AND) \ - $(INSTALL) $(FILE) $(INSTALL_DIR)/$(notdir $(subst .srl,_WL_$(DATE)_$(TIME).srl,$(FILE))); \ - fi $(AND) ) $(TRUE) -endef - - -#===== End of Makefile ===== diff --git a/build/tests/build4WLDev/readme.txt b/build/tests/build4WLDev/readme.txt deleted file mode 100644 index 14f75eb3..00000000 --- a/build/tests/build4WLDev/readme.txt +++ /dev/null @@ -1,26 +0,0 @@ -* JpSystemUpdater - -1. esystemMenut@C̗p - -TwlIPL/build/tests/build4WLDev ̒Ɉȉ̃fBNg\ -systemMenu֘At@CpӂĂB(HNA*.tad͏ĂB) - -RegiońAJapanAmericâ݂T|[gAJ@ɂ͑ΉĂ܂B - -data_sysmenu - +debugger - l +america/* - l +japan/* - -L*ɂ́A -HNA*.tadȊȎStadnandt@[ƃtHgf[^uĂB - - -2.SystemUpdater̃rh - -TwlIPL/build/tests/build4WLDev makesĂB -TwlIPL_privateKvłB - -ŏIIɁAȉ̂悤ȓtԃ^O‚SystemUpdaterfBNgɍ쐬܂B - -SystemUpdater_WL_yymmdd_hhmm.srl diff --git a/build/tests/build4WLDev/scripts/Makefile b/build/tests/build4WLDev/scripts/Makefile deleted file mode 100644 index 919866fa..00000000 --- a/build/tests/build4WLDev/scripts/Makefile +++ /dev/null @@ -1,74 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher - -SYSMENU_LIBRARIES_DIR = $(SYSMENU_ROOT)/build/libraries_sysmenu - -SYSTEMUPDATER_DIR = $(SYSMENU_ROOT)/build/systemMenu_tools/SystemUpdaterRegionSelect - -SCRIPTS_DIR = ./ - -MAKEFILES_ORG = $(LAUNCHER_DIR)/ARM9/Makefile -MAKE_MAKEFILES = $(SCRIPTS_DIR)/launcher_makefile_region.pl -AUTOGEN_MAKEFILES = $(LAUNCHER_DIR)/ARM9/Makefile_autogen_HNAJ $(LAUNCHER_DIR)/ARM9/Makefile_autogen_HNAE - -LDIRT_CLEAN += $(AUTOGEN_MAKEFILES) - -LOADWLAN_ORG = $(LAUNCHER_DIR)/ARM9/src/loadWlanFirm.c -MAKE_LOADWLAN = $(SCRIPTS_DIR)/launcher_loadWlanFirm_c.pl -AUTOGEN_LOADWLAN = $(LAUNCHER_DIR)/ARM9/src/loadWlanFirm_autogen.c -LDIRT_CLEAN += $(AUTOGEN_LOADWLAN) - -SYSUP_ORG = $(SYSTEMUPDATER_DIR)/ARM9.TWL/src/process_check_console.c \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/src/process_select_region.c \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/Makefile -MAKE_SYSUP = $(SCRIPTS_DIR)/systemupdater_source.pl -AUTOGEN_SYSUP = $(SYSTEMUPDATER_DIR)/ARM9.TWL/src/process_check_console_autogen.c \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/src/process_select_region_autogen.c \ - $(SYSTEMUPDATER_DIR)/ARM9.TWL/Makefile_autogen -LDIRT_CLEAN += $(AUTOGEN_SYSUP) - - -TARGETS = $(AUTOGEN_MAKEFILES) $(AUTOGEN_LOADWLAN) $(AUTOGEN_SYSUP) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -$(AUTOGEN_MAKEFILES): $(MAKEFILES_ORG) $(MAKE_MAKEFILES) - @echo " make:" $@ - @perl $(MAKE_MAKEFILES) - -$(AUTOGEN_LOADWLAN): $(LOADWLAN_ORG) $(MAKE_LOADWLAN) - @echo " make:" $@ - @perl $(MAKE_LOADWLAN) - -$(AUTOGEN_SYSUP): $(SYSUP_ORG) $(MAKE_SYSUP) - @echo " make:" $@ - @perl $(MAKE_SYSUP) - - -#===== End of Makefile ===== diff --git a/build/tests/build4WLDev/scripts/Makefile_old b/build/tests/build4WLDev/scripts/Makefile_old deleted file mode 100644 index 481ac3b3..00000000 --- a/build/tests/build4WLDev/scripts/Makefile_old +++ /dev/null @@ -1,87 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: SystemUpdater -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LAUNCHER_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher -MACHINESETTINGS_DIR = $(SYSMENU_ROOT)/build/systemMenu_RED/MachineSettings - -SYSMENU_LIBRARIES_DIR = $(SYSMENU_ROOT)/build/libraries_sysmenu - -SYSTEMUPDATER_DIR = $(SYSMENU_ROOT)/build/systemMenu_tools/SystemUpdater - -SCRIPTS_DIR = ./ - -MAKEFILES_ORG = $(LAUNCHER_DIR)/Makefile $(LAUNCHER_DIR)/ARM9/Makefile \ - $(MACHINESETTINGS_DIR)/Makefile $(MACHINESETTINGS_DIR)/ARM9/Makefile -MAKE_MAKEFILES = $(SCRIPTS_DIR)/launcher_makefile.pl -AUTOGEN_MAKEFILES = $(LAUNCHER_DIR)/Makefile_autogen $(LAUNCHER_DIR)/ARM9/Makefile_autogen \ - $(MACHINESETTINGS_DIR)/Makefile_autogen $(MACHINESETTINGS_DIR)/ARM9/Makefile_autogen - -LDIRT_CLEAN += $(AUTOGEN_MAKEFILES) - -LOADWLAN_ORG = $(LAUNCHER_DIR)/ARM9/src/loadWlanFirm.c -MAKE_LOADWLAN = $(SCRIPTS_DIR)/launcher_loadWlanFirm_c.pl -AUTOGEN_LOADWLAN = $(LAUNCHER_DIR)/ARM9/src/loadWlanFirm_autogen.c -LDIRT_CLEAN += $(AUTOGEN_LOADWLAN) - -MACHSETTING_ORG = $(MACHINESETTINGS_DIR)/ARM9/src/MachineSetting.c -MAKE_MACHSETTING = $(SCRIPTS_DIR)/launcher_MachineSetting_c.pl -AUTOGEN_MACHSETTING = $(MACHINESETTINGS_DIR)/ARM9/src/MachineSetting_autogen.c -LDIRT_CLEAN += $(AUTOGEN_MACHSETTING) - -NWM_ORG = $(SYSMENU_LIBRARIES_DIR)/Makefile \ - $(SYSMENU_LIBRARIES_DIR)/nwm/Makefile \ - $(SYSMENU_LIBRARIES_DIR)/nwm/ARM7/Makefile \ - $(ROOT)/build/libraries/wm/ARM7.TWL/nwm/src/nwmsp_event_handler.c -MAKE_NWM = $(SCRIPTS_DIR)/launcher_fake_macaddress.pl -AUTOGEN_NWM = $(SYSMENU_LIBRARIES_DIR)/Makefile_autogen \ - $(SYSMENU_LIBRARIES_DIR)/nwm/Makefile_autogen \ - $(SYSMENU_LIBRARIES_DIR)/nwm/ARM7/Makefile_autogen \ - $(ROOT)/build/libraries/wm/ARM7.TWL/nwm/src/nwmsp_event_handler_autogen.c -LDIRT_CLEAN += $(AUTOGEN_NWM) - - -TARGETS = $(AUTOGEN_MAKEFILES) $(AUTOGEN_LOADWLAN) $(AUTOGEN_MACHSETTING) $(AUTOGEN_NWM) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -$(AUTOGEN_MAKEFILES): $(MAKEFILES_ORG) $(MAKE_MAKEFILES) - @echo " make:" $@ - @perl $(MAKE_MAKEFILES) - -$(AUTOGEN_LOADWLAN): $(LOADWLAN_ORG) $(MAKE_LOADWLAN) - @echo " make:" $@ - @perl $(MAKE_LOADWLAN) - -$(AUTOGEN_MACHSETTING): $(MACHSETTING_ORG) $(MAKE_MACHSETTING) - @echo " make:" $@ - @perl $(MAKE_MACHSETTING) - -$(AUTOGEN_NWM): $(NWM_ORG) $(MAKE_NWM) - @echo " make:" $@ - @perl $(MAKE_NWM) - -#===== End of Makefile ===== diff --git a/build/tests/build4WLDev/scripts/launcher_MachineSetting_c.pl b/build/tests/build4WLDev/scripts/launcher_MachineSetting_c.pl deleted file mode 100755 index 0d4e890a..00000000 --- a/build/tests/build4WLDev/scripts/launcher_MachineSetting_c.pl +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: launcher_MachineSetting_c.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $src = "$IPLROOT/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c"; -my $dst = "$IPLROOT/build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting_autogen.c"; - -my $rn = "\x0D\x0A"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - print OUT $line; - # ]łƂ̌ڂ̋ʂ̂߂ɁAJp̕\ljB - if( $line =~ m/^[\t ]*PrintfSJIS\(.*\"MACHINE SETTINGS IPL:%s SDK:%s\".*\);/ ) - { - print OUT "//\t[AUTO ADDITION] ]łƂ̌ڂ̋ʂ̂߂ɁAJp̕\\ljB", $rn; - print OUT "\tPrintfSJIS( 0, 22*8, TXT_COLOR_BLUE, \"[ BUILT FOR WIRELESS DEVELOPMENT ]\");", $rn; - } -} -close(OUT); - diff --git a/build/tests/build4WLDev/scripts/launcher_fake_macaddress.pl b/build/tests/build4WLDev/scripts/launcher_fake_macaddress.pl deleted file mode 100755 index 4480c292..00000000 --- a/build/tests/build4WLDev/scripts/launcher_fake_macaddress.pl +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: launcher_fake_macaddress.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $rn = "\x0D\x0A"; - -my $SDKROOT; - -# search TWLSDK_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWLSDK_ROOT/s) { - $SDKROOT = $ENV{$_}; - } -} - -my $src = "$SDKROOT/build/libraries/wm/ARM7.TWL/nwm/src/nwmsp_event_handler.c"; -my $dst = "$SDKROOT/build/libraries/wm/ARM7.TWL/nwm/src/nwmsp_event_handler_autogen.c"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^ *MI_CpuCopy8\(ev->macaddr, sys->status->macAddress, NWM_SIZE_MACADDR\);/ ) - { - print OUT "//\t\t[AUTO COMMENT] fake MAC address of TWL wireless, copy MAC address from that in NOR flash.", $rn; - # add comment out at the top of line - $line =~ s/ev->macaddr,/wmMac,/; - } - - print OUT $line; -} -close(OUT); - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $src_make1 = "$IPLROOT/build/libraries_sysmenu/Makefile"; -my $dst_make1 = "$IPLROOT/build/libraries_sysmenu/Makefile_autogen"; - -open(F, $src_make1) or die "cant open $src_make1\n"; -my @lines = ; -close(F); - -open(OUT, ">$dst_make1") or die "cant open $dst_make1\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^SUBDIRS/ ) - { - print OUT "SUBMAKES\t\t=\t\tnwm/Makefile_autogen", $rn, $rn; - } - - if( $line =~ m/nwm/ ) - { - $line =~ s/^/\#/; - } - - print OUT $line; -} -close(OUT); - -my $src_make2 = "$IPLROOT/build/libraries_sysmenu/nwm/Makefile"; -my $dst_make2 = "$IPLROOT/build/libraries_sysmenu/nwm/Makefile_autogen"; - -open(F, $src_make2) or die "cant open $src_make2\n"; -my @lines = ; -close(F); - -open(OUT, ">$dst_make2") or die "cant open $dst_make2\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^SUBDIRS_P *\+= *ARM7/ ) - { - print OUT "SUBMAKES_P += ARM7/Makefile_autogen", $rn; - next - } - - print OUT $line; -} -close(OUT); - -my $src_make3 = "$IPLROOT/build/libraries_sysmenu/nwm/ARM7/Makefile"; -my $dst_make3 = "$IPLROOT/build/libraries_sysmenu/nwm/ARM7/Makefile_autogen"; - -open(F, $src_make3) or die "cant open $src_make3\n"; -my @lines = ; -close(F); - -open(OUT, ">$dst_make3") or die "cant open $dst_make3\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^[\t ]*nwmsp_event_handler\.c/ ) - { - $line =~ s/nwmsp_event_handler\.c/nwmsp_event_handler_autogen\.c/; - } - - print OUT $line; -} -close(OUT); diff --git a/build/tests/build4WLDev/scripts/launcher_loadWlanFirm_c.pl b/build/tests/build4WLDev/scripts/launcher_loadWlanFirm_c.pl deleted file mode 100755 index c3841558..00000000 --- a/build/tests/build4WLDev/scripts/launcher_loadWlanFirm_c.pl +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: launcher_loadWlanFirm_c.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $src = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm.c"; -my $dst = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/src/loadWlanFirm_autogen.c"; - - -my $rn = "\x0D\x0A"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - # WLANLoadɌAFatalError̃ZbgɂB - if( $line =~ m/^[\t ]*UTL_SetFatalError\([\t ]*FATAL_ERROR_WLANFIRM_(LOAD|AUTH)[\t ]*\)/ ) - { - print OUT "//\t[AUTO COMMENTOUT] Jp`[̏ꍇA֘AFATALG[͖ău[g悤ɂ܂B", $rn; - # add comment out at the top of line - $line =~ s/^/\/\//; - } - - print OUT $line; -} -close(OUT); - diff --git a/build/tests/build4WLDev/scripts/launcher_makefile.pl b/build/tests/build4WLDev/scripts/launcher_makefile.pl deleted file mode 100755 index c558652e..00000000 --- a/build/tests/build4WLDev/scripts/launcher_makefile.pl +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: launcher_makefile.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $rn = "\x0D\x0A"; - -my $src1 = "$IPLROOT/build/systemMenu_RED/Launcher/Makefile"; -my $dst1 = "$IPLROOT/build/systemMenu_RED/Launcher/Makefile_autogen"; - -open(F, $src1) or die "cant open $src1\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst1") or die "cant open $dst1\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^SUBDIRS\t*=\t*banner ARM9/ ) - { - print OUT "SUBMAKES\t\t=\tbanner/Makefile ARM9/Makefile_autogen", $rn; - next; - } - - print OUT $line; -} -close(OUT); - -my $src2 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile"; -my $dst2 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile_autogen"; - -open(F, $src2) or die "cant open $src2\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst2") or die "cant open $dst2\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/loadWlanFirm\.c/ ) - { - $line =~ s/loadWlanFirm\.c/loadWlanFirm_autogen\.c/; - } - - print OUT $line; -} -close(OUT); - -my $src3 = "$IPLROOT/build/systemMenu_RED/MachineSettings/Makefile"; -my $dst3 = "$IPLROOT/build/systemMenu_RED/MachineSettings/Makefile_autogen"; - -open(F, $src3) or die "cant open $src3\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst3") or die "cant open $dst3\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^SUBDIRS\t*=\t*banner ARM9/ ) - { - print OUT "SUBMAKES\t\t=\tbanner/Makefile ARM9/Makefile_autogen", $rn; - next; - } - - print OUT $line; -} -close(OUT); - -my $src4 = "$IPLROOT/build/systemMenu_RED/MachineSettings/ARM9/Makefile"; -my $dst4 = "$IPLROOT/build/systemMenu_RED/MachineSettings/ARM9/Makefile_autogen"; - -open(F, $src4) or die "cant open $src4\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst4") or die "cant open $dst4\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/ +MachineSetting\.c/ ) - { - $line =~ s/MachineSetting\.c/MachineSetting_autogen\.c/; - } - - print OUT $line; -} -close(OUT); diff --git a/build/tests/build4WLDev/scripts/launcher_makefile_region.pl b/build/tests/build4WLDev/scripts/launcher_makefile_region.pl deleted file mode 100755 index f11bf281..00000000 --- a/build/tests/build4WLDev/scripts/launcher_makefile_region.pl +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: launcher_makefile.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $rn = "\x0D\x0A"; - -my $src1 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile"; -my $dst1 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile_autogen_HNAJ"; - -open(F, $src1) or die "cant open $src1\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst1") or die "cant open $dst1\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/loadWlanFirm\.c/ ) - { - $line =~ s/loadWlanFirm\.c/loadWlanFirm_autogen\.c/; - } - - if( $line =~ m/^TITLEID_LO/ ) - { - $line =~ s/HNAA/HNAJ/; - } - - if( $line =~ m/^CARD_REGION/ ) - { - $line =~ s/ALL/Japan/; - print OUT $line; - print OUT "BINDIR = ./bin.HNAJ/\$(TWL_BUILDTYPE)", $rn; - next; - } - - if( $line =~ m/^INSTALL_DIR/ ) - { - print OUT "INSTALL_DIR = \$(UPDATER_HOST_ROOT_DIR)/debugger/japan", $rn; - print OUT "MAKETAD := \$(TWL_IPL_RED_PRIVATE_TOOLSDIR)/bin/maketad.updater.exe", $rn; - next; - } - - print OUT $line; -} -close(OUT); - - -my $src2 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile"; -my $dst2 = "$IPLROOT/build/systemMenu_RED/Launcher/ARM9/Makefile_autogen_HNAE"; - -open(F, $src2) or die "cant open $src2\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst2") or die "cant open $dst2\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/loadWlanFirm\.c/ ) - { - $line =~ s/loadWlanFirm\.c/loadWlanFirm_autogen\.c/; - } - - if( $line =~ m/^TITLEID_LO/ ) - { - $line =~ s/HNAA/HNAE/; - } - - if( $line =~ m/^CARD_REGION/ ) - { - $line =~ s/ALL/America/; - print OUT $line; - print OUT "BINDIR = ./bin.HNAE/\$(TWL_BUILDTYPE)", $rn; - next; - } - - if( $line =~ m/^INSTALL_DIR/ ) - { - print OUT "INSTALL_DIR = \$(UPDATER_HOST_ROOT_DIR)/debugger/america", $rn; - print OUT "MAKETAD := \$(TWL_IPL_RED_PRIVATE_TOOLSDIR)/bin/maketad.updater.exe", $rn; - next; - } - - print OUT $line; -} -close(OUT); - diff --git a/build/tests/build4WLDev/scripts/systemupdater_source.pl b/build/tests/build4WLDev/scripts/systemupdater_source.pl deleted file mode 100755 index a997eec7..00000000 --- a/build/tests/build4WLDev/scripts/systemupdater_source.pl +++ /dev/null @@ -1,125 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: systemupdater_source.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $IPLROOT; - -# search TWL_IPL_RED_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_ROOT/s) { - $IPLROOT = $ENV{$_}; - } -} - -my $rn = "\x0D\x0A"; - -my $src1 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/src/process_check_console.c"; -my $dst1 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/src/process_check_console_autogen.c"; - -my $in_check_console = 0; - -open(F, $src1) or die "cant open $src1\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst1") or die "cant open $dst1\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/^void ProcessCheckConsole\(void\)/ ) - { - $in_check_console = 1; - } - - if ($in_check_console == 1) - { - if( $line =~ m/^\/\*/ ) - { - print OUT "\tkamiFontPrintfConsole( FONT_COLOR_GREEN, \"This updater is for Wireless development.\\n\");", $rn; - print OUT "//\t[AUTO COMMENTOUT] JpSystemUpdateȑꍇARgAEg͂܂B", $rn; - # add comment out at the top of line - $line =~ s/^/\/\//; - } - if( $line =~ m/^\*\// ) - { - print OUT "//\t[AUTO COMMENTOUT] JpSystemUpdateȑꍇARgAEg͂܂B", $rn; - # add comment out at the top of line - $line =~ s/^/\/\//; - } - if( $line =~ m/^}/ ) - { - $in_check_console = 0; - } - } - - print OUT $line; -} -close(OUT); - -my $src2 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/src/process_select_region.c"; -my $dst2 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/src/process_select_region_autogen.c"; - -open(F, $src2) or die "cant open $src2\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst2") or die "cant open $dst2\n"; -foreach my $line ( @lines ) -{ - # WLANLoadɌAFatalError̃ZbgɂB - if( $line =~ m/OS_TWL_REGION_AUSTRALIA/ ) - { - print OUT "//\t[AUTO COMMENTOUT] JpSystemUpdateȑꍇARegionJapanAmericâ݁B", $rn; - $line =~ s/OS_TWL_REGION_AUSTRALIA/OS_TWL_REGION_AMERICA/; - } - - print OUT $line; -} -close(OUT); - -my $src3 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/Makefile"; -my $dst3 = "$IPLROOT/build/systemMenu_tools/SystemUpdaterRegionSelect/ARM9.TWL/Makefile_autogen"; - -open(F, $src3) or die "cant open $src3\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst3") or die "cant open $dst3\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/UPDATER_HOST_ROOT_DIR =/ ) - { - $line =~ s/UPDATER_HOST_ROOT_DIR =/UPDATER_HOST_ROOT_DIR ?=/; - } - - if( $line =~ m/process_select_region\.c/ ) - { - $line =~ s/process_select_region\.c/process_select_region_autogen\.c/; - } - - if( $line =~ m/process_check_console\.c/ ) - { - $line =~ s/process_check_console\.c/process_check_console_autogen\.c/; - } - - print OUT $line; -} -close(OUT); diff --git a/build/tests/compressSharedFontLoad/README.txt b/build/tests/compressSharedFontLoad/README.txt deleted file mode 100644 index 5fed4e21..00000000 --- a/build/tests/compressSharedFontLoad/README.txt +++ /dev/null @@ -1,60 +0,0 @@ -# ------------------------------------------ -# LtHgk̃[hx -# -# 쐬 : nishikawa_takeshi -# ------------------------------------------ - -͈ȉ2Xebv\܂B - -1. LtHg̈kƃC|[g -2. [hx̑ - -ȉAeXebvɂ‚Đ܂B - - -# ------------------------------------------ -# Xebv1 LtHg̈kƃC|[g -# ------------------------------------------ - -(1)LtHg̈k - -compSharedFont fBNgɈړ make ĂB - % cd compSharedFont - % make - -(2)ktHg̃C|[g - -kꂽLtHg NandInitializerRed ŃC|[gKv܂A -NandInitializerRed ́ASDł͂ȂAROMA[JCuC|[g܂B -(‚܂AgSRLɋLtHg܂B) -̂߁ANandInitializerRed ēxArhKv܂B -ktHg(1)̏ɂāANandInitializerRed ̃fBNgɎIɃRs[܂̂ŁA -Rs[Kv͂܂B - - % cd $(TWL_IPL_RED_ROOT)/build/systemMenu_tools/NandIntializerRed - % make clean; make - -ărhꂽ NandInitializerRed.srl (ARM9.TWL/bin/ȉɂ܂) SDJ[hɃRs[āA -SDJ[hu[gƁAj[tHgC|[g鍀ڂIł܂B - -# ------------------------------------------ -# Xebv2 [hx̑ -# ------------------------------------------ - -[hx̑vÓAtestLoadSpeed fBNgɂ܂B -ŁAOS CűLtHg֘Å֐ύXA -ɁATWLSDK SYSMENU pbP[WƂărhȂKv܂B -̕ύXƃeXgvÕrh́Amake ɃIvV‚ƎIɎs܂B -(D݂ŁATWL_WITHOUT_DEMOS=TRUE TWL_FINALROM=TRUE IvV‚B) - - % cd testLoadSpeed - % make TEST_TWLSDK_REBUILD=TRUE - -L TWLSDK ̕ύXȂƂɂ́AeXgvÕrhɂł܂B - -eXgvOύXꍇA TWLSDK rĥ͎Ԃ܂̂ŁA -IvV‚ make ƁAeXgvÕrĥݎs܂B - - % make - -쐬ꂽeXgvOs΁AkLtHg̃[hԂ𑪒ł܂B diff --git a/build/tests/compressSharedFontLoad/compSharedFont/Makefile b/build/tests/compressSharedFontLoad/compSharedFont/Makefile deleted file mode 100644 index 3417d6b0..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/Makefile +++ /dev/null @@ -1,62 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile - -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: -# $Rev: -# $Author: -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -SUBDIRS = compBLZ_modified \ - ntrcomp - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -FONT_TIMESTAMP = 08061300 -FONT_DIR = WW -FONTS = TBF1_l.NFTR \ - TBF1_m.NFTR \ - TBF1_s.NFTR -FONT_RSC = $(addprefix $(FONT_DIR)/, $(FONTS)) - -FONT_ORG_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_RED/sharedFont/WW -FONT_ORG_RSC = $(addprefix $(FONT_ORG_DIR)/, $(FONTS)) - -ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),) -FONT_TABLE = TWLFontTable.dat -endif - -GEN_FONT_TABLE = ./genFontTable.plx - -#---------------------------------------------------------------------------- -INSTALL_TARGETS = $(FONT_TABLE) -INSTALL_DIR = $(TWL_IPL_RED_ROOT)/build/systemMenu_tools/NandInitializerRed/data - -LDIRT_CLEAN = $(FONT_TABLE) $(FONT_RSC) - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -do-build : $(FONT_TABLE) - -# step1 : copy sharedFonts into local directory for work -$(FONT_RSC): - cp $(FONT_ORG_RSC) $(FONT_DIR) - -# step2 : compress sharedFonts and them in local directory -$(FONT_TABLE): $(FONT_RSC) - $(GEN_FONT_TABLE) $(FONT_TIMESTAMP) $(FONT_RSC) - -#===== End of Makefile ===== diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/Makefile b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/Makefile deleted file mode 100644 index 89101f6e..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/Makefile +++ /dev/null @@ -1,73 +0,0 @@ -#! make -f -#--------------------------------------------------------------------------- -# Project: TwlSDK - tools - compBLZ -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#--------------------------------------------------------------------------- - -TARGET_PLATFORM = TWL NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#--------------------------------------------------------------------------- - -TARGET_BIN = compBLZ.exe -TARGETS = $(BINDIR)/$(TARGET_BIN) - -SRCS = main.c \ - compress.c \ - file.c \ - version.c - -HEADERS = common.h \ - compress.h \ - file.h - -INCDIR += ../../../include -OBJDIR = obj -BINDIR = bin - -OBJS = $(addprefix $(OBJDIR)/,$(SRCS:.c=.o)) - -MACROS += -DSDK_TWL $(addprefix -I,$(INCDIR)) -NEWDIRS = $(OBJDIR) $(BINDIR) -LDIRT_CLEAN += $(NEWDIRS) version.c - -#INSTALL_DIR = $(TWL_INSTALL_TOOLSDIR)/bin -#INSTALL_TARGETS = $(TARGETS) - -#--------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86 - -do-build: $(TARGETS) - -$(TARGETS): $(OBJS) $(LIBDGT) $(MAKEFILE) - $(CC_X86) $(OBJS) $(LIBDGT) -o $@ - -$(OBJS):%.o: - $(COMPILE_C) - -$(OBJDIR)/main.o: main.c file.h version.c -$(OBJDIR)/compress.o: compress.c compress.h -$(OBJDIR)/file.o: file.c file.h -$(OBJDIR)/version.o: version.c - -version.c: $(filter-out version.c,$(SRCS)) $(HEADERS) $(MAKEFILE) - @for i in $^ ; \ - do \ - date -r $$i +'const unsigned long SDK_DATE_OF_LATEST_FILE=%Y%m%dUL;'; \ - done | sort | tail -1 > $@ - -#===== End of Makefile ===== diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/_ b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/_ deleted file mode 100644 index 95665859..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/_ +++ /dev/null @@ -1 +0,0 @@ -SDK_CONFIDENTIAL diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/common.h b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/common.h deleted file mode 100644 index 9f60ce54..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/common.h +++ /dev/null @@ -1,42 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compstatic - File: common.h - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef COMMON_H__ -#define COMMON_H__ - -typedef enum -{ - TRUE = 1, - FALSE = 0 -} -BOOL; - -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned long u32; -typedef signed char s8; -typedef signed short s16; -typedef signed long s32; - -// macro -#define MIN(a,b) ((a)<(b)?(a):(b)) -#define ROUNDUP4(x) (((x)+3)&~3) -#define LE(a) ((((a)<<24)&0xff000000)|(((a)<<8)&0x00ff0000)|\ - (((a)>>8)&0x0000ff00)|(((a)>>24)&0x000000ff)) -#define FREE(x) do { if (x){ free(x); x = NULL; } } while(0) - - -#endif //COMMON_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.c b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.c deleted file mode 100644 index 57f4b5bc..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.c +++ /dev/null @@ -1,374 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compstatic - File: compress.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include -#include "file.h" -#include "compress.h" - -static int LZCompressRV(u8 *src_buffer, int src_size, u8 *dst_buffer, int dst_size); -static int FindMatched(u8 *src_buffer, int src_size, u8 *dic_buffer, int dic_size, int *index); -static int HowManyMatched(u8 *src_buffer, u8 *dic_buffer, int max_len); -static int CheckOverwrite(int orig_size, u8 *cmprs_buffer, int cmprs_buffer_size, - int *orig_safe, int *cmprs_safe); - - -/*---------------------------------------------------------------------------* - Name: Compress - - Description: Buffer ̋ẗksȂD - kf[^ƓWJf[^ԂLł悤 - - - buffer : 툳kf[^ - buffer_size : 툳kf[^TCY - - Return: >=0: k̃TCY - < 0: s - *---------------------------------------------------------------------------*/ -int Compress(u8 *buffer_original, int buffer_original_size) -{ - u8 *buffer; - int buffer_size; - int buffer_start; - u8 *temp_buffer_original; - u8 *temp_buffer; - int temp_buffer_size; - int temp_buffer_start; - int compressed_size; - int aligned_size; - int total_size; - int reduced; - int i; - CompFooter *footer; - - // O - if (NULL == (temp_buffer_original = (u8 *)malloc(buffer_original_size))) - { - ErrorPrintf("Cannot allocate memory size=%d\n", buffer_original_size); - return COMPRESS_FATAL_ERROR; - } - - if ((u32)buffer_original % 4 != 0) - { - ErrorPrintf("Top of buffer is not aligned by 4.\n"); - return COMPRESS_FATAL_ERROR; - } - - buffer = buffer_original; - buffer_size = buffer_original_size; - temp_buffer = temp_buffer_original; - temp_buffer_size = buffer_original_size; - - // ksȂ - reduced = LZCompressRV(buffer, buffer_size, temp_buffer, temp_buffer_size); - if (reduced < 0) - { - DebugPrintf("Compressed buffer size exceeds original data size.\n"); - free(temp_buffer_original); - return COMPRESS_LARGER_ORIGINAL; - } - - temp_buffer_size -= reduced; - temp_buffer += reduced; - - DebugPrintf("1: source size = %d compressed = %d\n", buffer_size, temp_buffer_size); - - // WJs\ȏ㏑邩mF - if (!CheckOverwrite - (buffer_size, temp_buffer, temp_buffer_size, &buffer_start, &temp_buffer_start)) - { - // ㏑Ȃ爳k͈͂ύX - buffer += buffer_start; - buffer_size -= buffer_start; - temp_buffer += temp_buffer_start; - temp_buffer_size -= temp_buffer_start; - - DebugPrintf(" !! Shrink back Compressed region to avoid overwriting.\n" - " !! Expand non-compressed region = +%d\n" - "2: source size = %d compressed = %d\n", - buffer_start, buffer_size, temp_buffer_size); - } - - // PADDING ƃp[^̈ĂȂǂ - compressed_size = buffer_start + temp_buffer_size; // header+body - aligned_size = ROUNDUP4(compressed_size); // +padding - total_size = aligned_size + sizeof(CompFooter); // +footer - - if (buffer_original_size <= total_size) - { - DebugPrintf("Compressed buffer size exceeds or equals original data size.\n"); - free(temp_buffer_original); - return COMPRESS_LARGER_ORIGINAL; - } - - // f[^e|obt@猳f[^֏㏑ - CopyBuffer(temp_buffer, buffer, temp_buffer_size); - free(temp_buffer_original); - - // TCY 4 ̔{ɂȂ悤 PADDING - // LZ ̎㈳k̈̍ŏ̃oCgl 0xff ɂȂȂ(ŏ͈k - // tOłAŏ̃f[^͈kȂŊi[邩)̂ 0xff - // ߂ - for (i = compressed_size; i < aligned_size; i++) - { - buffer_original[i] = 0xff; - } - - // TCYݒ - // compressBottom sizeof(PAD)+sizeof(footer) Ȃ̂ 1oCgŏ\ - footer = (CompFooter *) (buffer_original + aligned_size); - footer->bufferTop = total_size - buffer_start; // ̒l - footer->compressBottom = total_size - compressed_size; // ̒l - footer->originalBottom = buffer_original_size - total_size; // ̒l - - return total_size; -} - - -/*---------------------------------------------------------------------------* - Name: LZCompressRV - - Description: LZ ksȂDf[^̌爳kJn - kʂl߂ɂȂ - - Returns: kf[^̐擪 index - kf[^ dst_buffer+index dst_buffer+dst_size-1 ܂ - -1: ks(kʂ̕傫ꍇ) - *---------------------------------------------------------------------------*/ -static int LZCompressRV(u8 *src_buffer, int src_size, u8 *dst_buffer, int dst_size) -{ - int src_index = src_size; - int dst_index = dst_size; - int compflag; - int compflag_index; - int i; - - while (src_index > 0) - { - if (dst_index < 1) - return -1; // Buffer Overflow - - // 8bit ̈ktȎ}ʒu\ - compflag = 0x00; - compflag_index = --dst_index; - - // tOn8rbgf[^ƂĊi[邽߁A8񃋁[v - for (i = 0; i < 8; i++) - { - compflag <<= 1; - - if (src_index > 0) // src cĂ邩 - { - u8 *dic_buffer; - int dic_size; - u8 *ref_buffer; - int ref_size; - int index; - int len; - - dic_buffer = src_buffer + src_index; - dic_size = src_size - src_index; - ref_size = MIN(src_index, LZ_MAX_COPY); - ref_buffer = dic_buffer - ref_size; - - len = FindMatched(ref_buffer, ref_size, - dic_buffer, MIN(dic_size, LZ_MAX_DIC_LENGTH), &index); - - if (len >= LZ_MIN_COPY) - { - u16 half; - - // Offset/Len ̋L^”\ǂmF - if (dst_index < 2) - return -1; // Buffer Overflow - - // src index i߂ - src_index -= len; - - // len >= LZ_MIN_COPY Ȃ̂ł̕Zlߖ񂷂 - index -= (LZ_MIN_COPY - 1); - len -= (LZ_MIN_COPY - 0); - - // 16bit f[^ƂĂ - half = (u16)((index & (LZ_MAX_INDEX - 1)) | (len << LZ_BIT_INDEX)); - dst_buffer[--dst_index] = (half >> 8) & 0xff; - dst_buffer[--dst_index] = (half >> 0) & 0xff; - - // flag Zbg - compflag |= 0x01; - } - else - { - // l̂܂܂L^ & src index i߂ - if (dst_index < 1) - return -1; // Buffer Overflow - dst_buffer[--dst_index] = src_buffer[--src_index]; - } - } - } - // ktO̕ۑ - dst_buffer[compflag_index] = compflag; - } - return dst_index; -} - - -/*---------------------------------------------------------------------------* - Name: FindMatched - - Description: vp^[̌sȂDf[^̌Oւ - - - src_buffer[0...src_size-1] ̃p^[ src_buffer ̌ - dic_buffer[0...dic_size-1] ̃p^[ƍőv镔 - D - - Returns: vTCY - *index vʒu - *---------------------------------------------------------------------------*/ -static int FindMatched(u8 *src_buffer, int src_size, u8 *dic_buffer, int dic_size, int *index) -{ - u8 *src_bottom = src_buffer + src_size - 1; - u8 char_src_bottom = *src_bottom; - int n, len, max_len; - - // Ԓl - max_len = 0; - - for (n = 0; n < dic_size; n++) - { - // ̂߂̃LbV - if (char_src_bottom == dic_buffer[n]) - { - len = HowManyMatched(src_bottom, dic_buffer + n, MIN(n + 1, src_size)); - if (max_len < len) - { - max_len = len; - *index = n; - } - } - } - - // ŏTCYȏȂ琬 - return max_len; -} - - -/*---------------------------------------------------------------------------* - Name: HowManyMatched - - Description: 2‚̃p^[tɂǂ܂ňvĂ邩𒲍 - - src_buffer, dic_buffer rp^[̃AhX - (̃AhXt֌) - max_len ő咲钷 - - Returns: v - *---------------------------------------------------------------------------*/ -static int HowManyMatched(u8 *src_buffer, u8 *dic_buffer, int max_len) -{ - int i; - - // p^[v(t) - for (i = 0; i < max_len; i++) - { - if (*src_buffer != *dic_buffer) - { - break; - } - src_buffer--; - dic_buffer--; - } - return i; -} - - -/*---------------------------------------------------------------------------* - Name: CheckOverwrite - - Description: LZ WJœWJƓWJ𓯂AhXɒuꍇɁAǂ܂ - ɓWJ”\`FbN - - Returns: Ō܂œWJ”\Ȃ TRUE r܂łȂ FALSE - *---------------------------------------------------------------------------*/ -static int CheckOverwrite(int orig_size, u8 *cmprs_buffer, int cmprs_buffer_size, - int *orig_safe, int *cmprs_safe) -{ - int src = cmprs_buffer_size; - int dst = orig_size; - int flag; - int i; - -//#define DETAIL - while (dst > 0) - { - flag = cmprs_buffer[--src]; // k񈳏ktO 8 [v - -#ifdef DETAIL - DebugPrintf("%08x %08x FLG=0x%02x\n", src, dst, flag); -#endif - for (i = 0; i < 8; i++) - { - if (dst > 0) - { - if (flag & 0x80) // kf[^H - { - u16 half; - int len; - - // WJvZ - src -= 2; - half = (u16)(cmprs_buffer[src] | (cmprs_buffer[src + 1] << 8)); - len = ((half >> LZ_BIT_INDEX) & (LZ_MAX_LENGTH - 1)) + LZ_MIN_COPY; -#ifdef DETAIL - DebugPrintf("%08x %08x-%08x LEN=%d\n", src, dst - 1, dst - len, len); -#endif - // \[Xf[^㏑Ă܂`FbN - dst -= len; - - if (dst < 0) - { - ErrorPrintf("System error in CheckOverwrite???\n"); - exit(-1); // Panic!! - } - - if (dst < src) - { - // ㏑Ă܂Ȃ爳k݂͌̂Ƃ܂łŎ~߂ - *orig_safe = dst; - *cmprs_safe = src; - return FALSE; - } - } - else - { - // 񈳏kf[^Ȃ炻̂܂܃Rs[Ȃ̂ - // j𔺂Ȃ㏑͋NȂ - src--; - dst--; -#ifdef DETAIL - DebugPrintf("%08x %08x CHR=0x%02x\n", src, dst, cmprs_buffer[src]); -#endif - } - flag <<= 1; - } - } - } - *orig_safe = 0; - *cmprs_safe = 0; - return TRUE; -} diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.h b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.h deleted file mode 100644 index 9b141d6c..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/compress.h +++ /dev/null @@ -1,55 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compstatic - File: compress.h - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef COMPRESS_H__ -#define COMPRESS_H__ -#include "common.h" - -//--------------------------------------------------------- -typedef struct -{ - u32 bufferTop:24; // k̈I[ - 擪 - u32 compressBottom:8; // k̈I[ - f[^I[ - u32 originalBottom; // WJ̈I[ - k̈I[ -} -CompFooter; - -//--------------------------------------------------------- -int Compress(u8 *buffer, int buffer_size); - -#define COMPRESS_LARGER_ORIGINAL (-1) -#define COMPRESS_FATAL_ERROR (-2) - - -// loader area -#define LOADER_SIZE_ARM9 (16*1024) -#define LOADER_SIZE_ARM7 ( 1*1024) - -// LZ compress parameters -#define LZ_BIT_INDEX 12 // 12bit offset -#define LZ_BIT_LENGTH 4 // 4bit length -#define LZ_MAX_INDEX (1 << LZ_BIT_INDEX) -#define LZ_MAX_LENGTH (1 << LZ_BIT_LENGTH) - -#define LZ_MIN_COPY 3 -#define LZ_MAX_COPY (LZ_MIN_COPY+LZ_MAX_LENGTH-1) -#define LZ_MAX_DIC_LENGTH (LZ_MIN_COPY+LZ_MAX_INDEX-1) - -// macro -#define MIN(a,b) ((a)<(b)?(a):(b)) -#define ROUNDUP4(x) (((x)+3)&~3) - -#endif diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.c b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.c deleted file mode 100644 index 871c6e46..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.c +++ /dev/null @@ -1,314 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compstatic - File: file.c - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include // calloc() -#include // free(), exit() -#include // stat() -#include // strlen/strdup/strcpy -#include // va_start(),va_end() -#include // unlink() -#include "file.h" - - -/*---------------------------------------------------------------------------* - Name: ReadFile - - Description: t@C̓ǂݍ obt@̊m - *---------------------------------------------------------------------------*/ -int ReadFile(const char *filename, u8 **buffer) -{ - FILE *fp; - struct stat filestat; - int filesize; - - fp = NULL; - *buffer = NULL; - - if (filename == NULL) - { - ErrorPrintf("Not specified filename\n"); - goto error; - } - - /* Open file */ - if (stat(filename, &filestat) || !S_ISREG(filestat.st_mode) || - NULL == (fp = fopen(filename, "rb"))) - { - ErrorPrintf("Cannot open file '%s'\n", filename); - goto error; - } - - /* Read file */ - filesize = filestat.st_size; - if (NULL == (*buffer = malloc(filesize))) - { - ErrorPrintf("Cannot allocate memory size=%d\n", filesize); - goto error; - } - - if (filesize != fread(*buffer, sizeof(u8), filesize, fp)) - { - ErrorPrintf("Cannot read file '%s'\n", filename); - goto error; - } - - DebugPrintf("%p %8d bytes ReadFile \'%s\'\n", *buffer, filesize, filename); - - /* Close file */ - fclose(fp); - return filesize; - - error: - if (*buffer) - free(*buffer); - if (fp) - fclose(fp); - return -1; -} - - -/*---------------------------------------------------------------------------* - Name: WriteFile - - Description: t@C̍쐬 - *---------------------------------------------------------------------------*/ -int WriteFile(const char *filename, u8 *buffer, int size) -{ - FILE *fp; - - DebugPrintf("%p %8d bytes WriteFile \'%s\'\n", buffer, size, filename); - - /* Open file */ - if (NULL == (fp = fopen(filename, "wb"))) - { - ErrorPrintf("Cannot open file '%s'\n", filename); - return -1; - } - - /* Write file */ - if (size != fwrite(buffer, sizeof(u8), size, fp)) - { - ErrorPrintf("Cannot write file '%s'\n", filename); - (void)fclose(fp); - (void)unlink(filename); - return -1; - } - - /* Close file */ - if (0 > fclose(fp)) - { - ErrorPrintf("Cannot close file '%s'\n", filename); - (void)unlink(filename); - return -1; - } - return size; -} - -/*---------------------------------------------------------------------------* - Name: CopyBuffer - - Description: obt@̃Rs[ - *---------------------------------------------------------------------------*/ -void CopyBuffer(const u8 *src, u8 *dst, int size) -{ - int i; - - if ((unsigned int)src > (unsigned int)dst) - { - for (i = 0; i < size; i++) - { - dst[i] = src[i]; - } - } - else - { - for (i = size - 1; i >= 0; i--) - { - dst[i] = src[i]; - } - } - return; -} - -/*---------------------------------------------------------------------------* - Name: GetDirName - - Description: t@C̃fBNg擾 - *---------------------------------------------------------------------------*/ -char *GetDirName(const char *path) -{ - int i; - char *new_path; - - for (i = strlen(path) - 1; i >= 0; i--) - { - if (path[i] == '/' || path[i] == '\\') - { - if (NULL != (new_path = strdup(path))) - { - new_path[i] = '\0'; - } - return new_path; - } - if (path[i] == ':') - { - if (NULL != (new_path = malloc(i + 3))) - { - strncpy(new_path, path, i); - strcpy(new_path + i, ":."); - } - return new_path; - } - } - - return strdup("."); -} - -/*---------------------------------------------------------------------------* - Name: DebugPrintf - - Description: Debug o͗p Printf - *---------------------------------------------------------------------------*/ -BOOL bDebugMode = FALSE; - -void DebugPrintf(const char *fmt, ...) -{ - va_list va; - - if (bDebugMode) - { - va_start(va, fmt); - vfprintf(stderr, fmt, va); - va_end(va); - } -} - -/*---------------------------------------------------------------------------* - Name: ConsolePrintf - - Description: ʏR\[o͗p Printf - *---------------------------------------------------------------------------*/ -void ConsolePrintf(const char *fmt, ...) -{ - va_list va; - - va_start(va, fmt); - vfprintf(stdout, fmt, va); - va_end(va); -} - -/*---------------------------------------------------------------------------* - Name: ErrorPrintf - - Description: Error o͗p Printf - *---------------------------------------------------------------------------*/ -void ErrorPrintf(const char *fmt, ...) -{ - va_list va; - - fprintf(stderr, "Error: "); - va_start(va, fmt); - vfprintf(stderr, fmt, va); - va_end(va); -} - - -/*---------------------------------------------------------------------------* - Name: StrDup - - Description: G[nhOÂl free t strdup ֐ - *---------------------------------------------------------------------------*/ -char *StrDup(char *old, char *new) -{ - if (old) - { - free(old); - } - if (new && NULL == (new = strdup(new))) - { - ErrorPrintf("Cannot allocate memory\n"); - exit(1); - } - return new; -} - - -/*---------------------------------------------------------------------------* - Name: StrCat - - Description: ̘A - *---------------------------------------------------------------------------*/ -char *StrCat(int num, ...) -{ - va_list va; - int i; - int size; - char *result; - - va_start(va, num); - size = 0; - for (i = 0; i < num; i++) - { - size += strlen(va_arg(va, char *)); - } - va_end(va); - - if (NULL == (result = malloc(size + 1))) - { - ErrorPrintf("Cannot allocate memory\n"); - exit(1); - } - - va_start(va, num); - result[0] = '\0'; - for (i = 0; i < num; i++) - { - (void)strcat(result, va_arg(va, char *)); - } - va_end(va); - - return result; -} - -//--------------------------------------------------------------------------- -// pX񂩂t@C̃|C^擾Agq -// @param path pX -// @return t@C̃|C^ -//--------------------------------------------------------------------------- -char *StrCutFname(char *path) -{ - char *search_tmp; - - if (path == NULL) - { - return NULL; - } - - if ((search_tmp = strrchr(path, '/')) != NULL) - { - path = (search_tmp + 1); - } - if ((search_tmp = strrchr(path, '\\')) != NULL) - { - path = (search_tmp + 1); - } - if ((search_tmp = strrchr(path, '.')) != NULL) - { - *search_tmp = '\0'; - } - return path; -} diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.h b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.h deleted file mode 100644 index b266b0ff..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/file.h +++ /dev/null @@ -1,35 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compstatic - File: file.h - - Copyright 2003 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef FILE_H__ -#define FILE_H__ - -#include "common.h" - -int ReadFile(const char *filename, u8 **buffer); -int WriteFile(const char *filename, u8 *buffer, int size); -void CopyBuffer(const u8 *src, u8 *dst, int size); -char *GetDirName(const char *filename); -void DebugPrintf(const char *fmt, ...); -void ErrorPrintf(const char *fmt, ...); -void ConsolePrintf(const char *fmt, ...); -char *StrDup(char *old, char *new); -char *StrCat(int num, ...); -char *StrCutFname(char *path); - -extern BOOL bDebugMode; - -#endif //FILE_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/main.c b/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/main.c deleted file mode 100644 index f7ec6980..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/compBLZ_modified/main.c +++ /dev/null @@ -1,171 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tools - compBLZ - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include -#include -#include // getopt() -#include "file.h" -#include "compress.h" - -extern const unsigned long SDK_DATE_OF_LATEST_FILE; - -static void usage(void); - -/*---------------------------------------------------------------------------* - Name: main - - Description: - *---------------------------------------------------------------------------*/ -int main(int argc, char *argv[]) -{ - int n; - int result; - int iptfilesize; - - char* optfilename; - char* suffix; - u8* filebuf; - - BOOL optfname_flag = FALSE; // if optfilename input, this flag is true. - - optfilename = suffix = NULL; - - while ((n = getopt(argc, argv, "o:e:dhv")) != -1) - { - switch (n) - { - case 'o': // output file name - optfilename = optarg; - optfname_flag = TRUE; - break; - - case 'e': - suffix = optarg; - break; - - case 'd': // Show debug message - bDebugMode = TRUE; - break; - - case 'h': - case 'v': - default: - usage(); // Never returns - break; - } - - DebugPrintf("option -%c: %s\n", n, optarg ? optarg : "No ARG"); - } - - argc -= optind; - argv += optind; - - if (bDebugMode) - { - int i; - - DebugPrintf("argc=%d optind=%d\n", argc, optind); - for (i = 0; i < argc; i++) - { - DebugPrintf("argv[%d] = [%s]\n", i, argv[i]); - } - } - - if (argc == 1) - { - if (optfilename == NULL) - { - optfilename = argv[0]; - } - iptfilesize = ReadFile(argv[0], &filebuf); - } - else - { - usage(); // Never returns - } - - if (iptfilesize < 0) - { - ConsolePrintf("exit...\n"); - return 1; - } - - if ((result = Compress(filebuf, iptfilesize)) < 0) - { - switch (result) - { - case COMPRESS_LARGER_ORIGINAL: - ConsolePrintf("Inputdata ..... Not compressed (enlarged or same size as before)\n"); - break; - case COMPRESS_FATAL_ERROR: - ConsolePrintf("Fatal error occured\n"); - break; - } - ConsolePrintf("exit...\n"); - return 1; - } - - // cut file path and suffix of input file - if (!optfname_flag) - { - optfilename = StrCutFname(optfilename); - } - - // create output filename - if (suffix == NULL) - { - optfilename = StrCat(2, optfilename, "_BLZ.bin"); - } - else - { - optfilename = StrCat(2, optfilename, suffix); - } - - // output file - if (WriteFile(optfilename, filebuf, result) < 0) - { - ConsolePrintf("exit...\n\n"); - return 1; - } - - ConsolePrintf("Inputdata ..... Compressed ... %9d -> %9d\n", iptfilesize, result); - - return 0; -} - -/*---------------------------------------------------------------------------* - Name: usage - - Description: - *---------------------------------------------------------------------------*/ -static void usage(void) -{ - fprintf(stderr, - "TWL-SDK Development Tool - compBLZ - Compress data\n" - "Build %lu\n" - "\n" - "Usage: compBLZ [-d] [-o outputFile] [-e suffix] inputFile\n" - "\n" - " Compress data (backward LZ)\n" - "\n" - " -o outputFile FILENAME for output file (default:input filename)\n" - " -e suffix SUFFIX for output file (default:\"_BLZ\")\n" - " -d Show debug messages (for test purpose)\n" - " -h Show this message\n" "\n", SDK_DATE_OF_LATEST_FILE); - - exit(1); -} diff --git a/build/tests/compressSharedFontLoad/compSharedFont/genFontTable.plx b/build/tests/compressSharedFontLoad/compSharedFont/genFontTable.plx deleted file mode 100644 index 69cd3c09..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/genFontTable.plx +++ /dev/null @@ -1,261 +0,0 @@ -#!/usr/bin/perl - -# -# To Do -# EFont info table padding kt@CTCYi[GgɕύX -# Et@CTCY擾ċlߍޏlj -# ESHA-1nbV‚OɈk -# - -###################################################################### -# genFontTable.pl -# -# generate Secure Shared Font Data Table -# -# [[ HEADER FORMAT ]] -# security code (128 bytes) : RSA signature of Header -# -# Header ( 32 bytes) -# TimeStamp ( 4 bytes) : date %y%m%d%H -# number ( 2 bytes) : number of font files -# padding ( 6 bytes) : -# padding ( 20 bytes) : SHA1 digest of Font info table -# -# Font info table ( 64 bytes * number) -# fileName ( 32 bytes) : font file name -# comp_length ( 4 bytes) : length of the compression file -# file offset ( 4 bytes) : file offset of Font data -# length ( 4 bytes) : length of file (bytes) -# digest ( 20 bytes) : SHA1 digest of Font data -# -# note: each section image is aligned to 32 bytes. -# -###################################################################### - -use POSIX 'strftime'; -use File::Basename; - -if ($#ARGV < 2) { - printf STDOUT ("Usage: %s [genFontTable] timestamp [Target font files...]\n", $0); - exit(-1); -} - -my $outFile = "TWLFontTable.dat"; -my $infoFile = "info.bin"; -my $headerFile = "header.bin"; -my $digestFile = "sha1.bin"; -my $signFile = "sign.bin"; -my $tempFile = "temp.bin"; -my $compprog = "./compBLZ_modified/bin/compBLZ.exe"; # kvO -my $compoption = "-e \"\""; -#my $compprog = "./ntrcomp/gcc/ntrcomp.exe"; -#my $compoption = "-h8 -A32 -s"; - -# n -sub deleteTemp { - system ("rm -f $infoFile"); - system ("rm -f $headerFile"); - system ("rm -f $digestFile"); - system ("rm -f $signFile"); - system ("rm -f $tempFile"); -} - -# ‹ϐSDK̃[gT[`(ntrcomp̏ꏊɕKv) -#foreach ( sort keys ( %ENV ) ){ -# if ($_ =~ m/TWLSDK_ROOT/s) { -# $SDKROOT = $ENV{$_}; -# } -#} -#printf "TWLSDK_ROOT is ${SDKROOT}\n"; - -my $signSize = 0x80; -my $headerSize = 0x20; -my @files; - -# vfZo -my $num = 0; -foreach ( @ARGV ) { - next if( $_ eq $ARGV[0] ); - $files[ $num ] = $_; - $num++; -} - -# e[ȕo -{ - my $elementSize = 0x40; - my $fileNameMax = 0x20; - my $padLen = 0x04; - # offset length = 0x04; - # file length = 0x04; - my $sha1Len = 0x14; - - open INFO, ">$infoFile" or die; - binmode INFO; - - # ItZbgZo - my $offset = $signSize + $headerSize + $num * $elementSize; - if( ( $offset % 32 ) > 0 ) { $offset += 32 - ( $offset % 32 ); } - - printf "---------------------------------------------------------------\n"; - printf "filename\toffset \torig_size\tcompressed_size\n"; - foreach ( @files ) { - # NULLw莞́ANULLo - if( "NULL" eq basename( $_ ) ) { - syswrite( INFO, pack( "x$elementSize") ); - next; - } - - # t@Cl[̏o - if( !( -e $_ ) ) { - close( INFO ); - deleteTemp(); - die "file not exist. : $_\n"; - } - my $name = basename( $_ ); - if( length $name >= $fileNameMax ) { - close( INFO ); - deleteTemp(); - die "file name length must be smaller than $fileNameMax. : $_\n"; - } - my $data = pack( "a$fileNameMax", $name ); - syswrite( INFO, $data, $fileNameMax ); - - # k - # SDKcompBLZ.exe͈oO邽߃[JɏCłĂ - my $compfile = "$_.comp"; - system ("${compprog} $compoption $_ -o $compfile"); - - # pfBȌo - #syswrite( INFO, pack( "x$padLen") ); - - # kt@Co(ƂƂpadding) - $data = pack( "L", -s $compfile ); - syswrite( INFO, $data, 4 ); - - # t@CItZbg̏o - $data = pack( "L", $offset ); - syswrite( INFO, $data, 4 ); - - # t@C̏o - $data = pack( "L", -s $_ ); - syswrite( INFO, $data, 4 ); - - # t@CSHA1nbV̏o - { - my $digest; - #system ("openssl dgst -sha1 -binary -out $digestFile $_"); - system ("openssl dgst -sha1 -binary -out $digestFile $compfile"); # k̃t@CɃnbV‚ - open DIGEST, $digestFile or die; - binmode DIGEST; - sysread( DIGEST, $digest, $sha1Len ); - close DIGEST; - syswrite( INFO, $digest, $sha1Len ); - } - - printf "%s\t0x%08x\t0x%08x\t0x%08x\n", $_, $offset, -s $_, -s $compfile; - - # ItZbgZ - #$offset += -s $_; - $offset += -s $compfile; - if( ( $offset % 32 ) > 0 ) { $offset += 32 - ( $offset % 32 ); } - } - close INFO; - printf "---------------------------------------------------------------\n"; -} - -# wb_̏o -{ - # timestampLen = 0x08; - # elementNumLen = 0x02; - my $padLen = 0x06; - my $sha1Len = 0x14; - - open HEADER, ">$headerFile" or die; - binmode HEADER; - - # ^CX^v̏o -# my $timestamp = strftime "%y%m%d%H", localtime; - my $timestamp = $ARGV[ 0 ]; - printf "timestamp = %s\n", $timestamp; - syswrite( HEADER, pack( "N", unpack( "L", pack( "H8", $timestamp ) ) ) ); - - # vf̏o - syswrite( HEADER, pack( "S", $num ) ); - - # pfBȌo - syswrite( HEADER, pack( "x$padLen") ); - - # e[uSHA1nbV̏o - { - my $digest; - system ("openssl dgst -sha1 -binary -out $digestFile $infoFile"); - open DIGEST, $digestFile or die; - binmode DIGEST; - sysread( DIGEST, $digest, $sha1Len ); - close DIGEST; - syswrite( HEADER, $digest, $sha1Len ); - } - close HEADER; -} - -# ‹ϐT[` -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWL_IPL_RED_PRIVATE_ROOT/s) { - $KEYROOT = $ENV{$_}; - } -} -if (!$KEYROOT) { - deleteTemp(); - die "No TWL_IPL_RED_PRIVATE_ROOT is found.\n"; -} - -# wb_ւ̏t -{ - system ( "openssl dgst -sha1 -binary -out $digestFile $headerFile" ); - system ( "openssl rsautl -sign -in $digestFile -inkey $KEYROOT/keys/rsa/private_sharedFont.der -keyform DER -out $signFile" ); - system ( "cat $signFile $headerFile >$tempFile" ); - system ( "cat $tempFile $infoFile >$outFile" ); - deleteTemp(); -} - - -# tHg̏o -{ - open FONTTABLE, ">>$outFile" or die; - binmode FONTTABLE; - - { - # pfBOo - my $fileLen = -s $outFile; - my $padNum = ( $fileLen % 32 ) ? ( 32 - ( $fileLen % 32 ) ) : 0; - my $padding = pack( "x$padNum" ); - syswrite( FONTTABLE, $padding, $padNum ); - } - - foreach ( @files ) { - # NULLw莞̓XLbv - if( "NULL" eq basename( $_ ) ) { - next; - } - - # tHgo - #my $fileLen = -s $_; - #open TEST, $_ or die; - my $compfile = "$_.comp"; # kt@Co - $fileLen = -s $compfile; - open TEST, $compfile or die; - binmode TEST; - sysread ( TEST, $buffer, $fileLen ); - close TEST; - syswrite( FONTTABLE, $buffer, $fileLen ); - - # pfBOo - my $padNum = ( $fileLen % 32 ) ? ( 32 - ( $fileLen % 32 ) ) : 0; - my $padding = pack( "x$padNum" ); - syswrite( FONTTABLE, $padding, $padNum ); - - # kt@C폜 - system ("rm -rf $compfile"); - } - close FONTTABLE; -} diff --git a/build/tests/compressSharedFontLoad/compSharedFont/makeboot.bat b/build/tests/compressSharedFontLoad/compSharedFont/makeboot.bat deleted file mode 100644 index 2ec4818b..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/makeboot.bat +++ /dev/null @@ -1,18 +0,0 @@ -rem -rem ***** SDNt@C쐬c[ ***** -rem -rem sdmc_launcher_writer.gcd Nt@CƂ menu.srl 󂯕tȂ̂ -rem Ƃė^t@C menu.srl ƂăRs[ -rem - -if "%1" equ "" ( - echo s܂B - echo fBNgƃhbOAhhbvĂB - echo: - goto end -) - -set progdir=%~dp0 - -del %progdir%\menu.srl -copy %1 %progdir%\menu.srl diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/@ b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/@ deleted file mode 100644 index ae91d2ff..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/@ +++ /dev/null @@ -1 +0,0 @@ -NINTENDO PRIVATE diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile deleted file mode 100644 index cb219807..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - build - tools - ntrcomp -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = NITRO - -export TWLSDK_PLATFORM = NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -SUBDIRS += gcc - -include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86 - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile.BAK b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile.BAK deleted file mode 100644 index 5d41f479..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/Makefile.BAK +++ /dev/null @@ -1,25 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - build - tools - ntrcomp -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -SUBDIRS += gcc - -include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86 - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile deleted file mode 100644 index 981c2ad2..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile +++ /dev/null @@ -1,59 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - build - tools - ntrcomp - gcc -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -OBJECTS = ntcompress_main.o ntcompress_test.o nitroCompLib.o multipleCompLib.o rangeCoder.o - -WIN32 ?= 1 - -ifneq ($(WIN32),0) -TARGETS = ntrcomp.exe -CC_X86 := gcc -mno-cygwin -else -TARGETS = ntrcomp -CC_X86 := gcc -endif - -LDIRT_CLEAN = $(OBJECTS) $(TARGETS) - -#INSTALL_DIR = $(NITRO_INSTALL_TOOLSDIR)/bin -#INSTALL_TARGETS = $(TARGETS) - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(OBJECTS) - $(CC_X86) $+ -o $@ - -ntcompress_main.o: ../src/ntcompress_main.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -ntcompress_test.o: ../src/ntcompress_test.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -nitroCompLib.o: ../src/nitroCompLib.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -multipleCompLib.o: ../src/multipleCompLib.c ../src/multipleCompLib.h - $(CC_X86) -c $< -o $@ -rangeCoder.o: ../src/rangeCoder.c ../src/rangeCoder.h - $(CC_X86) -c $< -o $@ - -include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86 - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile.BAK b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile.BAK deleted file mode 100644 index c1cde1a4..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/gcc/Makefile.BAK +++ /dev/null @@ -1,59 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - build - tools - ntrcomp - gcc -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = NITRO - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -OBJECTS = ntcompress_main.o ntcompress_test.o nitroCompLib.o multipleCompLib.o rangeCoder.o - -WIN32 ?= 1 - -ifneq ($(WIN32),0) -TARGETS = ntrcomp.exe -CC_X86 := gcc -mno-cygwin -else -TARGETS = ntrcomp -CC_X86 := gcc -endif - -LDIRT_CLEAN = $(OBJECTS) $(TARGETS) - -INSTALL_DIR = $(NITRO_INSTALL_TOOLSDIR)/bin -INSTALL_TARGETS = $(TARGETS) - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(OBJECTS) - $(CC_X86) $+ -o $@ - -ntcompress_main.o: ../src/ntcompress_main.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -ntcompress_test.o: ../src/ntcompress_test.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -nitroCompLib.o: ../src/nitroCompLib.c ../src/nitroCompLib.h - $(CC_X86) -c $< -o $@ -multipleCompLib.o: ../src/multipleCompLib.c ../src/multipleCompLib.h - $(CC_X86) -c $< -o $@ -rangeCoder.o: ../src/rangeCoder.c ../src/rangeCoder.h - $(CC_X86) -c $< -o $@ - -include $(TWLSDK_ROOT)/build/buildtools/modulerules.x86 - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.c b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.c deleted file mode 100644 index fcb44e89..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.c +++ /dev/null @@ -1,2494 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: multipleCompLib.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "multipleCompLib.h" - -#undef _DEBUG -#ifdef _DEBUG - -#endif - -#define LH_CODE_HEADER (0x40) -#define LRC_CODE_HEADER (0x50) - -#define BLEND_COMP_FLAG 1 - -#define LH_ENC_OFFSET_WIDTH /* ̐ݒ肪LȏꍇɂoffsetlŜł͂Ȃoffsetbit𕄍 */ - -#if !defined(LH_ENC_OFFSET_WIDTH) - #define LH_OFFSET_BITS 12 - #define LH_OFFSET_TABLE_BITS LH_OFFSET_BITS -#else // if defined(LH_ENC_OFFSET_WIDTH) - #define LH_OFFSET_BITS 15 - #define LH_OFFSET_TABLE_BITS 5 -#endif - -#define LENGTH_BITS (8 + BLEND_COMP_FLAG) -#define OFFSET_SIZE_MAX (1 << 15) - -#define REVERSE_SEARCH - -typedef struct -{ - u16 WindowPos; // ݂̃XCh̐擪ʒu - u16 WindowLen; // ݂̃XCh̃TCY - - s16 LZOffsetTable[ OFFSET_SIZE_MAX ]; // ItZbgf[^̃e[u - #ifdef REVERSE_SEARCH - s16 LZRevOffsetTable[ OFFSET_SIZE_MAX ]; // ItZbgf[^̋te[u - #endif - s16 LZByteTable[ 256 ]; // f[^̐擪e[u - s16 LZEndTable [ 256 ]; // f[^̏I[e[u - u8 OffsetBits; // ItZbg\ׂ̃rbg -} LZCompressInfo; - -static LZCompressInfo gLZWork; - -INLINE u32 -RoundUp( u32 value, u32 base ) -{ - return (value + (base - 1)) & ~(base - 1); -} - -/*---------------------------------------------------------------------------* - Name: LZInitTable - Description: - Arguments: work - Returns: None. - *---------------------------------------------------------------------------*/ -static void -LZInitTable( LZCompressInfo* info ) -{ - u16 i; - - for ( i = 0; i < 256; i++ ) - { - info->LZByteTable[i] = -1; - info->LZEndTable[i] = -1; - } - info->WindowPos = 0; - info->WindowLen = 0; -} - -/*---------------------------------------------------------------------------* - Name: SlideByte - Description: 1oCgXCh - Arguments: *srcp - work - Returns: None. - *---------------------------------------------------------------------------*/ -static void -SlideByte( LZCompressInfo* info, const u8 *srcp ) -{ - s16 offset; - u8 in_data = *srcp; - u16 insert_offset; - -#if defined( REVERSE_SEARCH ) // Ttɂ(Vf[^D) - s16 *const LZByteTable = info->LZEndTable; - s16 *const LZEndTable = info->LZByteTable; - s16 *const LZOffsetTable = info->LZRevOffsetTable; - s16 *const LZRevOffsetTable = info->LZOffsetTable; -#else - s16 *const LZByteTable = info->LZByteTable; - s16 *const LZEndTable = info->LZEndTable; - s16 *const LZOffsetTable = info->LZOffsetTable; -#endif - const u16 windowPos = info->WindowPos; - const u16 windowLen = info->WindowLen; - const u32 OFFSET_SIZE = (1 << info->OffsetBits); - - if ( windowLen == OFFSET_SIZE ) - { - u8 out_data = *(srcp - OFFSET_SIZE); - if ((LZByteTable[out_data] = LZOffsetTable[LZByteTable[out_data]]) == -1) - { - LZEndTable[out_data] = -1; - } - else - { - #if defined( REVERSE_SEARCH ) - LZRevOffsetTable[LZByteTable[out_data]] = -1; - #endif - } - insert_offset = windowPos; - } - else - { - insert_offset = windowLen; - } - - offset = LZEndTable[in_data]; - if (offset == -1) - { - LZByteTable[in_data] = insert_offset; - #if defined( REVERSE_SEARCH ) - LZRevOffsetTable[insert_offset] = -1; - #endif - } - else - { - #if defined( REVERSE_SEARCH ) - LZRevOffsetTable[insert_offset] = offset; - #endif - LZOffsetTable[offset] = insert_offset; - } - LZEndTable[in_data] = insert_offset; - LZOffsetTable[insert_offset] = -1; - - if (windowLen == OFFSET_SIZE) - { - info->WindowPos = (u16)((windowPos + 1) % OFFSET_SIZE); - } - else - { - info->WindowLen++; - } -} - -/*---------------------------------------------------------------------------* - Name: LZSlide - Description: - Arguments: *srcp - n - Returns: None. - *---------------------------------------------------------------------------*/ -static void -LZSlide( LZCompressInfo* info, const u8 *srcp, u32 n ) -{ - u32 i; - - for (i = 0; i < n; i++) - { - SlideByte(info, srcp++); - } -} - -//-------------------------------------------------------- -// LZ77kŃXCh̒Œv܂B -// Arguments: startp f[^̊Jnʒu|C^ -// nextp Jnf[^̃|C^ -// remainSize cf[^TCY -// offset vItZbgi[̈ւ̃|C^ -// Return : v񂪌‚ꍇ TRUE -// ‚Ȃꍇ FALSE -//-------------------------------------------------------- -static u16 -SearchLZ( const LZCompressInfo* info, const u8 *nextp, u32 remainSize, u16 *offset, u16 minOffset, u32 maxLength ) -{ - const u8 *searchp; - const u8 *headp, *searchHeadp; - u16 currOffset; - u16 currLength = 2; - u16 tmpLength; - s32 w_offset; - const s16 * const LZOffsetTable = info->LZOffsetTable; - const u16 windowPos = info->WindowPos; - const u16 windowLen = info->WindowLen; - - if (remainSize < 3) - { - return 0; - } - - w_offset = info->LZByteTable[ *nextp ]; - - while (w_offset != -1) - { - if (w_offset < windowPos) - { - searchp = nextp - windowPos + w_offset; - } - else - { - searchp = nextp - windowLen - windowPos + w_offset; - } - - /* ĂǂA͂ɍ */ - if (*(searchp + 1) != *(nextp + 1) || *(searchp + 2) != *(nextp + 2)) - { - w_offset = LZOffsetTable[ w_offset ]; - continue; - } - - if (nextp - searchp < minOffset) - { - // VRAM2oCgANZXȂ̂ (VRAMf[^ǂݏoꍇ邽)A - // Ώۃf[^2oCgÕf[^ɂȂ΂ȂȂB - // - // ItZbg12rbgŊi[邽߁A4096ȉ - #if defined( REVERSE_SEARCH ) - w_offset = LZOffsetTable[ w_offset ]; - continue; - #else - break; - #endif - } - tmpLength = 3; - searchHeadp = searchp + 3; - headp = nextp + 3; - - while (((u32)(headp - nextp) < remainSize) && (*headp == *searchHeadp)) - { - headp++; - searchHeadp++; - tmpLength++; - - // f[^8rbgŊi[邽߁A258ȉ (3̉ʂ͂) - if (tmpLength == maxLength) - { - break; - } - } - if (tmpLength > currLength) - { - // ő咷ItZbgXV - currLength = tmpLength; - currOffset = (u16)((u32)nextp - (u32)searchp); - if (currLength == maxLength) - { - // vőȂ̂ŁAIB - break; - } - } - w_offset = LZOffsetTable[w_offset]; - } - - if (currLength < 3) - { - return 0; - } - *offset = currOffset; - return currLength; -} - -/*---------------------------------------------------------------------------* - Name: LZCompWrite - - Description: - - Arguments: *srcp - size - *dstp - lzSearchOffset - - Returns: - *---------------------------------------------------------------------------*/ -static u32 -LZCompWrite_( const u8 *srcp, s32 size, u8 *dstp, u8 lzSearchOffset, u8 offsetBits ) -{ - u32 LZDstCount = 0; // kf[^̃oCg - u8 LZCompFlags; // k̗LtOn - u8 *LZCompFlagsp; // LZCompFlags i[郁̈|Cg - u16 lastOffset; // vf[^܂ł̃ItZbg (̎_ł̍Œvf[^) - u16 lastLength; // vf[^ (̎_ł̍Œvf[^) - u8 i; - const u32 MAX_LENGTH = 0xFF + 3; - - LZInitTable( &gLZWork ); - gLZWork.OffsetBits = offsetBits; - - while ( size > 0 ) - { - LZCompFlags = 0; - LZCompFlagsp = dstp++; // tOn̊i[ - LZDstCount++; - - // tOn8rbgf[^ƂĊi[邽߁A8񃋁[v - for ( i = 0; i < 8; i++ ) - { - LZCompFlags <<= 1; // (i=0) ͓ɈӖ͂Ȃ - if (size <= 0) - { - // I[ɗꍇ̓tOŌ܂ŃVtgĂI - continue; - } - - if ( (lastLength = SearchLZ(&gLZWork, srcp, size, &lastOffset, lzSearchOffset, MAX_LENGTH)) != 0 ) - { - // k”\ȏꍇ̓tO𗧂Ă - LZCompFlags |= 0x1; - - // ItZbg͏4rbgƉ8rbgɕĊi[ - *dstp++ = (u8)(lastLength - 3); - *dstp++ = (u8)((lastOffset - 1) & 0xff); // gGfBA - *dstp++ = (u8)((lastOffset - 1) >> 8); - LZDstCount += 3; - LZSlide( &gLZWork, srcp, lastLength ); - srcp += lastLength; - size -= lastLength; - } - else - { - // kȂ - LZSlide( &gLZWork, srcp, 1 ); - *dstp++ = *srcp++; - size--; - LZDstCount++; - } - } // 8񃋁[vI - *LZCompFlagsp = LZCompFlags; // tOni[ - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((LZDstCount + i) & 0x3) - { - *dstp++ = 0; - i++; - } - - return LZDstCount; -} - - -typedef struct -{ - u16 No; // f[^No - s16 PaNo; // eNo - u32 Freq; // opx - s16 ChNo[2]; // qNo (0: C 1: E) - u16 PaDepth; // em[h̐[ - u16 LeafDepth; // t܂ł̐[ - u32 HuffCode; // nt} - u16 Bit; // m[h̃rbgf[^ - u16 HWord; // eԐߓ_ɂāA̐ߓ_[gƂ镔؂ HuffTree i[ɕKvȃ -} -HuffData; - -typedef struct -{ - u8 leftOffsetNeed; // ̎qߓ_ւ̃ItZbgKvȂ1 - u8 rightOffsetNeed; // E̎qߓ_ւ̃ItZbgKvȂ1 - u16 leftNodeNo; // ̎qߓ_No - u16 rightNodeNo; // E̎qߓ_No -} -HuffTreeCtrlData; - -// nt}[Nobt@\ -typedef struct -{ - HuffData* huffTable; // huffTable[ 512 ]; 12288B - u16* huffTree; // huffTree[ 256 * 2 ]; 512B - HuffTreeCtrlData* huffTreeCtrl; // huffTreeCtrl[ 256 ]; 1536B - u16 huffTreeTop; // - u8 bitSize; // - u8 padding_[1]; // -} -HuffInfo; // v 14340B - -static void HuffMakeHuffTree ( HuffInfo* info, u16 rootNo ); -static void HuffMakeSubsetHuffTree ( HuffInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ); -static BOOL HuffRemainingNodeCanSetOffset( HuffInfo* info, u16 costHWord ); -static void HuffSetOneNodeOffset ( HuffInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ); -static u16 HuffMakeNode ( HuffData* table, u8 bitSize ); - -static void HuffAddParentDepthToTable( HuffData *table, u16 leftNo, u16 rightNo ); -static void HuffAddCodeToTable ( HuffData* table, u16 nodeNo, u32 paHuffCode ); -static u16 HuffAddCountHWordToTable ( HuffData *table, u16 nodeNo ); - - -// rbgXg[ -typedef struct -{ - u8* dstp; // o͐|C^ - u32 cnt; // o̓TCY - u32 stream; // JgXg[f[^ - u32 stream_len; // Xg[̒ -} -BitStream; - -static void -BitStream_Init( BitStream* context, u8* dstp ) -{ - context->dstp = dstp; - context->cnt = 0; - context->stream = 0; - context->stream_len = 0; -} - -static void -BitStream_Write( BitStream* context, u32 data, u32 width ) -{ - u32 i; - u32 stream = context->stream; - u32 cnt = context->cnt; - u32 stream_len = context->stream_len; - u32 mask = (1 << width) - 1; - - if ( width == 0 ) - { - return; - } - - stream = (stream << width) | ( data & mask ); - stream_len += width; - - for ( i = 0; i < stream_len / 8; i++ ) - { - context->dstp[ cnt++ ] = (u8)( stream >> ( stream_len - ( i + 1 ) * 8 ) ); - } - stream_len %= 8; - - context->stream = stream; - context->cnt = cnt; - context->stream_len = stream_len; -} - -static void -BitStream_Terminate( BitStream* context, u32 align ) -{ - u32 stream = context->stream; - u32 cnt = context->cnt; - u32 stream_len = context->stream_len; - - if ( stream_len > 0 ) - { - stream <<= 8 - stream_len; - - if ( context->stream_len != 0 ) - { - context->dstp[ cnt++ ] = (u8)( stream ); - } - } - - while ( cnt % align ) - { - context->dstp[ cnt++ ] = 0; - } - context->cnt = cnt; - context->stream_len = 0; -} - - - - -/*---------------------------------------------------------------------------* - Name: HuffInitTable - Description: - Arguments: info - bitSize - Returns: None. - *---------------------------------------------------------------------------*/ -static void -HuffInitTable( HuffInfo* info, u8 bitSize ) -{ - u32 tableSize = (1 << bitSize); - u32 i; - - info->huffTable = (HuffData*)malloc( sizeof(HuffData) * tableSize * 2 ); - info->huffTree = (u16*)malloc( sizeof(u16) * tableSize * 2 ); - info->huffTreeCtrl = (HuffTreeCtrlData*)malloc( sizeof(HuffTreeCtrlData) * tableSize ); - - info->huffTreeTop = 1; - info->bitSize = bitSize; - - // huffTable - { - HuffData* table = info->huffTable; - const HuffData HUFF_TABLE_INIT_DATA = { 0, 0, 0, {-1, -1}, 0, 0, 0, 0, 0 }; - for ( i = 0; i < tableSize * 2; i++ ) - { - table[ i ] = HUFF_TABLE_INIT_DATA; - table[ i ].No = (u16)i; - } - } - - // huffTree, huffTreeCtrl - { - const HuffTreeCtrlData HUFF_TREE_CTRL_INIT_DATA = { 1, 1, 0, 0 }; - u16* huffTree = info->huffTree; - HuffTreeCtrlData* huffTreeCtrl = info->huffTreeCtrl; - - for ( i = 0; i < tableSize; i++ ) - { - huffTree[ i * 2 ] = 0; - huffTree[ i * 2 + 1 ] = 0; - huffTreeCtrl[ i ] = HUFF_TREE_CTRL_INIT_DATA; - } - } -} - - -/*---------------------------------------------------------------------------* - Name: LZCountHuffData - Description: - Arguments: srcp - srcSize - info8 - info16 - Returns: None. - *---------------------------------------------------------------------------*/ -static void -LZCountHuffData( const u8* srcp, u32 srcSize, HuffInfo* info8, HuffInfo* info16 ) -{ - u32 srcCnt = 0; - u32 i; - - while ( srcCnt < srcSize ) - { - u8 compFlags = srcp[ srcCnt++ ]; // k̗LtO - for ( i = 0; i < 8; i++ ) - { - if ( compFlags & 0x80 ) // kĂAlength:8, offset:16 - { - u8 length = srcp[ srcCnt++ ]; - u16 offset = srcp[ srcCnt++ ]; // gGfBA - offset |= (srcp[ srcCnt++ ] << 8); - - #if BLEND_COMP_FLAG - info8->huffTable[ length | 0x100 ].Freq++; - #else - info8->huffTable[ length ].Freq++; - #endif - #if !defined(LH_ENC_OFFSET_WIDTH) - info16->huffTable[ offset ].Freq++; - #else - { - u32 offset_bit = 0; - while ( offset != 0 ) - { - ++offset_bit; - offset >>= 1; - } - info16->huffTable[ offset_bit ].Freq++; - } - #endif - } - else - { - u8 data = srcp[ srcCnt++ ]; - info8->huffTable[ data ].Freq++; - } - compFlags <<= 1; - if ( srcCnt >= srcSize ) - { - break; - } - } - } -} - - -/*---------------------------------------------------------------------------* - Name: ConstructHuffTree - Description: - Arguments: info - bitSize - Returns: None. - *---------------------------------------------------------------------------*/ -static void -ConstructHuffTree( HuffInfo* info, u8 bitSize ) -{ - HuffData* table = info->huffTable; - u16 rootNo; - - // opxm[h\z - rootNo = HuffMakeNode( table, bitSize ); - - // nt}R[h (table[i].HuffCode ) - HuffAddCodeToTable( table, rootNo, 0x00 ); // PaDepth̃rbgAHuffCode ̉ʃrbg}XN̂nt}R[h - - // eԐߓ_ɂāA̐ߓ_[gƂ镔؂ huffTree i[ɕKvȃʂ̌vZ - HuffAddCountHWordToTable( table, rootNo ); - - HuffMakeHuffTree( info, rootNo ); - info->huffTreeTop--; -} - -//----------------------------------------------------------------------- -// nt}R[h\쐬 -//----------------------------------------------------------------------- -static void -HuffMakeHuffTree( HuffInfo* info, u16 rootNo ) -{ - s16 i; - s16 costHWord, tmpCostHWord; // ؂̃R[h\쐬Ȃ̃RXg ől̐ߓ_̕؃R[h\ - s16 costOffsetNeed, tmpCostOffsetNeed; - s16 costMaxKey; // RXgŏ̐ߓ_ huffTreeBuf.huffTree 肷邽߂̏ - BOOL costMaxRightFlag; - u16 offsetNeedNum; - BOOL tmpRightFlag; - const u32 MAX_COST = 1 << (info->bitSize - 2); - - info->huffTreeTop = 1; - costOffsetNeed = 0; - - info->huffTreeCtrl[0].leftOffsetNeed = 0; // gpȂ (e[uTCYƂĎgp) - info->huffTreeCtrl[0].rightNodeNo = rootNo; - - while ( 1 ) // return ܂ - { - // ItZbgݒ肷Kv̂m[ȟvZ - offsetNeedNum = 0; - for ( i = 0; i < info->huffTreeTop; i++ ) - { - if ( info->huffTreeCtrl[ i ].leftOffsetNeed ) - { - offsetNeedNum++; - } - if ( info->huffTreeCtrl[ i ].rightOffsetNeed ) - { - offsetNeedNum++; - } - } - - // őRXg̐ߓ_ - costHWord = -1; - costMaxKey = -1; - tmpRightFlag = 0; - - for ( i = 0; i < info->huffTreeTop; i++ ) - { - tmpCostOffsetNeed = (u16)( info->huffTreeTop - i ); - - // ̎qߓ_̃RXg] - if ( info->huffTreeCtrl[i].leftOffsetNeed ) - { - tmpCostHWord = (s16)info->huffTable[ info->huffTreeCtrl[i].leftNodeNo ].HWord; - - if ( (u32)(tmpCostHWord + offsetNeedNum) > MAX_COST ) - { - goto leftCostEvaluationEnd; - } - if ( ! HuffRemainingNodeCanSetOffset( info, (u16)tmpCostHWord ) ) - { - goto leftCostEvaluationEnd; - } - if ( tmpCostHWord > costHWord ) - { - costMaxKey = i; - costMaxRightFlag = 0; - } - else if ( (tmpCostHWord == costHWord) && (tmpCostOffsetNeed > costOffsetNeed) ) - { - costMaxKey = i; - costMaxRightFlag = 0; - } - } -leftCostEvaluationEnd:{} - - if ( info->huffTreeCtrl[i].rightOffsetNeed ) - { - tmpCostHWord = (s16)info->huffTable[ info->huffTreeCtrl[i].rightNodeNo ].HWord; - - if ( (u32)(tmpCostHWord + offsetNeedNum) > MAX_COST ) - { - goto rightCostEvaluationEnd; - } - if ( ! HuffRemainingNodeCanSetOffset( info, (u16)tmpCostHWord ) ) - { - goto rightCostEvaluationEnd; - } - if ( tmpCostHWord > costHWord ) - { - costMaxKey = i; - costMaxRightFlag = 1; - } - else if ( (tmpCostHWord == costHWord) && (tmpCostOffsetNeed > costOffsetNeed) ) - { - costMaxKey = i; - costMaxRightFlag = 1; - } - } -rightCostEvaluationEnd:{} - } - - // ؂܂܂ huffTree Ɋi[ - if ( costMaxKey >= 0 ) - { - HuffMakeSubsetHuffTree( info, (u16)costMaxKey, costMaxRightFlag); - goto nextTreeMaking; - } - else - { - // KvItZbgő̃m[h - for ( i = 0; i < info->huffTreeTop; i++ ) - { - u16 tmp = 0; - tmpRightFlag = 0; - if ( info->huffTreeCtrl[i].leftOffsetNeed ) - { - tmp = info->huffTable[ info->huffTreeCtrl[i].leftNodeNo ].HWord; - } - if ( info->huffTreeCtrl[i].rightOffsetNeed ) - { - if ( info->huffTable[ info->huffTreeCtrl[i].rightNodeNo ].HWord > tmp ) - { - tmpRightFlag = 1; - } - } - if ( (tmp != 0) || (tmpRightFlag) ) - { - HuffSetOneNodeOffset( info, (u16)i, tmpRightFlag ); - goto nextTreeMaking; - } - } - } - return; -nextTreeMaking:{} - } -} - -//----------------------------------------------------------------------- -// ؂܂܂ huffTree Ɋi[ -//----------------------------------------------------------------------- -static void -HuffMakeSubsetHuffTree( HuffInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ) -{ - u16 i; - - i = info->huffTreeTop; - HuffSetOneNodeOffset( info, huffTreeNo, rightNodeFlag ); - - if ( rightNodeFlag ) - { - info->huffTreeCtrl[ huffTreeNo ].rightOffsetNeed = 0; - } - else - { - info->huffTreeCtrl[ huffTreeNo ].leftOffsetNeed = 0; - } - - while ( i < info->huffTreeTop ) - { - if ( info->huffTreeCtrl[ i ].leftOffsetNeed ) - { - HuffSetOneNodeOffset( info, i, 0 ); - info->huffTreeCtrl[ i ].leftOffsetNeed = 0; - } - if ( info->huffTreeCtrl[ i ].rightOffsetNeed ) - { - HuffSetOneNodeOffset( info, i, 1 ); - info->huffTreeCtrl[ i ].rightOffsetNeed = 0; - } - i++; - } -} - -//----------------------------------------------------------------------- -// ^ꂽf[^ʂ̕؂WJĂ huffTree \zɎxႪȂׂ -//----------------------------------------------------------------------- -static BOOL -HuffRemainingNodeCanSetOffset( HuffInfo* info, u16 costHWord ) -{ - u16 i; - s16 capacity; - const u32 MAX_COST = 1 << (info->bitSize - 2); - - capacity = (s16)( MAX_COST - costHWord ); - - // ItZbg i قǑ傫̂ŁA\[gAi = 0 -> huffTreeTop ŌvZ΂悢 - for ( i = 0; i < info->huffTreeTop; i++ ) - { - if ( info->huffTreeCtrl[i].leftOffsetNeed ) - { - if ( (info->huffTreeTop - i) <= capacity ) - { - capacity--; - } - else - { - return 0; - } - } - if ( info->huffTreeCtrl[i].rightOffsetNeed ) - { - if ( (info->huffTreeTop - i) <= capacity ) - { - capacity--; - } - else - { - return 0; - } - } - } - - return 1; -} - - -/*---------------------------------------------------------------------------* - Name: HuffSetOneNodeOffset - Description: 1ߓ_Ant}R[h\쐬 - Arguments: *table nt}e[u - huffTreeNo - rightNodeFlag Ẽm[hł邩ǂ̃tO - Returns: None. - *---------------------------------------------------------------------------*/ -static void -HuffSetOneNodeOffset( HuffInfo* info, u16 huffTreeNo, BOOL rightNodeFlag) -{ - u16 nodeNo; - u16 offsetData = 0; - - HuffData* huffTable = info->huffTable; - u16* huffTree = info->huffTree; - HuffTreeCtrlData* huffTreeCtrl = info->huffTreeCtrl; - u16 huffTreeTop = info->huffTreeTop; - - if (rightNodeFlag) - { - nodeNo = huffTreeCtrl[ huffTreeNo ].rightNodeNo; - huffTreeCtrl[ huffTreeNo ].rightOffsetNeed = 0; - } - else - { - nodeNo = huffTreeCtrl[ huffTreeNo ].leftNodeNo; - huffTreeCtrl [huffTreeNo ].leftOffsetNeed = 0; - } - - // ̎qߓ_ - if ( huffTable[ huffTable[nodeNo].ChNo[0] ].LeafDepth == 0) - { - offsetData |= 0x8000; - huffTree[ huffTreeTop * 2 + 0 ] = (u16)huffTable[ nodeNo ].ChNo[0]; - huffTreeCtrl[ huffTreeTop ].leftNodeNo = (u16)huffTable[ nodeNo ].ChNo[0]; - huffTreeCtrl[ huffTreeTop ].leftOffsetNeed = 0; // ItZbg͕KvȂȂ - } - else - { - huffTreeCtrl[ huffTreeTop ].leftNodeNo = (u16)huffTable[ nodeNo ].ChNo[0]; // ItZbg͕Kv - } - - // E̎qߓ_ - if ( huffTable[ huffTable[ nodeNo ].ChNo[1] ].LeafDepth == 0 ) - { - offsetData |= 0x4000; - huffTree[ huffTreeTop * 2 + 1 ] = (u16)huffTable[nodeNo].ChNo[1]; - huffTreeCtrl[ huffTreeTop ].rightNodeNo = (u16)huffTable[ nodeNo ].ChNo[1]; - huffTreeCtrl[ huffTreeTop ].rightOffsetNeed = 0; // ItZbg͕KvȂȂ - } - else - { - huffTreeCtrl[ huffTreeTop ].rightNodeNo = (u16)huffTable[ nodeNo ].ChNo[1]; // ItZbg͕Kv - } - - offsetData |= (u16)( huffTreeTop - huffTreeNo - 1 ); - huffTree[ huffTreeNo * 2 + (rightNodeFlag? 1 : 0) ] = offsetData; - - info->huffTreeTop++; -} - -/*---------------------------------------------------------------------------* - Name: HuffMakeNode - Description: opxm[hf[^\z - Arguments: table - Returns: None. - *---------------------------------------------------------------------------*/ -static u16 -HuffMakeNode( HuffData* table, u8 bitSize ) -{ - u16 dataNum = ( 1 << bitSize ); - u16 tableTop = (u16)dataNum; // e[u쐬́Ae[ugbvNo - - u32 i; - s32 leftNo, rightNo; // 2؍쐬̃m[hNo - u16 rootNo; // 񕪖؂̃[gNo - - leftNo = -1; - rightNo = -1; - while ( 1 ) - { - // Freq̏ؒ_2’T 1‚͕K‚͂ - // q_()̒T - for ( i = 0; i < tableTop; i++ ) - { - if ( ( table[i].Freq == 0 ) || - ( table[i].PaNo != 0 ) ) - { - continue; - } - - if ( leftNo < 0 ) - { - leftNo = i; - } - else if ( table[i].Freq < table[ leftNo ].Freq ) - { - leftNo = i; - } - } - - // q_(E)̒T - for ( i = 0; i < tableTop; i++ ) - { - if ( ( table[i].Freq == 0 ) || - ( table[i].PaNo != 0 ) || - ( i == leftNo ) ) - { - continue; - } - - if ( rightNo < 0 ) - { - rightNo = i; - } - else if ( table[i].Freq < table[ rightNo ].Freq ) - { - rightNo = i; - } - } - - // 1‚ȂAe[u쐬I - if ( rightNo < 0 ) - { - // lނȂ݂Ȃꍇɂ01ǂlƂȂm[hP쐬 - if ( tableTop == dataNum ) - { - table[ tableTop ].Freq = table[ leftNo ].Freq; - table[ tableTop ].ChNo[0] = (s16)leftNo; - table[ tableTop ].ChNo[1] = (s16)leftNo; - table[ tableTop ].LeafDepth = 1; - table[ leftNo ].PaNo = (s16)tableTop; - table[ leftNo ].Bit = 0; - table[ leftNo ].PaDepth = 1; - } - else - { - tableTop--; - } - rootNo = tableTop; - return rootNo; - } - - // ؂ƉE؂𓝍钸_쐬 - table[ tableTop ].Freq = table[ leftNo ].Freq + table[ rightNo ].Freq; - table[ tableTop ].ChNo[0] = (s16)leftNo; - table[ tableTop ].ChNo[1] = (s16)rightNo; - if ( table[ leftNo ].LeafDepth > table[ rightNo ].LeafDepth ) - { - table[ tableTop ].LeafDepth = (u16)( table[ leftNo ].LeafDepth + 1 ); - } - else - { - table[ tableTop ].LeafDepth = (u16)( table[ rightNo ].LeafDepth + 1 ); - } - - table[ leftNo ].PaNo = table[ rightNo ].PaNo = (s16)( tableTop ); - table[ leftNo ].Bit = 0; - table[ rightNo ].Bit = 1; - - HuffAddParentDepthToTable( table, (u16)leftNo, (u16)rightNo ); - - tableTop++; - leftNo = rightNo = -1; - } -} - - -//----------------------------------------------------------------------- -// 2؍쐬ɁA؂𓝍ƂɁA؂̊e\m[h̐[{1 -//----------------------------------------------------------------------- -static void -HuffAddParentDepthToTable( HuffData *table, u16 leftNo, u16 rightNo ) -{ - table[ leftNo ].PaDepth++; - table[ rightNo ].PaDepth++; - - if ( table[ leftNo ].LeafDepth != 0 ) - { - HuffAddParentDepthToTable( table, (u16)table[ leftNo ].ChNo[0], (u16)table[ leftNo ].ChNo[1] ); - } - if ( table[ rightNo ].LeafDepth != 0 ) - { - HuffAddParentDepthToTable( table, (u16)table[ rightNo ].ChNo[0], (u16)table[ rightNo ].ChNo[1] ); - } -} - -//----------------------------------------------------------------------- -// nt}R[h -//----------------------------------------------------------------------- -static void -HuffAddCodeToTable( HuffData* table, u16 nodeNo, u32 paHuffCode ) -{ - table[ nodeNo ].HuffCode = (paHuffCode << 1) | table[ nodeNo ].Bit; - - if ( table[ nodeNo ].LeafDepth != 0 ) - { - HuffAddCodeToTable( table, (u16)table[ nodeNo ].ChNo[0], table[ nodeNo ].HuffCode ); - HuffAddCodeToTable( table, (u16)table[ nodeNo ].ChNo[1], table[ nodeNo ].HuffCode ); - } -} - - -//----------------------------------------------------------------------- -// ԃm[h huffTree 쐬ɕKvƂf[^ -//----------------------------------------------------------------------- -static u16 -HuffAddCountHWordToTable( HuffData *table, u16 nodeNo) -{ - u16 leftHWord, rightHWord; - - switch ( table[ nodeNo ].LeafDepth ) - { - case 0: - return 0; - case 1: - leftHWord = rightHWord = 0; - break; - default: - leftHWord = HuffAddCountHWordToTable( table, (u16)table[nodeNo].ChNo[0] ); - rightHWord = HuffAddCountHWordToTable( table, (u16)table[nodeNo].ChNo[1] ); - break; - } - - table[ nodeNo ].HWord = (u16)( leftHWord + rightHWord + 1 ); - return (u16)( leftHWord + rightHWord + 1 ); -} - - - -/*---------------------------------------------------------------------------* - Name: LZMakeHuffTree - Description: - Arguments: srcp - tree8 - tree16 - Returns: None. - *---------------------------------------------------------------------------*/ -static void -LZMakeHuffTree( const u8* srcp, u32 srcSize, HuffInfo* info8, HuffInfo* info16 ) -{ - HuffInitTable( info8, LENGTH_BITS ); - HuffInitTable( info16, LH_OFFSET_TABLE_BITS ); - - LZCountHuffData( srcp, srcSize, info8, info16 ); - - ConstructHuffTree( info8, LENGTH_BITS ); - ConstructHuffTree( info16, LH_OFFSET_TABLE_BITS ); -} - - -/*---------------------------------------------------------------------------* - Name: ExportHuffTree - Description: - Arguments: dstp - info - bitSize - Returns: - *---------------------------------------------------------------------------*/ -static u32 -ExportHuffTree( u8* dstp, HuffInfo* info, u8 bitSize ) -{ - BitStream stream; - u32 i; - u8* pSize; - u32 tblSize; - - BitStream_Init( &stream, dstp ); - - pSize = dstp; - BitStream_Write( &stream, 0, RoundUp( bitSize, 8 ) ); - - for ( i = 1; i < (u16)( (info->huffTreeTop + 1) * 2); i++ ) - { - u16 flags = (u16)( info->huffTree[ i ] & 0xC000 ); - u32 data = info->huffTree[ i ] | (flags >> (16 - bitSize)); - BitStream_Write( &stream, data, bitSize ); - } - BitStream_Terminate( &stream, 4 ); - - // e[uTCY1/4TCŸ֕ۑ - tblSize = (stream.cnt / 4) - 1; - if ( RoundUp( bitSize, 8 ) == 8 ) - { - if ( tblSize >= 0x100 ) - { - fprintf(stderr, "table size is over!\n"); - } - *pSize = (u8)( tblSize ); - } - else // RoundUp( bitSize, 8 ) == 16 ) - { - if ( tblSize >= 0x10000 ) - { - fprintf(stderr, "table size is over!\n"); - } - *(u16*)pSize = (u16)( tblSize ); - } - return stream.cnt; -} - - -/*---------------------------------------------------------------------------* - Name: ConvertHuff - Description: - Arguments: info - data - stream - Returns: None. - *---------------------------------------------------------------------------*/ -static void -ConvertHuff( HuffInfo* info, u16 data, BitStream* stream ) -{ - u16 width = info->huffTable[ data ].PaDepth; - u32 code = info->huffTable[ data ].HuffCode; - - BitStream_Write( stream, code, width ); -} - - -/*---------------------------------------------------------------------------* - Name: LZConvertHuffData - Description: - Arguments: srcp - tmpSize - dstp - info8 - info16 - Returns: - *---------------------------------------------------------------------------*/ -static u32 -LZConvertHuffData( const u8* srcp, u32 srcSize, u8* dstp, HuffInfo* info8, HuffInfo* info16 ) -{ - u32 srcCnt = 0; - u32 dstCnt = 0; - - BitStream stream; - - BitStream_Init( &stream, dstp ); - - while ( srcCnt < srcSize ) - { - u32 i; - u8 compFlags = srcp[ srcCnt++ ]; // k̗LtO - #if BLEND_COMP_FLAG - #else - BitStream_Write( &stream, compFlags, 8 ); - #endif - - for ( i = 0; i < 8; i++ ) - { - if ( compFlags & 0x80 ) // kĂAlength:8, offset:16 - { - u8 length = srcp[ srcCnt++ ]; - u16 offset = srcp[ srcCnt++ ]; // gGfBA - offset |= srcp[ srcCnt++ ] << 8; - - #if BLEND_COMP_FLAG - ConvertHuff( info8, length | 0x100, &stream ); - #else - ConvertHuff( info8, length, &stream ); - #endif - #if ! defined(LH_ENC_OFFSET_WIDTH) - ConvertHuff( info16, offset, &stream ); - #else - { - u16 offset_bit = 0; - u16 offset_tmp = offset; - while ( offset_tmp > 0 ) - { - offset_tmp >>= 1; - ++offset_bit; - } - ConvertHuff( info16, offset_bit, &stream ); - // offset0ł邱Ƃ͂Ȃ̂ŁAŏʂ̃rbg͏ȗ - BitStream_Write( &stream, offset & ~(1 << (offset_bit - 1)), offset_bit - 1 ); - } - #endif - } - else - { - u8 data = srcp[ srcCnt++ ]; - - ConvertHuff( info8, data, &stream ); - } - compFlags <<= 1; - if ( srcCnt >= srcSize ) - { - break; - } - } - } - - BitStream_Terminate( &stream, 4 ); - return stream.cnt; -} - -/*---------------------------------------------------------------------------* - Name: LHCompWrite - Description: - Arguments: *srcp - size - *dstp - Returns: - *---------------------------------------------------------------------------*/ -u32 -LHCompWrite( const u8 *srcp, s32 srcSize, u8 *dstp ) -{ - static HuffInfo sTree8; - static HuffInfo sTree16; - - u32 tmpSize; - u32 dstSize; - u8* tmpBuf = (u8*)malloc( srcSize * 3 ); - // ܂srcp𕁒ʂLZk - tmpSize = LZCompWrite_( srcp, srcSize, tmpBuf, 2, LH_OFFSET_BITS ); - - // offsetlength̏Wv - LZMakeHuffTree( tmpBuf, tmpSize, &sTree8, &sTree16 ); - - dstSize = 0; - - // wb_̏ - if ( srcSize < 0x1000000 && srcSize > 0 ) - { - *(u32*)dstp = LH_CODE_HEADER | ( srcSize << 8 ); - dstSize = 4; - } - else - { - *(u32*)dstp = LH_CODE_HEADER; - *(u32*)&dstp[4] = srcSize; - dstSize = 8; - } - // nt}e[uo - dstSize += ExportHuffTree( &dstp[ dstSize ], &sTree8, LENGTH_BITS ); - dstSize += ExportHuffTree( &dstp[ dstSize ], &sTree16, LH_OFFSET_TABLE_BITS ); - - // kʂnt}Ȃo - dstSize += LZConvertHuffData( tmpBuf, tmpSize, &dstp[ dstSize ], &sTree8, &sTree16 ); - - return dstSize; -} - - - -typedef struct -{ - u16 huffTable9 [ (1 << LENGTH_BITS) * 2 ]; - u16 huffTable12[ OFFSET_SIZE_MAX * 2 ]; -} -LHContext; - - -/*---------------------------------------------------------------------------* - Name: HuffImportTree - Description: - Arguments: pTable - srcp - bitSize - srcRemainSize - Returns: - *---------------------------------------------------------------------------*/ -static u32 -HuffImportTree( u16* pTable, const u8* srcp, u8 bitSize, u32 srcRemainSize ) -{ - u32 tableSize; - u32 idx = 1; - u32 data = 0; - u32 bitNum = 0; - u32 bitMask = (1 << bitSize) - 1; - u32 srcCnt = 0; - - if ( bitSize > 8 ) - { - tableSize = *(u16*)srcp; - srcp += 2; - srcCnt += 2; - } - else - { - tableSize = *srcp; - srcp += 1; - srcCnt += 1; - } - tableSize = (tableSize + 1) * 4; - if ( srcRemainSize < tableSize ) - { - return tableSize; - } - - while ( srcCnt < tableSize ) - { - while ( bitNum < bitSize ) - { - data <<= 8; - data |= *srcp++; - ++srcCnt; - bitNum += 8; - } - if ( idx < (u32)((1 << bitSize) * 2) ) - { - pTable[ idx++ ] = (u16)( ( data >> (bitNum - bitSize) ) & bitMask ); - } - bitNum -= bitSize; - } - - pTable[ 0 ] = (u16)idx; - return tableSize; -} - - -/*---------------------------------------------------------------------------* - Name: HuffVerifyTable - - Description: nt}e[u̐`FbN - - Arguments: pTable nt}e[uւ̃|C^ - bit nt}̃rbg - - Returns: ȃe[ȕꍇɂ TRUE - sȃe[ȕꍇɂ FALSE - *---------------------------------------------------------------------------*/ -static BOOL -HuffVerifyTable( const void* pTable, u8 bit ) -{ -#if !defined(LH_ENC_OFFSET_WIDTH) - enum { FLAGS_ARRAY_NUM = 8192 / 8 }; /* 1024Byte */ - static u8 end_flags[ FLAGS_ARRAY_NUM ]; -#else - enum { FLAGS_ARRAY_NUM = 1024 / 8 }; /* 128Byte */ - u8 end_flags[ FLAGS_ARRAY_NUM ]; -#endif - u16* treep = (u16*)pTable; - u16* treeStartp = treep + 1; - u32 treeSize = *treep; - u16* treeEndp = (u16*)pTable + treeSize; - u32 i; - u32 idx; - const u16 ofs_mask = (u16)( (1 << (bit - 2)) - 1 ); - const u16 l_mask = (u16)( 1 << (bit - 1) ); - const u16 r_mask = (u16)( 1 << (bit - 2) ); - - for ( i = 0; i < FLAGS_ARRAY_NUM; i++ ) - { - end_flags[ i ] = 0; - } - - if ( treeSize > (1U << (bit + 1)) ) - { - return FALSE; - } - - idx = 1; - treep = treeStartp; - while ( treep < treeEndp ) - { - if ( (end_flags[ idx / 8 ] & (1 << (idx % 8) )) == 0 ) - { - u32 offset = (u32)( ( (*treep & ofs_mask) + 1 ) << 1 ); - u16* nodep = (u16*)((u32)treep & ~0x3) + offset; - - // I[̃ACgpf[^͓ǂݔ΂ - if ( *treep == 0 && idx >= treeSize - 4 ) - { - goto next; - } - if ( nodep >= treeEndp ) - { - return FALSE; - } - if ( *treep & l_mask ) - { - u32 left = (idx & ~0x1) + offset; - end_flags[ left / 8 ] |= (u8)( 1 << (left % 8) ); - } - if ( *treep & r_mask ) - { - u32 right = (idx & ~0x1) + offset + 1; - end_flags[ right / 8 ] |= (u8)( 1 << (right % 8) ); - } - } - next: - ++idx; - ++treep; - } - return TRUE; -} - - -typedef struct -{ - const u8* srcp; - u32 cnt; - u32 srcSize; - u32 stream; - u32 stream_len; -} -BitReader; - -static INLINE void -BitReader_Init( BitReader* context, const u8* srcp, u32 srcSize ) -{ - context->srcp = srcp; - context->cnt = 0; - context->stream = 0; - context->stream_len = 0; - context->srcSize = srcSize; -} - -static INLINE s8 -BitReader_Read( BitReader* context ) -{ - s8 bit; - if ( context->stream_len == 0 ) - { - if ( context->cnt > context->srcSize ) - { - return -1; - } - context->stream = context->srcp[context->cnt++]; - context->stream_len = 8; - } - bit = (s8)( (context->stream >> (context->stream_len - 1)) & 0x1 ); - context->stream_len--; - return bit; -} - -static s32 -BitReader_ReadEx( BitReader* context, u8 width ) -{ - s32 data; - - ASSERT( width <= 24 ); - - if ( width == 0 ) - { - return 0; - } - - while ( context->stream_len < width ) - { - if ( context->cnt > context->srcSize ) - { - return -1; - } - context->stream <<= 8; - context->stream |= context->srcp[context->cnt++]; - context->stream_len += 8; - } - data = (s32)( (context->stream >> (context->stream_len - width)) & ((1 << width) - 1) ); - context->stream_len -= width; - return data; -} - - -/*---------------------------------------------------------------------------* - Name: LHCompRead - Description: - Arguments: srcp - size - *dstp - Returns: - *---------------------------------------------------------------------------*/ -s32 -LHCompRead( const u8* srcp, u32 srcSize, u8* dstp ) -{ - static LHContext sContext; - u32 dstSize; - u32 srcCnt = 0; - u32 dstCnt = 0; - BitReader stream; - - if ( srcSize < 4 ) - { - return -1; - } - - // wb_̓ǂݍ - dstSize = *(u32*)srcp >> 8; - srcCnt = 4; - if ( dstSize == 0 ) - { - if ( srcSize < 8 ) - { - return -1; - } - dstSize = *(u32*)(srcp + 4); - srcCnt += 4; - } - - // nt}e[uǂ - srcCnt += HuffImportTree( sContext.huffTable9, &srcp[srcCnt], LENGTH_BITS, srcSize - srcCnt ); - if ( srcCnt >= srcSize || (!HuffVerifyTable( sContext.huffTable9, LENGTH_BITS )) ) - { - return -1; - } - - srcCnt += HuffImportTree( sContext.huffTable12, &srcp[srcCnt], LH_OFFSET_TABLE_BITS, srcSize - srcCnt ); - - if ( srcCnt >= srcSize || (!HuffVerifyTable( sContext.huffTable12, LH_OFFSET_TABLE_BITS )) ) - { - return -1; - } - - BitReader_Init( &stream, &srcp[srcCnt], srcSize - srcCnt ); - - while ( dstCnt < dstSize ) - { - u16* nodep = sContext.huffTable9 + 1; - u16 val; - do - { - s8 bit = BitReader_Read( &stream ); - u32 offset = (((*nodep & 0x7F) + 1) << 1) + bit; - - if ( bit < 0 ) - { - return -1; - } - - if ( *nodep & (0x100 >> bit) ) - { - nodep = (u16*)((u32)nodep & ~0x3); - val = *(nodep + offset); - break; - } - else - { - nodep = (u16*)((u32)nodep & ~0x3); - nodep += offset; - } - } while ( 1 ); - - if ( val < 0x100 ) - // 񈳏kf[^ - { - dstp[dstCnt++] = (u8)val; - } - else - // kf[^ - { - #if !defined(LH_ENC_OFFSET_WIDTH) - #define OFFSET_MASK 0x3FF - #define LEAF_FLAG 0x800 - #else - #define OFFSET_MASK 0x07 - #define LEAF_FLAG 0x10 - u16 offset_bit; - #endif - u16 length = (val & 0xFF) + 3; - u16* nodep = sContext.huffTable12 + 1; - do - { - s8 bit = BitReader_Read( &stream ); - u32 offset = (((*nodep & OFFSET_MASK) + 1) << 1) + bit; - - if ( bit < 0 ) - { - return -1; - } - - if ( *nodep & (LEAF_FLAG >> bit) ) - { - nodep = (u16*)((u32)nodep & ~0x3); - val = *(nodep + offset); - break; - } - else - { - nodep = (u16*)((u32)nodep & ~0x3); - nodep += offset; - } - } while ( 1 ); - - #if defined(LH_ENC_OFFSET_WIDTH) - offset_bit = val; - val = 0; - if ( offset_bit > 0 ) - { - val = 1; - while ( --offset_bit > 0 ) - { - val <<= 1; - val |= BitReader_Read( &stream ); - } - } - #endif - val += 1; - - // obt@I[o[`FbN - if ( dstCnt + length > dstSize ) - { - return -1; - } - if ( dstCnt < val ) - { - return -1; - } - if ( srcCnt + stream.cnt > srcSize ) - { - return -1; - } - - while ( length-- > 0 ) - { - dstp[dstCnt] = dstp[dstCnt - val]; - ++dstCnt; - } - #undef OFFSET_MASK - #undef LEAF_FLAG - } - } - return dstCnt; - - -} - - -//============================================================================== -// -// LRCk/WJ -// -//============================================================================== - -#define LRC_ADAPTIVE // K^WR[_gp邩ǂ -#define RC_MAX_RANGE 0x80000000 -#define RC_UNIT_BITS 8 // 1oCgPʂŏo -// #define LRC_ENC_OFFSET_WIDTH // NOTE: ̃IvVł͐ɓłȂB - // mɂ́AWJɐbitf[^WR[hƂĐ - // ǂ܂Ă܂̂ŁAɂ͎̃f[^oȂB - -#if defined( LRC_ADAPTIVE ) - #define TABLE8_ADAPTIVE TRUE -#else - #define TABLE8_ADAPTIVE FALSE -#endif - -#if defined( LRC_ENC_OFFSET_WIDTH ) - #define TABLE16_ADAPTIVE FALSE // bitLengpꍇɂ́AEe[ûofs͐ÓIRCOK - #define LRC_OFFSET_BITS 15 - #define LRC_OFFSET_TABLE_BITS 5 -#else - #define TABLE16_ADAPTIVE TRUE // bitLengpȂꍇɂ́AEe[u傫Ȃ̂ofs͓IRCgp - #define LRC_OFFSET_BITS 12 - #define LRC_OFFSET_TABLE_BITS LRC_OFFSET_BITS -#endif - -// WR[_p\ -typedef struct -{ - u32 *freq; // opxe[u (1 << bitSize) * sizeof(u32) Byte - u32 *low_cnt; // LOWEle[u (1 << bitSize) * sizeof(u32) Byte - u32 total; // g[^ 4 Byte - u8 bitSize; // rbgTCY 1 Byte - u8 padding_[1]; // -} -RCCompressionInfo; - -// WR[_ԍ\ -typedef struct -{ - u32 low; - u32 range; - u32 code; // WĴݎgp - u8 carry; // k̂ݎgp - u32 carry_cnt; // k̂ݎgp -} -RCState; - -/*---------------------------------------------------------------------------* - Name: RCInitState_ - - Description: RCԂ̏Ȃ܂B - - Arguments: state - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCInitState_( RCState* state ) -{ - // JnRange0x80000000Ȃ̂ŁA񂢂Ȃ茅グ邱Ƃ͂Ȃ - state->low = 0; - state->range = RC_MAX_RANGE; - state->code = 0; - state->carry = 0; - state->carry_cnt = 0; -} - - -/*---------------------------------------------------------------------------* - Name: RCInitInfo_ - - Description: ÓIWR[_̃e[u - ׂĂ̏opx0ŏ܂B - - Arguments: info - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCInitInfo_( RCCompressionInfo* info, u8 bitSize ) -{ - u32 tableSize = (1 << bitSize); - u32 i; - - info->bitSize = bitSize; - info->freq = (u32*)malloc( sizeof(u32) * tableSize ); - info->low_cnt = (u32*)malloc( sizeof(u32) * tableSize ); - - for ( i = 0; i < tableSize; i++ ) - { - info->freq[ i ] = 0; - info->low_cnt[ i ] = 0; - } - info->total = 0; -} - -/*---------------------------------------------------------------------------* - Name: RCExportTable_ - - Description: ÓIRCe[uo͂܂B - - Arguments: dstp - info - - Returns: o̓f[^TCY - *---------------------------------------------------------------------------*/ -static u32 -RCExportTable_( u8* dstp, RCCompressionInfo* info ) -{ - u32 tableSize = (1 << info->bitSize); - u32 cnt = 0; - u32 i; - - // pxe[ȕo(16bitgGfBA) - for ( i = 0; i < tableSize; i++ ) - { - dstp[ cnt++ ] = (u8)( info->freq[ i ] ); - dstp[ cnt++ ] = (u8)( info->freq[ i ] >> 8 ); - } - return cnt; -} - -/*---------------------------------------------------------------------------* - Name: RCImportTable_ - - Description: - - Arguments: info - srcp - srcRemainSize - - Returns: - *---------------------------------------------------------------------------*/ -static u32 -RCImportTable_( RCCompressionInfo* info, const u8* srcp, u32 srcRemainSize ) -{ - u32 tableSize = (1 << info->bitSize); - u32 cnt = 0; - u32 i; - - if ( srcRemainSize < tableSize * sizeof(u16) ) - { - return srcRemainSize; - } - - // pxe[ũC|[g(16bitgGfBA) - for ( i = 0; i < tableSize; i++ ) - { - info->freq[ i ] = srcp[ cnt ] | ( srcp[ cnt + 1 ] << 8 ); - cnt += 2; - } - info->low_cnt[ 0 ] = 0; - info->total = info->freq[ 0 ]; - for ( i = 1; i < tableSize; i++ ) - { - info->low_cnt[ i ] = info->low_cnt[ i - 1 ] + info->freq[ i - 1 ]; - info->total += info->freq[ i ]; - } - return cnt; -} - -/*---------------------------------------------------------------------------* - Name: RCNormalizeTable_ - - Description: RCe[u̐K - - Arguments: info - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCNormalizeTable_( RCCompressionInfo* info ) -{ - u32 tableSize = (1 << info->bitSize); - u32 i; - - // g[^̃JEg - info->total = 0; - for ( i = 0; i < tableSize; i++ ) - { - info->total += info->freq[ i ]; - } - - // K - // 0x10000֐K - #define NORMAL_FREQ 0x10000 - { - f32 rate = (f32)NORMAL_FREQ / info->total; - u32 max_i = 0; - u32 max_freq = 0; - - info->total = 0; - for ( i = 0; i < tableSize; i++ ) - { - u32 orig = info->freq[ i ]; - info->freq[ i ] = (u32)(rate * info->freq[ i ] + 0.5f); - if ( orig != 0 && info->freq[ i ] == 0 ) - { - info->freq[ i ] = 1; - } - - info->total += info->freq[ i ]; - if ( info->freq[ i ] >= max_freq ) - { - max_i = i; - max_freq = info->freq[ i ]; - } - } - // łopx̍l덷ɗp - if ( info->total > NORMAL_FREQ ) - { - info->freq[ max_i ] -= (info->total - NORMAL_FREQ); - } - else - { - info->freq[ max_i ] += (NORMAL_FREQ - info->total); - } - info->total = NORMAL_FREQ; - } - #undef NORMAL_FREQ - - // low_cnťvZ - info->low_cnt[ 0 ] = 0; - for ( i = 1; i < tableSize; i++ ) - { - info->low_cnt[ i ] = info->low_cnt[ i - 1 ] + info->freq[ i - 1 ]; - } -} - - -/*---------------------------------------------------------------------------* - Name: RCCountData_ - - Description: LZkf[^ÓIWR[_p̃e[u쐬܂B - - Arguments: srcp - srcSize - info8 - info16 - - Returns: - *---------------------------------------------------------------------------*/ -static void -RCCountData_( const u8* srcp, u32 srcSize, RCCompressionInfo* info8, RCCompressionInfo* info16 ) -{ - u32 srcCnt = 0; - u32 i; - - while ( srcCnt < srcSize ) - { - u8 compFlags = srcp[ srcCnt++ ]; // k̗LtO - for ( i = 0; i < 8; i++ ) - { - if ( compFlags & 0x80 ) // kĂAlength:8, offset:16 - { - u8 length = srcp[ srcCnt++ ]; - u16 offset = srcp[ srcCnt++ ]; // gGfBA - offset |= (srcp[ srcCnt++ ] << 8); - - #if BLEND_COMP_FLAG - info8->freq[ length | 0x100 ]++; - #else - info8->freq[ length ]++; - #endif - #if !defined( LRC_ENC_OFFSET_WIDTH ) - info16->freq[ offset ]++; - #else - { - u32 offset_bit = 0; - while ( offset != 0 ) - { - ++offset_bit; - offset >>= 1; - } - info16->freq[ offset_bit ]++; - } - #endif - } - else - { - u8 data = srcp[ srcCnt++ ]; - info8->freq[ data ]++; - } - compFlags <<= 1; - if ( srcCnt >= srcSize ) - { - break; - } - } - } - - RCNormalizeTable_( info8 ); - RCNormalizeTable_( info16 ); -} - - - -/*---------------------------------------------------------------------------* - Name: RCAInitInfo_ - - Description: K^WR[_̃e[u - ׂĂ̏opx1ŏ܂B - - Arguments: info - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCAInitInfo_( RCCompressionInfo* info, u8 bitSize ) -{ - u32 tableSize = (1 << bitSize); - u32 i; - - info->bitSize = bitSize; - info->freq = (u32*)malloc( sizeof(u32) * tableSize ); - info->low_cnt = (u32*)malloc( sizeof(u32) * tableSize ); - - for ( i = 0; i < tableSize; i++ ) - { - info->freq[ i ] = 1; - info->low_cnt[ i ] = i; - } - info->total = tableSize; -} - - -/*---------------------------------------------------------------------------* - Name: RCAAddCount_ - - Description: K^WR[_̕pxe[uXV܂B - - Arguments: info - val - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCAAddCount_( RCCompressionInfo* info, u16 val ) -{ - u32 i; - u32 tableSize = (1 << info->bitSize); - - info->freq[ val ]++; - info->total++; - for ( i = val + 1; i < tableSize; i++ ) - { - info->low_cnt[ i ]++; - } - - // g[^őlzꍇɂ́Ač\B - if ( info->total >= 0x00010000 ) - { - if ( info->freq[ 0 ] > 1 ) - { - info->freq[ 0 ] = info->freq[ 0 ] / 2; - } - info->low_cnt[ 0 ] = 0; - info->total = info->freq[ 0 ]; - - for ( i = 1; i < tableSize; i++ ) - { - if ( info->freq[ i ] > 1 ) - { - info->freq[ i ] >>= 1; - } - info->low_cnt[ i ] = info->low_cnt[ i - 1 ] + info->freq[ i - 1 ]; - info->total += info->freq[ i ]; - } - } -} - - -/*---------------------------------------------------------------------------* - Name: ConvertRC - Description: - Arguments: info - data - stream - Returns: None. - *---------------------------------------------------------------------------*/ -static void -ConvertRC( RCCompressionInfo* info, u16 data, BitStream* stream, RCState* state, BOOL adaptive ) -{ -#define MIN_RANGE 0x01000000 - u32 temp = state->range / info->total; - u32 prevLow = state->low; - - state->low += info->low_cnt[ data ] * temp; - state->range = info->freq[ data ] * temp; - - if ( adaptive ) - { - // opxe[uXV - RCAAddCount_( info, data ); - } - - // オ肪ꍇ̏ - if ( prevLow > state->low ) - { - // L[Pグ - state->carry++; - // L[(L[JE^ - 1)‚0x00o͂܂B - if ( state->carry_cnt > 1 ) - { - BitStream_Write( stream, state->carry, RC_UNIT_BITS ); - state->carry_cnt--; - state->carry = 0x00; - } - while ( state->carry_cnt > 1 ) - { - BitStream_Write( stream, 0x00, RC_UNIT_BITS ); - state->carry_cnt--; - } - } - - // Rangȅ1oCgɂȂ猅グ - while ( state->range < MIN_RANGE ) - { - u8 candidate = (u8)( state->low >> 24 ); - // ̃L[0xFF̏ꍇ͍XɌグ蓾̂carryo͂carry_cnt₷ - if ( candidate == 0xFF ) - { - state->carry_cnt++; - } - else - // ̃L[0xFFł͂Ȃꍇcarryo͂ - { - // carry(carry_cnt - 1)0xFFo͂ - if ( state->carry_cnt > 0 ) - { - BitStream_Write( stream, state->carry, RC_UNIT_BITS ); - state->carry_cnt--; - } - while ( state->carry_cnt > 0 ) - { - BitStream_Write( stream, 0xFF, RC_UNIT_BITS ); - state->carry_cnt--; - } - // Vcarryɒu - state->carry = candidate; - state->carry_cnt = 1; - } - state->low <<= 8; - state->range <<= 8; - } -#undef MIN_RANGE -} - -/*---------------------------------------------------------------------------* - Name: FinalizeRC_ - Description: - Arguments: srcp - tmpSize - dstp - info8 - info16 - Returns: - *---------------------------------------------------------------------------*/ -static void -FinalizeRC_( BitStream* stream, RCState* state ) -{ - // carry(carry_cnt - 1)0xFFo͂ - if ( state->carry_cnt > 0 ) - { - BitStream_Write( stream, state->carry, RC_UNIT_BITS ); - state->carry_cnt--; - } - while ( state->carry_cnt > 0 ) - { - BitStream_Write( stream, 0xFF, RC_UNIT_BITS ); - state->carry_cnt--; - } - // lowɎcf[^o - BitStream_Write( stream, state->low >> 24, RC_UNIT_BITS ); - BitStream_Write( stream, state->low >> 16, RC_UNIT_BITS ); - BitStream_Write( stream, state->low >> 8, RC_UNIT_BITS ); - BitStream_Write( stream, state->low , RC_UNIT_BITS ); -} - - -/*---------------------------------------------------------------------------* - Name: LZConvertDataRC - Description: - Arguments: srcp - tmpSize - dstp - info8 - info16 - Returns: - *---------------------------------------------------------------------------*/ -static u32 -LZConvertDataRC( const u8* srcp, u32 srcSize, u8* dstp, RCCompressionInfo* info8, RCCompressionInfo* info16 ) -{ - u32 srcCnt = 0; - u32 dstCnt = 0; - - BitStream stream; - RCState rcState; - - RCInitState_( &rcState ); - - BitStream_Init( &stream, dstp ); - - while ( srcCnt < srcSize ) - { - u32 i; - u8 compFlags = srcp[ srcCnt++ ]; // k̗LtO - - for ( i = 0; i < 8; i++ ) - { - if ( compFlags & 0x80 ) // kĂAlength:8, offset:16 - { - u8 length = srcp[ srcCnt++ ]; - u16 offset = srcp[ srcCnt++ ]; // gGfBA - offset |= srcp[ srcCnt++ ] << 8; - - // length | 0x100WR[_Ɋ| - ConvertRC( info8, length | 0x100, &stream, &rcState, TABLE8_ADAPTIVE ); - - #if !defined( LRC_ENC_OFFSET_WIDTH ) // e[uTCY傫̂ŋIɓK^ - ConvertRC( info16, offset, &stream, &rcState, TABLE16_ADAPTIVE ); - #else - { - u16 offset_bit = 0; - u16 offset_tmp = offset; - while ( offset_tmp > 0 ) - { - offset_tmp >>= 1; - ++offset_bit; - } - ConvertRC( info16, offset_bit, &stream, &rcState, TABLE16_ADAPTIVE ); - // offset0ł邱Ƃ͂Ȃ̂ŁAŏʂ̃rbg͏ȗ - BitStream_Write( &stream, offset & ~(1 << (offset_bit - 1)), offset_bit - 1 ); - } - #endif - } - else - { - u8 data = srcp[ srcCnt++ ]; - - ConvertRC( info8, data, &stream, &rcState, TABLE8_ADAPTIVE ); - } - compFlags <<= 1; - if ( srcCnt >= srcSize ) - { - break; - } - } - } - // carrylowɎcf[^fo - FinalizeRC_( &stream, &rcState ); - - BitStream_Terminate( &stream, 4 ); - return stream.cnt; -} - - -/*---------------------------------------------------------------------------* - Name: LRCCompWrite - - Description: - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -u32 LRCCompWrite( const u8* srcp, u32 srcSize, u8* dstp ) -{ - RCCompressionInfo sRCInfo8; - RCCompressionInfo sRCInfo16; - - u32 tmpSize; - u32 dstSize; - u8* tmpBuf = (u8*)malloc( srcSize * 3 ); - // ܂srcp𕁒ʂLZk - tmpSize = LZCompWrite_( srcp, srcSize, tmpBuf, 2, LRC_OFFSET_BITS ); - - // e[u - RCInitInfo_( &sRCInfo8, LENGTH_BITS ); - RCInitInfo_( &sRCInfo16, LRC_OFFSET_TABLE_BITS ); - - dstSize = 0; - - // wb_̏ - if ( srcSize < 0x1000000 && srcSize > 0 ) - { - *(u32*)dstp = LRC_CODE_HEADER | ( srcSize << 8 ); - dstSize = 4; - } - else - { - *(u32*)dstp = LRC_CODE_HEADER; - *(u32*)&dstp[4] = srcSize; - dstSize = 8; - } - - // ÓIWR[_̕px\쐬Ă(gp邩ǂ̓IvV) - RCCountData_( tmpBuf, tmpSize, &sRCInfo8, &sRCInfo16 ); - -#if TABLE8_ADAPTIVE - RCAInitInfo_( &sRCInfo8, LENGTH_BITS ); -#else // if (! TABLE8_ADAPTIVE ) - dstSize += RCExportTable_( &dstp[ dstSize ], &sRCInfo8 ); -#endif - -#if TABLE16_ADAPTIVE - RCAInitInfo_( &sRCInfo16, LRC_OFFSET_TABLE_BITS ); -#else // if (! TABLE16_ADAPTIVE ) - dstSize += RCExportTable_( &dstp[ dstSize ], &sRCInfo16 ); -#endif - - // kʂWR[_Ȃo - dstSize += LZConvertDataRC( tmpBuf, tmpSize, &dstp[ dstSize ], &sRCInfo8, &sRCInfo16 ); - - return dstSize; -} - - - -/*---------------------------------------------------------------------------* - Name: SearchRC_ - - Description: - - Arguments: info - code - range - low - - Returns: - *---------------------------------------------------------------------------*/ -static u16 -SearchRC_( RCCompressionInfo* info, u32 code, u32 range, u32 low ) -{ - u32 tableSize = (1 << info->bitSize); - u32 codeVal = code - low; - u32 i; - u32 temp = range / info->total; - u32 tempVal = codeVal / temp; - -#if 0 - // TODO: Ƃ肠`TA񕪒Tɂׂ - for ( i = 0; i < tableSize - 1; i++ ) - { - if ( info->low_cnt[ i + 1 ] > tempVal ) - { - while ( info->freq[ i ] == 0 ) - { - --i; - } - return (u16)i; - } - } - return (u16)( (1 << info->bitSize) - 1 ); -#else - // 񕪒T - u32 left = 0; - u32 right = tableSize - 1; - - while ( left < right ) - { - i = (left + right) / 2; - - if ( info->low_cnt[ i ] > tempVal ) - { - right = i; - } - else - { - left = i + 1; - } - } - - i = left; - while ( info->low_cnt[ i ] > tempVal ) - { - --i; - } - return (u16)i; - -#endif -} - - - -static u16 -RCGetDate_( BitReader* stream, RCCompressionInfo* info, RCState* state, BOOL adaptive ) -{ -#define MIN_RANGE 0x01000000 - u16 val = SearchRC_( info, state->code, state->range, state->low ); - - { - u32 tmp; - tmp = state->range / info->total; - state->low += info->low_cnt[ val ] * tmp; - state->range = info->freq[ val ] * tmp; - } - - // opxe[uXV - if ( adaptive ) - { - RCAAddCount_( info, val ); - } - while ( state->range < MIN_RANGE ) - { - state->code <<= 8; - state->code += BitReader_ReadEx( stream, 8 ); - state->range <<= 8; - state->low <<= 8; - } - return val; -#undef MIN_RANGE -} - - -/*---------------------------------------------------------------------------* - Name: LRCCompRead - - Description: - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 LRCCompRead( const u8* srcp, u32 srcSize, u8* dstp ) -{ - RCCompressionInfo sRCInfo8; - RCCompressionInfo sRCInfo16; - RCState rcState; - - u32 dstSize; - u32 srcCnt = 0; - u32 dstCnt = 0; - BitReader stream; - - if ( srcSize < 4 ) - { - return -1; - } - - // wb_̓ǂݍ - dstSize = *(u32*)srcp >> 8; - srcCnt = 4; - if ( dstSize == 0 ) - { - if ( srcSize < 8 ) - { - return -1; - } - dstSize = *(u32*)(srcp + 4); - srcCnt += 4; - } - - // RCpxe[uǂ -#if TABLE8_ADAPTIVE - RCAInitInfo_( &sRCInfo8, LENGTH_BITS ); -#else - RCInitInfo_( &sRCInfo8, LENGTH_BITS ); - srcCnt += RCImportTable_( &sRCInfo8, &srcp[ srcCnt ], srcSize - srcCnt ); -#endif -#if TABLE16_ADAPTIVE - RCAInitInfo_( &sRCInfo16, LRC_OFFSET_TABLE_BITS ); -#else - RCInitInfo_( &sRCInfo16, LRC_OFFSET_TABLE_BITS ); - srcCnt += RCImportTable_( &sRCInfo16, &srcp[ srcCnt ], srcSize - srcCnt ); -#endif - - BitReader_Init( &stream, &srcp[ srcCnt ], srcSize - srcCnt ); - - if ( srcSize - srcCnt <= 4 ) - { - // Œł̃R[h4Byte͕Kv - return -1; - } - - RCInitState_( &rcState ); - - rcState.code = (u32)( (BitReader_ReadEx( &stream, 8 ) << 24) | - (BitReader_ReadEx( &stream, 8 ) << 16) | - (BitReader_ReadEx( &stream, 8 ) << 8) | - (BitReader_ReadEx( &stream, 8 ) ) ); - - while ( dstCnt < dstSize ) - { - u16 val = (u16)( RCGetDate_( &stream, &sRCInfo8, &rcState, TABLE8_ADAPTIVE ) ); - - if ( val < 0x100 ) - // 񈳏kf[^ - { - dstp[ dstCnt++ ] = (u8)val; - } - else - // kf[^ - { - u16 length = (val & 0xFF) + 3; - val = (u16)( RCGetDate_( &stream, &sRCInfo16, &rcState, TABLE16_ADAPTIVE ) ); - - #if defined( LRC_ENC_OFFSET_WIDTH ) - { - u16 offset_bit = val; - val = 0; - if ( offset_bit > 0 ) - { - val = 1; - while ( --offset_bit > 0 ) - { - val <<= 1; - val |= BitReader_Read( &stream ); - } - } - } - #endif - val += 1; - - // obt@I[o[`FbN - if ( dstCnt + length > dstSize ) - { - return -1; - } - if ( dstCnt < val ) - { - return -1; - } - if ( srcCnt + stream.cnt > srcSize ) - { - return -1; - } - - while ( length-- > 0 ) - { - dstp[ dstCnt ] = dstp[ dstCnt - val ]; - ++dstCnt; - } - } - } - - return dstCnt; -} - - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.h b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.h deleted file mode 100644 index 72dc2e5b..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/multipleCompLib.h +++ /dev/null @@ -1,55 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: multipleCompLib.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -// nitroCompLib.h : nitroCompLib.DLL ̃C wb_[ t@C -// - -#ifndef __MULTIPLE_COMPLIB_H__ -#define __MULTIPLE_COMPLIB_H__ - -//=========================================================================================== -// CN[h -//=========================================================================================== -#include -#include -#include -#include -#include "types.h" - -//=========================================================================================== -// vg^Cv錾 -//=========================================================================================== -// C++p -#ifdef __cplusplus -extern "C" -{ -#endif - -s32 LHCompRead( const u8* srcp, u32 srcSize, u8* dstp ); - -u32 LHCompWrite( const u8* srcp, s32 size, u8* dstp ); - -s32 LRCCompRead( const u8* srcp, u32 srcSize, u8* dstp ); - -u32 LRCCompWrite( const u8* srcp, u32 size, u8* dstp ); - - -#ifdef __cplusplus -} -#endif - -#endif // __MULTIPLEX_COMPLIB_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.c b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.c deleted file mode 100644 index 135f7a45..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.c +++ /dev/null @@ -1,2282 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: nitroCompLib.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "nitroCompLib.h" - -#undef _DEBUG -#ifdef _DEBUG -#define new DEBUG_NEW -#define DEBUG_PRINT -// #define DEBUG_PRINT_DIFFFILT -#define DEBUG_PRINT_RL -// #define DEBUG_PRINT_HUFF -// #define DEBUG_PRINT_LZ -// #define DEBUG_PRINT_DATAMATCH -#endif - - -#ifdef __cplusplus -#define EXTERN extern "C" -#define STATIC -#else -#define EXTERN -#define STATIC static -#endif - - -#ifdef DEBUG_PRINT -#define dbg_printf fprintf -#else -#define dbg_printf dummy -#endif - -#ifdef DEBUG_PRINT_DIFFFILT -#define dbg_printf_dif fprintf -#else -#define dbg_printf_dif dummy -#endif - -#ifdef DEBUG_PRINT_RL -#define dbg_printf_rl fprintf -#else -#define dbg_printf_rl dummy -#endif - -#ifdef DEBGU_PRINT_HUFF -#define dbg_printf_huff fprintf -#else -#define dbg_printf_huff dummy -#endif - -#ifdef DEBGU_PRINT_LZ -#define dbg_printf_lz fprintf -#else -#define dbg_printf_lz dummy -#endif - -#ifdef DEBUG_PRINT_DATAMATCH -#define dbg_printf_match fprintf -#else -#define dbg_printf_match dummy -#endif - -void dummy(void *fp, ...) -{ -} - - -//================================================================================== -// O[oϐ錾 -//================================================================================== -static u8 *pCompBuf[2]; // kɗp_uobt@ -static u8 compBufNo = 1; // Lȃ_uobt@ - -//================================================================================== -// vg^Cv錾 -//================================================================================== -static u32 RawWrite(u8 *srcp, u32 size, u8 *dstp); -static u32 DiffFiltWrite(u8 *srcp, u32 size, u8 *dstp, u8 diffBitSize); -static u32 RLCompWrite(u8 *srcp, u32 size, u8 *dstp); -static u32 LZCompWriteEx(u8 *srcp, u32 size, u8 *dstp, u8 lzSearchOffset, BOOL ex_available); -static u32 HuffCompWrite(u8 *srcp, u32 size, u8 *dstp, u8 huffBitSize); - -static s32 RawRead ( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize ); -static s32 DiffFiltRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, u8 diffBitSize ); -static s32 RLCompRead ( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize ); -static s32 LZCompReadEx( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, BOOL ex_available ); -static s32 HuffCompRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, u8 huffBitSize ); - -/* -//================================================================================== -// DLLp֐ -//================================================================================== -EXTERN BOOL WINAPI DllMain( HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved) -{ - return TRUE; -} -*/ - -//---------------------------------------------------------------------------------- -// k̃f[^u߂̃̈m -// kÕf[^2{̗̈mۂ -//---------------------------------------------------------------------------------- -EXTERN u8 * STDCALL nitroCompMalloc(u32 size) -{ - return (u8 *)malloc(size * 3 + 512); -} - -//---------------------------------------------------------------------------------- -// k̃f[^uĂ̈ -//---------------------------------------------------------------------------------- -EXTERN void STDCALL nitroCompFree(u8 *p) -{ - if (p != NULL) - { - free((void *)p); - p = NULL; - } -} - -//------------------------------------------------------------ -// f[^̈k -//------------------------------------------------------------ -EXTERN u32 STDCALL nitroCompress( const u8 *srcp, u32 srcSize, u8 *dstp, char *compList, u8 rawHeaderFlag ) -{ - char *pCompList; // compLisť݂̎Qƃ|Cg - u32 dataSize, nextDataSize; // kf[^̃TCY(oCgP) - u8 *pReadBuf; // kf[^̐擪Ԓnw|C^ - u8 bitSize; // tB^Cnt}̓KpP - char str[16]; - u16 i, j; - u8 lzSearchOffset; - -// pCompBuf[0] = (u8 *)malloc(srcSize*2 + 4 + 256*2); // ň̃nt} size*2 + 4 + 256*2 Ȃ̂ŁA -// pCompBuf[1] = (u8 *)malloc(srcSize*2 + 4 + 256*2); // ̑̈kf[^wb_ljŁAs”\ - pCompBuf[0] = (u8 *)malloc(srcSize * 3 + 256 * 2); - pCompBuf[1] = (u8 *)malloc(srcSize * 3 + 256 * 2); - pReadBuf = pCompBuf[0]; - compBufNo = 1; // dv!!@ȂƂQڂnitroCompressĂяoƂɂȂ - - // malloc `FbN - if (pCompBuf[0] == NULL || pCompBuf[1] == NULL) - { - fprintf(stderr, "Error: Memory is not enough.\n"); - exit(1); - } - - dataSize = srcSize; - - // NULLwb_(kÕf[^ṕA[wb_) ̒lj - if (rawHeaderFlag) - { - dataSize += 4; - *(u32 *)pReadBuf = srcSize << 8 | 0; // f[^Ewb_ - memcpy(&pReadBuf[4], srcp, srcSize); - } - else - { - memcpy(pReadBuf, srcp, srcSize); - } - - pCompList = compList; // ki[z|Cg - - // ki[zɗvfA[v - while (1) - { - switch (*pCompList) - { - case 'd': - { - pCompList++; // 'd' ̎ɂ́A8 16 - str[0] = *pCompList; - if (*pCompList == '1') - { - pCompList++; - str[1] = *pCompList; - str[2] = '\n'; - } - bitSize = atoi(str); // tB^̓KpPʂi[ - str[0] = str[1] = '\n'; - - dbg_printf(stderr, "nitroCompress Diff %d\n", bitSize); - - if ((bitSize == 16) && (dataSize & 0x01)) - { - fprintf(stderr, "16-bit differencial filter must be 2-byte allignment.\n"); - exit(1); - } - nextDataSize = DiffFiltWrite(pReadBuf, dataSize, pCompBuf[compBufNo], bitSize); - } - break; - - case 'r': - { - dbg_printf(stderr, "nitroCompress RL\n"); - - nextDataSize = RLCompWrite(pReadBuf, dataSize, pCompBuf[compBufNo]); - } - break; - - case 'l': - case 'L': - { - BOOL ex_format = (*pCompList == 'L')? TRUE : FALSE; - - pCompList++; - i = 0; - while (isdigit(*pCompList)) - { - str[i] = *pCompList; - pCompList++; - i++; - if (i == 15) - { - break; - } - } - str[i] = '\n'; - pCompList--; - lzSearchOffset = (u8)atoi(str); // 傫Ȓl͐؂̂ĂĊۂ - for (j = 0; j < i; j++) - { - str[j] = '\n'; - } - dbg_printf(stderr, "nitroCompress L %d\n", lzSearchOffset); - - nextDataSize = LZCompWriteEx(pReadBuf, dataSize, pCompBuf[compBufNo], lzSearchOffset, ex_format); - } - break; - - case 'h': - { - pCompList++; // 'h' ̎ɂ́A4 8 - str[0] = *pCompList; - str[1] = '\n'; - bitSize = atoi(str); // 4 or 8 - str[0] = '\n'; - - dbg_printf(stderr, "nitroCompress Huff %d\n", bitSize); - - nextDataSize = HuffCompWrite(pReadBuf, dataSize, pCompBuf[compBufNo], bitSize); - } - break; - //----------------------------------------- - // kI (*CompTypeBufp NULL) - default: - { - dbg_printf(stderr, "nitroCompress raw\n"); - - RawWrite(pReadBuf, dataSize, dstp); - if (pCompBuf[0] != NULL) - { - free((void *)pCompBuf[0]); - pCompBuf[0] = NULL; - } - if (pCompBuf[1] != NULL) - { - free(pCompBuf[1]); - pCompBuf[1] = NULL; - } - return dataSize; - } - } - // - pReadBuf = pCompBuf[compBufNo]; - compBufNo ^= 0x01; - dataSize = nextDataSize; - pCompList++; - } -} - - -//=========================================================================== -// kf[^̃Rs[ -//=========================================================================== -static u32 RawWrite(u8 *srcp, u32 size, u8 *dstp) -{ - u32 i; - - dbg_printf(stderr, "RawWrite\tsize=%d\n\n", size); - - size = (size + 0x3) & ~0x3; - for (i = 0; i < size - 1; i++) - { - *dstp = *srcp; - dstp++; - srcp++; - } - *dstp = *srcp; - - return size; -} - - -//=========================================================================== -// tB^ -//=========================================================================== -static u32 DiffFiltWrite(u8 *srcp, u32 size, u8 *dstp, u8 diffBitSize) -{ - u32 DiffCount; // kf[^̃oCg - u32 i; - - u16 *src16p = (u16 *)srcp; - u16 *dst16p = (u16 *)dstp; - - dbg_printf_dif(stderr, "DiffFiltWrite\tsize=%d\tdiffBitSize=%d\n", size, diffBitSize); - - if ( size < 0x1000000 && size > 0 ) - { - *(u32 *)dstp = size << 8 | (DIFF_CODE_HEADER | diffBitSize / 8); // f[^Ewb_ - DiffCount = 4; - } - else - { - *(u32 *)dstp = (DIFF_CODE_HEADER | diffBitSize / 8); // f[^Ewb_ - *(u32 *)(dstp + 4) = size; - DiffCount = 8; - } - - if (diffBitSize == 8) - { -#ifdef DEBUG_PRINT_DIFFFILT - for (i = 0; i < 16; i++) - { - dbg_printf_dif(stderr, "srcp[%d] = %x\n", i, srcp[i]); - } -#endif - dstp[DiffCount] = srcp[0]; // 擪f[^̂ݍ - DiffCount++; - for (i = 1; i < size; i++, DiffCount++) - { - dbg_printf_dif(stderr, "dstp[%x] = srcp[%d]-srcp[%d] = %x - %x = %x\n", - DiffCount, i, i - 1, srcp[i], srcp[i - 1], srcp[i] - srcp[i - 1]); - - dstp[DiffCount] = srcp[i] - srcp[i - 1]; // f[^i[ - } - } - else // 16rbgTCY - { - dst16p[DiffCount / 2] = src16p[0]; - DiffCount += 2; - for (i = 1; i < size / 2; i++, DiffCount += 2) - { - dst16p[DiffCount / 2] = src16p[i] - src16p[i - 1]; - } - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((DiffCount + i) & 0x3) - { - dstp[DiffCount + i] = 0; - i++; - } - - return DiffCount; -} - - -//=========================================================================== -// OX (oCgP) -//=========================================================================== -static u32 RLCompWrite(u8 *srcp, u32 size, u8 *dstp) -{ - u32 RLDstCount; // kf[^̃oCg - u32 RLSrcCount; // kΏۃf[^̏σf[^(oCgP) - u8 RLCompFlag; // OXsꍇP - u8 runLength; // OX - u8 rawDataLength; // ɂȂĂȂf[^̃OX - u32 i; - - u8 *startp; // ̏[vɂAkΏۃf[^̐擪|Cg - - dbg_printf_rl(stderr, "RLCompWrite\tsize=%d\n", size); - - // f[^wb_ (TCY͓WĴ) - if ( size < 0x1000000 && size > 0 ) - { - *(u32 *)dstp = size << 8 | RL_CODE_HEADER; // f[^Ewb_ - RLDstCount = 4; - } - else - // TCY24bitɎ܂Ȃꍇɂ͊g`̃wb_ƂȂ - { - *(u32 *)dstp = RL_CODE_HEADER; - *(u32 *)(dstp + 4) = size; - RLDstCount = 8; - } - - RLSrcCount = 0; - rawDataLength = 0; - RLCompFlag = 0; - - while (RLSrcCount < size) - { - startp = &srcp[RLSrcCount]; // kΏۃf[^̐ݒ - - for (i = 0; i < 128; i++) // 7rbgŕ\łf[^ʂ 0~127 - { - // kΏۃf[^̖ɓB - if (RLSrcCount + rawDataLength >= size) - { - rawDataLength = (u8)(size - RLSrcCount); - break; - } - - if (RLSrcCount + rawDataLength + 2 < size) - { - if (startp[i] == startp[i + 1] && startp[i] == startp[i + 2]) - { - RLCompFlag = 1; - break; - } - } - rawDataLength++; - } - - // Ȃf[^i[ - // f[^i[oCg8rbgڂ0ȂAȂf[^n - // f[^ -1 ɂȂ̂ŁA0-127 1-128 ƂȂ - if (rawDataLength) - { - dstp[RLDstCount++] = rawDataLength - 1; // "f[^-1" i[(7rbg) - for (i = 0; i < rawDataLength; i++) - { - dstp[RLDstCount++] = srcp[RLSrcCount++]; - } - rawDataLength = 0; - } - - // OX - if (RLCompFlag) - { - runLength = 3; - for (i = 3; i < 128 + 2; i++) - { - // kpf[^̖ɓB - if (RLSrcCount + runLength >= size) - { - runLength = (u8)(size - RLSrcCount); - break; - } - - // r؂ꂽꍇ - if (srcp[RLSrcCount] != srcp[RLSrcCount + runLength]) - { - break; - } - // p - runLength++; - } - - // f[^i[oCg8rbgڂ1ȂAf[^n - dstp[RLDstCount++] = 0x80 | (runLength - 3); // R̉ʂ͂āA3~130i[ - dstp[RLDstCount++] = srcp[RLSrcCount]; - RLSrcCount += runLength; - RLCompFlag = 0; - } - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((RLDstCount + i) & 0x3) - { - dstp[RLDstCount + i] = 0; - i++; - } - - return RLDstCount; -} - - -//=========================================================================== -// LZ77k -//=========================================================================== - -#define LZ_OFFSET_BITS 12 -#define LZ_OFFSET_SIZE (1<LZByteTable[i] = -1; - info->LZEndTable[i] = -1; - } - info->WindowPos = 0; - info->WindowLen = 0; -} - -/*---------------------------------------------------------------------------* - Name: SlideByte - Description: 1oCgXCh - Arguments: *srcp - work - Returns: None. - *---------------------------------------------------------------------------*/ -static void SlideByte(LZCompressInfo * info, const u8 *srcp) -{ - s16 offset; - u8 in_data = *srcp; - u16 insert_offset; - - s16 *const LZByteTable = info->LZByteTable; - s16 *const LZEndTable = info->LZEndTable; - s16 *const LZOffsetTable = info->LZOffsetTable; - const u16 windowPos = info->WindowPos; - const u16 windowLen = info->WindowLen; - - if (windowLen == LZ_OFFSET_SIZE) - { - u8 out_data = *(srcp - LZ_OFFSET_SIZE); - if ((LZByteTable[out_data] = LZOffsetTable[LZByteTable[out_data]]) == -1) - { - LZEndTable[out_data] = -1; - } - insert_offset = windowPos; - } - else - { - insert_offset = windowLen; - } - - offset = LZEndTable[in_data]; - if (offset == -1) - { - LZByteTable[in_data] = insert_offset; - } - else - { - LZOffsetTable[offset] = insert_offset; - } - LZEndTable[in_data] = insert_offset; - LZOffsetTable[insert_offset] = -1; - - if (windowLen == LZ_OFFSET_SIZE) - { - info->WindowPos = (u16)((windowPos + 1) % LZ_OFFSET_SIZE); - } - else - { - info->WindowLen++; - } -} - -static void LZSlide(LZCompressInfo * info, const u8 *srcp, u32 n) -{ - u32 i; - - for (i = 0; i < n; i++) - { - SlideByte(info, srcp++); - } -} - - -/*---------------------------------------------------------------------------* - Name: LZCompWriteEx - - Description: LZ77ksȂ֐(őlength̊g) - - Arguments: srcp kf[^ւ̃|C^ - size kf[^TCY - dstp kf[^ւ̃|C^ - kf[^傫TCỸobt@KvłB - - Returns: k̃f[^TCYB - k̃f[^kO傫Ȃꍇɂ͈k𒆒f0Ԃ܂B - *---------------------------------------------------------------------------*/ -static u32 LZCompWriteEx(u8 *srcp, u32 size, u8 *dstp, u8 lzSearchOffset, BOOL ex_available ) -{ - static LZCompressInfo sLZInfo; - - u32 LZDstCount; // kf[^̃oCg - u8 LZCompFlags; // k̗LtOn - u8 *LZCompFlagsp; // LZCompFlags i[郁̈|Cg - u16 lastOffset; // vf[^܂ł̃ItZbg (̎_ł̍Œvf[^) - u32 lastLength; // vf[^ (̎_ł̍Œvf[^) - u8 i; - const u32 MAX_LENGTH = (ex_available)? (0xFFFF + 0xFF + 0xF + 3) : (0xF + 3); - - if ( size < 0x1000000 && size > 0 ) - { - *(u32 *)dstp = size << 8 | LZ_CODE_HEADER | (ex_available? 1 : 0 ); // f[^Ewb_ - dstp += 4; - LZDstCount = 4; - } - else - { - *(u32 *)dstp = LZ_CODE_HEADER | (ex_available? 1 : 0); - *(u32 *)(dstp + 4) = size; - dstp += 8; - LZDstCount = 8; - } - LZInitTable( &sLZInfo ); - - while (size > 0) - { - LZCompFlags = 0; - LZCompFlagsp = dstp++; // tOn̊i[ - LZDstCount++; - - // tOn8rbgf[^ƂĊi[邽߁A8񃋁[v - for (i = 0; i < 8; i++) - { - LZCompFlags <<= 1; // (i=0) ͓ɈӖ͂Ȃ - if (size <= 0) - { - // I[ɗꍇ̓tOŌ܂ŃVtgĂI - continue; - } - - if ( (lastLength = SearchLZ(&sLZInfo, srcp, size, &lastOffset, lzSearchOffset, MAX_LENGTH)) != 0) - { - u32 length; - // k”\ȏꍇ̓tO𗧂Ă - LZCompFlags |= 0x1; - - if ( ex_available ) - { - if ( lastLength >= 0xFF + 0xF + 3 ) - { - length = lastLength - 0xFF - 0xF - 3; - *dstp++ = (u8)( 0x10 | (length >> 12) ); - *dstp++ = (u8)( length >> 4 ); - LZDstCount += 2; - } - else if ( lastLength >= 0xF + 2 ) - { - length = lastLength - 0xF - 2; - *dstp++ = (u8)( length >> 4 ); - LZDstCount += 1; - } - else - { - length = lastLength - 1; - } - } - else - { - length = lastLength - 3; - } - // ItZbg͏4rbgƉ8rbgɕĊi[ - *dstp++ = (u8)( length << 4 | (lastOffset - 1) >> 8 ); - *dstp++ = (u8)( (lastOffset - 1) & 0xFF ); - LZDstCount += 2; - LZSlide( &sLZInfo, srcp, lastLength); - srcp += lastLength; - size -= lastLength; - } - else - { - // kȂ - LZSlide(&sLZInfo, srcp, 1); - *dstp++ = *srcp++; - size--; - LZDstCount++; - } - } // 8񃋁[vI - *LZCompFlagsp = LZCompFlags; // tOni[ - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((LZDstCount + i) & 0x3) - { - *dstp++ = 0; - i++; - } - - return LZDstCount; -} - - -//-------------------------------------------------------- -// LZ77kŃXCh̒Œv܂B -// Arguments: startp f[^̊Jnʒu|C^ -// nextp Jnf[^̃|C^ -// remainSize cf[^TCY -// offset vItZbgi[̈ւ̃|C^ -// Return : v񂪌‚ꍇ TRUE -// ‚Ȃꍇ FALSE -//-------------------------------------------------------- -static u32 SearchLZ( const LZCompressInfo * info, const u8 *nextp, u32 remainSize, u16 *offset, u16 minOffset, u32 maxLength ) -{ - const u8 *searchp; - const u8 *headp, *searchHeadp; - u16 currOffset; - u32 currLength = 2; - u32 tmpLength; - s32 w_offset; - const s16 * const LZOffsetTable = info->LZOffsetTable; - const u16 windowPos = info->WindowPos; - const u16 windowLen = info->WindowLen; - - if (remainSize < 3) - { - return 0; - } - - w_offset = info->LZByteTable[*nextp]; - - while (w_offset != -1) - { - if (w_offset < windowPos) - { - searchp = nextp - windowPos + w_offset; - } - else - { - searchp = nextp - windowLen - windowPos + w_offset; - } - - /* ĂǂA͂ɍ */ - if (*(searchp + 1) != *(nextp + 1) || *(searchp + 2) != *(nextp + 2)) - { - w_offset = LZOffsetTable[w_offset]; - continue; - } - - if (nextp - searchp < minOffset) - { - // VRAM2oCgANZXȂ̂ (VRAMf[^ǂݏoꍇ邽)A - // Ώۃf[^2oCgÕf[^ɂȂ΂ȂȂB - // - // ItZbg12rbgŊi[邽߁A4096ȉ - break; - } - tmpLength = 3; - searchHeadp = searchp + 3; - headp = nextp + 3; - - while (((u32)(headp - nextp) < remainSize) && (*headp == *searchHeadp)) - { - headp++; - searchHeadp++; - tmpLength++; - - // vőȂ̂ŁAI - if (tmpLength == maxLength) - { - break; - } - } - if (tmpLength > currLength) - { - // ő咷ItZbgXV - currLength = tmpLength; - currOffset = (u16)(nextp - searchp); - if (currLength == maxLength) - { - // vőȂ̂ŁAIB - break; - } - } - w_offset = LZOffsetTable[w_offset]; - } - - if (currLength < 3) - { - return 0; - } - *offset = currOffset; - return currLength; -} - - -//=========================================================================== -// nt} -//=========================================================================== -#define HUFF_END_L 0x80 -#define HUFF_END_R 0x40 - -typedef struct -{ - u16 No; // f[^No - s16 PaNo; // eNo - u32 Freq; // opx - s16 ChNo[2]; // qNo (0: C 1: E) - u16 PaDepth; // em[h̐[ - u16 LeafDepth; // t܂ł̐[ - u32 HuffCode; // nt} - u8 Bit; // m[h̃rbgf[^ - u16 HWord; // eԐߓ_ɂāA̐ߓ_[gƂ镔؂ HuffTree i[ɕKvȃ -} -HuffData; - -typedef struct -{ - u8 leftOffsetNeed; // ̎qߓ_ւ̃ItZbgKvȂ1 - u8 rightOffsetNeed; // E̎qߓ_ւ̃ItZbgKvȂ1 - u16 leftNodeNo; // ̎qߓ_No - u16 rightNodeNo; // E̎qߓ_No -} -HuffTreeCtrlData; - -// nt}[Nobt@\ -typedef struct -{ - HuffData huffTable[ 512 ]; // huffTable[ 512 ]; 12288B - u8 huffTree [ 256 * 2 ]; // huffTree[ 256 * 2 ]; 512B - HuffTreeCtrlData huffTreeCtrl[ 256 ]; // huffTreeCtrl[ 256 ]; 1536B - u16 huffTreeTop; // - u8 bitSize; // - u8 padding_[1]; // -} -HuffCompressionInfo; // v 14340B - -static void HuffInitTable( HuffCompressionInfo* info, u8 bitSize ); -static void HuffCountData( HuffData* table, const u8 *srcp, u32 size, u8 bitSize ); -static void HuffConstructTree( HuffCompressionInfo *info, u8 bitSize ); -static u32 HuffExportTree( u8* dstp, HuffCompressionInfo* info ); -static u32 HuffConvertData( const HuffData *table, const u8* srcp, u8* dstp, u32 srcSize, u8 bitSize ); - -static void HuffAddParentDepthToTable( HuffData *table, u16 leftNo, u16 rightNo ); -static void HuffAddCodeToTable ( HuffData *table, u16 nodeNo, u32 paHuffCode ); -static u16 HuffAddCountHWordToTable ( HuffData *table, u16 nodeNo ); - -static u16 HuffMakeNode ( HuffData* table, u8 bitSize ); -static void HuffMakeHuffTree ( HuffCompressionInfo* info, u16 rootNo ); -static void HuffMakeSubsetHuffTree ( HuffCompressionInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ); -static BOOL HuffRemainingNodeCanSetOffset( HuffCompressionInfo* info, u16 costHWord ); -static void HuffSetOneNodeOffset ( HuffCompressionInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ); - -HuffCompressionInfo sHuffCompressionInfo; - -/*---------------------------------------------------------------------------* - Name: HuffCompWrite - Description: nt}k - Arguments: *srcp - size - *dstp - huffBitSize - Returns: None. - *---------------------------------------------------------------------------*/ -static u32 HuffCompWrite(u8 *srcp, u32 size, u8 *dstp, u8 huffBitSize) -{ - u32 huffDstCount; // kf[^̃oCg - u32 offset; - HuffCompressionInfo* info = &sHuffCompressionInfo; - - u16 huffDataNum = 1 << huffBitSize; // 8->256, 4->16 - - // e[u - HuffInitTable( info, huffBitSize ); - - // opx`FbN - HuffCountData( info->huffTable, srcp, size, huffBitSize ); - - // nt}e[u쐬 - HuffConstructTree( info, huffBitSize ); - - // f[^Ewb_ - if ( size < 0x1000000 && size > 0 ) - { - *(u32 *)dstp = size << 8 | HUFF_CODE_HEADER | huffBitSize; - offset = 4; - } - else - { - *(u32 *)dstp = HUFF_CODE_HEADER | huffBitSize; - *(u32 *)(dstp + 4) = size; - offset = 8; - } - huffDstCount = offset; - - // nt}e[uoCio - huffDstCount += HuffExportTree( &dstp[ huffDstCount ], info ); - - // nt}e[uɂf[^ϊ - huffDstCount += HuffConvertData( info->huffTable, srcp, &dstp[ huffDstCount ], size, huffBitSize ); - - return huffDstCount; -} - - - - -/*---------------------------------------------------------------------------* - Name: HuffInitTable - Description: nt}e[ȕ - Arguments: table - size - Returns: None. - *---------------------------------------------------------------------------*/ -static void HuffInitTable( HuffCompressionInfo* info, u8 bitSize ) -{ - u32 tableSize = (1 << bitSize); - u32 i; - - info->huffTreeTop = 1; - info->bitSize = bitSize; - - // huffTable - { - HuffData* table = info->huffTable; - - const HuffData HUFF_TABLE_INIT_DATA = { 0, 0, 0, {-1, -1}, 0, 0, 0, 0, 0 }; - for ( i = 0; i < tableSize * 2U; i++ ) - { - table[ i ] = HUFF_TABLE_INIT_DATA; - table[ i ].No = (u16)i; - } - } - - // huffTree, huffTreeCtrl - { - const HuffTreeCtrlData HUFF_TREE_CTRL_INIT_DATA = { 1, 1, 0, 0 }; - u8* huffTree = info->huffTree; - HuffTreeCtrlData* huffTreeCtrl = info->huffTreeCtrl; - - for ( i = 0; i < 256; i++ ) - { - huffTree[ i * 2 ] = 0; - huffTree[ i * 2 + 1 ] = 0; - huffTreeCtrl[ i ] = HUFF_TREE_CTRL_INIT_DATA; - } - } -} - - -/*---------------------------------------------------------------------------* - Name: HuffCountData - Description: opx̃JEg - Arguments: table - *srcp - size - bitSize - Returns: None. - *---------------------------------------------------------------------------*/ -static void HuffCountData( HuffData* table, const u8 *srcp, u32 size, u8 bitSize ) -{ - u32 i; - u8 tmp; - - if ( bitSize == 8 ) - { - for ( i = 0; i < size; i++ ) - { - table[ srcp[ i ] ].Freq++; // 8rbg - } - } - else - { - for ( i = 0; i < size; i++ ) // 4rbg - { - tmp = (srcp[ i ] & 0xf0) >> 4; - table[ tmp ].Freq++; // 4rbgɊi[// ǂł - tmp = srcp[ i ] & 0x0f; - table[ tmp ].Freq++; // ͕̂Ƃ - } - } -} - - -/*---------------------------------------------------------------------------* - Name: HuffConstructTree - Description: nt}c[\z - Arguments: *table - dataNum - Returns: None. - *---------------------------------------------------------------------------*/ -static void HuffConstructTree( HuffCompressionInfo *info, u8 bitSize ) -{ - HuffData* table = info->huffTable; - u16 rootNo; // 񕪖؂̃[gNo - - // opxm[h\z - rootNo = HuffMakeNode( table, bitSize ); - - // nt}R[h (table[i].HuffCode ) - HuffAddCodeToTable( table, rootNo, 0x00 ); // PaDepth̃rbgAHuffCode ̉ʃrbg}XN̂nt}R[h - - // eԐߓ_ɂāA̐ߓ_[gƂ镔؂ huffTree i[ɕKvȃʂ̌vZ - HuffAddCountHWordToTable( table, rootNo ); - - // sHuffTreeBuf.huffTree 쐬 - HuffMakeHuffTree( info, rootNo ); - - info->huffTree[0] = (u8)( --info->huffTreeTop ); -} - - -/*---------------------------------------------------------------------------* - Name: HuffMakeNode - Description: opxm[hf[^\z - Arguments: table - Returns: None. - *---------------------------------------------------------------------------*/ -static u16 -HuffMakeNode( HuffData* table, u8 bitSize ) -{ - u16 dataNum = ( 1 << bitSize ); - u16 tableTop = (u16)dataNum; // e[u쐬́Ae[ugbvNo - - u32 i; - s32 leftNo, rightNo; // 2؍쐬̃m[hNo - u16 rootNo; // 񕪖؂̃[gNo - - leftNo = -1; - rightNo = -1; - while ( 1 ) - { - // Freq̏ؒ_2’T 1‚͕K‚͂ - // q_()̒T - for ( i = 0; i < tableTop; i++ ) - { - if ( ( table[i].Freq == 0 ) || - ( table[i].PaNo != 0 ) ) - { - continue; - } - - if ( leftNo < 0 ) - { - leftNo = i; - } - else if ( table[i].Freq < table[ leftNo ].Freq ) - { - leftNo = i; - } - } - - // q_(E)̒T - for ( i = 0; i < tableTop; i++ ) - { - if ( ( table[i].Freq == 0 ) || - ( table[i].PaNo != 0 ) || - ( i == leftNo ) ) - { - continue; - } - - if ( rightNo < 0 ) - { - rightNo = i; - } - else if ( table[i].Freq < table[ rightNo ].Freq ) - { - rightNo = i; - } - } - - // 1‚ȂAe[u쐬I - if ( rightNo < 0 ) - { - // lނȂ݂Ȃꍇɂ01ǂlƂȂm[hP쐬 - if ( tableTop == dataNum ) - { - if ( leftNo < 0 ) - { - leftNo = 0; - } - table[ tableTop ].Freq = table[ leftNo ].Freq; - table[ tableTop ].ChNo[0] = (s16)leftNo; - table[ tableTop ].ChNo[1] = (s16)leftNo; - table[ tableTop ].LeafDepth = 1; - table[ leftNo ].PaNo = (s16)tableTop; - table[ leftNo ].Bit = 0; - table[ leftNo ].PaDepth = 1; - } - else - { - tableTop--; - } - rootNo = tableTop; - return rootNo; - } - - // ؂ƉE؂𓝍钸_쐬 - table[ tableTop ].Freq = table[ leftNo ].Freq + table[ rightNo ].Freq; - table[ tableTop ].ChNo[0] = (s16)leftNo; - table[ tableTop ].ChNo[1] = (s16)rightNo; - if ( table[ leftNo ].LeafDepth > table[ rightNo ].LeafDepth ) - { - table[ tableTop ].LeafDepth = (u16)( table[ leftNo ].LeafDepth + 1 ); - } - else - { - table[ tableTop ].LeafDepth = (u16)( table[ rightNo ].LeafDepth + 1 ); - } - - table[ leftNo ].PaNo = table[ rightNo ].PaNo = (s16)( tableTop ); - table[ leftNo ].Bit = 0; - table[ rightNo ].Bit = 1; - - HuffAddParentDepthToTable( table, (u16)leftNo, (u16)rightNo ); - - tableTop++; - leftNo = rightNo = -1; - } -} - - -//----------------------------------------------------------------------- -// 2؍쐬ɁA؂𓝍ƂɁA؂̊e\m[h̐[{1 -//----------------------------------------------------------------------- -static void HuffAddParentDepthToTable( HuffData *table, u16 leftNo, u16 rightNo ) -{ - table[ leftNo ].PaDepth++; - table[ rightNo ].PaDepth++; - - if ( table[ leftNo ].LeafDepth != 0 ) - { - HuffAddParentDepthToTable( table, (u16)table[ leftNo ].ChNo[0], (u16)table[ leftNo ].ChNo[1] ); - } - if ( table[ rightNo ].LeafDepth != 0 ) - { - HuffAddParentDepthToTable( table, (u16)table[ rightNo ].ChNo[0], (u16)table[ rightNo ].ChNo[1] ); - } -} - -//----------------------------------------------------------------------- -// nt}R[h -//----------------------------------------------------------------------- -static void HuffAddCodeToTable( HuffData* table, u16 nodeNo, u32 paHuffCode ) -{ - table[ nodeNo ].HuffCode = (paHuffCode << 1) | table[ nodeNo ].Bit; - - if ( table[ nodeNo ].LeafDepth != 0 ) - { - HuffAddCodeToTable( table, (u16)table[ nodeNo ].ChNo[0], table[ nodeNo ].HuffCode ); - HuffAddCodeToTable( table, (u16)table[ nodeNo ].ChNo[1], table[ nodeNo ].HuffCode ); - } -} - - -//----------------------------------------------------------------------- -// ԃm[h huffTree 쐬ɕKvƂf[^ -//----------------------------------------------------------------------- -static u16 HuffAddCountHWordToTable( HuffData *table, u16 nodeNo) -{ - u16 leftHWord, rightHWord; - - switch ( table[ nodeNo ].LeafDepth ) - { - case 0: - return 0; - case 1: - leftHWord = rightHWord = 0; - break; - default: - leftHWord = HuffAddCountHWordToTable( table, (u16)table[nodeNo].ChNo[0] ); - rightHWord = HuffAddCountHWordToTable( table, (u16)table[nodeNo].ChNo[1] ); - break; - } - - table[ nodeNo ].HWord = (u16)( leftHWord + rightHWord + 1 ); - return (u16)( leftHWord + rightHWord + 1 ); -} - - -//----------------------------------------------------------------------- -// nt}R[h\쐬 -//----------------------------------------------------------------------- -static void HuffMakeHuffTree( HuffCompressionInfo* info, u16 rootNo ) -{ - s16 i; - s16 costHWord, tmpCostHWord; // ؂̃R[h\쐬Ȃ̃RXg ől̐ߓ_̕؃R[h\ - s16 costOffsetNeed, tmpCostOffsetNeed; - s16 costMaxKey; // RXgŏ̐ߓ_ huffTreeBuf.huffTree 肷邽߂̏ - BOOL costMaxRightFlag; - u16 offsetNeedNum; - BOOL tmpRightFlag; - const u32 MAX_COST = 64; - - info->huffTreeTop = 1; - costOffsetNeed = 0; - - info->huffTreeCtrl[0].leftOffsetNeed = 0; // gpȂ (e[uTCYƂĎgp) - info->huffTreeCtrl[0].rightNodeNo = rootNo; - - - while ( 1 ) // return ܂ - { - // ItZbgݒ肷Kv̂m[ȟvZ - offsetNeedNum = 0; - for ( i = 0; i < info->huffTreeTop; i++ ) - { - if ( info->huffTreeCtrl[ i ].leftOffsetNeed ) - { - offsetNeedNum++; - } - if ( info->huffTreeCtrl[ i ].rightOffsetNeed ) - { - offsetNeedNum++; - } - } - - // őRXg̐ߓ_ - costHWord = -1; - costMaxKey = -1; - tmpRightFlag = 0; - - for ( i = 0; i < info->huffTreeTop; i++ ) - { - tmpCostOffsetNeed = (u16)( info->huffTreeTop - i ); - - // ̎qߓ_̃RXg] - if ( info->huffTreeCtrl[i].leftOffsetNeed ) - { - tmpCostHWord = (s16)info->huffTable[ info->huffTreeCtrl[i].leftNodeNo ].HWord; - - if ( (u32)(tmpCostHWord + offsetNeedNum) > MAX_COST ) - { - goto leftCostEvaluationEnd; - } - if ( ! HuffRemainingNodeCanSetOffset( info, (u16)tmpCostHWord ) ) - { - goto leftCostEvaluationEnd; - } - if ( tmpCostHWord > costHWord ) - { - costMaxKey = i; - costMaxRightFlag = 0; - } - else if ( (tmpCostHWord == costHWord) && (tmpCostOffsetNeed > costOffsetNeed) ) - { - costMaxKey = i; - costMaxRightFlag = 0; - } - } -leftCostEvaluationEnd:{} - - if ( info->huffTreeCtrl[i].rightOffsetNeed) - { - tmpCostHWord = (s16)info->huffTable[info->huffTreeCtrl[i].rightNodeNo].HWord; - - if ( (u32)(tmpCostHWord + offsetNeedNum) > MAX_COST ) - { - goto rightCostEvaluationEnd; - } - if ( ! HuffRemainingNodeCanSetOffset( info, (u16)tmpCostHWord ) ) - { - goto rightCostEvaluationEnd; - } - if ( tmpCostHWord > costHWord ) - { - costMaxKey = i; - costMaxRightFlag = 1; - } - else if ( (tmpCostHWord == costHWord) && (tmpCostOffsetNeed > costOffsetNeed) ) - { - costMaxKey = i; - costMaxRightFlag = 1; - } - } -rightCostEvaluationEnd:{} - } - - // ؂܂܂ huffTree Ɋi[ - if ( costMaxKey >= 0 ) - { - HuffMakeSubsetHuffTree( info, (u16)costMaxKey, costMaxRightFlag); - goto nextTreeMaking; - } - else - { - // KvItZbgő̃m[h - for ( i = 0; i < info->huffTreeTop; i++ ) - { - u16 tmp = 0; - tmpRightFlag = 0; - if (info->huffTreeCtrl[i].leftOffsetNeed) - { - tmp = info->huffTable[ info->huffTreeCtrl[i].leftNodeNo ].HWord; - } - if (info->huffTreeCtrl[i].rightOffsetNeed) - { - if ( info->huffTable[info->huffTreeCtrl[i].rightNodeNo ].HWord > tmp ) - { - tmpRightFlag = 1; - } - } - if ( (tmp != 0) || (tmpRightFlag) ) - { - HuffSetOneNodeOffset( info, (u16)i, tmpRightFlag); - goto nextTreeMaking; - } - } - } - return; -nextTreeMaking:{} - } -} - -//----------------------------------------------------------------------- -// ؂܂܂ huffTree Ɋi[ -//----------------------------------------------------------------------- -static void HuffMakeSubsetHuffTree( HuffCompressionInfo* info, u16 huffTreeNo, BOOL rightNodeFlag ) -{ - u16 i; - - i = info->huffTreeTop; - HuffSetOneNodeOffset( info, huffTreeNo, rightNodeFlag ); - - if ( rightNodeFlag ) - { - info->huffTreeCtrl[ huffTreeNo ].rightOffsetNeed = 0; - } - else - { - info->huffTreeCtrl[ huffTreeNo ].leftOffsetNeed = 0; - } - - while ( i < info->huffTreeTop ) - { - if ( info->huffTreeCtrl[ i ].leftOffsetNeed ) - { - HuffSetOneNodeOffset( info, i, 0); - info->huffTreeCtrl[ i ].leftOffsetNeed = 0; - } - if ( info->huffTreeCtrl[ i ].rightOffsetNeed ) - { - HuffSetOneNodeOffset( info, i, 1); - info->huffTreeCtrl[ i ].rightOffsetNeed = 0; - } - i++; - } -} - -//----------------------------------------------------------------------- -// ^ꂽf[^ʂ̕؂WJĂ huffTree \zɎxႪȂׂ -//----------------------------------------------------------------------- -static BOOL HuffRemainingNodeCanSetOffset( HuffCompressionInfo* info, u16 costHWord ) -{ - u16 i; - s16 capacity; - const u32 MAX_COST = 64; - - capacity = (s16)( MAX_COST - costHWord ); - - // ItZbg i قǑ傫̂ŁA\[gAi = 0 -> huffTreeTop ŌvZ΂悢 - for ( i = 0; i < info->huffTreeTop; i++ ) - { - if ( info->huffTreeCtrl[i].leftOffsetNeed ) - { - if ( (info->huffTreeTop - i) <= capacity ) - { - capacity--; - } - else - { - return 0; - } - } - if ( info->huffTreeCtrl[i].rightOffsetNeed ) - { - if ( (info->huffTreeTop - i) <= capacity ) - { - capacity--; - } - else - { - return 0; - } - } - } - - return 1; -} - - -/*---------------------------------------------------------------------------* - Name: HuffSetOneNodeOffset - Description: 1ߓ_Ant}R[h\쐬 - Arguments: *table nt}e[u - huffTreeNo - rightNodeFlag Ẽm[hł邩ǂ̃tO - Returns: None. - *---------------------------------------------------------------------------*/ -static void HuffSetOneNodeOffset( HuffCompressionInfo* info, u16 huffTreeNo, BOOL rightNodeFlag) -{ - u16 nodeNo; - u16 offsetData = 0; - - HuffData* huffTable = info->huffTable; - u8* huffTree = info->huffTree; - HuffTreeCtrlData* huffTreeCtrl = info->huffTreeCtrl; - u16 huffTreeTop = info->huffTreeTop; - - if (rightNodeFlag) - { - nodeNo = huffTreeCtrl[ huffTreeNo ].rightNodeNo; - huffTreeCtrl[ huffTreeNo ].rightOffsetNeed = 0; - } - else - { - nodeNo = huffTreeCtrl[ huffTreeNo ].leftNodeNo; - huffTreeCtrl [huffTreeNo ].leftOffsetNeed = 0; - } - - // ̎qߓ_ - if ( huffTable[ huffTable[nodeNo].ChNo[0] ].LeafDepth == 0) - { - offsetData |= 0x80; - huffTree[ huffTreeTop * 2 + 0 ] = (u8)huffTable[ nodeNo ].ChNo[0]; - huffTreeCtrl[ huffTreeTop ].leftNodeNo = (u8)huffTable[ nodeNo ].ChNo[0]; - huffTreeCtrl[ huffTreeTop ].leftOffsetNeed = 0; // ItZbg͕KvȂȂ - } - else - { - huffTreeCtrl[ huffTreeTop ].leftNodeNo = (u16)huffTable[ nodeNo ].ChNo[0]; // ItZbg͕Kv - } - - // E̎qߓ_ - if ( huffTable[ huffTable[ nodeNo ].ChNo[1] ].LeafDepth == 0 ) - { - offsetData |= 0x40; - huffTree[ huffTreeTop * 2 + 1 ] = (u8)huffTable[nodeNo].ChNo[1]; - huffTreeCtrl[ huffTreeTop ].rightNodeNo = (u8)huffTable[ nodeNo ].ChNo[1]; - huffTreeCtrl[ huffTreeTop ].rightOffsetNeed = 0; // ItZbg͕KvȂȂ - } - else - { - huffTreeCtrl[ huffTreeTop ].rightNodeNo = (u16)huffTable[ nodeNo ].ChNo[1]; // ItZbg͕Kv - } - - offsetData |= (u16)( huffTreeTop - huffTreeNo - 1 ); - huffTree[ huffTreeNo * 2 + (rightNodeFlag? 1 : 0) ] = (u8)offsetData; - - info->huffTreeTop++; -} - - -/*---------------------------------------------------------------------------* - Name: HuffExportTree - - Description: nt}e[uoCio - - Arguments: dstp - info - bitSize - - Returns: - *---------------------------------------------------------------------------*/ -static u32 HuffExportTree( u8* dstp, HuffCompressionInfo* info ) -{ - u32 cnt = 0; - s32 i; - - for ( i = 0; i < (info->huffTreeTop + 1) * 2; i++ ) // c[e[u - { - dstp[ cnt++ ] = ((u8*)info->huffTree)[ i ]; - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂ (fR[_̃ASYɂ) - while ( cnt & 0x3 ) - { - if ( cnt & 0x1 ) - { - info->huffTreeTop++; - dstp[ 0 ] = dstp[ 0 ] + 1; - } - dstp[ cnt++ ] = 0; - } - return cnt; -} - - -/*---------------------------------------------------------------------------* - Name: HuffConvertData - Description: nt}e[uɃf[^ϊ - Arguments: *table - srcp - dstp - srcSize - bitSize - Returns: None. - *---------------------------------------------------------------------------*/ -static u32 HuffConvertData( const HuffData *table, const u8* srcp, u8* dstp, u32 srcSize, u8 bitSize ) -{ - u32 i, ii, iii; - u8 srcTmp; - u32 bitStream = 0; - u32 streamLength = 0; - u32 dstSize = 0; - - // nt} - for ( i = 0; i < srcSize; i++ ) - { // f[^k - u8 val = srcp[ i ]; - if ( bitSize == 8 ) - { // 8rbgnt} - bitStream = (bitStream << table[ val ].PaDepth) | table[ val ].HuffCode; - streamLength += table[ val ].PaDepth; - for ( ii = 0; ii < streamLength / 8; ii++ ) - { - dstp[ dstSize++ ] = (u8)(bitStream >> (streamLength - (ii + 1) * 8)); - } - streamLength %= 8; - } - else // 4rbgnt} - { - for ( ii = 0; ii < 2; ii++ ) - { - if ( ii ) - { - srcTmp = val >> 4; // 4rbg - } - else - { - srcTmp = val & 0x0F; // 4rbg( fR[_LittleEndianŃANZX֌W ) - } - bitStream = (bitStream << table[ srcTmp ].PaDepth) | table[ srcTmp ].HuffCode; - streamLength += table[srcTmp].PaDepth; - for ( iii = 0; iii < streamLength / 8; iii++ ) - { - dstp[ dstSize++ ] = (u8)(bitStream >> (streamLength - (iii + 1) * 8)); - } - streamLength %= 8; - } - } - } - if ( streamLength != 0 ) - { - dstp[ dstSize++ ] = (u8)(bitStream << (8 - streamLength)); - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߁uv - // nt}!@gGfBAϊ邽߁AACgEf[^Ƀf[^i[ - while ( dstSize & 0x3 ) - { - dstp[ dstSize++ ] = 0; - } - - // gGfBAϊ - for ( i = 0; i < dstSize / 4; i++ ) - { - u8 tmp; - tmp = dstp[i * 4 + 0]; - dstp[i * 4 + 0] = dstp[i * 4 + 3]; - dstp[i * 4 + 3] = tmp; // Xbv - tmp = dstp[i * 4 + 1]; - dstp[i * 4 + 1] = dstp[i * 4 + 2]; - dstp[i * 4 + 2] = tmp; // Xbv - } - return dstSize; -} - - - -/*---------------------------------------------------------------------------* - Name: HuffVerifyTable - - Description: nt}e[u̐`FbN - - Arguments: nt}e[uւ̃|C^ - - Returns: ȃe[ȕꍇɂ TRUE - sȃe[ȕꍇɂ FALSE - *---------------------------------------------------------------------------*/ -static BOOL -HuffVerifyTable( const void* pTable, u8 bit ) -{ - enum { FLAGS_ARRAY_NUM = 512 / 8 }; /* 64Byte */ - u8* treep = (u8*)pTable; - u8* treeStartp = treep + 1; - u32 treeSize = *treep; - u8* treeEndp = (u8*)pTable + (treeSize + 1) * 2; - u32 i; - u8 end_flags[ FLAGS_ARRAY_NUM ]; - u32 idx; - - for ( i = 0; i < FLAGS_ARRAY_NUM; i++ ) - { - end_flags[ i ] = 0; - } - - if ( bit == 4 ) - { - if ( treeSize >= 0x10 ) - { - return FALSE; - } - } - - idx = 1; - treep = treeStartp; - while ( treep < treeEndp ) - { - if ( (end_flags[ idx / 8 ] & (1 << (idx % 8) )) == 0 ) - { - u32 offset = (u32)( ( (*treep & 0x3F) + 1 ) << 1); - u8* nodep = (u8*)( (((u32)treep >> 1) << 1) + offset ); - - // I[̃ACgpf[^͓ǂݔ΂ - if ( *treep == 0 && idx >= (treeSize * 2) ) - { - goto next; - } - if ( nodep >= treeEndp ) - { - return FALSE; - } - if ( *treep & 0x80 ) - { - u32 left = (idx & ~0x1) + offset; - end_flags[ left / 8 ] |= (u8)( 1 << (left % 8) ); - } - if ( *treep & 0x40 ) - { - u32 right = (idx & ~0x1) + offset + 1; - end_flags[ right / 8 ] |= (u8)( 1 << (right % 8) ); - } - } - next: - ++idx; - ++treep; - } - return TRUE; -} - - - - -//############################################################################################## -//############################################################################################## -// WJ֘Å֐͈ȉ -//############################################################################################## -//############################################################################################## - -//================================================================================== -// Rawf[^WJ -//================================================================================== -static s32 RawRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize ) -{ -// memcpy(dstp, srcp, size); - u32 i; - - if ( srcSize < dstSize ) - { - return -1; - } - - for (i = 0; i < dstSize; i++) - { - *dstp = *srcp; - dstp++; - srcp++; - } - - return dstSize; -} - -//================================================================================== -// kf[^WJ -//================================================================================== -static s32 DiffFiltRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, u8 diffBitSize ) -{ - s32 DiffCount = 0; // WJf[^̃oCg - u32 i; - - u16 *src16p = (u16 *)srcp; - u16 *dst16p = (u16 *)dstp; - - // \[X̃obt@I[o[t[`FbN - if ( dstSize > srcSize ) - { - return -1; - } - - if (diffBitSize == 8) - { -#ifdef DEBUG_PRINT_DIFFFILT - for (i = 0; i < 16; i++) - { - dbg_printf_dif(stderr, "srcp[%d] = %x\n", i, srcp[i]); - } -#endif - dstp[DiffCount] = srcp[0]; // 擪f[^̂ݍ - DiffCount++; - for (i = 1; i < dstSize; i++, DiffCount++) - { - dbg_printf_dif(stderr, "dstp[%x] = srcp[%d]+dstp[%d] = %x + %x = %x\n", - DiffCount, i, i - 1, srcp[i], dstp[i - 1], srcp[i] - dstp[i - 1]); - dstp[DiffCount] = srcp[i] + dstp[i - 1]; // f[^i[ - } - } - else // 16rbgTCY - { - dst16p[DiffCount / 2] = src16p[0]; - DiffCount += 2; - for (i = 1; i < dstSize / 2; i++, DiffCount += 2) - { - dst16p[DiffCount / 2] = src16p[i] + dst16p[i - 1]; - } - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((DiffCount + i) & 0x3) - { - dstp[DiffCount + i] = 0; - i++; - } - - return DiffCount; -} - -//================================================================================== -// OXkf[^WJ -//================================================================================== -static s32 RLCompRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize ) -{ - u32 RLDstCount; // WJf[^̃oCg - u32 RLSrcCount; // WJΏۃf[^̏σf[^(oCgP) - u32 i; - - RLSrcCount = 0; - RLDstCount = 0; - while ( RLDstCount < dstSize ) - { - if ( srcp[ RLSrcCount ] & 0x80 ) // (OXĂ) - { - u8 length = (srcp[ RLSrcCount++ ] & 0x7f) + 3; // f[^i[(R̉ʂ𗚂Ă̂ŁAۂ+3čl) - // obt@I[o[`FbN - if ( RLSrcCount >= srcSize ) - { - return -1; - } - if ( RLDstCount + length > dstSize ) - { - return -1; - } - for ( i = 0; i < length; i++ ) - { - dstp[ RLDstCount++ ] = srcp[ RLSrcCount ]; - } - RLSrcCount++; - } - else // f[^Rs[(OXĂȂ) - { - u8 length = srcp[ RLSrcCount++ ] + 1; // (srcp[RLSrcCount] & 0x7f Ɠ) - // obt@I[o[`FbN - if ( RLSrcCount + length > srcSize ) - { - return -1; - } - if ( RLDstCount + length > dstSize ) - { - return -1; - } - - for ( i = 0; i < length; i++ ) - { // f[^ -1 Ċi[Ă邽 +1 - dstp[ RLDstCount++ ] = srcp[ RLSrcCount++ ]; - } - } - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ((RLDstCount + i) & 0x3) - { - dstp[RLDstCount + i] = 0; - i++; - } - - return RLDstCount; -} - -//================================================================================== -// LZ77kf[^WJ -//================================================================================== -static s32 LZCompReadEx( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, BOOL ex_available) -{ - u32 LZDstCount; // WJf[^̃oCg - u32 LZSrcCount; // WJΏۃf[^̏σf[^(oCgP) - u32 i; - - LZSrcCount = 0; - LZDstCount = 0; - - while ( LZDstCount < dstSize ) - { - u8 compFlags = srcp[LZSrcCount++]; // k̗LtO - if ( LZSrcCount > srcSize ) - { - return -1; - } - - for ( i = 0; i < 8; i++ ) - { - if (compFlags & 0x80) // kĂ - { - u32 length; // Ώۃf[^ - u16 offset; // vf[^ItZbg - 1 (2ȏ)(4rbgCoffsetł11-8rbg) - - length = srcp[ LZSrcCount ] >> 4; - - if ( ex_available ) - { - if ( length == 1 ) - { - length = (srcp[ LZSrcCount ] & 0x0F) << 12; - LZSrcCount++; - length |= srcp[ LZSrcCount ] << 4; - LZSrcCount++; - length |= srcp[ LZSrcCount ] >> 4; - length += 0xFF + 0xF + 3; - } - else if ( length == 0 ) - { - length = (srcp[ LZSrcCount ] & 0x0F) << 4; - LZSrcCount++; - length |= srcp[ LZSrcCount ] >> 4; - length += 0xF + 2; - } - else - { - length += 1; - } - } - else - { - length += 3; - } - offset = (srcp[LZSrcCount] & 0x0F) << 8; - LZSrcCount++; - offset |= srcp[LZSrcCount]; - offset++; - LZSrcCount++; - - // obt@I[o[`FbN - if ( LZSrcCount > srcSize ) - { - return -1; - } - if ( LZDstCount + length > dstSize ) - { - return -1; - } - if ( LZDstCount < offset ) - { - return -1; - } - - // WJ - do - { - dstp[ LZDstCount++ ] = dstp[ LZDstCount - offset ]; - } while ( --length > 0 ); - } - else // k - { - dstp[ LZDstCount++ ] = srcp[ LZSrcCount++ ]; - if ( LZSrcCount > srcSize ) - { - return -1; - } - } - // TCYɒBI - if ( LZDstCount >= dstSize ) - { - break; - } - compFlags <<= 1; - } - } - - // 4oCgEACg - // ACgpf[^0 ̓f[^TCYɊ܂߂Ȃ - i = 0; - while ( (LZDstCount + i) & 0x3 ) - { - dstp[ LZDstCount + i ] = 0; - i++; - } - return LZDstCount; -} - - -//================================================================================== -// nt}f[^WJ -//================================================================================== -static s32 HuffCompRead( const u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize, u8 huffBitSize ) -{ - u16 treeSize; // huffTreẽTCY * 2 - u32 HuffSrcCount; // WJΏۃf[^̏σf[^(oCgP) - u32 HuffDstCount; // WJf[^ - u32 currentBitStream; - u8 currentBit; - u16 treeAddr; - u8 treeData; - u8 preTreeData; - u8 isUpper4bits = 0; - - treeSize = ((*srcp) + 1) * 2; - HuffSrcCount = treeSize; // f[^̐擪擾 - HuffDstCount = 0; - treeAddr = 1; - preTreeData = srcp[ 1 ]; - - dbg_printf_huff(stderr, "HuffSrcCount = %d\n", HuffSrcCount); - - // nt}e[u̐`FbN - if ( ! HuffVerifyTable( srcp, huffBitSize ) ) - { - return -1; - } - if ( srcSize < treeSize ) - { - return -1; - } - - // WJ - while ( HuffDstCount < dstSize ) // return ܂ - { - u16 i; - - currentBitStream = srcp[HuffSrcCount++]; - currentBitStream |= srcp[HuffSrcCount++] << 8; - currentBitStream |= srcp[HuffSrcCount++] << 16; - currentBitStream |= srcp[HuffSrcCount++] << 24; - - if ( HuffSrcCount > srcSize ) - { - return -1; - } - - for ( i = 0; i < 32; i++ ) - { - currentBit = (u8)(currentBitStream >> 31); - currentBitStream <<= 1; - - if (((currentBit == 0) && (preTreeData & 0x80)) || - ((currentBit == 1) && (preTreeData & 0x40))) - { - if (huffBitSize == 8) - { - treeData = srcp[(treeAddr * 2) + currentBit]; // f[^ - dstp[HuffDstCount++] = treeData; - } - else if (isUpper4bits) - { - treeData |= (srcp[(treeAddr * 2) + currentBit]) << 4; - dstp[HuffDstCount++] = treeData; - isUpper4bits = 0; - } - else - { - treeData = srcp[(treeAddr * 2) + currentBit]; - isUpper4bits = 1; - } - - if (HuffDstCount >= dstSize) - { - return HuffDstCount; - } - - treeAddr = 1; - preTreeData = srcp[ 1 ]; - } - else - { - preTreeData = srcp[(treeAddr * 2) + currentBit]; // ItZbgEf[^ - treeAddr += (preTreeData & 0x3f) + 1; - } - } - } - return HuffDstCount; -} - - -//================================================================================== -// kt@Čt@CTCY擾 -//================================================================================== -EXTERN u32 STDCALL nitroGetDecompFileSize( const void* srcp ) -{ - const u32* p = (const u32*)srcp; - - u32 size = *p >> 8; - if ( size == 0 ) - { - size = *(p + 1); - } - return size; -} - - -//================================================================================== -// f[^WJ֐ (WĴ߁AŌrawf[^WJpwb_ȂƓ삵Ȃ) -//================================================================================== -EXTERN s32 STDCALL nitroDecompress( const u8 *srcp, u32 srcSize, u8 *dstp, s8 depth ) -{ - // rawData // f[^Ewb_ - // *(u32 *)pReadBuf = size << 8 | 0; - // [i+3] [i+2] [i+1](TCY) | [0000 0000] - // DiffFilt - // *(u32 *)dstp = size << 8 | 0x80 | diffBitSize/8; - // [i+3] [i+2] [i+1](TCY) | [1000 00XX] - // RL - // *(u32 *)dstp = size << 8 | 0x30; - // [i+3] [i+2] [i+1](TCY) | [0011 0000] - // LZ77 - // *(u32 *)dstp = size << 8 | 0x10; - // [i+3] [i+2] [i+1](TCY) | [0001 0000] - // Huffman - // *(u32 *)dstp = size << 8 | 0x20 | huffBitSize; - // [i+3] [i+2] [i+1](TCY) | [0010 XX00] - u32 header; - s32 dstSize; - u32 memSize = srcSize * 3 + 256 * 2; - u8 *pReadBuf; // kf[^̐擪Ԓnw|C^ - u8 offset; - s8 curDepth = 0; - s8 targetDepth; - - pCompBuf[0] = (u8 *)malloc(memSize); - pCompBuf[1] = (u8 *)malloc(memSize); - pReadBuf = pCompBuf[0]; - - // malloc `FbN - if (pCompBuf[0] == NULL || pCompBuf[1] == NULL) - { - fprintf(stderr, "Error: Memory is not enough.\n"); - exit(1); - } - - compBufNo = 1; - memcpy(pReadBuf, srcp, srcSize); - - if (depth < 1) - { - targetDepth = -1; - } - else - { - targetDepth = depth; - } - dbg_printf(stderr, "nitroCompress \t(Compressed size is 0x%x)\n", srcSize); - - while (1) - { - // targetDepthw̍ۂ̏I - if (curDepth == targetDepth) - { - dbg_printf(stderr, "nitroDecompress Raw \t(Decompressed size will be 0x%x)\n", - dstSize); - dstSize = RawRead(pReadBuf, dstSize, dstp, dstSize); - - if (pCompBuf[0] != NULL) - { - free(pCompBuf[0]); - pCompBuf[0] = NULL; - } - if (pCompBuf[1] != NULL) - { - free(pCompBuf[1]); - pCompBuf[1] = NULL; - } - return dstSize; - } - - header = *(u32 *)pReadBuf; - dstSize = header >> 8; // wb_܂܂ȂTCY, WJ֐ɂwb_܂߂ɓn - offset = 4; - - if ( dstSize == 0 ) - { - dstSize = *(u32 *)(pReadBuf + 4); - offset = 8; - } - - if ( memSize < (u32)dstSize ) - { - memSize = dstSize * 3 + 256 * 2; - pCompBuf[0] = (u8 *)realloc(pCompBuf[0], memSize); - pCompBuf[1] = (u8 *)realloc(pCompBuf[1], memSize); - pReadBuf = pCompBuf[compBufNo ^ 0x1]; - - } - - switch (header & CODE_HEADER_MASK) - { - case DIFF_CODE_HEADER: - { - dbg_printf(stderr, "nitroDecompress Diff %d \t(Decompressed size will be 0x%x)\n", - ((u8)header & 0x03) * 8, dstSize ); - dstSize = - DiffFiltRead(&pReadBuf[offset], srcSize - offset, pCompBuf[compBufNo], dstSize, - ((u8)header & 0x03) * 8); - } - break; - case HUFF_CODE_HEADER: - { - dbg_printf(stderr, "nitroDecompress Huff %d \t(Decompressed size will be 0x%x)\n", - ((u8)header & 0x0f), dstSize); - dstSize = - HuffCompRead(&pReadBuf[offset], srcSize - offset, pCompBuf[compBufNo], dstSize, (u8)header & 0x0f); - } - break; - case LZ_CODE_HEADER: - { - BOOL ex_format = ((header & 0xF) == 0)? FALSE : TRUE; - - dbg_printf(stderr, "nitroDecompress LZ \t(Decompressed size will be 0x%x)\n", - dstSize); - dstSize = LZCompReadEx(&pReadBuf[offset], srcSize - offset, pCompBuf[compBufNo], dstSize, ex_format); - } - break; - case RL_CODE_HEADER: - { - dbg_printf(stderr, "nitroDecompress RL \t(Decompressed size will be 0x%x)\n", - dstSize); - dstSize = RLCompRead(&pReadBuf[offset], srcSize - offset, pCompBuf[compBufNo], dstSize); - } - break; - default: - { - dbg_printf(stderr, "nitroDecompress Raw \t(Decompressed size will be 0x%x)\n", - dstSize); - - dstSize = RawRead(&pReadBuf[offset], srcSize - offset, dstp, dstSize); - if (pCompBuf[0] != NULL) - { - free(pCompBuf[0]); - pCompBuf[0] = NULL; - } - if (pCompBuf[1] != NULL) - { - free(pCompBuf[1]); - pCompBuf[1] = NULL; - } - return dstSize; - } - } - - if ( dstSize < 0 ) - // sȃt@Cʼn𓀂Ɏs - { - dbg_printf(stderr, "decompress fail\n"); - return -1; - } - - // - pReadBuf = pCompBuf[compBufNo]; - compBufNo ^= 0x01; - srcSize = dstSize; - curDepth++; - } -} - -//================================================================================== -// e16iŏo -//================================================================================== -EXTERN void STDCALL debugMemPrint(FILE * fp, u8 *str, u32 size) -{ - u32 i = 0; - - while (str) - { - fprintf(fp, "%4lx:\t0x%2x\n", i, *str); - str++; - i++; - if (i >= size) - { - break; - } - } -} - -//================================================================================== -// e2iŏo -//================================================================================== -EXTERN void STDCALL debugMemBitPrint(FILE * fp, u8 *str, u32 size) -{ - u32 i = 0; - u8 j; - - while (str) - { - if (i >= size) - { - break; - } - - fprintf(fp, "%4lx:\t0x%2x\t(binary\t", i, *str); - for (j = 0; j < 8; j++) - { - fprintf(fp, "%d", *str >> (7 - j) & 0x01); - } - fprintf(fp, " )\n"); - str++; - i++; - } -} - -//================================================================================== -// kOƓWJ̃f[^̔r(WJłĂ΁A"DATA match"Əo͂) -//================================================================================== -EXTERN int STDCALL matchingCheck(u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize) -{ - u32 minSize, i; - u8 dataMatchFlag = 1; - u8 sizeMatchFlag; - - sizeMatchFlag = (srcSize == dstSize); - if (srcSize < dstSize) - { - minSize = srcSize; - } - else - { - minSize = dstSize; - } - - for (i = 0; i < minSize; i++) - { - dbg_printf_match(stderr, "src[%3x], dst[%3x] = %2x , %2x", i, i, srcp[i], dstp[i]); - if (srcp[i] != dstp[i]) - { - dataMatchFlag = 0; - dbg_printf_match(stderr, "\t; mismatch here!"); - } - dbg_printf_match(stderr, "\n"); - } - - if (sizeMatchFlag) - { - fprintf(stderr, "\nSIZE match.\n"); - } - else - { - fprintf(stderr, "\nSIZE mismatch!\n"); - } - - if (dataMatchFlag) - { - fprintf(stderr, "DATA match.\n"); - } - else - { - fprintf(stderr, "DATA mismatch!\n"); - } - - if (dataMatchFlag && sizeMatchFlag) - { - return 1; - } - else - { - return 0; - } -} - - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.h b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.h deleted file mode 100644 index 7c96d8db..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/nitroCompLib.h +++ /dev/null @@ -1,127 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: nitroCompLib.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -// nitroCompLib.h : nitroCompLib.DLL ̃C wb_[ t@C -// - -#ifndef __NITROCOMPLIB_H__ -#define __NITROCOMPLIB_H__ - -//=========================================================================================== -// CN[h -//=========================================================================================== -#include -#include -#include -#include -#include "types.h" - -#ifdef WIN32 -#define STDCALL __stdcall -#else -#define STDCALL -#endif - -//=========================================================================================== -// vg^Cv錾 -//=========================================================================================== -// C++p -#ifdef __cplusplus - extern "C" - { -#endif - -//BOOL WINAPI DllMain( HINSTANCE hDLL, DWORD dwReason, LPVOID lpReserved); -u8* STDCALL nitroCompMalloc( u32 size ); -void STDCALL nitroCompFree( u8 *p ); -u32 STDCALL nitroCompress ( const u8 *srcp, u32 srcSize, u8 *dstp, char *compList, u8 rawHeader ); -s32 STDCALL nitroDecompress( const u8 *srcp, u32 srcSize, u8 *dstp, s8 depth ); -void STDCALL debugMemPrint ( FILE * fp, u8 *str, u32 size ); -void STDCALL debugMemBitPrint( FILE * fp, u8 *str, u32 size ); -int STDCALL matchingCheck( u8 *srcp, u32 srcSize, u8 *dstp, u32 dstSize ); -u32 STDCALL nitroGetDecompFileSize( const void* srcp ); - -#ifdef __cplusplus - } -#endif - -//=========================================================================================== -// ֐̎gp@ -//=========================================================================================== -//---------------------------------------------------------------------------------- -// k̃f[^u߂̃̈m -// kÕf[^2{̗̈mۂ -// -// u32 size kÕf[^TCY -// u32 ͕^łẮA -// unsigned int (nˑ) -// Ԃl -// u8 * k̃f[^̈w|C^ -// (ėp|C^Ȃ̂ŁADȌ^ɃLXg) -// ł͂Ȃ -//---------------------------------------------------------------------------------- -//u8 *nitroCompMalloc(u32 size); - -//---------------------------------------------------------------------------------- -// k̃f[^uĂ̈ -// -// u8 *p k̃f[^̈w|C^ -//---------------------------------------------------------------------------------- -//void nitroCompFree(u8 *p); - -//---------------------------------------------------------------------------------- -// f[^k -// kAk͈compListpĎw -// -// u8 *srcp kΏۃf[^w|C^ -// u32 size kΏۃf[^̃TCY(Pʂ̓oCg) -// u8 *dstp k̃f[^ێf[^̈w|C^ -// \ȗ̈mۂĂKv -// nitroCompMalloc̕Ԃlł悢 -// char *compList kAki[Xg (C̃k) -// d8 : 8rbgtB^ -// d16 : 16rbgtB^ -// r : OX -// lx : LZ77Dxɂ͓f[^̊Jn_ItZbg -// : 2ȏłȂ΂ȂȂD255. -// h4 : 4rbgEnt}k -// h8 : 8rbgEnt}k -// u8 rawHeaderFlag kÕf[^ł邱Ƃwb_t邩ǂ -// wtOD0łΕtA1ł΁AWJ -// f[^ɂwb_tD -// Ԃl -// k̃f[^TCY -//---------------------------------------------------------------------------------- -//u32 nitroCompress(u8 *srcp, u32 size, u8 *dstp, char *compList, u8 rawHeader); - -//---------------------------------------------------------------------------------- -// f[^WJ -// WJAWJ̓f[^̃wb_Ĕf -// -// u8 *srcp WJΏۃf[^w|C^ -// u32 size WJΏۃf[^̃TCY(Pʂ̓oCg) -// u8 *dstp WJ̃f[^ێf[^̈w|C^ -// \ȗ̈mۂĂKv -// nitroCompMalloc̕Ԃlł悢 -// u8 depth WJ[() -// 0̏ꍇ́AkOf[^wb_񂪓܂œWJ -// Ԃl -// WJ̃f[^TCY -//---------------------------------------------------------------------------------- -//u32 nitroDecompress(u8 *srcp, u32 size, u8 *dstp, s8 depth); - -#endif // __NITROCOMPLIB_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_main.c b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_main.c deleted file mode 100644 index ce37efb2..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_main.c +++ /dev/null @@ -1,1164 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: ntcompress_main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include "nitroCompLib.h" -#include "ntcompress_test.h" -#include "multipleCompLib.h" -#include "rangeCoder.h" - -#define FOR_NITRO - -#if defined( FOR_NITRO ) - #define INCLUDE_TARGET "nitro" - #define TARGET_NAME "ntrcomp" - #define NTCOMPRESS_VERSION "1.1.0" -#else // for revolution - #define SUPPORT_LH_LRC - #define INCLUDE_TARGET "revolution" - #define TARGET_NAME "ntcompress" - #define NTCOMPRESS_VERSION "2.0.0" -#endif - - -#define uint unsigned int -#define ushort unsigned short -#define ulong unsigned long -#define uchar unsigned char - - -#define ROUNDUP(x,n) (((x) + ((n) - 1)) & (~((n)-1))) -#define ROUNDUP4(x) ROUNDUP((x),4) - -#define TEXT_BIG_ENDIAN_FLAG 0x10 -#define TEXT_WIDTH_MASK 0x07 - -//--------------------------------------------------------------------------- -// ^` -//--------------------------------------------------------------------------- -// k^Cv -typedef enum -{ - CONV_TYPE_NON, // ϊȂ - CONV_TYPE_DIFF, // tB^ - CONV_TYPE_RUNLENGTH, // OX - CONV_TYPE_LZ77, // LZ77k - CONV_TYPE_HUFFMAN, // nt}k - CONV_TYPE_UNCOMPRESS, // - CONV_TYPE_LZ77EX, // gLZ77k - CONV_TYPE_LH, // LZ77-nt}k - CONV_TYPE_LRC, // LZ77-RangeCoderk - CONV_TYPE_RANGECODER // WR[_ -} -t_conv_type; - -// kf[^\ -typedef struct -{ - t_conv_type type; // k^Cv - uint opt; // kp[^ - ulong src_size; // kOf[^TCY - ulong dest_size; // kf[^TCY - uchar *src_buf; // kOf[^obt@ - uchar *dest_buf; // kf[^obt@ - uchar textout_width; // eLXgo͂邩ǂ̃tOTCY - uchar alignment; // o̓t@CTCỸACg - uchar header_flg :1; // wb_t邩ǂ̃tO - uchar silent_flg :1; // Wo͂փbZ[Wo͂邩ǂ̃tO - uchar verify_flg :1; // kt@CWJۂׂ̂t@CȂǂ̃tO -} -t_conv_data; - -typedef enum -{ - OPT_NONE, // ȃIvV - OPT_VERSION, // o[W\(-v) - OPT_SILENT, // Wo͗}~(-s) - OPT_LOWER_TEXT, // ł̃eLXgo(-t) - OPT_UPPER_TEXT, // 啶ł̃eLXgo(-T) - OPT_ALIGN, // ACgw(-A4|8|16|32) - OPT_HEADER, // wb_t(-H) - OPT_OUTPUT, // o̓t@Cw(-o) - OPT_EXTRACT, // (-x) - OPT_DIFF_FILTER, // tB^(-d) - OPT_RUN_LENGTH, // OXk(-r) - OPT_LZ77, // LZ77k(-l) - OPT_LZ77EX, // LZ77k(-lex) - OPT_LH, // LHk(-lh) - OPT_LRC, // LRCk(-lrc) - OPT_HUFFMAN, // nt}k(-h4|8) - - OPT_RANGECODER, // WR[_k(fobOł̂) (-R) - OPT_VERIFY, // xt@C (fobOł̂) (-D) - OPT_TEST, // eXg (fobOł̂) (--TEST) -} -t_opt; - - - - -//--------------------------------------------------------------------------- -// vg^Cv錾 -//--------------------------------------------------------------------------- -static void usage( const char *cmd_string ); -static void version_info( void ); -static int parse_opt( int argc, char *argv[], t_conv_data * cnv_dat, char **in_fname, - char **out_fname ); -static int load_file ( const char *fname, t_conv_data * cnv_dat ); -static int save_file ( const char *fname, const t_conv_data * cnv_dat ); -static int convert_data( t_conv_data * cnv_dat ); -static int fwrite_text ( const uchar * buf, ulong size, uint width, FILE * fp, const char *name ); -static char* cut_fname ( char *path ); -static char* make_output_fname( const char *input_fname, const t_conv_data * cnv_dat ); -static int verify_data ( t_conv_data * cnv_dat ); - - -//--------------------------------------------------------------------------- -// GfBAϊ -//--------------------------------------------------------------------------- -static ushort -reverse_endian16( ushort x ) -{ - return (ushort)( ( (x >> 8) & 0x00FF ) | ( (x << 8) & 0xFF00 ) ); -} - -static ulong -reverse_endian32( ulong x ) -{ - return (ulong)( ( (x >> 24) & 0x000000FF ) | - ( (x >> 8) & 0x0000FF00 ) | - ( (x << 8) & 0x00FF0000 ) | - ( (x << 24) & 0xFF000000 ) ); -} - - - -//--------------------------------------------------------------------------- -// C֐ -//--------------------------------------------------------------------------- -int main(int argc, char *argv[]) -{ - t_conv_data cnv_dat; - char *in_fname, *out_fname; - -#ifdef _DEBUG - if ( argc >= 2 && strcmp(argv[1], "-TEST") == 0 ) - { - ntcompress_test(); - return 0; - } -#endif - - // f[^̏ - memset(&cnv_dat, 0, sizeof(cnv_dat)); - - // R}hIvV̉ - if (parse_opt(argc, argv, &cnv_dat, &in_fname, &out_fname) != 0) - { - exit(1); - } - - // ̓t@Cobt@֓ǂݍ - if (load_file(in_fname, &cnv_dat) != 0) - { - exit(1); - } - - // t@C̈k - if (convert_data(&cnv_dat) != 0) - { - exit(1); - } - - // kf[^̃xt@C - if (verify_data( &cnv_dat ) != 0) - { - exit(1); - } - - // obt@o̓t@Cւ̏ - if (save_file(out_fname, &cnv_dat) != 0) - { - exit(1); - } - - if (!cnv_dat.silent_flg) - { - fprintf(stdout, "convert %s(%ldbyte) to %s(%ldbyte)\n", in_fname, cnv_dat.src_size, - out_fname, cnv_dat.dest_size); - } - - free(cnv_dat.src_buf); - if (cnv_dat.dest_buf != cnv_dat.src_buf) - { - free(cnv_dat.dest_buf); - } - - return 0; -} - -//--------------------------------------------------------------------------- -// USAGE: -//--------------------------------------------------------------------------- -static void usage(const char *cmd_string) -{ - fprintf(stderr, "\n"); -#if defined( SUPPORT_LH_LRC ) - fprintf(stderr, - "Usage: %s <-d(4|8)|r|l|lex|h(8|16)|lh|lrc> [-o outputFile] [-A(4|8|16|32)] [-[width]] [-s] [-H] [-v] \n" - " %s -x [-o outputFile] [-s] \n", - cmd_string, cmd_string); -#else - fprintf(stderr, - "Usage: %s <-d(4|8)|r|l|lex|h(8|16)> [-o outputFile] [-A(4|8|16|32)] [-[width]] [-s] [-H] [-v] \n" - " %s -x [-o outputFile] [-s] \n", - cmd_string, cmd_string); -#endif - fprintf(stderr, "\t-v Show version\n"); - fprintf(stderr, "\t-r Runlength encode.\n"); - fprintf(stderr, "\t-l LZ77 encode(compatible with previous LZ77).\n"); - fprintf(stderr, "\t-lex LZ77 encode.\n"); - fprintf(stderr, "\t-h BitSize(4|8) Huffman encode.\n"); - fprintf(stderr, "\t-d BitSize(8|16) Differential filter.\n"); -#if defined( SUPPORT_LH_LRC ) - fprintf(stderr, "\t-lh LZ and Huffman encode\n"); - fprintf(stderr, "\t-lrc LZ and RangeCoder encode\n"); -#endif - fprintf(stderr, "\n"); - fprintf(stderr, "\t-A(4|8|16|32) Align n byte for compressed filesize\n"); - fprintf(stderr, "\t-o outputFile Specify the output file name.\n"); - fprintf(stderr, "\t-t[TypeWidth(1|2|4)] output C format text(little endian).\n"); - fprintf(stderr, "\t We can specify the type(1=u8,2=u16,4=u32).\n"); - fprintf(stderr, "\t-T[TypeWidth(1|2|4)] output C format text(big endian).\n"); - fprintf(stderr, "\t We can specify the type(1=u8,2=u16,4=u32).\n"); - fprintf(stderr, "\t-s Print no message if you've been successful in the conversion.\n"); - fprintf(stderr, "\t-H Raw data header\n"); - fprintf(stderr, "\t-x Extract compressed file.\n"); -} - - -static void version_info( void ) -{ - fprintf(stderr, "%s version %s\n", TARGET_NAME, NTCOMPRESS_VERSION); -} - -//--------------------------------------------------------------------------- -// pX񂩂t@C̃|C^擾Agq -// @param path pX -// @return t@C̃|C^ -//--------------------------------------------------------------------------- -static char *cut_fname(char *path) -{ - char *search_tmp; - - if (path == NULL) - { - return NULL; - } - - if ((search_tmp = strrchr(path, '/')) != NULL) - { - path = (search_tmp + 1); - } - if ((search_tmp = strrchr(path, '\\')) != NULL) - { - path = (search_tmp + 1); - } - if ((search_tmp = strrchr(path, '.')) != NULL) - { - *search_tmp = '\0'; - } - return path; -} - -//--------------------------------------------------------------------------- -// ̓t@Co̓t@C𐶐֐ -// @param input_fname ̓t@C -// @param cnv_dat ϊ -// @return o̓t@Cւ̃|C^ -//--------------------------------------------------------------------------- -static char *make_output_fname(const char *input_fname, const t_conv_data * cnv_dat) -{ - char *out_fname, *edit_tmp; - - if (input_fname == NULL) - { - return NULL; - } - - // ̈̊m - if ((out_fname = (char *)malloc(strlen(input_fname) + 0x10)) == NULL) - { - fprintf(stderr, "internal err: malloc fail!\n"); - exit(1); - } - - strcpy(out_fname, input_fname); - edit_tmp = cut_fname(out_fname); - - // kt@Cɕt - switch ( cnv_dat->type ) - { - case CONV_TYPE_NON: - strcat(edit_tmp, "_NONE"); - break; - case CONV_TYPE_DIFF: - strcat(edit_tmp, "_DIFF"); - break; - case CONV_TYPE_RUNLENGTH: - strcat(edit_tmp, "_RL"); - break; - case CONV_TYPE_LZ77: - case CONV_TYPE_LZ77EX: - strcat(edit_tmp, "_LZ"); - break; - case CONV_TYPE_HUFFMAN: - strcat(edit_tmp, "_HUFF"); - break; - case CONV_TYPE_LH: - strcat(edit_tmp, "_LH"); - break; - case CONV_TYPE_LRC: - strcat(edit_tmp, "_LRC"); - break; - case CONV_TYPE_RANGECODER: - strcat(edit_tmp, "_RC"); - break; - case CONV_TYPE_UNCOMPRESS: - strcat(edit_tmp, "_DECOMP"); - } - // gqt - if (cnv_dat->textout_width != 0) - { - strcat(edit_tmp, ".c"); - } - else - { - strcat(edit_tmp, ".bin"); - } - return out_fname; -} - - -//--------------------------------------------------------------------------- -// ̃IvṼ^Cv -// @param opt ʂIvV -// @return IvṼ^Cv -//--------------------------------------------------------------------------- -t_opt -get_opt_type( const char* opt ) -{ - if ( strncmp( opt, "--", 2 ) == 0 ) - { - } - else - { - // IvV - switch ( opt[1] ) - { - case 'v': - return OPT_VERSION; - case 's': - return OPT_SILENT; - case 'D': - return OPT_VERIFY; - case 't': - return OPT_LOWER_TEXT; - case 'T': - return OPT_UPPER_TEXT; - case 'A': - return OPT_ALIGN; - case 'H': - return OPT_HEADER; - case 'o': - return OPT_OUTPUT; - case 'x': - return OPT_EXTRACT; - case 'd': - return OPT_DIFF_FILTER; - case 'r': - return OPT_RUN_LENGTH; - case 'R': - return OPT_RANGECODER; - case 'l': - if ( strcmp(opt, "-lex" ) == 0 ) - { - return OPT_LZ77EX; - } -#if defined( SUPPORT_LH_LRC ) - else if ( strcmp(opt, "-lh") == 0 ) - { - return OPT_LH; - } - else if ( strcmp(opt, "-lrc") == 0 ) - { - return OPT_LRC; - } -#endif - else - { - return OPT_LZ77; - } - case 'h': - return OPT_HUFFMAN; - } - } - return OPT_NONE; -} - - -//--------------------------------------------------------------------------- -// R}hp[^ -// @param argc p[^ -// @param argv p[^z -// @retval cnv_dat kf[^ -// @retval in_fname ̓t@C -// @retval out_fname o̓t@C -// @return 0 t@C̏ݐ -// -1 t@C̏݃G[ -//--------------------------------------------------------------------------- - -static int parse_opt(int argc, char *argv[], t_conv_data * cnv_dat, - char **in_fname, char **out_fname) -{ - int i = 1; - t_conv_type type; - int opt_num; - char *cmd_string; -#define SYNTAX_CHECK(exp) do { if (!(exp)) { usage(cmd_string); return -1; } } while(0) - - // R}h擾 - cmd_string = cut_fname(argv[0]); - - // ԏ - cnv_dat->type = CONV_TYPE_NON; - cnv_dat->header_flg = 0; - cnv_dat->textout_width = 0; - cnv_dat->silent_flg = 0; - cnv_dat->alignment = 0; - cnv_dat->verify_flg = 0; - *out_fname = NULL; - *in_fname = NULL; - - // IvV - while (i < argc) - { - t_opt opt; - - if (argv[i][0] != '-') - { - SYNTAX_CHECK(*in_fname == NULL); // Qdǂ݃`FbN - - // ̓t@C擾 - *in_fname = argv[i]; - i++; - continue; - } - - opt = get_opt_type( argv[i] ); - - // nCttIvV - switch ( opt ) - { - //-------------------- - // o[W\IvV'v'(0) - case OPT_VERSION: - SYNTAX_CHECK(argv[i][2] == '\0'); // `FbN - - version_info(); - return -1; - - //-------------------- - // Wo͖IvV's' (0) - case OPT_SILENT: - SYNTAX_CHECK(argv[i][2] == '\0'); // `FbN - SYNTAX_CHECK(!cnv_dat->silent_flg); // Qdǂ݃`FbN - - cnv_dat->silent_flg = 1; - break; - -#ifdef _DEBUG - //-------------------- - // xt@CIvV'D' (0) - case OPT_VERIFY: - SYNTAX_CHECK(argv[i][2] == '\0'); // `FbN - SYNTAX_CHECK(!cnv_dat->verify_flg); // Qdǂ݃`FbN - cnv_dat->verify_flg = 1; - break; -#endif - - //-------------------- - // CeLXgo̓IvV't' (0-1) (gGfBA) - case OPT_LOWER_TEXT: - SYNTAX_CHECK(cnv_dat->textout_width == 0); // Qdǂ݃`FbN - - if (strlen(argv[i]) == 2) // p[^ꍇ̓oCgPʂŏ - { - cnv_dat->textout_width = 1; - } - else - { - cnv_dat->textout_width = atoi(&argv[i][2]); - SYNTAX_CHECK(cnv_dat->textout_width == 1 || cnv_dat->textout_width == 2 - || cnv_dat->textout_width == 4); - } - break; - - //-------------------- - // CeLXgo̓IvV'T' (0-1) (rbOGfBA) - case OPT_UPPER_TEXT: - SYNTAX_CHECK(cnv_dat->textout_width == 0); // Qdǂ݃`FbN - - if (strlen(argv[i]) == 2) // p[^ꍇ̓oCgPʂŏ - { - cnv_dat->textout_width = 1; - } - else - { - cnv_dat->textout_width = atoi(&argv[i][2]); - SYNTAX_CHECK(cnv_dat->textout_width == 1 || cnv_dat->textout_width == 2 - || cnv_dat->textout_width == 4); - } - cnv_dat->textout_width |= TEXT_BIG_ENDIAN_FLAG; - break; - - //-------------------- - // o̓t@CTCYACw'A4|8|16|32' (0) - case OPT_ALIGN: - SYNTAX_CHECK(strlen(argv[i]) <= 4 ); // `FbN - SYNTAX_CHECK( cnv_dat->alignment == 0 ); // Qdǂ݃`FbN - - cnv_dat->alignment = atoi(&argv[i][2]); - SYNTAX_CHECK( cnv_dat->alignment == 4 || cnv_dat->alignment == 8 || cnv_dat->alignment == 16 || cnv_dat->alignment == 32 ); - - break; - - //-------------------- - // WJf[^̐擪Ƀf[^TCYtIvV'H' (0) - case OPT_HEADER: - SYNTAX_CHECK(strlen(argv[i]) == 2); // `FbN - SYNTAX_CHECK(!cnv_dat->header_flg); // Qdǂ݃`FbN - - cnv_dat->header_flg = 1; - break; - - //-------------------- - // o̓t@CwIvV 'o' (1) - case OPT_OUTPUT: - SYNTAX_CHECK(strlen(argv[i]) == 2); // `FbN - SYNTAX_CHECK(*out_fname == NULL); // Qdǂ݃`FbN - SYNTAX_CHECK(i + 1 < argc); // p[^`FbN - - *out_fname = argv[++i]; - break; - - //-------------------- - // 𓀎w 'x'(0) - case OPT_EXTRACT: - SYNTAX_CHECK(strlen(argv[i]) == 2); // `FbN - - type = CONV_TYPE_UNCOMPRESS; - opt_num = 0; - goto common; - - //-------------------- - // tB^w 'd'(1) - case OPT_DIFF_FILTER: - type = CONV_TYPE_DIFF; - goto common_opt1; - - //-------------------- - // OXkw'r'(0) - case OPT_RUN_LENGTH: - SYNTAX_CHECK(strlen(argv[i]) == 2); // `FbN - - type = CONV_TYPE_RUNLENGTH; - opt_num = 0; - goto common; - -#ifdef _DEBUG - //-------------------- - // WR[_kw'R'(0) - case OPT_RANGECODER: - SYNTAX_CHECK(strlen(argv[i]) == 2); // `FbN - - type = CONV_TYPE_RANGECODER; - opt_num = 0; - goto common; -#endif - //-------------------- - // LZ77k"-l"(0) - case OPT_LZ77: - SYNTAX_CHECK( (argv[i][2] == '\0') || isdigit(argv[i][2]) ); - type = CONV_TYPE_LZ77; - opt_num = 0; - cnv_dat->opt = 2; - - #if defined( FOR_NITRO ) - // Ƀp[^A̓t@CłȂΓǂݔ΂ - if ( i + 2 < argc && argv[i + 1][0] != '-' && - argv[i + 1][1] == '\0' && atoi(&argv[i + 1][0]) != 0 ) - { - i++; - } - #endif - goto common; - - //-------------------- - // LZ77k"-lex"(0) - case OPT_LZ77EX: - type = CONV_TYPE_LZ77EX; - opt_num = 0; - cnv_dat->opt = 2; // Jnʒu̓IvVŎwłȂɂ - goto common; - - //-------------------- - // LHk"-lh"(0) - case OPT_LH: - type = CONV_TYPE_LH; - opt_num = 0; - goto common; - - //-------------------- - // LRCk"-lrc"(0) - case OPT_LRC: - type = CONV_TYPE_LRC; - opt_num = 0; - goto common; - - //-------------------- - // nt}kw'h'(1) - case OPT_HUFFMAN: - type = CONV_TYPE_HUFFMAN; - goto common_opt1; - - //-------------------- - // kw蕔̋ʏ - common_opt1: - if (strlen(argv[i]) == 2) - // 񂪏IĂΎ̈p[^ƂȂ - { - opt_num = 1; - } - else - // 񂪑Ă΂̒lp[^ƂȂ - { - cnv_dat->opt = atoi(&argv[i][2]); - SYNTAX_CHECK(cnv_dat->opt != 0); // p[^1ȏ̐ł邩̃`FbN - opt_num = 0; - } - // don't break; - common: - SYNTAX_CHECK(cnv_dat->type == CONV_TYPE_NON); // Qdǂ݃`FbN - - cnv_dat->type = type; - - if (opt_num == 0) - { - break; - } - - // ꍇ - SYNTAX_CHECK(i + 1 < argc); // p[^`FbN - i++; - SYNTAX_CHECK(argv[i][0] != '-'); // p[^ɃnCtŎn܂Ȃ̃`FbN - - cnv_dat->opt = atoi(argv[i]); - - SYNTAX_CHECK(cnv_dat->opt != 0); // p[^1ȏ̐ł邩̃`FbN - - break; - - //-------------------- - default: - usage(cmd_string); - return -1; - } - i++; - } - - SYNTAX_CHECK(*in_fname != NULL); // ̓t@Cw肳ꂽǂ̃`FbN - - // o̓t@C̎ - if (*out_fname == NULL) - { - *out_fname = make_output_fname(*in_fname, cnv_dat); - } - - if (strcmp(*in_fname, *out_fname) == 0) - { - fprintf(stderr, "ERR: output file %s is same as input file\n", *out_fname); - return -1; - } - - if ( cnv_dat->type == CONV_TYPE_UNCOMPRESS ) - // 𓀃IvVw肳ꂽꍇ̃IvV`FbN - { - SYNTAX_CHECK(cnv_dat->alignment == 0); // ACg̎w͕s\ł - SYNTAX_CHECK(cnv_dat->header_flg == 0); // wb_̒ljIvV͕s\ł - } - - return 0; -#undef SYNTAX_CHECK -} - - - -//--------------------------------------------------------------------------- -// ̓t@C̓ǂݍ݊֐ -// -// @param fname ̓t@C -// @retval k\̂ւ̃|C^ -// @return 0 t@C̓ǂݍݐ -// -1 t@C̓ǂݍ݃G[ -//--------------------------------------------------------------------------- - -static int load_file(const char *fname, t_conv_data * cnv_dat) -{ - FILE *in_file; - - // t@C̃I[v - if ((in_file = fopen(fname, "rb")) == NULL) - { - fprintf(stderr, "ERR: could not open file: %s\n", fname); - return -1; - } - - // t@C̃TCY擾 - fseek(in_file, 0, SEEK_END); - if ((cnv_dat->src_size = ftell(in_file)) < 0) - { - fprintf(stderr, "ERR: file error\n"); - return -1; - } - - // ̓t@Cobt@֓ǂݍ - if ((cnv_dat->src_buf = (uchar *) malloc(ROUNDUP4(cnv_dat->src_size))) == NULL) - { - fprintf(stderr, "ERR: memory exhausted\n"); - return -1; - } - - fseek(in_file, 0, SEEK_SET); - if (fread(cnv_dat->src_buf, 1, cnv_dat->src_size, in_file) != cnv_dat->src_size) - { - fprintf(stderr, "ERR: read error\n"); - return -1; - } - - fclose(in_file); - - // SoCgAC܂ł0Ŗ߂ - { - ulong i; - for (i = 0; (cnv_dat->src_size + i) & 3; i++) - { - cnv_dat->src_buf[cnv_dat->src_size + i] = 0; - } - } - - return 0; -} - - -//--------------------------------------------------------------------------- -// o̓t@Cւ̏݊֐ -// -// @param fname o̓t@C -// @retval k\̂ւ̃|C^ -// @return 0 t@C̏ݐ -// -1 t@C̏݃G[ -//--------------------------------------------------------------------------- - -static int save_file(const char *fname, const t_conv_data * cnv_dat) -{ - FILE *out_file; - - // ݃f[^̃`FbN - if (cnv_dat->dest_buf == NULL || cnv_dat->dest_size < 0) - { - fprintf(stderr, "ERR: convert error\n"); - return -1; - } - - // t@C̃I[v - if ((out_file = fopen(fname, "wb")) == NULL) - { - fprintf(stderr, "ERR: could not open file: %s\n", fname); - return -1; - } - - // obt@o̓t@C֏ - if (cnv_dat->textout_width != 0) - { - // eLXgo - if ( fwrite_text(cnv_dat->dest_buf, cnv_dat->dest_size, cnv_dat->textout_width, out_file, fname) - != cnv_dat->dest_size ) - { - fprintf(stderr, "ERR: write error\n"); - return -1; - } - } - else - { - // oCio - if ( fwrite(cnv_dat->dest_buf, 1, cnv_dat->dest_size, out_file) != cnv_dat->dest_size ) - { - fprintf(stderr, "ERR: write error\n"); - return -1; - } - } - - fclose(out_file); - - return 0; -} - -//--------------------------------------------------------------------------- -// CtH[}bgł̃eLXgo -// @param buf f[^obt@ -// @param size f[^TCY -// @param fp o̓t@C|C^ -// @param name 萔x -// @return 0 t@C̏ݐ -// -1 t@C̏݃G[ -//--------------------------------------------------------------------------- - -static int fwrite_text(const uchar * buf, ulong size, uint width, FILE * fp, const char *name) -{ - char *const_name_buf; - char *const_name_ptr; - ulong i; - ulong line_num; - uint big_endian = width & TEXT_BIG_ENDIAN_FLAG; - - width &= TEXT_WIDTH_MASK; - - if (fp == NULL) - { - return -1; - } - if (buf == NULL) - { - return -1; - } - if (name == NULL) - { - return -1; - } - - // 萔̌ - if ((const_name_buf = (char *)malloc( strlen(name) + 1 )) == NULL) - { - fprintf(stderr, "internal err: malloc fail!\n"); - return -1; - } - - strcpy(const_name_buf, name); - const_name_ptr = cut_fname(const_name_buf); - size = (size + width - 1) / width; - - // f[^̏ - if ( fprintf(fp, "#include <%s/types.h>\n\n", INCLUDE_TARGET) < 0 ) - { - return -1; - } - - if ( fprintf(fp, "const u%d %s[0x%lX] = {", width * 8, const_name_ptr, size) < 0 ) - { - return -1; - } - - line_num = (width >= 2) ? 2 : 1; - - for ( i = 0; i < size; i++ ) - { - if ((i * line_num) % 0x10 == 0) - { - if (fprintf(fp, "\n") < 0) - { - return -1; - } - } - switch ( width ) - { - case 1: - { - if ( fprintf(fp, "0x%02X,", *buf) < 0 ) - { - return -1; - } - buf++; - } - break; - case 2: - { - ushort val = *(ushort*)buf; - if ( big_endian ) - { - val = reverse_endian16( val ); - } - - if ( fprintf(fp, "0x%04X,", val) < 0 ) - { - return -1; - } - buf += 2; - } - break; - case 4: - { - ulong val = *(ulong*)buf; - if ( big_endian ) - { - val = reverse_endian32( val ); - } - - if ( fprintf(fp, "0x%08lX,", val) < 0 ) - { - return -1; - } - buf += 4; - } - break; - default: - return -1; - } - } - - if (fprintf(fp, "\n};\n") < 0) - { - return -1; - } - - free(const_name_buf); - - return i * width; -} - - -//--------------------------------------------------------------------------- -// f[^̕ϊ -// @retval cnv_dat ϊf[^ -// @return 0 ϊ -// -1 ϊs -//--------------------------------------------------------------------------- - -static int convert_data(t_conv_data * cnv_dat) -{ - char cmd_str[16]; - - // R}hXgO̐ - switch (cnv_dat->type) - { - //--------------------- - // tB^ - case CONV_TYPE_DIFF: - if (cnv_dat->opt != 8 && cnv_dat->opt != 16) - { - fprintf(stderr, "ERR: invalid DIFF parameter %d\n", cnv_dat->opt); - return -1; - }; - sprintf(cmd_str, "d%d", cnv_dat->opt); - break; - - //--------------------- - // OXk - case CONV_TYPE_RUNLENGTH: - // OX - strcpy(cmd_str, "r"); - break; - - //--------------------- - // LZ77k - case CONV_TYPE_LZ77: - if (cnv_dat->opt < 2 || cnv_dat->opt > 255) - { - fprintf(stderr, "ERR: invalid LZ77 parameter %d\n", cnv_dat->opt); - return -1; - }; - sprintf(cmd_str, "l%d", cnv_dat->opt); - break; - - //--------------------- - // LZ77gk - case CONV_TYPE_LZ77EX: - if (cnv_dat->opt < 2 || cnv_dat->opt > 255) - { - fprintf(stderr, "ERR: invalid LZ77 parameter %d\n", cnv_dat->opt); - return -1; - }; - sprintf(cmd_str, "L%d", cnv_dat->opt); - break; - - //--------------------- - // nt}k - case CONV_TYPE_HUFFMAN: - if (cnv_dat->opt != 4 && cnv_dat->opt != 8) - { - fprintf(stderr, "ERR: invalid HUFFMAN parameter %d\n", cnv_dat->opt); - return -1; - }; - sprintf(cmd_str, "h%d", cnv_dat->opt); - break; - - //--------------------- - // WR[_k - case CONV_TYPE_RANGECODER: - cnv_dat->dest_buf = nitroCompMalloc( cnv_dat->src_size ); - cnv_dat->dest_size = RCACompWrite( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf ); - goto finish; - - //--------------------- - // LZ-nt}k - case CONV_TYPE_LH: - cnv_dat->dest_buf = nitroCompMalloc( cnv_dat->src_size ); - cnv_dat->dest_size = LHCompWrite( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf ); - goto finish; - - //--------------------- - // LZ-RangeCoderk - case CONV_TYPE_LRC: - cnv_dat->dest_buf = nitroCompMalloc( cnv_dat->src_size ); - cnv_dat->dest_size = LRCCompWrite( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf ); - goto finish; - - //--------------------- - // k - case CONV_TYPE_NON: - { - cnv_dat->dest_size = cnv_dat->src_size; - cnv_dat->dest_buf = cnv_dat->src_buf; - - // 4oCgAC`FbN - if (cnv_dat->alignment) - { - cnv_dat->dest_size = ROUNDUP(cnv_dat->src_size, cnv_dat->alignment); - } - else if (cnv_dat->textout_width >= 2) - { - cnv_dat->dest_size = ROUNDUP( cnv_dat->src_size, cnv_dat->textout_width & TEXT_WIDTH_MASK ); - } - } - return 0; - - //--------------------- - // - case CONV_TYPE_UNCOMPRESS: - { - s32 ret; - if ( cnv_dat->src_size == 4 ) - { - cnv_dat->dest_size = 0; - cnv_dat->dest_buf = NULL; - goto finish; - } - cnv_dat->dest_size = nitroGetDecompFileSize( cnv_dat->src_buf ); - cnv_dat->dest_buf = (void*)malloc( cnv_dat->dest_size + 0x20 ); // ACg]Ɋm - memset(cnv_dat->dest_buf, 0, cnv_dat->dest_size + 0x20); - - switch ( *cnv_dat->src_buf & 0xF0 ) - { - case LH_CODE_HEADER: - ret = LHCompRead( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf ); - break; - case LRC_CODE_HEADER: - ret = LRCCompRead( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf ); - break; - case DIFF_CODE_HEADER: - case LZ_CODE_HEADER: - case HUFF_CODE_HEADER: - case RL_CODE_HEADER: - ret = nitroDecompress( cnv_dat->src_buf, cnv_dat->src_size, cnv_dat->dest_buf, 1 ); - break; - default: - ret = -1; - } - if ( ret < 0 ) - { - fprintf(stderr, "ERR: Can't extract this file.\n"); - return -1; - } - } - goto finish; - - default: - fprintf(stderr, "ERR: invalid convert type\n"); - return -1; - } - - // kt@C̃obt@̈m - cnv_dat->dest_buf = nitroCompMalloc( cnv_dat->src_size ); - - // f[^k - cnv_dat->dest_size = nitroCompress(cnv_dat->src_buf, - cnv_dat->src_size, - cnv_dat->dest_buf, cmd_str, cnv_dat->header_flg); - // 4oCgAC`FbN - if (cnv_dat->alignment) - { - cnv_dat->dest_size = ROUNDUP(cnv_dat->dest_size, cnv_dat->alignment); - } - -finish: - // eLXg`o͂̌^ɂAC`FbN - if (cnv_dat->textout_width >= 2) - { - cnv_dat->dest_size = ROUNDUP( cnv_dat->dest_size, cnv_dat->textout_width & TEXT_WIDTH_MASK ); - } - - return 0; -} - - -/*---------------------------------------------------------------------------* - Name: verify_data - - Description: kf[^̓WJȂAf[^ƈv邩ǂ - mFB - - Arguments: cnv_dat ϊf[^ - - Returns: 0 xt@COK - -1 xt@CNG - *---------------------------------------------------------------------------*/ -static int verify_data( t_conv_data * cnv_dat ) -{ - // kf[^̓WJ`FbN - char *decomp_buf; - ulong decomp_size; - - if ( ! cnv_dat->verify_flg ) - { - return 0; - } - - decomp_buf = nitroCompMalloc( cnv_dat->src_size ); - decomp_size = nitroDecompress( cnv_dat->dest_buf, cnv_dat->dest_size, decomp_buf, 1 ); - - if ( matchingCheck(cnv_dat->src_buf, cnv_dat->src_size, decomp_buf, decomp_size) == 0 ) - { - fprintf(stderr, "ERR: data convert error\n"); - return -1; - } - return 0; -} - - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.c b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.c deleted file mode 100644 index 588590d9..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.c +++ /dev/null @@ -1,661 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: ntcompress_test.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#if defined( _DEBUG ) - -#include -#include -#include -#include -#include -#include "nitroCompLib.h" -#include "multipleCompLib.h" - -#define MAX_DATA_SIZE_EX 0x02000000 // 32MB -#define MAX_DATA_SIZE 0x00100000 // 1MB -//#define MAX_DATA_SIZE 0x100 // 256B - -#define LOOP_CNT 100 -#define LOOP_CNT_EX 4 - -#if 0 -#define TestReport(...) (void)0 -#else -#define TestReport printf -#endif - -#define ASSERT assert - -static u8* s_original; - -static int TestInit( void ); -static void TestLZ8( void ); -static void TestRL8( void ); -static void TestHuffman( void ); - -static struct -{ - u64 x; // l - u64 mul; // 搔 - u64 add; // Z鐔 -} -sRandContext; - -static void InitRand32_(u64 seed) -{ - sRandContext.x = seed; - sRandContext.mul = (1566083941LL << 32) + 1812433253LL; - sRandContext.add = 2531011; -} - -static u32 Rand32_(u32 max) -{ - sRandContext.x = sRandContext.mul * sRandContext.x + sRandContext.add; - - // max萔Ȃ΃RpCɂœKB - if (max == 0) - { - return (u32)(sRandContext.x >> 32); - } - else - { - return (u32)((((sRandContext.x >> 32) * (max >> 1)) >> 32) + (max >> 1)); - } -} - - - -static int compare( const u8 a[], const u8 b[], int size ) -{ - int i; - int equivalent_flag = 1; - for ( i = 0; i < size; ++i ) - { - if ( a[i] != b[i] ) - { - equivalent_flag = 0; - break; - } - } - return equivalent_flag; -} - - -//-------------------------------------------------- -// f[^p֐ -//-------------------------------------------------- - -// LZ,Huffmanňk₷f[^쐬B -static u32 makeOriginalDataForLZHuff( u32 seed ) -{ - u32 fsize; - u32 i; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - (void)Rand32_( 0 ); - fsize = Rand32_( MAX_DATA_SIZE ); - if ( fsize <= 4 ) - { - fsize += 5; - } - - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = (u8)(Rand32_(0x100) & 0xF0); - } - return fsize; -} - - -// RLk₷f[^쐬B -static u32 makeOriginalDataForRL( u32 seed ) -{ - u8 val; - u32 i; - u32 fsize; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - (void)Rand32_( 0 ); - fsize = Rand32_( MAX_DATA_SIZE ); - if ( fsize <= 4 ) - { - fsize += 5; - } - - for ( i = 0; i < fsize; ++i ) - { - if ( (i % 4) == 0 ) - { - val = (u8)Rand32_(0x100); - } - s_original[ i ] = val; - } - return fsize; -} - -// kɂf[^쐬B -static u32 makeOriginalDataRand( u32 seed ) -{ - u32 i; - u32 fsize; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - (void)Rand32_( 0 ); - fsize = Rand32_( MAX_DATA_SIZE ); - if ( fsize <= 4 ) - { - fsize += 5; - } - - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = (u8)Rand32_(0x100); - } - return fsize; -} - - -// ׂĂPľf[^쐬B -static u32 makeOriginalDataMonoValue( u32 seed ) -{ - u32 i; - u32 fsize; - u8 val; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - (void)Rand32_( 0 ); - fsize = Rand32_( MAX_DATA_SIZE ); - if ( fsize <= 4 ) - { - fsize += 5; - } - - val = (u8)Rand32_(0x100); - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = val; - } - return fsize; -} - -// LZ,Huffmanňk₷f[^쐬B -static u32 makeOriginalDataForLZHuffEx( u32 seed ) -{ - u32 i; - u32 fsize; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - fsize = Rand32_(MAX_DATA_SIZE_EX / 2) + (MAX_DATA_SIZE_EX / 2); - if ( fsize <= 4 ) - { - fsize += 5; - } - - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = (u8)(Rand32_(0x100) & 0xF0); - } - return fsize; -} - - -// RLk₷f[^쐬B -static u32 makeOriginalDataForRLEx( u32 seed ) -{ - u32 i; - u32 fsize; - u8 val; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - fsize = Rand32_(MAX_DATA_SIZE_EX / 2) + (MAX_DATA_SIZE_EX / 2); - if ( fsize <= 4 ) - { - fsize += 5; - } - - val; - for ( i = 0; i < fsize; ++i ) - { - if ( (i % 4) == 0 ) - { - val = (u8)Rand32_(0x100); - } - s_original[ i ] = val; - } - return fsize; -} - -// kɂf[^쐬B -static u32 makeOriginalDataRandEx( u32 seed ) -{ - u32 fsize; - u32 i; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - fsize = Rand32_(MAX_DATA_SIZE_EX / 2) + (MAX_DATA_SIZE_EX / 2); - if ( fsize <= 4 ) - { - fsize += 5; - } - - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = (u8)Rand32_(0x100); - } - return fsize; -} - - -// ׂĂPľf[^쐬B -static u32 makeOriginalDataMonoValueEx( u32 seed ) -{ - u32 fsize; - u32 i; - u8 val; - - TestReport("seed: %u\n", seed); - InitRand32_( seed ); - fsize = Rand32_(MAX_DATA_SIZE_EX / 2) + (MAX_DATA_SIZE_EX / 2); - if ( fsize <= 4 ) - { - fsize += 5; - } - - val = (u8)Rand32_(0x100); - for ( i = 0; i < fsize; ++i ) - { - s_original[ i ] = val; - } - return fsize; -} - - - -typedef u32 (*MakeDataFunc)( u32 seed ); -#define WATER_MARK 0xDeadBeaf - - -static void TestLZ8_template( MakeDataFunc makeDataFunc, u32 exFmt, u32 loop_cnt ) -{ - u32 i; - for ( i = 0; i < loop_cnt; ++i ) - { - u32 fsize = makeDataFunc( i ); - - u8* s_compressed = nitroCompMalloc( fsize ); - u8* s_uncompressed = (u8*)malloc( fsize + 4 ); - u32 sz; - - TestReport("size = %d\n", fsize); - if ( ! exFmt ) - { - sz = nitroCompress( s_original, fsize, s_compressed, "l2", 0 ); - } - else - { - sz = nitroCompress( s_original, fsize, s_compressed, "L2", 0 ); - } - - if ( sz == 0 ) - { - TestReport( "compress LZ fail size %d\n", fsize ); - } - else - { - TestReport("compress LZ %d -> %d\n", fsize, sz ); - *(u32*)(&s_uncompressed[ fsize ]) = WATER_MARK; - nitroDecompress( s_compressed, sz, s_uncompressed, 1 ); - ASSERT( compare( s_original, s_uncompressed, (int)fsize ) ); - // WJ̃I[o[ANZX`FbN - ASSERT( *(u32*)(&s_uncompressed[ fsize ]) == WATER_MARK ); - } - - nitroCompFree( s_compressed ); - free( s_uncompressed ); - } -} - -static void TestRL8_template( MakeDataFunc makeDataFunc, u32 loop_cnt ) -{ - u32 i; - for ( i = 0; i < loop_cnt; ++i ) - { - u32 fsize = makeDataFunc( i ); - - u8* s_compressed = nitroCompMalloc( fsize ); - u8* s_uncompressed = (u8*)malloc( fsize + 4 ); - u32 sz; - - TestReport("size = %d\n", fsize); - sz = nitroCompress( s_original, fsize, s_compressed, "r", 0 ); - - if ( sz == 0 ) - { - TestReport( "compress RL fail size %d\n", fsize ); - } - else - { - TestReport("compress RL %d -> %d\n", fsize, sz ); - *(u32*)(&s_uncompressed[ fsize ]) = WATER_MARK; - nitroDecompress( s_compressed, sz, s_uncompressed, 1 ); - ASSERT( compare(s_original, s_uncompressed, (int)fsize) ); - // WJ̃I[o[ANZX`FbN - ASSERT( *(u32*)(&s_uncompressed[ fsize ]) == WATER_MARK ); - } - - nitroCompFree( s_compressed ); - free( s_uncompressed ); - } -} - -static void TestHuffman_template( MakeDataFunc makeDataFunc, u8 encBit, u32 loop_cnt ) -{ - u32 i; - for (i = 0; i < loop_cnt; ++i ) - { - u32 fsize = makeDataFunc( i ); - u8* s_compressed = nitroCompMalloc( fsize ); - u8* s_uncompressed = (u8*)malloc( ((fsize + 0x3) & ~0x3) + 4 ); - u32 sz; - - TestReport("size = %d\n", fsize); - sz = nitroCompress( s_original, fsize, s_compressed, (encBit == 4 )? "h4" : "h8", 0 ); - - if ( sz == 0 ) - { - TestReport( "compress Huff fail size %d\n", fsize ); - } - else - { - TestReport("compress Huff %d -> %d\n", fsize, sz ); - // nt}WJł͖4oCgAC܂ł̓I[o[ANZX꓾ - // R[hɂȂĂ - *(u32*)(&s_uncompressed[ (fsize + 0x3) & ~0x3 ]) = WATER_MARK; - nitroDecompress( s_compressed, sz, s_uncompressed, 1 ); - ASSERT( compare(s_original, s_uncompressed, (int)fsize) ); - // WJ̃I[o[ANZX`FbN - ASSERT( *(u32*)(&s_uncompressed[ (fsize + 0x3) & ~0x3 ]) == WATER_MARK ); - } - nitroCompFree( s_compressed ); - free( s_uncompressed ); - } -} - - -static void TestLH8_template( MakeDataFunc makeDataFunc, u32 exFmt, u32 loop_cnt ) -{ - u32 i; - for ( i = 0; i < loop_cnt; ++i ) - { - u32 fsize = makeDataFunc( i ); - - u8* s_compressed = nitroCompMalloc( fsize ); - u8* s_uncompressed = (u8*)malloc( fsize + 4 ); - u32 sz; - - TestReport("size = %d\n", fsize); - sz = LHCompWrite( s_original, fsize, s_compressed ); - - if ( sz == 0 ) - { - TestReport( "compress LH fail size %d\n", fsize ); - } - else - { - TestReport("compress LH %d -> %d\n", fsize, sz ); - *(u32*)(&s_uncompressed[ fsize ]) = WATER_MARK; - LHCompRead( s_compressed, sz, s_uncompressed ); - ASSERT( compare(s_original, s_uncompressed, (int)fsize) ); - // WJ̃I[o[ANZX`FbN - ASSERT( *(u32*)(&s_uncompressed[ fsize ]) == WATER_MARK ); - } - - nitroCompFree( s_compressed ); - free( s_uncompressed ); - } -} - - -static void TestLRC8_template( MakeDataFunc makeDataFunc, u32 exFmt, u32 loop_cnt ) -{ - u32 i; - for ( i = 0; i < loop_cnt; ++i ) - { - u32 fsize = makeDataFunc( i ); - - u8* s_compressed = nitroCompMalloc( fsize ); - u8* s_uncompressed = (u8*)malloc( fsize + 4 ); - u32 sz; - - TestReport("size = %d\n", fsize); - sz = LRCCompWrite( s_original, fsize, s_compressed ); - - if ( sz == 0 ) - { - TestReport( "compress LRC fail size %d\n", fsize ); - } - else - { - TestReport("compress LRC %d -> %d\n", fsize, sz ); - *(u32*)(&s_uncompressed[ fsize ]) = WATER_MARK; - LRCCompRead( s_compressed, sz, s_uncompressed ); - ASSERT( compare(s_original, s_uncompressed, (int)fsize) ); - // WJ̃I[o[ANZX`FbN - ASSERT( *(u32*)(&s_uncompressed[ fsize ]) == WATER_MARK ); - } - - nitroCompFree( s_compressed ); - free( s_uncompressed ); - } -} - - -//-------------------------------------------------- -// eXgC -//-------------------------------------------------- - -static int TestInit( void ) -{ - time_t t; - s_original = (u8*)malloc( MAX_DATA_SIZE_EX + 4 ); - makeOriginalDataRand( (u32)time( &t ) ); - - return 0; -} - - -static void TestLZ8_normal( void ) -{ - TestLZ8_template( makeOriginalDataForLZHuff, 0, LOOP_CNT ); -} -static void TestLZ8_random( void ) -{ - TestLZ8_template( makeOriginalDataRand, 0, LOOP_CNT ); -} -static void TestLZ8_mono( void ) -{ - TestLZ8_template( makeOriginalDataMonoValue, 0, LOOP_CNT ); -} - -static void TestLZ8EX_normal( void ) -{ - TestLZ8_template( makeOriginalDataForLZHuff, 1, LOOP_CNT ); -} -static void TestLZ8EX_random( void ) -{ - TestLZ8_template( makeOriginalDataRand, 1, LOOP_CNT ); -} -static void TestLZ8EX_mono( void ) -{ - TestLZ8_template( makeOriginalDataMonoValue, 1, LOOP_CNT ); -} - - -static void TestRL8_normal( void ) -{ - TestRL8_template( makeOriginalDataForRL, LOOP_CNT ); -} -static void TestRL8_random( void ) -{ - TestRL8_template( makeOriginalDataRand, LOOP_CNT ); -} -static void TestRL8_mono( void ) -{ - TestRL8_template( makeOriginalDataMonoValue, LOOP_CNT ); -} - -static void TestHuffman8_normal( void ) -{ - TestHuffman_template( makeOriginalDataForLZHuff, 8, LOOP_CNT ); -} -static void TestHuffman8_random( void ) -{ - TestHuffman_template( makeOriginalDataRand, 8, LOOP_CNT ); -} -static void TestHuffman8_mono( void ) -{ - TestHuffman_template( makeOriginalDataMonoValue, 8, LOOP_CNT ); -} - -static void TestHuffman4_normal( void ) -{ - TestHuffman_template( makeOriginalDataForLZHuff, 4, LOOP_CNT ); -} -static void TestHuffman4_random( void ) -{ - TestHuffman_template( makeOriginalDataRand, 4, LOOP_CNT ); -} -static void TestHuffman4_mono( void ) -{ - TestHuffman_template( makeOriginalDataMonoValue, 4, LOOP_CNT ); -} - -static void TestLZ_ex(void) -{ - TestLZ8_template( makeOriginalDataForLZHuffEx, 0, LOOP_CNT_EX ); -} - -static void TestLZEX_ex(void) -{ - TestLZ8_template( makeOriginalDataForLZHuffEx, 1, LOOP_CNT_EX ); -} - -static void TestRL_ex(void) -{ - TestRL8_template( makeOriginalDataForRLEx, LOOP_CNT_EX ); -} - -static void TestHuffman8_ex(void) -{ - TestHuffman_template( makeOriginalDataForLZHuffEx, 8, LOOP_CNT_EX ); -} - -static void TestHuffman4_ex(void) -{ - TestHuffman_template( makeOriginalDataForLZHuffEx, 4, LOOP_CNT_EX ); -} - -static void TestLH_normal(void) -{ - TestLH8_template( makeOriginalDataForLZHuff, 0, LOOP_CNT ); -} - -static void TestLH_random(void) -{ - TestLH8_template( makeOriginalDataRand, 0, LOOP_CNT ); -} - -static void TestLH_mono(void) -{ - TestLH8_template( makeOriginalDataMonoValue, 0, LOOP_CNT ); -} - -static void TestLRC_normal(void) -{ - TestLRC8_template( makeOriginalDataForLZHuff, 0, LOOP_CNT ); -} - -static void TestLRC_random(void) -{ - TestLRC8_template( makeOriginalDataRand, 0, LOOP_CNT ); -} - -static void TestLRC_mono(void) -{ - TestLRC8_template( makeOriginalDataMonoValue, 0, LOOP_CNT ); -} - -#endif /* defined( _DEBUG ) */ - - - - - -/*---------------------------------------------------------------------------* - Name: ntcompress_test - - Description: eXgC - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ntcompress_test( void ) -{ -#if defined( _DEBUG ) - TestInit(); - - TestLH_normal(); - TestLH_random(); - TestLH_mono (); - TestLRC_normal(); - TestLRC_random(); - TestLRC_mono (); - - TestLZ8EX_normal(); - TestLZ8EX_random(); - TestLZ8EX_mono (); - TestLZ8_normal(); - TestLZ8_random(); - TestLZ8_mono (); - TestRL8_normal(); - TestRL8_random(); - TestRL8_mono (); - TestHuffman8_normal(); - TestHuffman8_random(); - TestHuffman8_mono (); - TestHuffman4_normal(); - TestHuffman4_random(); - TestHuffman4_mono (); - TestLZ_ex(); - TestLZEX_ex(); - TestRL_ex(); - TestHuffman8_ex(); - TestHuffman4_ex(); - -#endif -} - - - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.h b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.h deleted file mode 100644 index 1167a58d..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/ntcompress_test.h +++ /dev/null @@ -1,23 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: ntcompress_test.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#ifndef NTCOMPRESS_TEST_H__ -#define NTCOMPRESS_TEST_H__ - -void ntcompress_test( void ); - -#endif // NTCOMPRESS_TEST_H__ - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.c b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.c deleted file mode 100644 index 193baa9c..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.c +++ /dev/null @@ -1,539 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: rangeCoder.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "rangeCoder.h" - -typedef struct -{ - u32 freq[ 0x100 ]; - u32 low_cnt[ 0x100 ]; - u32 total; -} -RCCompressionInfo; - -// WR[_ԍ\ -typedef struct -{ - u32 low; - u32 range; - u32 code; // WĴݎgp - u8 carry; // k̂ݎgp - u32 carry_cnt; // k̂ݎgp -} -RCState; - - -#define MAX_RANGE 0x80000000 - -/*---------------------------------------------------------------------------* - Name: RCInitInfo_ - Description: - Arguments: info - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCInitInfo_( RCCompressionInfo* info, BOOL adaptive ) -{ - u32 i; - - if ( adaptive ) - // K^WR[_ - { - for ( i = 0; i < 0x100; i++ ) - { - info->freq[ i ] = 1; - info->low_cnt[ i ] = i; - } - info->total = 0x100; - } - else - // ÓIWR[_ - { - for ( i = 0; i < 0x100; i++ ) - { - info->freq[ i ] = 0; - info->low_cnt[ i ] = 0; - } - info->total = 0; - } -} - - -/*---------------------------------------------------------------------------* - Name: RCCount_ - Description: - Arguments: info - srcp - size - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCCount_( RCCompressionInfo* info, const u8* srcp, u32 size ) -{ - u32 srcCnt = 0; - u32 i; - - while ( srcCnt < size ) - { - info->freq[ srcp[ srcCnt ] ]++; - info->total++; - srcCnt++; - } - - // 0x10000֐K - #define NORMAL_FREQ 0x10000 - { - f32 rate = (f32)NORMAL_FREQ / info->total; - u32 max_i = 0; - u32 max_freq = 0; - - info->total = 0; - for ( i = 0; i < 0x100; i++ ) - { - u32 orig = info->freq[ i ]; - info->freq[ i ] = (u32)(rate * info->freq[ i ] + 0.5f); - if ( orig != 0 && info->freq[ i ] == 0 ) - { - info->freq[ i ] = 1; - } - - info->total += info->freq[ i ]; - if ( info->freq[ i ] >= max_freq ) - { - max_i = i; - max_freq = info->freq[ i ]; - } - } - if ( info->total > NORMAL_FREQ ) - { - info->freq[ max_i ] -= (info->total - NORMAL_FREQ); - } - else - { - info->freq[ max_i ] += (NORMAL_FREQ - info->total); - } - info->total = NORMAL_FREQ; - } - #undef NORMAL_FREQ - - info->low_cnt[ 0 ] = 0; - - for ( i = 1; i < 0x100; i++ ) - { - info->low_cnt[ i ] = info->low_cnt[ i - 1 ] + info->freq[ i - 1 ]; - } -} - - - -/*---------------------------------------------------------------------------* - Name: RCAAddCount_ - - Description: K^WR[_̕pxe[uXV܂B - - Arguments: info - val - - Returns: None. - *---------------------------------------------------------------------------*/ -static void -RCAAddCount_( RCCompressionInfo* info, u8 val ) -{ - u32 i; - - info->freq[ val ]++; - info->total++; - for ( i = val + 1; i < 0x100; i++ ) - { - info->low_cnt[ i ]++; - } - - // g[^őlzꍇɂ́Ač\B - if ( info->total >= 0x00010000 ) - { - if ( info->freq[ 0 ] > 1 ) - { - info->freq[ 0 ] = info->freq[ 0 ] / 2; - } - info->low_cnt[ 0 ] = 0; - info->total = info->freq[ 0 ]; - - for ( i = 1; i < 0x100; i++ ) - { - if ( info->freq[ i ] > 1 ) - { - info->freq[ i ] >>= 1; - } - info->low_cnt[ i ] = info->low_cnt[ i - 1 ] + info->freq[ i - 1 ]; - info->total += info->freq[ i ]; - } - } -} - - -/*---------------------------------------------------------------------------* - Name: RCCompWrite - - Description: WR[_̈k(e[u^) - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 -RCCompWrite_( const u8* srcp, u32 size, u8* dstp, BOOL adaptive ) -{ -#define MIN_RANGE 0x01000000 - static RCCompressionInfo sInfo; - u32 srcCnt = 0; - u32 dstCnt = 0; - u32 low, range; - u8 carry; - u32 carry_cnt; - u32 i; - - // [N̏ - RCInitInfo_( &sInfo, adaptive ); - - if ( ! adaptive ) - { - // opxvZ - RCCount_( &sInfo, srcp, size ); - } - - // JnRange0x80000000Ȃ̂ŁA񂢂Ȃ茅グ邱Ƃ͂Ȃ - low = 0; - range = MAX_RANGE; - carry = 0; - carry_cnt = 0; - - // wb_o - dstp[ dstCnt++ ] = LRC_CODE_HEADER; - if ( size > 0x1000000 ) - { - dstp[ dstCnt++ ] = 0; - dstp[ dstCnt++ ] = 0; - dstp[ dstCnt++ ] = 0; - } - dstp[ dstCnt++ ] = (u8)( size ); - dstp[ dstCnt++ ] = (u8)( size >> 8 ); - dstp[ dstCnt++ ] = (u8)( size >> 16 ); - if ( size > 0x1000000 ) - { - dstp[ dstCnt++ ] = (u8)( size >> 24 ); - } - - if ( ! adaptive ) - { - // pxe[ȕo(16bitgGfBA) - for ( i = 0; i < 0x100; i++ ) - { - dstp[ dstCnt++ ] = (u8)( sInfo.freq[ i ] ); - dstp[ dstCnt++ ] = (u8)( sInfo.freq[ i ] >> 8 ); - } - } - - // R[h̏o - while ( srcCnt < size ) - { - u8 val = srcp[ srcCnt++ ]; - u32 temp = range / sInfo.total; - u32 prevLow = low; - low = low + sInfo.low_cnt[ val ] * temp; - range = sInfo.freq[ val ] * temp; - - if ( adaptive ) - { - // opxe[uXV - RCAAddCount_( &sInfo, val ); - } - - // オ肪ꍇ̏ - if ( prevLow > low ) - { - // L[PJグ - ++carry; - // L[(L[JE^ - 1)0x00o͂܂B - if ( carry_cnt > 1 ) - { - dstp[ dstCnt++ ] = carry; - --carry_cnt; - carry = 0x00; - } - while ( carry_cnt > 1 ) - { - dstp[ dstCnt++ ] = 0x00; - --carry_cnt; - } - } - - // Rangȅ1oCgɂȂ猅グ - while ( range < MIN_RANGE ) - { - u8 candidate = (u8)( low >> 24 ); - - // ̃L[0xFF̏ꍇ͍XɌグ蓾̂carryo͂carry_cnt₷ - if ( candidate == 0xFF ) - { - ++carry_cnt; - } - else - // ̃L[0xFFł͂Ȃꍇcarryo͂ - { - // carry(carry_cnt - 1)0xFFo͂ - if ( carry_cnt > 0 ) - { - dstp[ dstCnt++ ] = carry; - --carry_cnt; - } - while ( carry_cnt > 0 ) - { - dstp[ dstCnt++ ] = 0xFF; - --carry_cnt; - } - // Vcarryɒu - carry = candidate; - carry_cnt = 1; - } - low <<= 8; - range <<= 8; - } - } - - if ( carry_cnt > 0 ) - { - dstp[ dstCnt++ ] = carry; - --carry_cnt; - } - while ( carry_cnt > 0 ) - { - dstp[ dstCnt++ ] = 0xFF; - --carry_cnt; - } - dstp[ dstCnt++ ] = (u8)( (low >> 24) & 0xFF ); - dstp[ dstCnt++ ] = (u8)( (low >> 16) & 0xFF ); - dstp[ dstCnt++ ] = (u8)( (low >> 8 ) & 0xFF ); - dstp[ dstCnt++ ] = (u8)( (low >> 0 ) & 0xFF ); - - return dstCnt; -#undef MIN_RANGE -} - - -/*---------------------------------------------------------------------------* - Name: RCACompWrite - - Description: WR[_̈k(K^) - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 -RCCompWrite( const u8* srcp, u32 size, u8* dstp ) -{ - return RCCompWrite_( srcp, size, dstp, FALSE ); -} - -s32 -RCACompWrite( const u8* srcp, u32 size, u8* dstp ) -{ - return RCCompWrite_( srcp, size, dstp, TRUE ); -} - -static u8 -SearchRC_( RCCompressionInfo* info, u32 code, u32 range, u32 low ) -{ -#define TABLE_SIZE 0x100 - u32 codeVal = code - low; - u32 i; - u32 temp = range / info->total; - u32 tempVal = codeVal / temp; - -#if 0 - // TODO: Ƃ肠`TA񕪒Tɂׂ - for ( i = 0; i < TABLE_SIZE - 1; i++ ) - { - if ( info->low_cnt[ i + 1 ] > tempVal ) - { - while ( info->freq[ i ] == 0 ) - { - --i; - } - return (u8)i; - } - } - return TABLE_SIZE - 1; -#else - // 񕪒T - u32 left = 0; - u32 right = TABLE_SIZE - 1; - - while ( left < right ) - { - i = (left + right) / 2; - - if ( info->low_cnt[ i ] > tempVal ) - { - right = i; - } - else - { - left = i + 1; - } - } - - i = left; - while ( info->low_cnt[ i ] > tempVal ) - { - --i; - } - return (u8)i; -#endif -} - -/*---------------------------------------------------------------------------* - Name: RCCompRead - - Description: WR[_WJ(e[u^) - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 -RCCompRead_( const u8* srcp, u32 srcSize, u8* dstp, BOOL adaptive ) -{ -#define MIN_RANGE 0x01000000 - static RCCompressionInfo sInfo; - - u32 dstSize = *(u32*)srcp >> 8; - u32 dstCnt = 0; - u32 srcCnt = 0; - u32 i; - u32 code, range, low; - - if ( srcSize < 4 ) - { - return -1; - } - - srcCnt = 4; - if ( dstSize == 0 ) - { - dstSize = *(u32*)&srcp[ srcCnt ]; - srcCnt += 4; - if ( srcSize < 8 ) - { - return -1; - } - } - - if ( srcSize < sizeof(u16) * 0x100 + srcCnt ) - { - return -1; - } - - // [N̏ - if ( adaptive ) - { - RCInitInfo_( &sInfo, TRUE ); - } - else - { - sInfo.total = 0; - for ( i = 0; i < 0x100; i++ ) - { - sInfo.freq[ i ] = *(u16*)&srcp[ srcCnt ]; - srcCnt += 2; - sInfo.total += sInfo.freq[ i ]; - } - sInfo.low_cnt[ 0 ] = 0; - for ( i = 1; i < 0x100; i++ ) - { - sInfo.low_cnt[ i ] = sInfo.low_cnt[ i - 1 ] + sInfo.freq[ i - 1 ]; - } - } - - code = (u32)((srcp[ srcCnt ] << 24) | (srcp[ srcCnt + 1 ] << 16) | - (srcp[ srcCnt + 2 ] << 8) | (srcp[ srcCnt + 3 ])); - range = MAX_RANGE; - low = 0; - srcCnt += 4; - - while ( dstCnt < dstSize ) - { - u8 val = SearchRC_( &sInfo, code, range, low ); - - dstp[ dstCnt++ ] = val; - - { - u32 tmp; - tmp = range / sInfo.total; - low = low + sInfo.low_cnt[ val ] * tmp; - range = sInfo.freq[ val ] * tmp; - } - - if ( adaptive ) - { - // opxe[uXV - RCAAddCount_( &sInfo, val ); - } - - while ( range < MIN_RANGE ) - { - code <<= 8; - code += srcp[ srcCnt++ ]; - range <<= 8; - low <<= 8; - } - } - - return dstSize; -#undef MIN_RANGE -} - - -/*---------------------------------------------------------------------------* - Name: RCACompRead - - Description: WR[_WJ(K^) - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 -RCCompRead( const u8* srcp, u32 srcSize, u8* dstp ) -{ - return RCCompRead_( srcp, srcSize, dstp, FALSE ); -} - -s32 -RCACompRead( const u8* srcp, u32 srcSize, u8* dstp ) -{ - return RCCompRead_( srcp, srcSize, dstp, TRUE ); -} - diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.h b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.h deleted file mode 100644 index 53808e5a..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/rangeCoder.h +++ /dev/null @@ -1,46 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: rangeCoder.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include "types.h" - -#ifndef __NTCOMPRESS_RANGE_CODER_H__ -#define __NTCOMPRESS_RANGE_CODER_H__ - -/*---------------------------------------------------------------------------* - Name: RCCompWrite - - Description: WR[_̈k - - Arguments: srcp - size - dstp - - Returns: - *---------------------------------------------------------------------------*/ -s32 -RCCompWrite( const u8* srcp, u32 size, u8* dstp ); - -s32 -RCCompRead( const u8* srcp, u32 srcSize, u8* dstp ); - -s32 -RCACompWrite( const u8* srcp, u32 size, u8* dstp ); - -s32 -RCACompRead( const u8* srcp, u32 srcSize, u8* dstp ); - -#endif // __NTCOMPRESS_RANGE_CODER_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/types.h b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/types.h deleted file mode 100644 index 7d76786b..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/src/types.h +++ /dev/null @@ -1,57 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NinTendo Compress tool - File: types.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __NTCOMPRESS_TYPES_H__ -#define __NTCOMPRESS_TYPES_H__ - -//=========================================================================================== -// ^` -//=========================================================================================== -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned long u32; -typedef signed char s8; -typedef signed short s16; -typedef signed long s32; -typedef float f32; -typedef unsigned long BOOL; -#define FALSE 0 -#define TRUE 1 - -#define DIFF_CODE_HEADER (0x80) -#define LZ_CODE_HEADER (0x10) -#define HUFF_CODE_HEADER (0x20) -#define RL_CODE_HEADER (0x30) -#define LH_CODE_HEADER (0x40) -#define LRC_CODE_HEADER (0x50) -#define CODE_HEADER_MASK (0xF0) - - -#if defined( __GNUC__ ) - typedef unsigned long long int u64; - typedef signed long long int s64; - #define INLINE inline - #define ASSERT(x) (void)0 -#else - #include - #define INLINE __inline - #define ASSERT assert - typedef unsigned __int64 u64; - typedef signed __int64 s64; -#endif - -#endif // __NTCOMPRESS_TYPES_H__ diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.sln b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.sln deleted file mode 100644 index 541afd75..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 8.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ntcompress", "ntcompress.vcproj", "{FA042C1E-4CB1-4B8A-87A6-B46B4222605E}" - ProjectSection(ProjectDependencies) = postProject - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - Debug = Debug - Release = Release - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {FA042C1E-4CB1-4B8A-87A6-B46B4222605E}.Debug.ActiveCfg = Debug|Win32 - {FA042C1E-4CB1-4B8A-87A6-B46B4222605E}.Debug.Build.0 = Debug|Win32 - {FA042C1E-4CB1-4B8A-87A6-B46B4222605E}.Release.ActiveCfg = Release|Win32 - {FA042C1E-4CB1-4B8A-87A6-B46B4222605E}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.vcproj b/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.vcproj deleted file mode 100644 index 050e7b60..00000000 --- a/build/tests/compressSharedFontLoad/compSharedFont/ntrcomp/vc++/ntcompress.vcproj +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/Makefile b/build/tests/compressSharedFontLoad/testLoadSpeed/Makefile deleted file mode 100644 index 4f394d4f..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/Makefile +++ /dev/null @@ -1,54 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - demos - FS - overlay -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - - -ifeq ($(TEST_TWLSDK_REBUILD),TRUE) -export TWLSDK_SYSMENU_PRIVATE = TRUE -SUBDIRS = copy_to_sdk \ - $(ROOT) -endif # ifeq ($(TEST_TWLSDK_REBUILD),TRUE) - -#---------------------------------------------------------------------------- - -TARGET_BIN = main.srl - -SRCS = main.c loadSharedFont.c - -LLIBRARIES += libsharedfont$(TWL_LIBSUFFIX).a - -ROM_SPEC = ROM-TS_nand.rsf - -include $(TWLSDK_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - -MAKEROM_ARM7_BASE = $(TWL_COMPONENTSDIR)/armadillo/$(TWL_BUILDTYPE_ARM7)/armadillo -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#---------------------------------------------------------------------------- - -do-build: oslib $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -oslib: - touch $(ROOT)/build/libraries/os/ARM9.TWL/src/os_sharedFont.c - -#===== End of Makefile ===== diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/ROM-TS_nand.rsf b/build/tests/compressSharedFontLoad/testLoadSpeed/ROM-TS_nand.rsf deleted file mode 100644 index 8cb68fb1..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/ROM-TS_nand.rsf +++ /dev/null @@ -1,277 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # -################################################################ - - WramMapping MAP_TS_SCR - -################################################################ - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [0 - 255] - # - #AgreeEULAVersion 0 - - ### - #### END -} - -AppendProperty -{ - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode ABCJ - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Use Shared2 file index: [0-65535] - #Shared2FileIndex 0 - - # - # Use Shared2 file size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - #Shared2FileSize 0K - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization [0 - 31, ALWAYS, FREE] - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / ALWAYS / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/Makefile b/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/Makefile deleted file mode 100644 index a859f4e3..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile - -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: -# $Rev: -# $Author: -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ORG_H = sharedFont.h -ORG_C = os_sharedFont.c - -CP_H_DIR = $(TWLSDK_ROOT)/include/twl/os/common -CP_C_DIR = $(TWLSDK_ROOT)/build/libraries/os/ARM9.TWL/src/ - -#---------------------------------------------------------------------------- - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -do-build: - cp $(ORG_H) $(CP_H_DIR) - cp $(ORG_C) $(CP_C_DIR) - -#===== End of Makefile ===== diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/os_sharedFont.c b/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/os_sharedFont.c deleted file mode 100644 index d6f94dd1..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/os_sharedFont.c +++ /dev/null @@ -1,352 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - OS - File: os_sharedFont.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include - -#ifdef USE_FONT_WRAM_LOAD -#include "fs_wram.h" -#endif // USE_FONT_WRAM_LOAD - -// compile switch-------------------------------------------------------------- -//#define DISABLE_HASH_CHECK - -// extern data----------------------------------------------------------------- -// define data----------------------------------------------------------------- -#ifdef USE_FONT_WRAM_LOAD -#define THREAD_PRIO_FS_FRAM 3 -#define WRAM_TOP_SLOT_FOR_FS 4 -#define WRAM_SIZE_FOR_FS MI_WRAM_SIZE_96KB -#endif // USE_FONT_WRAM_LOAD - -#define OS_SHARED_FONT_TABLE_PATH "nand:/" -#define OS_SHARED_FONT_FILE_NAME_LENGTH 0x20 -#define OS_SHARED_FONT_SIGN_SIZE 0x80 - -// LtHge[uwb_ -typedef struct OSSharedFontHeader { - u32 timestamp; - u16 fontNum; - u8 pad[ 6 ]; - u8 digest[ SVC_SHA1_DIGEST_SIZE ]; -}OSSharedFontHeader; - -// LtHge[u -typedef struct OSSharedFontEntry { - u8 fileName[ OS_SHARED_FONT_FILE_NAME_LENGTH ]; -// u8 pad[ 4 ]; - u32 compLength; // kTCY - u32 offset; - u32 origLength; // ̃TCY - u8 digest[ SVC_SHA1_DIGEST_SIZE ]; -}OSSharedFontEntry; - -// LtHgCu[N -typedef struct OSSharedFontWork { - OSSharedFontHeader header; - OSSharedFontEntry *pInfoTable; -}OSSharedFontWork; - -#ifdef USE_FONT_WRAM_LOAD -// SHA1R[obN -typedef struct CalcSHA1CallbackArg -{ - SVCSHA1Context ctx; - u32 hash_length; -} CalcSHA1CallbackArg; -#endif // USE_FONT_WRAM_LOAD - -// function's prototype------------------------------------------------------- -#ifdef USE_FONT_WRAM_LOAD -static void CalcSHA1Callback(const void* addr, const void* orig_addr, u32 len, MIWramPos wram, s32 slot, void* arg); -#endif // USE_FONT_WRAM_LOAD - -// global variable------------------------------------------------------------- -// static variable------------------------------------------------------------- -static OSSharedFontWork s_work; -static BOOL s_isInitialized = FALSE; - -// const data------------------------------------------------------------------ -// LtHgmFpJ -static const u8 s_sharedFontPubKey[] = { - 0x9f, 0x80, 0xbc, 0x5f, 0xb6, 0xb6, 0x1d, 0x2a, 0x46, 0x02, 0x52, 0x64, 0xb2, 0xa3, 0x86, 0xce, - 0xe6, 0x54, 0xd3, 0xa9, 0x70, 0x5b, 0xe3, 0xc2, 0x10, 0xa9, 0xb5, 0x2f, 0x38, 0xc5, 0x51, 0xfb, - 0xb5, 0xd1, 0x80, 0xfd, 0xff, 0x20, 0x65, 0xc1, 0x28, 0x4d, 0x56, 0xbe, 0xfb, 0xbd, 0x3f, 0xe4, - 0xba, 0xf7, 0x9c, 0x3a, 0x33, 0x74, 0x74, 0x9d, 0xdb, 0xdd, 0x9e, 0x86, 0x05, 0x2c, 0xad, 0xfc, - 0x93, 0xfa, 0xfb, 0x08, 0xea, 0x71, 0x18, 0x36, 0xc5, 0xdc, 0x4c, 0x06, 0x34, 0x57, 0xa7, 0x8f, - 0x4e, 0x82, 0xf7, 0xb3, 0xe2, 0x9c, 0xe4, 0x72, 0xe3, 0xdc, 0x60, 0xaf, 0xcc, 0x18, 0xe2, 0xd4, - 0xef, 0xd2, 0x76, 0x47, 0x31, 0xe6, 0x14, 0x0e, 0x1d, 0x26, 0xb5, 0x85, 0x97, 0xbc, 0xc6, 0xb6, - 0xd8, 0xe7, 0x69, 0x2d, 0x2c, 0x26, 0xfb, 0x5f, 0x70, 0x9e, 0x19, 0x9c, 0x6b, 0x02, 0x6d, 0x97 -}; - -// LtHg -BOOL OS_InitSharedFont( void ) -{ - FSFile file[1]; - u8 signature[ OS_SHARED_FONT_SIGN_SIZE ]; - - if( s_isInitialized ) { - return TRUE; - } - - MI_CpuClear32( &s_work, sizeof(s_work) ); - - if( !FS_OpenFileEx( file, OS_SHARED_FONT_TABLE_PATH, FS_FILEMODE_R ) ) { - return FALSE; - } - - // [h - if( FS_ReadFile( file, signature, OS_SHARED_FONT_SIGN_SIZE ) != OS_SHARED_FONT_SIGN_SIZE ){ - goto ERROR; - } - - // wb_[h - if( FS_ReadFile( file, &s_work.header, sizeof(OSSharedFontHeader) ) != sizeof(OSSharedFontHeader) ){ - goto ERROR; - } - - FS_CloseFile( file ); - -#ifndef DISABLE_HASH_CHECK - // wb_`FbN - { - u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ]; - u8 sign_digest[ SVC_SHA1_DIGEST_SIZE ]; - static u32 heap[ 4096 / sizeof(u32) ]; - - SVCSignHeapContext acmemoryPool; - SVC_CalcSHA1( calc_digest, &s_work.header, sizeof(OSSharedFontHeader) ); - SVC_InitSignHeap( &acmemoryPool, heap, 4096 ); - if( !SVC_DecryptSign( &acmemoryPool, sign_digest, signature, s_sharedFontPubKey ) ) { - return FALSE; - } - if( !SVC_CompareSHA1( calc_digest, sign_digest ) ) { - return FALSE; - } - } -#endif - -#ifdef USE_FONT_WRAM_LOAD - // WRAMpRead֐̏AWRAMČ㔼Ă - FS_InitWramTransfer( THREAD_PRIO_FS_FRAM ); - MI_FreeWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM7 ); - MI_FreeWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9 ); - MI_FreeWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_DSP ); - MI_CancelWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM7 ); - MI_CancelWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9 ); - MI_CancelWramSlot_C( WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_DSP ); -#endif // USE_FONT_WRAM_LOAD - - s_isInitialized = TRUE; - return TRUE; - -ERROR: - FS_CloseFile( file ); - return FALSE; -} - - -// LtHg@e[uTCY擾 -int OS_GetSharedFontTableSize( void ) -{ - if( s_isInitialized ) { - return (int)( s_work.header.fontNum * sizeof(OSSharedFontEntry) ); - }else { - return -1; - } -} - - -// LtHg@e[u[h -BOOL OS_LoadSharedFontTable( void *pBuffer ) -{ - FSFile file[1]; - u32 tableLen = sizeof(OSSharedFontEntry) * s_work.header.fontNum; - - if( ( !s_isInitialized ) || - ( s_work.header.fontNum == 0 ) || - ( pBuffer == NULL ) || - ( s_work.pInfoTable ) ) { - return FALSE; - } - - // tHge[u[h - if( !FS_OpenFileEx( file, OS_SHARED_FONT_TABLE_PATH, FS_FILEMODE_R ) ) { - return FALSE; - } - if( !FS_SeekFile( file, OS_SHARED_FONT_SIGN_SIZE + sizeof(OSSharedFontHeader), FS_SEEK_SET ) ){ - goto ERROR; - } - if( FS_ReadFile( file, pBuffer, (int)tableLen ) != tableLen ){ - goto ERROR; - } - FS_CloseFile( file ); - -#ifndef DISABLE_HASH_CHECK - // tHge[u@nbV`FbN - { - u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ]; - SVC_CalcSHA1( calc_digest, pBuffer, tableLen ); - if( !SVC_CompareSHA1( calc_digest, s_work.header.digest ) ) { - return FALSE; - } - } -#endif - - s_work.pInfoTable = pBuffer; - return TRUE; - -ERROR: - FS_CloseFile( file ); - return FALSE; -} - - -// LtHg@tHgTCY擾 -int OS_GetSharedFontSize( OSSharedFontIndex index ) -{ - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index < 0 ) || - ( index >= OS_SHARED_FONT_MAX ) ) { - return -1; - } - - return (int)s_work.pInfoTable[ index ].origLength; -} - - -// LtHg ktHgTCY擾 -int OS_GetSharedFontCompressedSize( OSSharedFontIndex index ) -{ - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index < 0 ) || - ( index >= OS_SHARED_FONT_MAX ) ) { - return -1; - } - - return (int)s_work.pInfoTable[ index ].compLength; -} - - -// LtHg@tHgl[擾 -const u8 *OS_GetSharedFontName( OSSharedFontIndex index ) -{ - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index < 0 ) || - ( index >= OS_SHARED_FONT_MAX ) ) { - return NULL; - } - - return s_work.pInfoTable[ index ].fileName; -} - - -// LtHg@^CX^v擾 -u32 OS_GetSharedFontTimestamp( void ) -{ - if( ( s_isInitialized == NULL ) ) { - return 0; - } - return s_work.header.timestamp; -} - - -// LtHg@tHg[h -BOOL OS_LoadSharedFont( OSSharedFontIndex index, void *pBuffer ) -{ - FSFile file[1]; - OSSharedFontEntry *pInfo = &s_work.pInfoTable[ index ]; - u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ]; - - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index < 0 ) || - ( index >= OS_SHARED_FONT_MAX ) ) { - return FALSE; - } - - // tHg@[h - if( !FS_OpenFileEx( file, OS_SHARED_FONT_TABLE_PATH, FS_FILEMODE_R ) ) { - return FALSE; - } - if( !FS_SeekFile( file, (int)pInfo->offset, FS_SEEK_SET ) ){ - goto ERROR; - } -#ifdef USE_FONT_WRAM_LOAD - { - CalcSHA1CallbackArg arg; - SVC_SHA1Init( &arg.ctx ); - arg.hash_length = pInfo->compLength; - if( !FS_ReadFileViaWram( file, pBuffer, (s32)MATH_ROUNDUP( pInfo->compLength, 0x20 ), MI_WRAM_C, - WRAM_TOP_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, -#ifndef DISABLE_HASH_CHECK - CalcSHA1Callback, -#else - NULL, -#endif // DISABLE_HASH_CHECK - &arg ) ) { - goto ERROR; - } - SVC_SHA1GetHash( &arg.ctx, &calc_digest ); - } -#else - if( FS_ReadFile( file, pBuffer, (int)pInfo->compLength ) != pInfo->compLength ){ - goto ERROR; - } -#ifndef DISABLE_HASH_CHECK - SVC_CalcSHA1( calc_digest, pBuffer, pInfo->compLength ); -#endif // DISABLE_HASH_CHECK -#endif // USE_FONT_WRAM_LOAD - - FS_CloseFile( file ); - -#ifndef DISABLE_HASH_CHECK - // tHg@nbV`FbN - if( !SVC_CompareSHA1( calc_digest, pInfo->digest ) ) { - return FALSE; - } -#endif // DISABLE_HASH_CHECK - - return TRUE; - -ERROR: - FS_CloseFile( file ); - return FALSE; -} - - -#ifdef USE_FONT_WRAM_LOAD -// FS-WRAM]SHA1vZR[obN -static void CalcSHA1Callback(const void* addr, const void* orig_addr, u32 len, MIWramPos wram, s32 slot, void* arg) -{ -#pragma unused(orig_addr) -#pragma unused(wram) -#pragma unused(slot) - CalcSHA1CallbackArg *cba = (CalcSHA1CallbackArg *)arg; - u32 calc_len = ( cba->hash_length < len ? cba->hash_length : len ); - if( calc_len == 0 ) return; - cba->hash_length -= calc_len; - SVC_SHA1Update( &cba->ctx, addr, calc_len ); -} -#endif // USE_FONT_WRAM_LOAD diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/sharedFont.h b/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/sharedFont.h deleted file mode 100644 index 98447dda..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/copy_to_sdk/sharedFont.h +++ /dev/null @@ -1,69 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - OS - include - File: sharedFont.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - - *---------------------------------------------------------------------------*/ - -#ifndef TWL_OS_SHARED_FONT_H_ -#define TWL_OS_SHARED_FONT_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SDK_ARM9 - -// LtHgCfbNX -typedef enum OSSharedFontIndex { - OS_SHARED_FONT_WW_L = 0, - OS_SHARED_FONT_WW_M = 1, - OS_SHARED_FONT_WW_S = 2, - OS_SHARED_FONT_MAX = 3 -}OSSharedFontIndex; - - -// LtHg -BOOL OS_InitSharedFont( void ); - -// LtHg@e[uTCY擾 -int OS_GetSharedFontTableSize( void ); - -// LtHg@e[u[h -BOOL OS_LoadSharedFontTable( void *pBuffer ); - -// LtHg@tHgTCY擾 -int OS_GetSharedFontSize( OSSharedFontIndex index ); - -// LtHg kTCY擾 -int OS_GetSharedFontCompressedSize( OSSharedFontIndex index ); - -// LtHg@tHgl[擾 -const u8 *OS_GetSharedFontName( OSSharedFontIndex index ); - -// LtHg@^CX^v擾 -u32 OS_GetSharedFontTimestamp( void ); - -// LtHg@tHg[h -BOOL OS_LoadSharedFont( OSSharedFontIndex index, void *pBuffer ); - -#endif // SDK_ARM9 - -#ifdef __cplusplus -} -#endif - -#endif // TWL_OS_SHARED_FONT_H_ diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.c b/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.c deleted file mode 100644 index 4fbb98a5..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.c +++ /dev/null @@ -1,198 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: loadSharedFont.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include "loadSharedFont.h" - -// ktHg𓀂Ƃ1ɂ -#define UNCOMPRESS_FONTS 1 - -// Ok̂Ƃɂ1ɂ -#define FORWARD_COMPRESS 0 - -// extern data----------------------------------------------------------------- - -// function's prototype------------------------------------------------------- -BOOL g_isSucceededLoad[ OS_SHARED_FONT_MAX ]; - -// static variable------------------------------------------------------------- -static u8 *s_pFontBuffer[ OS_SHARED_FONT_MAX ]; // ǂݍ݂̓eXgȂ̂Ń[hstaticϐɂĂB -static BOOL s_isStarted = FALSE; -static u8 *s_pCompressedBuffer[ OS_SHARED_FONT_MAX ]; // kpTempBuffer - -// const data------------------------------------------------------------------ - - -// ============================================================================ -// LtHg[h -// ============================================================================ -void LoadSharedFont( STicks *pTicks ) -{ - u8 *pBuffer; - int size; - OSSharedFontIndex i; - OSTick starttick; - - pTicks->all = 0; - pTicks->comp = 0; - - if( s_isStarted ) return; - - starttick = OS_GetTick(); - - // tHg[h - if( !OS_InitSharedFont() ) { - OS_TPrintf( "OS_InitSharedFont failed.\n" ); - return; - } - size = OS_GetSharedFontTableSize(); - if( size < 0 ) { - OS_TPrintf( "OS_GetSharedTableSize failed.\n" ); - return; - } - - pBuffer = OS_Alloc( (u32)size ); - if( pBuffer == NULL ) { - OS_TPrintf( "malloc failed.\n" ); - return; - } - if( !OS_LoadSharedFontTable( pBuffer ) ) { - OS_TPrintf( "OS_LoadSharedTable failed.\n" ); - return; - } - - for( i = OS_SHARED_FONT_WW_L; i < OS_SHARED_FONT_MAX; i++ ) - { - int origsize; -#if (UNCOMPRESS_FONTS==1) - int compsize; - int comperr; - OSTick comptick; -#endif - - OS_TPrintf( "%s read.\n", OS_GetSharedFontName( i ) ); - - // tHǧ(𓀌)TCY - origsize = OS_GetSharedFontSize( i ); - if( origsize < 0 ) - { - OS_TPrintf( " get font size failed.\n" ); - } - origsize = MATH_ROUNDUP( origsize, 32 ); // FS̃LbVȂ̂ŁAƂ肠ACgƂĂB - OS_TPrintf( " original size = %d\n", origsize ); - -#if (UNCOMPRESS_FONTS==1) - compsize = OS_GetSharedFontCompressedSize( i ); - if( compsize < 0 ) - { - OS_TPrintf( " get compressed font size failed.\n" ); - } - OS_TPrintf( " compressed size = %d\n", compsize ); -#endif - - s_pFontBuffer[ i ] = OS_Alloc( (u32)origsize ); // ̃tHgTCYŃobt@m - if( s_pFontBuffer[ i ] == NULL ) - { - OS_TPrintf( " malloc failed.\n" ); - } - - // k̃tHg[h -#if (FORWARD_COMPRESS==1) - s_pCompressedBuffer[i] = OS_Alloc( (u32)MATH_ROUNDUP( compsize, 32 ) ); - if( OS_LoadSharedFont( i, s_pCompressedBuffer[ i ] ) ) -#else - if( OS_LoadSharedFont( i, s_pFontBuffer[ i ] ) ) -#endif - { - OS_TPrintf( " load succeeded.\n" ); - g_isSucceededLoad[ i ] = TRUE; - } - else - { - OS_TPrintf( " load failed.\n" ); - g_isSucceededLoad[ i ] = FALSE; - } - - // -#if (UNCOMPRESS_FONTS==1) - comptick = OS_GetTick(); - OS_TPrintf( " uncompress font\n" ); -#if (FORWARD_COMPRESS==1) - //comperr = MI_SecureUncompressLZ( s_pCompressedBuffer[i], (u32)compsize, s_pFontBuffer[i], (u32)origsize ); - //comperr = MI_SecureUncompressHuffman( s_pCompressedBuffer[i], (u32)compsize, s_pFontBuffer[i], (u32)origsize ); - MI_UncompressHuffman( s_pCompressedBuffer[i], s_pFontBuffer[i] ); - comperr = MI_ERR_SUCCESS; -#else - comperr = MI_SecureUncompressBLZ( s_pFontBuffer[i], (u32)compsize, (u32)origsize ); -#endif - if( MI_ERR_SUCCESS == comperr ) - { - OS_TPrintf( " uncompression succeeded\n" ); - } - else - { - OS_TPrintf( " uncompression failed %d\n", comperr ); - } - pTicks->comp += (OS_GetTick() - comptick); // 𓀂ɂ -#endif - } - - // S̏ɂ - pTicks->all = OS_GetTick() - starttick; - - s_isStarted = TRUE; -} - -void WriteFontIntoSD( void ) -{ - u8 *pFont = NULL; - int size; - OSSharedFontIndex i; - char str[100]; - FSFile fp[1]; - - FS_InitFile( fp ); - - for( i = OS_SHARED_FONT_WW_L; i < OS_SHARED_FONT_MAX; i++ ) - { - pFont = s_pFontBuffer[i]; - size = OS_GetSharedFontSize(i); - if( pFont != NULL) - { - STD_TSPrintf( str, "sdmc:/%s.uncomp", OS_GetSharedFontName(i) ); - FS_DeleteFile( str ); - if( !FS_CreateFile( str, FS_PERMIT_R|FS_PERMIT_W ) ) - { - OS_TPrintf( "sd create failed %d\n", FS_GetArchiveResultCode(str) ); - } - if( FS_OpenFileEx( fp, str, FS_FILEMODE_W ) ) - { - FS_WriteFile( fp, pFont, size ); - FS_CloseFile( fp ); - OS_TPrintf( "%s is written\n", str ); - } - else - { - OS_TPrintf( "sd write failed %d\n", FS_GetArchiveResultCode(str) ); - } - } - } -} - - - - diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.h b/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.h deleted file mode 100644 index 4095ee9c..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/src/loadSharedFont.h +++ /dev/null @@ -1,46 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: loadSharedFont.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __LOAD_SHARED_FONT_H__ -#define __LOAD_SHARED_FONT_H__ - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// define data------------------------------------------------------- -typedef struct _STicks -{ - OSTick all; // S̎ - OSTick comp; // 𓀂̎ -} STicks; - -// global variables-------------------------------------------------- -extern BOOL g_isSucceededLoad[ OS_SHARED_FONT_MAX ]; - -// function---------------------------------------------------------- -void LoadSharedFont( STicks *pTicks ); -void WriteFontIntoSD( void ); - -#ifdef __cplusplus -} -#endif - -#endif // __LOAD_SHARED_FONT_H__ diff --git a/build/tests/compressSharedFontLoad/testLoadSpeed/src/main.c b/build/tests/compressSharedFontLoad/testLoadSpeed/src/main.c deleted file mode 100644 index ce1781e3..00000000 --- a/build/tests/compressSharedFontLoad/testLoadSpeed/src/main.c +++ /dev/null @@ -1,101 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos - FS - overlay - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - - -#include -#include - -#include "DEMO.h" -#include "loadSharedFont.h" - -/*---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: NitroMain - - Description: AvP[VCGg - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void NitroMain(void) -{ - STicks ticks; - - OS_Init(); - OS_InitTick(); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - - { - OSHeapHandle hh; - void *tmp; - tmp = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tmp); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - OS_TPanic("ARM9: Fail to create heap...\n"); - } - (void)OS_SetCurrentHeap(OS_ARENA_MAIN, hh); - } - - DEMOInitCommon(); - DEMOInitVRAM(); - DEMOInitDisplayBitmap(); - DEMOHookConsole(); - - DEMOSetBitmapTextColor(GX_RGBA(31, 31, 0, 1)); - DEMOSetBitmapGroundColor(DEMO_RGB_CLEAR); - DEMOStartDisplay(); - - FS_Init(FS_DMA_NOT_USE); - - OS_TPrintf("--------------------------------\n" - "Shared Font sample.\n"); - - LoadSharedFont( &ticks ); - - // ʕ\ - { - int i; - int ox = 10; - int oy = 60; - - DEMOFillRect(0, 0, GX_LCD_SIZE_X, GX_LCD_SIZE_Y, DEMO_RGB_CLEAR); - DEMOSetBitmapTextColor(GX_RGBA(0, 31, 0, 1)); - DEMOSetBitmapTextColor(GX_RGBA(31, 31, 31, 1)); - DEMODrawFrame(ox, oy, 240, 10 + OS_SHARED_FONT_MAX * 10 + 20, GX_RGBA( 0, 31, 0, 1)); - for (i = 0; i < OS_SHARED_FONT_MAX; ++i) - { - DEMODrawText(ox + 10, oy + 5 + i * 10, "%s load %s", - OS_GetSharedFontName( (OSSharedFontIndex)i ), g_isSucceededLoad[ i ] ? "suceeded" : "failed"); - } - DEMODrawText(ox + 10, oy + 5 + OS_SHARED_FONT_MAX * 10, "all time %d msec", OS_TicksToMilliSeconds(ticks.all) ); - DEMODrawText(ox + 10, oy + 5 + OS_SHARED_FONT_MAX * 10 + 10, "comp time %d msec", OS_TicksToMilliSeconds(ticks.comp) ); - } - DEMO_DrawFlip(); - - WriteFontIntoSD(); - OS_TPrintf( "end\n" ); - OS_WaitVBlankIntr(); - - OS_Terminate(); -} - - diff --git a/build/tests/yuv2rgb/Makefile b/build/tests/yuv2rgb/Makefile deleted file mode 100644 index 3bf6d022..00000000 --- a/build/tests/yuv2rgb/Makefile +++ /dev/null @@ -1,121 +0,0 @@ -#! make -f -#--------------------------------------------------------------------------- -# Project: TwlSDK - YUV2RGB -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev:$ -# $Author:$ -#--------------------------------------------------------------------------- - -ifdef TWL_IPL_RED_ROOT -#R|[lg؂ւ܂B -#RgAEgracoonALjackalg܂B -#̍sύXmake cleanĂB -TWL_IPL_USE_RED_IPL := TRUE -endif - -ifdef TWL_IPL_USE_RED_IPL -TARGET_FIRM = SYSTEMMENU -REBOOT_LIB = libreboot$(TWL_LIBSUFFIX).a -LDEPENDS_NEF += $(REBOOT_LIB) -ADDRESS_DTCM = 0x0e000000 -DEFAULT_COMP_ARM7 = jackal -MAKEROM_FLAGS += -F -LCFILE_SPEC = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher/ARM9/ARM9-TS.lsf -LCFILE_TEMPLATE = $(SYSMENU_ROOT)/build/systemMenu_RED/Launcher/ARM9/ARM9-TS.lcf.template -MACRO_FLAGS += -DTWL_IPL_USE_RED_IPL -MAKELCF_FLAGS += -DREBOOT_LIB='$(REBOOT_LIB)' -endif - - -TARGET_PLATFORM := TWL -TWL_PROC := ARM9 -TWL_ARCHGEN := LIMITED - -TARGET_BIN = main.srl -ROM_SPEC_TEMPLATE = yuv2rgb.rsf.template -ROM_SPEC = yuv2rgb.autogen.rsf -SRCS = snd_data.c mainy.cpp new.cpp cpu_yuv2rgb.c menuIrqHandler.c menuCameraManager.cpp #dsp_yuv2rgb.c -DATA_DIR = ./data -EXT_OBJS += $(patsubst $(DATA_DIR)/%.dat,$(OBJDIR)/%.o,$(wildcard $(DATA_DIR)/*.dat)) - -# DSPt@[EFA萔ƂĐÓINB -#DSP_FIRMWARE_DIR = $(ROOT)/build/dspcomponents/build/tests/yuv2rgb/bin -#DATA_DIR = . -#EXT_OBJS += $(patsubst $(DSP_FIRMWARE_DIR)/%.a,$(OBJDIR)/%.o,$(wildcard $(DSP_FIRMWARE_DIR)/*.a)) - -MACRO_FLAGS += -DTWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - -#---------------------------------------------------------------------------- - -ifdef TWL_IPL_USE_RED_IPL -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs -include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot -MAKEROM := $(TWL_IPL_RED_ROOT)/tools/bin/makerom.TWL.launcher.exe -else -include $(TWLSDK_ROOT)/build/buildtools/commondefs -endif -include $(TWLSDK_ROOT)/build/buildtools/commondefs.gx.demolib - - -LLIBRARIES += libcpu_jpegEncoder$(TWL_LIBSUFFIX).a - - -#---------------------------------------------------------------------------- - -#do-build: $(ROM_SPEC) prepare $(TARGETS) -do-build: $(ROM_SPEC) $(TARGETS) - -#SUBDIRS = ../../../dspcomponents/build/tests/yuv2rgb - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -# UIG`[̃\[X̂܂܃Rs[܂B -.PHONY: prepare -prepare: - cp -p $(TWL_IPL_ROOT)/menu/scene/src/menuCameraManager.cpp src - cp -p $(TWL_IPL_ROOT)/menu/scene/include/menuCameraManager.h include - -ifdef TWL_IPL_USE_RED_IPL -# for $(SYSMENU_LIBS) -include redipl_defs_autogen_by_uig -LLIBRARIES += $(SYSMENU_LIBS) - -$(ROM_SPEC): $(ROM_SPEC_TEMPLATE) Makefile - grep -v MAKEROM_WRAM_MAPPING $(ROM_SPEC_TEMPLATE) | grep -v NTRJ | grep -v User > $(ROM_SPEC) - -else -$(ROM_SPEC): $(ROM_SPEC_TEMPLATE) Makefile - grep -v WramMappingDirect $(ROM_SPEC_TEMPLATE) | grep -v HNAJ | grep -v Secure | grep -v System | grep -v HwAESSlot > $(ROM_SPEC) - -endif - -LDIRT_CLEAN += $(ROM_SPEC) - -#---------------------------------------------------------------------------- - -$(OBJDIR)/%.o : $(DATA_DIR)/%.dat - $(BIN2OBJ) --compatible $< $@ >/dev/null - -$(DATA_DIR)/%.dat : $(call eupath,$(DSP_FIRMWARE_DIR)/%.a) - cp -T $< $@ - - -ZIPDIR=$(notdir $(shell pwd)) -ZIPFILE=$(HOME)/$(ZIPDIR)-$(shell date +%y%m%d_%H%M).zip -.PHONY: zip -zip: - @cd .. && find $(ZIPDIR) ! -type d | grep -v -e \~ -e .tmp -e .svn -e .obj -e /bin/ -e /depend/ -e /obj/ | zip $(ZIPFILE) -@ - @ls -l $(ZIPFILE) - - -#===== End of Makefile ===== diff --git a/build/tests/yuv2rgb/data/camera_shutter.dat b/build/tests/yuv2rgb/data/camera_shutter.dat deleted file mode 100644 index 14b56eb53116a5602d87950353d76d3d8af7bc63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32628 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 diff --git a/build/tests/yuv2rgb/data/wheel.dat b/build/tests/yuv2rgb/data/wheel.dat deleted file mode 100644 index 81a737dcc5e2aed6fbb698c7ea3a048f3683575a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136388 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

    o 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 z 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 z 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 - } - static void procI2c_(void* p_arg) { - reinterpret_cast(p_arg)->procI2c(); - } - - static OSMessage mI2cAsyncMsgBuf[1]; - static OSMessageQueue mI2cAsyncMsgQueue; - CAMERAResult i2cCommon(u32 type, CAMERASelect sel_cmr); - CAMERAResult i2cSetupOthers(); - CAMERAResult i2cActivate(CAMERASelect sel_cmr); - CAMERAResult i2cFrameRate(CAMERASelect sel_cmr); - CAMERAResult i2cContextSwitch(CAMERASelect sel_cmr); - CAMERAResult i2cLed(BOOL isBlink); - static void i2cCommonAsyncCallback(CAMERAResult result, void *arg); - static void i2cActivateCallback(CAMERAResult result, void *arg); - static void i2cFrameRateCallback(CAMERAResult result, void *arg); - static void i2cContextSwitchCallback(CAMERAResult result, void *arg); - static void i2cLedCallback(CAMERAResult result, void *arg); - - CAMERASelect indexToCameraSelect(u32 i) { return (CAMERASelect)(CAMERA_SELECT_IN << i); } - static BOOL isOutCamera(CAMERASelect sel_cmr) { return (sel_cmr == CAMERA_SELECT_OUT); } - - static vu8 mCurLedBlink; - static volatile CAMERASelect mSelCmr; - static volatile CAMERASelect mNextCmr; - - static volatile cameraState mCmrCurState[cCameraMax]; - static volatile cameraState mCmrNextState[cCameraMax]; - - void prepareBuffer(); - void destroyBuffer(); - void useNextConvBuf(); - void encodeAndSave(); - void setInterrupt(BOOL enable); - - void (*mpGxUserProc)(u8* vramAddr, BOOL shot); - BOOL writeJpegToSD(const u8* src, u32 size); -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else - BOOL writeJpegToNand(const u8* src, u32 size); -#endif - - // if non-static, CW claims: - // Error: 'pDtcm' could not be assigned to a register - // Error: internal compiler error (report to ...) - // while executing in file 'PCodeAssembly.c' line: 468 - static void Shrink640Yuv422To208Rgb555( const void* src, void* dst, u32 height, void* pDtcm ); - static void Shrink640Yuv422To256Rgb555( const void* src, void* dst, u32 height, void* pDtcm ); - static void Convert8bitYuv422To16bitYuv420( const u32* src, u16* pYCbCrBuf, u32 width, u32 height, void* pDtcm_ ); - -}; - -}}} - -#endif diff --git a/build/tests/yuv2rgb/include/new.h b/build/tests/yuv2rgb/include/new.h deleted file mode 100644 index 822167fc..00000000 --- a/build/tests/yuv2rgb/include/new.h +++ /dev/null @@ -1,45 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NitroSDK - OS - demos - cplusplus-1 - File: new.h - - Copyright 2003-2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: new.h,v $ - Revision 1.6 2007/02/20 00:28:10 kitase_hirotake - indent source - - Revision 1.5 2006/01/18 02:11:30 kitase_hirotake - do-indent - - Revision 1.4 2005/02/28 05:26:27 yosizaki - do-indent. - - Revision 1.3 2004/03/08 08:55:47 yada - fix top comment - - Revision 1.2 2004/02/20 00:04:05 yasu - add comments - - Revision 1.1 2004/02/18 04:19:30 yada - C++f - - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ - -#ifndef MY_NEW_H_ -#define MY_NEW_H_ - -void *operator new(std::size_t blocksize); -void *operator new[] (std::size_t blocksize); -void operator delete(void *block) throw(); -void operator delete[] (void *block)throw(); - -/* MY_NEW_H_ */ -#endif diff --git a/build/tests/yuv2rgb/include/snd_data.h b/build/tests/yuv2rgb/include/snd_data.h deleted file mode 100644 index 89a4e28b..00000000 --- a/build/tests/yuv2rgb/include/snd_data.h +++ /dev/null @@ -1,35 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: snd_data.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef SND_DATA_H_ -#define SND_DATA_H_ -#ifdef __cplusplus -extern "C" { -#endif -/*---------------------------------------------------------------------------*/ - -#include - -extern const u8 sound_seq_data[]; -extern const u8 sound_bank_data[]; -extern const u8 sound_wave_data[]; - -/*---------------------------------------------------------------------------*/ -#ifdef __cplusplus -} // extern "C" -#endif -#endif // SND_DATA_H_ diff --git a/build/tests/yuv2rgb/include/yuv2rgb.h b/build/tests/yuv2rgb/include/yuv2rgb.h deleted file mode 100644 index 7f06cbab..00000000 --- a/build/tests/yuv2rgb/include/yuv2rgb.h +++ /dev/null @@ -1,85 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - YUV2RGB - File: cpu_yuv2rgb.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ - *---------------------------------------------------------------------------*/ -#ifndef YUV2RGB_H_ -#define YUV2RGB_H_ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define DSP_DMA_NOT_USE 0xFFFFFFFFUL - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -typedef struct YUYV -{ - u8 y1; - u8 u; - u8 y2; - u8 v; -} YUYV; - -typedef struct RGBX16 -{ - u16 r:5; - u16 g:5; - u16 b:5; - u16 x:1; -} RGBX16; - -typedef void (*YUV2RGBCallback)(void); - -typedef enum _MessageYuv2Rgb -{ - MESSAGE_YUV2RGB_CONVERT = 1 -} MessageYuv2Rgb; - -/*---------------------------------------------------------------------------* - Name: DSP_Yuv2RgbInit - - Description: ֐ - - Arguments: *** - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL DSP_Yuv2RgbInit(u32 dmaNo); - -/*---------------------------------------------------------------------------* - Name: DSP_Yuv2RgbConvertAsync - - Description: YUV->RGBϊs܂Bi񓯊Łj - - Arguments: *** - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL DSP_Yuv2RgbConvertAsync(void* src, void* dest, u32 size, YUV2RGBCallback callback); - -// CPU -u32 CpuYuv2Rgb( const void* src, void* dest, u32 pixels ); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -/* YUV2RGB_H_ */ -#endif diff --git a/build/tests/yuv2rgb/readme.txt b/build/tests/yuv2rgb/readme.txt deleted file mode 100644 index 26873f1d..00000000 --- a/build/tests/yuv2rgb/readme.txt +++ /dev/null @@ -1,227 +0,0 @@ -̃pbP[Wɂ‚ -====================== - -ARM7R|[lgAracoonjackalɂƁAJ쎞 -ARM9̏Ȃ邱Ƃ𒲂ׂ邽߂̃TvłB - -R|[lg̐؂ւ́AMakefile - -ifdef TWL_IPL_RED_ROOT -#R|[lg؂ւ܂B -#RgAEgracoonALjackalg܂B -#̍sύXmake cleanĂB -TWL_IPL_USE_RED_IPL := TRUE -endif - -L̍sRgAEg邩L邩ōsĂB -ύXmake cleanĂB - -ƁAfobOo͂ - -mConvBusy! 0, nextp empty -mConvBusy! 1, nextp empty - : - -ƕ\܂B͉񐔂łB̕pxAracoonjackalňق -܂B - -ʏ㕔 '*' ̓̃X[YAJɌĎU -ƁAJNJN邱ƂłɂCÂƎv܂B - -ȏłB - - - -ȉ́ÃpbP[WɊ܂܂֐SDKDSP JPEGCuɒ -Ē߂ɒ񋟂Ƃɍ쐬hLgłB - - -====================================================================== - -̃pbP[Wɂ‚ -====================== - -UIG`[̃JBe(J}l[W)̎̂߁A -邽߂̃pbP[WłBڃJJPEGɂ͊֌WȂ -t@C܂܂Ă܂B - -src/menuCameraManager.cpṕA{IɌUIG`[Ɠ -̂łBł̎̐ʂUIG`[֔fĂ܂B - -YUV422->YUV420ϊ֐ȊÓA̕AGɍĂ -܂̂ŁAJȂȂ悤ɂ肢܂B - -SDJ[hANZX́AUIG`[dlł͂܂B -UIG`[ɂ̂܂܎gĂ܂BVb^[܂ -‚܂B - -s@́Aʂmakemain.tlf[hĒƁAʂɃA -EgJ̉摜o܂BA{^ŃVb^[؂܂BSDJ[h -Ă/menu/menu####.jpgAԂŐ܂B(SDK̃f -̂܂ܒĂ܂) - - -YUV422->YUV420ϊ֐̎gp@ -================================ - -menuCameraManager.cppConvert8bitYuv422To16bitYuv420()ŁA -YUV422->YUV420ϊs܂B̊֐ĂяoĂ铯t@C -1074sڂ1102sڂ - - frame_y = mpTestEncodeWork->y; - frame_cb = mpTestEncodeWork->cbcr; - frame_cr = frame_cb + (mShotWdt * mShotHgt / 4); - tick = OS_GetTick(); - Convert8bitYuv422To16bitYuv420(reinterpret_cast(pBuf), - frame_y, - mShotWdt, - mShotHgt, - mpDtcmWork->mYuvBuf); - // store YUV420 and invalidate encode result - // DC_StoreAll(), DC_FlushAll() is NG? - DC_FlushAll(); - - IPL_PRINT("procShot: yuv422to420 time %d usec\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - tick)); - tick = OS_GetTick(); - - // o̓TCY͂قǕKvH - DSP_SetJpegEncoderBuffer(mpTestEncodeWork->result, sizeof(mpTestEncodeWork->result)); - // explicit initialization - DSP_SetJpegEncoderThumbnailBuffer(NULL, NULL, NULL); - DSP_SetJpegEncoderAllocator( dspAlloc_, dspFree_ ); - u32 size = DSP_StartJpegEncoder( static_cast< s16 > ( mShotWdt ) , - static_cast< s16 > ( mShotHgt ) , - DSP_JPEG_THUMBNAIL , - 4 ); - - // need here too ? sometimes picture breaks... - // DC_StoreAll(), DC_FlushAll() is NG? - DC_InvalidateRange(mpTestEncodeWork->result, size); - -ɂ‚Đ܂B - -- 1078sڂ̕ϊ֐̈pBuf́AJVGAAYUV422ŃLv` -ʂwĂ܂B̃obt@́AOprocConvert()ʂ -ĂĂA917sڂ - DC_FlushAll(); -ŁAf[^LbVInvalidateςł܂B -ϊf[^̓[h(4oCg)[h邽߁A -reinterpret_castĂ܂B - -- frame_ýASDKJPEGGR[_̃O[oϐłB11 -sڂ璼 -extern "C" { -// build/libraries/dsp/ARM9.TWL/src/dsp_jpeg_enc.c -extern u16 *frame_y; -extern u16 *frame_cb; -extern u16 *frame_cr; -} /* extern "C" */ -ŎQƂĂ܂ASDK̃O[oϐƂĂ͓K؂ł͂Ȃ߁A -ϐ𐮂Set֐ljĒǂƎv܂B - -- SDKJPEGGR[_ɂ́Aframe_cbframe_cr^Kv -Bframe_cbframe_cr^Ă̂1074sڂ - frame_y = mpTestEncodeWork->y; - frame_cb = mpTestEncodeWork->cbcr; - frame_cr = frame_cb + (mShotWdt * mShotHgt / 4); -ɂȂ܂B - -ϊ֐́Aframe_yɌԖframe_cbAframe_cro͂܂ -̂ŁAϊ֐̈frame_yłB - -- mShotWdt640AmShotHgt480łB - -- mpDtcmWork->mYuvBufŁApDTCM[N^Ă܂B -menuCameraManager.h43sڂɂA12_u[h(96oCg) - u64 mYuvBuf[12]; -̗̈悪KvłBstrd߂gpĂ̂8oCgACg -ĂB(̏mShrinkBuf́AkpȂ̂ŕϊ֐ɂ͊֌W -܂) - -DTCMgƂɂ‚ẮASDKƂČJꍇɌKvƎv -܂BCVRAM蓖ĂĂ삷͂łA -Ă܂BstaticDTCM[NłȂĂACXbh̃X^b -Nt[ȂʏDTCMɂȂ͂łAƂӎ -ƕ~Ȃ܂B - -- ϊ1085s - DC_FlushAll(); -́AJPEGGR[hɉ摜ǏɔY܂AÔ߃f[^ -LbV̓e֓fo܂B摜ȂȂ΁A -sv܂B - -- 1094sڂ - DSP_SetJpegEncoderAllocator( dspAlloc_, dspFree_ ); -Ŏw肵ĂAP[^łÂmainy.cpp1667sڂɂ -B - -dspAlloc_()́A͉Ă܂BĂȂǂ납AĂ -ꂽAT[gŒ~܂B - -dspFree_()́ASDKĂ΂Ă܂̂ŁA~͂܂񂪃_~[ -ɂĂ܂B - -̃AP[^̎g(SDKdsp_jpeg_enc.c)ɂ‚ẮA낢 -vƂ͂̂łAȒPɌ - -a. őʼnoCgKvɂȂ̂Ał΃RpCɒm肽 -̕@񋟂ĂȂ - -b. pTmp2ŏɊmۂĂ邽߁ApYbufApCBbufApCRbufmۂ - - DSPFree(pTmp2); -̂̓tOg𐶂”\ - -c. extra_bytesɊւ鏈 - Yuv_image_size=(u32)(image_width+32)*(image_height+32); -+32Ӑ}s - -ƂƂŕsɂȂ̂Aϊ֐삵‚ -RłB - -- JPEGGR[h1102s - DC_InvalidateRange(mpTestEncodeWork->result, size); -AJPEGGR[h̉摜΍eXgłB -āASD֏FSCuɖ肪邩ƎvAFS -CupɃf[^LbVInvalidatêłBȂ -΁AsvɂȂł傤B - - -YUV422->YUV420ϊ֐̕⑫ -================================ - -- 793sڂ821sڂ܂ŁA -#if 0 - // even line U - : -#else - // even column ave. uv (V0 U0) - : -#endif - -łAYUV422->YUV420ɔĎUAV2C -ϒlƂ邩AWikipediaLۂ݂ - -| YUV420 : 2~2sNẐA‚̐FMŏ̃CA -| Ԃ̐FM̃CƂBPxM1sNZƂɂ -| B - -̕ɂ邩̂łBϒlɂmCYጸ -Ă悤Ɋ߁A#if 0ƂĂ܂B#if 1ɂƃV -[vȊɂȂ܂B - -AY͂̂܂܂UAVω炨G -ȂȂ̂AƂ͂̃CṼC玝Ă̂ -Șbł́HƂv͂܂B - -JPEGGR[_̓̓f[^dlڂׂĂȂ̂ŁAǂ炪 -ǂ̂Ă܂B - -- ϊ֐̈̐ɂ‚āA714sڂ̃Rg⑫܂B - -// pYCbCrBufŒ4oCgACgłAefoCXƂ̘Ag -// 32oCgACgĂB - -́AϊʂDSP̓̓f[^ɂȂ̂ŁA32oCgAC -gĂ΃LbV܂̐Sz邩łB - diff --git a/build/tests/yuv2rgb/redipl_defs_autogen_by_uig b/build/tests/yuv2rgb/redipl_defs_autogen_by_uig deleted file mode 100644 index 7c5d15da..00000000 --- a/build/tests/yuv2rgb/redipl_defs_autogen_by_uig +++ /dev/null @@ -1,14 +0,0 @@ -SYSMENU_LIBS = \ - liblcfg$(TWL_LIBSUFFIX).a \ - libsysmenu$(TWL_LIBSUFFIX).a \ - libsysmmcu$(TWL_LIBSUFFIX).a \ - libsysmutil$(TWL_LIBSUFFIX).a \ - libboot$(TWL_LIBSUFFIX).a \ - libds$(TWL_LIBSUFFIX).a \ - libhotsw$(TWL_LIBSUFFIX).a \ - libdht$(TWL_LIBSUFFIX).a \ - libreloc_info$(TWL_LIBSUFFIX).a \ - libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont_launcher$(TWL_LIBSUFFIX).a \ - WDS$(TWL_LIBSUFFIX).a - diff --git a/build/tests/yuv2rgb/src/cpu_yuv2rgb.c b/build/tests/yuv2rgb/src/cpu_yuv2rgb.c deleted file mode 100644 index bdb09f57..00000000 --- a/build/tests/yuv2rgb/src/cpu_yuv2rgb.c +++ /dev/null @@ -1,103 +0,0 @@ - // gĂB -/*---------------------------------------------------------------------------* - Project: TwlSDK - YUV2RGB - File: cpu_yuv2rgb.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ - *---------------------------------------------------------------------------*/ - -#include -#include "yuv2rgb.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -u32 yuv2rgb16( const void* src, void* dest, u32 pixels ); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -static inline int r_diff( u8 v ) -{ -// return (1402 * ( v - 128 )) / 1000; - return (11760828/*.416*/ * ( v - 128)) >> 23; -} - -static inline int g_diff( u8 u, u8 v ) -{ -// return (-344 * ( u - 128 ) -714 * ( v - 128 )) / 1000; - return (-2885681/*.152*/ * ( u - 128 ) -5989466/*.112*/ * ( v - 128 )) >> 23; -} -static inline int b_diff( u8 u ) -{ -// return (1772 * ( u - 128 )) / 1000; - return (14864613/*.376*/ * ( u - 128 )) >> 23; -} - -static inline int trim( int e ) -{ - return e < 0 ? 0 : ( e > 255 ? 255 : e); -} - -/*---------------------------------------------------------------------------* - Name: CpuYuv2Rgb - - Description: YUV->RGBϊs܂(CPUo[Wj - - Arguments: src : input data adress (YUV) - dest : output data adress (RGB) - pixels : num of pixel - - Returns: None - *---------------------------------------------------------------------------*/ -u32 CpuYuv2Rgb( const void* src, void* dest, u32 pixels ) -{ - OSTick begin; - u8* yuyv = (u8*)src; - u32* rgb = (u32*)dest; - - u32 limit = pixels >> 1; - u32 i; - -begin = OS_GetTick(); - - for (i = 0; i < limit; i++) - { - u8 y1 = *yuyv++; - u8 u = *yuyv++; - u8 y2 = *yuyv++; - u8 v = *yuyv++; - *rgb++ = (u32)( - 0xffffffff - //0x83e083e0 // G only - & ( - 0x80008000 | - ( ( trim( y2 + b_diff( u ) ) & 0xF8 ) << 23) | - ( ( trim( y2 + g_diff( u, v ) ) & 0xF8 ) << 18) | - ( ( trim( y2 + r_diff( v ) ) & 0xF8 ) << 13) | - ( ( trim( y1 + b_diff( u ) ) & 0xF8 ) << 7) | - ( ( trim( y1 + g_diff( u, v ) ) & 0xF8 ) << 2) | - ( ( trim( y1 + r_diff( v ) ) ) >> 3) )); - } - -OS_Printf("total(555) = %d us\n", OS_TicksToMicroSeconds(OS_GetTick() - begin)); - - return pixels * sizeof(RGBX16); -} - diff --git a/build/tests/yuv2rgb/src/dsp_yuv2rgb.c b/build/tests/yuv2rgb/src/dsp_yuv2rgb.c deleted file mode 100644 index ee1ada37..00000000 --- a/build/tests/yuv2rgb/src/dsp_yuv2rgb.c +++ /dev/null @@ -1,308 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - YUV2RGB - File: dsp_yuv2rgb.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev:$ - $Author:$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include "yuv2rgb.h" - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ - -#define THREAD_YUV2RGB_PRIO 10 // CXbhD -#define STACK_SIZE 1024 -#define DSP_BUFFER_SIZE 0x6000 // 24KB - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -OSThread threadYUV2RGB; // YUV2RGBXbh -u64 stack[STACK_SIZE / sizeof(u64)]; // YUV2RGBXbhpX^bN - -// bZ[W֘A -OSMessage mesgBuffer[10]; -OSMessageQueue mesgQueue; - -static YUV2RGBCallback sCallback; -static u8* sSrc; -static u8* sDst; -static u32 sSize; -static u32 sDmaNo; -static u8 sBusy; - -DSPPipe binout[1]; -DSPPipe binin[1]; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ -BOOL YUV2RGB_Init(void); -static void DSPi_Yuv2RgbThread(void *arg); -static void DSPi_Yuv2RgbLoadProgram(); -static void DSPi_Yuv2RgbConvertCore(void); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: DSP_Yuv2RgbInit - - Description: ֐ - - Arguments: *** - - Returns: None - *---------------------------------------------------------------------------*/ -BOOL DSP_Yuv2RgbInit(u32 dmaNo) -{ - // DSPt@[[h - DSPi_Yuv2RgbLoadProgram(); - - // DSPpCv[hiDSP->ARMj - (void)DSP_LoadPipe( - binout, // pCv̊i[ (DSPłNULLł悢) - DSP_PIPE_BINARY, // pCṽ|[gԍi1j - DSP_PIPE_OUTPUT); // DSP_PIPE_INPUT ܂ DSP_PIPE_OUTPUT - - (void)DSP_LoadPipe( - binin, // pCv̊i[ (DSPłNULLł悢) - DSP_PIPE_BINARY, // pCṽ|[gԍi1j - DSP_PIPE_INPUT); // DSP_PIPE_INPUT ܂ DSP_PIPE_OUTPUT - - // bZ[WL[̏ - OS_InitMessageQueue(&mesgQueue, &mesgBuffer[0], 10); - - // YUV2RGBϊXbhEN - OS_CreateThread(&threadYUV2RGB, DSPi_Yuv2RgbThread, (void *)0, stack + STACK_SIZE / sizeof(u64), STACK_SIZE, THREAD_YUV2RGB_PRIO); - OS_WakeupThreadDirect(&threadYUV2RGB); - - // WRAM-C Slot1 ̊蓖Ă DSP->ARM ֕ύX - if ( MI_SwitchWramSlot_C( 1, MI_WRAM_SIZE_32KB, MI_WRAM_DSP, MI_WRAM_ARM9 ) != 1 ) - { - OS_TPanic("can't allocate WRAM Slot"); - } - - // gpDMAԍۑ - sDmaNo = dmaNo; - - return TRUE; -} - -/*---------------------------------------------------------------------------* - Name: DSPi_Yuv2RgbLoadProgram - - Description: DSPeXgvO[hB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void DSPi_Yuv2RgbLoadProgram(void) -{ - MI_FreeWram_B(MI_WRAM_ARM9); - MI_CancelWram_B(MI_WRAM_ARM9); - MI_FreeWram_C(MI_WRAM_ARM9); - MI_CancelWram_C(MI_WRAM_ARM9); - { - extern const u8 _binary_simple_dat[]; - extern const u8 _binary_simple_dat_end[]; - if (!DSP_LoadFileAuto(_binary_simple_dat)) - { - OS_TPanic("can't allocate WRAM Slot"); - } - // K̃^C~OONȂƂȂ̂ǂ͖mFB - { - static BOOL once = FALSE; - if (!once) - { - DSP_PowerOn(); - once = TRUE; - } - } -// DSP_ResetInterface(); - DSP_ResetOff(); - OS_TPrintf("dsp app run...\n"); - DSP_EnableRecvDataInterrupt(0); - DSP_EnableRecvDataInterrupt(1); - DSP_EnableRecvDataInterrupt(2); - } -} - -/*---------------------------------------------------------------------------* - Name: DSPi_Yuv2RgbThread - - Description: YUV2RGBpXbh - - Arguments: *** - - Returns: None - *---------------------------------------------------------------------------*/ - -static void DSPi_Yuv2RgbThread(void *arg) -{ -#pragma unused( arg ) - OSMessage message; - - while (1) - { - (void)OS_ReceiveMessage(&mesgQueue, &message, OS_MESSAGE_BLOCK); - - switch ((MessageYuv2Rgb)message) - { - case MESSAGE_YUV2RGB_CONVERT: - DSPi_Yuv2RgbConvertCore(); - break; - } - } -} - -/*---------------------------------------------------------------------------* - Name: DSP_Yuv2RgbConvertAsync - - Description: YUV->RGBϊs܂i񓯊Łj - - Arguments: *** - - Returns: ˗ȂTRUE - *---------------------------------------------------------------------------*/ -BOOL DSP_Yuv2RgbConvertAsync(void* src, void* dest, u32 size, YUV2RGBCallback callback) -{ - OSMessage message; - - message = (OSMessage)MESSAGE_YUV2RGB_CONVERT; - - if (!sBusy) - { - sCallback = callback; // Ro[gɌĂяoR[obNۑ - sSrc = src; - sDst = dest; - sSize = size; - return OS_SendMessage(&mesgQueue, message, OS_MESSAGE_NOBLOCK); - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: DSPi_Yuv2RgbConvertCore - - Description: YUV->RGBϊ̂߂DSPƂ̂ - f[^Rs[Ȃǂs܂ - - Arguments: *** - - Returns: None - *---------------------------------------------------------------------------*/ -static void DSPi_Yuv2RgbConvertCore(void) -{ - u16 command; - u16 reply; - u32 adress = MI_GetWramMapStart_C() + MI_WRAM_C_SLOT_SIZE; // bIɃXbg1Œ - OSTick begin, current, tick_copy1, tick_convert, tick_copy2; - u32 offset =0; - - // rW[tOnm - sBusy = TRUE; - - tick_copy1=tick_convert=tick_copy2=0; - - // DSPɃobt@24KBmۂłĂȂ256x192(96KbjȂǂ - // 傫TCY̕ϊ4ɕčsĂB - - while (sSize > 0) - { - u16 size; - - if (sSize > DSP_BUFFER_SIZE) { size = DSP_BUFFER_SIZE; } - else { size = (u16)sSize; } - - sSize -= size; - -begin = OS_GetTick(); - - // src -> WRAM-C ɏ - if (sDmaNo == DSP_DMA_NOT_USE) - { - MI_CpuCopy16(sSrc + offset, (void*)adress, size); - DC_FlushRange((void*)adress, size); - } - else - { - MI_NDmaCopy( 3, sSrc + offset, (void*)adress, size ); - } - - // WRAM-C Slot1 ̊蓖Ă ARM->DSP ֕ύX - if ( MI_SwitchWramSlot_C( 1, MI_WRAM_SIZE_32KB, MI_WRAM_ARM9, MI_WRAM_DSP ) != 1 ) - { - OS_Printf("====== WRAM Allocation Fail ! =======\n"); - } - -current = OS_GetTick(); -tick_copy1 += (current - begin); -begin = current; - - // DSPփR}hM - command = (u16)(size>>1); // sNZƂēn - DSP_WritePipe(binout, &command, sizeof(u16)); - - // DSPR}hMiŃX[vɓADSP_HookPipeNotificationŋNj - DSP_ReadPipe(binin, &reply, sizeof(u16)); - -current = OS_GetTick(); -tick_convert += (current - begin); -begin = current; - - // WRAM-C Slot1 ̊蓖Ă DSP->ARM ֕ύX - if ( MI_SwitchWramSlot_C( 1, MI_WRAM_SIZE_32KB, MI_WRAM_DSP, MI_WRAM_ARM9 ) != 1 ) - { - OS_Printf("====== WRAM Allocation Fail ! =======\n"); - } - - // WRAM-C -> dst ɏ - if (sDmaNo == DSP_DMA_NOT_USE) - { - DC_InvalidateRange((void*)adress, size); - MI_CpuCopy16((void*)adress, sDst + offset, size); - } - else - { - MI_NDmaCopy( 3, (void*)adress, sDst + offset, size); - } - -current = OS_GetTick(); -tick_copy2 += (current - begin); - - // ItZbgXV - offset += size; - } - - OS_Printf("copy to wram = %d us, ", OS_TicksToMicroSeconds(tick_copy1)); - OS_Printf("convert = %d us, ", OS_TicksToMicroSeconds(tick_convert)); - OS_Printf("from wram = %d us, ", OS_TicksToMicroSeconds(tick_copy2)); - OS_Printf("total = %d us\n", OS_TicksToMicroSeconds(tick_copy1+tick_convert+tick_copy2)); - - // rW[tOnee - sBusy = FALSE; - - if (sCallback) - { - sCallback(); - } -} - diff --git a/build/tests/yuv2rgb/src/mainy.cpp b/build/tests/yuv2rgb/src/mainy.cpp deleted file mode 100644 index 181a117b..00000000 --- a/build/tests/yuv2rgb/src/mainy.cpp +++ /dev/null @@ -1,1813 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - YUV2RGB - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -//#include -#include -#include -#include -#include -#include - -#ifdef TWL_IPL_USE_RED_IPL -#include -#include -#endif - -// #include -// #include -#include "DEMOBitmap.h" -#include "yuv2rgb.h" -#include "menuIrqHandler.h" -#include "menuCameraManager.h" - -#include "snd_data.h" - -// eXgO[oANZT -cmn::sys::cmr2::Manager* mpCmrMgr2; - -//extern u16 b_data[]; - -extern const u8 _binary_camera_shutter_dat[], _binary_camera_shutter_dat_end[]; -extern const u8 _binary_camera_shutter_MONO_dat[], _binary_camera_shutter_MONO_dat_end[]; -extern const u8 _binary_wheel_dat[], _binary_wheel_dat_end[]; - - -#include -// ɕKvu32max(208*3, 256*2) -// Ƃ肠256*4ŁB -static cmn::sys::cmr2::dtcmWork sDtcmWork; -#include - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define CAMERA_NEW_DMA_NO 1 // CAMERAŎgpNew DMAԍ -#define WIDTH 640 -#define HEIGHT 480 - -#define LINES_SPLIT 1 -#define LINES_AT_ONCE (CAMERA_GET_MAX_LINES(WIDTH)/LINES_SPLIT) // ̓]C -#define BYTES_PER_LINE CAMERA_GET_LINE_BYTES(WIDTH) // ꃉC̓]oCg - - enum - { - eStt_Deactive = 0 , - eStt_Capture , - eStt_WaitShooting , - eStt_Shoot , - eStt_FinishShooting , - eStt_Stop , - eStt_Max - } mState, mLastState; - -BOOL mError; - - enum - { -#if 1 - cPictureOffsetX = 0, - cPictureOffsetY = 0, -#else - cPictureOffsetX = 24, - cPictureOffsetY = 24, -#endif - cPictureWidth = cScreenWidth - (cPictureOffsetX * 2), - cPictureHeight = cScreenHeight - (cPictureOffsetY * 2), - cShootWidth = 640, - cShootHeight = 480 - }; - -/*---------------------------------------------------------------------------* - ֐錾 - *---------------------------------------------------------------------------*/ - -static void VBlankIntr(void); -static void CameraIntr(void); -//static void CameraIntr2(void); -//static void CameraIntr3(void); -static void NDmaIntr(void); -static void NDmaDummyIntr(void); -static void PutString( char *format, ... ); -static void DrawFPS(void); - -/*---------------------------------------------------------------------------* - ϐ` - *---------------------------------------------------------------------------*/ - -static BOOL startRequest = FALSE; - -// [0],[1]camerainputB[2]͎̂Ăcamera inputpH -static u16 buffer[3][WIDTH*HEIGHT] ATTRIBUTE_ALIGN(32); -//static vu8 we; -//static vu8 re; -//static vu8 reading; -//static vu8 tp; -//static vu8 wp; // Jf[^荞ݒ̃obt@ -//static vu8 rp; // ŌVRAMɃRs[obt@ -//static BOOL wp_pending; // 荞݂𒆒f (Ăѓobt@Ɏ荞) -static CAMERASelect current = CAMERA_SELECT_IN; -static MenuIrqHandlerLogBuffer logBuf[0x10000]; - -static u16 text_buffer[ 32 ] ATTRIBUTE_ALIGN(32); - -static vu8 sNowConvert = FALSE; // YUV->RGBϊtO - -static vu8 sLongDmaFlag; - -static u32 gWords[0x2000]; -static u32 gSum; - -#define GRAD_WIDTH 256 -static u16 grad0[GRAD_WIDTH] ATTRIBUTE_ALIGN(32); -static u16 grad1[GRAD_WIDTH] ATTRIBUTE_ALIGN(32); -static void MakeGrad(void) -{ - static u16 table[] = { - 0, 8, 0, 1, 0, 2, 0, 3, - 0, 4, 0, 5, 0, 6, 0, 7, - 1, 8, 1, 9, 2,10, 3,11, - 4,12, 5,13, 6,14, 7,15, - 8,16, 9,17,10,18,11,19, - 12,20,13,21,14,22,15,23, - 16,24,17,25,18,26,19,27, - 20,28,21,29,22,30,23,31, - }; - u32 i; - u32 color; - u32 shift = GX_RGBA_G_SHIFT; - - for (i = 0; i < GRAD_WIDTH; i++) { - color = i >> 2; // 0-63 - grad0[i] = (u16)((table[color] << shift) | GX_RGBA_A_MASK); - grad1[i] = (u16)(((color >> 1) << shift) | GX_RGBA_A_MASK); - } - - DC_StoreAll(); -} - -static inline int r_diff( u8 v ) -{ -// return (1402 * ( v - 128 )) / 1000; - return (11760828/*.416*/ * ( v - 128)) >> 23; -} - -static inline int g_diff( u8 u, u8 v ) -{ -// return (-344 * ( u - 128 ) -714 * ( v - 128 )) / 1000; - return (-2885681/*.152*/ * ( u - 128 ) -5989466/*.112*/ * ( v - 128 )) >> 23; -} -static inline int b_diff( u8 u ) -{ -// return (1772 * ( u - 128 )) / 1000; - return (14864613/*.376*/ * ( u - 128 )) >> 23; -} - -static inline int trim( int e ) -{ - return e < 0 ? 0 : ( e > 255 ? 255 : e); -} -#if 0 -static u32 CpuYuv2Rgb666( const void* src, void* dest, u32 pixels ) -{ - return CpuYuv2Rgb(src, dest, pixels); -} -#elif 0 -static u32 CpuYuv2Rgb666( const void* src, void* dest, u32 pixels ) -{ - MakeGrad(); - return 0; -} -#elif 0 -// little endian only -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ - // x * 6/7 - ldr r0, =0x000003fd - ldr r1, =(6*0x10000)/7 - smulwb r0, r1, r0 -// mov r0, #0x16c << 16 - bx lr -} -#elif 0 -// little endian only -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ - // JNAAHB͂ǂꂭ炢Xg[H - - -// 0009 0000 0000 0000 0000 0000 0000 0000 ret=00000001 -// 0002 0000 0000 0000 0000 0000 0000 0000 ret=00000001 -// 0003 0000 0000 0000 0000 0000 0000 0000 ret=00000001 - // 9ƂȁBsysclk/64Ȃ̂...cpuclkɂ4{A - // ^C}[JEgAbvOƂĂ - // ‚܂8*64*4=2048 cpu cycles̊ԁAXg[ĂĂƁH - // ͉H - // J̃Cobt@16MHzœẮH - // ƂƁA256hbg=64 WordsADMAɂ - // sysclkɂ8{A64*8=512 cpu cycles...ȂɑȂH - // - // [ƁIICAMERA_GetBytesAtOnce(WIDTH)=2048I - // ‚܂ 512 WordsȂ̂512*8 = 4096 cycles...ȌvZɂ͂ȂȁB - // J̃Cobt@sysclkȂcpuclkɂ4{A - // 512*4=2048 cpu cycles...‚‚܍H - // oCgƓcpu cyclesɂȂƂƁA2048̓AJ() - // 荞݃[`̒łȂɃXg[郊XNB - // TEhDMAĂ̂ɁB - // ܂łA̗vɂăXg[”\邩 - // J̃Cobt@4CƂĂ̂ȁB - // ܂ȂB[AJ̃Cobt@烁C - // ֓]́ADMAI荞݂gȂ΁ADMAǂ‚Ȃ - // j]Ƃ́A܂SzȂėǂB - // - // 000e 0000 0000 0000 0000 0000 0000 0000 ret=00000001 - // Ȃ񂶂ႱIH荞ݓH - // - // mi_ndma.c - // #define CAMERA_DMA_BLOCK_SIZE MI_NDMA_BWORD_16 - // #define CAMERA_DMA_INTERVAL 2 - // #define CAMERA_DMA_PRESCALER MI_NDMA_INTERVAL_PS_1 - // Ƃ̂ŁA16[hPʂ̕]ɂȂĂ̂ȁB - // AȂĂBvXP[=1{(sysclk)AC^[o=2 - // ɈݒƂ͎vȂACobt@I[o[t[̂ȁc - // Xg[̂́AJNDMÂłȂB - - - -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3,r4-r11,lr - -#define t0 r6 -#define t1 r7 -#define tm0l_addr r11 -#define vcount_addr lr - -#define tm0 r4 -#define vcount r5 - -#define COUNT_MAX 8 - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - - ldr tm0l_addr, =REG_TM0CNT_L_ADDR - ldr vcount_addr, =REG_VCOUNT_ADDR - mov pixels, #COUNT_MAX // ōv - -// VCOUNTl0xc4Ƃ0x60ƂȂ̂ŁAJオ͔ΉB - ldrh vcount, [vcount_addr] - add vcount, vcount, #0x30 - mov vcount, #192 -@10: - ldrsh tm0, [tm0l_addr] -@20: - ldrsh t0, [tm0l_addr] - sub t1, t0, tm0 - movs t0, t1, lsr #1 - beq @50 - - strh t1, [dst], #2 - subs pixels, pixels, #1 - beq @150 - -@50: - ldrh t0, [vcount_addr] - cmp t0, vcount - blt @10 - b @100 - -@100: - mov t1, pixels - mov t0, #0 -@110: - strh t0, [dst], #2 - subs t1, t1, #1 - bne @110 - -@150: - rsb r0, pixels, #COUNT_MAX - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr -#undef SAVE_REGS -#undef t0 -#undef t1 -#undef tm0l_addr -#undef vcount_addr -#undef tm0 -#undef vcount -#undef COUNT_MAX -} -#elif 1 -// dst_~[tFb` -// dstMAINł͂Ȃ(VRAM)Ƒz肵Ă̂ŁADTCMgpB -// 666ȂĒPȂ555B -// little endian only -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ - -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3,r4-r11,lr -#define t0 r3 -#define t1 r12 -#define y0 r9 -#define y1 r10 -#define uv r11 -#define rgba lr - -#define CONST_REGS r4-r8 -#define const_0x80008000 r4 -#define const_0xff00ff00 r5 -#define const_0x7f800000 r6 -#define const_H1_402_L1_772 r7 -#define const_Hm0_344_Lm0_714 r8 - - // omit odd and zero - eor t0, pixels, #1 - movs t0, t0, lsr #1 - bxls lr // LS: C clear or Z set - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - - ldr t0, =@constants - ldmia t0, {CONST_REGS} - - ldr t0, [src], #4 -@10: - and uv, t0, const_0xff00ff00 - eor uv, uv, const_0x80008000 - and y0, const_0x7f800000, t0, lsl #23 // 0x000000ff -> 0x7f800000 - and y1, const_0x7f800000, t0, lsl #23-16 // 0x00ff0000 -> 0x7f800000 - - // Green - // -0.344*(U-128) - smultb t0, const_Hm0_344_Lm0_714, uv - // -0.714*(V-128) - smulbt t1, const_Hm0_344_Lm0_714, uv - mov rgba, const_0x80008000 - add t1, t0, t1 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #21 // 0x7c000000 -> 0x000003e0 - ands t0, t1, #0xfc000000 - - // Red - // 1.402*(V-128) - smultt t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #21-16 // 0x7c000000 -> 0x03e00000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #26 // 0x7c000000 -> 0x0000001f - ands t0, t1, #0xfc000000 - - // Blue - // 1.772*(U-128) - smulbb t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #26-16 // 0x7c000000 -> 0x001f0000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #16 // 0x7c000000 -> 0x00007c00 - ands t0, t1, #0xfc000000 - orrpl rgba, rgba, t0 // 0x7c000000 - - str rgba, [dst], #4 - subs pixels, pixels, #2 - ldrne t0, [src], #4 - bne @10 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr - -@constants: - dcd 0x80008000 - dcd 0xff00ff00 - dcd 0x7f800000 - dcd 0x59ba7168 // ((1.402 * 0x4000) << 16) | ((1.772 * 0x4000) & 0xffff) - dcd 0xe9fcd24e // ((-0.344 * 0x4000) << 16) | ((-0.714 * 0x4000) & 0xffff) - -#undef SAVE_REGS -#undef t0 -#undef t1 -#undef y0 -#undef y1 -#undef uv -#undef rgba -#undef CONST_REGS -#undef const_0x80008000 -#undef const_0xff00ff00 -#undef const_0x7f800000 -#undef const_H1_402_L1_772 -#undef const_Hm0_344_Lm0_714 -} - -#elif 0 -// dst_~[tFb`c߂xȂBcOB -// little endian only -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ - -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3,r4-r11,lr -#define t0 r3 -#define t1 r12 -#define y0 r9 -#define y1 r10 -#define uv r11 -#define rgba lr - -#define CONST_REGS r4-r8 -#define const_0x80008000 r4 -#define const_0xff00ff00 r5 -#define const_0x7f800000 r6 -#define const_H1_402_L1_772 r7 -#define const_Hm0_344_Lm0_714 r8 - - // omit odd and zero - eor t0, pixels, #1 - movs t0, t0, lsr #1 - bxls lr // LS: C clear or Z set - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - - ldr t0, =@constants - ldmia t0, {CONST_REGS} - - ldr t0, [src], #4 -@10: - and uv, t0, const_0xff00ff00 - eor uv, uv, const_0x80008000 - and y0, const_0x7f800000, t0, lsl #23 // 0x000000ff -> 0x7f800000 - and y1, const_0x7f800000, t0, lsl #23-16 // 0x00ff0000 -> 0x7f800000 - - // dst dummy-fetch - ldr rgba, [dst] - - // Green - // -0.344*(U-128) - smultb t0, const_Hm0_344_Lm0_714, uv - // -0.714*(V-128) - smulbt t1, const_Hm0_344_Lm0_714, uv - mov rgba, const_0x80008000 - add t1, t0, t1 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #21 // 0x7c000000 -> 0x000003e0 - ands t0, t1, #0xfc000000 - - // Red - // 1.402*(V-128) - smultt t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #21-16 // 0x7c000000 -> 0x03e00000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #26 // 0x7c000000 -> 0x0000001f - ands t0, t1, #0xfc000000 - - // Blue - // 1.772*(U-128) - smulbb t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #26-16 // 0x7c000000 -> 0x001f0000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #16 // 0x7c000000 -> 0x00007c00 - ands t0, t1, #0xfc000000 - orrpl rgba, rgba, t0 // 0x7c000000 - - str rgba, [dst], #4 - subs pixels, pixels, #2 - ldrne t0, [src], #4 - bne @10 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr - -@constants: - dcd 0x80008000 - dcd 0xff00ff00 - dcd 0x7f800000 - dcd 0x59ba7168 // ((1.402 * 0x4000) << 16) | ((1.772 * 0x4000) & 0xffff) - dcd 0xe9fcd24e // ((-0.344 * 0x4000) << 16) | ((-0.714 * 0x4000) & 0xffff) - -#undef SAVE_REGS -#undef t0 -#undef t1 -#undef y0 -#undef y1 -#undef uv -#undef rgba -#undef CONST_REGS -#undef const_0x80008000 -#undef const_0xff00ff00 -#undef const_0x7f800000 -#undef const_H1_402_L1_772 -#undef const_Hm0_344_Lm0_714 -} - -#elif 0 -// little endian only -// ŏlAől𒲂ׂB -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ -#define SAVE_REGS0 src,dst,pixels -#define SAVE_REGS1 r4-r11,lr -#define t0 r3 -#define minVal r4 -#define maxVal r5 - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS0, SAVE_REGS1} - - mvn minVal, #0x80000000 - mov maxVal, #0x80000000 - -@10: - ldrb t0, [src], #4 - ldrb t0, [src, #1-4] - cmp minVal, t0 - movgt minVal, t0 - cmp maxVal, t0 - movlt maxVal, t0 - -#if 0 - cmp minVal, t0 - movgt minVal, t0 - cmp maxVal, t0 - movlt maxVal, t0 - ldrb t0, [src, #2-4] - cmp minVal, t0 - movgt minVal, t0 - cmp maxVal, t0 - movlt maxVal, t0 -#endif - - subs pixels, pixels, #2 - bne @10 - - mov minVal, minVal, lsl #16 - mov maxVal, maxVal, lsl #16 - orr t0, maxVal, minVal, lsr #16 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS0, SAVE_REGS1} - mov r0, t0 - bx lr - -#undef SAVE_REGS0 -#undef SAVE_REGS1 -#undef t0 -#undef minVal -#undef maxVal -} - -#else -// little endian only -// x^ɍ炱ȂBCƕςB -static asm u32 CpuYuv2Rgb666( register const void* src, register void* dst, register u32 pixels ) -{ -// registers -// keep stack frame 8-Bytes aligned -#define SAVE_REGS0 src,dst,pixels -#define SAVE_REGS1 r4-r11,lr -#define t0 r3 -#define rgba r12 -#define u src -#define v dst -#define y0 r11 -#define y1 lr - -#define tablep r9 -#define data0 r10 -#define data1 pixels - -#define CONST_REGS r4-r8 -#define const_0x80008000 r4 -#define const_minus_0_344 r5 -#define const_minus_0_714 r6 -#define const_1_402 r7 -#define const_1_772 r8 - - cmp pixels, #2 - bxlt lr - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS0, SAVE_REGS1} - - ldr t0, =@constants - ldmia t0, {CONST_REGS} - - ldr tablep, =@table - -@10: - ldrb y0, [src], #4 - ldrb t0, [src, #1-4] - ldrb y1, [src, #2-4] - ldrb rgba, [src, #3-4] - // do not update sp here! keep 8-Bytes aligned - stmia sp, {SAVE_REGS0} - sub u, t0, #0x80 - sub v, rgba, #0x80 - - // Green - // -0.344*(U-128) - mul t0, const_minus_0_344, u - // -0.714*(V-128) - mul rgba, const_minus_0_714, v - mov t0, t0, asr #23 - add t0, t0, rgba, asr #23 - // +Y - adds rgba, t0, y0 - movmi rgba, #0 - cmp rgba, #0xff - movgt rgba, #0xff - ldrb data1, [tablep, rgba, lsr #2] - and rgba, rgba, #0xf8 - mov rgba, rgba, lsl #2 - adds t0, t0, y1 - movmi t0, #0 - cmp t0, #0xff - movgt t0, #0xff - ldrb data0, [tablep, t0, lsr #2] - and t0, t0, #0xf8 - orr rgba, rgba, t0, lsl #16+2 - mov data1, data1, lsl #5 - orr data0, data1, data0, lsl #16+5 - - // Red - // 1.402*(V-128) - mul t0, const_1_402, v - mov t0, t0, asr #23 - // +Y - // now v is free - adds v, t0, y0 - movmi v, #0 - cmp v, #0xff - movgt v, #0xff - ldrb data1, [tablep, v, lsr #2] - orr rgba, rgba, v, lsr #3 - adds t0, t0, y1 - movmi t0, #0 - cmp t0, #0xff - movgt t0, #0xff - ldrb v, [tablep, t0, lsr #2] - and t0, t0, #0xf8 - orr rgba, rgba, t0, lsl #16-3 - orr data0, data0, data1 - orr data0, data0, v, lsl #16 - - // Blue - // 1.772*(U-128) - mul t0, const_1_772, u - mov t0, t0, asr #23 - // +Y - // now u,v is free - adds v, t0, y0 - movmi v, #0 - cmp v, #0xff - movgt v, #0xff - ldrb data1, [tablep, v, lsr #2] - and v, v, #0xf8 - orr rgba, rgba, v, lsl #7 - adds t0, t0, y1 - movmi t0, #0 - cmp t0, #0xff - movgt t0, #0xff - and t0, t0, #0xf8 - ldrb v, [tablep, t0, lsr #2] - orr rgba, rgba, t0, lsl #16+7 - orr data0, data0, data1, lsl #10 - orr data0, data0, v, lsl #16+10 - - // do not update sp here! keep 8-Bytes aligned - ldmia sp, {SAVE_REGS0} - orr data0, data0, const_0x80008000 - str data0, [dst, const_0x80008000, lsl #1] - orr rgba, rgba, const_0x80008000 - str rgba, [dst], #4 - subs pixels, pixels, #2 - bne @10 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS0, SAVE_REGS1} - bx lr - -@table: - dcd 0x01000800 - dcd 0x03000200 - dcd 0x05000400 - dcd 0x07000600 - dcd 0x09010801 - dcd 0x0b030a02 - dcd 0x0d050c04 - dcd 0x0f070e06 - dcd 0x11091008 - dcd 0x130b120a - dcd 0x150d140c - dcd 0x170f160e - dcd 0x19111810 - dcd 0x1b131a12 - dcd 0x1d151c14 - dcd 0x1f171e16 - -@constants: -/* const_0x80008000 r4 */ dcd 0x80008000 -/* const_minus_0_344 r5 */ dcd (-2885681) -/* const_minus_0_714 r6 */ dcd (-5989466) -/* const_1_402 r7 */ dcd 11760828 -/* const_1_772 r8 */ dcd 14864613 - - -// OSTick begin; -// u8* yuyv = (u8*)src; -// u32* rgb = (u32*)dest; -// -// u32 limit = pixels >> 1; -// u32 i; -// -// begin = OS_GetTick(); -// -// for (i = 0; i < limit; i++) -// { -// u8 y1 = *yuyv++; -// u8 u = *yuyv++; -// u8 y2 = *yuyv++; -// u8 v = *yuyv++; -// *rgb++ = (u32)( 0x80008000 | -// ( ( trim( y2 + b_diff( u ) ) & 0xF8 ) << 23) | -// ( ( trim( y2 + g_diff( u, v ) ) & 0xF8 ) << 18) | -// ( ( trim( y2 + r_diff( v ) ) & 0xF8 ) << 13) | -// ( ( trim( y1 + b_diff( u ) ) & 0xF8 ) << 7) | -// ( ( trim( y1 + g_diff( u, v ) ) & 0xF8 ) << 2) | -// ( ( trim( y1 + r_diff( v ) ) ) >> 3) ); -// } -// -// OS_Printf("total(666) = %d us\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - begin)); -// -// return pixels * sizeof(RGBX16); - -#undef SAVE_REGS0 -#undef SAVE_REGS1 -#undef t0 -#undef rgba -#undef u -#undef v -#undef y0 -#undef y1 - -#undef tablep -#undef data0 -#undef data1 - -#undef CONST_REGS -#undef const_0x80008000 -#undef const_minus_0_344 -#undef const_minus_0_714 -#undef const_1_402 -#undef const_1_772 -} -#endif - - -static void drawTexture(u8* vramAddr, BOOL shot) -{ -#pragma unused(vramAddr) -#pragma unused(shot) - s32 x0, y0; - s32 x1, y1; - s32 s0, s1; - s32 t0, t1; - - x0 = cPictureOffsetX; - x1 = cPictureOffsetX + cPictureWidth; - y0 = cPictureOffsetY; - y1 = cPictureOffsetY + cPictureHeight; - - s0 = 0; - s1 = cPictureWidth; - t0 = 0; - t1 = cPictureHeight; - - G3X_Reset(); - - // Ortho matrix - { - G3_Ortho(0, - -GX_LCD_SIZE_Y, - 0, - GX_LCD_SIZE_X, - 0 * FX32_ONE, - 2 * FX32_ONE, - NULL); - G3_StoreMtx(0); - } - - { - G3_MtxMode(GX_MTXMODE_TEXTURE); - G3_Identity(); - // Use an identity matrix for the texture matrix for simplicity - G3_MtxMode(GX_MTXMODE_POSITION_VECTOR); - } - - //--------------------------------------------------------------------------- - // Set up a camera matrix - //--------------------------------------------------------------------------- - { - VecFx32 Eye = { 0, 0, FX32_ONE }; // Eye position - VecFx32 at = { 0, 0, 0 }; // Viewpoint - VecFx32 vUp = { 0, FX32_ONE, 0 }; // Up - - G3_LookAt(&Eye, &vUp, &at, NULL); - } - -#if 0 - GX_BeginLoadTex(); // map the texture image slots onto LCDC address space - { - GX_LoadTex((void *)&grad0[0], - myTexGrad0Addr, - 256 * sizeof(u16) - ); - GX_LoadTex((void *)&grad1[0], - myTexGrad1Addr, - 256 * sizeof(u16) - ); - - } - GX_EndLoadTex(); // restore the texture image slots -#endif - - G3_PolygonAttr(GX_LIGHTMASK_NONE, // Light #0 is on - GX_POLYGONMODE_DECAL, // modulation mode - GX_CULL_BACK, // cull none - 1, // polygon ID(0 - 63) - 30, // alpha(0 - 31) - GX_POLYGON_ATTR_MISC_XLU_DEPTH_UPDATE // OR of GXPolygonAttrMisc's value - ); - G3_TexImageParam(GX_TEXFMT_DIRECT, - GX_TEXGEN_TEXCOORD, // use texcoord - GX_TEXSIZE_S256, - GX_TEXSIZE_T256, - GX_TEXREPEAT_NONE, // no repeat - GX_TEXFLIP_NONE, // no flip - GX_TEXPLTTCOLOR0_USE, // use color 0 of the palette - 0x00000 // the offset of the texture image - ); - G3_Begin(GX_BEGIN_QUADS); - { - G3_TexCoord(s1 << FX32_SHIFT, t1 << FX32_SHIFT); - G3_Vtx((s16)x1, (s16)(-y1), 0); - G3_TexCoord(s1 << FX32_SHIFT, t0 << FX32_SHIFT); - G3_Vtx((s16)x1, (s16)(-y0), 0); - G3_TexCoord(s0 << FX32_SHIFT, t0 << FX32_SHIFT); - G3_Vtx((s16)x0, (s16)(-y0), 0); - G3_TexCoord(s0 << FX32_SHIFT, t1 << FX32_SHIFT); - G3_Vtx((s16)x0, (s16)(-y1), 0); - } - G3_End(); - -// G3_PolygonAttr(GX_LIGHTMASK_NONE, // Light #0 is on -// GX_POLYGONMODE_DECAL, // modulation mode -// GX_CULL_BACK, // cull none -// 2, // polygon ID(0 - 63) -// 1, // alpha(0 - 31) -// GX_POLYGON_ATTR_MISC_DEPTHTEST_DECAL // OR of GXPolygonAttrMisc's value -// ); -// G3_TexImageParam(GX_TEXFMT_DIRECT, -// GX_TEXGEN_TEXCOORD, // use texcoord -// GX_TEXSIZE_S256, -// GX_TEXSIZE_T256, -// GX_TEXREPEAT_NONE, // no repeat -// GX_TEXFLIP_NONE, // no flip -// GX_TEXPLTTCOLOR0_USE, // use color 0 of the palette -// 0x10000 // the offset of the texture image -// ); -// G3_Begin(GX_BEGIN_QUADS); -// { -// G3_TexCoord(256 * FX32_ONE, (HEIGHT/2) * FX32_ONE); -// G3_Vtx((s16)x1, (s16)y1, 0); -// G3_TexCoord(256 * FX32_ONE, 0 * FX32_ONE); -// G3_Vtx((s16)x1, (s16)y0, 0); -// G3_TexCoord(0 * FX32_ONE, 0 * FX32_ONE); -// G3_Vtx((s16)x0, (s16)y0, 0); -// G3_TexCoord(0 * FX32_ONE, (HEIGHT/2) * FX32_ONE); -// G3_Vtx((s16)x0, (s16)y1, 0); -// } -// G3_End(); - - { - OSIntrMode enabled = OS_DisableInterrupts(); - - // swapping the polygon list RAM, the vertex RAM, etc. - G3_SwapBuffers(GX_SORTMODE_MANUAL, GX_BUFFERMODE_Z); - mpCmrMgr2->setTexSwap(); - - OS_RestoreInterrupts(enabled); - } - - DrawFPS(); -} - -static void dumpWramBanks(u32 line) -{ - u32 i; - - OS_TPrintf("line %d: WramB=", line); - for (i = 0; i < 8; i++) { - OS_TPrintf(" %d", MI_GetWramBankEnable_B((s32)i)); - } - OS_TPrintf(", WramC="); - for (i = 0; i < 8; i++) { - OS_TPrintf(" %d", MI_GetWramBankEnable_C((s32)i)); - } - OS_TPrintf("\n"); -} - -#if SDK_VERSION_DATE < 20080624 -static void proc_camera_intr_() { -#else -static void cameraVsyncCallback(CAMERAResult result) { -#pragma unused( result ) -#endif -#if 1 - // Ɛ̂݌ĂԁB - mpCmrMgr2->procCameraIntr(); -#else - MenuSys()->procCameraIntr(); -#endif - - OS_SetIrqCheckFlag( OS_IE_CAMERA ); -} - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void TwlMain() -{ -// CAMERAResult result; - -#ifdef TWL_IPL_USE_RED_IPL - HOTSW_Init(); -#endif - - // - // in new.cpp: TwlStartUp() - - MenuIrqHandlerStart(logBuf, sizeof(logBuf)); - - // DEMOInitCommon(), DEMOInitVRAM(), DEMOInitDisplay3D()Ă΂Ȃ - FX_Init(); - G3X_Init(); // initialize the 3D graphics states - G3X_InitMtxStack(); // initialize the matrix stack - - // GXDMAgȂ (DMA̓JDMA̎זɂȂ) - GX_SetDefaultDMA(GX_DMA_NOT_USE); - - // VRAMNA - GX_SetBankForLCDC(GX_VRAM_LCDC_A); - GX_SetBankForLCDC(GX_VRAM_LCDC_B); - MI_CpuClearFast((void*)HW_LCDC_VRAM_A, 128 * 1024); - MI_CpuClearFast((void*)HW_LCDC_VRAM_B, 128 * 1024); - - GX_SetBankForLCDC(GX_VRAM_LCDC_C); - GX_SetBankForLCDC(GX_VRAM_LCDC_D); - MI_CpuClearFast((void*)HW_LCDC_VRAM_C, HW_VRAM_C_SIZE); - MI_CpuClearFast((void*)HW_LCDC_VRAM_D, HW_VRAM_D_SIZE); -// GX_SetBankForTex(GX_VRAM_TEX_0_C); - - - // _CNgrbg}bv\[h\ - GX_SetBankForBG(GX_VRAM_BG_256_AB); // VRAM-A,BoNafɊ蓖 - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_4, GX_BG0_AS_3D); - - G2_SetBG0Priority(2); - G3X_AntiAlias(TRUE); // enable antialias(without additional computing costs) - G3X_AlphaBlend(TRUE); // enable alpha blending - //--------------------------------------------------------------------------- - // After you start the geometry engine and the rendering one - // (by GX_SetPower etc.), G3_SwapBuffers must be called once before use - //--------------------------------------------------------------------------- - G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_Z); - G3X_SetClearColor(GX_RGB(0, 0, 0), // clear color - 0, // clear alpha - 0x7fff, // clear depth - 63, // clear polygon ID - FALSE); // fog - G3_ViewPort(0, 0, 255, 191); // Viewport - - GX_SetVisiblePlane(GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1 | GX_PLANEMASK_BG3); - - G2_SetBG1Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, - GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, GX_BG_EXTPLTT_01); - G2_SetBG1Priority(1); - G2_BG1Mosaic(FALSE); - - G2_SetBG3ControlDCBmp(GX_BG_SCRSIZE_DCBMP_256x256, GX_BG_AREAOVER_XLU, GX_BG_BMPSCRBASE_0x20000); - G2_SetBG3Priority(3); - G2_BG3Mosaic(FALSE); - - // ̓ǂݍ - { - static const GXRgb pal[16] = { GX_RGB(0, 0, 0), GX_RGB(31, 31, 31), }; - GX_LoadBG1Char(DEMOAsciiChr, 0x00000, sizeof(DEMOAsciiChr)); - GX_LoadBGPltt(pal, 0x0000, sizeof(pal)); - } -// we = TRUE; -// re = FALSE; -// wp = 0; -// rp = 1; -// tp = 0; -// wp_pending = TRUE; - -// MakeGrad(); - - // VBlank荞݂‚OɃJ}l[W𐶐ĂB -// #if 0 -// pDtcm = OS_AllocFromArenaLo(OS_ARENA_DTCM, 256*4*sizeof(u32), HW_CACHE_LINE_SIZE); -// #else -// pDtcm = (u32 *)myArena; -// #endif - OS_TPrintf("sDtcmWork=0x%x\n", &sDtcmWork); - OS_DumpArenaInfo(OS_ARENA_DTCM, TRUE); - -#if SDK_VERSION_DATE < 20080624 - OS_SetIrqFunction( OS_IE_CAMERA , proc_camera_intr_ ); -#else - // CAMERACũR[obNɕύX܂B -// OS_SetIrqFunction(OS_IE_CAMERA, proc_camera_intr_); - CAMERA_SetVsyncCallback(cameraVsyncCallback); -#endif - - // new()ĎgȂˁcnew.cppljŎgI - mpCmrMgr2 = new cmn::sys::cmr2::Manager(); - -#if 0 - // old - - // 荞݂‚ĂȂƃ_H - mpCmrMgr2->init(cmn::sys::cmr2::eMode_Tex, current, - /*GX_VRAM_A, GX_VRAM_B,*/GX_VRAM_C, GX_VRAM_D, &sDtcmWork, drawTexture); - mpCmrMgr2->activate(); - - mpCmrMgr2->setShutterSnd(_binary_camera_shutter_dat, - (u32)(_binary_camera_shutter_dat_end - _binary_camera_shutter_dat), - TRUE); -#endif - - mpCmrMgr2->preInit(); -// mpCmrMgr2->setCaptureRgbFlag(TRUE); - -// // stereo -// mpCmrMgr2->setShutterSnd(_binary_camera_shutter_dat, -// (u32)(_binary_camera_shutter_dat_end - _binary_camera_shutter_dat), -// TRUE); - -// // mono -// mpCmrMgr2->setShutterSnd(_binary_camera_shutter_MONO_dat, -// (u32)(_binary_camera_shutter_MONO_dat_end - _binary_camera_shutter_MONO_dat), -// FALSE); - - if (1) { -// mpCmrMgr2->setOneShotFlag(TRUE); - } - - - - - // VuN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)OS_EnableIrq(); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableInterrupts(); - - // SD - FS_Init( FS_DMA_NOT_USE ); - -#if 1 - // demos.TWL/snd/extraFunc - /* TEh */ - SND_Init(); - SND_AssignWaveArc((SNDBankData*)sound_bank_data, 0, (SNDWaveArc*)sound_wave_data); - SND_StartSeq(0, sound_seq_data, 0, (SNDBankData*)sound_bank_data); -#endif - - /* TEhg@\ */ - SNDEX_Init(); - - OS_WaitIrq(TRUE, OS_IE_V_BLANK); - GX_DispOn(); - -// OS_TPrintf("sizeof testEncodeWork=%d\n", sizeof(cmn::sys::cmr2::Manager::testEncodeWork)); -// OS_TPrintf("ticks/1000usec = %lld\n", (u64)OS_MicroSecondsToTicks(1000)); -// -// { -// OSTick tick; -// BOOL flag = FALSE; -// -// tick = OS_GetTick(); -// mpCmrMgr2->preInit(); -// -// // 1bpreInit͏IƂ -// OS_Sleep(1000); -// -// tick = OS_GetTick(); -// // {initɂ鎞Ԃ́H -// mpCmrMgr2->init(cmn::sys::cmr2::eMode_Tex, current, GX_VRAM_C, GX_VRAM_D, &sDtcmWork, drawTexture); -// -// while (1) { -// OS_Sleep(5000); -// if (!flag) { -// flag = TRUE; -// OS_TPrintf("main loop ok, tick before init=%lld\n", (u64)tick); -// } -// } -// } - - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - MI_FreeWram_B ( MI_WRAM_ARM9 ); - MI_CancelWram_B( MI_WRAM_ARM9 ); - MI_FreeWram_C ( MI_WRAM_ARM9 ); - MI_CancelWram_C( MI_WRAM_ARM9 ); - - // for DSP_PlaySound() ? - // DSP_InitPipe(); - /* vON */ -#if 1 - // JPEG DECƕpłȂI - FSFile file[1]; - DSP_OpenStaticComponentJpegEncoder(file); - if(!DSP_LoadJpegEncoder(file, 0xff, 0xff)) - { - // WramB= 1 1 1 0 0 0 0 0, WramC= 1 1 1 1 0 0 0 0 - OS_TPanic("failed to load JpegEncoder DSP-component! (lack of WRAM-B/C)"); - } -#endif - dumpWramBanks(__LINE__); -#if 0 - // JPEG ENCƕpłȂI - if(!DSP_LoadJpegDecoder()) - { - // WramB= 1 1 0 0 0 0 0 0, WramC= 1 1 1 1 0 0 0 0 - OS_TPanic("failed to load JpegDecoder DSP-component! (lack of WRAM-B/C)"); - } - dumpWramBanks(__LINE__); -#endif -#if 0 - // JPEGƕpłȂI - if (!DSP_LoadShutter()) { - // WramB= 1 0 0 0 0 0 0 0, WramC= 1 0 1 1 0 0 0 0 - OS_TPanic("failed to load Shutter DSP-component! (lack of WRAM-B/C)"); - } -#endif -#else - dumpWramBanks(__LINE__); -#endif - - - - OS_WaitVBlankIntr(); - - while (1) - { - u16 pad; - u16 trg; - static u16 old = 0xffff; - static BOOL refresh = FALSE; - -// static const u32 myTexGrad0Addr = 0x2000; -// static const u32 myTexGrad1Addr = 0x3000; - - - /* TEhC */ - while (SND_RecvCommandReply(SND_COMMAND_NOBLOCK) != NULL) - { - } - (void)SND_FlushCommand(SND_COMMAND_NOBLOCK); - -#if 1 -// // more than 1 frame -// OS_WaitIrq(TRUE, OS_IE_V_BLANK); - OS_WaitVBlankIntr(); -#else - // keep AHB busy - OS_ClearIrqCheckFlag(OS_IE_V_BLANK); - while (!(OS_GetIrqCheckFlag() & OS_IE_V_BLANK)) { - u32 wordIdx; - wordIdx = (wordIdx + 0x11) & 0x1fff; - gWords[wordIdx]++; - } -#endif - GX_LoadBG1Scr(text_buffer, 0, sizeof(text_buffer)); - - - pad = PAD_Read(); - trg = (u16)(pad & ~old); - old = pad; - - { - static BOOL initialized; - static BOOL destroying; - - if (!initialized && (trg || 1)) { - initialized = TRUE; - mpCmrMgr2->init(cmn::sys::cmr2::eMode_Tex, current, GX_VRAM_C, GX_VRAM_D, &sDtcmWork, drawTexture); - - mpCmrMgr2->startCapture(current); - } - - if (!destroying) { - if (trg & PAD_BUTTON_START) { - destroying = TRUE; - } - } else { - if (!mpCmrMgr2->tryDestroy()) { - IPL_PRINT("waiting for destroy...\n"); - } else { - IPL_PRINT("destroy done!\n"); - destroying = FALSE; - initialized = FALSE; - } - } - if (!initialized || destroying) { - // ̌̃{^`FbN(BeJ؂ւ)sȂB - continue; - } - } - - - - if (PAD_DetectFold()) { - // Lv`~āA~mFĂ - // X[v[hֈڍs悤ɂȂƁA - // cameraIntr: status error - // cameraIntr: status error - // ƁA2G[ɂȂ悤B - - if (mpCmrMgr2->tryPrepareToSleep()) { - PM_GoSleepMode(PM_TRIGGER_COVER_OPEN, PM_PAD_LOGIC_AND, 0); - } else { - IPL_PRINT("waiting for ready to sleep...\n"); - } - } - -// if (trg & PAD_BUTTON_B) { -// // test -// OS_TPrintf("force stop dma\n"); -// MI_StopNDma(CAMERA_NEW_DMA_NO); -// } -// if (trg & PAD_BUTTON_Y) { -// // test -// OS_TPrintf("force long dma\n"); -// sLongDmaFlag = TRUE; -// } - - if (!mpCmrMgr2->isCameraChanging()) { - if (trg & PAD_BUTTON_X) { - mpCmrMgr2->changeCamera(); - } else if (pad & PAD_BUTTON_SELECT) { - static u8 r; - - r += 1; - if (!(r & 3)) { - mpCmrMgr2->changeCamera(); - } - } - } - - - if (trg & (PAD_BUTTON_A | PAD_BUTTON_B)) { -#ifndef TWL_IPL_FINAL - mpCmrMgr2->mDebugPort = __LINE__; -#endif -// SNDEX_SetDSPMixRate( 0 ); -// SNDEX_ForceOut( TRUE ); -// -// if (trg & PAD_BUTTON_A) { -// DSP_PlaySound(const_cast(_binary_camera_shutter_dat), -// (u32)(_binary_camera_shutter_dat_end - _binary_camera_shutter_dat) / 2, -// TRUE); -// } else { -// DSP_PlaySound(const_cast(_binary_wheel_dat), -// (u32)(_binary_wheel_dat_end - _binary_wheel_dat) / 2, -// TRUE); -// } - -// #if 0 -// // test -// CAMERA_SetLED(TRUE); -// #endif - - - IPL_PRINT("shoot()=%d\n", mpCmrMgr2->shoot()); - } - - -// if (re) { -// OSTick begin = OS_GetTick(); -// // ẙԈoȂ̂ŁA480 linesȂ156*3 linesƂĂB -// // Ƃ̂ւKB -// rp = (u8)(wp ^ 1); -// Shrink640to208(buffer[rp ? 0 : 1], 156*3/*480*/, pDtcm, (u16*)(rp ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C) /*buffer[2]*/); -// we = TRUE; -// // CpuYuv2Rgb666(buffer[2], (u16*)(wp ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C), (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 1); -// OS_Printf("total(exp) = %d us\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - begin)); -// DrawFPS(); -// } - -// -// if (refresh) { -// // GX_LoadBG3Scr( buffer[rp], 0, BYTES_PER_LINE * HEIGHT); -// GX_DisableBankForTex(); -// GX_SetBankForTex(rp ? GX_VRAM_TEX_0_D : GX_VRAM_TEX_0_C); -// GX_SetBankForLCDC(rp ? GX_VRAM_LCDC_C : GX_VRAM_LCDC_D); -// refresh = FALSE; -// } -// -// if (!we && !sNowConvert) -// { -// // ςȂƂɂȂ肻Ƃ肠B -// // CPUɂYUV->RGBϊs -// // DC_InvalidateRange( buffer[wp], BYTES_PER_LINE * HEIGHT); -// DC_FlushAll(); -// -// // RGB666͈UB -// // if (mode || 1) { -// // OSTick begin = OS_GetTick(); -// // u32 ret; -// // // eNX`C[WXbg̔A‚܂ʂ̏㔼ȂB -// // GX_SetBankForLCDC((wp) ? GX_VRAM_LCDC_D : GX_VRAM_LCDC_C); -// // #if 1 -// // ret = CpuYuv2Rgb666(buffer[wp], (void *)((wp) ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C), (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// // // OS_Printf("total(666) = %d us, ret=0x%08x\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - begin), ret); -// // #else -// // ret = CpuYuv2Rgb666(buffer[wp], buffer[wp] + (WIDTH*HEIGHT) / 2, (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// // OS_Printf("%04x %04x %04x %04x %04x %04x %04x %04x ret=%08x\n", -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 0], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 1], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 2], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 3], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 4], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 5], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 6], -// // buffer[wp][(WIDTH*HEIGHT) / 2 + 7], -// // ret); -// // #endif -// // } -// /*else*/ -// { -// -// #if 1 -// #if 0 -// // 킹ĉɁB -// CpuYuv2Rgb( buffer[wp], buffer[wp] + (WIDTH*HEIGHT) / 2, (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// MI_CpuFillFast((void *)buffer[wp], 0, sizeof(u16) * (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// #else -// OSTick begin = OS_GetTick(); -// // CpuYuv2Rgb666(buffer[wp], buffer[wp] + (WIDTH*HEIGHT) / 2, (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// -// // Œf[^ -// Shrink640to208(buffer[wp]/* b_dat*/, (u16*)(wp ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C) /*buffer[wp]*/, 96 * 3, pDtcm); -// // Shrink640to208(buffer[wp]/* b_dat*/, buffer[2], 96 * 3, pDtcm); -// // CpuYuv2Rgb666(buffer[2], (u16*)(wp ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C), (u32)(HW_LCD_WIDTH*HW_LCD_HEIGHT) / 2); -// -// OS_Printf("total(exp) = %d us\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - begin)); -// #endif -// #endif -// } -// -// // DC_FlushRange( buffer[wp], BYTES_PER_LINE * HEIGHT); -// // DC_FlushRange((void *)((wp) ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C), BYTES_PER_LINE * HEIGHT); -// // DC_StoreAll(); -// -// rp = wp; -// refresh = TRUE; -// we = TRUE; -// } -// - - - - if (mpCmrMgr2->isShotDone()) { -// #if 1 -// // test -// CAMERA_SetLED(FALSE); -// #endif - OS_TPrintf("SHOT DONE!\n"); - // check error mShotErr - - // anything to process ? - mpCmrMgr2->clearShotDone(); - - if (!mpCmrMgr2->getOneShotFlag()) { - mpCmrMgr2->startCapture(current); - } - -// SNDEX_SetDSPMixRate( 8 ); -// SNDEX_ForceOut( FALSE ); - - } else { - // (trg)ɂƃJ؂ւƂłȂȂB - if (mpCmrMgr2->getOneShotFlag() && (trg & PAD_BUTTON_Y)) { - mpCmrMgr2->startCapture(current); - } - } - -// { -// -// if (re) { -// re = FALSE; -// tp = rp; -// } -// -// } - - } -} - -/*---------------------------------------------------------------------------* - Name: uuN荞ݏ - - Description: - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void VBlankIntr(void) -{ - mpCmrMgr2->procVBlankIntr(); - - -// if (tp == rp) { -// GX_DisableBankForTex(); -// GX_SetBankForTex( tp ? GX_VRAM_TEX_0_D : GX_VRAM_TEX_0_C); -// GX_SetBankForLCDC(tp ? GX_VRAM_LCDC_C : GX_VRAM_LCDC_D); -// } - - OS_SetIrqCheckFlag(OS_IE_V_BLANK); // checking VBlank interrupt -} - -// static void CameraIntr2(void) -// { -// u32 nwp = wp; -// -// // ƃG[ĂȂǁc -// if (CAMERA_GetErrorStatus()) { -// OS_TPrintf("Error!\n"); -// CAMERA_StopCapture(); -// CAMERA_ClearBuffer(); -// MI_StopNDma(CAMERA_NEW_DMA_NO); -// CAMERA_StartCapture(); -// } else { -// if (MI_IsNDmaBusy(CAMERA_NEW_DMA_NO)) { -// static u32 count; -// OS_TPrintf("DMA was not done until VBlank.%d\n", count++); -// MI_StopNDma(CAMERA_NEW_DMA_NO); -// } else { -// if (reading) { -// re = TRUE; -// if (we) { -// we = FALSE; -// wp ^= 1; -// } -// } -// } -// } -// -// if (sLongDmaFlag) { -// sLongDmaFlag = FALSE; -// CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT + 1), /*(MINDmaCallback)NDmaDummyIntr*/NULL, NULL); -// } else { -// CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), /*(MINDmaCallback)NDmaDummyIntr*/NULL, NULL); -// } -// reading = TRUE; -// -// -// // OS_SetIrqCheckFlag(OS_IE_CAMERA); // checking camera interrupt -// // -// // if (mError) { -// // CAMERA_ClearBuffer(); -// // mError = FALSE; -// // } else { -// // if (CAMERA_GetErrorStatus() -// // /*|| -// // (OS_GetIrqMask() & (OS_IE_NDMA0 << CAMERA_NEW_DMA_NO))*/) { -// // // error -// // OS_TPrintf("line %d %x\n", __LINE__, (OS_GetIrqMask() & (OS_IE_NDMA0 << CAMERA_NEW_DMA_NO))); -// // -// // CAMERA_StopCapture(); -// // MI_StopNDma(CAMERA_NEW_DMA_NO); -// // // OS_DisableIrqMask(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO); -// // mError = TRUE; -// // return; -// // } -// // -// // if (mLastState == eStt_Capture) { -// // // OS_EnableIrqMask(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO); -// // return; -// // } -// // } -// // -// // switch (mState) { -// // case eStt_Capture: -// // CAMERA_StartCapture(); -// // // reg_OS_IF = OS_IE_NDMA0 << CAMERA_NEW_DMA_NO; -// // // callbackw肵ȂƁAmi_ndma.c -// // // //---- set interrupt enable -// // // if ( callback ) -// // // { -// // // contData |= MI_NDMA_IF_ENABLE; -// // // } -// // // ƂȂĂ̂Ŋ荞݂ȂB -// // -// // // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[0], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), (MINDmaCallback)NDmaDummyIntr, NULL); -// // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[0], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), (MINDmaCallback)NDmaIntr, NULL); -// // break; -// // -// // default: -// // break; -// // } -// // -// // mLastState = mState; -// -// // DrawFPS(); -// } -// -// // static void NDmaIntr(void) -// // { -// // OS_SetIrqCheckFlag(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO); -// // -// // if (mError) { -// // // captured data is broken -// // } else { -// // // ϊXbhɃbZ[W𑗂B -// // -// // mLastState = mState; -// // switch (mState) { -// // case eStt_Capture: -// // // \pLv`pB -// // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[0], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), (MINDmaCallback)NDmaIntr, NULL); -// // break; -// // -// // default: -// // // Ƃ肠ȊO̓Lv`~B -// // CAMERA_StopCapture(); -// // break; -// // } -// // OS_TPrintf("Send message!\n"); -// // -// // } -// // -// // // OS_DisableIrqMask(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO); -// // } - -static void NDmaDummyIntr(void) -{ -// // camera-2/main.c: CameraDmaIntr()ŁAꂪsĂB -// // 𔲂̂܂Ȃł͂ȂB -// // OS_SetIrqCheckFlag(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO); -// -// // camera-2/main.c: CameraDmaIntr()ŁAꂪsĂB -// // cIŃZbg֐́AHǂȂƂH -// // ACAMERA_DmaRecv*()callbackł͂ȂAʕȂ̂IH -// // callback͖line񂾂ˁH -// OS_SetIrqFunction(OS_IE_NDMA0 << CAMERA_NEW_DMA_NO, NDmaDummyIntr); // for next interrupt - -} - - -// /*---------------------------------------------------------------------------* -// Name: J荞ݏ (G[Vsync̗Ŕ) -// -// Description: -// -// Arguments: None -// -// Returns: None -// *---------------------------------------------------------------------------*/ -// void CameraIntr(void) -// { -// int nwp = 2; -// OS_SetIrqCheckFlag(OS_IE_CAMERA); // checking camera interrupt -// -// if (CAMERA_GetErrorStatus()) -// { -// OS_TPrintf("Error was occurred.\n"); -// // ~ -// CAMERA_StopCapture(); // J~ -// CAMERA_ClearBuffer(); // NA -// MI_StopNDma(CAMERA_NEW_DMA_NO); // DMA~ -// wp_pending = TRUE; // t[gp -// startRequest = TRUE; // JĊJv -// return; // waiting next frame (skip current frame) -// } -// -// // ȍ~Vsync̏ -// -// if (startRequest) -// { -// CAMERA_ClearBuffer(); -// CAMERA_StartCapture(); -// startRequest = FALSE; -// } -// -// if (CAMERA_IsBusy() == FALSE) // done to execute stop command? -// { -// //OS_TPrintf("while stopping the capture or just finished\n"); -// } -// else -// { -// if (MI_IsNDmaBusy(CAMERA_NEW_DMA_NO)) // NOT done to capture last frame? -// { -// OS_TPrintf("DMA was not done until VBlank.\n"); -// MI_StopNDma(CAMERA_NEW_DMA_NO); // DMA~ -// // return; // waiting next frame (skip current frame) -// } -// // start to capture for next frame -// if (wp_pending) -// { -// wp_pending = FALSE; -// } -// else -// { -// // XVobt@ύX -// if (we) { -// nwp = wp; -// wp ^= 1; -// we = FALSE; -// } -// -// // #ifdef CONVERT_WITH_DSP -// // // DSPɂYUV->RGBϊs -// // sNowConvert = TRUE; -// // DSP_Yuv2RgbConvertAsync(buffer[rp ^ 1], buffer[rp ^ 1], (WIDTH*HEIGHT*2), Yuv2rgbCallback); -// // #else -// // // CPUɂYUV->RGBϊs -// // DC_InvalidateRange( buffer[rp ^ 1], BYTES_PER_LINE * HEIGHT); -// // GX_SetBankForLCDC((rp ^ 1) ? GX_VRAM_LCDC_D : GX_VRAM_LCDC_C); -// // CpuYuv2Rgb666(buffer[rp ^ 1], (void *)((rp ^ 1) ? HW_LCDC_VRAM_D : HW_LCDC_VRAM_C), (u32)(WIDTH*HEIGHT) ); -// // CpuYuv2Rgb( buffer[rp ^ 1], buffer[rp ^ 1], (u32)(WIDTH*HEIGHT) ); -// // #endif -// } -// -// // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), NULL, NULL); -// // Ȃ -// // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH)/LINES_SPLIT, CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), NULL, NULL); -// // Ȃ́H -// // CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), NULL, NULL); -// CAMERA_DmaRecvAsync(CAMERA_NEW_DMA_NO, buffer[nwp], CAMERA_GetBytesAtOnce(WIDTH), CAMERA_GET_FRAME_BYTES(WIDTH, HEIGHT), (MINDmaCallback)CameraIntr, NULL); -// } -// -// // frame rate print -// // 荞݂ł͉悤B -// // DrawFPS(); -// } - -/*---------------------------------------------------------------------------* - Name: PutString - - Description: - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void PutString( char *format, ... ) -{ - u16 *dest = text_buffer; - char temp[32+1]; - int i; - va_list va; - - va_start(va, format); - (void)OS_VSNPrintf(temp, sizeof(temp), format, va); - va_end(va); - - MI_CpuClearFast(text_buffer, sizeof(text_buffer)); - for (i = 0; i < 32 && temp[i]; i++) - { - dest[i] = (u16)((u8)temp[i] | (0 << 12)); - } - DC_StoreRange(text_buffer, sizeof(text_buffer)); -} - -/*---------------------------------------------------------------------------* - Name: DrawFPS - - Description: FPS\܂B - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -static void DrawFPS(void) -{ -#define FPS_SAMPLES 4 - static OSTick begin = 0; - static int uspf[FPS_SAMPLES] = { 0 }; - static int count = 0; - // 0123456789abcdef - static u8 star[16 + 1] = " "; - static u8 starIdx; - int i; - int sum = 0; - OSTick end = OS_GetTick(); - if (begin) // - { - uspf[count] = (int)OS_TicksToMicroSeconds(end - begin); - count = (count + 1) % FPS_SAMPLES; - } - begin = end; - // ϒl̎Z - for (i = 0; i < FPS_SAMPLES; i++) - { - if (uspf[i] == 0) break; - sum += uspf[i]; - } - star[starIdx] = ' '; - star[starIdx ^ 8] = ' '; - starIdx = (u8)((starIdx + 1) & 0xf); - star[starIdx] = '*'; - star[starIdx ^ 8] = '*'; - star[16] = '\0'; - if (1 || sum) - { - int mfps = (int)(1000000000LL * i / sum); - PutString("%2d.%03d fps %s", mfps / 1000, mfps % 1000, star); - } -} - -// /*---------------------------------------------------------------------------* -// Name: Yuv2rgbCallback -// -// Description: YUV->RGBϊɌĂяoR[obN -// -// Arguments: None -// -// Returns: None -// *---------------------------------------------------------------------------*/ -// static void Yuv2rgbCallback(void) -// { -// sNowConvert = FALSE; -// } -// -// - -// namespace cmn { namespace sys { namespace cmr2 -// { -// void* Manager::dspAlloc_( u32 size ) { -// #pragma unused(size) -// // this function must not be called by SDK -// OS_TPanic("dspAlloc_\n"); -// return NULL; -// } -// -// void Manager::dspFree_( void* p_ptr ) { -// #pragma unused(p_ptr) -// // this function is always called by SDK -// return; -// } -// -// }}} diff --git a/build/tests/yuv2rgb/src/menuCameraManager.cpp b/build/tests/yuv2rgb/src/menuCameraManager.cpp deleted file mode 100644 index 8db5e723..00000000 --- a/build/tests/yuv2rgb/src/menuCameraManager.cpp +++ /dev/null @@ -1,2453 +0,0 @@ -// TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECTɂ‚ -// `[ł͏ɖ`łB -// ̎茳ōsĂJɓJvWFNg -// \[Xp邽߁A֑gݍ܂鎞̂ݒ`܂B - -// cmnCameraManager.cpp֎ĂB - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else -#include "menu.h" -//#include "cmnJpegManager.h" -#include "cmnFile.h" -//#include "cmnImageSampling.h" -#include "menuImageSampling.h" -#endif - - -#include -#include -#include "menuCameraManager.h" -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -#include -#include -#else -#include -#include -#endif - -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -// #else -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -// #include "menuDspManager.h" -// #endif -// #endif - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -extern "C" { -// build/libraries/dsp/ARM9.TWL/src/dsp_jpeg_enc.c -extern u16 *DSPFrame_y; -extern u16 *DSPFrame_cb; -extern u16 *DSPFrame_cr; -} /* extern "C" */ -#endif - -#if SDK_VERSION_DATE < 20080630 -#else -/*! - JVsyncR[obN - */ -static void proc_camera_vsync_callback( CAMERAResult result ) -{ -#pragma unused( result ) -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - { - extern cmn::sys::cmr2::Manager* mpCmrMgr2; - mpCmrMgr2->procCameraIntr(); - } -#else - MenuSys()->getCmrMgr2()->procCameraIntr(); -#endif -} -#endif - -namespace cmn { namespace sys { namespace cmr2 -{ - vu8 Manager::mCaptureFlag; - vu8 Manager::mNextCaptureFlag; - vu8 Manager::mShotFlag; - vu8 Manager::mNextShotFlag; - vu8 Manager::mCurLedBlink; - volatile CAMERASelect Manager::mSelCmr; - volatile CAMERASelect Manager::mNextCmr; - volatile cameraState Manager::mCmrCurState[cCameraMax]; - volatile cameraState Manager::mCmrNextState[cCameraMax]; - OSMessage Manager::mI2cAsyncMsgBuf[1]; - OSMessageQueue Manager::mI2cAsyncMsgQueue; - -/*! - RXgN^ - */ -Manager::Manager() : -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - // no Heap -#else - mpHeap( NULL ), -#endif - mShowWdt( cDefaultShowWidth ), - mShowHgt( cDefaultShowHeight ), - mShotWdt( cDefaultShotWidth ), - mShotHgt( cDefaultShotHeight ), - mLedKeepFlag( FALSE ), - mOneShotFlag( FALSE ), - mEncodeBusyFlag( FALSE ), - mPreInitFlag( FALSE ), - mInitFlag( FALSE ), - mpCaptureBuf( NULL ), - mpConvBuf( NULL ), - mpNextConvBuf( NULL ), - mpShotBuf( NULL ), - mI2cBusy( FALSE ), - mTexSwap( FALSE ), - mTexBank( GX_VRAM_TEX_NONE ), - mNextTexBank( GX_VRAM_TEX_NONE ), - mpEncodeWork(NULL) -{ - u32 i; - - // manager default value - for (i = 0; i < cCameraMax; i++) { - mCmrNextState[i].mContext = CAMERA_CONTEXT_B; - // t[[gAJɕێĂB - mCmrNextState[i].mFrameRate = CAMERA_FRAME_RATE_20; - } - - for (i = 0; i < cBufferCount; i++) { - mIsCapBufUsed[i] = FALSE; - mpCapBuf[i] = NULL; - } - - mSelCmr = mNextCmr = CAMERA_SELECT_NONE; - mCaptureFlag = mNextCaptureFlag = mShotFlag = mNextShotFlag = FALSE; - mCurLedBlink = FALSE; - - // ͂̃^C~OŊmɍsĂB - OS_InitEvent(&mLowerEvent); - - setCaptureRgbFlag( FALSE ); - -// TwlSDK/build/libraries/mi/common.TWL/src/mi_ndma.c: -// #define CAMERA_DMA_BLOCK_SIZE MI_NDMA_BWORD_16 -// #define CAMERA_DMA_INTERVAL 2 -// #define CAMERA_DMA_PRESCALER MI_NDMA_INTERVAL_PS_1 - MI_GetNDmaConfig(cDefaultDmaNo, &mDmaConfig); - mDmaConfig.intervalTimer = 2; // CAMERA_DMA_INTERVAL - mDmaConfig.prescaler = MI_NDMA_INTERVAL_PS_1; // CAMERA_DMA_PRESCALER; - // blockWord16jackal (hyena)gp̏A - // yuv2rgbɂāA32Ȃ64Ƃ̍͊ȂB - // `[֑gݍł݂ƁA3264̕ȂB - // 64ɂB - mDmaConfig.blockWord = MI_NDMA_BWORD_16; // MI_NDMA_BWORD_64; // CAMERA_DMA_BLOCK_SIZE; - -} - - -/*! - fXgN^ - */ -Manager::~Manager() -{ - while (!tryDestroy()) { - OS_Sleep(1); - } -} - - -/*! - JsB - ̊IȃJNԂZk邽߁A{̎O - (q[vKvƂȂ)܂ōsB - J̓X^oCɁB - Ă΂ȂĂǂB - */ -void Manager::preInit( u32 show_w, u32 show_h, u32 shot_w, u32 shot_h ) -{ - // preInit()͕ӏĂ΂Ăǂ悤ɂĂB - { - OSIntrMode enabled = OS_DisableInterrupts(); - - if (mPreInitFlag) { - OS_RestoreInterrupts(enabled); - return; - } - mPreInitBusyFlag = TRUE; - mPreInitFlag = TRUE; - OS_RestoreInterrupts(enabled); - } - - mShowWdt = show_w; - mShowHgt = show_h; - mShotWdt = shot_w; - mShotHgt = shot_h; - -// setShutterSnd(NULL, 0, FALSE); - - // ȌIvcĂ邩ȂB - // vȊOACxg̓NAĂB - OS_ClearEvent(&mLowerEvent, (u32)(cEventMaskLower_All & ~cEventMaskLower_EnableIntrAndPrepareBuffer)); - - OS_InitMessageQueue(&mI2cMsgQueue, mI2cMsgBuf, sizeof(mI2cMsgBuf) / sizeof(*mI2cMsgBuf)); - OS_InitMessageQueue(&mI2cAsyncMsgQueue, mI2cAsyncMsgBuf, sizeof(mI2cAsyncMsgBuf) / sizeof(*mI2cAsyncMsgBuf)); - OS_CreateThread(&mLowerThread, procLower_, this, - mLowerThreadStack + (sizeof(mLowerThreadStack) / sizeof(*mLowerThreadStack)), - sizeof(mLowerThreadStack), - menu::sys::Object::cThreadPriority_CameraLowerLo); - OS_CreateThread(&mI2cThread, procI2c_, this, - mI2cThreadStack + (sizeof(mI2cThreadStack) / sizeof(*mI2cThreadStack)), - sizeof(mI2cThreadStack), - menu::sys::Object::cThreadPriority_CameraI2c); - OS_WakeupThreadDirect(&mLowerThread); - OS_WakeupThreadDirect(&mI2cThread); -} - - -/*! - JCȕ - @param p_heap q[v - @param mode \[h - @param sel_cmr IꂽJ - @param vram1 _uobt@VRAM1 - @param vram2 _uobt@VRAM2 - @param show_w \ (Ƃ肠208̂) - @param show_h \ (Ƃ肠156̂) - @param shot_w Be (Ƃ肠640̂) - @param shot_h Be (Ƃ肠480̂) - */ -void Manager::init( -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - // no Heap -#else - sys::Heap* p_heap , -#endif - int mode , CAMERASelect sel_cmr , int vram1 , int vram2 , - cmn::sys::cmr2::dtcmWork* pDtcmWork , - void (*gx_user_proc)(u8* vramAddr, BOOL shot) , - u32 show_w , u32 show_h , u32 shot_w , u32 shot_h ) -{ - if (mInitFlag) { - return; - } - mInitBusyFlag = TRUE; - mInitFlag = TRUE; - - preInit(show_w, show_h, shot_w, shot_h); - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - // no Heap -#else - mpHeap = p_heap; -#endif - - mpDtcmWork = pDtcmWork; - mTarget = 0; - mpCaptureBuf = NULL; - mpConvBuf = NULL; - mpNextConvBuf = NULL; - mpShotBuf = NULL; - // ŏɏ̂vram1ŁAłɏς݂̂̂vram2 - // ƂB - mTexBank = GXVRamTex(vram2); - mNextTexBank = 0; - mCaptureFlag = FALSE; - mShotFlag = FALSE; - mNextCaptureFlag = FALSE; - mNextShotFlag = FALSE; - mShotDone = FALSE; - mShotErr = 0; - mpGxUserProc = gx_user_proc; -#ifndef TWL_IPL_FINAL - mDebugPort = 0; -#endif - - mTexSwap = FALSE; - mFirstPictureReady = FALSE; - - mCaptureSkipCount = 0; - mCaptureRetryCount = 0; - - mVramType[ 0 ] = vram1; - mVramType[ 1 ] = vram2; - - // vram2 == 0 ȂVOobt@ɂ΂̂ł́H - for ( int i = 0 ; i < 2; ++ i ) - { - switch ( mVramType[ i ] ) - { - case GX_VRAM_A: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_A ); break; - case GX_VRAM_B: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_B ); break; - case GX_VRAM_C: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_C ); break; - case GX_VRAM_D: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_D ); break; - case GX_VRAM_E: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_E ); break; - case GX_VRAM_F: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_F ); break; - case GX_VRAM_G: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_G ); break; - case GX_VRAM_H: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_H ); break; - case GX_VRAM_I: mVramAddr[ i ] = reinterpret_cast< u8* > ( HW_LCDC_VRAM_I ); break; - default: IPL_ASSERT( 0 ); break; - } - } - - mMode = mode; - mNextCmr = sel_cmr; - - mGxDma = GX_GetDefaultDMA(); - // GXDMAgȂ (DMA̓JDMA̎זɂȂ) - // ŁA–߂́H - GX_SetDefaultDMA(GX_DMA_NOT_USE); - - OS_SignalEvent(&mLowerEvent, - cEventMaskLower_EnableIntrAndPrepareBuffer); -} - - -void Manager::procLower() -{ - u32 event; - BOOL initDone = FALSE; - CAMERAResult camResult; - u32 i; - BOOL shot; - - while (TRUE) { - if (!initDone) { -#if SDK_VERSION_DATE < 20080630 - // CAMERACuĂȂƂOȂ̂ŁA - // setInterrupt()͎gȂB - OS_DisableIrqMask(OS_IE_CAMERA); -#else - // OS_IE_CAMERACAMERACunhOB -#endif - // d̂ŒDxŁB - camResult = CAMERA_Init(); - if (camResult != CAMERA_RESULT_SUCCESS) { - // Ƃ肠 - IPL_HALT("CAMERA_Init() error %d\n", camResult); - OS_TPanic(""); - // NEVER REACH HERE - } - initDone = TRUE; - - // SDK default value - mSelCmr = CAMERA_SELECT_NONE; - for (i = 0; i < cCameraMax; i++) { - mCmrCurState[i].mContext = CAMERA_CONTEXT_A; - mCmrCurState[i].mFrameRate = CAMERA_FRAME_RATE_15; - } - mCurLedBlink = FALSE; - // I2Ceݒ胊NGXgMB - // DxXbhAsyncB - OS_SendMessage(&mI2cMsgQueue, (OSMessage)cMsgI2c_AfterInit, OS_MESSAGE_BLOCK); - } - - event = OS_WaitEventEx_Or(&mLowerEvent, cEventMaskLower_All, cEventMaskLower_All); -// IPL_PRINT("event=0x%02x\n", event); - - if (event & cEventMaskLower_Destroy) { - break; - } - if (event & cEventMaskLower_EnableIntrAndPrepareBuffer) { - // J荞݂LɂB - setInterrupt(TRUE); - prepareBuffer(); - // ͏IB - mInitBusyFlag = FALSE; - } - if (event & cEventMaskLower_Activate) { - if (mSelCmr == CAMERA_SELECT_NONE && mNextCmr != CAMERA_SELECT_NONE) { - // CAMERA_SELECT_NONEݒ莞́ACAM_VSYNC͔Ȃ̂ - // kickB - // JNt[̊Ԃ͉摜肵Ȃ̂ŃLv`~B - mCaptureSkipCount = 1; - OS_SendMessage(&mI2cMsgQueue, (OSMessage)cMsgI2c_Activate, OS_MESSAGE_BLOCK); - } - } - shot = FALSE; - if ((event & cEventMaskLower_Convert) || mpNextConvBuf) { - shot = convert((BOOL)(event & cEventMaskLower_Shot)); - } - if (shot) { - // ϊȂŎBê݂ƂA - // BeɃLv`p邱Ƃɂ́A܂ΉĂȂB - mEncodeBusyFlag = TRUE; - encodeAndSave(); - mEncodeBusyFlag = FALSE; - } - if (event & cEventMaskLower_DisableIntrAndDestroyBuffer) { - // ̃Cxg͘A”\B - if (mInitFlag) { - // J荞݂𖳌ɂB - setInterrupt(FALSE); - destroyBuffer(); - MI_StopNDma(cDefaultDmaNo); - // ďKvB - mInitFlag = FALSE; - } - } - } - - // I2CXbhI (BLOCK) - OS_SendMessage(&mI2cMsgQueue, (OSMessage)cMsgI2c_Destroy, OS_MESSAGE_BLOCK); - OS_JoinThread(&mI2cThread); - - CAMERA_End(); - - GX_SetDefaultDMA(mGxDma); -} - - -void Manager::procI2c() -{ - OSMessage msg; - CAMERAResult camResult; - - while (TRUE) { - OS_ReceiveMessage(&mI2cMsgQueue, &msg, OS_MESSAGE_BLOCK); -// IPL_PRINT("I2c msg=%d\n", msg); - if (!msg) { - break; - } - - mI2cBusy = TRUE; - - switch ((u32)msg) { - case cMsgI2c_AfterInit: - CAMERA_SetOutputFormat(mCaptureRgbFlag ? CAMERA_OUTPUT_RGB : CAMERA_OUTPUT_YUV); - CAMERA_SetTrimming(FALSE); - // TrimmingFALSEȂ̂TrimmingParams͖B - mShowTransferLines = (int)CAMERA_GET_MAX_LINES(mShowWdt); - mShotTransferLines = (int)CAMERA_GET_MAX_LINES(mShotWdt); - // ͉𑜓x؂ւłȂ̂ŁAmShowWdtȂmShotWdtŁB - CAMERA_SetTransferLines(mShotTransferLines); - - camResult = i2cSetupOthers(); - // ʂ͂ƂAs͏IB - mPreInitBusyFlag = FALSE; - if (camResult != CAMERA_RESULT_SUCCESS) { - // ܂B - IPL_HALT("not yet %d\n", camResult); - // TWL_IPL_FINALł̓X[[ - OS_TPanic(""); - } - - break; - - case cMsgI2c_Activate: - camResult = i2cActivate(mNextCmr); - if (camResult != CAMERA_RESULT_SUCCESS) { - // ܂B - IPL_HALT("not yet %d\n", camResult); - // TWL_IPL_FINALł̓X[[ - OS_TPanic(""); - } - - break; - - case cMsgI2c_ChangeLedToOn: - case cMsgI2c_ChangeLedToBlink: - camResult = i2cLed( ((u32)msg == cMsgI2c_ChangeLedToBlink) ); - if (camResult != CAMERA_RESULT_SUCCESS) { - // ܂B - IPL_HALT("not yet %d\n", camResult); - // TWL_IPL_FINALł̓X[[ - OS_TPanic(""); - } - - break; - - default: - IPL_HALT("unknown msg %d\n", msg); - // TWL_IPL_FINALł̓X[[ - break; - } - - mI2cBusy = FALSE; - } -} - - -// DxXbĥ݌Ă΂邱Ƃz肵Ă̂Ŕr䂵ȂB -CAMERAResult Manager::i2cCommon(u32 type, CAMERASelect sel_cmr) -{ - union { - CAMERAResult result; - OSMessage msg; - } u = { - (CAMERAResult)(-1) // CAMERAResult͔񕉂Ȃ̂ŁA̒lԂ~XB - }; - const volatile cameraState* pNextState = &mCmrNextState[isOutCamera(sel_cmr)]; - u32 retryCount = 0; - - // cI2cCommon_Activatê݁ACAMERA_SELECT_NONE󂯕tB - // ǂȂƂACAMERA_SELECT_BOTH͎󂯕tȂB - if (sel_cmr == CAMERA_SELECT_NONE && - type != cI2cCommon_Activate) { - IPL_HALT("error: CAMERA_SELECT_NONE for type %d\n", type); - return (CAMERAResult)(-2); - } - - while (TRUE) { - switch (type) { - case cI2cCommon_Activate: - u.result = CAMERA_I2CActivateAsync(sel_cmr, i2cActivateCallback, (void*)sel_cmr); - break; - - case cI2cCommon_FrameRate: - u.result = CAMERA_I2CFrameRateAsync(sel_cmr, pNextState->mFrameRate, i2cFrameRateCallback, (void*)sel_cmr); - break; - - case cI2cCommon_ContextSwitch: - u.result = CAMERA_I2CContextSwitchAsync(sel_cmr, pNextState->mContext, i2cContextSwitchCallback, (void*)sel_cmr); - break; - - // I2CȂ - case cI2cCommon_LedOn: - case cI2cCommon_LedBlink: - u.result = CAMERA_SetLEDAsync( (type == cI2cCommon_LedBlink), i2cLedCallback, (void*)(type == cI2cCommon_LedBlink)); - break; - - default: - IPL_HALT("unknown type(1) %d sel_cmr %d\n", type, sel_cmr); - // TWL_IPL_FINALł̓X[[ - break; - } - - if (u.result == CAMERA_RESULT_BUSY) { - IPL_PRINT("CAMERA_RESULT_BUSY type %d retry %d\n", type, retryCount); - retryCount++; - if (retryCount < cI2cRetryMax) { - OS_Sleep(cI2cRetryIntervalMsec); - continue; - } - } - break; - } - - if (u.result == CAMERA_RESULT_SUCCESS) { - OS_ReceiveMessage(&mI2cAsyncMsgQueue, &u.msg, OS_MESSAGE_BLOCK); - if (u.result != CAMERA_RESULT_SUCCESS) { - IPL_HALT("I2cAsyncCommon error: result %d for type %d sel_cmr %d\n", u.result, type, sel_cmr); - // TWL_IPL_FINALł̓X[[ - } - } else { - IPL_HALT("I2cAsyncCommon error: result %d for type %d sel_cmr %d\n", u.result, type, sel_cmr); - // TWL_IPL_FINALł̓X[[ - } - - return u.result; -} - - -// ̃Jɂ‚āAReLXg؂ւA -// ReLXgŕێȂݒsB -// (mNextCmr == CAMERA_SELECT_NONE)̏ꍇɂ̂݃X^oCɂB -// ȊOł̓J̖IȋN͂ȂB -CAMERAResult Manager::i2cSetupOthers() -{ - CAMERAResult result = CAMERA_RESULT_SUCCESS; - CAMERASelect sel_cmr; - u32 i; - - if (mNextCmr == CAMERA_SELECT_NONE) { - // ɃX^oCɂB - result = i2cActivate(mNextCmr); - // X^oCɂĂA̐ݒ𑱂B - } - - for (i = 0; i < cCameraMax; i++) { - sel_cmr = indexToCameraSelect(i); - - if (result == CAMERA_RESULT_SUCCESS) { - // ǂ̃ReLXg֐؂ւH - if (mCmrNextState[i].mContext == CAMERA_CONTEXT_A) { - // t[[g͌ォύX(オ邩Ȃ) - result = i2cContextSwitch(sel_cmr); - if (result == CAMERA_RESULT_SUCCESS) { - result = i2cFrameRate(sel_cmr); - } - } else { - // t[[g͐ɕύX(邩Ȃ) - result = i2cFrameRate(sel_cmr); - if (result == CAMERA_RESULT_SUCCESS) { - result = i2cContextSwitch(sel_cmr); - } - } - } - } - - return result; -} - - -#if SDK_VERSION_DATE < 20080630 -void Manager::setInterrupt(BOOL enable) -{ - OS_DisableIrqMask(OS_IE_CAMERA); - - CAMERA_SetMasterInterrupt(enable); - if (enable) { - // ŃJ荞݂͋֎~ɂȂĂ̂ - // mIntrPositiveEdgȇ荞݋֎~ɂ͂ȂB - mIntrPositiveEdge = FALSE; - // almost begin of vblank - CAMERA_SetVsyncInterrupt(CAMERA_INTR_VSYNC_NEGATIVE_EDGE); - CAMERA_SetBufferErrorInterrupt(FALSE); - CAMERA_ClearBuffer(); - OS_ResetRequestIrqMask(OS_IE_CAMERA); - OS_EnableIrqMask(OS_IE_CAMERA); - } -} -#else -// OS_IE_CAMERACAMERACunhOB -void Manager::setInterrupt(BOOL enable) -{ - CAMERA_SetVsyncCallback( NULL ); - if (enable) { - CAMERA_ClearBuffer(); - CAMERA_SetVsyncCallback( proc_camera_vsync_callback ); - } -} -#endif - - -CAMERAResult Manager::i2cActivate(CAMERASelect sel_cmr) -{ - return i2cCommon(cI2cCommon_Activate, sel_cmr); -} - -CAMERAResult Manager::i2cFrameRate(CAMERASelect sel_cmr) -{ - return i2cCommon(cI2cCommon_FrameRate, sel_cmr); -} - -CAMERAResult Manager::i2cContextSwitch(CAMERASelect sel_cmr) -{ - return i2cCommon(cI2cCommon_ContextSwitch, sel_cmr); -} - -CAMERAResult Manager::i2cLed(BOOL isBlink) -{ - return i2cCommon(isBlink ? cI2cCommon_LedBlink : cI2cCommon_LedOn, CAMERA_SELECT_OUT); -} - -void Manager::i2cCommonAsyncCallback(CAMERAResult result, void *arg) -{ -#ifdef TWL_IPL_FINAL -#pragma unused(arg) -#endif - // ̃R[obNĂ΂OɃbZ[Wobt@͋ - // ȂĂ͂B - if (!OS_SendMessage(&mI2cAsyncMsgQueue, (OSMessage)result, OS_MESSAGE_NOBLOCK)) { - IPL_HALT("mI2cAsyncMsgQueue full! arg %d\n", arg); - // TWL_IPL_FINALł̓X[[ - } -} - -void Manager::i2cActivateCallback(CAMERAResult result, void *arg) -{ - if (result == CAMERA_RESULT_SUCCESS) { - mSelCmr = (CAMERASelect)arg; - } - i2cCommonAsyncCallback(result, arg); -} - -void Manager::i2cFrameRateCallback(CAMERAResult result, void *arg) -{ - if (result == CAMERA_RESULT_SUCCESS) { - mCmrCurState[isOutCamera((CAMERASelect)arg)].mFrameRate = - mCmrNextState[isOutCamera((CAMERASelect)arg)].mFrameRate; - } - i2cCommonAsyncCallback(result, arg); -} - -void Manager::i2cContextSwitchCallback(CAMERAResult result, void *arg) -{ - if (result == CAMERA_RESULT_SUCCESS) { - mCmrCurState[isOutCamera((CAMERASelect)arg)].mContext = - mCmrNextState[isOutCamera((CAMERASelect)arg)].mContext; - } - i2cCommonAsyncCallback(result, arg); -} - -void Manager::i2cLedCallback(CAMERAResult result, void *arg) -{ - if (result == CAMERA_RESULT_SUCCESS) { - // P(u8)argƂƁA - // Warning: integral type is not large enough to hold pointer - // ƌB - mCurLedBlink = (u8)((BOOL)arg); - } - i2cCommonAsyncCallback(result, arg); -} - - -void Manager::prepareBuffer() -{ -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else -#ifdef TWL_IPL_USE_RED_IPL - MenuSys()->getRedIplMgr()->UseScratchHeaps(TRUE); -#endif -#endif - - for (u32 i = 0; i < cBufferCount; i++) { - mpCapBuf[i] = -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - new u16 [ cPhotoWidth * cPhotoHeight ]; -#else -#ifdef TWL_IPL_USE_RED_IPL - (u16*)MenuSys()->getRedIplMgr()->allocCameraCaptureScratchBuffer(cPhotoWidth * cPhotoHeight * sizeof(u16)); -#else - new( mpHeap ) u16 [ cPhotoWidth * cPhotoHeight ]; -#endif -#endif - IPL_ASSERT( mpCapBuf[i] ); - IPL_PRINT("mpCapBuf[%d]=%x\n", i, mpCapBuf[i]); - } - - mpEncodeWork = -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - new encodeWork; -#else - new u8 [ SSP_JpegEncoderGetBufferSize(cPhotoWidth, cPhotoHeight, cEncodeSampling, mEncodeOption) ]; -#endif -#else -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -#ifdef TWL_IPL_USE_RED_IPL - (encodeWork*)MenuSys()->getRedIplMgr()->allocJpegEncodeScratchBuffer(sizeof(encodeWork)); -#else - new ( mpHeap ) encodeWork; -#endif -#else -#ifdef TWL_IPL_USE_RED_IPL - (u8*)MenuSys()->getRedIplMgr()->allocJpegEncodeScratchBuffer(SSP_JpegEncoderGetBufferSize(cPhotoWidth, cPhotoHeight, cEncodeSampling, mEncodeOption)); -#else - new ( mpHeap ) u8 [ SSP_JpegEncoderGetBufferSize(cPhotoWidth, cPhotoHeight, cEncodeSampling, mEncodeOption) ]; -#endif -#endif -#endif - IPL_ASSERT( mpEncodeWork ); - - IPL_PRINT("mpEncodeWork=%x\n", mpEncodeWork); - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - mpEncodeResult = new u8 [ cEncodeResultSizeMax ]; IPL_ASSERT( mpEncodeResult ); -#endif - - // invalidate capture buffers - DC_FlushAll(); -} - -void Manager::destroyBuffer() -{ - // gpłɔjB - IPL_ASSERT( !mpCaptureBuf ); - IPL_ASSERT( !mpConvBuf ); - IPL_ASSERT( !mpNextConvBuf ); - IPL_ASSERT( !mpShotBuf ); - - mpCaptureBuf = NULL; - mpConvBuf = NULL; - mpNextConvBuf = NULL; - mpShotBuf = NULL; - - { - OSIntrMode enabled = OS_DisableInterrupts(); - - for (u32 i = 0; i < cBufferCount; i++) { - IPL_ASSERT( !mIsCapBufUsed[i] ); - mIsCapBufUsed[i] = FALSE; - if (mpCapBuf[i]) { -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - delete [] mpCapBuf[i]; -#else -#ifdef TWL_IPL_USE_RED_IPL - MenuSys()->getRedIplMgr()->freeCameraCaptureScratchBuffer(mpCapBuf[i]); -#else - delete [] mpCapBuf[i]; -#endif -#endif - mpCapBuf[i] = NULL; - } - } - - if (mpEncodeWork) { -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - delete mpEncodeWork; -#else - delete [] mpEncodeWork; -#endif -#else -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -#ifdef TWL_IPL_USE_RED_IPL - MenuSys()->getRedIplMgr()->freeJpegEncodeScratchBuffer(mpEncodeWork); -#else - delete mpEncodeWork; -#endif -#else -#ifdef TWL_IPL_USE_RED_IPL - MenuSys()->getRedIplMgr()->freeJpegEncodeScratchBuffer(mpEncodeWork); -#else - delete [] mpEncodeWork; -#endif -#endif -#endif - mpEncodeWork = NULL; - } - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - if (mpEncodeResult) { - delete [] mpEncodeResult; - mpEncodeResult = NULL; - } -#endif - - OS_RestoreInterrupts(enabled); - } - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else -#ifdef TWL_IPL_USE_RED_IPL - MenuSys()->getRedIplMgr()->UseScratchHeaps(FALSE); -#endif -#endif - -} - -// (mpNextConvBuf != NULL) ̏ꍇɂ̂݌Ă΂B -void Manager::useNextConvBuf() -{ - OSIntrMode enabled = OS_DisableInterrupts(); - - if (mpConvBuf) { - freeCapBufByPtr((u16*)mpConvBuf); - } - mpConvBuf = mpNextConvBuf; - mpNextConvBuf = NULL; - OS_RestoreInterrupts(enabled); - - // invalidate capture buffers - DC_FlushAll(); - - IPL_PRINT("using NextConvBuf\n"); -} - -BOOL Manager::convert(BOOL shot) -{ - // ϊȂŎBê݂ƂA - // BeɃLv`p邱Ƃɂ́A܂ΉĂȂB - if (!mpConvBuf && !mpNextConvBuf) { - IPL_HALT("(!mpConvBuf && !mpNextConvBuf)\n"); - // TWL_IPL_FINALł̓X[[ - - return FALSE; - } - - while (mTexSwap || - mTexBank == mVramType[mTarget]) { - // ϊʏo͐VRAMLCDC֊蓖ĂȂ̂ŁA - // sleepB - // ܂XbhENDNGXg̃`FbNĂȂ̂ŁA - // Iɂ͂܂Ȃ悤ӁB - OS_Sleep(1); - } - mNextTexBank = mVramType[mTarget]; - GX_SetBankForLCDC( mNextTexBank ); - - if (mpNextConvBuf) { - // Bef[^݁B - // mpConvBuf͔jB - useNextConvBuf(); - shot = TRUE; - } - - // Lv`ς݃f[^invalidate͍ςłB -retry: - Shrink640Yuv422To256Rgb555(const_cast(mpConvBuf), mVramAddr[mTarget], mShotHgt, mpDtcmWork->mShrinkBuf); - - // łmpNextConvBuf`FbNB - if (mpNextConvBuf) { - // Bef[^݁B - // mpConvBuf͔jB - useNextConvBuf(); - shot = TRUE; - goto retry; - } - - // XbhDxʏ荂B - OS_SetThreadPriority(OS_GetCurrentThread(), menu::sys::Object::cThreadPriority_CameraLowerHi); - { - OSIntrMode enabled = OS_DisableInterrupts(); - - procPostConvert(shot); - - OS_RestoreInterrupts(enabled); - } - - if (mMode == eMode_BG) { - mTexSwap = TRUE; - } else { - // eMode_Tex - if (mpGxUserProc) { - mpGxUserProc(mVramAddr[mTarget], shot); - } - } - - mTarget ^= 1; - - OS_SetThreadPriority(OS_GetCurrentThread(), menu::sys::Object::cThreadPriority_CameraLowerLo); - - if (!shot) { - // invalidate capture buffer for next capture - DC_FlushAll(); - } - - return shot; -} - -/*! - J}l[WSI - */ -BOOL Manager::tryDestroy() -{ - // X[v”\ȏ܂ő҂B - if (!tryPrepareToSleep()) { - return FALSE; - } - - if (mInitFlag) { - OS_SignalEvent(&mLowerEvent, - cEventMaskLower_DisableIntrAndDestroyBuffer); - return FALSE; - } else { - if (mPreInitFlag) { - OS_SignalEvent(&mLowerEvent, - cEventMaskLower_Destroy); - - if (OS_IsThreadTerminated(&mLowerThread)) { - // ĐsKvB - mPreInitFlag = FALSE; - return TRUE; - } - return FALSE; - } - } - return TRUE; -} - - -void Manager::activate() -{ - startCapture(mNextCmr); -} - - -void Manager::startCapture(CAMERASelect sel_cmr) -{ - mNextCmr = sel_cmr; - mNextCaptureFlag = TRUE; - // CAMERA_Init()̏ĂȂȂ̂ - // ȂI2Cv̑M͂łȂB - OS_SignalEvent(&mLowerEvent, cEventMaskLower_Activate); -} - - -// TRUEԂ΁ABevB -// FALSEȂAsB(BerŎ̎BeȂ) -BOOL Manager::shoot(BOOL keepCapture) -{ - OSIntrMode enabled; - - // Ƃ肠A˂͖B - // Beɂ͎Ԃ̂ŁABeۑ(!mCaptureFlag)ȂBeȂB - if (mNextShotFlag || mShotFlag || !mCaptureFlag) { - return FALSE; - } - - // OJLED(__)́AȂׂLED - // (cf荞ނ̂h)߁AōsB - // OJɐ؂ւvoĂŕA܂JȂ̂łłȂB - // CAMERA_RESULT_ILLEGAL_STATUS (6) ԂB - // ǂ݂AJ؂ւ̓s{P̂1t[҂ - // ƂɂȂ邵AłLEDsȂB - - enabled = OS_DisableInterrupts(); - - if (!keepCapture) { - mNextCaptureFlag = FALSE; - } - mNextShotFlag = TRUE; - - OS_RestoreInterrupts(enabled); - - return TRUE; -} - -BOOL Manager::tryPrepareToSleep() -{ - stopCapture(); - - if (// sȂ_B - (mPreInitFlag && mPreInitBusyFlag) || - // Ȃ_B - (mInitFlag && mInitBusyFlag) || - // Lv`Ȃ_B - mCaptureFlag || - mNextCaptureFlag || - mpCaptureBuf || - // ϊȂ_B - mpConvBuf || - mpNextConvBuf || - // BeȂ_B - mShotFlag || - mNextShotFlag || - mpShotBuf || - // Vb^[ĐȂ_B -// (!isFinishedShutterSnd()) || - // ۑȂ_B - mEncodeBusyFlag || - // I2CȂ_B - mI2cBusy) { - return FALSE; - } - - if (mSelCmr != CAMERA_SELECT_NONE || - mNextCmr != CAMERA_SELECT_NONE) { - // JNȂ_B - mNextCmr = CAMERA_SELECT_NONE; - return FALSE; - } - - return TRUE; -} - -#include - -// pDtcmɂu32[256*2] (2048 Bytes)̍Ɨ̈悪KvłB -// Ɨ̈DTCMȊÕ蓖Ăꍇɂ -// ptH[}X傫ቺ”\܂B -// little endian only -asm void Manager::Shrink640Yuv422To256Rgb555( register const void* src, register void* dst, register u32 height, register void* pDtcm ) -{ -#define ORIGINAL_WIDTH 640 -#define SHRINK_WIDTH 256 // must be even -#define SHRINK_TMP_BYTES_PER_PIXEL 4 -#define SHRINK_TMP_HEIGHT 2 -// loopCounters bits: -// d31-d25: (64 x 2) loop counter -// (d31-d24: dst loop counter) -// d23-d22: (2 or 3) loop counter -// d09-d00: height loop counter (0-511) << 1 -#define LOOP_COUNTERS_INNER_SHIFT 25 -#define LOOP_COUNTERS_DST_SHIFT 24 -#define LOOP_COUNTERS_ODD_LINE_SHIFT 22 -#define LOOP_COUNTERS_ODD_LINE_MASK_SHIFT 23 -#define LOOP_COUNTERS_HEIGHT_BIT_WIDTH 10 -// registers -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3-r11,lr -#define loopCounters height - -// keep order for ldm/stm -#define t0 r12 -#define t1 lr -#define yuyv0 r4 -#define yuyv1 r5 -#define yuyv2 r6 -#define yuyv3 r7 -#define uv r8 - -#define CONST_REGS0 r9 -#define const_0x01fe01fe r9 - -// yuv2rgb -#define y0 yuyv0 -#define y1 yuyv1 -#define rgba yuyv2 -#define const_0x80008000 const_0x01fe01fe -#define CONST_REGS1 const_H1_402_L1_772,const_Hm0_344_Lm0_714 -#define const_H1_402_L1_772 r10 -#define const_Hm0_344_Lm0_714 r11 - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - - ldr t0, =@constants1 - ldr const_0x01fe01fe, =0x01fe01fe - ldmia t0, {CONST_REGS1} - - // height << 1 and adjust loop counter - mov loopCounters, height, lsl #1 - sub loopCounters, loopCounters, #1 - -@480: - // (480/2.5) = 192 loops - -@640: - // (64 x 2) loops - -@64: - ldmia src!, {yuyv0, yuyv1, yuyv2, yuyv3, uv} - - and t0, const_0x01fe01fe, yuyv0, lsr #7 - and t1, const_0x01fe01fe, yuyv1, lsr #7 - and yuyv0, const_0x01fe01fe, yuyv0, lsl #1 - and yuyv1, const_0x01fe01fe, yuyv1, lsl #1 - add yuyv0, yuyv0, yuyv0, lsl #16 - mov yuyv0, yuyv0, lsr #16 - add yuyv1, yuyv1, yuyv1, lsr #16 - orr yuyv0, yuyv0, yuyv1, lsl #16 // ave. y << 1 - add yuyv1, t0, t1 // ave. uv << 1 - - and t0, const_0x01fe01fe, yuyv2, lsr #7 - and t1, const_0x01fe01fe, yuyv3, lsr #7 - add t1, t1, t0, lsr #1 - and t0, const_0x01fe01fe, uv, lsr #7 - - and yuyv2, const_0x01fe01fe, yuyv2, lsr #16-1 - and yuyv3, const_0x01fe01fe, yuyv3, lsl #1 - add yuyv2, yuyv2, yuyv3 - and uv, const_0x01fe01fe, uv, lsl #16+1 - add yuyv2, yuyv2, uv // ave. y << 1 - - add yuyv3, t1, t0, lsr #1 // ave. uv << 1 - - stmia pDtcm!, {yuyv0, yuyv1, yuyv2, yuyv3} - - adds loopCounters, loopCounters, #1 << LOOP_COUNTERS_INNER_SHIFT - bcc @64 - - sub pDtcm, pDtcm, #SHRINK_TMP_BYTES_PER_PIXEL * SHRINK_WIDTH * SHRINK_TMP_HEIGHT - ldr const_0x80008000, =0x80008000 -@yuv2rgb_loop: - ldmia pDtcm!, {y1, uv} - ldr t0, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 1 - SHRINK_TMP_BYTES_PER_PIXEL * 2] - ldr t1, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 1 - SHRINK_TMP_BYTES_PER_PIXEL * 2 + SHRINK_TMP_BYTES_PER_PIXEL] - add y1, y1, t0 - add uv, uv, t1 - - // original formula: - // R = Y + 1.402*(V-128) - // G = Y - 0.344*(U-128) - 0.714*(V-128) - // B = Y + 1.772*(U-128) - // - // y1: (sum y0y1 of 4 pixels) << 1 - // uv: (sum uv of 4 pixels) << 1 - // - // then, - // R = (sumY/2 + (1.402/2)*(sumV-128*2*4)) / 4 - // G = (sumY/2 - (0.344/2)*(sumU-128*2*4) - (0.714/2)*(sumV-128*2*4)) / 4 - // B = (sumY/2 + (1.772/2)*(sumU-128*2*4)) / 4 - // - // or - // R = sumY/8 + (1.402/8)*(sumV-128*2*4) - // G = sumY/8 - (0.344/8)*(sumU-128*2*4) - (0.714/8)*(sumV-128*2*4) - // B = sumY/8 + (1.772/8)*(sumU-128*2*4) - // - // sumY max is 0xff*2*4 = 0x07f8 - // sumU, sumV max is 0xff*2*4 = 0x07f8 - // 0x07f8 << 20 =0x7f800000 - - // sumY /= 8; and normalize to 0x7f800000 - mov y0, y1, lsl #20 - mov y1, y1, lsr #16 - mov y1, y1, lsl #20 - - // normalize sumU, sumV and -= 128*2*4 - mov uv, uv, lsl #5 - eor uv, uv, const_0x80008000 - - // Green - // -(0.714/8)*sumV - smulbt t0, const_Hm0_344_Lm0_714, uv - // -(0.344/8)*sumU - smultb t1, const_Hm0_344_Lm0_714, uv - mov rgba, const_0x80008000 - add t1, t0, t1 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #21 // 0x7c000000 -> 0x000003e0 - ands t0, t1, #0xfc000000 - - // Red - // (1.402/8)*sumV - smultt t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #21-16 // 0x7c000000 -> 0x03e00000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #26 // 0x7c000000 -> 0x0000001f - ands t0, t1, #0xfc000000 - - // Blue - // (1.772/8)*sumU - smulbb t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #26-16 // 0x7c000000 -> 0x001f0000 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #16 // 0x7c000000 -> 0x00007c00 - ands t0, t1, #0xfc000000 - orrpl rgba, rgba, t0 // 0x7c000000 - - str rgba, [dst], #4 - adds loopCounters, loopCounters, #2 << LOOP_COUNTERS_DST_SHIFT // 2 pixels at once - bcc @yuv2rgb_loop - - add loopCounters, loopCounters, #1 << LOOP_COUNTERS_ODD_LINE_SHIFT - tst loopCounters, #1 << LOOP_COUNTERS_ODD_LINE_MASK_SHIFT - // skip 1 line - addne src, src, #ORIGINAL_WIDTH * sizeof(u16) - bicne loopCounters, loopCounters, #1 << LOOP_COUNTERS_ODD_LINE_MASK_SHIFT - - sub pDtcm, pDtcm, #SHRINK_TMP_BYTES_PER_PIXEL * SHRINK_WIDTH - ldr const_0x01fe01fe, =0x01fe01fe - -@yuv2rgb_done: - // (-2.5) << 1 - subs loopCounters, loopCounters, #5 - bcs @480 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr - -@constants1: - dcd 0x59ba7168 // ((1.402 * 0x4000) << 16) | ((1.772 * 0x4000) & 0xffff) - dcd 0xe9fcd24e // ((-0.344 * 0x4000) << 16) | ((-0.714 * 0x4000) & 0xffff) - -#undef ORIGINAL_WIDTH -#undef SHRINK_WIDTH -#undef SHRINK_TMP_BYTES_PER_PIXEL -#undef SHRINK_TMP_HEIGHT -#undef LOOP_COUNTERS_INNER_SHIFT -#undef LOOP_COUNTERS_DST_SHIFT -#undef LOOP_COUNTERS_ODD_LINE_SHIFT -#undef LOOP_COUNTERS_ODD_LINE_MASK_SHIFT -#undef LOOP_COUNTERS_HEIGHT_BIT_WIDTH - -#undef SAVE_REGS -#undef loopCounters -#undef t0 -#undef t1 - -#undef yuyv0 -#undef yuyv1 -#undef yuyv2 -#undef yuyv3 -#undef uv - -#undef CONST_REGS0 -#undef const_0x01fe01fe - -#undef y0 -#undef y1 -#undef rgba -#undef const_0x80008000 -#undef CONST_REGS1 -#undef const_H1_402_L1_772 -#undef const_Hm0_344_Lm0_714 -} - - -// ܂480 linesł͂ȂA156*3 linesłĂȂB -// ؂̂ĂŖȂ̂A؂グ̂H -// pDtcmɂu32[208*3] (2496 Bytes)̍Ɨ̈悪KvłB -// Ɨ̈DTCMȊÕ蓖Ăꍇɂ -// ptH[}X傫ቺ”\܂B -// little endian only -asm void Manager::Shrink640Yuv422To208Rgb555( register const void* src, register void* dst, register u32 height, register void* pDtcm ) -{ -#define ORIGINAL_WIDTH 640 -#define SHRINK_WIDTH 208 // must be even -#define SHRINK_TMP_BYTES_PER_PIXEL 4 -#define SHRINK_TMP_HEIGHT 3 -// loopCounters bits: -// d31-d28: (6 + 7) loop counter -// d27-d24: (6 + 7) x 8 loop counter -// (d31-d24: dst loop counter) -// d23-d22: dtcm line loop counter -// d21-d09: unused -// d08-d00: height loop counter (0-511) -#define LOOP_COUNTERS_INNER_SHIFT 28 -#define LOOP_COUNTERS_LINE_SHIFT 24 -#define LOOP_COUNTERS_DST_SHIFT 24 -#define LOOP_COUNTERS_DTCM_LINE_SHIFT 22 -#define LOOP_COUNTERS_DTCM_LINE_MASK 0x3 -#define LOOP_COUNTERS_HEIGHT_BIT_WIDTH 9 -// registers -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3-r11,lr -#define loopCounters height - -// keep order for ldm/stm -#define t0 r12 -#define t1 lr -#define yuyv0 r4 -#define yuyv1 r5 -#define yuyv2 r6 -#define yuyv3 r7 -#define uv r8 - -#define CONST_REGS0 r9,r10,r11 -#define const_0x01fe01fe r9 -#define const_0x00001c73 r10 -#define const_0x00000e39 r11 - -// register pair (be careful about order) -#define YYUV_REGS0 yuyv1,uv -#define YYUV_REGS1 yuyv1,t1 - -// yuv2rgb -#define y0 yuyv0 -#define y1 yuyv1 -#define rgba yuyv2 -#define CONST_REGS1 const_0x000717c2,const_0x80008000,const_H1_402_L1_772,const_Hm0_344_Lm0_714 -#define const_0x000717c2 yuyv3 -#define const_0x80008000 const_0x01fe01fe -#define const_H1_402_L1_772 const_0x00001c73 -#define const_Hm0_344_Lm0_714 const_0x00000e39 - - ldr t0, =@constants0 - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - - ldmia t0, {CONST_REGS0} - - // dtcm line loop - // loopCounters and height may differ - add loopCounters, height, #SHRINK_TMP_HEIGHT << LOOP_COUNTERS_DTCM_LINE_SHIFT - -@480: - // (6 + 7) x 8 loops = 8,9,a,b,c,d,e,f - // adjust (6 + 7) loop counter, from minus - add loopCounters, loopCounters, #(8 << LOOP_COUNTERS_LINE_SHIFT) - (1 << LOOP_COUNTERS_INNER_SHIFT) - -@640: - // 6 loops - add loopCounters, loopCounters, #6 << LOOP_COUNTERS_INNER_SHIFT -@6: - ldmia src!, {yuyv0, yuyv1, yuyv2} - - and t0, const_0x01fe01fe, yuyv0, lsr #7 - and t1, const_0x01fe01fe, yuyv1, lsr #7 - add t0, t0, t1 - and t1, const_0x01fe01fe, yuyv2, lsr #7 - add uv, t0, t1 // sum uv << 1 - - and yuyv0, const_0x01fe01fe, yuyv0, lsl #1 - and yuyv1, const_0x01fe01fe, yuyv1, lsl #1 - add yuyv0, yuyv0, yuyv0, lsl #16 - add yuyv1, yuyv1, yuyv0, lsr #16 // sum y0 << 1 - - and yuyv2, const_0x01fe01fe, yuyv2, lsl #1 - add yuyv2, yuyv2, yuyv2, lsr #16 - add yuyv1, yuyv1, yuyv2, lsl #16 // sum y1 << 1 - stmia pDtcm!, {YYUV_REGS0} - - subs loopCounters, loopCounters, #1 << LOOP_COUNTERS_INNER_SHIFT - bpl @6 - - // 7 loops - add loopCounters, loopCounters, #7 << LOOP_COUNTERS_INNER_SHIFT - ldmia src!, {yuyv0, yuyv1, yuyv2, yuyv3} - and uv, const_0x01fe01fe, yuyv0, lsr #7 - and yuyv0, const_0x01fe01fe, yuyv0, lsl #1 -@7: - and t0, const_0x01fe01fe, yuyv1, lsr #7 - add t0, t0, uv, lsr #1 - and t1, const_0x01fe01fe, yuyv2, lsr #7 - add t0, t0, t1 - and uv, const_0x01fe01fe, yuyv3, lsr #7 - add t1, t0, uv, lsr #1 // sum uv << 1 - - and yuyv1, const_0x01fe01fe, yuyv1, lsl #1 - add yuyv1, yuyv1, yuyv0, lsr #16 - add yuyv1, yuyv1, yuyv1, lsl #16 - mov yuyv1, yuyv1, lsr #16 // sum y0 << 1 - - and yuyv2, const_0x01fe01fe, yuyv2, lsl #1 - and yuyv0, const_0x01fe01fe, yuyv3, lsl #1 - add yuyv2, yuyv2, yuyv0, lsl #16 - add yuyv2, yuyv2, yuyv2, lsr #16 - orr yuyv1, yuyv1, yuyv2, lsl #16 // sum y1 << 1 - - stmia pDtcm!, {YYUV_REGS1} - subs loopCounters, loopCounters, #1 << LOOP_COUNTERS_INNER_SHIFT - ldmplia src!, {yuyv1, yuyv2, yuyv3} - bpl @7 - - adds loopCounters, loopCounters, #1 << LOOP_COUNTERS_LINE_SHIFT - bmi @640 - - sub loopCounters, loopCounters, #1 << LOOP_COUNTERS_DTCM_LINE_SHIFT - tst loopCounters, #LOOP_COUNTERS_DTCM_LINE_MASK << LOOP_COUNTERS_DTCM_LINE_SHIFT - bne @yuv2rgb_done - - ldr t0, =@constants1 - add loopCounters, loopCounters, #SHRINK_TMP_HEIGHT << LOOP_COUNTERS_DTCM_LINE_SHIFT - ldmia t0, {CONST_REGS1} - - add loopCounters, loopCounters, #(0x100 - SHRINK_WIDTH) << LOOP_COUNTERS_DST_SHIFT - sub pDtcm, pDtcm, #SHRINK_TMP_BYTES_PER_PIXEL * SHRINK_WIDTH * SHRINK_TMP_HEIGHT -@yuv2rgb_loop: - ldmia pDtcm!, {y0, uv} - ldr t0, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 1 - SHRINK_TMP_BYTES_PER_PIXEL * 2] - ldr t1, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 1 - SHRINK_TMP_BYTES_PER_PIXEL * 2 + SHRINK_TMP_BYTES_PER_PIXEL] - add y0, y0, t0 - ldr t0, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 2 - SHRINK_TMP_BYTES_PER_PIXEL * 2] - add uv, uv, t1 - ldr t1, [pDtcm, #SHRINK_WIDTH * SHRINK_TMP_BYTES_PER_PIXEL * 2 - SHRINK_TMP_BYTES_PER_PIXEL * 2 + SHRINK_TMP_BYTES_PER_PIXEL] - add y0, y0, t0 - add uv, uv, t1 - - // original formula: - // R = Y + 1.402*(V-128) - // G = Y - 0.344*(U-128) - 0.714*(V-128) - // B = Y + 1.772*(U-128) - // - // y0: (sum y0y1 of 9 pixels) << 1 - // uv: (sum uv of 9 pixels) << 1 - // - // then, - // R = (sumY/2 + (1.402/2)*(sumV-128*2*9)) / 9 - // G = (sumY/2 - (0.344/2)*(sumU-128*2*9) - (0.714/2)*(sumV-128*2*9)) / 9 - // B = (sumY/2 + (1.772/2)*(sumU-128*2*9)) / 9 - // - // or - // R = sumY/18 + (1.402/18)*(sumV-128*2*9) - // G = sumY/18 - (0.344/18)*(sumU-128*2*9) - (0.714/18)*(sumV-128*2*9) - // B = sumY/18 + (1.772/18)*(sumU-128*2*9) - // - // sumY max is 0xff*2*9 = 0x11ee - // sumU, sumV max is 0xff*2*9 = 0x11ee - // 0x11ee*0x717c2=0x7f8003fc - - // sumY /= 2*9; and normalize to 0x7f800000 - mov t0, y0, lsr #16 - mul y1, const_0x000717c2, t0 - eor t0, y0, t0, lsl #16 - mul y0, const_0x000717c2, t0 - - // sumV -= 128*2*9 - sub uv, uv, #0x900 << 16 - - // Red - // (1.402/18)*sumV - smultt t1, const_H1_402_L1_772, uv - mov rgba, const_0x80008000 - // normalize - mov t1, t1, lsl #8 - - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #26 // 0x7c000000 -> 0x0000001f - ands t0, t1, #0xfc000000 - orrpl rgba, rgba, t0, lsr #26-16 // 0x7c000000 -> 0x001f0000 - - // Green - // -(0.714/18)*sumV - smulbt t0, const_Hm0_344_Lm0_714, uv - // sumU -= 128*2*9 - sub uv, uv, #0x900 - // -(0.344/18)*sumU - smultb t1, const_Hm0_344_Lm0_714, uv - // normalize - mov t0, t0, lsl #8 - add t1, t0, t1, lsl #8 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #21 // 0x7c000000 -> 0x000003e0 - ands t0, t1, #0xfc000000 - - // Blue - // (1.772/18)*sumU - smulbb t1, const_H1_402_L1_772, uv - orrpl rgba, rgba, t0, lsr #21-16 // 0x7c000000 -> 0x03e00000 - // normalize - mov t1, t1, lsl #8 - // +Y - qdadd t0, y0, t1 - qdadd t1, y1, t1 - ands t0, t0, #0xfc000000 - orrpl rgba, rgba, t0, lsr #16 // 0x7c000000 -> 0x00007c00 - ands t0, t1, #0xfc000000 - orrpl rgba, rgba, t0 // 0x7c000000 -> 0x7c000000 - - str rgba, [dst], #4 - adds loopCounters, loopCounters, #2 << LOOP_COUNTERS_DST_SHIFT // 2 pixels at once - bcc @yuv2rgb_loop - - ldr t0, =@constants0 - add dst, dst, #(HW_LCD_WIDTH - SHRINK_WIDTH) * sizeof(u16) - sub pDtcm, pDtcm, #SHRINK_TMP_BYTES_PER_PIXEL * SHRINK_WIDTH - ldmia t0, {CONST_REGS0} - -@yuv2rgb_done: - sub loopCounters, loopCounters, #1 - movs t0, loopCounters, lsl #32 - LOOP_COUNTERS_HEIGHT_BIT_WIDTH - bne @480 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr - -@constants0: - dcd 0x01fe01fe - dcd 0x00001c73 - dcd 0x00000e39 - -@constants1: - dcd 0x000717c2 - dcd 0x80008000 - dcd 0x04fc064c // (((1.402/18) * 0x4000) << 16) | (((1.772/18) * 0x4000) & 0xffff) - dcd 0xfec7fd77 // (((-0.344/18) * 0x4000) << 16) | (((-0.714/18) * 0x4000) & 0xffff) - - -#undef ORIGINAL_WIDTH -#undef SHRINK_WIDTH -#undef SHRINK_TMP_BYTES_PER_PIXEL -#undef SHRINK_TMP_HEIGHT -#undef LOOP_COUNTERS_INNER_SHIFT -#undef LOOP_COUNTERS_LINE_SHIFT -#undef LOOP_COUNTERS_DST_SHIFT -#undef LOOP_COUNTERS_DTCM_LINE_MASK -#undef LOOP_COUNTERS_DTCM_LINE_SHIFT -#undef LOOP_COUNTERS_HEIGHT_BIT_WIDTH - -#undef SAVE_REGS -#undef loopCounters -#undef t0 -#undef t1 - -#undef yuyv0 -#undef yuyv1 -#undef yuyv2 -#undef yuyv3 -#undef uv - -#undef CONST_REGS0 -#undef const_0x01fe01fe -#undef const_0x00001c73 -#undef const_0x00000e39 - -#undef YYUV_REGS0 -#undef YYUV_REGS1 - -#undef y0 -#undef y1 -#undef rgba -#undef CONST_REGS1 -#undef const_0x000717c2 -#undef const_0x80008000 -#undef const_H1_402_L1_772 -#undef const_Hm0_344_Lm0_714 -} - -// width16̔{(16..640)Aheight2̔{(2..480)łKv܂B -// src͍Œ4oCgACgłB -// pYCbCrBufŒ4oCgACgłAefoCXƂ̘Ag -// 32oCgACgĂB -// pYCbCrBuf́AYACbACrꊇŊmۂĂBTCY -// Y: width*height*sizeof(u16) Bytes -// Cb: ((width*height)/4)*sizeof(u16)) Bytes -// Cr: ((width*height)/4)*sizeof(u16)) Bytes -// ȏ̍v (width*height*3/2)*sizeof(u16) BytesłB -// (‚܂茳摜f[^TCY1.5{) -// pDtcm_ɂu32[16+4+4] (96 Bytes)̍Ɨ̈悪KvłB -// Ɨ̈DTCMȊÕ蓖Ăꍇɂ -// ptH[}X傫ቺ”\܂B -// srcCAMERAfoCXYUVŃLv`` -// (Y 8bit,U 8bit,Y 8bit,V 8bit)łB -// opYCbCrBufDSP JPEGGR[_ւ̓͌` -// (Y,Y,Y,Y,..., U,..., V,..., e16bit)łB -// Ńf[^LbV͍̐sĂȂ߁Aʂ -// DSP֓nOFlush邢StoreKv܂B -asm void Manager::Convert8bitYuv422To16bitYuv420( register const u32* src, register u16* pYCbCrBuf, register u32 width, register u32 height, void* pDtcm_ ) -{ -#define BLOCK_WIDTH 16 -// registers -// keep stack frame 8-Bytes aligned -#define SAVE_REGS r3-r11,lr // 10 registers = 40 Bytes -#define STACK_OFFSET_PYCBCRBUF 0 // initial value is r3 -#define STACK_OFFSET_PDTCM 40 -#define pCbBuf pYCbCrBuf -#define widthHeight width -#define pDtcm height -#define pDstY pDtcm -#define pDstCr pDtcm - -// keep order for ldm/stm/ldrd/strd -#define FLUSH_REGS r4-r11 -#define FLUSH_REGS_CB r4,r6,r8,r10 -#define FLUSH_REGS_CR r5,r7,r9,r11 -#define yuyv0 r4 -#define yuyv1 r5 -#define yuyv2 r6 -#define yuyv3 r7 -#define t0 r8 -#define t1 r9 -#define const_0x00ff00ff r11 - -#define loopHeightWidth r12 -#define pDtcmStop lr - - // keep 8-Bytes aligned - stmfd sp!, {SAVE_REGS} - // pDstY initial value is pYCbCrBuf - str pYCbCrBuf, [sp, #STACK_OFFSET_PYCBCRBUF] - - mul t0, width, height - // setup widthHeight before breaking pDtcm - orr widthHeight, height, width, lsl #16 - add pCbBuf, pYCbCrBuf, t0, lsl #1 - - ldr pDtcm, [sp, #STACK_OFFSET_PDTCM] - add pDtcmStop, pDtcm, #BLOCK_WIDTH * sizeof(u16) - - mov loopHeightWidth, widthHeight, lsl #16 - -@480: - add loopHeightWidth, loopHeightWidth, widthHeight, lsr #16 - -@640: - ldr const_0x00ff00ff, =0x00ff00ff - -@blockLoop: - add t0, src, widthHeight, lsr #16-1 // +1(odd) line - ldmia t0, {yuyv2, yuyv3} - ldmia src!, {yuyv0, yuyv1} - - // even line Y - and t0, yuyv0, const_0x00ff00ff - and t1, yuyv1, const_0x00ff00ff - strd t0, [pDtcm, #BLOCK_WIDTH * sizeof(u16)] - -#if 0 - // even line U - and yuyv0, const_0x00ff00ff, yuyv0, lsl #8 - and t0, const_0x00ff00ff, yuyv1, lsl #8 - orr yuyv0, t0, yuyv0, lsr #16 - - // odd line V - and yuyv1, const_0x00ff00ff, yuyv2, lsr #24 - and t0, const_0x00ff00ff, yuyv3, lsr #24 - orr yuyv1, yuyv1, t0, lsl #16 -#else - // even column ave. uv (V0 U0) - and yuyv0, const_0x00ff00ff, yuyv0, lsr #8 - and t0, const_0x00ff00ff, yuyv2, lsr #8 - add yuyv0, yuyv0, t0 - and yuyv0, const_0x00ff00ff, yuyv0, lsr #1 - - // odd column ave. uv (V1 U1) - and yuyv1, const_0x00ff00ff, yuyv1, lsr #8 - and t0, const_0x00ff00ff, yuyv3, lsr #8 - add yuyv1, yuyv1, t0 - and yuyv1, const_0x00ff00ff, yuyv1, lsr #1 - - // V0 U0 => U1 U0 - // V1 U1 V1 V0 - eor t0, yuyv0, yuyv1, ror #16 // V0^U1 U0^V1 - eor yuyv1, yuyv1, t0, lsr #16 // V1 V0 - eor yuyv0, t0, yuyv1, ror #16 // U1 U0 -#endif - - strd yuyv0, [pDtcm, #BLOCK_WIDTH * 2 * sizeof(u16)] - - // odd line Y - and yuyv2, yuyv2, const_0x00ff00ff - and yuyv3, yuyv3, const_0x00ff00ff - - stmia pDtcm!, {yuyv2, yuyv3} - cmp pDtcm, pDtcmStop - bne @blockLoop - -// ǂł邩 - ldr pDstY, [sp, #STACK_OFFSET_PYCBCRBUF] - ldmdb pDtcmStop, {FLUSH_REGS} - add pDstY, pDstY, widthHeight, lsr #16-1 // +1(odd) line - stmia pDstY, {FLUSH_REGS} - sub pDstY, pDstY, widthHeight, lsr #16-1 // -1(even) line - - ldmia pDtcmStop!, {FLUSH_REGS} - stmia pDstY!, {FLUSH_REGS} - smultb t0, widthHeight, widthHeight - str pDstY, [sp, #STACK_OFFSET_PYCBCRBUF] - - add pDstCr, pCbBuf, t0, lsr #1 - ldmia pDtcmStop, {FLUSH_REGS} - stmia pDstCr, {FLUSH_REGS_CR} - stmia pCbBuf!, {FLUSH_REGS_CB} - - sub pDtcmStop, pDtcmStop, #8 * sizeof(u32) - sub pDtcm, pDtcmStop, #BLOCK_WIDTH * sizeof(u16) - - sub loopHeightWidth, loopHeightWidth, #BLOCK_WIDTH - movs t0, loopHeightWidth, lsl #16 - bne @640 - - ldr t0, [sp, #STACK_OFFSET_PYCBCRBUF] - subs loopHeightWidth, loopHeightWidth, #2 << 16 // 2 lines/loop - addne t0, t0, widthHeight, lsr #16-1 // 2 lines/loop - strne t0, [sp, #STACK_OFFSET_PYCBCRBUF] - addne src, src, widthHeight, lsr #16-1 // 2 lines/loop - bne @480 - - // keep 8-Bytes aligned - ldmfd sp!, {SAVE_REGS} - bx lr - -#undef BLOCK_WIDTH -#undef SAVE_REGS -#undef STACK_OFFSET_PYCBCRBUF -#undef STACK_OFFSET_PDTCM -#undef pCbBuf -#undef widthHeight -#undef pDtcm -#undef pDstY -#undef pDstCr - -#undef FLUSH_REGS -#undef FLUSH_REGS_CB -#undef FLUSH_REGS_CR -#undef yuyv0 -#undef yuyv1 -#undef yuyv2 -#undef yuyv3 -#undef t0 -#undef t1 -#undef const_0x00ff00ff - -#undef loopHeightWidth -#undef pDtcmStop -} - -#include - - -void Manager::procVBlankIntr() -{ - if (mMode == eMode_BG) { - - } else { - // eMode_Tex - if (mTexSwap) { - GX_DisableBankForTex(); - GX_SetBankForTex( GXVRamTex( mNextTexBank ) ); - mTexBank = mNextTexBank; - mTexSwap = FALSE; - mFirstPictureReady = TRUE; - } else { - // cmnŏ㏑”\̂Ŗt[ĐݒB - // GX_DisableBankForTex(); - GX_SetBankForTex( GXVRamTex( mTexBank ) ); - } - } -} - - -void Manager::procCameraIntr() -{ - u32 err = 0; - u32 msg = cMsgI2c_Destroy; // ̂܂܂̒lMꂽvO~XB - -#if SDK_VERSION_DATE < 20080630 - if (mIntrPositiveEdge) { - CAMERA_StopCapture(); - mIntrPositiveEdge = FALSE; - CAMERA_SetVsyncInterrupt(CAMERA_INTR_VSYNC_NEGATIVE_EDGE); - } -#else - // intr edgeCAMERACunhOB -#endif - - if (CAMERA_GetErrorStatus()) { - // error - CAMERA_StopCapture(); - CAMERA_ClearBuffer(); - MI_StopNDma(cDefaultDmaNo); - err = 1; - IPL_PRINT("cameraIntr: status error\n"); - } else { - if (MI_IsNDmaBusy(cDefaultDmaNo)) { - // error - // Ƃ͌؂ȂHŌNDMA]ȂH - MI_StopNDma(cDefaultDmaNo); - err = 2; - IPL_PRINT("cameraIntr: NDMA busy\n"); - } - } - - if (err) { - // Lv`ŝŁAgCB - if (mpCaptureBuf) { - freeCapBufByPtr((u16*)mpCaptureBuf); - mpCaptureBuf = NULL; - } - mCaptureRetryCount++; - if (mCaptureRetryCount < cCaptureRetryMax) { - // retry - } else { - // fatal error - IPL_HALT("capture error too much!\n"); - // TWL_IPL_FINALł̓X[[ - } - } else { - mCaptureRetryCount = 0; - procPostCapture(); - } - - // I2C͉ȂB - if (mI2cBusy) { - return; - } - - // Lv`<=>Beʼn𑜓xύXɂKvH - if (mCaptureSkipCount) { - mCaptureSkipCount--; - return; - } - - if (mSelCmr != mNextCmr) { - // J؂ւ邽I2CvoB - // OJLEDɍsB - msg = cMsgI2c_Activate; - // J؂ւt[̊Ԃ͉摜肵Ȃ̂ŃLv`~B - // mSelCmrNONȄꍇɂ͂֗ȂB(J荞݂Ȃ) - mCaptureSkipCount = 1; - goto sendI2cRequest; - } - - // Lv`ƎBeʼn𑜓xtH[}bgقȂꍇA - // I2CvoB - // ܂B - - // OJLEDB - if (!mLedKeepFlag && (mSelCmr == CAMERA_SELECT_OUT)) { - if (mNextShotFlag) { - if (!mCurLedBlink) { - // BeȂ̂œ__łɂB - // Vb^[Xs[h𑬂邽ߊ荞ݘ_؂ւB - // NDMA busyG[ɂȂĂ܂̂ŁA荞ݘ_͐؂ւȂB - // cOȂLEDf荞ނƂH(}CRÂH) - - // VBlank Time Intr Line Lines Ticks - // 272 4.5640 CAMERA 13 0 26 // negative edge - // 273 4.5754 V 192 0 17 - // 274 4.5921 V 192 0 6 - // 275 4.6089 V 192 1 33 - // 275 4.6140 CAMERA 10 1 20 // negative edge (+50.0ms from negative edge) - // 275 4.6144 PXI_NE 16 1 19 // SetLED֌W ( +0.4ms from negative edge) - // 275 4.6178 CAMERA 70 1 20 // positive edge ( +3.8ms from negative edge) - // 276 4.6256 V 192 0 11 - // 277 4.6423 V 192 0 20 - // 277 4.6474 TM0 9 0 9 - // 278 4.6590 V 192 0 5 - // 278 4.6640 CAMERA 8 9 282 // negative edge (+50.0ms from negative edge) - // *Warning: taking over 100 ticks (over 3 lines) - msg = cMsgI2c_ChangeLedToBlink; - goto sendI2cRequest; -// goto toPositiveEdgeAndSendI2cRequest; - } - } else if (!mShotFlag /* mCaptureFlag */ ) { - // Beł͂Ȃ̂œ_Ł_ɂB - // uLv`Ȃ̂(mCaptureFlag)vɂƁA - // GR[hAZ[uɂmCaptureFlagȂ̂ŁA - // _ŎԂȂB - if (mCurLedBlink) { - // ʍXVXs[h𑬂邽ߊ荞ݘ_؂ւB - // VBlank Time Intr Line Lines Ticks - // 281 4.7140 CAMERA 6 0 10 // negative edge - // 282 4.7259 V 192 0 7 - // 283 4.7426 V 192 0 15 - // 284 4.7593 V 192 0 5 - // 284 4.7641 CAMERA 4 0 18 // negative edge (+50.1ms from negative edge) - // 284 4.7645 PXI_NE 11 0 19 // SetLED֌W ( +0.4ms from negative edge) - // 284 4.7678 CAMERA 63 1 7 // positive edge ( +3.7ms from negative edge) - // 284 4.7725 TM0 137 0 8 - // 285 4.7760 V 192 0 12 - // 286 4.7927 V 192 0 15 - // 287 4.8094 V 192 0 10 - // 287 4.8140 CAMERA 1 1 14 // negative edge (+49.9ms from negative edge) - msg = cMsgI2c_ChangeLedToOn; - goto sendI2cRequest; -// goto toPositiveEdgeAndSendI2cRequest; - } - } - } - - if (!err) { - mCaptureFlag = mNextCaptureFlag; - mShotFlag = mNextShotFlag; - // Ƃ肠Pۑ̂݁B - mNextShotFlag = FALSE; - } - - // gC񐔏ɒBꍇ̋stop͕KvH - // ܂B - - if (mSelCmr != CAMERA_SELECT_NONE && - (mCaptureFlag || mShotFlag)) { - IPL_ASSERT( !mpCaptureBuf ); - mpCaptureBuf = procPreCapture(); - if (mpCaptureBuf) { - // A^CmShot{Wdt,Hgt}<=>mShow{Wdt,Hgt}̕ϊĂȂˁH - // transferlinesĐݒ肵ȂƁB - // CAMERA_GetBytesAtOnce()́Areg_CAM_CNT𒼐ړǂłB - // CAM_CNT́AJCl[ȕ݂͖邩A - // ҂lmɓۏ؂͂ȂƎvB - // ꉞCAMERA VuN荞݃nhA҂l - // ĂȂΓ삻̂̂Ȃ邪Ȁꍇł - // DMAŔ͈͊Õj󂵂Ȃ悤AvZŋ߂l - // CAMERA_GET_LINE_BYTES(mShotWdt) * mTransferLines wB -#if 0 -// : -// static inline void CAMERA_DmaRecvAsync(u32 dmaNo, void *dest, u32 unit, u32 length, MINDmaCallback callback, void* arg) -// { -// MI_Camera_NDmaRecvAsync( dmaNo, dest, unit/4, length, FALSE, callback, arg ); -// } - - // SDK default NDMA parameter - CAMERA_DmaRecvAsync(cDefaultDmaNo, (u16*)mpCaptureBuf, - CAMERA_GET_LINE_BYTES(mShotWdt) * mShotTransferLines, - CAMERA_GET_FRAME_BYTES(mShotWdt, mShotHgt), - NULL, NULL); -#else -// : -// void MI_Camera_NDmaRecvAsync(u32 ndmaNo, void *dest, u32 unit, u32 size, BOOL contSw, MINDmaCallback callback, void* arg ); -// void MI_Camera_NDmaRecvAsyncEx(u32 ndmaNo, void *dest, u32 size, BOOL contSw, MINDmaCallback callback, void* arg, const MINDmaConfig *config ); - - mDmaConfig.wordCount = (CAMERA_GET_LINE_BYTES(mShotWdt) * mShotTransferLines) / sizeof(u32); - MI_Camera_NDmaRecvAsyncEx(cDefaultDmaNo, (u16*)mpCaptureBuf, - CAMERA_GET_FRAME_BYTES(mShotWdt, mShotHgt), - FALSE, - NULL, NULL, - &mDmaConfig); -#endif - - CAMERA_StartCapture(); - } else { - IPL_PRINT("no memory for mpCaptureBuf\n"); - CAMERA_StopCapture(); - - // G[gCJEg𑝂₷H - // PprepareBuffer()łĂȂȂB - } - } else { - CAMERA_StopCapture(); - if (mOneShotFlag) { - // J~B - // I2CvoB - // mNextCmr͏㏑B - mNextCmr = CAMERA_SELECT_NONE; - msg = cMsgI2c_Activate; - goto sendI2cRequest; - } - } - - return; - -#if SDK_VERSION_DATE < 20080630 -toPositiveEdgeAndSendI2cRequest: - CAMERA_StopCapture(); - mIntrPositiveEdge = TRUE; - CAMERA_SetVsyncInterrupt(CAMERA_INTR_VSYNC_POSITIVE_EDGE); -#else - // intr edgeCAMERACunhOB -#endif -// thru -sendI2cRequest: - CAMERA_StopCapture(); - if (!OS_SendMessage(&mI2cMsgQueue, (OSMessage)msg, OS_MESSAGE_NOBLOCK)) { - // gCKvB - } else { - // Ô߁AI2CtOĂĂB - mI2cBusy = TRUE; - - // G[gCJE^𑝂₷Kv肻B - } -} - - -u16* Manager::procPreCapture() -{ - return allocCapBuf(); -} - - -void Manager::procPostCapture() -{ - if (mpCaptureBuf) { - if (mpConvBuf) { - // OYUV2RGBϊĂȂB -#ifndef TWL_IPL_FINAL - static u32 count; - IPL_PRINT("mConvBusy! %d, nextp %s\n", count++, mpNextConvBuf ? "exist" : "empty"); -#endif - // Bef[^ŁAŽϊ\̃obt@݂Ȃ - // ϊ\ƂB - if (mShotFlag && !mpNextConvBuf) { - mpNextConvBuf = mpCaptureBuf; - // LowerXbhOS_WaitEvent()ŃubNȂ悤AϊBevZbgĂB - OS_SignalEvent(&mLowerEvent, cEventMaskLower_NextConvertAndShot); - } else { - // ̃Lv`ς݃f[^͔jB - freeCapBufByPtr((u16*)mpCaptureBuf); - } - } else { - // YUV2RGBϊvZbgB - mpConvBuf = mpCaptureBuf; - OS_SignalEvent(&mLowerEvent, - (u32)(cEventMaskLower_Convert | (mShotFlag ? cEventMaskLower_Shot : 0))); - } - mpCaptureBuf = NULL; - } -} - - -void Manager::procPostConvert(BOOL shot) -{ - if (shot) { - // Lv`ς݃f[^͎BepɎgB - mpShotBuf = mpConvBuf; - } else { - // Lv`ς݃f[^͕svȂ̂Ŏ̂ĂB - freeCapBufByPtr((u16*)mpConvBuf); - } - mpConvBuf = NULL; -} - - -// (mpShotBuf != NULL) ̂Ƃ̂݌Ă΂B -void Manager::procPostShot() -{ -// #ifndef TWL_IPL_FINAL -// mDebugPort = __LINE__; -// #endif - // "check only urgent errors here" ă}WH荞݋֎~ŌĂ΂Ă邩B - - freeCapBufByPtr((u16*)mpShotBuf); -} - - -// 荞݃[`̂݌Ă΂̂Ŋ荞݋֎~ɂĂȂB -// Lv`ABeŃTCYςꍇłĂA傫 -// TCYz肵ăobt@mۂB -u16* Manager::allocCapBuf() -{ - for (u32 i = 0; i < cBufferCount; i++) { - if (!mIsCapBufUsed[i] && mpCapBuf[i]) { - mIsCapBufUsed[i] = TRUE; -// OS_TPrintf("allocCapBuf[%d]=%x\n", i, mpCapBuf[i]); - return mpCapBuf[i]; - } - } - IPL_PRINT("allocCapBuf: no memory! %d %d\n", mCaptureFlag, mShotFlag); - - return NULL; -} - - -void Manager::freeCapBufByPtr(const u16* pBuf) -{ - if (pBuf) { - for (u32 i = 0; i < cBufferCount; i++) { - if (mpCapBuf[i] == const_cast(pBuf)) { - mIsCapBufUsed[i] = FALSE; - return; - } - } - } -} - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else -BOOL Manager::writeJpegToNand(const u8* src, u32 size) -{ - BOOL ret = FALSE; - -// const u8* path; -// -// path = MenuSys()->getUpPicMgr()->getSavePath(); -// if (path) { -// cmn::sys::File file( (const char*)path ); -// ret = file.write(src, size); -// IPL_PRINT("writeJpegToNand(%s)=%d\n", path, ret); -// if (ret) { -// MenuSys()->getUpPicMgr()->calcNextSavePath(); -// } -// } - - ret = MenuSys()->getUpPicMgr()->writeTclPictureFile(src, size); - - return ret; -} -#endif - - -// t@C͒̐lɂȂB -BOOL Manager::writeJpegToSD(const u8* src, u32 size) -{ - FSFile file; - FSFile* pFile = &file; - u32 i; - - // DC_StoreAll(), DC_FlushAll() is NG? - DC_StoreAll(); - -/* - SDJ[h/menu/MENU####.jpg Ƃt@C𐶐 -*/ -#define JPEG_DIRNAME "sdmc:/menu" -#define JPEG_FILENAME "menu%04d.jpg" - - if ( !pFile ) - { - return FALSE; - } - - /* - fBNg݂̑mƂ - {́A܂SDJ[h݂邩mFǍfBNgł - ݂邩Ė΍Ƃŗǂ̂Ał́A - I[vȂ΂ȂȂI - */ - { - FSFile dir; - if ( !FS_OpenDirectory( &dir, JPEG_DIRNAME, FS_FILEMODE_R | FS_FILEMODE_W ) ) - { - if ( !FS_CreateDirectory( JPEG_DIRNAME, FS_PERMIT_R | FS_PERMIT_W ) ) - { - IPL_PRINT("Cannot create directory %s.\n", JPEG_DIRNAME); - return FALSE; - } - } - else - { - FS_CloseDirectory( &dir ); - } - } - - FS_InitFile( pFile ); - - for (i = -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - 0 -#else - 1000 -#endif - ; i < 10000; i++) - { - char buffer[32]; - STD_TSPrintf(buffer, JPEG_DIRNAME "/" JPEG_FILENAME, i); - if ( FS_CreateFile( buffer, FS_PERMIT_W ) ) // łɂꍇs - { - if ( FS_OpenFileEx( pFile, buffer, FS_FILEMODE_W ) ) // 쐬Ẵt@CI[v - { - // OK - break; -// if (filename) // Ƀw肳Ă΂Ƀt@Ci[ -// { -// STD_CopyLString( filename, buffer, 256 ); -// } -// return TRUE; - } else { - IPL_PRINT("Create %s, but cannot open it.\n", buffer); // vIȃG[ - return FALSE; - } - } - } - if (i == 10000) { - IPL_PRINT("Too many files in %s.\n", JPEG_DIRNAME); - return FALSE; - } - - if ( FS_WriteFile( pFile, src, static_cast(size) ) != size ) - { - FS_CloseFile( pFile ); - return FALSE; - } - FS_CloseFile( pFile ); - return TRUE; -} - - -// /*! -// Vb^[TEht@CZbg p\ -// @param p_wav WAṼwb_̂Ȃt@C -// @param size TCY -// */ -// void Manager::setShutterSnd( const u8* p_wav , u32 size , BOOL stereo ) -// { -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -// OSIntrMode enabled = OS_DisableInterrupts(); -// -// mpShutterSnd = p_wav; -// mShutterSndSize = size; -// mShutterStereo = stereo; -// -// OS_RestoreInterrupts(enabled); -// #endif -// } - - -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -// /*! -// Vb^[TEhJn -// */ -// void Manager::startShutterSnd() -// { -// if ( mpShutterSnd ) -// { -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -// SNDEX_SetDSPMixRate( 0 ); -// SNDEX_ForceOut( TRUE ); -// DSP_PlaySound( (void*)mpShutterSnd, (u32)(mShutterSndSize / 2), mShutterStereo ); -// #else -// MenuSys()->getDspMgr()->playSound(mpShutterSnd, (u32)(mShutterSndSize / sizeof(u16)), mShutterStereo); -// #endif -// } -// } -// -// /*! -// Vb^[TEhI -// */ -// void Manager::finishShutterSnd() -// { -// if ( mpShutterSnd ) -// { -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -// SNDEX_SetDSPMixRate( 8 ); -// SNDEX_ForceOut( FALSE ); -// #else -// MenuSys()->getDspMgr()->stopSound(); -// #endif -// } -// } -// -// /*! -// Vb^[TEhIĂ邩 -// @retval TRUE IĂ -// @retval FALSE ĂȂ -// */ -// BOOL Manager::isFinishedShutterSnd() const -// { -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -// return TRUE; -// #else -// return !(MenuSys()->getDspMgr()->isSoundPlaying()); -// #endif -// } -// #endif - -void Manager::setCaptureRgbFlag(BOOL useRgb) -{ - mCaptureRgbFlag = (u8)useRgb; - mEncodeOption = (u32)(SSP_JPEG_THUMBNAIL | (useRgb ? SSP_JPEG_RGB555 : SSP_JPEG_YUV422)); -} - -void Manager::encodeAndSave() -{ - u32 err = 0; - OSTick tick; - - if (!mpShotBuf) { - IPL_HALT("!mpShotBuf\n"); - // TWL_IPL_FINALł̓X[[ - return; - } - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else - // W[[hɁAVb^[~܂H - // Vb^[ĐOJPEGGR[_W[ - // [hĂKv悤B - // Vb^[‚I܂DSPLB - MenuSys()->getDspMgr()->lock(); - MenuSys()->getDspMgr()->loadJpegEncoder(); -#endif - -// // DSPgꍇ̂݁AVb^[̍ĐwoB -// startShutterSnd(); - - DSPFrame_y = mpEncodeWork->y; - DSPFrame_cb = mpEncodeWork->cbcr; - DSPFrame_cr = DSPFrame_cb + (mShotWdt * mShotHgt / 4); -#endif - - tick = OS_GetTick(); - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - Convert8bitYuv422To16bitYuv420((const u32*)mpShotBuf, - DSPFrame_y, - mShotWdt, - mShotHgt, - mpDtcmWork->mYuvBuf); - // store YUV420 and invalidate encode result - DC_FlushAll(); -#endif - - IPL_PRINT("procShot: yuv422to420 time %d usec\n", (u32)OS_TicksToMicroSeconds(OS_GetTick() - tick)); - tick = OS_GetTick(); - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else - // SDJ[hANZX̃`‚΍ - // VuN荞݂x̂ŁAAtBp^WX^֏܂ȂB - // writeJpegToSD()ĂԒO̐ݒł͊ԂɍȂ悤B -// MenuSys()->getUpPicMgr()->setSkipAffineFlag(TRUE); -#endif - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - // o̓TCY͂قǕKvH - DSP_SetJpegEncoderBuffer(mpEncodeResult, cEncodeResultSizeMax); - // explicit initialization - DSP_SetJpegEncoderThumbnailBuffer(NULL, NULL, NULL); - u32 size = DSP_StartJpegEncoder( static_cast< s16 > ( mShotWdt ) , - static_cast< s16 > ( mShotHgt ) , - DSP_JPEG_THUMBNAIL , - 4 ); -#else - // o̓TCY͂قǕKvH - // unlockupPicMgr if (event & cEventMask_WipeReplace) ōsB - MenuSys()->getUpPicMgr()->lockTcl(); - MenuSys()->getUpPicMgr()->lockJpegBuf(); - u32 size = MenuSys()->getDspMgr()->encodeJpegFrom16bitYuv420(DSPFrame_y, - mShotWdt, - mShotHgt, - MenuSys()->getUpPicMgr()->getJpegBufPtr(), - MenuSys()->getUpPicMgr()->getJpegBufSize(), - NULL, - 0, - DSP_JPEG_THUMBNAIL); -#endif -#else -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else - // unlockupPicMgr if (event & cEventMask_WipeReplace) ōsB - MenuSys()->getUpPicMgr()->lockTcl(); - MenuSys()->getUpPicMgr()->lockJpegBuf(); - - SSP_SetJpegEncoderMakerNote(MenuSys()->getUpPicMgr()->getMakerNote(), - MenuSys()->getUpPicMgr()->getMakerNoteSize()); -#endif - - if (!SSP_SetJpegEncoderDateTimeNow()) { - // ̖ߍ݂ɎŝŃ[Ŗ߂B - // ́uYYYY:MM:DD HH:MM:DDv+0x00 20 ƂĂB - static const u8 zeroes[20] = {}; - IPL_PRINT("SSP_SetJpegEncoderDateTimeNow() failed!\n"); - SSP_SetJpegEncoderDateTime((u8*)zeroes); - } - SSP_SetJpegEncoderSignMode(TRUE); - u32 size = SSP_StartJpegEncoder((const void*)mpShotBuf, -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - mpEncodeResult, - cEncodeResultSizeMax, -#else - MenuSys()->getUpPicMgr()->getJpegBufPtr(), - MenuSys()->getUpPicMgr()->getJpegBufSize(), -#endif - mpEncodeWork, - mShotWdt, mShotHgt, - cEncodeQuality, cEncodeSampling, mEncodeOption); -#endif - - IPL_PRINT("procShot: encode size %d, time %d usec\n", size, (u32)OS_TicksToMicroSeconds(OS_GetTick() - tick)); - - tick = OS_GetTick(); - - // save to SD or NAND - if (size) { -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else - if (!writeJpegToNand(MenuSys()->getUpPicMgr()->getJpegBufPtr(), - size)) { - err = 3; - } -#endif - - - if (!writeJpegToSD( -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT - mpEncodeResult, -#else - MenuSys()->getUpPicMgr()->getJpegBufPtr(), -#endif - size)) { - // SDJ[hւ̕ۑ̓eXgȂ̂ŁAG[ɂ͂ȂB - // do nothing - } - } else { - err = 4; - } - - IPL_PRINT("procShot: save err %d, time %d usec\n", err, (u32)OS_TicksToMicroSeconds(OS_GetTick() - tick)); - -// #ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP -// while (!isFinishedShutterSnd()) { -// IPL_PRINT("procShot: waiting ShutterSnd finish\n"); -// OS_Sleep(1); -// } -// finishShutterSnd(); -// #endif - -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_FOR_LOCAL_PROJECT -#else -#ifdef TWL_IPL_MENU_CAMERA_MANAGER_USE_DSP - // Vb^[‚IDSP̐LłB - MenuSys()->getDspMgr()->unlock(); -#endif - - MenuSys()->getUpPicMgr()->setJpegDataSize(size); - - if (MenuSys()->getUpPicMgr()->isEffectTypeNormal()) { - // JPEGfR[hsB - // ‚܂AJV[Î߂̃tF[hAEgJnxB - MenuSys()->getUpPicMgr()->decodeJpeg(); - } else { - // ɌÂʐ^̃CvAEgJnB - // JV[Î߂̃tF[hAEgJnȂ邪 - // `[Cʂ֖߂Ă΂炭ʂȂB - // ̏ԂŃ`[Cʂ̑͂ł邪AdB - MenuSys()->getUpPicMgr()->wipeOut(); - } - -// MenuSys()->getUpPicMgr()->setSkipAffineFlag(FALSE); -#endif - - if (!mShotErr) { - mShotErr = err; - } - - { - OSIntrMode enabled = OS_DisableInterrupts(); - - procPostShot(); - mpShotBuf = NULL; - mShotDone = TRUE; - - OS_RestoreInterrupts(enabled); - } - - // invalidate capture buffer for next capture - DC_FlushAll(); - - IPL_PRINT("encodeAndSave done err=%d\n", mShotErr); -} - - - -}}} diff --git a/build/tests/yuv2rgb/src/menuIrqHandler.c b/build/tests/yuv2rgb/src/menuIrqHandler.c deleted file mode 100644 index 13c8e04e..00000000 --- a/build/tests/yuv2rgb/src/menuIrqHandler.c +++ /dev/null @@ -1,169 +0,0 @@ -// This IRQ Handler is for ARM9 only. -#include "menuIrqHandler.h" -// not supplied -#include - -typedef struct MenuIrqHandlerLogControl { - // keep order! {End, Cur, VBlankCount, Top} for ldmia/stmia - MenuIrqHandlerLogBuffer* mpBufferEnd; - MenuIrqHandlerLogBuffer* mpBufferCur; - u32 mVBlankCount; - MenuIrqHandlerLogBuffer* mpBufferTop; -} MenuIrqHandlerLogControl; - -extern void MenuIrqHandler( void ); - -#include -#ifndef TWL_IPL_FINAL -static MenuIrqHandlerLogControl MenuIrqHandlerLogCtrl; -#endif -#include - -#include -#include -#include - -#ifndef TWL_IPL_FINAL -// derived from OS_IrqHandler -/*---------------------------------------------------------------------------* - Name: MenuIrqHandler - - Description: IRQ handler. call handler according to OS_InterruptTable - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -asm void MenuIrqHandler( void ) -{ - stmfd sp!, { lr } // save LR - - // get IE address - mov r12, #HW_REG_BASE - add r12, r12, #(REG_IE_OFFSET - 4) // r12: REG_IE address - 4 - - // get IME - ldrh r0, [ r12, #REG_IME_ADDR - (REG_IE_ADDR - 4) ] // r0: IME - - // get IE&IF - ldmib r12!, { r1-r2 } // r1: IE, r2: IF - - tst r0, #0x01 - andnes r1, r1, r2 // r1: IE & IF - - // if (IME==0) || (IE&IF==0) then return (without changing IF) - ldmeqfd sp!, { pc } - - //-------------------------------------------------- - // IRQ HANDLING CODE for ARCHITECTURE VERSION 5 - //-------------------------------------------------- - - ldr lr, =MenuIrqHandlerLogCtrl - - // get lowest 1 bit - rsb r3, r1, #0 - and r3, r1, r3 - - // clear IF - str r3, [ r12 ], #-REG_IF_OFFSET - - ldmia lr!, {r0, r1, r2} // mpBufferEnd, mpBufferCur, mVBlankCount - cmp r1, r0 - bcs @logSkip // log full or no buffer - -@logWrap: - ldrh r0, [r12, #REG_VCOUNT_ADDR - HW_REG_BASE] - add r1, r1, #sizeof(MenuIrqHandlerLogBuffer) - tst r3, #OS_IE_V_BLANK - addne r2, r2, #1 - bic r2, r2, #1 << 18 // lower 18bits only - stmdb lr, {r1, r2} // update mpBufferCur, mVBlankCount - - orr r2, r2, r0, lsl #23 // mInVLineCount | mInVBlankCount - // get jump vector - ldr r0, =OS_IRQTable + ((OS_IRQ_TABLE_MAX - 1) << 2) - clz r3, r3 - ldr r0, [r0, -r3, lsl #2] - orr r2, r2, r3, lsl #18 // mIntr - ldr r3, [r12, #REG_TM0CNT_L_ADDR - HW_REG_BASE] - stmfd sp!, {r1, r2, r3} // mpBufferCur, word0, tick - - blx r0 - - mov r12, #HW_REG_BASE - ldr lr, [r12, #REG_TM0CNT_L_ADDR - HW_REG_BASE] - ldrh r0, [r12, #REG_VCOUNT_ADDR - HW_REG_BASE] - ldmfd sp!, {r1, r2, r3} - subs r12, r0, r2, lsr #23 // mVLineCounts - addmi r12, r12, #HW_LCD_HEIGHT - addmi r12, r12, #HW_LCD_VBLANK - sub r3, lr, r3 // mTicks - orr r3, r12, r3, lsl #16 - stmdb r1, {r2, r3} // word0, word1 - b OS_IrqHandler_ThreadSwitch - -@logSkip: - cmp r1, #0 - ldrne r1, [lr] // mpBufferTop - bne @logWrap - - // get jump vector - ldr r0, =OS_IRQTable + ((OS_IRQ_TABLE_MAX - 1) << 2) - clz r3, r3 - ldr r0, [r0, -r3, lsl #2] - ldr lr, =OS_IrqHandler_ThreadSwitch - bx r0 // set return address for thread rescheduling -} -#endif - -#include -#include - - -void MenuIrqHandlerStart( MenuIrqHandlerLogBuffer* pBuffer, u32 size ) -{ -#ifndef TWL_IPL_FINAL - u32 count = size / sizeof(MenuIrqHandlerLogBuffer); - MenuIrqHandlerLogControl* pCtrl = &MenuIrqHandlerLogCtrl; - BOOL enabled = OS_DisableIrq(); - - *(u32 *)(HW_DTCM + HW_DTCM_SIZE - HW_DTCM_SYSRV_SIZE + HW_DTCM_SYSRV_OFS_INTR_VECTOR) - = (u32)MenuIrqHandler; - - if ( pBuffer && count ) { - pCtrl->mpBufferTop = - pCtrl->mpBufferCur = pBuffer; - pCtrl->mpBufferEnd = pBuffer + count; - } else { - pCtrl->mpBufferTop = - pCtrl->mpBufferCur = - pCtrl->mpBufferEnd = NULL; - } - pCtrl->mVBlankCount = 0; - - OS_RestoreIrq(enabled); -#else -#pragma unused(pBuffer) -#pragma unused(size) -#endif -} - -void MenuIrqHandlerEnd( void ) -{ -#ifndef TWL_IPL_FINAL - *(u32 *)(HW_DTCM + HW_DTCM_SIZE - HW_DTCM_SYSRV_SIZE + HW_DTCM_SYSRV_OFS_INTR_VECTOR) - = (u32)OS_IrqHandler; - // keep buffer -#endif -} - -BOOL MenuIrqHandlerIsUsed( void ) -{ -#ifndef TWL_IPL_FINAL - return (*(u32 *)(HW_DTCM + HW_DTCM_SIZE - HW_DTCM_SYSRV_SIZE + HW_DTCM_SYSRV_OFS_INTR_VECTOR) - == (u32)MenuIrqHandler); -#else - return FALSE; -#endif -} - diff --git a/build/tests/yuv2rgb/src/menuIrqHandler.h b/build/tests/yuv2rgb/src/menuIrqHandler.h deleted file mode 100644 index 1e9d4e0c..00000000 --- a/build/tests/yuv2rgb/src/menuIrqHandler.h +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef MENU_IRQ_HANDLER_H_ -#define MENU_IRQ_HANDLER_H_ - -#ifdef __cplusplus -extern "C" { -#endif - -#include - -typedef struct MenuIrqHandlerLogBuffer { - union { - u32 word0; - struct { - u32 mInVLineCount : 9; // d31-d23 - u32 mIntr : 5; // d22-d18 - u32 mInVBlankCount : 18; // d17-d0 - }; - }; - union { - u32 word1; - struct { - u32 mTicks : 16; // d31-d16 - u32 mVLineCounts : 16; // d15-d0 - }; - }; -} MenuIrqHandlerLogBuffer; - -extern void MenuIrqHandlerStart( MenuIrqHandlerLogBuffer* pBuffer, u32 size ); -extern void MenuIrqHandlerEnd( void ); -extern BOOL MenuIrqHandlerIsUsed( void ); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif diff --git a/build/tests/yuv2rgb/src/new.cpp b/build/tests/yuv2rgb/src/new.cpp deleted file mode 100644 index 6ebd0e1a..00000000 --- a/build/tests/yuv2rgb/src/new.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NitroSDK - OS - demos - cplusplus-1 - File: new.cpp - - Copyright 2003,2004 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: new.cpp,v $ - Revision 1.4 2004/04/06 11:35:38 yada - fix header comment - - Revision 1.3 2004/02/20 03:32:18 yasu - add comments - - Revision 1.2 2004/02/20 00:04:05 yasu - add comments - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ -#include -#ifdef TWL_IPL_USE_RED_IPL -#include -#endif - -#define HEAP_ID ((OSHeapHandle)0) -#define ARENA_ID ((OSArenaId)OS_ARENA_MAIN) -#define ROUND(n, a) (((u32) (n) + (a) - 1) & ~((a) - 1)) - -//---------------------------------------------------------------- -// -void* operator new ( std::size_t blocksize ) -{ - void* p = OS_AllocFromHeap( ARENA_ID, HEAP_ID, blocksize ); - if (p) { -// MI_CpuClearFast(p, blocksize); - } - return p; -} - -//---------------------------------------------------------------- -// -void* operator new[] ( std::size_t blocksize ) -{ - void* p = OS_AllocFromHeap( ARENA_ID, HEAP_ID, blocksize ); - if (p) { -// MI_CpuClearFast(p, blocksize); - } - return p; -} - -//---------------------------------------------------------------- -// -void operator delete ( void* block ) throw() -{ - OS_FreeToHeap( ARENA_ID, HEAP_ID, block ); -} - -//---------------------------------------------------------------- -// -void operator delete[] ( void* block ) throw() -{ - OS_FreeToHeap( ARENA_ID, HEAP_ID, block ); -} - -/*---------------------------------------------------------------------------* - Name: NitroStartUp - - Description: startup before NitroMain() - - Initialize memory control system for new() - - FYI: - - Startup fuctions called in following order - 1) NitroStartUp(); - 2) Global/Static Constructors - 3) NitroMain(); - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void TwlStartUp(void) -{ - void* arenaLo; - void* arenaHi; - -#ifdef TWL_IPL_USE_RED_IPL - SYSM_Init(NULL, NULL); -#endif - OS_Init(); - OS_InitThread(); - GX_Init(); - OS_InitTick(); - OS_InitAlarm(); - TP_Init(); - FX_Init(); - GX_Init(); - RTC_Init(); - SNDEX_Init(); - OS_EnableIrq(); - OS_EnableInterrupts(); - FS_Init( FS_DMA_NOT_USE ); - MI_InitNDmaConfig(); - -#ifdef TWL_IPL_USE_RED_IPL - SYSM_SetArena(); // OS_IniťŃR[KvB - SYSM_InitPXI(); // 荞݋ŒɃR[KvB -#endif - - arenaLo = OS_GetArenaLo( ARENA_ID ); - arenaHi = OS_GetArenaHi( ARENA_ID ); - - // Create a heap - arenaLo = OS_InitAlloc( ARENA_ID, arenaLo, arenaHi, 1 ); - OS_SetArenaLo( ARENA_ID, arenaLo ); - - // Ensure boundaries are 32B aligned - arenaLo = (void*)ROUND( arenaLo, 32 ); - arenaHi = (void*)ROUND( arenaHi, 32 ); - - // The boundaries given to OSCreateHeap should be 32B aligned - (void)OS_SetCurrentHeap( ARENA_ID, OS_CreateHeap( ARENA_ID, arenaLo, arenaHi ) ); - - // From here on out, OS_Alloc and OS_Free behave like malloc and free respectively - OS_SetArenaLo( ARENA_ID, arenaLo = arenaHi ); -} diff --git a/build/tests/yuv2rgb/src/snd_data.c b/build/tests/yuv2rgb/src/snd_data.c deleted file mode 100644 index 65b46440..00000000 --- a/build/tests/yuv2rgb/src/snd_data.c +++ /dev/null @@ -1,10771 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - demos.TWL - snd - extraFunc - File: snd_data.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#include -#include - - -const u8 sound_seq_data[] ATTRIBUTE_ALIGN(HW_CACHE_LINE_SIZE) = -{ - 0xfe, 0xff, 0x0e, 0x93, 0x01, 0x02, 0x05, 0x00, 0x93, 0x02, 0xba, 0x05, 0x00, 0x93, 0x03, 0x72, - 0x06, 0x00, 0x93, 0x04, 0x04, 0x09, 0x00, 0x93, 0x05, 0x79, 0x0b, 0x00, 0x93, 0x06, 0xb9, 0x0b, - 0x00, 0x93, 0x07, 0x0e, 0x0d, 0x00, 0x93, 0x09, 0x44, 0x0d, 0x00, 0x93, 0x0a, 0xe9, 0x10, 0x00, - 0x93, 0x0b, 0xac, 0x18, 0x00, 0xc7, 0x00, 0xe1, 0x8c, 0x00, 0x81, 0x00, 0xc1, 0x7f, 0xc0, 0x40, - 0xc5, 0x02, 0xc4, 0x00, 0xcb, 0x10, 0xca, 0x00, 0x24, 0x7f, 0x82, 0x7f, 0x80, 0x83, 0x00, 0x30, - 0x5a, 0x82, 0x1f, 0x80, 0x82, 0x20, 0x24, 0x76, 0x04, 0x80, 0x0c, 0x24, 0x52, 0x02, 0x80, 0x0c, - 0x48, 0x6f, 0x0d, 0x80, 0x18, 0x24, 0x6e, 0x01, 0x80, 0x0c, 0x48, 0x71, 0x0b, 0x80, 0x0c, 0x24, - 0x4c, 0x01, 0x80, 0x0c, 0x24, 0x6f, 0x01, 0x80, 0x0b, 0x24, 0x7d, 0x85, 0x49, 0x80, 0x83, 0x01, - 0xca, 0x1e, 0x80, 0x82, 0x50, 0xca, 0x00, 0x24, 0x7f, 0x01, 0x80, 0x30, 0x24, 0x7f, 0x2f, 0x80, - 0x30, 0x2b, 0x6f, 0x1a, 0x80, 0x27, 0x2b, 0x3c, 0x06, 0x80, 0x09, 0x30, 0x62, 0x0a, 0x80, 0x18, - 0xc4, 0x80, 0x32, 0x67, 0x2f, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, 0x2b, 0x62, 0x08, 0x80, 0x0c, - 0x24, 0x52, 0x01, 0x80, 0x0c, 0x24, 0x7f, 0x2f, 0x80, 0x30, 0x2b, 0x67, 0x19, 0x80, 0x24, 0x2b, - 0x65, 0x0b, 0x80, 0x0c, 0x30, 0x53, 0x05, 0x80, 0x18, 0x30, 0x72, 0x17, 0x80, 0x18, 0x2b, 0x78, - 0x03, 0x80, 0x0c, 0x43, 0x74, 0x02, 0x80, 0x0c, 0x2b, 0x74, 0x0b, 0x80, 0x0c, 0x2b, 0x5e, 0x01, - 0x80, 0x0c, 0x95, 0xd8, 0x04, 0x00, 0x26, 0x74, 0x30, 0x80, 0x30, 0x2d, 0x68, 0x18, 0x80, 0x24, - 0x2d, 0x59, 0x0b, 0x80, 0x0c, 0x32, 0x59, 0x05, 0x80, 0x0c, 0x43, 0x4a, 0x02, 0x80, 0x0c, 0x32, - 0x6f, 0x23, 0x80, 0x24, 0x2c, 0x7f, 0x21, 0x80, 0x24, 0x2b, 0x7f, 0x2e, 0x80, 0x2f, 0x32, 0x62, - 0x18, 0x80, 0x24, 0x32, 0x4e, 0x0c, 0x80, 0x0d, 0x37, 0x59, 0x05, 0x80, 0x18, 0xc4, 0xac, 0x37, - 0x67, 0x2f, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, 0x32, 0x6b, 0x0c, 0x80, 0x18, 0x2b, 0x6a, 0x2e, - 0x80, 0x30, 0x32, 0x62, 0x18, 0x80, 0x24, 0x32, 0x56, 0x0b, 0x80, 0x0c, 0x37, 0x59, 0x07, 0x80, - 0x18, 0xc4, 0xbd, 0x37, 0x6a, 0x2e, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, 0x32, 0x59, 0x06, 0x80, - 0x18, 0x24, 0x7c, 0x2f, 0x80, 0x30, 0x2b, 0x65, 0x1b, 0x80, 0x24, 0x2b, 0x62, 0x0b, 0x80, 0x0c, - 0x30, 0x5c, 0x08, 0x80, 0x18, 0xc4, 0xa4, 0x30, 0x65, 0x2e, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, - 0x2b, 0x65, 0x09, 0x80, 0x18, 0x24, 0x71, 0x2f, 0x80, 0x30, 0x2b, 0x6a, 0x17, 0x80, 0x18, 0x2b, - 0x62, 0x0c, 0x80, 0x0c, 0x24, 0x62, 0x0a, 0x80, 0x0c, 0x30, 0x73, 0x08, 0x80, 0x0c, 0x48, 0x5d, - 0x03, 0x80, 0x0c, 0x4a, 0x77, 0x23, 0x2e, 0x79, 0x23, 0x80, 0x24, 0x4b, 0x79, 0x23, 0x2f, 0x79, - 0x23, 0x80, 0x24, 0x24, 0x7f, 0x2f, 0x80, 0x30, 0x2b, 0x6f, 0x1a, 0x80, 0x27, 0x2b, 0x3c, 0x06, - 0x80, 0x09, 0x30, 0x62, 0x0a, 0x80, 0x18, 0xc4, 0x80, 0x32, 0x67, 0x17, 0x80, 0x03, 0xc4, 0x00, - 0x80, 0x15, 0x32, 0x67, 0x05, 0x80, 0x06, 0x32, 0x67, 0x05, 0x80, 0x06, 0x43, 0x57, 0x03, 0x80, - 0x0c, 0x2b, 0x6a, 0x08, 0x80, 0x0c, 0x2b, 0x64, 0x01, 0x80, 0x0c, 0x24, 0x7f, 0x2f, 0x80, 0x30, - 0x2b, 0x67, 0x19, 0x80, 0x24, 0x2b, 0x65, 0x0b, 0x80, 0x0c, 0x30, 0x53, 0x05, 0x80, 0x0c, 0x30, - 0x53, 0x01, 0x80, 0x0c, 0x24, 0x7a, 0x17, 0x80, 0x18, 0x2b, 0x78, 0x03, 0x80, 0x0c, 0x43, 0x74, - 0x02, 0x80, 0x0c, 0x2b, 0x74, 0x0b, 0x80, 0x0c, 0x48, 0x5e, 0x01, 0x80, 0x0c, 0x95, 0xd8, 0x04, - 0x00, 0x26, 0x74, 0x30, 0x80, 0x30, 0x2d, 0x68, 0x18, 0x80, 0x24, 0x2d, 0x59, 0x0b, 0x80, 0x0c, - 0x32, 0x59, 0x05, 0x80, 0x0c, 0x43, 0x4a, 0x02, 0x80, 0x0c, 0x26, 0x6f, 0x23, 0x80, 0x24, 0xc4, - 0xb0, 0x2c, 0x7f, 0x21, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x21, 0x2b, 0x7f, 0x2f, 0x80, 0x30, 0x32, - 0x62, 0x18, 0x80, 0x24, 0x32, 0x51, 0x0b, 0x80, 0x0c, 0x37, 0x65, 0x07, 0x80, 0x18, 0xc4, 0x98, - 0x39, 0x62, 0x2f, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, 0x32, 0x53, 0x05, 0x80, 0x18, 0x2b, 0x71, - 0x2f, 0x80, 0x30, 0x32, 0x62, 0x17, 0x80, 0x24, 0x32, 0x49, 0x0b, 0x80, 0x0c, 0x37, 0x5c, 0x09, - 0x80, 0x0c, 0x37, 0x5c, 0x02, 0x80, 0x0c, 0xc4, 0xb4, 0x35, 0x65, 0x2f, 0x80, 0x03, 0xc4, 0x00, - 0x80, 0x2d, 0x32, 0x56, 0x06, 0x80, 0x18, 0x24, 0x7f, 0x2f, 0x80, 0x30, 0x46, 0x5b, 0x0b, 0x80, - 0x18, 0x2e, 0x7f, 0x45, 0x80, 0x48, 0x2c, 0x7f, 0x53, 0x80, 0x54, 0x44, 0x7a, 0x0b, 0x80, 0x0c, - 0x2c, 0x7d, 0x0a, 0x80, 0x0c, 0x3c, 0x33, 0x05, 0x80, 0x0c, 0x42, 0x73, 0x14, 0x80, 0x0c, 0xc4, - 0x15, 0x80, 0x0c, 0xc4, 0x00, 0x2c, 0x7c, 0x09, 0x80, 0x0c, 0x44, 0x7a, 0x09, 0x80, 0x0c, 0x2c, - 0x68, 0x09, 0x80, 0x0c, 0x3c, 0x54, 0x05, 0x80, 0x0c, 0x2c, 0x7c, 0x09, 0x80, 0x0c, 0x44, 0x38, - 0x06, 0x80, 0x0c, 0x2c, 0x73, 0x09, 0x80, 0x0c, 0x2c, 0x7a, 0x09, 0x80, 0x0c, 0x2c, 0x7c, 0x09, - 0x80, 0x0c, 0x44, 0x6d, 0x09, 0x80, 0x0c, 0x2c, 0x7a, 0x17, 0x80, 0x18, 0x2c, 0x7d, 0x09, 0x80, - 0x0c, 0x3f, 0x5c, 0x06, 0x80, 0x0c, 0x2c, 0x7d, 0x0b, 0x80, 0x0c, 0x44, 0x35, 0x05, 0x80, 0x0c, - 0x2c, 0x7e, 0x09, 0x80, 0x0c, 0x2c, 0x7a, 0x09, 0x80, 0x0c, 0x2c, 0x7c, 0x0a, 0x80, 0x0c, 0x44, - 0x7c, 0x09, 0x80, 0x0c, 0x2c, 0x7e, 0x0b, 0x80, 0x0c, 0x3c, 0x3c, 0x08, 0x80, 0x0c, 0x42, 0x70, - 0x11, 0x80, 0x0c, 0xc4, 0x15, 0x80, 0x0c, 0xc4, 0x00, 0x2c, 0x7a, 0x09, 0x80, 0x0c, 0x44, 0x7a, - 0x09, 0x80, 0x0c, 0x2c, 0x78, 0x17, 0x80, 0x18, 0x2c, 0x7d, 0x0b, 0x80, 0x0c, 0x3e, 0x44, 0x06, - 0x80, 0x0c, 0x44, 0x7d, 0x0a, 0x80, 0x0c, 0x2c, 0x62, 0x0b, 0x80, 0x0c, 0x2c, 0x7a, 0x09, 0x80, - 0x0c, 0x44, 0x7a, 0x0a, 0x80, 0x0c, 0x2a, 0x78, 0x17, 0x80, 0x18, 0x2c, 0x7d, 0x16, 0x80, 0x18, - 0x44, 0x62, 0x05, 0x80, 0x0c, 0x2c, 0x62, 0x05, 0x80, 0x0c, 0x2c, 0x7c, 0x17, 0x80, 0x18, 0x2c, - 0x7a, 0x08, 0x80, 0x0c, 0x44, 0x7a, 0x07, 0x80, 0x0c, 0x2c, 0x7d, 0x17, 0x80, 0x18, 0x2c, 0x7c, - 0x07, 0x80, 0x0c, 0x44, 0x7c, 0x07, 0x80, 0x0c, 0x2c, 0x7a, 0x09, 0x80, 0x0c, 0x44, 0x76, 0x05, - 0x80, 0x0c, 0x29, 0x78, 0x17, 0x80, 0x18, 0x2a, 0x71, 0x16, 0x80, 0x18, 0x2b, 0x79, 0x17, 0x80, - 0x18, 0x2c, 0x7f, 0x17, 0x80, 0x24, 0x44, 0x7a, 0x0b, 0x80, 0x0c, 0x2c, 0x7d, 0x0a, 0x80, 0x0c, - 0x3c, 0x33, 0x05, 0x80, 0x0c, 0x42, 0x61, 0x14, 0x80, 0x18, 0x2c, 0x7c, 0x09, 0x80, 0x0c, 0x44, - 0x7a, 0x09, 0x80, 0x0c, 0x2c, 0x68, 0x09, 0x80, 0x0c, 0x3c, 0x54, 0x05, 0x80, 0x0c, 0x2c, 0x7c, - 0x09, 0x80, 0x0c, 0x44, 0x38, 0x06, 0x80, 0x0c, 0x2c, 0x73, 0x09, 0x80, 0x0c, 0x2c, 0x7a, 0x09, - 0x80, 0x0c, 0x2c, 0x7d, 0x0b, 0x80, 0x0c, 0x3e, 0x44, 0x06, 0x80, 0x0c, 0x44, 0x7d, 0x0a, 0x80, - 0x0c, 0x2c, 0x62, 0x0b, 0x80, 0x0c, 0x2c, 0x7d, 0x0b, 0x80, 0x0c, 0x44, 0x7d, 0x0a, 0x80, 0x0c, - 0x3e, 0x44, 0x06, 0x80, 0x0c, 0x2c, 0x62, 0x0b, 0x80, 0x0c, 0x2c, 0x7a, 0x07, 0x80, 0x0c, 0x44, - 0x5d, 0x04, 0x80, 0x0c, 0x27, 0x7d, 0x59, 0x80, 0x60, 0x3f, 0x72, 0x05, 0x80, 0x0c, 0x27, 0x62, - 0x05, 0x80, 0x0c, 0x27, 0x72, 0x05, 0x80, 0x18, 0x3f, 0x70, 0x05, 0x80, 0x0c, 0x27, 0x62, 0x05, - 0x80, 0x0c, 0x27, 0x72, 0x05, 0x80, 0x0c, 0x3f, 0x62, 0x05, 0x80, 0x0c, 0x27, 0x62, 0x05, 0x80, - 0x18, 0x3f, 0x76, 0x11, 0x80, 0x18, 0x27, 0x67, 0x05, 0x80, 0x0c, 0x27, 0x65, 0x05, 0x80, 0x81, - 0x4c, 0x27, 0x7d, 0x16, 0x80, 0x18, 0x3f, 0x72, 0x05, 0x80, 0x0c, 0x27, 0x62, 0x05, 0x80, 0x0c, - 0x27, 0x72, 0x05, 0x80, 0x18, 0x3f, 0x70, 0x05, 0x80, 0x0c, 0x27, 0x62, 0x05, 0x80, 0x0c, 0x27, - 0x72, 0x05, 0x80, 0x0c, 0x3f, 0x62, 0x05, 0x80, 0x0c, 0x27, 0x62, 0x05, 0x80, 0x18, 0x3f, 0x76, - 0x11, 0x80, 0x18, 0x27, 0x67, 0x05, 0x80, 0x0c, 0x27, 0x65, 0x05, 0x80, 0x81, 0x4b, 0x27, 0x60, - 0x34, 0x80, 0x01, 0xc4, 0x00, 0x80, 0x03, 0xc4, 0xff, 0x80, 0x04, 0xc4, 0xfc, 0x80, 0x03, 0xc4, - 0xf9, 0x80, 0x04, 0xc4, 0xf3, 0x80, 0x03, 0xc4, 0xec, 0x80, 0x04, 0xc4, 0xe3, 0x80, 0x03, 0xc4, - 0xda, 0x80, 0x04, 0xc4, 0xce, 0x80, 0x03, 0xc4, 0xc1, 0x80, 0x04, 0xc4, 0xb2, 0x80, 0x04, 0xc4, - 0xa2, 0x80, 0x03, 0xc4, 0x90, 0x80, 0x04, 0xc4, 0x80, 0x80, 0x02, 0xc4, 0x00, 0x80, 0x84, 0x10, - 0x94, 0x3a, 0x00, 0x00, 0x80, 0x81, 0x40, 0xff, 0x26, 0x7f, 0x2f, 0x80, 0x30, 0x2d, 0x73, 0x17, - 0x80, 0x24, 0x2d, 0x42, 0x0b, 0x80, 0x0c, 0x32, 0x5e, 0x05, 0x80, 0x18, 0xc4, 0x80, 0x34, 0x6f, - 0x30, 0x80, 0x03, 0xc4, 0x00, 0x80, 0x2d, 0x2d, 0x66, 0x0b, 0x80, 0x0c, 0x26, 0x50, 0x01, 0x80, - 0x0c, 0xfd, 0xc7, 0x00, 0x81, 0x01, 0xc1, 0x4a, 0xc0, 0x7f, 0xc4, 0x00, 0xca, 0x00, 0x4a, 0x53, - 0x82, 0x7f, 0x47, 0x4a, 0x82, 0x7f, 0x80, 0x83, 0x00, 0x4c, 0x49, 0x82, 0x74, 0x48, 0x40, 0x82, - 0x73, 0x80, 0x83, 0x00, 0x48, 0x43, 0x82, 0x7d, 0x4c, 0x48, 0x82, 0x7c, 0x80, 0x83, 0x00, 0x47, - 0x35, 0x82, 0x68, 0x4a, 0x43, 0x82, 0x68, 0x80, 0x83, 0x00, 0x47, 0x67, 0x82, 0x79, 0x4a, 0x70, - 0x82, 0x79, 0x80, 0x83, 0x00, 0x48, 0x5a, 0x82, 0x68, 0x4c, 0x63, 0x82, 0x68, 0x80, 0x83, 0x00, - 0x4c, 0x63, 0x82, 0x79, 0x48, 0x66, 0x82, 0x79, 0x80, 0x83, 0x00, 0x4a, 0x6b, 0x82, 0x2d, 0x47, - 0x55, 0x82, 0x2d, 0x80, 0x82, 0x38, 0x48, 0x73, 0x22, 0x45, 0x66, 0x22, 0x80, 0x24, 0x49, 0x6b, - 0x23, 0x46, 0x66, 0x23, 0x80, 0x24, 0x4a, 0x6e, 0x82, 0x79, 0x47, 0x69, 0x82, 0x79, 0x80, 0x83, - 0x00, 0x4c, 0x60, 0x82, 0x6d, 0x48, 0x5d, 0x82, 0x6d, 0x80, 0x83, 0x00, 0x4c, 0x66, 0x82, 0x7a, - 0x48, 0x63, 0x82, 0x79, 0x80, 0x83, 0x00, 0x4a, 0x60, 0x45, 0x47, 0x4f, 0x45, 0x80, 0x48, 0x4b, - 0x66, 0x47, 0x48, 0x55, 0x47, 0x80, 0x48, 0x49, 0x4f, 0x83, 0x2f, 0x4d, 0x69, 0x83, 0x2f, 0x80, - 0x93, 0x70, 0x94, 0x04, 0x05, 0x00, 0x80, 0x81, 0x40, 0xff, 0xc7, 0x00, 0x81, 0x02, 0xc1, 0x4a, - 0xc0, 0x00, 0xc4, 0x00, 0xca, 0x00, 0x40, 0x47, 0x82, 0x7f, 0x43, 0x58, 0x82, 0x7f, 0x80, 0x83, - 0x00, 0x42, 0x40, 0x82, 0x79, 0x45, 0x57, 0x82, 0x79, 0x80, 0x83, 0x00, 0x45, 0x56, 0x82, 0x7f, - 0x41, 0x49, 0x82, 0x7f, 0x80, 0x83, 0x00, 0x40, 0x5c, 0x82, 0x67, 0x43, 0x57, 0x82, 0x67, 0x80, - 0x83, 0x00, 0x43, 0x66, 0x82, 0x7a, 0x40, 0x6c, 0x82, 0x7a, 0x80, 0x83, 0x00, 0x45, 0x66, 0x82, - 0x6e, 0x42, 0x6c, 0x82, 0x6e, 0x80, 0x83, 0x00, 0x45, 0x69, 0x82, 0x79, 0x41, 0x5b, 0x82, 0x7a, - 0x80, 0x83, 0x00, 0x40, 0x6f, 0x82, 0x2d, 0x43, 0x61, 0x82, 0x2d, 0x80, 0x82, 0x38, 0x3e, 0x67, - 0x22, 0x41, 0x60, 0x22, 0x80, 0x24, 0x3f, 0x6a, 0x23, 0x42, 0x62, 0x23, 0x80, 0x24, 0x40, 0x73, - 0x82, 0x7a, 0x43, 0x61, 0x82, 0x7a, 0x80, 0x83, 0x00, 0x45, 0x61, 0x82, 0x6d, 0x42, 0x60, 0x82, - 0x6d, 0x80, 0x83, 0x00, 0x41, 0x67, 0x82, 0x7a, 0x45, 0x5e, 0x82, 0x79, 0x80, 0x83, 0x00, 0x40, - 0x6c, 0x45, 0x43, 0x5b, 0x45, 0x80, 0x48, 0x44, 0x5e, 0x47, 0x41, 0x69, 0x47, 0x80, 0x48, 0x42, - 0x6c, 0x83, 0x2f, 0x46, 0x61, 0x83, 0x2f, 0x80, 0x93, 0x70, 0x94, 0xbc, 0x05, 0x00, 0x80, 0x81, - 0x40, 0xff, 0xc7, 0x00, 0x81, 0x03, 0xc1, 0x5a, 0xc0, 0x7f, 0xc4, 0x00, 0xcb, 0x17, 0xca, 0x00, - 0x3b, 0x3a, 0x82, 0x79, 0x3e, 0x43, 0x82, 0x79, 0x80, 0x60, 0x4f, 0x5c, 0x06, 0x80, 0x18, 0x4f, - 0x26, 0x06, 0x80, 0x0c, 0x43, 0x5c, 0x06, 0x80, 0x0c, 0x4f, 0x14, 0x06, 0x80, 0x0c, 0x43, 0x26, - 0x06, 0x80, 0x18, 0x43, 0x14, 0x06, 0x80, 0x6c, 0x4f, 0x5c, 0x06, 0x80, 0x18, 0x4f, 0x26, 0x06, - 0x80, 0x0c, 0x43, 0x5c, 0x06, 0x80, 0x0c, 0x4f, 0x14, 0x06, 0x80, 0x0c, 0x43, 0x26, 0x06, 0x80, - 0x18, 0x43, 0x14, 0x06, 0x80, 0x0c, 0x40, 0x4f, 0x82, 0x79, 0x3c, 0x46, 0x82, 0x79, 0x80, 0x60, - 0x4f, 0x5c, 0x05, 0x80, 0x18, 0x4f, 0x26, 0x05, 0x80, 0x0c, 0x43, 0x5c, 0x05, 0x80, 0x0c, 0x4f, - 0x14, 0x05, 0x80, 0x0c, 0x43, 0x26, 0x05, 0x80, 0x18, 0x43, 0x14, 0x05, 0x80, 0x6c, 0x4f, 0x5c, - 0x04, 0x80, 0x18, 0x4f, 0x26, 0x04, 0x80, 0x0c, 0x43, 0x5c, 0x04, 0x80, 0x0c, 0x4f, 0x14, 0x04, - 0x80, 0x0c, 0x43, 0x26, 0x04, 0x80, 0x18, 0x43, 0x14, 0x04, 0x80, 0x0c, 0x3c, 0x3f, 0x82, 0x77, - 0x40, 0x44, 0x82, 0x76, 0x80, 0x60, 0x4f, 0x5c, 0x05, 0x80, 0x18, 0x4f, 0x26, 0x05, 0x80, 0x0c, - 0x43, 0x5c, 0x04, 0x80, 0x0c, 0x4f, 0x14, 0x05, 0x80, 0x0c, 0x43, 0x26, 0x04, 0x80, 0x18, 0x43, - 0x14, 0x04, 0x80, 0x6c, 0x4f, 0x5c, 0x07, 0x80, 0x18, 0x4f, 0x26, 0x07, 0x80, 0x0c, 0x43, 0x5c, - 0x05, 0x80, 0x0c, 0x4f, 0x14, 0x07, 0x80, 0x0c, 0x43, 0x26, 0x05, 0x80, 0x18, 0x43, 0x14, 0x05, - 0x80, 0x0c, 0x3e, 0x3a, 0x82, 0x7a, 0x3b, 0x2c, 0x82, 0x7b, 0x80, 0x60, 0x4f, 0x5c, 0x05, 0x80, - 0x18, 0x4f, 0x26, 0x05, 0x80, 0x0c, 0x43, 0x5c, 0x05, 0x80, 0x0c, 0x4f, 0x14, 0x05, 0x80, 0x0c, - 0x43, 0x26, 0x05, 0x80, 0x18, 0x43, 0x14, 0x05, 0x80, 0x81, 0x48, 0x4e, 0x4c, 0x0d, 0x80, 0x05, - 0xc0, 0x4f, 0x4f, 0x59, 0x82, 0x0e, 0x80, 0x81, 0x10, 0xca, 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, - 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x6d, 0xca, 0x00, 0x80, 0x05, 0x4f, 0x35, 0x05, - 0x80, 0x06, 0x51, 0x5b, 0x4a, 0x80, 0x48, 0x4f, 0x46, 0x07, 0x80, 0x17, 0x4e, 0x50, 0x42, 0x80, - 0x48, 0x56, 0x61, 0x81, 0x6e, 0x80, 0x62, 0xca, 0x02, 0x80, 0x08, 0xca, 0x07, 0x80, 0x08, 0xca, - 0x0b, 0x80, 0x07, 0xca, 0x12, 0x80, 0x79, 0xca, 0x00, 0x51, 0x5c, 0x44, 0x80, 0x40, 0x53, 0x55, - 0x09, 0x80, 0x08, 0x54, 0x55, 0x78, 0x80, 0x54, 0xca, 0x01, 0x80, 0x09, 0xca, 0x0a, 0x80, 0x08, - 0xca, 0x17, 0x80, 0x12, 0x53, 0x58, 0x49, 0x80, 0x01, 0xca, 0x00, 0x80, 0x47, 0x51, 0x53, 0x79, - 0x80, 0x49, 0xca, 0x01, 0x80, 0x08, 0xca, 0x09, 0x80, 0x08, 0xca, 0x0f, 0x80, 0x07, 0xca, 0x17, - 0x80, 0x19, 0xca, 0x00, 0x53, 0x5d, 0x48, 0x80, 0x47, 0x54, 0x56, 0x81, 0x40, 0x80, 0x4f, 0xca, - 0x00, 0x80, 0x07, 0xca, 0x04, 0x80, 0x08, 0xca, 0x09, 0x80, 0x07, 0xca, 0x0d, 0x80, 0x07, 0xca, - 0x12, 0x80, 0x54, 0x4f, 0x56, 0x77, 0x80, 0x01, 0xca, 0x00, 0x80, 0x4e, 0xca, 0x00, 0x80, 0x09, - 0xca, 0x09, 0x80, 0x08, 0xca, 0x12, 0x80, 0x13, 0xca, 0x00, 0x80, 0x02, 0x4d, 0x55, 0x2b, 0x80, - 0x28, 0x4e, 0x50, 0x25, 0x80, 0x23, 0x4f, 0x58, 0x82, 0x08, 0x80, 0x81, 0x11, 0xca, 0x00, 0x80, - 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x61, 0xca, 0x00, 0x80, - 0x12, 0x4f, 0x41, 0x0b, 0x80, 0x06, 0x51, 0x53, 0x4a, 0x80, 0x48, 0x4f, 0x44, 0x0a, 0x80, 0x17, - 0x4e, 0x46, 0x44, 0x80, 0x47, 0x56, 0x5e, 0x81, 0x6f, 0x80, 0x62, 0xca, 0x00, 0x80, 0x08, 0xca, - 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x78, 0x54, 0x5e, 0x4a, 0x80, 0x01, - 0xca, 0x00, 0x80, 0x47, 0x58, 0x59, 0x49, 0x80, 0x48, 0x54, 0x60, 0x7a, 0x80, 0x49, 0xca, 0x00, - 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x19, 0xca, 0x00, - 0x53, 0x5d, 0x76, 0x80, 0x48, 0xca, 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, - 0x07, 0xca, 0x12, 0x80, 0x13, 0x54, 0x26, 0x0e, 0x80, 0x05, 0x56, 0x57, 0x4a, 0x80, 0x01, 0xca, - 0x00, 0x80, 0x47, 0x54, 0x5f, 0x82, 0x7f, 0x80, 0x81, 0x11, 0xca, 0x01, 0x80, 0x08, 0xca, 0x04, - 0x80, 0x08, 0xca, 0x09, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x08, 0xca, 0x0f, 0x80, 0x08, 0xca, 0x12, - 0x80, 0x07, 0xca, 0x17, 0x80, 0x81, 0x41, 0xca, 0x00, 0x80, 0x91, 0x7f, 0x94, 0x74, 0x06, 0x00, - 0x80, 0x81, 0x40, 0xff, 0xc7, 0x00, 0x81, 0x04, 0xc1, 0x5a, 0xc0, 0x00, 0xc4, 0x00, 0xcb, 0x17, - 0xca, 0x00, 0x37, 0x53, 0x82, 0x7c, 0x34, 0x3f, 0x82, 0x7a, 0x80, 0x6c, 0x43, 0x5f, 0x06, 0x80, - 0x18, 0x43, 0x28, 0x06, 0x80, 0x18, 0x4f, 0x5f, 0x09, 0x43, 0x11, 0x06, 0x80, 0x18, 0x4f, 0x28, - 0x09, 0x80, 0x0c, 0x95, 0x5a, 0x0b, 0x00, 0x39, 0x46, 0x82, 0x79, 0x36, 0x2f, 0x82, 0x79, 0x80, - 0x0c, 0x4f, 0x11, 0x08, 0x80, 0x60, 0x43, 0x5f, 0x05, 0x80, 0x18, 0x43, 0x28, 0x05, 0x80, 0x18, - 0x4f, 0x5f, 0x08, 0x43, 0x11, 0x05, 0x80, 0x18, 0x4f, 0x28, 0x08, 0x80, 0x18, 0x4f, 0x11, 0x08, - 0x80, 0x60, 0x43, 0x5f, 0x07, 0x80, 0x18, 0x43, 0x28, 0x07, 0x80, 0x18, 0x4f, 0x5f, 0x09, 0x43, - 0x11, 0x07, 0x80, 0x18, 0x4f, 0x28, 0x09, 0x80, 0x0c, 0x35, 0x34, 0x82, 0x7a, 0x39, 0x3e, 0x82, - 0x79, 0x80, 0x0c, 0x4f, 0x11, 0x09, 0x80, 0x60, 0x43, 0x5f, 0x04, 0x80, 0x18, 0x43, 0x28, 0x04, - 0x80, 0x18, 0x4f, 0x5f, 0x09, 0x43, 0x11, 0x04, 0x80, 0x18, 0x4f, 0x28, 0x09, 0x80, 0x0c, 0x95, - 0x5a, 0x0b, 0x00, 0x34, 0x41, 0x82, 0x7c, 0x37, 0x34, 0x82, 0x7c, 0x80, 0x0c, 0x4f, 0x11, 0x08, - 0x80, 0x60, 0x43, 0x5f, 0x05, 0x80, 0x18, 0x43, 0x28, 0x05, 0x80, 0x18, 0x4f, 0x5f, 0x08, 0x43, - 0x11, 0x05, 0x80, 0x18, 0x4f, 0x28, 0x08, 0x80, 0x18, 0x4f, 0x11, 0x08, 0x80, 0x81, 0x2f, 0x42, - 0x56, 0x0d, 0x80, 0x05, 0x43, 0x63, 0x82, 0x0e, 0x80, 0x02, 0xc0, 0x4f, 0x80, 0x81, 0x0e, 0xca, - 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x6d, 0xca, - 0x00, 0x80, 0x05, 0x43, 0x3f, 0x05, 0x80, 0x06, 0x45, 0x65, 0x4a, 0x80, 0x48, 0x43, 0x50, 0x07, - 0x80, 0x17, 0x42, 0x5a, 0x42, 0x80, 0x48, 0x4a, 0x6b, 0x81, 0x6e, 0x80, 0x62, 0xca, 0x02, 0x80, - 0x08, 0xca, 0x07, 0x80, 0x08, 0xca, 0x0b, 0x80, 0x07, 0xca, 0x12, 0x80, 0x79, 0xca, 0x00, 0x45, - 0x66, 0x44, 0x80, 0x40, 0x47, 0x5f, 0x09, 0x80, 0x08, 0x48, 0x5f, 0x78, 0x80, 0x54, 0xca, 0x01, - 0x80, 0x09, 0xca, 0x0a, 0x80, 0x08, 0xca, 0x17, 0x80, 0x12, 0x47, 0x62, 0x49, 0x80, 0x01, 0xca, - 0x00, 0x80, 0x47, 0x45, 0x5d, 0x79, 0x80, 0x49, 0xca, 0x01, 0x80, 0x08, 0xca, 0x09, 0x80, 0x08, - 0xca, 0x0f, 0x80, 0x07, 0xca, 0x17, 0x80, 0x19, 0xca, 0x00, 0x47, 0x67, 0x48, 0x80, 0x47, 0x48, - 0x60, 0x81, 0x40, 0x80, 0x4f, 0xca, 0x00, 0x80, 0x07, 0xca, 0x04, 0x80, 0x08, 0xca, 0x09, 0x80, - 0x07, 0xca, 0x0d, 0x80, 0x07, 0xca, 0x12, 0x80, 0x54, 0x43, 0x60, 0x77, 0x80, 0x01, 0xca, 0x00, - 0x80, 0x4e, 0xca, 0x00, 0x80, 0x09, 0xca, 0x09, 0x80, 0x08, 0xca, 0x12, 0x80, 0x13, 0xca, 0x00, - 0x80, 0x02, 0x41, 0x5f, 0x2b, 0x80, 0x28, 0x42, 0x5a, 0x25, 0x80, 0x23, 0x43, 0x62, 0x82, 0x08, - 0x80, 0x81, 0x11, 0xca, 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, - 0x12, 0x80, 0x61, 0xca, 0x00, 0x80, 0x12, 0x43, 0x4b, 0x0b, 0x80, 0x06, 0x45, 0x5d, 0x4a, 0x80, - 0x48, 0x43, 0x4e, 0x0a, 0x80, 0x17, 0x42, 0x50, 0x44, 0x80, 0x47, 0x4a, 0x68, 0x81, 0x6f, 0x80, - 0x62, 0xca, 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, - 0x78, 0x48, 0x68, 0x4a, 0x80, 0x01, 0xca, 0x00, 0x80, 0x47, 0x4c, 0x63, 0x49, 0x80, 0x48, 0x48, - 0x6a, 0x7a, 0x80, 0x49, 0xca, 0x00, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, - 0xca, 0x12, 0x80, 0x19, 0xca, 0x00, 0x47, 0x67, 0x76, 0x80, 0x48, 0xca, 0x00, 0x80, 0x08, 0xca, - 0x04, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x07, 0xca, 0x12, 0x80, 0x13, 0x48, 0x30, 0x0e, 0x80, 0x05, - 0x4a, 0x61, 0x4a, 0x80, 0x01, 0xca, 0x00, 0x80, 0x47, 0x48, 0x69, 0x82, 0x7f, 0x80, 0x81, 0x11, - 0xca, 0x01, 0x80, 0x08, 0xca, 0x04, 0x80, 0x08, 0xca, 0x09, 0x80, 0x08, 0xca, 0x0a, 0x80, 0x08, - 0xca, 0x0f, 0x80, 0x08, 0xca, 0x12, 0x80, 0x07, 0xca, 0x17, 0x80, 0x81, 0x41, 0xca, 0x00, 0x80, - 0x92, 0x00, 0x94, 0x06, 0x09, 0x00, 0x80, 0x81, 0x40, 0xff, 0x80, 0x0c, 0x4f, 0x11, 0x09, 0x80, - 0x60, 0x43, 0x5f, 0x05, 0x80, 0x18, 0x43, 0x28, 0x05, 0x80, 0x18, 0x4f, 0x5f, 0x08, 0x43, 0x11, - 0x05, 0x80, 0x18, 0x4f, 0x28, 0x08, 0x80, 0x0c, 0xfd, 0xc7, 0x00, 0x81, 0x05, 0xc1, 0x5d, 0xc0, - 0x40, 0xc4, 0x00, 0xca, 0x00, 0x4f, 0x4e, 0x8b, 0x4b, 0x80, 0xa0, 0x7e, 0x4a, 0x4a, 0x45, 0x47, - 0x39, 0x45, 0x43, 0x47, 0x45, 0x80, 0x48, 0x4b, 0x51, 0x47, 0x48, 0x40, 0x47, 0x44, 0x4b, 0x47, - 0x80, 0x48, 0x49, 0x37, 0x83, 0x31, 0x4d, 0x51, 0x83, 0x31, 0x46, 0x4b, 0x83, 0x31, 0x80, 0x93, - 0x72, 0x94, 0x7b, 0x0b, 0x00, 0x80, 0x81, 0x40, 0xff, 0xc7, 0x00, 0x81, 0x06, 0xc1, 0x7f, 0xc0, - 0x40, 0xc4, 0x00, 0xca, 0x00, 0x4f, 0x48, 0x0b, 0x80, 0x18, 0x54, 0x3a, 0x0b, 0x80, 0x18, 0x5b, - 0x37, 0x0b, 0x80, 0x18, 0x4f, 0x42, 0x0b, 0x80, 0x18, 0x54, 0x3b, 0x0b, 0x80, 0x18, 0x5b, 0x2e, - 0x0b, 0x80, 0x18, 0x4f, 0x3e, 0x0b, 0x80, 0x18, 0x54, 0x38, 0x0b, 0x80, 0x18, 0x5b, 0x33, 0x0b, - 0x80, 0x18, 0x4f, 0x3a, 0x0b, 0x80, 0x18, 0x54, 0x3a, 0x0b, 0x80, 0x18, 0x5b, 0x30, 0x0b, 0x80, - 0x18, 0x4f, 0x45, 0x0b, 0x80, 0x18, 0x54, 0x3b, 0x0b, 0x80, 0x18, 0x5b, 0x34, 0x0b, 0x80, 0x18, - 0x4f, 0x3d, 0x0b, 0x80, 0x18, 0x54, 0x34, 0x0b, 0x80, 0x18, 0x5b, 0x32, 0x0b, 0x80, 0x18, 0x4f, - 0x3d, 0x0b, 0x80, 0x18, 0x54, 0x37, 0x0b, 0x80, 0x18, 0x5b, 0x2b, 0x0b, 0x80, 0x18, 0x4f, 0x40, - 0x0b, 0x80, 0x18, 0x54, 0x38, 0x0b, 0x80, 0x18, 0x5b, 0x2e, 0x0b, 0x80, 0x18, 0x4f, 0x3d, 0x0b, - 0x80, 0x18, 0x54, 0x34, 0x0b, 0x80, 0x18, 0x5b, 0x2e, 0x0b, 0x80, 0x18, 0x4f, 0x35, 0x0b, 0x80, - 0x18, 0x54, 0x34, 0x0b, 0x80, 0x18, 0x5b, 0x30, 0x0b, 0x80, 0x18, 0x4f, 0x3b, 0x0b, 0x80, 0x18, - 0x54, 0x36, 0x0b, 0x80, 0x18, 0x5b, 0x36, 0x0b, 0x80, 0x18, 0x4f, 0x40, 0x0b, 0x80, 0x18, 0x54, - 0x39, 0x0b, 0x80, 0x18, 0x5b, 0x2d, 0x0b, 0x80, 0x18, 0x4f, 0x40, 0x0b, 0x80, 0x18, 0x54, 0x31, - 0x0b, 0x80, 0x18, 0x5b, 0x30, 0x0b, 0x80, 0x18, 0x4f, 0x40, 0x0b, 0x80, 0x18, 0x54, 0x35, 0x0b, - 0x80, 0x18, 0x5b, 0x30, 0x0b, 0x80, 0x18, 0x4f, 0x3b, 0x0b, 0x80, 0x18, 0x54, 0x32, 0x0b, 0x80, - 0x18, 0x5b, 0x32, 0x0b, 0x80, 0x18, 0x4f, 0x3a, 0x0b, 0x80, 0x18, 0x54, 0x36, 0x0b, 0x80, 0x18, - 0x5b, 0x2e, 0x0b, 0x80, 0x18, 0x4f, 0x3a, 0x0b, 0x80, 0x18, 0x54, 0x39, 0x0b, 0x80, 0x18, 0x5b, - 0x2e, 0x0b, 0x80, 0x18, 0x4f, 0x3d, 0x0b, 0x80, 0x18, 0x54, 0x37, 0x0b, 0x80, 0x18, 0x5b, 0x2e, - 0x0b, 0x80, 0x18, 0x4f, 0x42, 0x0b, 0x80, 0x18, 0x54, 0x37, 0x0b, 0x80, 0x18, 0x5b, 0x2e, 0x0b, - 0x80, 0x18, 0x4f, 0x38, 0x0b, 0x80, 0x18, 0x54, 0x2d, 0x0b, 0x80, 0x18, 0x5b, 0x29, 0x0b, 0x80, - 0x18, 0x4f, 0x35, 0x0b, 0x80, 0x18, 0x54, 0x2d, 0x0b, 0x80, 0x18, 0x5b, 0x32, 0x0b, 0x80, 0x18, - 0x4f, 0x31, 0x0b, 0x80, 0xaa, 0x18, 0x94, 0xbb, 0x0b, 0x00, 0x80, 0x81, 0x40, 0xff, 0xc7, 0x00, - 0x81, 0x07, 0xc1, 0x7f, 0xc0, 0x40, 0xc4, 0x00, 0xca, 0x00, 0x80, 0xa5, 0x0f, 0x50, 0x5a, 0x24, - 0x80, 0x08, 0x57, 0x4e, 0x20, 0x80, 0x0c, 0x5a, 0x53, 0x0f, 0x80, 0x07, 0x5c, 0x43, 0x14, 0x80, - 0x0a, 0x5e, 0x64, 0x2a, 0x80, 0x0c, 0x63, 0x5e, 0x3a, 0x80, 0x90, 0x40, 0x94, 0x10, 0x0d, 0x00, - 0x80, 0x81, 0x40, 0xff, 0xc7, 0x00, 0x81, 0x7f, 0xc1, 0x7f, 0xc0, 0x40, 0xc4, 0x00, 0xca, 0x00, - 0x24, 0x7e, 0x47, 0x31, 0x60, 0x81, 0x0f, 0x80, 0x84, 0x38, 0x41, 0x17, 0x03, 0x80, 0x04, 0x41, - 0x30, 0x03, 0x80, 0x04, 0x41, 0x74, 0x0b, 0x80, 0x0c, 0x41, 0x56, 0x0b, 0x80, 0x0c, 0x41, 0x7f, - 0x47, 0x80, 0x60, 0x24, 0x71, 0x23, 0x31, 0x5b, 0x46, 0x80, 0x24, 0x24, 0x74, 0x23, 0x34, 0x54, - 0x81, 0x03, 0x80, 0x24, 0x24, 0x78, 0x2f, 0x31, 0x60, 0x81, 0x0f, 0x80, 0x84, 0x38, 0x41, 0x17, - 0x03, 0x80, 0x04, 0x41, 0x30, 0x03, 0x80, 0x04, 0x29, 0x4c, 0x0b, 0x41, 0x5a, 0x0b, 0x80, 0x0c, - 0x29, 0x28, 0x0b, 0x41, 0x3e, 0x0b, 0x80, 0x0c, 0x29, 0x3a, 0x0b, 0x41, 0x40, 0x0b, 0x80, 0x0c, - 0x29, 0x28, 0x0b, 0x41, 0x38, 0x0b, 0x80, 0x0c, 0x29, 0x36, 0x0b, 0x41, 0x42, 0x0b, 0x80, 0x0c, - 0x29, 0x38, 0x0b, 0x41, 0x38, 0x0b, 0x80, 0x0c, 0x29, 0x44, 0x0b, 0x41, 0x4c, 0x0b, 0x80, 0x0c, - 0x29, 0x42, 0x0b, 0x41, 0x54, 0x0b, 0x80, 0x0c, 0x29, 0x4e, 0x0b, 0x41, 0x5e, 0x0b, 0x80, 0x0c, - 0x29, 0x54, 0x0b, 0x41, 0x54, 0x0b, 0x80, 0x0c, 0x29, 0x5e, 0x0b, 0x41, 0x62, 0x0b, 0x80, 0x0c, - 0x29, 0x62, 0x0b, 0x41, 0x6a, 0x0b, 0x80, 0x0c, 0x29, 0x6e, 0x0b, 0x41, 0x73, 0x0b, 0x80, 0x0c, - 0x29, 0x6c, 0x0b, 0x41, 0x73, 0x0b, 0x80, 0x0c, 0x29, 0x73, 0x0b, 0x41, 0x73, 0x0b, 0x80, 0x0c, - 0x29, 0x70, 0x0b, 0x41, 0x73, 0x0b, 0x80, 0x0c, 0x31, 0x60, 0x81, 0x3e, 0x24, 0x79, 0x2f, 0x80, - 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6c, 0x0b, 0x80, 0x0c, 0x24, 0x7e, 0x17, 0x80, 0x18, - 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, 0x7c, 0x2e, 0x80, 0x30, 0x95, 0x5f, 0x10, 0x00, 0x95, 0x83, - 0x10, 0x00, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6e, 0x0b, 0x80, - 0x0c, 0x24, 0x7c, 0x17, 0x80, 0x18, 0x31, 0x5b, 0x47, 0x24, 0x79, 0x23, 0x80, 0x24, 0x34, 0x54, - 0x81, 0x4b, 0x24, 0x79, 0x23, 0x80, 0x24, 0x95, 0xa2, 0x10, 0x00, 0x95, 0x5f, 0x10, 0x00, 0x95, - 0x83, 0x10, 0x00, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6e, 0x0b, - 0x80, 0x0c, 0x24, 0x7c, 0x17, 0x80, 0x18, 0x37, 0x7f, 0x47, 0x24, 0x79, 0x23, 0x80, 0x24, 0x34, - 0x60, 0x81, 0x4b, 0x24, 0x79, 0x23, 0x80, 0x24, 0x95, 0xa2, 0x10, 0x00, 0x95, 0x5f, 0x10, 0x00, - 0x95, 0x83, 0x10, 0x00, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6e, - 0x0b, 0x80, 0x0c, 0x24, 0x7c, 0x17, 0x80, 0x18, 0x31, 0x5b, 0x47, 0x24, 0x79, 0x23, 0x80, 0x24, - 0x34, 0x5b, 0x81, 0x4b, 0x24, 0x79, 0x23, 0x80, 0x24, 0x95, 0xa2, 0x10, 0x00, 0x95, 0xc5, 0x10, - 0x00, 0x31, 0x5b, 0x81, 0x0f, 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x0b, 0x80, 0x0c, 0x29, - 0x7c, 0x17, 0x80, 0x18, 0x34, 0x5b, 0x77, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x17, 0x80, - 0x18, 0x31, 0x60, 0x81, 0x10, 0x29, 0x7c, 0x2f, 0x80, 0x30, 0x95, 0xc5, 0x10, 0x00, 0x24, 0x79, - 0x23, 0x80, 0x24, 0x24, 0x79, 0x0b, 0x80, 0x0c, 0x29, 0x7c, 0x17, 0x80, 0x18, 0x24, 0x79, 0x2f, - 0x80, 0x30, 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, 0x7c, 0x2f, 0x80, 0x30, 0x37, 0x79, 0x81, 0x0f, - 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x0b, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, - 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x2f, 0x80, 0x18, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, 0x7c, - 0x17, 0x80, 0x18, 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x23, 0x80, 0x0c, 0x29, 0x7c, 0x2f, - 0x80, 0x18, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x17, 0x80, 0x18, 0x24, 0x7c, 0x2f, 0x80, - 0x18, 0x29, 0x7c, 0x0b, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x0c, 0x24, 0x79, 0x23, 0x80, 0x24, - 0x24, 0x79, 0x0b, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x24, - 0x79, 0x2f, 0x80, 0x18, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, 0x7c, 0x17, 0x80, 0x18, 0x24, 0x79, - 0x23, 0x80, 0x24, 0x24, 0x79, 0x23, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, 0x79, 0x17, - 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, 0x18, 0x31, 0x60, 0x81, 0x6f, 0x24, 0x79, 0x47, 0x80, 0x18, - 0x29, 0x7c, 0x2f, 0x80, 0x30, 0x37, 0x79, 0x5f, 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x23, - 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, - 0x18, 0x24, 0x79, 0x47, 0x80, 0x18, 0x29, 0x7c, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x23, 0x80, 0x24, - 0x24, 0x79, 0x23, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x34, 0x60, 0x81, 0x57, 0x24, 0x79, - 0x2f, 0x80, 0x30, 0x24, 0x79, 0x3b, 0x80, 0x18, 0x29, 0x7c, 0x2f, 0x80, 0x30, 0x37, 0x79, 0x5f, - 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x23, 0x80, 0x0c, 0x29, 0x7c, 0x2f, 0x80, 0x18, 0x24, - 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x47, 0x80, 0x18, 0x29, 0x79, 0x0b, 0x80, 0x0c, 0x29, 0x7c, - 0x30, 0x80, 0x24, 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x23, 0x80, 0x0c, 0x29, 0x7c, 0x3b, - 0x80, 0x18, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x47, 0x80, 0x18, 0x29, 0x7f, 0x17, 0x80, - 0x18, 0x29, 0x7f, 0x0b, 0x80, 0x0c, 0x29, 0x7f, 0x81, 0x4b, 0x80, 0x0c, 0x37, 0x79, 0x81, 0x3f, - 0x24, 0x79, 0x81, 0x3f, 0x80, 0x84, 0x40, 0x94, 0x46, 0x0d, 0x00, 0x80, 0x81, 0x40, 0xff, 0x24, - 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6e, 0x0b, 0x80, 0x0c, 0x24, 0x7c, - 0x17, 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, 0x6e, 0x0b, 0x80, 0x0c, 0x29, 0x7c, 0x23, - 0x80, 0x24, 0xfd, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, 0x24, 0x6c, 0x0b, - 0x80, 0x0c, 0x24, 0x7e, 0x17, 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, 0x7c, 0x2e, 0x80, - 0x30, 0xfd, 0x31, 0x60, 0x81, 0x3f, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x29, 0x7c, 0x23, 0x80, 0x24, - 0x24, 0x6c, 0x0b, 0x80, 0x0c, 0x24, 0x7e, 0x17, 0x80, 0x18, 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, - 0x7c, 0x2e, 0x80, 0x30, 0xfd, 0x24, 0x79, 0x23, 0x80, 0x24, 0x24, 0x79, 0x0b, 0x80, 0x0c, 0x29, - 0x7c, 0x17, 0x80, 0x18, 0x24, 0x79, 0x2f, 0x80, 0x30, 0x24, 0x79, 0x17, 0x80, 0x18, 0x29, 0x7c, - 0x2f, 0x80, 0x0c, 0x24, 0x79, 0x23, 0x80, 0x24, 0xfd, 0xc7, 0x00, 0x81, 0x0b, 0xc1, 0x60, 0xc0, - 0x4d, 0xc4, 0x00, 0xca, 0x00, 0x2e, 0x45, 0x17, 0x80, 0x18, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, - 0x57, 0x0b, 0x80, 0x0c, 0x2a, 0x61, 0x0b, 0x80, 0x0c, 0x2e, 0x76, 0x0b, 0x80, 0x0c, 0x2c, 0x4e, - 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x30, 0x0b, - 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x65, 0x0b, 0x80, - 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x36, 0x0b, 0x80, 0x0c, - 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x0c, 0x2a, - 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, - 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x32, 0x0b, - 0x80, 0x0c, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x69, 0x0b, 0x80, - 0x0c, 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x2e, 0x75, 0x0b, 0x80, 0x0c, - 0x2c, 0x52, 0x0b, 0x80, 0x0c, 0x2a, 0x29, 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, - 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x61, 0x0b, 0x80, 0x0c, 0x2a, 0x1d, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, - 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x3e, 0x0b, - 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x69, 0x0b, 0x80, - 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x0c, - 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, - 0x51, 0x0b, 0x80, 0x0c, 0x2a, 0x65, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x40, - 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x54, 0x0b, - 0x80, 0x0c, 0x2e, 0x6d, 0x23, 0x80, 0x18, 0x2c, 0x4d, 0x0b, 0x80, 0x0c, 0x2e, 0x69, 0x23, 0x80, - 0x24, 0x2c, 0x69, 0x05, 0x80, 0x06, 0x2a, 0x33, 0x05, 0x80, 0x06, 0x2a, 0x52, 0x05, 0x80, 0x06, - 0x2a, 0x25, 0x05, 0x80, 0x06, 0x2a, 0x69, 0x05, 0x80, 0x06, 0x2a, 0x48, 0x05, 0x80, 0x06, 0x2a, - 0x5c, 0x05, 0x80, 0x06, 0x2a, 0x38, 0x05, 0x80, 0x06, 0x2a, 0x67, 0x0b, 0x80, 0x0c, 0x2a, 0x1e, - 0x0b, 0x80, 0x0c, 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x6d, 0x0b, - 0x80, 0x0c, 0x2a, 0x30, 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, - 0x0c, 0x2a, 0x65, 0x0b, 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, - 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, - 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x39, - 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, - 0x80, 0x0c, 0x2a, 0x32, 0x0b, 0x80, 0x0c, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, - 0x0c, 0x2a, 0x69, 0x0b, 0x80, 0x0c, 0x2e, 0x7e, 0x0b, 0x80, 0x0c, 0x2c, 0x58, 0x0b, 0x80, 0x0c, - 0x2a, 0x4a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, 0x0b, 0x80, 0x0c, 0x2a, - 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x61, 0x0b, 0x80, 0x0c, 0x2a, 0x1d, - 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, - 0x80, 0x0c, 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, - 0x0c, 0x2a, 0x69, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2e, 0x78, 0x77, 0x80, 0x30, - 0x2c, 0x1a, 0x17, 0x80, 0x18, 0x2c, 0x30, 0x17, 0x80, 0x18, 0x2c, 0x1c, 0x17, 0x80, 0x18, 0x2c, - 0x32, 0x17, 0x80, 0x18, 0x2c, 0x20, 0x17, 0x80, 0x18, 0x2c, 0x3e, 0x17, 0x80, 0x18, 0x2c, 0x2e, - 0x17, 0x80, 0x24, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, - 0x80, 0x18, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, - 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x3f, 0x0b, 0x80, 0x0c, 0x2e, 0x7d, 0x17, 0x80, 0x18, - 0x2c, 0x65, 0x0b, 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, - 0x36, 0x0b, 0x80, 0x0c, 0x95, 0x95, 0x17, 0x00, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, 0x0b, - 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x18, 0x2a, 0x1d, 0x0b, 0x80, - 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, - 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2e, 0x73, 0x17, 0x80, 0x18, 0x2c, 0x69, 0x0b, 0x80, 0x0c, 0x2a, - 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x0c, 0x2a, 0x77, - 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, 0x0b, - 0x80, 0x18, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, - 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x54, 0x0b, 0x80, 0x0c, 0x2e, 0x7a, 0x23, 0x80, 0x24, - 0x2e, 0x7c, 0x23, 0x80, 0x24, 0x95, 0xd7, 0x17, 0x00, 0x95, 0x1e, 0x18, 0x00, 0x2a, 0x74, 0x0b, - 0x80, 0x0c, 0x2a, 0x29, 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, - 0x18, 0x2a, 0x1d, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, - 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2e, 0x78, 0x17, 0x80, 0x18, 0x2c, - 0x69, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x57, - 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, - 0x80, 0x0c, 0x2a, 0x51, 0x0b, 0x80, 0x18, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, - 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x54, 0x0b, 0x80, 0x0c, - 0x2e, 0x7e, 0x17, 0x80, 0x18, 0x2c, 0x5a, 0x0b, 0x80, 0x0c, 0x2e, 0x7b, 0x23, 0x80, 0x24, 0x2a, - 0x61, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, 0x57, - 0x0b, 0x80, 0x18, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, - 0x80, 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x30, 0x0b, 0x80, 0x0c, 0x2e, 0x74, 0x17, 0x80, - 0x18, 0x2c, 0x65, 0x0b, 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, - 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x95, 0x95, 0x17, 0x00, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, - 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x18, 0x2a, 0x1d, 0x0b, - 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, - 0x0c, 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2e, 0x7a, 0x17, 0x80, 0x18, 0x2c, 0x69, 0x0b, 0x80, 0x0c, - 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x0c, 0x2a, - 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, - 0x0b, 0x80, 0x18, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, - 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x54, 0x0b, 0x80, 0x0c, 0x2e, 0x76, 0x17, 0x80, - 0x18, 0x2c, 0x4b, 0x0b, 0x80, 0x0c, 0x2e, 0x7c, 0x23, 0x80, 0x24, 0x2a, 0x69, 0x0b, 0x80, 0x0c, - 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x18, 0x2a, - 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x6d, - 0x0b, 0x80, 0x0c, 0x2a, 0x30, 0x0b, 0x80, 0x0c, 0x2e, 0x72, 0x17, 0x80, 0x18, 0x2c, 0x65, 0x0b, - 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x36, 0x0b, 0x80, - 0x0c, 0x95, 0x1e, 0x18, 0x00, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, 0x0b, 0x80, 0x0c, 0x2a, - 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x18, 0x2a, 0x1d, 0x0b, 0x80, 0x0c, 0x2e, 0x78, - 0x17, 0x80, 0x18, 0x2c, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2e, 0x78, 0x17, - 0x80, 0x18, 0x2c, 0x69, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, - 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x0c, - 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, 0x0b, 0x80, 0x18, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, - 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x54, - 0x0b, 0x80, 0x0c, 0x2e, 0x6e, 0x17, 0x80, 0x18, 0x2c, 0x3f, 0x0b, 0x80, 0x0c, 0x2e, 0x65, 0x0b, - 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, 0x0b, 0x80, 0x0c, 0x95, 0xd7, 0x17, 0x00, - 0x95, 0x65, 0x18, 0x00, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, 0x0b, 0x80, 0x0c, 0x2a, 0x38, - 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x18, 0x2a, 0x1d, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, - 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x3e, 0x0b, 0x80, - 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x69, 0x0b, 0x80, 0x0c, - 0x2a, 0x45, 0x0b, 0x80, 0x24, 0x95, 0x65, 0x18, 0x00, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, 0x47, - 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, 0x0b, 0x80, 0x18, 0x2a, 0x40, 0x0b, - 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, - 0x0c, 0x2a, 0x54, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x18, - 0x2a, 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x2a, 0x0b, 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, - 0x69, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, 0x57, - 0x0b, 0x80, 0x18, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, - 0x80, 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x30, 0x0b, 0x80, 0x0c, 0x2e, 0x65, 0x17, 0x80, - 0x18, 0x2c, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x34, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, - 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x95, 0x1e, 0x18, 0x00, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x29, - 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x18, 0x2a, 0x1d, 0x0b, - 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x0c, 0x2a, 0x5a, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, - 0x0c, 0x2a, 0x3e, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x3b, 0x0b, 0x80, 0x24, - 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, 0x80, 0x0c, 0x2a, - 0x47, 0x0b, 0x80, 0x0c, 0x2a, 0x3c, 0x0b, 0x80, 0x0c, 0x2a, 0x51, 0x0b, 0x80, 0x18, 0x2a, 0x40, - 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x0c, 0x2a, 0x45, 0x0b, 0x80, 0x0c, 0x2a, 0x77, 0x0b, - 0x80, 0x0c, 0x2a, 0x54, 0x0b, 0x80, 0x0c, 0x2e, 0x6a, 0x17, 0x80, 0x18, 0x2c, 0x5a, 0x0b, 0x80, - 0x0c, 0x2a, 0x47, 0x0b, 0x80, 0x24, 0x2c, 0x6a, 0x81, 0x0f, 0x80, 0x84, 0x40, 0x94, 0xeb, 0x10, - 0x00, 0x80, 0x81, 0x40, 0xff, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, - 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x18, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, - 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x32, 0x0b, - 0x80, 0x0c, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x24, 0x2a, 0x2a, 0x0b, 0x80, - 0x0c, 0x2a, 0x4b, 0x0b, 0x80, 0x0c, 0xfd, 0x2a, 0x69, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, - 0x0c, 0x2a, 0x2d, 0x0b, 0x80, 0x0c, 0x2a, 0x57, 0x0b, 0x80, 0x18, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, - 0x2a, 0x49, 0x0b, 0x80, 0x0c, 0x2a, 0x31, 0x0b, 0x80, 0x0c, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, - 0x30, 0x0b, 0x80, 0x0c, 0x2a, 0x38, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x18, 0x2a, 0x34, - 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0xfd, 0x2a, 0x6d, - 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, - 0x80, 0x18, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, - 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x32, 0x0b, 0x80, 0x0c, 0x2a, 0x1e, 0x0b, 0x80, 0x0c, - 0x2a, 0x42, 0x0b, 0x80, 0x18, 0x2a, 0x36, 0x0b, 0x80, 0x0c, 0x2a, 0x2a, 0x0b, 0x80, 0x0c, 0x2a, - 0x4b, 0x0b, 0x80, 0x0c, 0xfd, 0x2a, 0x6d, 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, - 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x40, 0x0b, 0x80, 0x18, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x42, - 0x0b, 0x80, 0x0c, 0x2a, 0x39, 0x0b, 0x80, 0x0c, 0x2a, 0x74, 0x0b, 0x80, 0x0c, 0x2a, 0x32, 0x0b, - 0x80, 0x0c, 0x2e, 0x66, 0x17, 0x80, 0x18, 0x2c, 0x42, 0x0b, 0x80, 0x0c, 0x2a, 0x36, 0x0b, 0x80, - 0x0c, 0x2a, 0x2a, 0x0b, 0x80, 0x0c, 0x2a, 0x4b, 0x0b, 0x80, 0x0c, 0xfd, 0xc7, 0x00, 0x81, 0x0c, - 0xc1, 0x52, 0xc0, 0x27, 0xc4, 0x00, 0xca, 0x00, 0x80, 0x18, 0x46, 0x4c, 0x2f, 0x80, 0x30, 0x46, - 0x44, 0x2f, 0x80, 0x30, 0x46, 0x44, 0x2f, 0x80, 0x30, 0x46, 0x41, 0x2f, 0x80, 0x30, 0x46, 0x46, - 0x2f, 0x80, 0x30, 0x46, 0x46, 0x2f, 0x80, 0x30, 0x46, 0x45, 0x2f, 0x80, 0x30, 0x46, 0x44, 0x2f, - 0x80, 0x30, 0x46, 0x45, 0x2f, 0x80, 0x30, 0x46, 0x43, 0x2f, 0x80, 0x30, 0x46, 0x41, 0x2f, 0x80, - 0x30, 0x46, 0x43, 0x2f, 0x80, 0x30, 0x46, 0x44, 0x2f, 0x80, 0x30, 0x46, 0x44, 0x2f, 0x80, 0x30, - 0x46, 0x49, 0x2f, 0x80, 0x30, 0x46, 0x48, 0x2f, 0x80, 0x30, 0x46, 0x49, 0x2f, 0x80, 0x30, 0x46, - 0x46, 0x2f, 0x80, 0x30, 0x46, 0x42, 0x2f, 0x80, 0x30, 0x46, 0x47, 0x2f, 0x80, 0x30, 0x46, 0x48, - 0x2f, 0x80, 0x30, 0x46, 0x48, 0x2f, 0x80, 0x30, 0x46, 0x4e, 0x2f, 0x80, 0x30, 0x46, 0x47, 0x2f, - 0x80, 0x30, 0x46, 0x46, 0x2f, 0x80, 0x30, 0x46, 0x4a, 0x2f, 0x80, 0x30, 0x46, 0x44, 0x2f, 0x80, - 0x30, 0x46, 0x49, 0x2f, 0x80, 0x30, 0x46, 0x48, 0x2f, 0x80, 0x30, 0x46, 0x48, 0x2f, 0x80, 0x30, - 0x46, 0x4a, 0x2f, 0x80, 0x30, 0x46, 0x49, 0x17, 0x80, 0x18, 0x95, 0xcd, 0x19, 0x00, 0x95, 0x1e, - 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0xcd, 0x19, 0x00, 0x95, 0x1e, - 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0xcd, 0x19, 0x00, 0x95, 0x1e, - 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0xcd, 0x19, 0x00, 0x95, 0x1e, - 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0x1e, 0x1a, 0x00, 0x95, 0x6f, - 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xcd, 0x19, 0x00, 0x95, 0x1e, - 0x1a, 0x00, 0x95, 0x6f, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x95, 0xc0, 0x1a, 0x00, 0x46, 0x7d, - 0x81, 0x0f, 0x80, 0x84, 0x40, 0x94, 0xae, 0x18, 0x00, 0x80, 0x81, 0x40, 0xff, 0x46, 0x28, 0x0b, - 0x80, 0x0c, 0x46, 0x1f, 0x0b, 0x80, 0x0c, 0x46, 0x4a, 0x0b, 0x80, 0x0c, 0x46, 0x26, 0x0b, 0x80, - 0x0c, 0x46, 0x1d, 0x0b, 0x80, 0x0c, 0x46, 0x24, 0x0b, 0x80, 0x0c, 0x46, 0x50, 0x0b, 0x80, 0x0c, - 0x46, 0x23, 0x0b, 0x80, 0x0c, 0x46, 0x28, 0x0b, 0x80, 0x0c, 0x46, 0x21, 0x0b, 0x80, 0x0c, 0x46, - 0x50, 0x0b, 0x80, 0x0c, 0x46, 0x26, 0x0b, 0x80, 0x0c, 0x46, 0x2d, 0x0b, 0x80, 0x0c, 0x46, 0x2f, - 0x0b, 0x80, 0x0c, 0x46, 0x59, 0x0b, 0x80, 0x0c, 0x46, 0x27, 0x0b, 0x80, 0x0c, 0xfd, 0x46, 0x1f, - 0x0b, 0x80, 0x0c, 0x46, 0x22, 0x0b, 0x80, 0x0c, 0x46, 0x64, 0x0b, 0x80, 0x0c, 0x46, 0x26, 0x0b, - 0x80, 0x0c, 0x46, 0x25, 0x0b, 0x80, 0x0c, 0x46, 0x26, 0x0b, 0x80, 0x0c, 0x46, 0x54, 0x0b, 0x80, - 0x0c, 0x46, 0x30, 0x0b, 0x80, 0x0c, 0x46, 0x2d, 0x0b, 0x80, 0x0c, 0x46, 0x21, 0x0b, 0x80, 0x0c, - 0x46, 0x5e, 0x0b, 0x80, 0x0c, 0x46, 0x2e, 0x0b, 0x80, 0x0c, 0x46, 0x27, 0x0b, 0x80, 0x0c, 0x46, - 0x20, 0x0b, 0x80, 0x0c, 0x46, 0x5b, 0x0b, 0x80, 0x0c, 0x46, 0x34, 0x0b, 0x80, 0x0c, 0xfd, 0x46, - 0x29, 0x0b, 0x80, 0x0c, 0x46, 0x1b, 0x0b, 0x80, 0x0c, 0x46, 0x56, 0x0b, 0x80, 0x0c, 0x46, 0x1a, - 0x0b, 0x80, 0x0c, 0x46, 0x2f, 0x0b, 0x80, 0x0c, 0x46, 0x2b, 0x0b, 0x80, 0x0c, 0x46, 0x54, 0x0b, - 0x80, 0x0c, 0x46, 0x22, 0x0b, 0x80, 0x0c, 0x46, 0x32, 0x0b, 0x80, 0x0c, 0x46, 0x24, 0x0b, 0x80, - 0x0c, 0x46, 0x56, 0x0b, 0x80, 0x0c, 0x46, 0x2f, 0x0b, 0x80, 0x0c, 0x46, 0x2b, 0x0b, 0x80, 0x0c, - 0x46, 0x22, 0x0b, 0x80, 0x0c, 0x46, 0x5b, 0x0b, 0x80, 0x0c, 0x46, 0x21, 0x0b, 0x80, 0x0c, 0xfd, - 0x46, 0x37, 0x0b, 0x80, 0x0c, 0x46, 0x37, 0x0b, 0x80, 0x0c, 0x46, 0x5e, 0x0b, 0x80, 0x0c, 0x46, - 0x12, 0x0b, 0x80, 0x0c, 0x46, 0x35, 0x0b, 0x80, 0x0c, 0x46, 0x24, 0x0b, 0x80, 0x0c, 0x46, 0x48, - 0x0b, 0x80, 0x0c, 0x46, 0x26, 0x0b, 0x80, 0x0c, 0x46, 0x2b, 0x0b, 0x80, 0x0c, 0x46, 0x1d, 0x0b, - 0x80, 0x0c, 0x46, 0x50, 0x0b, 0x80, 0x0c, 0x46, 0x1b, 0x0b, 0x80, 0x0c, 0x46, 0x37, 0x0b, 0x80, - 0x0c, 0x46, 0x2e, 0x0b, 0x80, 0x0c, 0x46, 0x59, 0x0b, 0x80, 0x0c, 0x46, 0x19, 0x0b, 0x80, 0x0c, - 0xfd, 0xff, 0x00, 0x00, -}; - -const u8 sound_bank_data[] ATTRIBUTE_ALIGN(32) = -{ - 0x53, 0x42, 0x4e, 0x4b, 0xff, 0xfe, 0x02, 0x00, 0x84, 0x04, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, - 0x44, 0x41, 0x54, 0x41, 0x74, 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, 0x80, 0x00, 0x00, 0x00, 0x11, 0x64, 0x04, 0x00, - 0x01, 0x3c, 0x02, 0x00, 0x01, 0x46, 0x02, 0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x24, 0x04, 0x00, - 0x01, 0x50, 0x02, 0x00, 0x01, 0x5a, 0x02, 0x00, 0x11, 0x44, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xd8, 0x03, 0x00, 0x01, 0x64, 0x02, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x6e, 0x02, 0x00, 0x09, 0x00, 0x00, 0x00, - 0x47, 0x7f, 0x7f, 0x7f, 0x7b, 0x40, 0x09, 0x00, 0x00, 0x00, 0x47, 0x7f, 0x7f, 0x7f, 0x7b, 0x40, - 0x10, 0x00, 0x00, 0x00, 0x4b, 0x7f, 0x7f, 0x7f, 0x64, 0x40, 0x0f, 0x00, 0x00, 0x00, 0x58, 0x7f, - 0x7f, 0x7f, 0x64, 0x40, 0x03, 0x00, 0x00, 0x00, 0x42, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x24, 0x41, - 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x24, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x7f, - 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x24, 0x7f, 0x7f, 0x7f, 0x78, 0x40, - 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, - 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, - 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, - 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, - 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, - 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, - 0x01, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x78, 0x40, 0x01, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x30, 0x7f, 0x7f, 0x7f, 0x78, 0x22, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x7f, - 0x7f, 0x7f, 0x78, 0x22, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x30, 0x7f, 0x7f, 0x7f, 0x78, 0x22, - 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x7f, 0x7f, 0x7f, 0x78, 0x5e, 0x01, 0x00, 0x04, 0x00, - 0x00, 0x00, 0x34, 0x7f, 0x7f, 0x7f, 0x78, 0x5e, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x34, 0x7f, - 0x7f, 0x7f, 0x78, 0x5e, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, - 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, - 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, - 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, - 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, - 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, - 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, - 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x78, 0x36, 0x01, 0x00, 0x11, 0x00, - 0x00, 0x00, 0x41, 0x7f, 0x7f, 0x7f, 0x78, 0x37, 0x2b, 0x2d, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x06, 0x00, 0x00, 0x00, 0x2a, 0x7f, 0x7f, 0x7f, 0x7b, 0x40, 0x01, 0x00, 0x08, 0x00, - 0x00, 0x00, 0x2c, 0x7f, 0x7f, 0x7f, 0x7b, 0x40, 0x01, 0x00, 0x07, 0x00, 0x00, 0x00, 0x2e, 0x7f, - 0x7f, 0x7f, 0x7b, 0x40, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, - 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x7d, 0x40, 0x01, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x43, 0x7f, - 0x7f, 0x7f, 0x7d, 0x40, 0x3f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0a, 0x00, - 0x00, 0x00, 0x37, 0x7f, 0x7f, 0x7f, 0x7d, 0x40, 0x01, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x43, 0x7f, - 0x7f, 0x7f, 0x7d, 0x40, 0x53, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x4f, 0x7f, 0x7f, 0x7f, 0x64, 0x40, 0x01, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x5b, 0x7f, - 0x7f, 0x7f, 0x64, 0x40, 0x3b, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x28, 0x7f, 0x7f, 0x7f, 0x7b, 0x40, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x7f, - 0x7f, 0x7f, 0x7b, 0x40, -}; - -const u8 sound_wave_data[] ATTRIBUTE_ALIGN(32) = -{ - 0x53, 0x57, 0x41, 0x52, 0xff, 0xfe, 0x01, 0x00, 0x64, 0x7f, 0x02, 0x00, 0x10, 0x00, 0x01, 0x00, - 0x44, 0x41, 0x54, 0x41, 0x54, 0x7f, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, - 0x30, 0x0f, 0x00, 0x00, 0x0c, 0x23, 0x00, 0x00, 0xc0, 0x2e, 0x00, 0x00, 0x78, 0x38, 0x00, 0x00, - 0x08, 0x8a, 0x00, 0x00, 0x18, 0xac, 0x00, 0x00, 0xf8, 0xc4, 0x00, 0x00, 0x48, 0x04, 0x01, 0x00, - 0xd8, 0x23, 0x01, 0x00, 0x34, 0x5c, 0x01, 0x00, 0xc8, 0x92, 0x01, 0x00, 0xe4, 0xad, 0x01, 0x00, - 0x84, 0xd7, 0x01, 0x00, 0x40, 0xf7, 0x01, 0x00, 0x90, 0x1a, 0x02, 0x00, 0xe0, 0x3b, 0x02, 0x00, - 0xb4, 0x5e, 0x02, 0x00, 0x02, 0x01, 0x52, 0x7d, 0x0a, 0x02, 0x47, 0x03, 0x61, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x00, 0xcf, 0x89, 0xa8, 0x80, 0x9b, 0x09, 0x98, 0x19, 0xaa, 0x99, 0xaa, 0x99, - 0xaa, 0x90, 0x90, 0x0b, 0xbc, 0x00, 0x19, 0xc9, 0x98, 0xba, 0xa9, 0xbb, 0xa1, 0x8c, 0x2c, 0xb3, - 0x0b, 0xac, 0xac, 0xb2, 0x0b, 0x19, 0xb9, 0xb9, 0x8c, 0xc9, 0xbb, 0xb9, 0x09, 0xba, 0xd9, 0xa9, - 0xab, 0xdb, 0xc9, 0x9a, 0x9a, 0xb9, 0xbb, 0x9d, 0xc9, 0x99, 0xdc, 0x9b, 0xeb, 0xbb, 0x9d, 0xba, - 0xab, 0xa9, 0xbe, 0xcb, 0xdb, 0xcb, 0xba, 0xaa, 0xa8, 0xcf, 0xaa, 0xba, 0xdb, 0xcc, 0xaa, 0x99, - 0xcb, 0xbd, 0xcb, 0xcb, 0xba, 0xdb, 0xbd, 0xaa, 0x9a, 0xcc, 0xcc, 0xba, 0xcc, 0xbb, 0xaa, 0xbb, - 0xbc, 0xcd, 0xcb, 0xba, 0xbd, 0xca, 0xab, 0xab, 0xbc, 0xbc, 0xcb, 0xdb, 0xbc, 0xba, 0xbb, 0xbc, - 0xbd, 0xbc, 0xbb, 0x9c, 0xdb, 0xcb, 0xbb, 0xaa, 0xbb, 0xba, 0xcc, 0xbb, 0xbc, 0xbb, 0xaa, 0xbb, - 0xbc, 0xfa, 0x8b, 0xca, 0xad, 0x82, 0xbf, 0x1b, 0x15, 0x89, 0xb9, 0xfa, 0x6a, 0xa3, 0x8f, 0x17, - 0x89, 0x00, 0x03, 0x2a, 0x96, 0x9f, 0x02, 0x19, 0x26, 0xa8, 0x0b, 0x92, 0x01, 0x9f, 0x23, 0x29, - 0xe9, 0x20, 0x80, 0x23, 0x88, 0x14, 0xbf, 0x11, 0x11, 0x09, 0x04, 0x9a, 0x81, 0x68, 0xb1, 0x58, - 0xa1, 0x1b, 0x92, 0xaa, 0x32, 0xc8, 0x62, 0x24, 0xc9, 0x19, 0x24, 0xb0, 0x9a, 0x41, 0x22, 0x12, - 0xcd, 0x28, 0x18, 0x32, 0x91, 0x0a, 0x02, 0xdd, 0x09, 0x42, 0x24, 0xc8, 0xbd, 0x30, 0x25, 0xa0, - 0xaa, 0x09, 0x42, 0xa1, 0x8c, 0x12, 0x89, 0x98, 0x10, 0x90, 0x23, 0xed, 0x9a, 0x52, 0x02, 0xc9, - 0x19, 0xd8, 0xab, 0x61, 0x14, 0xa9, 0xad, 0x29, 0x01, 0x21, 0x98, 0xdc, 0x2a, 0x83, 0xa9, 0x9a, - 0x54, 0xb8, 0xbc, 0x48, 0x14, 0x01, 0xba, 0xdb, 0x78, 0x83, 0xbc, 0x19, 0x15, 0x80, 0xbb, 0x58, - 0x92, 0xba, 0x29, 0x91, 0x21, 0x01, 0x64, 0xa1, 0x09, 0xb9, 0xbe, 0x40, 0x16, 0x91, 0xaa, 0x20, - 0x12, 0xba, 0x0a, 0x23, 0xd1, 0xad, 0x21, 0x54, 0x92, 0xbc, 0x8a, 0x08, 0x30, 0x93, 0x28, 0x83, - 0xda, 0x0a, 0xca, 0x9c, 0x73, 0x14, 0x98, 0x8a, 0x98, 0xda, 0xac, 0x43, 0x22, 0x90, 0xa9, 0x8f, - 0x88, 0x18, 0x88, 0xc9, 0x8e, 0x32, 0x31, 0x13, 0x99, 0xa9, 0xff, 0x29, 0x12, 0x18, 0x20, 0xc0, - 0x8c, 0x00, 0x31, 0xc9, 0x99, 0x46, 0xb8, 0x49, 0x13, 0xab, 0x71, 0xc1, 0x1b, 0x24, 0x91, 0xcb, - 0x1a, 0x27, 0xb8, 0x1b, 0x25, 0x98, 0x09, 0x11, 0xa8, 0x48, 0x92, 0xce, 0x0a, 0x44, 0x91, 0x0a, - 0x11, 0xb8, 0x0c, 0x21, 0x02, 0x88, 0x22, 0xd1, 0x9f, 0x52, 0x91, 0xaa, 0x18, 0xb0, 0x8e, 0x52, - 0x02, 0xa9, 0x9c, 0x18, 0x80, 0x32, 0xa2, 0xbd, 0x41, 0xb1, 0xaf, 0x19, 0x43, 0x82, 0xbb, 0x49, - 0x14, 0xa9, 0xcd, 0x1b, 0x16, 0x18, 0xd9, 0x09, 0x01, 0x21, 0xa2, 0x8b, 0x91, 0xbf, 0x29, 0x46, - 0x01, 0xb9, 0xac, 0x10, 0x33, 0x88, 0x89, 0x21, 0xd0, 0xbc, 0x0a, 0x57, 0x01, 0xab, 0x80, 0x3a, - 0x06, 0x9a, 0x99, 0x88, 0x31, 0x04, 0xdc, 0x39, 0x12, 0x08, 0xca, 0x29, 0x15, 0xca, 0x8b, 0x32, - 0x33, 0xb2, 0x9f, 0x51, 0x91, 0x0a, 0xa0, 0x08, 0x99, 0x18, 0x55, 0x81, 0x09, 0xd2, 0x2c, 0xa0, - 0x46, 0x98, 0xaa, 0x30, 0x12, 0xb9, 0x08, 0x08, 0x02, 0xcb, 0x48, 0x34, 0x01, 0xb0, 0xaf, 0x48, - 0x04, 0x9a, 0x22, 0x98, 0x9b, 0x24, 0xda, 0x9a, 0x28, 0x34, 0x11, 0x40, 0x96, 0xcf, 0x10, 0x13, - 0xa9, 0x30, 0x03, 0xbe, 0x18, 0x31, 0xb3, 0xaf, 0x00, 0x18, 0x32, 0x35, 0xdb, 0x28, 0x23, 0xfc, - 0x19, 0x31, 0xb1, 0x8d, 0x21, 0x01, 0xba, 0x38, 0xb3, 0xaf, 0x53, 0x92, 0xba, 0x50, 0x04, 0xb9, - 0x28, 0x82, 0xbe, 0x00, 0x43, 0x91, 0x88, 0x9b, 0x89, 0x12, 0x32, 0xc8, 0x72, 0x05, 0xcd, 0x1a, - 0x32, 0xa0, 0xbb, 0x18, 0x31, 0x12, 0x22, 0xf9, 0x1a, 0x14, 0xdd, 0x1a, 0x34, 0x82, 0xad, 0x09, - 0x21, 0xa1, 0xbe, 0x40, 0x82, 0x10, 0xa0, 0xac, 0x11, 0x80, 0x09, 0x44, 0x83, 0xfb, 0x9d, 0x38, - 0x05, 0xa8, 0xaa, 0x20, 0x14, 0xa8, 0x0b, 0x34, 0xb8, 0xbb, 0xac, 0x60, 0x25, 0x80, 0xda, 0x1a, - 0x33, 0x91, 0xbd, 0x19, 0x34, 0x81, 0xdb, 0x19, 0x22, 0xa0, 0x0b, 0x31, 0xa1, 0xaf, 0x12, 0x11, - 0x21, 0x02, 0xcd, 0x18, 0x10, 0x14, 0xdc, 0x1a, 0x26, 0xa9, 0x08, 0x29, 0x83, 0xd9, 0x0c, 0x53, - 0x81, 0xba, 0x99, 0x18, 0x25, 0x90, 0x09, 0xc9, 0x0a, 0x73, 0x14, 0xa0, 0xbe, 0x0a, 0x12, 0x30, - 0x27, 0xa9, 0x09, 0x88, 0xa1, 0xab, 0x75, 0x92, 0xac, 0x30, 0x24, 0xa9, 0xab, 0x99, 0x18, 0x35, - 0x90, 0x19, 0x21, 0x83, 0xfd, 0x48, 0x14, 0xdc, 0x38, 0x32, 0xa8, 0x0b, 0xa0, 0xab, 0x64, 0x02, - 0x98, 0xb9, 0x20, 0xb3, 0x8f, 0x34, 0xb0, 0x9c, 0x22, 0x88, 0x18, 0x12, 0xdb, 0x9a, 0x60, 0x14, - 0xaa, 0x31, 0xe2, 0x9d, 0x53, 0xa1, 0x8b, 0x13, 0x89, 0x01, 0x9a, 0x22, 0xdd, 0x38, 0x06, 0xa8, - 0x18, 0x81, 0xcc, 0x28, 0x02, 0x80, 0x08, 0x12, 0xd8, 0x1a, 0x14, 0xca, 0x28, 0x83, 0xba, 0x61, - 0x13, 0x98, 0xdb, 0x9a, 0x10, 0x81, 0xba, 0x49, 0x15, 0x90, 0xdd, 0x8b, 0x21, 0x01, 0x20, 0x25, - 0xd9, 0xab, 0xda, 0x8c, 0x63, 0x12, 0x01, 0xbb, 0x29, 0x13, 0xed, 0x8a, 0x32, 0x82, 0xdb, 0x18, - 0x44, 0xa0, 0xac, 0xa9, 0x08, 0x29, 0x23, 0x22, 0x83, 0x20, 0xe1, 0xbf, 0x38, 0x12, 0x90, 0xaa, - 0x52, 0xd9, 0x8b, 0x42, 0x13, 0xa8, 0xbd, 0x8b, 0x44, 0x98, 0x98, 0x38, 0x84, 0xbd, 0x50, 0x03, - 0x88, 0xab, 0x12, 0xc9, 0x6a, 0x04, 0xab, 0x0a, 0x26, 0xa9, 0x18, 0x82, 0xbf, 0x19, 0x43, 0x16, - 0xcb, 0x19, 0x81, 0x19, 0x16, 0xb9, 0x1a, 0x11, 0xa9, 0x11, 0x72, 0x93, 0xcf, 0x19, 0x34, 0xa8, - 0x28, 0xb0, 0x8c, 0x12, 0xba, 0x61, 0x81, 0x09, 0xa1, 0x3c, 0x37, 0xdc, 0x09, 0x21, 0x00, 0x20, - 0xb2, 0x8d, 0x22, 0x80, 0x9b, 0x89, 0x42, 0xc9, 0x69, 0x34, 0xb8, 0xac, 0x99, 0x21, 0x01, 0x32, - 0x04, 0xcd, 0x28, 0x93, 0x39, 0x34, 0xf0, 0x8d, 0x31, 0x32, 0xa8, 0xbc, 0x09, 0x32, 0x32, 0x81, - 0xab, 0x00, 0x91, 0xaf, 0x31, 0x22, 0xd1, 0xbd, 0x49, 0x27, 0xb0, 0xaa, 0x10, 0x88, 0x20, 0x88, - 0x47, 0xa0, 0x9c, 0x30, 0x01, 0x20, 0xf9, 0x8e, 0x32, 0x01, 0x99, 0xa9, 0x00, 0x02, 0x8a, 0x00, - 0x10, 0x52, 0xf0, 0xae, 0x41, 0x13, 0xbb, 0x0b, 0x43, 0x91, 0xaa, 0x10, 0x92, 0xbc, 0x51, 0x82, - 0xac, 0x31, 0xda, 0x9a, 0x73, 0x84, 0xac, 0x0a, 0x11, 0x00, 0x98, 0x20, 0x90, 0x99, 0xaa, 0x8c, - 0x57, 0xb0, 0xbb, 0x10, 0x43, 0x81, 0x09, 0x22, 0xfb, 0x1a, 0x82, 0xbe, 0x58, 0x02, 0xa9, 0x20, - 0xb0, 0x8b, 0x81, 0x70, 0xa3, 0x9f, 0x22, 0xc9, 0x39, 0x15, 0xaa, 0x10, 0xb1, 0x9c, 0x31, 0x23, - 0xb8, 0xef, 0x30, 0x05, 0xaa, 0x18, 0x90, 0x19, 0x13, 0xbc, 0x10, 0x01, 0xeb, 0x1a, 0x47, 0x91, - 0xac, 0x18, 0x81, 0x21, 0x82, 0xab, 0x01, 0x8a, 0x23, 0x11, 0x62, 0xb4, 0xff, 0x29, 0x24, 0xa8, - 0x8a, 0x81, 0x18, 0x08, 0x81, 0x09, 0x01, 0x21, 0x11, 0xcb, 0x80, 0xdf, 0x08, 0x63, 0x24, 0xb9, - 0xac, 0x30, 0x91, 0x8d, 0x33, 0xa8, 0x9b, 0x10, 0x76, 0x81, 0xbb, 0x9a, 0xba, 0x73, 0x16, 0xa8, - 0x09, 0x81, 0x98, 0x88, 0x18, 0x14, 0xda, 0x2a, 0x35, 0x80, 0xb0, 0xbf, 0x38, 0x15, 0x98, 0x0a, - 0x11, 0x01, 0xca, 0x29, 0x34, 0xba, 0x38, 0xa1, 0x59, 0x37, 0xd8, 0x9d, 0x21, 0x12, 0xa0, 0x0a, - 0x33, 0xd8, 0x8c, 0x22, 0xa0, 0x1a, 0xa1, 0x8b, 0x56, 0x02, 0xb9, 0x9c, 0x38, 0x82, 0x99, 0x48, - 0x06, 0xaa, 0x18, 0x88, 0x41, 0xa3, 0xaf, 0x18, 0x21, 0x11, 0xc9, 0x9c, 0x11, 0x8a, 0x52, 0xa0, - 0x9b, 0x43, 0xc9, 0x29, 0x15, 0xcb, 0x8a, 0x00, 0x52, 0x83, 0x19, 0xa0, 0xdf, 0x19, 0x12, 0x98, - 0x88, 0x80, 0x88, 0x51, 0x83, 0xcf, 0x29, 0x01, 0xa9, 0x09, 0x13, 0xab, 0x32, 0xc0, 0x49, 0x03, - 0xfb, 0xaf, 0x20, 0x24, 0xa1, 0xbc, 0x30, 0x04, 0x99, 0x08, 0xa1, 0x9d, 0x11, 0xaa, 0x41, 0x34, - 0xd8, 0x9e, 0x51, 0x02, 0xcb, 0x8a, 0x10, 0x23, 0xa9, 0x38, 0x03, 0xcf, 0x20, 0x00, 0x31, 0x83, - 0xef, 0x09, 0x22, 0x22, 0xb8, 0xac, 0x32, 0xc0, 0x1a, 0x25, 0xc0, 0x9c, 0x18, 0x32, 0x92, 0x9a, - 0x90, 0xad, 0x63, 0x92, 0xac, 0x21, 0x12, 0x88, 0x10, 0x11, 0xf8, 0xae, 0x40, 0x34, 0x90, 0xd9, - 0xac, 0x40, 0x14, 0xaa, 0x18, 0x02, 0xa9, 0x19, 0x25, 0xa2, 0xce, 0x89, 0x21, 0x53, 0x14, 0xda, - 0x8b, 0x22, 0x91, 0xab, 0x38, 0x35, 0xc8, 0x0b, 0x26, 0xb8, 0x9a, 0xaa, 0x38, 0x46, 0x91, 0x9a, - 0x09, 0x43, 0xb1, 0x9c, 0x42, 0x90, 0xaa, 0x30, 0x43, 0x14, 0xfc, 0x9b, 0x33, 0x23, 0xb8, 0x9d, - 0x21, 0x91, 0x08, 0x20, 0x01, 0x41, 0xa0, 0x9b, 0x65, 0x02, 0xda, 0x9d, 0x21, 0x23, 0x80, 0x18, - 0xa0, 0x9b, 0x11, 0xa9, 0x42, 0xfb, 0x8a, 0x50, 0x15, 0x88, 0xa9, 0x9b, 0x10, 0x81, 0x51, 0x14, - 0xa9, 0x9a, 0x00, 0x51, 0x05, 0xda, 0x9a, 0x30, 0x25, 0xc9, 0x9b, 0x00, 0xb9, 0x10, 0x11, 0x36, - 0xc1, 0xac, 0x30, 0x83, 0x98, 0xfc, 0x8b, 0x45, 0x92, 0xab, 0x10, 0x00, 0x90, 0xab, 0x40, 0xa3, - 0xbf, 0x89, 0x51, 0x23, 0xa0, 0xbe, 0x08, 0x22, 0xa2, 0xbf, 0x18, 0x25, 0xc9, 0x29, 0x23, 0xd8, - 0x9a, 0x89, 0x42, 0xa1, 0xba, 0x9a, 0x18, 0x57, 0x83, 0xcb, 0x89, 0x99, 0x18, 0x53, 0x02, 0xda, - 0xac, 0x31, 0x34, 0x80, 0xda, 0x9d, 0x32, 0x91, 0x9c, 0x52, 0xa1, 0xbb, 0x29, 0x55, 0x91, 0xad, - 0x18, 0x01, 0x20, 0x81, 0xbd, 0x39, 0x36, 0xa8, 0xab, 0x30, 0xb1, 0xbf, 0x61, 0x23, 0xa9, 0xbc, - 0x0a, 0x52, 0x12, 0xb9, 0x9a, 0x18, 0x34, 0xb8, 0x18, 0x11, 0xda, 0x9c, 0x62, 0x44, 0x91, 0xbd, - 0x0a, 0x21, 0x02, 0xb9, 0x30, 0x25, 0xa8, 0xab, 0x21, 0xc0, 0xcc, 0x19, 0x73, 0x33, 0xa1, 0xbe, - 0x18, 0x11, 0x00, 0xaa, 0x09, 0x34, 0x13, 0x89, 0x00, 0xd8, 0xcc, 0x8a, 0x32, 0x34, 0x82, 0xcd, - 0x19, 0x01, 0x42, 0x15, 0xb9, 0x8a, 0x01, 0x40, 0x35, 0xc8, 0xac, 0x08, 0x21, 0x25, 0xa0, 0xcb, - 0x99, 0x89, 0x31, 0x37, 0x83, 0xaa, 0x00, 0x44, 0x23, 0xc0, 0xae, 0x09, 0x22, 0x00, 0x31, 0x22, - 0x02, 0xdd, 0x0a, 0x45, 0xb0, 0xad, 0x31, 0x02, 0x11, 0xa8, 0xbd, 0x29, 0x23, 0xa0, 0x8a, 0x71, - 0x04, 0xbc, 0x50, 0x23, 0xd9, 0x8b, 0x31, 0x14, 0xa8, 0x9c, 0xa8, 0x8a, 0x34, 0xc9, 0x1a, 0x15, - 0xb8, 0x0b, 0x25, 0x01, 0xc9, 0xad, 0x20, 0x11, 0x11, 0xf9, 0x0b, 0x44, 0x81, 0xab, 0x10, 0xd8, - 0xac, 0x48, 0x27, 0xb8, 0x9c, 0x11, 0x11, 0x08, 0xa0, 0xbc, 0x0a, 0x11, 0x13, 0x21, 0x36, 0xf9, - 0x9e, 0x30, 0x12, 0xb9, 0xbb, 0x28, 0x43, 0x81, 0x9a, 0x08, 0x01, 0xda, 0x0b, 0x52, 0x04, 0xec, - 0x0b, 0x44, 0x02, 0xb9, 0xad, 0x20, 0x34, 0xb0, 0xac, 0x09, 0x00, 0x01, 0x42, 0x14, 0xd8, 0xad, - 0x1a, 0x53, 0x01, 0xa9, 0x9a, 0x18, 0x34, 0xa0, 0x0c, 0x11, 0xca, 0x1a, 0x53, 0x14, 0xa0, 0xbf, - 0x0a, 0x32, 0x23, 0xa9, 0xac, 0x30, 0x23, 0xd9, 0xac, 0x8a, 0x42, 0x53, 0x24, 0x88, 0xa9, 0xdb, - 0xab, 0x41, 0x14, 0x80, 0x01, 0xa9, 0x48, 0x03, 0xda, 0xbc, 0xaa, 0x68, 0x36, 0x81, 0x99, 0xb9, - 0x0b, 0x43, 0xa1, 0x0a, 0x03, 0x9b, 0x41, 0x24, 0x46, 0xd0, 0x9e, 0x11, 0x01, 0x00, 0x91, 0xdb, - 0x09, 0x10, 0x34, 0xb0, 0x58, 0x04, 0xbd, 0x30, 0x04, 0xaa, 0x28, 0x12, 0x80, 0x0a, 0x43, 0xf8, - 0x9d, 0x20, 0x90, 0x18, 0x03, 0x18, 0x55, 0x02, 0x98, 0xdb, 0x09, 0x11, 0x21, 0x34, 0xfa, 0x1a, - 0x33, 0xc9, 0x19, 0x24, 0x98, 0xab, 0x62, 0x82, 0xba, 0x19, 0x02, 0xba, 0x2a, 0x15, 0xa8, 0x9a, - 0x00, 0x41, 0x46, 0x92, 0xcc, 0x29, 0x37, 0x92, 0xdb, 0x8b, 0x31, 0x12, 0xca, 0x9a, 0x00, 0xa8, - 0x0b, 0x65, 0x24, 0xc8, 0xbc, 0x18, 0x43, 0x82, 0xdb, 0x8b, 0x41, 0x11, 0x98, 0x08, 0x11, 0xfa, - 0x9d, 0x31, 0x14, 0xb8, 0xab, 0x28, 0x35, 0xa1, 0xbd, 0x8b, 0x31, 0x01, 0x89, 0x10, 0xa8, 0x9c, - 0x41, 0x24, 0x91, 0xff, 0x8a, 0x20, 0x24, 0xa0, 0xbb, 0x8b, 0x42, 0x03, 0x09, 0x91, 0xcd, 0xab, - 0x10, 0x63, 0x25, 0xc8, 0x9b, 0x18, 0x21, 0x12, 0xfb, 0x8b, 0x20, 0x21, 0x24, 0xda, 0x8a, 0x88, - 0x19, 0x33, 0xca, 0x30, 0xc2, 0x0c, 0x13, 0xca, 0x08, 0xc9, 0x48, 0x36, 0x01, 0x83, 0xff, 0x8a, - 0x32, 0x01, 0x08, 0x80, 0x99, 0xa9, 0x20, 0xd1, 0xad, 0x30, 0x92, 0x3b, 0x77, 0x81, 0xab, 0x9b, - 0x21, 0x03, 0x18, 0x22, 0xb8, 0x8c, 0x32, 0x03, 0xb9, 0xdf, 0x8a, 0x42, 0x14, 0x88, 0x10, 0xb9, - 0x9d, 0x30, 0x13, 0x90, 0x88, 0xc9, 0x9c, 0x72, 0x25, 0xb8, 0x8d, 0x62, 0x92, 0xaa, 0x9a, 0x00, - 0x01, 0x11, 0x90, 0x8a, 0x18, 0x65, 0xa1, 0x8a, 0x02, 0xdc, 0x38, 0x36, 0x02, 0x00, 0xa9, 0xab, - 0xeb, 0x09, 0x23, 0xa0, 0xaa, 0x0c, 0x67, 0x03, 0xb9, 0x8b, 0x32, 0x24, 0xb0, 0xac, 0x20, 0x33, - 0x91, 0xcd, 0x41, 0x84, 0xcb, 0x38, 0x25, 0x81, 0xba, 0x9c, 0x50, 0x23, 0xa0, 0xbd, 0x09, 0x11, - 0x00, 0x10, 0x24, 0xd9, 0xac, 0x40, 0x35, 0x81, 0x99, 0xab, 0x38, 0x15, 0xbb, 0x8a, 0xc9, 0x8b, - 0x22, 0x53, 0x13, 0xc9, 0x9b, 0x89, 0x72, 0x83, 0xbf, 0x1a, 0x33, 0x03, 0xa8, 0xbe, 0x18, 0x01, - 0x20, 0xa1, 0xbb, 0xaa, 0x9a, 0x74, 0x17, 0xa8, 0xba, 0xdb, 0x18, 0x24, 0x82, 0xe9, 0xaa, 0x21, - 0x12, 0x33, 0xd2, 0xbe, 0x08, 0x12, 0xa9, 0x09, 0x01, 0xb8, 0x09, 0x36, 0xa0, 0xbc, 0xbb, 0xbb, - 0x58, 0x37, 0xa2, 0xae, 0x28, 0x33, 0xa9, 0x9b, 0xba, 0x18, 0x33, 0x53, 0x24, 0xfb, 0xbd, 0x19, - 0x43, 0x12, 0xa0, 0x99, 0xca, 0x9c, 0x52, 0x82, 0xac, 0x19, 0x33, 0x32, 0x04, 0xda, 0xdd, 0x0b, - 0x63, 0x82, 0x88, 0x10, 0x98, 0xaa, 0x8a, 0x20, 0xa1, 0xaf, 0x10, 0x31, 0x55, 0x91, 0xbc, 0x9a, - 0x20, 0x43, 0x91, 0x89, 0x32, 0x11, 0x81, 0xce, 0x18, 0xa0, 0x3a, 0x37, 0xc8, 0x9b, 0x22, 0x11, - 0x21, 0x91, 0x89, 0x00, 0xfb, 0xcc, 0x58, 0x26, 0xc8, 0xab, 0x51, 0x34, 0x81, 0xbc, 0x99, 0x00, - 0x22, 0xb0, 0x0c, 0x44, 0x91, 0xbb, 0x08, 0x02, 0xc9, 0xac, 0x60, 0x35, 0x11, 0xa9, 0x0b, 0x25, - 0xa1, 0xbb, 0x08, 0xca, 0x1a, 0x43, 0x21, 0x83, 0xbe, 0x89, 0x73, 0x25, 0x90, 0xcb, 0x09, 0x33, - 0x12, 0x00, 0xba, 0xa9, 0x9a, 0x50, 0x55, 0x13, 0xdb, 0x0a, 0x53, 0x02, 0xa9, 0x8a, 0xb9, 0x39, - 0x17, 0xa8, 0xbb, 0x10, 0x81, 0x08, 0x44, 0x02, 0xa8, 0x71, 0x25, 0x98, 0x8a, 0xdb, 0xbb, 0x58, - 0x24, 0xa8, 0xaa, 0x89, 0x38, 0x45, 0x91, 0xcc, 0x8a, 0x38, 0x33, 0x88, 0x18, 0xd8, 0xbc, 0x88, - 0x41, 0x33, 0xd9, 0xae, 0x20, 0x42, 0x82, 0xac, 0x19, 0x92, 0x9b, 0x41, 0xd8, 0xbc, 0x08, 0x31, - 0x14, 0x00, 0x81, 0xfd, 0x0a, 0x33, 0xa8, 0xab, 0x9a, 0x28, 0x33, 0x44, 0x91, 0xef, 0x9a, 0x18, - 0x42, 0x03, 0xda, 0x8a, 0x00, 0x10, 0x10, 0xa8, 0x89, 0x10, 0x24, 0xd9, 0x38, 0xf2, 0xbe, 0x10, - 0x43, 0x13, 0x98, 0xbd, 0x99, 0x08, 0x32, 0xa8, 0x0c, 0x23, 0x88, 0x64, 0xa2, 0xce, 0x8a, 0x21, - 0x12, 0x98, 0x20, 0x26, 0x80, 0xb9, 0xbd, 0x29, 0x84, 0xca, 0x2a, 0x45, 0x82, 0xcc, 0xab, 0x41, - 0x15, 0xa8, 0xbb, 0x48, 0x14, 0x90, 0x08, 0x10, 0xb8, 0x8c, 0x31, 0x33, 0xb1, 0xbf, 0x8a, 0x42, - 0x15, 0x80, 0x88, 0x20, 0xc8, 0x9b, 0x88, 0xbc, 0x28, 0x23, 0x74, 0x27, 0xa0, 0xad, 0x18, 0x22, - 0x01, 0x9a, 0x09, 0x01, 0x31, 0x26, 0xc9, 0xbd, 0x8a, 0x99, 0x60, 0x25, 0x90, 0x9b, 0x20, 0x54, - 0x02, 0x98, 0xa9, 0xbc, 0x38, 0x24, 0xa8, 0x9b, 0x08, 0x20, 0x12, 0x32, 0x85, 0xcc, 0x51, 0x13, - 0x31, 0x14, 0xec, 0x89, 0x10, 0x33, 0x82, 0xcc, 0x0a, 0x55, 0x23, 0xc9, 0x9b, 0x31, 0x11, 0x20, - 0x23, 0xc0, 0xbf, 0x9b, 0x21, 0x01, 0x21, 0xc0, 0x8d, 0x72, 0x23, 0x00, 0xaa, 0x9a, 0x89, 0x20, - 0x02, 0x88, 0xa9, 0xce, 0x29, 0x27, 0xb9, 0x8a, 0x88, 0x08, 0x32, 0x13, 0xda, 0xbc, 0x29, 0x25, - 0x88, 0x81, 0xfd, 0x9c, 0x21, 0x14, 0x81, 0xaa, 0x9a, 0x41, 0x23, 0xc0, 0xbd, 0x9a, 0xa9, 0x1a, - 0x57, 0x01, 0xa9, 0xab, 0x89, 0x21, 0x02, 0xa9, 0xcb, 0x0a, 0x53, 0x23, 0xd9, 0xcf, 0x8a, 0x41, - 0x23, 0xa8, 0xbc, 0x9b, 0x31, 0xa1, 0x9d, 0x50, 0x33, 0xc1, 0xbc, 0x38, 0x03, 0xdd, 0x8a, 0x41, - 0x33, 0xa1, 0xbc, 0x09, 0x12, 0xc9, 0xbb, 0x1a, 0x41, 0x54, 0x02, 0x98, 0xdb, 0xbc, 0x0a, 0x31, - 0x36, 0xa0, 0xad, 0x31, 0x14, 0x99, 0x19, 0x90, 0xcb, 0x09, 0x63, 0x83, 0xba, 0xba, 0xad, 0x51, - 0x14, 0xca, 0xab, 0x30, 0x25, 0xa0, 0x09, 0x90, 0x0a, 0x67, 0x01, 0xa9, 0xbb, 0xab, 0x38, 0x37, - 0x22, 0xa8, 0x8b, 0x00, 0x21, 0x16, 0xfa, 0xbb, 0x18, 0x34, 0x33, 0x00, 0xdb, 0xab, 0x30, 0x15, - 0x98, 0x30, 0x01, 0xa9, 0x69, 0x37, 0xa0, 0xbd, 0x89, 0x01, 0x11, 0xb8, 0xaf, 0x30, 0x24, 0x22, - 0x81, 0xaa, 0x29, 0x15, 0x00, 0x08, 0x00, 0xea, 0xac, 0x61, 0x03, 0xbb, 0xab, 0x10, 0x64, 0x33, - 0x01, 0xcb, 0xab, 0x31, 0x14, 0x32, 0x91, 0xbd, 0x29, 0x33, 0x22, 0x91, 0xac, 0x40, 0x47, 0x23, - 0x80, 0x11, 0xd9, 0xbc, 0x0a, 0x22, 0xc8, 0xcc, 0x18, 0x54, 0x22, 0xa0, 0xaa, 0x18, 0x43, 0x13, - 0x98, 0xbb, 0xcb, 0x0a, 0x44, 0x02, 0x98, 0xfb, 0xab, 0x20, 0x24, 0x80, 0x88, 0xfa, 0x8b, 0x63, - 0x24, 0xb8, 0xbf, 0x0a, 0x32, 0x82, 0xba, 0x29, 0x43, 0x14, 0xba, 0x8c, 0x00, 0xdb, 0x8b, 0x31, - 0x26, 0x98, 0xbb, 0xbc, 0x2a, 0x36, 0xb8, 0x9b, 0x32, 0x93, 0xbd, 0x8a, 0x98, 0xba, 0x59, 0x37, - 0xb0, 0xcb, 0xba, 0x8a, 0x20, 0x92, 0xcf, 0x19, 0x35, 0x82, 0xa9, 0xa8, 0xde, 0x8a, 0x22, 0x43, - 0x12, 0xa8, 0xcc, 0x0a, 0x21, 0x90, 0xac, 0x99, 0x20, 0x37, 0x12, 0xca, 0xbb, 0x0a, 0x11, 0xa8, - 0x10, 0xf8, 0x8f, 0x43, 0x02, 0xaa, 0x98, 0xba, 0x51, 0x35, 0x01, 0xda, 0xad, 0x28, 0x43, 0x02, - 0xca, 0x9a, 0x98, 0x8a, 0x21, 0x22, 0xa8, 0xac, 0x62, 0x35, 0x23, 0xc0, 0xcf, 0x8a, 0x42, 0x02, - 0x98, 0x09, 0x20, 0x23, 0x91, 0xbc, 0x9b, 0x08, 0x21, 0x32, 0x15, 0xb0, 0xad, 0x38, 0x13, 0x08, - 0xc0, 0xff, 0x18, 0x34, 0x23, 0x82, 0xa9, 0xaa, 0x89, 0x34, 0xa1, 0xef, 0x8b, 0x20, 0x33, 0x82, - 0xaa, 0x89, 0x32, 0x12, 0x72, 0x36, 0x81, 0xcb, 0x99, 0x20, 0x21, 0xd8, 0xbc, 0x10, 0x44, 0x14, - 0xb9, 0x8b, 0x20, 0x21, 0x42, 0x15, 0xb8, 0x9b, 0x52, 0x15, 0xb9, 0xab, 0x0b, 0x53, 0x23, 0x53, - 0x36, 0x91, 0xad, 0x29, 0x24, 0x81, 0xbd, 0xab, 0x10, 0x43, 0x12, 0xca, 0x0a, 0x43, 0x01, 0x09, - 0x42, 0xa2, 0xbd, 0x28, 0x34, 0x01, 0x98, 0xdc, 0x8a, 0x22, 0x92, 0xdc, 0x09, 0x11, 0x21, 0x35, - 0x82, 0xeb, 0xcb, 0x89, 0x18, 0x81, 0x88, 0x08, 0x52, 0x15, 0xe9, 0x8b, 0x18, 0x10, 0x33, 0xa1, - 0xdd, 0x99, 0x98, 0x88, 0x30, 0x04, 0xfa, 0x8a, 0x41, 0x02, 0xc9, 0xbd, 0x8a, 0x20, 0x35, 0x33, - 0xc8, 0xbd, 0x8b, 0x08, 0x88, 0xaa, 0x30, 0x82, 0x0a, 0x55, 0xb1, 0xef, 0x8a, 0x11, 0x22, 0x02, - 0xca, 0x9a, 0x30, 0x16, 0xc8, 0xbb, 0x8a, 0x18, 0x34, 0x23, 0x81, 0xea, 0xbd, 0x19, 0x44, 0x13, - 0xdb, 0xac, 0x18, 0x32, 0x01, 0xa9, 0xad, 0x38, 0x44, 0x91, 0xbb, 0x08, 0xa9, 0x40, 0x36, 0x11, - 0xa8, 0xcc, 0x99, 0x88, 0xb9, 0x9b, 0x9a, 0x74, 0x22, 0x33, 0x92, 0xde, 0x8b, 0x30, 0x33, 0xb8, - 0xad, 0x10, 0x41, 0x45, 0x90, 0xab, 0x09, 0x98, 0x18, 0x33, 0x24, 0xa2, 0xbe, 0x38, 0x25, 0x91, - 0xdd, 0xab, 0x28, 0x32, 0x44, 0x24, 0xa8, 0x8b, 0x52, 0x14, 0xca, 0x9b, 0x20, 0x01, 0x98, 0xba, - 0xad, 0x09, 0x11, 0x10, 0x76, 0x24, 0xb8, 0x9c, 0x42, 0x23, 0xa0, 0xcc, 0x8b, 0x42, 0x23, 0x90, - 0xbb, 0x9a, 0x00, 0x28, 0x56, 0x12, 0x99, 0x1a, 0x22, 0x43, 0x83, 0xde, 0x9b, 0x20, 0x23, 0x21, - 0x34, 0x01, 0x30, 0x36, 0x23, 0xa0, 0xbc, 0xbc, 0x28, 0x13, 0xa0, 0xce, 0x1a, 0x54, 0x01, 0x90, - 0x98, 0x88, 0x10, 0x10, 0x55, 0x13, 0xb9, 0x28, 0x13, 0xfb, 0x9e, 0x89, 0x80, 0x32, 0x26, 0x91, - 0xbb, 0x9b, 0x20, 0x12, 0x90, 0xec, 0xab, 0x30, 0x04, 0x10, 0xc8, 0xbc, 0x0b, 0x73, 0x34, 0x90, - 0xbc, 0xac, 0x0a, 0x63, 0x91, 0xbb, 0x38, 0x33, 0x80, 0xfb, 0xcb, 0x9a, 0x20, 0x34, 0x12, 0x10, - 0xea, 0xbc, 0x08, 0x23, 0x92, 0xde, 0x9b, 0x41, 0x24, 0x80, 0xeb, 0x9b, 0x08, 0x10, 0x31, 0x82, - 0xca, 0x9b, 0x31, 0x23, 0xb9, 0xcd, 0xab, 0x18, 0x44, 0x80, 0xa9, 0xac, 0x8a, 0x62, 0x34, 0x90, - 0xcd, 0x9b, 0x20, 0x23, 0xb8, 0xbf, 0x28, 0x35, 0x90, 0xbb, 0x9a, 0xcb, 0x0a, 0x57, 0x13, 0xa8, - 0x18, 0xa8, 0x9a, 0x20, 0xc1, 0xcd, 0x9b, 0x00, 0x73, 0x23, 0xa0, 0xcc, 0x0a, 0x43, 0x81, 0xbc, - 0x89, 0x21, 0x42, 0x13, 0x99, 0x28, 0xb0, 0xdf, 0x18, 0x33, 0x82, 0x9a, 0x10, 0x55, 0x14, 0xd9, - 0xad, 0x09, 0x31, 0x02, 0x98, 0x89, 0x98, 0x40, 0x36, 0x13, 0x98, 0xaa, 0x0a, 0x44, 0x13, 0xdb, - 0xcc, 0xaa, 0x18, 0x32, 0x04, 0x80, 0x80, 0x08, 0x72, 0x34, 0x90, 0xbc, 0x39, 0x27, 0x90, 0x88, - 0xa8, 0xaa, 0x08, 0x21, 0x01, 0xa9, 0x71, 0x35, 0x12, 0x24, 0xc8, 0x9c, 0x08, 0x88, 0x11, 0x98, - 0x9b, 0x61, 0x46, 0x23, 0x10, 0x11, 0x08, 0x51, 0x82, 0xdc, 0x9a, 0x18, 0x43, 0x12, 0x88, 0xa0, - 0xcf, 0x8a, 0x42, 0x33, 0x03, 0xba, 0x29, 0x55, 0x02, 0xc9, 0xac, 0x0a, 0x32, 0x23, 0x80, 0xab, - 0x00, 0xc9, 0x19, 0x73, 0x83, 0xeb, 0x9a, 0x21, 0x02, 0xea, 0xcc, 0x89, 0x63, 0x23, 0x91, 0xda, - 0xab, 0x09, 0x22, 0x14, 0xa0, 0xac, 0x89, 0x42, 0x33, 0xe8, 0xbe, 0x0a, 0x11, 0x01, 0x42, 0x03, - 0xec, 0x8a, 0x20, 0x01, 0xba, 0x9a, 0x18, 0x32, 0x33, 0xfa, 0xae, 0x89, 0x80, 0x00, 0x80, 0xd9, - 0x9c, 0x41, 0x02, 0x9a, 0x8a, 0x99, 0x88, 0x00, 0xb9, 0x98, 0xfe, 0xbc, 0x28, 0x47, 0x12, 0xda, - 0x9b, 0x19, 0x32, 0x81, 0xba, 0x8b, 0x42, 0x02, 0xbb, 0xa9, 0xfa, 0xdb, 0x8a, 0x61, 0x33, 0x91, - 0xa9, 0x28, 0x36, 0x91, 0xcc, 0xab, 0x99, 0x40, 0x14, 0xa9, 0x89, 0x80, 0x11, 0x32, 0xb8, 0xff, - 0x9c, 0x40, 0x33, 0x01, 0x89, 0xba, 0xcb, 0x18, 0x44, 0x80, 0x9a, 0x0a, 0x51, 0x45, 0x02, 0xaa, - 0xba, 0xab, 0x41, 0x03, 0xb8, 0xcd, 0x8a, 0x32, 0x23, 0x00, 0x35, 0x12, 0x54, 0x24, 0x91, 0xca, - 0x9b, 0xa9, 0x09, 0x11, 0xc9, 0xae, 0x28, 0x35, 0x13, 0xca, 0x9c, 0x42, 0x35, 0x12, 0x98, 0x20, - 0xa8, 0x9b, 0x01, 0xc0, 0xaf, 0x28, 0x88, 0x73, 0x26, 0x91, 0xba, 0x39, 0x25, 0x02, 0xcb, 0xbb, - 0x9b, 0x72, 0x22, 0x01, 0x10, 0x10, 0x21, 0x45, 0x91, 0x0a, 0x11, 0x00, 0x30, 0x47, 0xb0, 0xbd, - 0x08, 0x11, 0x00, 0x31, 0xb1, 0xaf, 0x61, 0x34, 0x90, 0xbb, 0x89, 0x20, 0x43, 0x13, 0xd9, 0xcb, - 0x89, 0x30, 0x44, 0x02, 0xdb, 0x9a, 0x21, 0x11, 0x90, 0xbc, 0xbc, 0x0a, 0x32, 0x45, 0x13, 0xd8, - 0xbc, 0x09, 0x02, 0xa8, 0xbc, 0x30, 0x36, 0x01, 0xc9, 0xcb, 0x99, 0x90, 0xaa, 0x60, 0x12, 0xc9, - 0xba, 0x1a, 0x34, 0xc0, 0xce, 0x8a, 0x53, 0x03, 0xa8, 0xbc, 0xa9, 0x89, 0x32, 0x81, 0xd9, 0xcd, - 0x9a, 0x89, 0x41, 0x14, 0xca, 0x9b, 0x31, 0x82, 0xb8, 0xce, 0x9a, 0x00, 0x20, 0x32, 0xa2, 0xdd, - 0x9b, 0x20, 0x33, 0xb0, 0xce, 0x09, 0x52, 0x33, 0xa8, 0xdd, 0xcb, 0x18, 0x01, 0x88, 0xa8, 0x9a, - 0x38, 0x67, 0x12, 0x91, 0xcb, 0x9c, 0x18, 0x31, 0x23, 0xc8, 0xab, 0x09, 0x11, 0x00, 0xfc, 0x9b, - 0x18, 0x43, 0x22, 0x11, 0xb0, 0xaf, 0x19, 0x11, 0xb8, 0xab, 0x08, 0x62, 0x45, 0x02, 0xb9, 0x9b, - 0x54, 0x13, 0x80, 0xa8, 0xbc, 0x8a, 0x80, 0xba, 0x8a, 0xec, 0x9b, 0x73, 0x27, 0x12, 0x88, 0x98, - 0x08, 0x42, 0x03, 0xdc, 0x9b, 0x20, 0x11, 0x98, 0xb8, 0xcd, 0x9b, 0x73, 0x24, 0x01, 0x98, 0x09, - 0x21, 0x24, 0x81, 0xbb, 0xcb, 0x9b, 0x30, 0x45, 0x92, 0xa9, 0x18, 0x75, 0x32, 0x81, 0xcb, 0x9a, - 0x31, 0x14, 0x81, 0xca, 0xac, 0x48, 0x36, 0x02, 0x88, 0x89, 0x31, 0x45, 0x34, 0x80, 0xaa, 0x9a, - 0x89, 0x31, 0x33, 0xb9, 0xbf, 0x8b, 0x55, 0x23, 0x90, 0xba, 0x8b, 0x64, 0x02, 0x08, 0x80, 0x00, - 0x99, 0x90, 0xcc, 0x29, 0x12, 0x31, 0x43, 0x15, 0xfb, 0xad, 0x09, 0x41, 0x03, 0xa8, 0x9b, 0x18, - 0x98, 0x08, 0xd8, 0xac, 0xaa, 0x40, 0x57, 0x01, 0xca, 0xab, 0x9b, 0x31, 0x15, 0x90, 0x98, 0x89, - 0x88, 0xaa, 0xbb, 0xbb, 0xce, 0x09, 0x54, 0x12, 0xc8, 0xac, 0x09, 0x41, 0x13, 0xfb, 0xac, 0x89, - 0x10, 0x12, 0xb0, 0xae, 0x89, 0x20, 0x11, 0x80, 0xca, 0xcf, 0x8a, 0x52, 0x12, 0x89, 0xba, 0xac, - 0x19, 0x24, 0xa0, 0xae, 0x0a, 0x20, 0x24, 0x24, 0xa0, 0xab, 0xcb, 0xbb, 0x9a, 0xa8, 0xdb, 0x1a, - 0x46, 0x02, 0x99, 0xaa, 0xa9, 0x48, 0x37, 0xa0, 0x9a, 0x10, 0x14, 0x98, 0x08, 0xfb, 0xcd, 0x8a, - 0x31, 0x25, 0x81, 0xcb, 0x8a, 0x32, 0x04, 0xa9, 0xbb, 0x9b, 0x39, 0x47, 0x02, 0xa8, 0xdb, 0x8a, - 0x61, 0x34, 0x80, 0x9a, 0x20, 0x24, 0x90, 0xca, 0xce, 0x8a, 0x18, 0x33, 0x12, 0x81, 0xba, 0x29, - 0x57, 0x34, 0x80, 0xab, 0x88, 0x32, 0x24, 0xc9, 0xdd, 0x9a, 0x00, 0x32, 0x82, 0xaa, 0x8a, 0x64, - 0x24, 0x12, 0x80, 0xbb, 0x0b, 0x43, 0x12, 0x00, 0xfa, 0xab, 0x10, 0x73, 0x23, 0xa0, 0x9b, 0x31, - 0x37, 0x12, 0xb8, 0xac, 0x08, 0x88, 0x11, 0x12, 0x98, 0x28, 0x77, 0x33, 0x11, 0x21, 0x11, 0x53, - 0x82, 0xaa, 0xdb, 0x9a, 0x53, 0x14, 0x00, 0x88, 0xdd, 0x8a, 0x32, 0x44, 0x02, 0xa9, 0x9a, 0x42, - 0x25, 0x98, 0xbc, 0x0a, 0x11, 0x43, 0x23, 0xc9, 0xbc, 0x8a, 0x00, 0x30, 0x47, 0xa0, 0xbc, 0x29, - 0x03, 0xda, 0xaa, 0xaa, 0x52, 0x35, 0x02, 0xea, 0xab, 0x89, 0x10, 0x22, 0x90, 0xbc, 0x09, 0x33, - 0x35, 0x83, 0xef, 0xbb, 0x08, 0x32, 0x11, 0x81, 0xeb, 0x9a, 0x21, 0x24, 0xc9, 0xaa, 0xa9, 0x89, - 0x10, 0x02, 0xfc, 0x9b, 0x9a, 0x20, 0x12, 0xfa, 0xbc, 0x29, 0x02, 0xaa, 0x09, 0x21, 0x90, 0x28, - 0xe8, 0xbd, 0xcc, 0xbd, 0x19, 0x55, 0x03, 0xb8, 0x9c, 0x08, 0x13, 0x81, 0xca, 0xac, 0x0a, 0x21, - 0x11, 0x90, 0xdc, 0xbd, 0x8a, 0x53, 0x14, 0x90, 0x99, 0x20, 0x36, 0x81, 0xcb, 0xab, 0xbb, 0x29, - 0x25, 0x80, 0x99, 0xaa, 0x19, 0x44, 0x01, 0xfd, 0xbb, 0x48, 0x26, 0x02, 0xb8, 0xbb, 0xab, 0x38, - 0x35, 0x01, 0xa9, 0x08, 0x63, 0x36, 0x81, 0xbb, 0xaa, 0x9b, 0x32, 0x04, 0xb9, 0xbf, 0x9b, 0x42, - 0x25, 0x01, 0x00, 0x00, 0x63, 0x34, 0x82, 0xc9, 0xab, 0x99, 0x08, 0x80, 0xdb, 0xbc, 0x20, 0x44, - 0x23, 0x98, 0x9a, 0x52, 0x44, 0x23, 0xa0, 0x18, 0x91, 0xbb, 0x18, 0xb1, 0xcf, 0x18, 0x22, 0x66, - 0x02, 0x01, 0x44, 0x7d, 0x0a, 0x02, 0xd0, 0x03, 0x24, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, - 0x9f, 0x35, 0x90, 0xbc, 0xa9, 0x8a, 0x10, 0x62, 0x55, 0x33, 0x31, 0x54, 0x33, 0x22, 0x63, 0x44, - 0x23, 0x32, 0x43, 0x34, 0x35, 0x34, 0x34, 0x24, 0x23, 0x43, 0x43, 0x24, 0x33, 0x35, 0x34, 0x24, - 0x43, 0x33, 0x35, 0x33, 0x34, 0x34, 0x43, 0x43, 0x43, 0x24, 0x33, 0x53, 0x33, 0x34, 0x33, 0x44, - 0x43, 0x24, 0x32, 0x33, 0x33, 0x33, 0x34, 0x33, 0x34, 0x24, 0x24, 0x33, 0x43, 0x33, 0x43, 0x33, - 0x15, 0x94, 0xff, 0x1f, 0x81, 0x08, 0x00, 0x90, 0xb8, 0x8b, 0x90, 0x38, 0xf9, 0x8d, 0x00, 0xbc, - 0x9b, 0x41, 0x92, 0xbb, 0xbc, 0xdc, 0xab, 0xa9, 0x99, 0x9a, 0xaa, 0xba, 0xba, 0xcb, 0xbb, 0xac, - 0x2d, 0x77, 0x12, 0xc8, 0xac, 0x20, 0x84, 0x0c, 0x12, 0x00, 0x08, 0x88, 0x80, 0xef, 0x89, 0x89, - 0x88, 0x88, 0x89, 0x89, 0x89, 0x99, 0x99, 0x9a, 0xaa, 0xaa, 0xab, 0xac, 0xbb, 0xbc, 0xbb, 0xbc, - 0xcb, 0xbb, 0xcb, 0x1b, 0x24, 0x33, 0x22, 0x54, 0x33, 0x81, 0x73, 0x25, 0x13, 0x34, 0x12, 0x20, - 0x26, 0x41, 0x33, 0x12, 0x73, 0x43, 0x02, 0x10, 0x34, 0x20, 0x34, 0x22, 0x34, 0x12, 0x11, 0x46, - 0x22, 0x22, 0x32, 0x32, 0x33, 0x34, 0x43, 0x33, 0x24, 0x24, 0x33, 0x24, 0x43, 0x32, 0x24, 0x33, - 0x34, 0x33, 0x34, 0x24, 0x33, 0x34, 0x43, 0x33, 0x43, 0x33, 0x84, 0x9b, 0x47, 0x90, 0xba, 0x1b, - 0x66, 0x23, 0xea, 0x39, 0x93, 0x8b, 0x80, 0x9a, 0x90, 0xbf, 0x19, 0x00, 0xa9, 0x30, 0xc2, 0xef, - 0x88, 0x80, 0x18, 0x98, 0xdb, 0x8c, 0xa8, 0x8c, 0x02, 0xbb, 0x08, 0x11, 0xe9, 0xbe, 0x0a, 0x12, - 0x00, 0xb8, 0xbf, 0x9a, 0xa8, 0xbb, 0x30, 0x04, 0xcb, 0x30, 0x84, 0xbf, 0x9b, 0x21, 0x34, 0xa1, - 0xce, 0x8a, 0x88, 0x09, 0x31, 0x02, 0xca, 0x29, 0x23, 0xc8, 0xad, 0x18, 0x34, 0x82, 0xcd, 0x9a, - 0x10, 0x22, 0x42, 0x13, 0xa0, 0x9a, 0x31, 0x24, 0xb8, 0x0c, 0x62, 0x02, 0xda, 0x9a, 0x41, 0x34, - 0x44, 0x12, 0x00, 0xa8, 0x89, 0x43, 0x23, 0x80, 0x88, 0x88, 0xdb, 0xab, 0x08, 0x66, 0x33, 0x24, - 0x11, 0x88, 0xaa, 0x30, 0x34, 0x22, 0x91, 0x88, 0x80, 0xbc, 0x8a, 0x62, 0x13, 0x51, 0x24, 0x22, - 0x82, 0x2a, 0x24, 0x22, 0xd9, 0x28, 0x82, 0x89, 0xb8, 0xef, 0x08, 0x89, 0x08, 0x31, 0x03, 0x1b, - 0x34, 0x82, 0xdb, 0x3b, 0x37, 0x21, 0x22, 0x34, 0x90, 0x61, 0x25, 0x80, 0x11, 0x98, 0x41, 0xa1, - 0x0c, 0x45, 0x22, 0x20, 0x37, 0x91, 0x29, 0x44, 0x12, 0x10, 0xa1, 0x9c, 0x98, 0x08, 0x43, 0x92, - 0x08, 0x01, 0xec, 0xac, 0x28, 0x45, 0x90, 0x08, 0xc9, 0xab, 0x98, 0x2a, 0x27, 0xaa, 0xa1, 0xbf, - 0xc8, 0xbe, 0x20, 0x02, 0xeb, 0x9a, 0xb9, 0x8a, 0xa9, 0x9d, 0x10, 0xca, 0xbc, 0x0a, 0xd0, 0xbd, - 0x88, 0x99, 0xa9, 0xce, 0x0b, 0x81, 0xcb, 0x9b, 0x9a, 0x88, 0xfb, 0x9f, 0x08, 0x98, 0x9a, 0x09, - 0xa8, 0xcc, 0x09, 0x12, 0xb8, 0xad, 0xaa, 0x9a, 0xaa, 0xca, 0xad, 0x08, 0x08, 0x32, 0xd2, 0xbf, - 0x19, 0xa8, 0xbc, 0x20, 0xa0, 0x8d, 0x34, 0x82, 0xbb, 0x09, 0x80, 0x21, 0xf8, 0x9e, 0x52, 0x03, - 0xaa, 0x19, 0x23, 0x12, 0x42, 0x34, 0x01, 0xde, 0x8a, 0x73, 0x12, 0x88, 0x40, 0x04, 0xea, 0x9b, - 0x20, 0x12, 0xca, 0x1a, 0x33, 0x91, 0xbb, 0x50, 0x04, 0xa9, 0x0a, 0xa0, 0xdf, 0xab, 0x42, 0x24, - 0xa8, 0xbb, 0x89, 0x01, 0x98, 0xbb, 0xce, 0x9b, 0x08, 0x00, 0xc9, 0xbe, 0x1a, 0x12, 0xe9, 0xbd, - 0x8b, 0x10, 0x81, 0xcc, 0xac, 0x99, 0x18, 0x01, 0xe9, 0xac, 0x8a, 0x30, 0x13, 0xa8, 0xab, 0x11, - 0x12, 0xeb, 0xce, 0xaa, 0x31, 0x22, 0xa0, 0xcc, 0xab, 0x30, 0x35, 0x02, 0xb8, 0xcb, 0xbb, 0xab, - 0x31, 0x37, 0x63, 0x33, 0x02, 0xca, 0x9a, 0x31, 0x47, 0x23, 0x80, 0x88, 0x89, 0x40, 0x55, 0x22, - 0x33, 0x14, 0x80, 0x00, 0x90, 0x61, 0x44, 0x32, 0x31, 0x02, 0xba, 0x40, 0x36, 0x43, 0x12, 0x11, - 0x11, 0x88, 0x40, 0x36, 0x24, 0x00, 0x10, 0x34, 0x01, 0x72, 0x34, 0x13, 0x11, 0x11, 0x80, 0x88, - 0x10, 0x66, 0x14, 0x90, 0x19, 0x01, 0x18, 0x63, 0x32, 0x22, 0xea, 0xab, 0x89, 0x89, 0x00, 0x62, - 0x13, 0x98, 0xa9, 0x18, 0xd0, 0x1a, 0x23, 0xc9, 0x9d, 0x99, 0xbb, 0xfb, 0xcc, 0x89, 0x90, 0x09, - 0x01, 0x99, 0xa9, 0x8a, 0x90, 0xef, 0xcb, 0x99, 0x89, 0xca, 0xba, 0xac, 0x99, 0x00, 0x20, 0x01, - 0xfb, 0xac, 0xaa, 0xbc, 0xab, 0x9a, 0x08, 0x00, 0x18, 0x81, 0xb9, 0x30, 0x04, 0xea, 0xac, 0x8a, - 0xca, 0xcc, 0x19, 0x34, 0x81, 0x8a, 0x20, 0x33, 0x41, 0x56, 0x34, 0x02, 0x88, 0x31, 0x03, 0x98, - 0x61, 0x44, 0x01, 0xa9, 0x1a, 0x45, 0x33, 0x34, 0x44, 0x23, 0x11, 0x41, 0x44, 0x02, 0x20, 0x53, - 0x23, 0xa0, 0x9a, 0x52, 0x44, 0x12, 0x43, 0x23, 0x90, 0x30, 0x35, 0x23, 0x08, 0x31, 0x36, 0x11, - 0x10, 0x62, 0x24, 0x22, 0x11, 0x11, 0x81, 0x99, 0x51, 0x44, 0x32, 0x33, 0x44, 0x34, 0x12, 0x11, - 0x23, 0x82, 0xaa, 0x48, 0x34, 0x01, 0x99, 0x31, 0x01, 0x03, 0x9a, 0x42, 0x67, 0x35, 0x21, 0x01, - 0x80, 0x28, 0x54, 0x13, 0xb9, 0x9c, 0x18, 0x54, 0x23, 0x88, 0x30, 0x45, 0x43, 0x12, 0x98, 0x39, - 0x37, 0x21, 0x00, 0x98, 0x40, 0x47, 0x23, 0x91, 0xca, 0x8a, 0x21, 0x02, 0xa8, 0x19, 0x64, 0x24, - 0x98, 0x99, 0x98, 0x73, 0x24, 0xa8, 0xdb, 0x9b, 0x41, 0x25, 0x81, 0x99, 0xa9, 0xa9, 0x00, 0xd8, - 0xce, 0x8a, 0x18, 0x02, 0xc9, 0x8a, 0x00, 0xa8, 0xdc, 0xbc, 0xa9, 0xcb, 0x18, 0x02, 0xdc, 0xac, - 0x89, 0x80, 0xc9, 0xbd, 0xbb, 0xca, 0xac, 0x09, 0x80, 0xa9, 0xa9, 0xdb, 0xce, 0xac, 0x8a, 0x10, - 0x80, 0xb9, 0xdb, 0xbb, 0xab, 0x30, 0x13, 0xfb, 0xbd, 0xbc, 0xab, 0x09, 0x21, 0x22, 0x82, 0xcb, - 0xcc, 0xac, 0x8b, 0x20, 0x33, 0x91, 0xde, 0xac, 0x9b, 0x20, 0x44, 0x13, 0xa8, 0xbc, 0x9c, 0x19, - 0x52, 0x34, 0x13, 0x80, 0xaa, 0xb9, 0xab, 0x71, 0x35, 0x24, 0x01, 0x99, 0xab, 0x18, 0x54, 0x22, - 0xb8, 0xbb, 0xab, 0x9a, 0x19, 0x77, 0x34, 0x01, 0x99, 0xbb, 0xbc, 0x0a, 0x43, 0x02, 0xfb, 0xac, - 0x18, 0x43, 0x11, 0x01, 0x90, 0xca, 0xcc, 0xab, 0x8a, 0x08, 0x11, 0x82, 0xfc, 0xbd, 0x9b, 0x88, - 0xa0, 0xba, 0xab, 0xdc, 0xbc, 0xaa, 0x88, 0xa9, 0xaa, 0x09, 0xa8, 0xcc, 0x9b, 0x88, 0xfb, 0xcb, - 0x9a, 0x89, 0xaa, 0xbc, 0xba, 0xbb, 0xba, 0xab, 0x31, 0x36, 0xa1, 0xdd, 0xcb, 0xbc, 0xad, 0x10, - 0x22, 0x22, 0x12, 0x12, 0x23, 0xc8, 0x8a, 0x71, 0x24, 0x11, 0x80, 0x1a, 0x64, 0x24, 0x54, 0x22, - 0x11, 0x22, 0x33, 0x13, 0x53, 0x34, 0x31, 0x34, 0x32, 0x23, 0x32, 0x63, 0x56, 0x02, 0x01, 0x21, - 0x53, 0x23, 0x43, 0x12, 0x98, 0x31, 0x53, 0x23, 0x33, 0x63, 0x54, 0x34, 0x12, 0x32, 0x33, 0x12, - 0x22, 0xa0, 0xbc, 0x8a, 0x72, 0x45, 0x23, 0x81, 0x20, 0x33, 0x12, 0x00, 0xba, 0xdc, 0x9b, 0x08, - 0xa9, 0x19, 0x10, 0x56, 0x22, 0xb0, 0xbf, 0x8a, 0x80, 0x90, 0xdc, 0xbc, 0x19, 0x01, 0xaa, 0x88, - 0xc9, 0xae, 0xab, 0x88, 0xda, 0xbc, 0x89, 0x11, 0xfa, 0xbf, 0x99, 0x89, 0x98, 0x88, 0x98, 0xcb, - 0x9b, 0x88, 0x80, 0xa9, 0xbc, 0xaa, 0xcb, 0xbf, 0xab, 0xaa, 0xaa, 0x9a, 0x80, 0x99, 0xcb, 0x9a, - 0x50, 0x33, 0xd9, 0x9b, 0x08, 0x90, 0x09, 0x53, 0x24, 0x81, 0x89, 0x88, 0x08, 0x90, 0x51, 0x47, - 0x24, 0x01, 0x00, 0x10, 0x73, 0x44, 0x43, 0x32, 0x23, 0x31, 0x33, 0x13, 0x22, 0x64, 0x35, 0x33, - 0x02, 0x00, 0x31, 0x54, 0x34, 0x25, 0x23, 0x31, 0x43, 0x22, 0x01, 0x31, 0x45, 0x33, 0x11, 0x98, - 0xb9, 0x0a, 0x56, 0x35, 0x14, 0x01, 0x10, 0x22, 0x32, 0x32, 0x44, 0x33, 0x12, 0x80, 0x20, 0x32, - 0x65, 0x44, 0x22, 0xb8, 0xac, 0x09, 0x43, 0x24, 0x42, 0x22, 0x90, 0xba, 0x9a, 0x89, 0x20, 0x46, - 0x43, 0x80, 0xab, 0x2a, 0x65, 0x23, 0x01, 0x88, 0xaa, 0xaa, 0x1b, 0x47, 0x24, 0x33, 0x33, 0x01, - 0xa9, 0x0a, 0x73, 0x36, 0x02, 0x90, 0x99, 0x08, 0x20, 0x64, 0x33, 0x81, 0xba, 0xcb, 0x9a, 0x21, - 0x55, 0x35, 0x13, 0xa8, 0xab, 0x88, 0x89, 0x61, 0x33, 0x81, 0x99, 0x88, 0x00, 0x41, 0x34, 0x81, - 0xfe, 0xbc, 0x9b, 0x00, 0x80, 0x08, 0x98, 0xba, 0xbe, 0xab, 0x89, 0x99, 0xda, 0xcc, 0xeb, 0xbc, - 0x9a, 0x88, 0xc9, 0xcb, 0xcb, 0xba, 0xaa, 0xab, 0xab, 0xb9, 0xcd, 0xab, 0xeb, 0xdc, 0xaa, 0x9a, - 0x9a, 0xab, 0xac, 0x8a, 0x10, 0xb8, 0xdd, 0xcb, 0xac, 0xab, 0x89, 0x89, 0x99, 0xaa, 0x8a, 0x99, - 0xde, 0xac, 0x18, 0x02, 0xe9, 0xbc, 0xbb, 0xbb, 0x09, 0x34, 0x04, 0xb9, 0xab, 0x52, 0x02, 0xda, - 0x09, 0x43, 0x33, 0x80, 0xaa, 0xab, 0x18, 0x64, 0x35, 0x03, 0x80, 0x62, 0x35, 0x02, 0xb9, 0xaa, - 0x08, 0x32, 0x13, 0x00, 0x31, 0x65, 0x44, 0x11, 0xba, 0xad, 0x88, 0xb9, 0xbe, 0xab, 0x30, 0x37, - 0x23, 0x11, 0x00, 0x98, 0x18, 0x90, 0xfc, 0xcc, 0xbb, 0x8a, 0x88, 0xa9, 0xba, 0x9a, 0xcb, 0xde, - 0xbc, 0xbc, 0xbb, 0xaa, 0x99, 0xbb, 0xbe, 0xbb, 0x9a, 0xa9, 0xcb, 0xba, 0xdc, 0xcb, 0x9a, 0x89, - 0x99, 0xcb, 0xcd, 0xdb, 0xba, 0x9b, 0x89, 0x18, 0x21, 0x12, 0xc9, 0xcd, 0xac, 0x99, 0xa9, 0xcb, - 0xcc, 0xaa, 0x99, 0x08, 0x42, 0x44, 0x12, 0x11, 0x91, 0xca, 0xcb, 0x9a, 0x30, 0x34, 0x33, 0x54, - 0x44, 0x32, 0x33, 0x43, 0x33, 0x22, 0x43, 0x13, 0x81, 0x42, 0x55, 0x34, 0x12, 0x21, 0x42, 0x43, - 0x43, 0x43, 0x33, 0x12, 0x31, 0x44, 0x33, 0x24, 0x53, 0x44, 0x23, 0x11, 0x31, 0x34, 0x34, 0x53, - 0x43, 0x22, 0x11, 0x10, 0x21, 0x11, 0x53, 0x45, 0x24, 0x11, 0x00, 0x11, 0x11, 0x33, 0x35, 0x12, - 0xa0, 0xcb, 0xbb, 0xdb, 0x8a, 0x42, 0x34, 0x80, 0xba, 0x9a, 0x20, 0x55, 0x34, 0x91, 0xec, 0xac, - 0x9b, 0x99, 0x9a, 0x99, 0xa8, 0xdd, 0xbc, 0xaa, 0x8a, 0x88, 0x99, 0xca, 0xcd, 0xbc, 0xba, 0x99, - 0x80, 0x98, 0xda, 0xcd, 0xcb, 0xab, 0x89, 0x08, 0x98, 0xba, 0xbe, 0xcb, 0xaa, 0x88, 0x10, 0x00, - 0xa8, 0xbb, 0xba, 0xaa, 0x40, 0x36, 0xb0, 0xdf, 0xab, 0x99, 0x08, 0x21, 0x43, 0x23, 0x00, 0x89, - 0x00, 0x22, 0x54, 0x45, 0x23, 0x80, 0x89, 0x42, 0x35, 0x14, 0x11, 0x10, 0x21, 0x52, 0x54, 0x34, - 0x33, 0x33, 0x34, 0x24, 0x12, 0x11, 0x34, 0x33, 0x12, 0x21, 0x54, 0x44, 0x24, 0x23, 0x02, 0x88, - 0x10, 0x53, 0x43, 0x22, 0x53, 0x43, 0x23, 0x11, 0x21, 0x32, 0x36, 0x25, 0x12, 0x10, 0x10, 0x44, - 0x34, 0x13, 0x81, 0x10, 0x32, 0x33, 0x33, 0x42, 0x63, 0x34, 0x24, 0x01, 0x88, 0x20, 0x43, 0x02, - 0xda, 0xaa, 0x08, 0x54, 0x44, 0x12, 0x00, 0x08, 0x20, 0x31, 0x22, 0x54, 0x44, 0x24, 0x11, 0x01, - 0x21, 0x31, 0x44, 0x34, 0x23, 0x21, 0x32, 0x25, 0x13, 0x88, 0x99, 0x21, 0x33, 0x43, 0x55, 0x43, - 0x22, 0x63, 0x44, 0x23, 0x01, 0x88, 0x80, 0xa8, 0xbb, 0x08, 0x22, 0x33, 0x56, 0x24, 0x91, 0xba, - 0x19, 0x81, 0xed, 0xbd, 0xaa, 0x88, 0x00, 0x00, 0xb8, 0xde, 0xbc, 0xaa, 0x99, 0xcb, 0xbc, 0xaa, - 0xeb, 0xcd, 0xab, 0xa9, 0xa8, 0xa9, 0xab, 0xdb, 0xbc, 0xac, 0xa9, 0xda, 0xbc, 0xbc, 0xbc, 0xcb, - 0xac, 0x9a, 0x09, 0x88, 0x99, 0xdb, 0xbc, 0xac, 0xaa, 0xa9, 0xcb, 0xbc, 0xbb, 0xbb, 0xab, 0x9b, - 0x99, 0xca, 0xdd, 0xbc, 0xbe, 0xbb, 0x9a, 0x08, 0x11, 0x01, 0x88, 0xb9, 0xcd, 0xbb, 0x89, 0x98, - 0xb9, 0xbb, 0xdb, 0xbb, 0x1a, 0x46, 0x34, 0x22, 0x01, 0x10, 0x42, 0x33, 0x53, 0x54, 0x24, 0x12, - 0x98, 0xba, 0xab, 0x89, 0x30, 0x35, 0x22, 0x62, 0x35, 0x33, 0x11, 0x80, 0xfa, 0xcd, 0xac, 0x88, - 0x31, 0x44, 0x44, 0x43, 0x11, 0x98, 0xaa, 0xbb, 0xbc, 0xab, 0x99, 0xeb, 0xcc, 0xaa, 0x10, 0x32, - 0x22, 0x90, 0xec, 0xbd, 0xbd, 0xab, 0xaa, 0x99, 0x89, 0xa9, 0xcb, 0xcc, 0x8a, 0x18, 0x80, 0xca, - 0xcc, 0xcb, 0xbb, 0xab, 0x9a, 0xa9, 0xbb, 0xbd, 0xbc, 0xac, 0x9a, 0x18, 0x02, 0xc9, 0xcf, 0xbc, - 0xaa, 0x8a, 0x80, 0x90, 0xc9, 0xba, 0x9a, 0x89, 0x20, 0x44, 0x25, 0x01, 0xb9, 0xab, 0x39, 0x65, - 0x34, 0x14, 0x01, 0x00, 0x31, 0x45, 0x34, 0x33, 0x23, 0x33, 0x22, 0x22, 0x43, 0x55, 0x43, 0x23, - 0x11, 0x21, 0x64, 0x44, 0x33, 0x23, 0x12, 0x11, 0x23, 0x34, 0x34, 0x34, 0x43, 0x34, 0x33, 0x43, - 0x33, 0x46, 0x33, 0x33, 0x33, 0x33, 0x44, 0x43, 0x33, 0x13, 0x91, 0x88, 0x32, 0x35, 0x34, 0x34, - 0x33, 0x12, 0x88, 0x88, 0x52, 0x43, 0x33, 0x01, 0xa8, 0x09, 0x65, 0x35, 0x22, 0x98, 0xda, 0xcc, - 0xac, 0x9b, 0x09, 0x88, 0x99, 0x99, 0xba, 0xbd, 0xac, 0xaa, 0xbb, 0xbf, 0xad, 0xaa, 0xaa, 0xaa, - 0xdb, 0xcc, 0xbd, 0xac, 0x9b, 0x99, 0xa9, 0x99, 0x9a, 0xaa, 0xbc, 0xcb, 0xbb, 0xbb, 0xcb, 0xcb, - 0xbd, 0xac, 0xab, 0xa9, 0x98, 0x99, 0xaa, 0xcb, 0xcb, 0xac, 0xa9, 0x89, 0x30, 0x44, 0x22, 0x98, - 0xbb, 0xdb, 0xab, 0x89, 0x31, 0x44, 0x34, 0x25, 0x23, 0x22, 0x44, 0x45, 0x33, 0x23, 0x33, 0x44, - 0x44, 0x24, 0x33, 0x33, 0x24, 0x33, 0x33, 0x34, 0x34, 0x34, 0x24, 0x23, 0x22, 0x33, 0x45, 0x34, - 0x33, 0x43, 0x32, 0x43, 0x42, 0x42, 0x33, 0x24, 0x12, 0x22, 0x22, 0x33, 0x64, 0x53, 0x33, 0x24, - 0x23, 0x23, 0x23, 0x11, 0x33, 0x44, 0x33, 0x33, 0x44, 0x24, 0x33, 0x53, 0x33, 0x12, 0xa8, 0xaa, - 0x9a, 0x8a, 0x20, 0x45, 0x14, 0x01, 0x28, 0x53, 0x44, 0x43, 0x34, 0x14, 0x11, 0x00, 0x20, 0x42, - 0x33, 0x44, 0x43, 0x22, 0x10, 0x20, 0x43, 0x45, 0x43, 0x32, 0x01, 0x88, 0x88, 0x10, 0x42, 0x54, - 0x35, 0x44, 0x32, 0x21, 0x01, 0x01, 0x01, 0x80, 0xca, 0xbb, 0x18, 0x65, 0x34, 0x34, 0x23, 0x12, - 0xa0, 0xca, 0xbb, 0x9b, 0x42, 0x24, 0xd8, 0xcc, 0x9b, 0x18, 0x12, 0x90, 0xec, 0xcc, 0xbc, 0xaa, - 0x8a, 0x10, 0x31, 0x23, 0xc8, 0xef, 0xcb, 0x9b, 0x8a, 0x98, 0xa9, 0xca, 0xbc, 0xdb, 0xba, 0xba, - 0xbb, 0xab, 0xbb, 0xcd, 0xcb, 0xab, 0x08, 0x80, 0xda, 0xce, 0xcb, 0xab, 0xab, 0xa9, 0x89, 0x9a, - 0xaa, 0xa9, 0xca, 0xdb, 0xba, 0xba, 0xde, 0xbc, 0xad, 0x9a, 0x08, 0x20, 0x11, 0x90, 0xcb, 0xab, - 0x99, 0xaa, 0xbd, 0xac, 0xbb, 0xab, 0x19, 0x54, 0x35, 0x34, 0x33, 0x12, 0x80, 0x88, 0x32, 0x35, - 0x81, 0xcc, 0xbc, 0xaa, 0x18, 0x44, 0x35, 0x23, 0x12, 0x00, 0x10, 0x31, 0x63, 0x23, 0x90, 0xcd, - 0xac, 0x08, 0x54, 0x44, 0x23, 0x11, 0x80, 0x88, 0x00, 0x80, 0xba, 0xcd, 0xdb, 0xbb, 0xbb, 0x99, - 0x80, 0xb8, 0xed, 0xbc, 0xbd, 0x9b, 0x8a, 0x98, 0xeb, 0xcd, 0xbb, 0xac, 0xa9, 0x89, 0x88, 0x99, - 0xca, 0xba, 0xcb, 0xcb, 0xba, 0xbb, 0xbd, 0xcd, 0xba, 0xaa, 0x99, 0xa9, 0xbb, 0xcd, 0xba, 0xbb, - 0xac, 0xcb, 0xbb, 0xbc, 0xbb, 0xbd, 0xac, 0x9a, 0x99, 0x99, 0x99, 0x09, 0x20, 0x63, 0x34, 0x24, - 0x02, 0x80, 0x98, 0xa9, 0xaa, 0x51, 0x57, 0x53, 0x33, 0x33, 0x33, 0x32, 0x22, 0x53, 0x53, 0x43, - 0x43, 0x33, 0x24, 0x23, 0x43, 0x53, 0x33, 0x33, 0x43, 0x32, 0x34, 0x44, 0x34, 0x35, 0x43, 0x33, - 0x33, 0x33, 0x43, 0x34, 0x44, 0x33, 0x43, 0x22, 0x23, 0x33, 0x34, 0x33, 0x22, 0x22, 0x43, 0x44, - 0x34, 0x35, 0x24, 0x23, 0x23, 0x11, 0x11, 0x22, 0x22, 0x23, 0x11, 0xa8, 0xcb, 0xcb, 0x8a, 0x41, - 0x34, 0x12, 0x99, 0xba, 0xbc, 0x9c, 0x20, 0x81, 0xff, 0xbc, 0xbd, 0xdb, 0xbb, 0xac, 0xa9, 0xba, - 0xcc, 0xbb, 0xac, 0xab, 0xab, 0xbb, 0xdc, 0xcb, 0xcb, 0xaa, 0xbb, 0xbc, 0xab, 0xbb, 0xcc, 0xbc, - 0xbb, 0xaa, 0x9b, 0xba, 0xcb, 0xbc, 0xad, 0xbb, 0xaa, 0xba, 0x99, 0x11, 0x02, 0xc9, 0xce, 0xbb, - 0xab, 0xab, 0xab, 0xaa, 0xbc, 0xab, 0x28, 0x44, 0x53, 0x44, 0x43, 0x23, 0x00, 0x00, 0x42, 0x34, - 0x35, 0x43, 0x23, 0x34, 0x44, 0x43, 0x33, 0x33, 0x32, 0x43, 0x43, 0x42, 0x43, 0x34, 0x33, 0x33, - 0x23, 0x32, 0x45, 0x44, 0x34, 0x33, 0x22, 0x11, 0x11, 0x22, 0x42, 0x34, 0x44, 0x43, 0x33, 0x43, - 0x34, 0x34, 0x34, 0x33, 0x13, 0x11, 0x00, 0x32, 0x45, 0x34, 0x43, 0x32, 0x22, 0x32, 0x22, 0x81, - 0x88, 0xaa, 0xaa, 0x89, 0x65, 0x45, 0x34, 0x24, 0x01, 0x88, 0x89, 0x28, 0x43, 0x34, 0x33, 0x23, - 0x22, 0x33, 0x44, 0x34, 0x24, 0x32, 0x21, 0x21, 0x53, 0x54, 0x44, 0x33, 0x22, 0x01, 0x08, 0x11, - 0x42, 0x43, 0x33, 0x22, 0x34, 0x45, 0x33, 0x34, 0x32, 0x21, 0x88, 0x09, 0x73, 0x45, 0x44, 0x22, - 0x01, 0x80, 0x99, 0x89, 0x99, 0xba, 0xbd, 0xac, 0x9b, 0x20, 0x46, 0x44, 0x23, 0x01, 0xda, 0xbc, - 0xbb, 0x9a, 0xaa, 0xcb, 0xcc, 0xab, 0x9b, 0x98, 0x80, 0x99, 0xdd, 0xcd, 0xbc, 0xbc, 0xba, 0xa9, - 0x99, 0xcb, 0xbc, 0xbb, 0xab, 0x9a, 0xaa, 0xeb, 0xcc, 0xdb, 0xbc, 0xbb, 0xbb, 0xbb, 0xba, 0x9a, - 0xba, 0xaa, 0xab, 0xdb, 0xdc, 0xcc, 0xcb, 0xbb, 0xac, 0xab, 0xbb, 0xbc, 0xab, 0xbb, 0xca, 0xba, - 0x9b, 0x8a, 0x99, 0xbb, 0xbc, 0xdb, 0xcb, 0x9b, 0x89, 0x88, 0x08, 0x53, 0x45, 0x22, 0x22, 0x42, - 0x23, 0x11, 0x00, 0xca, 0xde, 0xbb, 0x8b, 0x51, 0x45, 0x33, 0x23, 0x01, 0xa9, 0xa9, 0x30, 0x55, - 0x33, 0x14, 0x12, 0x00, 0x98, 0x28, 0x54, 0x34, 0x43, 0x32, 0x43, 0x43, 0x43, 0x12, 0xd9, 0xcd, - 0xbc, 0xab, 0xab, 0xab, 0x9a, 0x89, 0xaa, 0xbc, 0xbd, 0xcc, 0xcc, 0xcb, 0xdb, 0xcb, 0xbb, 0x9a, - 0x09, 0x88, 0x98, 0xa9, 0xcc, 0xdb, 0xbb, 0xbb, 0xbb, 0xba, 0xcc, 0xcc, 0xac, 0xbb, 0xcb, 0xba, - 0xcb, 0xcb, 0xba, 0xab, 0xbb, 0xcb, 0xaa, 0xbb, 0xdb, 0xcb, 0xcb, 0xaa, 0xaa, 0x99, 0x98, 0x98, - 0x98, 0x88, 0x08, 0x10, 0x20, 0x63, 0x55, 0x44, 0x33, 0x33, 0x53, 0x63, 0x33, 0x35, 0x32, 0x22, - 0x12, 0x22, 0x43, 0x43, 0x44, 0x33, 0x34, 0x42, 0x42, 0x43, 0x34, 0x35, 0x34, 0x43, 0x22, 0x32, - 0x43, 0x43, 0x33, 0x34, 0x33, 0x43, 0x43, 0x33, 0x34, 0x34, 0x43, 0x33, 0x43, 0x33, 0x35, 0x34, - 0x34, 0x22, 0x12, 0x12, 0x21, 0x33, 0x44, 0x33, 0x32, 0x12, 0x22, 0x44, 0x34, 0x45, 0x22, 0x02, - 0x98, 0xab, 0x09, 0x42, 0x25, 0x23, 0x01, 0x99, 0xbb, 0xcd, 0xbc, 0xbc, 0xac, 0xcb, 0xcb, 0xba, - 0xa9, 0x98, 0xba, 0xdd, 0xbc, 0xac, 0xab, 0xba, 0xcc, 0xdb, 0xcb, 0xba, 0xbb, 0xab, 0xaa, 0xbb, - 0xcc, 0xcb, 0xbb, 0xbb, 0x89, 0x89, 0xda, 0xdc, 0xbc, 0xab, 0x9b, 0x9a, 0x88, 0x98, 0xa8, 0xca, - 0xcb, 0xcb, 0xba, 0xcb, 0xcc, 0xcb, 0xab, 0x19, 0x52, 0x33, 0x33, 0x11, 0x98, 0x9a, 0x08, 0x43, - 0x43, 0x34, 0x33, 0x44, 0x63, 0x34, 0x35, 0x33, 0x23, 0x11, 0x20, 0x42, 0x45, 0x44, 0x32, 0x23, - 0x13, 0x32, 0x32, 0x44, 0x33, 0x43, 0x23, 0x22, 0x53, 0x34, 0x35, 0x33, 0x22, 0x22, 0x31, 0x45, - 0x44, 0x43, 0x43, 0x32, 0x32, 0x22, 0x33, 0x43, 0x33, 0x23, 0x22, 0x32, 0x63, 0x34, 0x44, 0x23, - 0x22, 0x10, 0x00, 0x11, 0x21, 0x52, 0x53, 0x33, 0x34, 0x24, 0x23, 0x13, 0x80, 0xa9, 0xa9, 0x18, - 0x54, 0x44, 0x44, 0x43, 0x33, 0x34, 0x33, 0x33, 0x22, 0x32, 0x12, 0x22, 0x21, 0x33, 0x32, 0x43, - 0x73, 0x46, 0x44, 0x34, 0x43, 0x12, 0x01, 0x00, 0x00, 0x31, 0x43, 0x33, 0x43, 0x23, 0x34, 0x45, - 0x43, 0x24, 0x12, 0x80, 0xb9, 0xbc, 0x9a, 0x10, 0x44, 0x43, 0x33, 0x22, 0x12, 0x11, 0x11, 0x01, - 0xc9, 0xde, 0xcc, 0xcb, 0xbb, 0xac, 0xac, 0xbb, 0xba, 0x9a, 0x80, 0x01, 0xa8, 0xcf, 0xcd, 0xbd, - 0xbc, 0xbb, 0xbb, 0xbb, 0xcb, 0xbb, 0xcb, 0xcb, 0xba, 0xbb, 0xbc, 0xcc, 0xcb, 0xac, 0xbb, 0xab, - 0xcb, 0xba, 0xbd, 0xbb, 0xbc, 0xbb, 0xbc, 0xbc, 0xbc, 0xbb, 0xbc, 0xcb, 0xcb, 0xbc, 0xcb, 0xbb, - 0xbb, 0xab, 0x89, 0x00, 0x01, 0x98, 0xca, 0xbc, 0xbc, 0xcb, 0xbc, 0xbc, 0xaa, 0x18, 0x42, 0x34, - 0x34, 0x32, 0x11, 0x98, 0xbb, 0xbb, 0x9a, 0x00, 0xc8, 0xbe, 0xab, 0x61, 0x45, 0x33, 0x24, 0x23, - 0x23, 0x11, 0x11, 0x73, 0x63, 0x32, 0x22, 0x80, 0x89, 0x41, 0x46, 0x33, 0x22, 0x11, 0x21, 0x32, - 0x33, 0x03, 0xfa, 0xdc, 0xcc, 0xcb, 0xab, 0xaa, 0x89, 0xba, 0xce, 0xbc, 0xbb, 0xab, 0x89, 0x99, - 0xdb, 0xbc, 0xbd, 0xbb, 0xbb, 0xaa, 0x99, 0xbb, 0xce, 0xbc, 0xbc, 0xac, 0xba, 0xdb, 0xbb, 0xcb, - 0xab, 0xab, 0xba, 0xcb, 0xdb, 0xba, 0xbc, 0xbb, 0xbc, 0xbb, 0xbc, 0xcc, 0xcb, 0xab, 0xaa, 0x08, - 0x80, 0xa9, 0xcb, 0xbb, 0x9a, 0x42, 0x45, 0x34, 0x33, 0x22, 0x00, 0x00, 0x21, 0x53, 0x33, 0x11, - 0x00, 0x10, 0x75, 0x54, 0x43, 0x24, 0x23, 0x22, 0x23, 0x53, 0x43, 0x43, 0x43, 0x32, 0x33, 0x34, - 0x35, 0x44, 0x32, 0x23, 0x32, 0x32, 0x44, 0x53, 0x34, 0x43, 0x32, 0x23, 0x33, 0x53, 0x43, 0x43, - 0x33, 0x33, 0x33, 0x43, 0x32, 0x43, 0x32, 0x33, 0x24, 0x33, 0x35, 0x36, 0x34, 0x34, 0x23, 0x11, - 0x00, 0x88, 0x88, 0x88, 0x08, 0x20, 0x44, 0x44, 0x43, 0x23, 0x12, 0xa8, 0xdc, 0xbc, 0xbc, 0x9a, - 0x99, 0x98, 0xa9, 0xba, 0xbc, 0xbe, 0xbd, 0xbd, 0xbc, 0xcb, 0xbb, 0xba, 0xac, 0xbb, 0xcb, 0xcb, - 0xbb, 0xcb, 0xbb, 0xbb, 0xbd, 0xbb, 0xcb, 0xba, 0xbb, 0xdc, 0xcb, 0xbb, 0xbc, 0xba, 0xaa, 0xaa, - 0xba, 0xac, 0xac, 0xcb, 0xba, 0xcb, 0xbb, 0xad, 0xac, 0x9a, 0x88, 0x22, 0x33, 0x12, 0xa8, 0xcc, - 0xac, 0x9b, 0x09, 0x43, 0x35, 0x35, 0x43, 0x43, 0x34, 0x34, 0x33, 0x43, 0x22, 0x32, 0x34, 0x34, - 0x44, 0x32, 0x43, 0x32, 0x23, 0x33, 0x44, 0x33, 0x33, 0x33, 0x43, 0x44, 0x63, 0x43, 0x43, 0x33, - 0x43, 0x33, 0x34, 0x33, 0x43, 0x32, 0x22, 0x11, 0x21, 0x53, 0x54, 0x34, 0x34, 0x33, 0x32, 0x33, - 0x23, 0x12, 0x02, 0x21, 0x31, 0x44, 0x32, 0x33, 0x53, 0x42, 0x32, 0x34, 0x34, 0x35, 0x32, 0x23, - 0x02, 0x10, 0x41, 0x44, 0x44, 0x32, 0x24, 0x33, 0x33, 0x43, 0x24, 0x24, 0x12, 0x81, 0x88, 0x0a, - 0x61, 0x54, 0x53, 0x32, 0x43, 0x32, 0x33, 0x33, 0x33, 0x33, 0x22, 0x00, 0x88, 0x30, 0x57, 0x35, - 0x34, 0x32, 0x21, 0x22, 0x53, 0x43, 0x24, 0x23, 0x23, 0x11, 0x98, 0xba, 0xac, 0x8a, 0x21, 0x43, - 0x34, 0x35, 0x45, 0x22, 0x81, 0xda, 0xcc, 0xbb, 0xbb, 0xcb, 0xba, 0xac, 0xab, 0xba, 0xaa, 0xcb, - 0xcd, 0xcd, 0xcc, 0xdb, 0xbb, 0xac, 0x9a, 0x9a, 0xa9, 0xba, 0xbb, 0xbc, 0xbb, 0xbc, 0xdb, 0xdb, - 0xcb, 0xcb, 0xcb, 0xba, 0xba, 0xbc, 0xcb, 0xac, 0xbb, 0xba, 0xba, 0xbc, 0xcc, 0xdb, 0xbb, 0xcb, - 0xaa, 0xaa, 0xaa, 0xcb, 0xbc, 0xbc, 0xaa, 0x99, 0x00, 0x00, 0x98, 0xdb, 0xbc, 0xbc, 0x9a, 0x08, - 0x01, 0x98, 0xeb, 0xba, 0x09, 0x51, 0x43, 0x22, 0x80, 0xa9, 0xaa, 0xaa, 0x09, 0x31, 0x23, 0x91, - 0x9a, 0x73, 0x77, 0x34, 0x24, 0x02, 0x80, 0x09, 0x52, 0x45, 0x34, 0x33, 0x23, 0x12, 0x21, 0x31, - 0x53, 0x23, 0x02, 0xfb, 0xcc, 0xbb, 0x9b, 0x89, 0x90, 0xb9, 0xdd, 0xcb, 0xac, 0xbb, 0xaa, 0x99, - 0xaa, 0xcb, 0xbc, 0xbc, 0xbc, 0xbc, 0xcd, 0xcc, 0xba, 0xba, 0xa9, 0xa9, 0xa9, 0xba, 0xca, 0xcb, - 0xcb, 0xbc, 0xbc, 0xbc, 0xbc, 0xdb, 0xba, 0xcb, 0xbb, 0xcc, 0xba, 0xab, 0xbb, 0xaa, 0xba, 0xaa, - 0xbb, 0xbb, 0xaa, 0xbb, 0xcd, 0xcb, 0xab, 0x9a, 0x08, 0x42, 0x34, 0x24, 0x01, 0xa9, 0xcc, 0xab, - 0x08, 0x31, 0x54, 0x63, 0x44, 0x53, 0x43, 0x23, 0x32, 0x21, 0x01, 0x11, 0x31, 0x44, 0x45, 0x53, - 0x33, 0x43, 0x43, 0x33, 0x34, 0x34, 0x32, 0x43, 0x33, 0x53, 0x33, 0x35, 0x43, 0x33, 0x24, 0x23, - 0x43, 0x42, 0x33, 0x53, 0x32, 0x24, 0x33, 0x24, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x35, 0x43, - 0x33, 0x22, 0x00, 0x08, 0x10, 0x32, 0x34, 0x34, 0x43, 0x43, 0x34, 0x33, 0x33, 0x12, 0x98, 0xdc, - 0xcc, 0xab, 0x9a, 0x08, 0x88, 0xb8, 0xbd, 0xbd, 0xcc, 0xcb, 0xcc, 0xbb, 0xbb, 0xac, 0xbb, 0xba, - 0xbb, 0xcb, 0xcb, 0xbc, 0xbc, 0xbb, 0xbb, 0xcd, 0xcb, 0xbc, 0xbb, 0xbb, 0xaa, 0xaa, 0xba, 0xba, - 0xcc, 0xdb, 0xbb, 0xbc, 0xac, 0xbb, 0xbc, 0xbb, 0xaa, 0x8a, 0x88, 0xa8, 0xdb, 0xcc, 0xac, 0xab, - 0xab, 0xaa, 0x99, 0x08, 0x31, 0x64, 0x53, 0x34, 0x43, 0x32, 0x23, 0x23, 0x33, 0x43, 0x33, 0x32, - 0x43, 0x43, 0x53, 0x44, 0x43, 0x34, 0x24, 0x33, 0x33, 0x34, 0x33, 0x43, 0x22, 0x22, 0x43, 0x44, - 0x44, 0x53, 0x33, 0x33, 0x33, 0x33, 0x43, 0x42, 0x33, 0x35, 0x43, 0x33, 0x43, 0x43, 0x34, 0x32, - 0x24, 0x22, 0x12, 0x12, 0x22, 0x32, 0x24, 0x33, 0x23, 0x32, 0x44, 0x45, 0x34, 0x34, 0x22, 0x23, - 0x22, 0x33, 0x34, 0x23, 0x12, 0x98, 0xaa, 0x8a, 0x73, 0x47, 0x53, 0x33, 0x23, 0x11, 0x11, 0x21, - 0x33, 0x35, 0x33, 0x22, 0x12, 0x31, 0x64, 0x54, 0x43, 0x33, 0x22, 0x12, 0x11, 0x22, 0x43, 0x24, - 0x23, 0x34, 0x43, 0x44, 0x43, 0x34, 0x43, 0x22, 0x11, 0x00, 0x10, 0x31, 0x43, 0x23, 0x80, 0x9a, - 0x18, 0x54, 0x36, 0x24, 0x23, 0x01, 0x80, 0x80, 0x88, 0x88, 0xca, 0xde, 0xbd, 0xbd, 0xcb, 0xaa, - 0xba, 0xba, 0xcb, 0xcb, 0xbb, 0xbc, 0xbd, 0xcc, 0xcb, 0xbb, 0xcb, 0xba, 0xbb, 0xbc, 0xcb, 0xbb, - 0xcc, 0xbb, 0xbc, 0xcb, 0xdb, 0xbb, 0xbc, 0xbb, 0xac, 0xbb, 0xbc, 0xcb, 0xcb, 0xbb, 0xbc, 0xbc, - 0xbc, 0xbb, 0xcb, 0xba, 0xaa, 0xba, 0xbb, 0xbd, 0xcb, 0xcb, 0xab, 0xbb, 0xbb, 0xbb, 0xac, 0xaa, - 0x9a, 0x89, 0x89, 0xb9, 0xce, 0xcc, 0xab, 0x9b, 0x09, 0x10, 0x11, 0x81, 0xa9, 0xcb, 0xbb, 0xab, - 0x8b, 0x63, 0x35, 0x34, 0x45, 0x44, 0x44, 0x43, 0x23, 0x23, 0x32, 0x34, 0x44, 0x32, 0x23, 0x11, - 0x80, 0xa9, 0xdb, 0xbb, 0x8a, 0x18, 0x41, 0x44, 0x44, 0x33, 0x03, 0xda, 0xcf, 0xcb, 0xcb, 0xaa, - 0x9a, 0xaa, 0xa9, 0xaa, 0xbb, 0xbb, 0xcd, 0xdb, 0xbc, 0xbd, 0xbc, 0xbb, 0xaa, 0x88, 0x08, 0xa8, - 0xeb, 0xcc, 0xcb, 0xbc, 0xbc, 0xbb, 0xbc, 0xac, 0xab, 0xbb, 0xba, 0xba, 0xbb, 0xcc, 0xcb, 0xab, - 0xbb, 0xab, 0xbc, 0xdb, 0xbb, 0xad, 0xbb, 0xaa, 0x99, 0x99, 0x98, 0x08, 0x10, 0x31, 0x34, 0x33, - 0x80, 0xdb, 0xbc, 0x8a, 0x31, 0x57, 0x34, 0x35, 0x43, 0x32, 0x43, 0x32, 0x43, 0x33, 0x34, 0x35, - 0x34, 0x44, 0x33, 0x44, 0x32, 0x24, 0x24, 0x23, 0x24, 0x33, 0x24, 0x43, 0x33, 0x53, 0x33, 0x35, - 0x43, 0x33, 0x43, 0x43, 0x42, 0x32, 0x32, 0x33, 0x33, 0x44, 0x42, 0x33, 0x34, 0x34, 0x33, 0x24, - 0x32, 0x32, 0x43, 0x43, 0x33, 0x24, 0x33, 0x43, 0x43, 0x33, 0x34, 0x33, 0x12, 0x01, 0x80, 0x88, - 0x11, 0x12, 0x02, 0xb9, 0xce, 0xac, 0xac, 0xbb, 0xbd, 0xcc, 0xbc, 0xbc, 0xcb, 0xbb, 0xcb, 0xcb, - 0xbb, 0xbc, 0xcb, 0xab, 0xab, 0xcb, 0xcc, 0xcc, 0xcb, 0xbb, 0xac, 0xaa, 0xa9, 0xaa, 0xbb, 0xbc, - 0xcb, 0xcb, 0xba, 0xcb, 0xcb, 0xdb, 0xbb, 0xbc, 0xba, 0xaa, 0xa9, 0xaa, 0xcb, 0xcb, 0xba, 0xbb, - 0xab, 0x9a, 0xa9, 0xa9, 0xab, 0x9a, 0x18, 0x31, 0x43, 0x54, 0x43, 0x35, 0x45, 0x33, 0x33, 0x23, - 0x22, 0x33, 0x53, 0x44, 0x44, 0x43, 0x43, 0x42, 0x32, 0x24, 0x24, 0x33, 0x33, 0x23, 0x43, 0x32, - 0x44, 0x43, 0x34, 0x35, 0x43, 0x24, 0x33, 0x24, 0x33, 0x32, 0x43, 0x32, 0x33, 0x34, 0x43, 0x33, - 0x35, 0x43, 0x34, 0x33, 0x43, 0x32, 0x22, 0x21, 0x22, 0x43, 0x34, 0x24, 0x24, 0x32, 0x24, 0x43, - 0x32, 0x22, 0x33, 0x32, 0x24, 0x32, 0x43, 0x43, 0x43, 0x34, 0x24, 0x43, 0x43, 0x34, 0x33, 0x34, - 0x33, 0x24, 0x33, 0x33, 0x32, 0x33, 0x43, 0x53, 0x53, 0x43, 0x43, 0x34, 0x43, 0x33, 0x24, 0x33, - 0x24, 0x33, 0x33, 0x24, 0x43, 0x43, 0x34, 0x34, 0x23, 0x33, 0x32, 0x43, 0x24, 0x24, 0x33, 0x53, - 0x33, 0x43, 0x24, 0x24, 0x33, 0x23, 0x80, 0xba, 0xbe, 0xac, 0xaa, 0x99, 0x99, 0xaa, 0xaa, 0xcb, - 0xba, 0xcc, 0xcd, 0xbd, 0xcc, 0xbb, 0xac, 0xab, 0xbb, 0xcb, 0xbd, 0xcc, 0xcb, 0xbb, 0xac, 0xbb, - 0xdb, 0xca, 0xba, 0xbc, 0xbb, 0xcb, 0xbb, 0xbd, 0xcb, 0xcb, 0xcb, 0xca, 0xba, 0xbb, 0xbc, 0xbc, - 0xcb, 0xbb, 0xba, 0xbb, 0xcb, 0xbb, 0xcb, 0xbb, 0xbd, 0xcb, 0xbc, 0xac, 0xbb, 0xab, 0xba, 0x99, - 0x99, 0x88, 0xa9, 0xcc, 0xcc, 0xbc, 0xbc, 0xcb, 0xab, 0x9b, 0x99, 0x00, 0x22, 0x32, 0x32, 0x22, - 0x21, 0x11, 0x11, 0x43, 0x35, 0x45, 0x45, 0x53, 0x34, 0x33, 0x24, 0x13, 0x12, 0x22, 0x42, 0x24, - 0x23, 0x12, 0x01, 0x00, 0x18, 0x52, 0x55, 0x53, 0x33, 0x23, 0x80, 0xb9, 0xcc, 0xcc, 0xbc, 0xcd, - 0xbb, 0xcb, 0x9a, 0x89, 0x10, 0x10, 0x80, 0xb9, 0xce, 0xcc, 0xbb, 0xbc, 0xbc, 0xbc, 0xbc, 0xcb, - 0xba, 0xaa, 0xba, 0xcb, 0xbc, 0xbd, 0xbc, 0xcb, 0xcb, 0xba, 0xcb, 0xbb, 0xac, 0xbb, 0xbb, 0xbb, - 0xcb, 0xcb, 0xbc, 0xbc, 0xcb, 0xab, 0xab, 0xba, 0xaa, 0xbb, 0xbb, 0xbb, 0xaa, 0x99, 0xa9, 0xdc, - 0xcc, 0xbc, 0xab, 0x8a, 0x10, 0x33, 0x34, 0x33, 0x33, 0x54, 0x63, 0x53, 0x43, 0x33, 0x24, 0x43, - 0x32, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x43, 0x33, 0x25, 0x24, 0x33, 0x43, 0x43, 0x43, 0x43, - 0x32, 0x34, 0x33, 0x44, 0x32, 0x33, 0x34, 0x33, 0x43, 0x33, 0x44, 0x33, 0x35, 0x43, 0x32, 0x33, - 0x24, 0x23, 0x33, 0x34, 0x43, 0x43, 0x43, 0x43, 0x32, 0x43, 0x32, 0x33, 0x43, 0x32, 0x22, 0x12, - 0x12, 0x11, 0x00, 0x00, 0x22, 0x33, 0x13, 0x80, 0xca, 0xbc, 0xcc, 0xcc, 0xbd, 0xcc, 0xbc, 0xbc, - 0xcc, 0xba, 0xac, 0xba, 0xab, 0xbc, 0xbb, 0xbc, 0xbc, 0xdb, 0xbb, 0xbd, 0xbb, 0xbc, 0xbb, 0xdb, - 0xba, 0xbb, 0xbc, 0xba, 0xbc, 0xcb, 0xbc, 0xbc, 0xdb, 0xbb, 0xcb, 0xba, 0xaa, 0xab, 0xaa, 0xaa, - 0xa9, 0xba, 0xca, 0xbc, 0xbd, 0xac, 0xbb, 0xab, 0x9a, 0x08, 0x00, 0x20, 0x32, 0x36, 0x44, 0x43, - 0x23, 0x13, 0x22, 0x22, 0x53, 0x43, 0x34, 0x34, 0x33, 0x43, 0x53, 0x53, 0x43, 0x43, 0x23, 0x33, - 0x24, 0x43, 0x43, 0x34, 0x43, 0x43, 0x32, 0x43, 0x43, 0x34, 0x43, 0x33, 0x23, 0x33, 0x43, 0x33, - 0x34, 0x34, 0x43, 0x43, 0x32, 0x34, 0x34, 0x43, 0x24, 0x23, 0x22, 0x21, 0x11, 0x22, 0x33, 0x34, - 0x44, 0x33, 0x34, 0x43, 0x22, 0x33, 0x33, 0x44, 0x33, 0x43, 0x34, 0x53, 0x32, 0x33, 0x22, 0x23, - 0x33, 0x34, 0x34, 0x53, 0x33, 0x35, 0x25, 0x43, 0x32, 0x32, 0x43, 0x33, 0x34, 0x43, 0x43, 0x43, - 0x42, 0x22, 0x33, 0x33, 0x34, 0x33, 0x33, 0x34, 0x44, 0x44, 0x34, 0x43, 0x23, 0x23, 0x22, 0x22, - 0x32, 0x44, 0x44, 0x33, 0x24, 0x13, 0x12, 0x22, 0x22, 0x12, 0x11, 0x88, 0x88, 0x42, 0x46, 0x44, - 0x23, 0x80, 0xfb, 0xcc, 0xbc, 0xbb, 0xac, 0x9a, 0x9a, 0x99, 0x98, 0x98, 0x99, 0xcc, 0xcd, 0xcd, - 0xcb, 0xac, 0xbb, 0xaa, 0x9a, 0xaa, 0xbb, 0xbd, 0xcc, 0xbb, 0xcb, 0xac, 0xac, 0xbc, 0xcb, 0xcb, - 0xbb, 0xac, 0xbb, 0xbc, 0xcb, 0xbb, 0xbb, 0xac, 0xba, 0xca, 0xca, 0xbb, 0xad, 0xbb, 0xbb, 0x9a, - 0xaa, 0xca, 0xcb, 0xbc, 0xac, 0xba, 0xba, 0xbc, 0xcc, 0xcb, 0xbb, 0xbb, 0x9b, 0x88, 0x21, 0x23, - 0x11, 0x98, 0x89, 0x88, 0x99, 0xea, 0xdc, 0xcb, 0xab, 0x99, 0x10, 0x54, 0x36, 0x45, 0x43, 0x33, - 0x33, 0x33, 0x13, 0x11, 0x00, 0x21, 0x45, 0x44, 0x33, 0x22, 0x01, 0x88, 0xbb, 0xbe, 0xbd, 0xbc, - 0xab, 0xbb, 0xaa, 0x89, 0x00, 0x22, 0x13, 0xc9, 0xcf, 0xbd, 0xbd, 0xac, 0xac, 0xab, 0xba, 0xa9, - 0xaa, 0xdb, 0xdb, 0xbc, 0xcb, 0xac, 0xcb, 0xbb, 0xbc, 0xbd, 0xcb, 0xbb, 0xac, 0xbb, 0xba, 0xcb, - 0xcb, 0xbb, 0xbd, 0xbb, 0xbc, 0xac, 0xbb, 0xab, 0xbb, 0xba, 0xaa, 0xab, 0xbc, 0xbc, 0xbc, 0xbc, - 0xcb, 0xcb, 0xcb, 0xaa, 0xaa, 0x08, 0x20, 0x32, 0x24, 0x11, 0x80, 0x88, 0x10, 0x31, 0x44, 0x34, - 0x63, 0x44, 0x44, 0x34, 0x34, 0x43, 0x23, 0x43, 0x32, 0x43, 0x43, 0x43, 0x24, 0x24, 0x43, 0x43, - 0x43, 0x34, 0x33, 0x34, 0x33, 0x43, 0x43, 0x33, 0x34, 0x33, 0x24, 0x33, 0x33, 0x35, 0x44, 0x43, - 0x33, 0x34, 0x33, 0x34, 0x43, 0x32, 0x33, 0x33, 0x33, 0x33, 0x45, 0x43, 0x34, 0x24, 0x33, 0x23, - 0x22, 0x23, 0x43, 0x43, 0x22, 0x22, 0x22, 0x42, 0x34, 0x44, 0x32, 0x11, 0x90, 0xca, 0xcc, 0xdb, - 0xba, 0xbc, 0xbb, 0xcc, 0xbb, 0xab, 0xab, 0xaa, 0xb9, 0xca, 0xcb, 0xdb, 0xbb, 0xbd, 0xbd, 0xbc, - 0xdb, 0xba, 0xbb, 0xbb, 0xac, 0xbb, 0xcb, 0xbb, 0xbc, 0xbb, 0xbd, 0xcb, 0xdb, 0xbb, 0xbc, 0xac, - 0xbb, 0xbb, 0xba, 0xbb, 0xba, 0xba, 0xcb, 0xcb, 0xdb, 0xbb, 0xbb, 0xab, 0x88, 0x21, 0x33, 0x34, - 0x33, 0x23, 0x33, 0x44, 0x43, 0x12, 0x90, 0xa9, 0x09, 0x65, 0x45, 0x43, 0x33, 0x23, 0x23, 0x34, - 0x44, 0x44, 0x43, 0x43, 0x32, 0x23, 0x23, 0x34, 0x43, 0x43, 0x43, 0x42, 0x42, 0x43, 0x43, 0x43, - 0x33, 0x33, 0x32, 0x33, 0x24, 0x34, 0x53, 0x43, 0x33, 0x43, 0x22, 0x33, 0x33, 0x24, 0x23, 0x33, - 0x53, 0x33, 0x35, 0x44, 0x33, 0x34, 0x22, 0x12, 0x00, 0x00, 0x31, 0x44, 0x43, 0x24, 0x24, 0x23, - 0x33, 0x22, 0x12, 0x11, 0x11, 0x42, 0x46, 0x44, 0x53, 0x33, 0x33, 0x22, 0x12, 0x10, 0x21, 0x43, - 0x34, 0x34, 0x44, 0x42, 0x42, 0x32, 0x43, 0x32, 0x24, 0x22, 0x11, 0x11, 0x22, 0x34, 0x44, 0x43, - 0x34, 0x53, 0x33, 0x44, 0x32, 0x43, 0x32, 0x33, 0x22, 0x22, 0x11, 0x01, 0x21, 0x32, 0x25, 0x43, - 0x33, 0x34, 0x33, 0x11, 0xa8, 0xdc, 0xbd, 0xcb, 0xcb, 0xba, 0xdb, 0xbc, 0xbd, 0xbd, 0xbb, 0xba, - 0xab, 0xaa, 0xcb, 0xdc, 0xcb, 0xcb, 0xcb, 0xba, 0xba, 0xbb, 0xbc, 0xbd, 0xcc, 0xcb, 0xcb, 0xcb, - 0xdb, 0xca, 0xba, 0xbb, 0xbb, 0xbb, 0xab, 0xbb, 0xbb, 0xcc, 0xcb, 0xcc, 0xcb, 0xcb, 0xbb, 0xcb, - 0xba, 0xaa, 0xba, 0xba, 0xcb, 0xcb, 0xcb, 0xbb, 0xbb, 0xcb, 0xcb, 0xbb, 0xbb, 0xba, 0x9a, 0x9a, - 0xba, 0xdc, 0xcc, 0xcb, 0xbb, 0xbc, 0xba, 0xa9, 0xaa, 0x99, 0x11, 0x45, 0x35, 0x34, 0x33, 0x33, - 0x33, 0x43, 0x34, 0x44, 0x32, 0x33, 0x33, 0x34, 0x44, 0x44, 0x34, 0x32, 0x11, 0x88, 0xba, 0xab, - 0xaa, 0xa9, 0xaa, 0xac, 0x9b, 0x09, 0x42, 0x36, 0x33, 0xc0, 0xde, 0xcd, 0xcb, 0xba, 0xab, 0xa9, - 0x99, 0x9a, 0xba, 0xbb, 0xcd, 0xbc, 0xce, 0xdb, 0xcb, 0xbb, 0xac, 0xbb, 0xaa, 0xba, 0xca, 0xcb, - 0xdb, 0xbb, 0xbc, 0xbc, 0xac, 0xcb, 0xbb, 0xbb, 0xbc, 0xca, 0xaa, 0xab, 0xbb, 0xbb, 0xcb, 0xcb, - 0xbb, 0xdb, 0xbb, 0xbc, 0xbc, 0xbb, 0xac, 0xaa, 0x99, 0x88, 0x10, 0x22, 0x33, 0x23, 0x11, 0xb9, - 0xdb, 0xab, 0x9b, 0x28, 0x65, 0x45, 0x44, 0x43, 0x34, 0x33, 0x34, 0x34, 0x42, 0x33, 0x53, 0x43, - 0x43, 0x33, 0x53, 0x33, 0x44, 0x33, 0x43, 0x24, 0x32, 0x33, 0x34, 0x43, 0x43, 0x43, 0x43, 0x33, - 0x34, 0x33, 0x25, 0x24, 0x33, 0x24, 0x33, 0x32, 0x24, 0x33, 0x24, 0x24, 0x33, 0x34, 0x24, 0x24, - 0x43, 0x42, 0x33, 0x43, 0x32, 0x23, 0x23, 0x23, 0x33, 0x23, 0x33, 0x24, 0x23, 0x33, 0x32, 0x33, - 0x33, 0xb0, 0xde, 0xcc, 0xbc, 0xab, 0xbb, 0xbb, 0xbd, 0xbd, 0xbc, 0xbc, 0xcb, 0xcb, 0xcb, 0xbb, - 0xbc, 0xcb, 0xbb, 0xbb, 0xcb, 0xcb, 0xbc, 0xbd, 0xcb, 0xac, 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xcb, - 0xbc, 0xca, 0xba, 0xbb, 0xcb, 0xcb, 0xba, 0xbb, 0xbb, 0xba, 0xca, 0xba, 0xcc, 0xba, 0xac, 0xaa, - 0xa9, 0x88, 0x88, 0x88, 0xa9, 0xaa, 0xab, 0x99, 0x30, 0x55, 0x44, 0x34, 0x35, 0x33, 0x24, 0x22, - 0x21, 0x22, 0x43, 0x44, 0x53, 0x34, 0x53, 0x33, 0x34, 0x43, 0x33, 0x43, 0x33, 0x43, 0x32, 0x34, - 0x53, 0x43, 0x43, 0x34, 0x33, 0x25, 0x33, 0x33, 0x43, 0x33, 0x33, 0x34, 0x43, 0x33, 0x34, 0x34, - 0x34, 0x34, 0x43, 0x23, 0x33, 0x33, 0x22, 0x22, 0x33, 0x34, 0x45, 0x33, 0x24, 0x24, 0x33, 0x24, - 0x23, 0x32, 0x32, 0x33, 0x43, 0x32, 0x43, 0x34, 0x44, 0x43, 0x43, 0x33, 0x34, 0x34, 0x43, 0x33, - 0x43, 0x32, 0x24, 0x32, 0x12, 0x32, 0x32, 0x35, 0x35, 0x34, 0x34, 0x34, 0x34, 0x33, 0x34, 0x33, - 0x24, 0x33, 0x24, 0x43, 0x33, 0x35, 0x34, 0x43, 0x32, 0x22, 0x22, 0x33, 0x35, 0x33, 0x34, 0x34, - 0x34, 0x43, 0x34, 0x33, 0x33, 0x13, 0x98, 0xcc, 0xbd, 0xba, 0xaa, 0x9a, 0xaa, 0xa9, 0xab, 0xab, - 0xbb, 0xdd, 0xdc, 0xbd, 0xbc, 0xbc, 0xac, 0xab, 0xbb, 0xbc, 0xbd, 0xcc, 0xcb, 0xbb, 0xcb, 0xbb, - 0xbc, 0xcb, 0xbc, 0xbb, 0xcb, 0xcb, 0xca, 0xba, 0xbc, 0xbc, 0xac, 0xcb, 0xbb, 0xcb, 0xcb, 0xbb, - 0xbc, 0xbb, 0xbb, 0xbb, 0xcb, 0xcb, 0xab, 0xbc, 0xcb, 0xcb, 0xbc, 0x7c, 0x02, 0x00, 0x22, 0x56, - 0xf7, 0x02, 0x01, 0x00, 0xe9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x00, 0xa8, 0x9a, 0xa0, 0x2d, - 0xfc, 0xf4, 0x9f, 0x16, 0x80, 0xa0, 0xaa, 0x19, 0x35, 0x80, 0xab, 0x10, 0x12, 0xcc, 0x71, 0x84, - 0x9c, 0x10, 0x00, 0x93, 0x29, 0xfd, 0x41, 0xbb, 0x47, 0x9a, 0x98, 0x40, 0xa0, 0x0a, 0x43, 0xa0, - 0x9e, 0x32, 0x98, 0xa4, 0x1f, 0xa3, 0x28, 0xc1, 0x1b, 0x14, 0x90, 0x9a, 0x11, 0xb0, 0x2a, 0x14, - 0xaa, 0x10, 0xa8, 0xad, 0x20, 0x13, 0xa9, 0x9a, 0x39, 0xa4, 0x9d, 0x52, 0xd8, 0x9a, 0x10, 0x14, - 0xdc, 0x08, 0x80, 0x80, 0x88, 0x08, 0x88, 0x88, 0x89, 0x88, 0x88, 0x89, 0x88, 0x08, 0x08, 0x00, - 0x11, 0x11, 0x31, 0x32, 0x21, 0x32, 0x52, 0xd3, 0x77, 0x77, 0xf2, 0x1a, 0x33, 0x82, 0xbc, 0x21, - 0x42, 0xa1, 0x19, 0x12, 0xa8, 0x51, 0x92, 0x62, 0x92, 0x88, 0x00, 0x08, 0x32, 0x45, 0x04, 0xbd, - 0x52, 0x01, 0x88, 0x0b, 0x24, 0x08, 0x88, 0x18, 0x11, 0x80, 0x88, 0x10, 0x80, 0x88, 0x89, 0x99, - 0xa9, 0xbb, 0xbc, 0xcb, 0xbc, 0xbc, 0xdb, 0x8b, 0xff, 0x2b, 0x10, 0xf8, 0x0f, 0x92, 0x2a, 0xb1, - 0xab, 0x8c, 0x02, 0xac, 0x01, 0x9a, 0xfb, 0x0a, 0x02, 0xab, 0x19, 0xf0, 0x8d, 0x20, 0xb1, 0x9d, - 0x08, 0x02, 0xcc, 0x10, 0x9a, 0x11, 0xcd, 0x42, 0xa0, 0xbb, 0x1a, 0x15, 0x89, 0xaa, 0x18, 0x10, - 0x81, 0x9d, 0x91, 0x0a, 0x11, 0x10, 0x10, 0x11, 0x11, 0x12, 0x22, 0x33, 0x44, 0x33, 0x34, 0x35, - 0x43, 0x34, 0x43, 0x43, 0x33, 0x34, 0x43, 0x43, 0x43, 0x21, 0x23, 0x77, 0xa0, 0x51, 0x02, 0x08, - 0x12, 0x31, 0x18, 0x37, 0x0b, 0x35, 0x00, 0x1a, 0x15, 0x1a, 0x37, 0x98, 0x9b, 0x54, 0x82, 0x89, - 0x31, 0x13, 0xcb, 0x21, 0x22, 0x83, 0x29, 0xd2, 0x71, 0xb3, 0x19, 0x82, 0x31, 0xcb, 0x62, 0x01, - 0xc9, 0x2c, 0x06, 0x99, 0x9a, 0x36, 0xaa, 0x09, 0x08, 0x90, 0x29, 0x80, 0x90, 0xbf, 0x42, 0x89, - 0xa2, 0x8f, 0xb2, 0x2a, 0xa2, 0x0c, 0x00, 0xa0, 0x8e, 0x02, 0x9d, 0x92, 0x1b, 0xb3, 0xac, 0x8c, - 0x05, 0x9b, 0xb0, 0x8a, 0x00, 0xba, 0xd9, 0x2c, 0xb2, 0x0d, 0xc9, 0x1a, 0x04, 0xbc, 0x88, 0x19, - 0xf8, 0x1b, 0x81, 0x99, 0xbe, 0x10, 0x11, 0xdb, 0x21, 0xba, 0xda, 0x61, 0xd8, 0x8a, 0x00, 0x10, - 0xb1, 0x8b, 0x90, 0xba, 0x4b, 0xf1, 0x39, 0xd8, 0x98, 0x5a, 0x93, 0xcb, 0x19, 0x92, 0x90, 0x1c, - 0xb3, 0x1c, 0xbc, 0x05, 0x0d, 0x13, 0xb8, 0x8e, 0x23, 0x81, 0xdb, 0x09, 0x11, 0x88, 0x91, 0x1e, - 0x03, 0x8b, 0xb0, 0x68, 0xc9, 0x41, 0x00, 0xa8, 0xaa, 0x0d, 0x33, 0x12, 0x89, 0xdf, 0x50, 0xa1, - 0x98, 0x2a, 0x16, 0x8a, 0xa8, 0x19, 0x31, 0x84, 0xcb, 0x1a, 0x35, 0x98, 0x19, 0x11, 0xca, 0x40, - 0x12, 0x15, 0xaa, 0xd9, 0x79, 0x04, 0x98, 0x8a, 0x43, 0x81, 0x90, 0x1a, 0x24, 0x82, 0x89, 0x41, - 0x03, 0x72, 0xa0, 0x09, 0x73, 0x83, 0x0b, 0x23, 0x18, 0x22, 0x44, 0xc0, 0x39, 0x34, 0x33, 0xa9, - 0x42, 0x81, 0x34, 0x28, 0x17, 0x3b, 0x94, 0x51, 0x90, 0x12, 0x19, 0x04, 0x30, 0x17, 0x9a, 0x82, - 0x5b, 0x07, 0xa8, 0x1a, 0x26, 0x89, 0x9a, 0x33, 0x80, 0x88, 0x09, 0x43, 0x81, 0xb9, 0x2b, 0x37, - 0x82, 0xbc, 0x32, 0x08, 0x83, 0x31, 0xdf, 0x51, 0x91, 0x89, 0x18, 0x81, 0x9a, 0x28, 0xb1, 0x72, - 0xc3, 0xac, 0x30, 0x13, 0xca, 0x28, 0xc0, 0x11, 0x0a, 0xf0, 0x2e, 0x04, 0xca, 0x2b, 0x15, 0xca, - 0x19, 0x12, 0xba, 0x0a, 0x92, 0x8b, 0x10, 0xb1, 0x9f, 0x88, 0xac, 0xa9, 0x28, 0xa4, 0xaf, 0x90, - 0x0a, 0xc1, 0x9c, 0x29, 0xb1, 0x9c, 0xd8, 0x8d, 0x22, 0xc9, 0xcc, 0x38, 0xc2, 0x0a, 0xb0, 0xbb, - 0x08, 0x04, 0xcd, 0x99, 0x00, 0xc8, 0x2a, 0xe2, 0x8c, 0x90, 0x30, 0xea, 0x89, 0x09, 0x11, 0xb8, - 0xbc, 0x89, 0x09, 0x21, 0xd2, 0x9e, 0x09, 0x12, 0xac, 0x01, 0xa8, 0x9c, 0x91, 0x09, 0x88, 0x25, - 0xba, 0x9f, 0x24, 0x99, 0xa0, 0x29, 0x91, 0x52, 0x81, 0xdb, 0x1b, 0x27, 0x00, 0x80, 0x31, 0xa1, - 0x1a, 0x14, 0x89, 0x73, 0x05, 0x98, 0x21, 0x12, 0x10, 0x44, 0x02, 0x88, 0x62, 0x24, 0x88, 0x18, - 0x44, 0x22, 0x21, 0x01, 0x30, 0x35, 0x22, 0x34, 0x23, 0x12, 0x63, 0x24, 0x23, 0x10, 0x44, 0x33, - 0x11, 0x71, 0x24, 0x00, 0x31, 0x23, 0x02, 0x72, 0x14, 0x20, 0x22, 0x22, 0x80, 0x51, 0x23, 0x53, - 0x22, 0x01, 0x9a, 0x52, 0x34, 0x12, 0x18, 0x02, 0x59, 0x07, 0xa9, 0x28, 0x35, 0xb8, 0x9c, 0x51, - 0x82, 0x9c, 0x31, 0x02, 0xeb, 0x28, 0xb1, 0x1b, 0x31, 0xf2, 0x8c, 0x00, 0x00, 0xab, 0x11, 0x9a, - 0xc3, 0xcf, 0x11, 0x18, 0xfa, 0x3d, 0x81, 0x81, 0xae, 0x00, 0x30, 0xd1, 0x0b, 0x81, 0x09, 0xaa, - 0x10, 0x88, 0xa1, 0x8e, 0xd9, 0x29, 0x92, 0x0b, 0xba, 0x08, 0x88, 0x37, 0xef, 0x20, 0x90, 0x09, - 0xa9, 0x02, 0x9c, 0x33, 0xa8, 0xdb, 0x20, 0xe0, 0x1b, 0x14, 0xa2, 0xaf, 0x05, 0x89, 0xca, 0x32, - 0x08, 0xa2, 0x0d, 0x99, 0x41, 0x91, 0xad, 0x10, 0x21, 0xb0, 0x8c, 0x10, 0xc0, 0x68, 0xb2, 0x0d, - 0xa1, 0x08, 0x09, 0x23, 0xeb, 0x1a, 0x84, 0x89, 0x99, 0x08, 0x1a, 0x23, 0xd0, 0xbf, 0x23, 0x19, - 0xb1, 0xa9, 0xbb, 0x73, 0xd1, 0x9b, 0x63, 0xa1, 0x8b, 0x82, 0x99, 0x8b, 0x26, 0x99, 0xca, 0x51, - 0xa8, 0x12, 0x9c, 0x00, 0x0c, 0x27, 0xda, 0x18, 0x22, 0xb9, 0x89, 0x3c, 0x07, 0x9b, 0x82, 0x0b, - 0x23, 0x00, 0x89, 0xaa, 0x91, 0x9f, 0x73, 0x94, 0x9d, 0x00, 0x33, 0xe8, 0x0a, 0x31, 0x83, 0xab, - 0x8a, 0x41, 0x11, 0xb8, 0x4a, 0x13, 0xe9, 0x0c, 0x45, 0x91, 0x9c, 0x00, 0x22, 0x80, 0x9b, 0x63, - 0x98, 0x01, 0x8c, 0x34, 0x90, 0x89, 0x10, 0x63, 0x82, 0x0a, 0xc0, 0x6a, 0x84, 0x1a, 0x12, 0x18, - 0x90, 0x30, 0x04, 0x8a, 0x55, 0x90, 0x13, 0xad, 0x42, 0x01, 0x02, 0x09, 0xa8, 0x71, 0x86, 0x88, - 0x0b, 0x25, 0x9b, 0x23, 0x11, 0xbc, 0x34, 0xa8, 0x89, 0x72, 0xb2, 0x2c, 0x06, 0xba, 0x19, 0x53, - 0xb8, 0x38, 0xc2, 0x0b, 0x32, 0x13, 0xec, 0x29, 0x12, 0x99, 0x89, 0x20, 0x08, 0xb8, 0x2d, 0x15, - 0xb8, 0x8d, 0x03, 0x18, 0xe2, 0x8d, 0x22, 0x88, 0xa9, 0x8b, 0x62, 0xd0, 0x28, 0xc8, 0x09, 0x09, - 0x81, 0xcc, 0x58, 0xa2, 0x9d, 0x10, 0x80, 0x98, 0x9d, 0x81, 0xaa, 0x02, 0xab, 0x80, 0xbf, 0x9b, - 0x02, 0x8b, 0x81, 0x03, 0xff, 0x1d, 0x92, 0xab, 0x00, 0x08, 0x9a, 0x03, 0xcf, 0x88, 0x80, 0xb9, - 0x50, 0xe0, 0x0a, 0x30, 0xc3, 0x9f, 0x11, 0x80, 0x9a, 0x28, 0xa1, 0x8a, 0xa0, 0x0a, 0x33, 0xf8, - 0x8b, 0x03, 0x89, 0xb0, 0x6a, 0xb0, 0x8a, 0x48, 0x92, 0x0a, 0x21, 0x02, 0xee, 0x58, 0x82, 0x8a, - 0x8a, 0x37, 0xb9, 0x19, 0x51, 0xa3, 0x8c, 0x80, 0x42, 0x91, 0x09, 0x11, 0x83, 0x59, 0x87, 0x8b, - 0x15, 0x89, 0x98, 0x45, 0xb9, 0x30, 0x02, 0x81, 0x9d, 0x27, 0x80, 0x88, 0x28, 0x00, 0x02, 0x09, - 0x24, 0x44, 0xa0, 0x30, 0xc8, 0x70, 0x84, 0x0a, 0x12, 0x91, 0x2b, 0x47, 0x88, 0x09, 0x33, 0xc9, - 0x62, 0x81, 0x90, 0x2a, 0x17, 0x09, 0x80, 0x09, 0x43, 0x03, 0x9a, 0x33, 0xaa, 0x24, 0x72, 0xb1, - 0x1c, 0x04, 0x18, 0x12, 0x10, 0xaa, 0x45, 0xaa, 0x08, 0x54, 0xc9, 0x29, 0x14, 0xb8, 0x0a, 0x27, - 0xc8, 0x1a, 0x11, 0x80, 0x88, 0x98, 0xab, 0x73, 0xa3, 0xac, 0x19, 0x04, 0x9a, 0x8a, 0x13, 0xad, - 0x81, 0x89, 0xc9, 0x40, 0xb0, 0xcb, 0x8e, 0x14, 0xab, 0xa8, 0x49, 0xb1, 0x2b, 0xfa, 0x2a, 0xa8, - 0xb1, 0x1d, 0xd1, 0x08, 0xcb, 0x42, 0xca, 0x88, 0x9d, 0x33, 0xa9, 0xda, 0x0c, 0x82, 0xaa, 0x40, - 0xf0, 0x1c, 0x93, 0x9a, 0x99, 0x10, 0xaa, 0x20, 0xd9, 0xae, 0x33, 0xc0, 0x9b, 0x89, 0x03, 0xaf, - 0x22, 0xaa, 0xb0, 0x8d, 0x00, 0x24, 0xdd, 0x10, 0x80, 0x88, 0x8a, 0x80, 0x19, 0x95, 0x9f, 0x00, - 0x31, 0xba, 0x10, 0xaa, 0x88, 0x64, 0xb0, 0x8b, 0x20, 0x03, 0xc9, 0x9a, 0x28, 0x34, 0x84, 0xbf, - 0x21, 0x28, 0x04, 0x9a, 0xaa, 0x42, 0xa8, 0x22, 0x99, 0x90, 0x70, 0x85, 0x9d, 0x21, 0x12, 0x99, - 0xbb, 0x61, 0xa3, 0x1c, 0x93, 0x89, 0x49, 0x27, 0x99, 0xc9, 0x19, 0x42, 0x14, 0xc8, 0x8a, 0x31, - 0x15, 0xd9, 0x29, 0x02, 0x40, 0x13, 0xcb, 0x18, 0x24, 0x80, 0x00, 0x62, 0x23, 0xc9, 0x2b, 0x54, - 0x84, 0x9a, 0x18, 0x25, 0x18, 0x03, 0x29, 0xa1, 0x60, 0x83, 0x58, 0x06, 0xaa, 0x11, 0x33, 0xb1, - 0x19, 0x40, 0x85, 0x50, 0xa1, 0x01, 0xab, 0x15, 0x31, 0x93, 0xbc, 0x2a, 0x37, 0xc0, 0x0a, 0x12, - 0x11, 0xcb, 0x48, 0x03, 0xfa, 0x0c, 0x02, 0x82, 0x9c, 0x81, 0x00, 0x88, 0x00, 0xfb, 0x8c, 0x33, - 0xd9, 0x9c, 0x33, 0xd8, 0x1a, 0x12, 0xaa, 0x9b, 0x98, 0x89, 0x32, 0xf8, 0x8d, 0x31, 0xa0, 0xbd, - 0x50, 0xa1, 0x0b, 0x12, 0xd9, 0x39, 0x13, 0xd9, 0x8c, 0x33, 0xb8, 0x29, 0x17, 0xc9, 0x3a, 0x14, - 0x9a, 0xbb, 0x64, 0x80, 0x13, 0xbb, 0x01, 0x22, 0xba, 0x71, 0x84, 0xba, 0x49, 0x04, 0x89, 0x24, - 0xa9, 0x8b, 0x35, 0x90, 0x9b, 0x37, 0xda, 0x20, 0x82, 0x80, 0x09, 0xa8, 0x1a, 0x44, 0x82, 0xcf, - 0x31, 0x01, 0x90, 0x8e, 0x01, 0x08, 0x12, 0xcb, 0x0a, 0x41, 0xc0, 0x0b, 0x02, 0xc9, 0x8c, 0x35, - 0xb8, 0xdb, 0x1a, 0x23, 0x99, 0xdb, 0x19, 0x91, 0x00, 0xbf, 0x23, 0xac, 0xa9, 0x79, 0xc3, 0x9c, - 0x22, 0xa0, 0x9c, 0x10, 0x81, 0x99, 0xb0, 0x8f, 0x33, 0xb9, 0xda, 0x60, 0xa2, 0x8a, 0x18, 0xa1, - 0x8d, 0x83, 0x1b, 0x03, 0xa8, 0x9c, 0x66, 0xb1, 0x8a, 0x11, 0x01, 0x89, 0x81, 0x09, 0x44, 0x90, - 0x32, 0x10, 0xc0, 0x7a, 0x05, 0x38, 0xf1, 0x1a, 0x23, 0x10, 0x98, 0x42, 0x81, 0xa0, 0x71, 0xa3, - 0x2a, 0xb1, 0x30, 0x65, 0xa2, 0x8e, 0x32, 0x82, 0x09, 0x90, 0x20, 0x03, 0x01, 0x8c, 0x25, 0xb9, - 0x09, 0x55, 0xa2, 0x1a, 0x13, 0xaa, 0xab, 0x55, 0xb0, 0x91, 0x2c, 0x06, 0x08, 0xa9, 0x11, 0xac, - 0x98, 0x72, 0x81, 0x98, 0xba, 0x39, 0x05, 0xab, 0xbc, 0x72, 0x83, 0xc9, 0x8a, 0x03, 0xca, 0x0b, - 0x22, 0x24, 0xdc, 0x08, 0x11, 0xa0, 0xae, 0x20, 0xa2, 0x8c, 0x00, 0x22, 0xce, 0x18, 0x01, 0xa0, - 0xac, 0x08, 0x80, 0x98, 0xad, 0x11, 0xd8, 0xbb, 0x9a, 0x72, 0xa3, 0xaf, 0x8a, 0x32, 0xb8, 0x9b, - 0xb9, 0x0b, 0x90, 0xb9, 0x1e, 0xe2, 0x9d, 0x00, 0x08, 0xab, 0x88, 0xbb, 0xa9, 0x71, 0xf3, 0x8e, - 0x91, 0x18, 0x81, 0x09, 0x99, 0xa9, 0x1b, 0xa1, 0x11, 0xef, 0x51, 0x91, 0x8a, 0x8b, 0x31, 0x80, - 0x20, 0x93, 0xaa, 0x9c, 0x44, 0x15, 0xbb, 0x10, 0x72, 0x82, 0x08, 0x89, 0x34, 0x01, 0x98, 0x62, - 0x25, 0xa8, 0x19, 0x37, 0x98, 0x11, 0x28, 0x01, 0x46, 0xa0, 0x18, 0x42, 0x01, 0x20, 0x25, 0x88, - 0x40, 0x02, 0x00, 0x71, 0x02, 0x99, 0x53, 0x01, 0x98, 0x41, 0x81, 0x72, 0xa2, 0x0a, 0x09, 0x35, - 0x99, 0x98, 0x51, 0x92, 0x99, 0x9a, 0x62, 0xd0, 0x89, 0x09, 0x35, 0xb9, 0x8b, 0xb9, 0x9c, 0x40, - 0xb2, 0xbd, 0x1a, 0xa2, 0xbf, 0x18, 0xb1, 0x9f, 0x81, 0x18, 0xc0, 0x9d, 0x99, 0x29, 0x91, 0x8b, - 0xec, 0x09, 0x99, 0x82, 0xbb, 0xba, 0x1a, 0xfa, 0x8a, 0x00, 0xa9, 0xbe, 0x10, 0x99, 0xb9, 0x8e, - 0x13, 0x9a, 0xc9, 0x1c, 0x02, 0xac, 0x89, 0x72, 0xb0, 0x1a, 0xa9, 0x32, 0x33, 0xd8, 0x8c, 0x32, - 0xb8, 0x19, 0x75, 0xa3, 0x9d, 0x40, 0x15, 0xaa, 0x89, 0x32, 0x11, 0x02, 0x9a, 0x98, 0x71, 0x82, - 0x8b, 0x47, 0x90, 0x09, 0x10, 0x22, 0x8a, 0x92, 0x1e, 0x45, 0x92, 0x9e, 0x20, 0x11, 0x81, 0x89, - 0x82, 0x5a, 0x85, 0x8c, 0x21, 0x81, 0xac, 0x35, 0x98, 0x88, 0x32, 0xd9, 0x28, 0x03, 0xb8, 0x0a, - 0x23, 0x08, 0x26, 0xb0, 0x0a, 0x55, 0xb1, 0x8f, 0x43, 0xa0, 0x9c, 0x30, 0x21, 0xc0, 0x1b, 0x22, - 0x91, 0x8d, 0x34, 0xdb, 0x38, 0x11, 0xe0, 0x1c, 0x04, 0x89, 0x88, 0x18, 0x08, 0x13, 0xdf, 0x28, - 0x02, 0xc8, 0x1a, 0x13, 0x89, 0x90, 0xaa, 0x0a, 0x33, 0xfc, 0x28, 0x18, 0xa2, 0x0e, 0x92, 0x4a, - 0xb2, 0x8d, 0x10, 0x23, 0xab, 0x31, 0xdb, 0x09, 0x72, 0x05, 0xbb, 0x09, 0x54, 0xb0, 0x1a, 0x34, - 0xc8, 0x19, 0x33, 0x11, 0x21, 0xd9, 0x28, 0x54, 0x91, 0x9b, 0x46, 0x81, 0x88, 0x41, 0xa2, 0x49, - 0x04, 0xa8, 0x3a, 0x37, 0xa8, 0x28, 0x80, 0x34, 0xa0, 0x28, 0x44, 0x93, 0x8b, 0x13, 0x48, 0xb0, - 0x71, 0x03, 0x31, 0xc9, 0x8a, 0x72, 0x84, 0x9b, 0x00, 0x20, 0x10, 0x13, 0xdf, 0x38, 0x82, 0xa9, - 0x1a, 0x86, 0x9b, 0x81, 0xaa, 0x30, 0x82, 0xfd, 0x0a, 0x01, 0x90, 0x9e, 0x88, 0x08, 0xa1, 0xac, - 0x19, 0xa0, 0xcc, 0x29, 0xd2, 0xaf, 0x01, 0x98, 0x99, 0x89, 0xb9, 0x9b, 0x98, 0x09, 0xf8, 0xae, - 0x09, 0x01, 0xb8, 0xdb, 0x19, 0xf9, 0x19, 0x99, 0x23, 0xcd, 0x89, 0x19, 0x92, 0xaa, 0x99, 0xca, - 0x1a, 0x42, 0xc0, 0xad, 0x98, 0x89, 0xa9, 0x29, 0x23, 0xd9, 0xaf, 0x19, 0x53, 0xc0, 0x8c, 0x20, - 0x14, 0xcd, 0x18, 0x02, 0x98, 0x8a, 0x21, 0xa1, 0x8d, 0x13, 0x00, 0xe8, 0x0a, 0x03, 0x34, 0xc9, - 0xca, 0x39, 0x85, 0x28, 0x80, 0xb0, 0x1e, 0x23, 0x10, 0x91, 0x2b, 0x87, 0x29, 0xb4, 0x1d, 0x26, - 0x90, 0x99, 0x58, 0x83, 0x09, 0x12, 0x21, 0xa1, 0x6b, 0x14, 0x01, 0x89, 0x63, 0x14, 0xba, 0x52, - 0x11, 0x10, 0x33, 0x33, 0x98, 0x52, 0x11, 0x35, 0x11, 0x30, 0x35, 0x33, 0x88, 0x46, 0x89, 0x34, - 0x21, 0xa1, 0x71, 0xa1, 0x48, 0x23, 0x93, 0x9c, 0x41, 0x32, 0x84, 0x8c, 0x91, 0x5a, 0x92, 0x89, - 0x30, 0x85, 0x8c, 0x02, 0x1b, 0xc0, 0x8b, 0xc8, 0x39, 0x06, 0xdd, 0x0a, 0x32, 0xc8, 0xbc, 0x38, - 0xc0, 0x89, 0x89, 0xc9, 0x9d, 0x08, 0x00, 0xcb, 0x9b, 0xbb, 0x02, 0xbf, 0xb9, 0x1b, 0xc3, 0x9f, - 0x08, 0x92, 0xad, 0x80, 0x99, 0xb8, 0x2a, 0xc0, 0x0b, 0xc9, 0x8c, 0x08, 0x16, 0xdb, 0x09, 0x82, - 0x9a, 0xa8, 0x21, 0x80, 0x02, 0x1b, 0x75, 0xd3, 0x0b, 0x12, 0x11, 0x89, 0x13, 0x22, 0x00, 0x26, - 0x40, 0x85, 0x0c, 0x04, 0x48, 0x05, 0x99, 0x20, 0x03, 0x21, 0x10, 0x35, 0xa9, 0x73, 0xa0, 0x21, - 0x81, 0x26, 0x9b, 0x36, 0x90, 0xa9, 0x78, 0x93, 0x18, 0xa0, 0x0a, 0x90, 0x73, 0x90, 0x08, 0x20, - 0x83, 0xcc, 0x28, 0x01, 0x80, 0x0a, 0xa0, 0x31, 0xfc, 0x2b, 0x34, 0xa9, 0xca, 0x9d, 0x21, 0x94, - 0x8c, 0xa3, 0x8c, 0xd8, 0x58, 0xa3, 0x9b, 0x90, 0x88, 0x9c, 0x24, 0xfb, 0x19, 0x11, 0x90, 0x9b, - 0x90, 0x28, 0x98, 0x82, 0x0e, 0x95, 0x9c, 0x9b, 0x64, 0xb1, 0xac, 0x42, 0x81, 0x89, 0x99, 0x28, - 0x00, 0x23, 0xfa, 0x8b, 0x48, 0x04, 0x18, 0xd9, 0x49, 0xb2, 0x20, 0xba, 0x43, 0x8b, 0x36, 0xa8, - 0x99, 0xab, 0x55, 0x12, 0xc9, 0x2a, 0x03, 0x24, 0xdc, 0x20, 0x10, 0x90, 0x31, 0x23, 0xcb, 0x41, - 0x02, 0xcb, 0x40, 0x14, 0x11, 0x20, 0xb0, 0x48, 0x53, 0x12, 0x92, 0x0d, 0x27, 0x10, 0x98, 0x18, - 0x14, 0x21, 0x32, 0xe8, 0x49, 0x35, 0xb0, 0x2b, 0x04, 0x29, 0x82, 0x40, 0xa1, 0x72, 0xd0, 0x39, - 0x03, 0xd8, 0x0b, 0x25, 0x08, 0xa1, 0x2a, 0xe9, 0x10, 0x08, 0x91, 0xad, 0x99, 0x28, 0xa4, 0xad, - 0xdb, 0x00, 0xab, 0x25, 0xfb, 0x8a, 0x90, 0x8c, 0x00, 0xba, 0x9c, 0x08, 0xb9, 0xcb, 0xbb, 0xca, - 0xbd, 0x18, 0xc9, 0xac, 0x08, 0xae, 0xa8, 0x1a, 0xe0, 0x0a, 0xcb, 0x43, 0xc9, 0x9a, 0x98, 0x98, - 0x21, 0xd8, 0x8c, 0x11, 0x00, 0xad, 0x33, 0x8a, 0xc2, 0x7b, 0xa2, 0x1a, 0x12, 0x11, 0x18, 0x43, - 0x01, 0x04, 0x28, 0x32, 0x17, 0x48, 0x05, 0x08, 0x81, 0x63, 0x12, 0x32, 0x90, 0x72, 0x22, 0x92, - 0x3c, 0x17, 0x00, 0x88, 0x41, 0x81, 0x31, 0x01, 0x21, 0x42, 0x81, 0x60, 0x13, 0x10, 0x98, 0x55, - 0x98, 0x21, 0x28, 0x04, 0x18, 0x00, 0x10, 0x10, 0x89, 0x74, 0x92, 0x8a, 0x24, 0xa0, 0x0d, 0x15, - 0xab, 0x41, 0xa2, 0xac, 0x00, 0x11, 0xb9, 0x29, 0xa2, 0x9f, 0x23, 0xba, 0x99, 0x31, 0xf2, 0xae, - 0x99, 0x52, 0xc0, 0x08, 0x99, 0x81, 0x8d, 0x03, 0x8c, 0x81, 0xa9, 0xa9, 0x30, 0xfc, 0x29, 0x10, - 0xa1, 0x8e, 0x91, 0x3b, 0xc3, 0x8b, 0xa0, 0x89, 0x3b, 0x87, 0x9d, 0x00, 0x18, 0xc0, 0x0a, 0x00, - 0xd2, 0x0d, 0xa0, 0x1c, 0x25, 0xc0, 0x8d, 0x10, 0x00, 0x98, 0x8a, 0x90, 0x10, 0xbc, 0xa2, 0x3d, - 0xd4, 0x0c, 0x01, 0x91, 0xbc, 0x38, 0x82, 0xd9, 0x0c, 0x82, 0x32, 0xed, 0x10, 0xa9, 0x11, 0x89, - 0xb0, 0x9c, 0x11, 0x91, 0x9d, 0x90, 0x40, 0xd9, 0x88, 0x29, 0x95, 0x8e, 0x04, 0x8a, 0x98, 0x2a, - 0x93, 0x99, 0xad, 0x01, 0x2b, 0x17, 0x8c, 0x12, 0x80, 0xda, 0x48, 0x82, 0x99, 0x0a, 0x17, 0xab, - 0x03, 0x1d, 0x83, 0x1b, 0x98, 0x51, 0x05, 0x9f, 0x12, 0x08, 0x90, 0x10, 0x8a, 0x14, 0x18, 0xda, - 0x38, 0x91, 0x0b, 0x35, 0x98, 0xaa, 0x53, 0xa9, 0x02, 0x5a, 0xd0, 0x51, 0xa8, 0x01, 0x1a, 0x94, - 0x1c, 0x06, 0xab, 0x11, 0x32, 0xcc, 0x22, 0x0a, 0x13, 0x19, 0xc3, 0x2c, 0xa2, 0x79, 0x85, 0x9b, - 0x20, 0x83, 0x8c, 0x02, 0x21, 0xa9, 0x63, 0xc9, 0x01, 0x38, 0x83, 0x8b, 0x27, 0xa9, 0x49, 0x05, - 0xab, 0x14, 0x08, 0xc9, 0x51, 0x90, 0x43, 0xc0, 0x1a, 0x13, 0x32, 0xfb, 0x38, 0x30, 0xc3, 0x2c, - 0x94, 0x18, 0xa8, 0x41, 0x91, 0x53, 0xbc, 0x03, 0x3b, 0xb5, 0x69, 0x92, 0x3b, 0xb4, 0x2c, 0xa0, - 0x73, 0xb9, 0x21, 0x10, 0xc8, 0x2a, 0x05, 0x0a, 0x93, 0x2b, 0xb8, 0x64, 0xd8, 0x20, 0x00, 0xa1, - 0x1b, 0x16, 0x9a, 0x01, 0x18, 0x18, 0x84, 0xad, 0x11, 0x33, 0xfb, 0x40, 0x98, 0xa0, 0x18, 0x23, - 0xc9, 0x08, 0x98, 0x30, 0xf1, 0x0b, 0x84, 0x8c, 0xa2, 0x72, 0xdc, 0x10, 0x09, 0x92, 0x2b, 0xa1, - 0x08, 0x8d, 0xa2, 0x1b, 0xb4, 0x0d, 0x02, 0xbd, 0x11, 0x8d, 0x92, 0x8c, 0x22, 0xd0, 0x8d, 0x00, - 0x22, 0xcb, 0x90, 0x0f, 0x14, 0xba, 0x09, 0x10, 0xb9, 0x20, 0xb0, 0x3c, 0xb5, 0x8c, 0x09, 0x15, - 0x9c, 0xa2, 0x39, 0xc1, 0x20, 0xbb, 0x23, 0xdb, 0x0b, 0x26, 0xa0, 0x9a, 0x88, 0x40, 0xb1, 0x3a, - 0xd3, 0x19, 0x92, 0x0f, 0x93, 0x18, 0xab, 0x36, 0xeb, 0x09, 0x04, 0x08, 0xa0, 0xa8, 0x0f, 0x24, - 0xa9, 0x8a, 0x03, 0x39, 0xd1, 0x9b, 0x50, 0x84, 0x9d, 0x88, 0x11, 0x22, 0xe9, 0x19, 0x10, 0x15, - 0xad, 0x02, 0x32, 0xd0, 0x0b, 0x24, 0xaa, 0x12, 0x18, 0x89, 0x86, 0x2d, 0x86, 0x18, 0xd0, 0x38, - 0x93, 0x38, 0xb1, 0x48, 0x09, 0x07, 0x8b, 0x03, 0x38, 0x88, 0x26, 0xaa, 0x23, 0x0a, 0x06, 0x49, - 0x94, 0x2b, 0xb1, 0x73, 0xa0, 0x20, 0x88, 0x11, 0x42, 0xa0, 0x10, 0x0a, 0x07, 0x39, 0xa3, 0x50, - 0xe8, 0x38, 0xa2, 0x19, 0x04, 0x90, 0x9b, 0x31, 0x06, 0xbd, 0x62, 0xb9, 0x30, 0xa9, 0x10, 0x89, - 0x94, 0x9f, 0x22, 0xb0, 0x9e, 0x22, 0xa1, 0xbc, 0x10, 0x10, 0xb1, 0x9d, 0x10, 0x90, 0xdc, 0x1b, - 0x05, 0xaa, 0xa0, 0x99, 0xab, 0x80, 0x28, 0xf8, 0x1b, 0xcb, 0x03, 0x1d, 0xb1, 0x9b, 0x80, 0xae, - 0x43, 0xda, 0x89, 0x20, 0xda, 0x09, 0x13, 0xca, 0x31, 0xe9, 0x19, 0x04, 0xbc, 0x11, 0x21, 0xc9, - 0x30, 0x93, 0xaf, 0x30, 0x84, 0xdb, 0x40, 0xb1, 0x58, 0x83, 0xbe, 0x30, 0x23, 0xb8, 0x18, 0x01, - 0xa9, 0x31, 0x9a, 0x57, 0xba, 0x31, 0x90, 0x12, 0x99, 0x73, 0x81, 0x8b, 0x42, 0x03, 0x89, 0xbd, - 0x73, 0x83, 0xa9, 0x59, 0x93, 0x8b, 0x50, 0x83, 0x8b, 0x25, 0xa9, 0x20, 0x12, 0xda, 0x72, 0xa2, - 0x0a, 0x19, 0x04, 0x0b, 0x15, 0x8b, 0x00, 0x13, 0xbb, 0x73, 0xa2, 0x8d, 0x82, 0x30, 0xb0, 0x21, - 0xdb, 0x32, 0xc1, 0x28, 0x8d, 0x87, 0x1c, 0x94, 0x28, 0xda, 0x21, 0xab, 0x32, 0x03, 0xcb, 0x08, - 0x13, 0xcd, 0x10, 0x31, 0xb8, 0x30, 0xa8, 0xfa, 0x61, 0xc0, 0x18, 0x80, 0x10, 0x98, 0xc9, 0x7a, - 0xb2, 0x1a, 0x08, 0x02, 0xca, 0x38, 0x82, 0x99, 0x9a, 0x16, 0xaf, 0x11, 0x12, 0xcb, 0x11, 0xbb, - 0x15, 0x0b, 0xe0, 0x73, 0xb9, 0x98, 0x1a, 0x13, 0xa9, 0x19, 0x90, 0xa8, 0x0d, 0x91, 0x41, 0xba, - 0xf1, 0x1e, 0x04, 0x8a, 0xc1, 0x49, 0xa1, 0x0c, 0x02, 0xab, 0x13, 0x8d, 0x84, 0x39, 0xa1, 0xdc, - 0x20, 0x00, 0x33, 0xce, 0x20, 0x11, 0xd9, 0x28, 0x01, 0xb0, 0x1d, 0x83, 0x41, 0xd8, 0x20, 0x82, - 0xaa, 0x09, 0x64, 0xa8, 0xa8, 0x6a, 0xa3, 0x39, 0xea, 0x31, 0x80, 0x22, 0xae, 0x31, 0x91, 0x00, - 0x99, 0x38, 0x93, 0x1d, 0x13, 0x19, 0xd2, 0x0e, 0x13, 0x88, 0xe0, 0x2a, 0x15, 0x89, 0x09, 0x80, - 0x89, 0x99, 0xb1, 0x6c, 0xb2, 0x0c, 0xb9, 0x72, 0xa8, 0x80, 0x0d, 0x93, 0x49, 0xd0, 0x0a, 0x11, - 0xda, 0x48, 0x90, 0x99, 0x29, 0xb1, 0x9d, 0x52, 0xc9, 0x8a, 0x42, 0xa0, 0xac, 0x20, 0x21, 0x9a, - 0xa3, 0xef, 0x22, 0x90, 0x9a, 0x12, 0x89, 0x9a, 0x84, 0x0d, 0x14, 0x00, 0xcc, 0x30, 0x92, 0xaa, - 0x23, 0x32, 0xec, 0x09, 0x53, 0x02, 0xba, 0xab, 0x71, 0x95, 0x19, 0x00, 0x80, 0x1a, 0x26, 0xa9, - 0x48, 0x91, 0x98, 0x5c, 0x15, 0xa8, 0x29, 0x22, 0x80, 0x99, 0x25, 0x99, 0x34, 0xa1, 0x18, 0x10, - 0x36, 0x11, 0x0a, 0x05, 0x1a, 0x24, 0x40, 0x15, 0x99, 0x99, 0x70, 0x96, 0x09, 0x10, 0x22, 0xeb, - 0x40, 0x91, 0x11, 0x99, 0x00, 0x41, 0x92, 0xac, 0x53, 0xb8, 0x08, 0x21, 0xa2, 0x89, 0x18, 0x98, - 0x10, 0x01, 0xdf, 0x32, 0xb8, 0xbb, 0x79, 0xf3, 0x3b, 0x81, 0x89, 0xba, 0x42, 0xfc, 0x38, 0xa0, - 0x09, 0xba, 0x20, 0x32, 0xe9, 0xbb, 0x38, 0xa8, 0xea, 0x4a, 0xc2, 0x9a, 0xab, 0x35, 0x90, 0xfb, - 0x19, 0x91, 0x98, 0x0a, 0xd1, 0x39, 0x92, 0xb0, 0xbf, 0x25, 0x9a, 0x0a, 0x01, 0x08, 0x08, 0x08, - 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, 0x6a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x48, 0x00, - 0x88, 0x01, 0x98, 0x18, 0x00, 0xa8, 0x30, 0xa8, 0x29, 0x88, 0x31, 0xb0, 0xab, 0x30, 0x21, 0x47, - 0xce, 0x48, 0x91, 0x09, 0x00, 0x81, 0xaa, 0x61, 0xa1, 0x9e, 0x33, 0xa8, 0x08, 0x03, 0x8e, 0xa3, - 0x3b, 0x94, 0x80, 0x0b, 0xd9, 0x54, 0xb0, 0x08, 0x8b, 0x25, 0xb8, 0x1a, 0xa2, 0x2b, 0x37, 0xbc, - 0x31, 0x99, 0xba, 0x66, 0xc8, 0x1a, 0x15, 0xbb, 0x51, 0xb0, 0x19, 0x91, 0x31, 0xda, 0x28, 0x91, - 0x39, 0xa6, 0x0d, 0x02, 0xa9, 0x60, 0xc0, 0x38, 0xa8, 0x20, 0xe1, 0x59, 0xc1, 0x29, 0x93, 0xa8, - 0x1b, 0x05, 0x99, 0x28, 0x91, 0x39, 0xed, 0x71, 0xa1, 0x8c, 0x21, 0x91, 0x09, 0x02, 0xb9, 0x89, - 0x58, 0x84, 0x8c, 0x12, 0xc9, 0x48, 0xb1, 0x1b, 0x17, 0xcb, 0x31, 0xb2, 0x0a, 0xa2, 0x3b, 0x07, - 0x9c, 0x11, 0x83, 0x9f, 0x22, 0xa1, 0x30, 0xfb, 0x7b, 0xb2, 0x19, 0x12, 0xac, 0x21, 0x90, 0x08, - 0x20, 0xa8, 0x9b, 0x45, 0xab, 0x94, 0x2c, 0x02, 0x12, 0xcf, 0x30, 0x04, 0xbc, 0x41, 0xb0, 0x49, - 0x91, 0xa8, 0x38, 0xdb, 0x36, 0xba, 0x39, 0x92, 0x9d, 0x25, 0xab, 0x31, 0xb8, 0x4a, 0xb2, 0x59, - 0xe9, 0x41, 0xa0, 0x89, 0x11, 0x0b, 0x96, 0x1d, 0x84, 0x0b, 0x02, 0x9a, 0x32, 0xbc, 0x31, 0x81, - 0x98, 0x32, 0xdf, 0x24, 0xd9, 0x39, 0x14, 0xdb, 0x41, 0xb9, 0x29, 0x03, 0x89, 0x18, 0xb0, 0x18, - 0x28, 0xc8, 0x78, 0xa1, 0x0d, 0x85, 0x1b, 0x83, 0xa8, 0x8e, 0x25, 0xba, 0x30, 0x95, 0x9e, 0x13, - 0x09, 0x90, 0x08, 0x10, 0xba, 0x42, 0x80, 0x48, 0xf9, 0x29, 0xa0, 0x50, 0x92, 0x0c, 0x82, 0x0d, - 0x12, 0x9a, 0x22, 0xd8, 0x28, 0x80, 0x82, 0xac, 0x43, 0x90, 0xeb, 0x72, 0xb8, 0x2a, 0x33, 0xf8, - 0x2b, 0x07, 0xab, 0x21, 0xa0, 0x38, 0xc1, 0x28, 0xb1, 0x39, 0xb1, 0x89, 0x00, 0x10, 0x35, 0xfa, - 0x49, 0xb9, 0x60, 0xb3, 0x0f, 0x03, 0x9b, 0x40, 0x83, 0xae, 0x11, 0x02, 0xaa, 0x83, 0x89, 0x22, - 0x9a, 0x91, 0x1a, 0x82, 0x30, 0xf3, 0x0f, 0x43, 0xd2, 0x0e, 0x13, 0x9a, 0x20, 0xb1, 0x2c, 0x85, - 0x8b, 0x00, 0x11, 0xb9, 0x40, 0xab, 0x47, 0xea, 0x38, 0x91, 0x89, 0x12, 0x99, 0x8b, 0x15, 0x19, - 0xd3, 0x0f, 0x04, 0x9a, 0x32, 0xb8, 0x1b, 0x83, 0x8b, 0x30, 0xa1, 0x73, 0xfa, 0x49, 0x91, 0x19, - 0xb2, 0x2d, 0x03, 0x8b, 0x92, 0x2c, 0x85, 0x8c, 0x42, 0xd8, 0x19, 0x80, 0x32, 0xba, 0x08, 0x33, - 0xcd, 0x10, 0x22, 0xc0, 0x2b, 0x85, 0x9d, 0x52, 0xb1, 0x0c, 0x14, 0xbb, 0x49, 0x05, 0xab, 0x83, - 0x0b, 0x05, 0xbb, 0x72, 0xb1, 0x8c, 0x33, 0xb8, 0x19, 0x91, 0x10, 0x19, 0xe3, 0x2b, 0x15, 0xda, - 0x49, 0x92, 0x1b, 0x81, 0x00, 0x19, 0xc1, 0x8b, 0x45, 0xb0, 0x9a, 0x50, 0xa3, 0x9e, 0x23, 0xb9, - 0x38, 0x84, 0xcb, 0x21, 0x03, 0x9f, 0x21, 0x80, 0x09, 0x9b, 0x27, 0x9c, 0x11, 0x18, 0x98, 0x80, - 0x0c, 0x03, 0x33, 0xdf, 0x41, 0x90, 0x8a, 0x10, 0xb0, 0x70, 0xb8, 0x59, 0x92, 0xbb, 0x40, 0xa1, - 0x31, 0xbb, 0x62, 0xb8, 0x9c, 0x53, 0xa8, 0x21, 0xd8, 0x2b, 0x17, 0xac, 0x31, 0x90, 0x98, 0x39, - 0xa3, 0x0d, 0x02, 0x9b, 0x47, 0xda, 0x28, 0x80, 0x28, 0xa1, 0x9b, 0x52, 0xb1, 0x0e, 0x15, 0xac, - 0x52, 0xd8, 0x28, 0x82, 0x9a, 0x13, 0xba, 0x72, 0xd8, 0x28, 0x91, 0x09, 0x12, 0xb8, 0x0a, 0x84, - 0x1b, 0x07, 0xac, 0x42, 0xb0, 0x0c, 0x24, 0xa9, 0x19, 0x91, 0x1a, 0x04, 0x9b, 0x18, 0x52, 0xd8, - 0x09, 0x33, 0xcb, 0x28, 0x07, 0xbc, 0x20, 0x31, 0x92, 0xdd, 0x40, 0x92, 0x8d, 0x13, 0xba, 0x41, - 0x91, 0x8a, 0x09, 0x15, 0xcb, 0x60, 0xa1, 0x8c, 0x05, 0xa9, 0x10, 0x80, 0x08, 0x01, 0xba, 0x61, - 0xa1, 0x8e, 0x33, 0xa9, 0x0a, 0x14, 0xbb, 0x22, 0x88, 0x2b, 0x87, 0xaa, 0x11, 0x30, 0xf1, 0x2e, - 0x06, 0xdb, 0x40, 0x92, 0xab, 0x43, 0xa9, 0x18, 0x82, 0x0b, 0x92, 0x1b, 0x14, 0xae, 0x54, 0xb9, - 0x28, 0xb8, 0x31, 0xb1, 0x3c, 0x97, 0x9a, 0x21, 0xb8, 0x40, 0xa1, 0x0c, 0x13, 0xbc, 0x72, 0xb0, - 0x48, 0xc8, 0x20, 0xda, 0x52, 0xa1, 0x19, 0xc9, 0x10, 0x01, 0x40, 0xe0, 0x2a, 0x84, 0x9c, 0x32, - 0xb0, 0x3b, 0x82, 0x98, 0x9b, 0x55, 0xc9, 0x00, 0x10, 0x92, 0xae, 0x44, 0xc8, 0x39, 0x91, 0x0a, - 0x91, 0x18, 0x32, 0xea, 0x09, 0x34, 0xe9, 0x29, 0x82, 0x89, 0x88, 0x01, 0x28, 0xd1, 0x39, 0x12, - 0xf2, 0x8f, 0x33, 0xb0, 0x0c, 0x34, 0xcb, 0x39, 0x82, 0xaa, 0x62, 0xb8, 0x08, 0x82, 0x9d, 0x44, - 0xb8, 0x38, 0xf9, 0x40, 0xb1, 0x2b, 0x05, 0xac, 0x20, 0x01, 0x82, 0x9b, 0x20, 0xb9, 0x28, 0x44, - 0xfb, 0x40, 0xa0, 0x09, 0x11, 0x91, 0x9e, 0x42, 0xa0, 0x3b, 0xa3, 0xae, 0x62, 0x80, 0x88, 0x9a, - 0x01, 0x3b, 0x97, 0x09, 0x98, 0x40, 0xe1, 0x4a, 0x82, 0x8d, 0x13, 0xab, 0x72, 0xa8, 0x9a, 0x40, - 0xa3, 0x8e, 0x24, 0xba, 0x29, 0x04, 0x8c, 0x23, 0xfa, 0x39, 0x04, 0xbb, 0x41, 0xb0, 0x18, 0x82, - 0x9a, 0x8c, 0x36, 0xb9, 0x28, 0xc1, 0x4b, 0x85, 0x8f, 0x25, 0xba, 0x30, 0xc8, 0x28, 0x81, 0x22, - 0xdb, 0x89, 0x23, 0x19, 0xe8, 0x61, 0xc0, 0x29, 0xb1, 0x29, 0x05, 0xba, 0x01, 0x00, 0x99, 0x01, - 0x20, 0x01, 0xb0, 0xdc, 0x71, 0xc9, 0x51, 0x92, 0xad, 0x21, 0x01, 0xaa, 0x52, 0xb8, 0x8a, 0x31, - 0x98, 0x32, 0xfb, 0x40, 0xb1, 0x2c, 0x82, 0x9a, 0x23, 0x9f, 0x26, 0xda, 0x38, 0x93, 0x9c, 0x32, - 0xb9, 0x1a, 0x07, 0x0b, 0x93, 0x8c, 0x22, 0x09, 0xc0, 0x3a, 0x04, 0xaa, 0x81, 0x48, 0xd2, 0x2b, - 0x12, 0xd8, 0x29, 0x93, 0x41, 0xf8, 0x19, 0x80, 0x18, 0x92, 0x3a, 0x93, 0xde, 0x71, 0xc1, 0x09, - 0x12, 0xb8, 0x48, 0xc1, 0x2a, 0xa3, 0x4b, 0x92, 0x8a, 0x80, 0xab, 0x47, 0xb8, 0x21, 0xeb, 0x10, - 0x12, 0xb0, 0x3a, 0xb4, 0x0f, 0x14, 0xb9, 0x28, 0x82, 0x8e, 0x22, 0x01, 0xcc, 0x31, 0xa0, 0x10, - 0xb0, 0x3d, 0x96, 0x9b, 0x52, 0xb1, 0x8b, 0x34, 0xfa, 0x39, 0x04, 0xac, 0x22, 0xa8, 0x40, 0xd0, - 0x2b, 0x06, 0xab, 0x22, 0xba, 0x20, 0x04, 0xbd, 0x43, 0xa8, 0x28, 0xb1, 0x2a, 0x90, 0x32, 0xca, - 0xaa, 0x74, 0xb8, 0x21, 0x89, 0x0a, 0x94, 0x1b, 0x00, 0x09, 0x05, 0x0d, 0x26, 0xbe, 0x42, 0xb9, - 0x40, 0x91, 0x0b, 0x02, 0x0a, 0xa8, 0x52, 0xf0, 0x49, 0xb3, 0x0e, 0x13, 0x0a, 0x93, 0x9e, 0x32, - 0xb1, 0x0b, 0x01, 0x12, 0x99, 0x0a, 0x96, 0x9d, 0x53, 0xa0, 0x08, 0xad, 0x54, 0xc8, 0x38, 0xa1, - 0x1b, 0x01, 0x18, 0xa0, 0x20, 0xf9, 0x68, 0xa1, 0x2b, 0x90, 0x18, 0x01, 0x2a, 0x94, 0xca, 0x19, - 0x00, 0x24, 0xa1, 0xaf, 0x25, 0xac, 0x43, 0xbb, 0x24, 0xbc, 0x52, 0xa0, 0x0a, 0x32, 0xd9, 0x28, - 0xb0, 0x59, 0x93, 0x8e, 0x23, 0xbb, 0x21, 0x82, 0x9c, 0x21, 0x84, 0xaf, 0x16, 0xba, 0x11, 0x00, - 0x98, 0x20, 0x90, 0x89, 0xa8, 0x68, 0xb1, 0x38, 0x90, 0x98, 0x5b, 0xa4, 0xbf, 0x46, 0xc8, 0x19, - 0x01, 0x99, 0x31, 0xa0, 0x98, 0x89, 0x58, 0x94, 0xbc, 0x73, 0xc8, 0x39, 0xa2, 0x2a, 0x94, 0x9b, - 0x10, 0x03, 0x8d, 0x23, 0xea, 0x40, 0xb8, 0x30, 0xa0, 0x29, 0xc2, 0x2c, 0x87, 0x9a, 0x19, 0x22, - 0xa2, 0x9e, 0x31, 0x80, 0xaa, 0x42, 0xca, 0x43, 0xda, 0x40, 0xa8, 0x28, 0xa1, 0x2a, 0xa3, 0x0f, - 0x16, 0xab, 0x38, 0xc2, 0x2a, 0x13, 0xd9, 0x3a, 0x85, 0x8b, 0x02, 0xa9, 0x23, 0xae, 0x41, 0x82, - 0x8a, 0xb0, 0x0d, 0x16, 0x99, 0x00, 0x09, 0x01, 0xc8, 0x50, 0xa1, 0x8e, 0x04, 0x0a, 0x13, 0xcc, - 0x51, 0xa0, 0x8b, 0x33, 0x9a, 0x32, 0xec, 0x40, 0xa0, 0x08, 0x20, 0xb2, 0x9f, 0x34, 0xab, 0x20, - 0x01, 0xab, 0x90, 0x70, 0x91, 0x0a, 0x89, 0x31, 0xb0, 0x2a, 0xb2, 0x59, 0x96, 0x8f, 0x03, 0x9a, - 0x42, 0xd8, 0x18, 0x00, 0x10, 0xa0, 0xbb, 0x71, 0xa2, 0x08, 0x9c, 0x53, 0xb1, 0x8d, 0x53, 0xb9, - 0x1a, 0x14, 0xaa, 0x01, 0x28, 0xc1, 0x0c, 0x25, 0xca, 0x30, 0xb1, 0x0d, 0x06, 0x9a, 0x02, 0x0a, - 0x83, 0x9d, 0x31, 0x85, 0xad, 0x21, 0x01, 0xa8, 0x1b, 0x03, 0x81, 0x9c, 0x22, 0xaa, 0x32, 0x89, - 0xb5, 0x0f, 0x05, 0xaa, 0x21, 0x9a, 0x24, 0xbc, 0x41, 0xa2, 0x9a, 0x01, 0x4a, 0xc0, 0x43, 0xca, - 0x29, 0xa4, 0x3c, 0x81, 0xb1, 0x3b, 0xa6, 0x0c, 0x85, 0x0b, 0x83, 0xba, 0x72, 0xd3, 0x0a, 0x00, - 0x81, 0x29, 0x83, 0xae, 0x34, 0xda, 0x48, 0xa1, 0x2b, 0x93, 0x8d, 0x53, 0xb1, 0xab, 0x20, 0x82, - 0x08, 0x9a, 0x54, 0x98, 0xca, 0x48, 0x81, 0xba, 0x44, 0x88, 0xab, 0x21, 0x3b, 0x87, 0x0d, 0x82, - 0x09, 0xb8, 0x33, 0x9a, 0x25, 0xe8, 0x0a, 0x02, 0x09, 0x12, 0xc1, 0x1a, 0x91, 0x1c, 0x47, 0x9f, - 0x21, 0x90, 0x10, 0xca, 0x30, 0x81, 0x88, 0xa9, 0x62, 0xc0, 0x1a, 0x01, 0x00, 0x3a, 0xb5, 0x8e, - 0x22, 0x82, 0xdb, 0x39, 0x04, 0xab, 0x24, 0xba, 0x30, 0x98, 0x18, 0xe9, 0x70, 0xa0, 0x08, 0xa1, - 0x3a, 0xb2, 0x50, 0xc2, 0x1a, 0xd8, 0x5a, 0x16, 0xbc, 0x30, 0x91, 0x08, 0x98, 0x38, 0xc2, 0x2b, - 0x83, 0x8a, 0x31, 0xa8, 0x10, 0xff, 0x44, 0xc9, 0x29, 0x94, 0x0b, 0x22, 0xca, 0x28, 0x11, 0x00, - 0xfb, 0x40, 0x92, 0xa9, 0x89, 0x21, 0x01, 0x92, 0x8e, 0x11, 0x94, 0x0f, 0x02, 0x89, 0x88, 0x12, - 0x8b, 0x02, 0xd1, 0x59, 0xb0, 0x18, 0x15, 0xdc, 0x48, 0x92, 0x8b, 0x31, 0x92, 0xbc, 0x38, 0x03, - 0x8a, 0x02, 0x9b, 0x48, 0xa4, 0x8e, 0x00, 0x44, 0xe9, 0x1a, 0x25, 0xbb, 0x48, 0xa2, 0x8c, 0x32, - 0xc8, 0x38, 0x93, 0xbc, 0x31, 0xb0, 0x18, 0x63, 0xd9, 0x08, 0x21, 0x91, 0x9e, 0x23, 0xab, 0x43, - 0xd0, 0x2a, 0x86, 0xab, 0x42, 0xb0, 0x29, 0xb0, 0x28, 0x82, 0x0a, 0x12, 0x81, 0xdf, 0x42, 0xa8, - 0x19, 0x84, 0xbc, 0x51, 0x14, 0xad, 0x28, 0xa0, 0x28, 0x15, 0xbb, 0x10, 0x9a, 0x27, 0xcb, 0x38, - 0x84, 0xaa, 0x49, 0xb2, 0x1b, 0x24, 0xa9, 0x89, 0x20, 0x99, 0x19, 0x15, 0x89, 0xa4, 0xcf, 0x25, - 0xaa, 0x12, 0x88, 0x89, 0x81, 0x0c, 0x04, 0x88, 0x08, 0x10, 0xba, 0x5b, 0xa4, 0x3a, 0xa1, 0x0a, - 0x35, 0xda, 0xab, 0x73, 0xa4, 0xab, 0x22, 0xa0, 0x02, 0x0f, 0x15, 0x9c, 0x20, 0xa0, 0x48, 0xc0, - 0x09, 0x22, 0xb0, 0x2a, 0x83, 0x0d, 0x81, 0x2b, 0x16, 0xad, 0x21, 0x91, 0x29, 0x91, 0x98, 0x8a, - 0xb9, 0x57, 0xb0, 0x0c, 0x15, 0xca, 0x48, 0xa3, 0x8c, 0x21, 0xb8, 0x30, 0xa0, 0x38, 0xc0, 0x29, - 0xb8, 0x73, 0xf1, 0x19, 0x10, 0x02, 0x98, 0xdb, 0x21, 0x90, 0x32, 0xc2, 0x8f, 0x14, 0x9b, 0x14, - 0xbb, 0x30, 0x93, 0x8c, 0x33, 0xbb, 0x2b, 0x07, 0x8c, 0x92, 0x29, 0x05, 0xaa, 0xaa, 0x54, 0x98, - 0x0b, 0x04, 0x8a, 0x82, 0x1c, 0x82, 0x92, 0xaf, 0x62, 0xa2, 0x8c, 0x02, 0x89, 0x80, 0x59, 0x95, - 0x8e, 0x22, 0xaa, 0x31, 0xc8, 0x0a, 0x26, 0xb9, 0x19, 0x02, 0x8b, 0x82, 0x88, 0x10, 0xb4, 0x8f, - 0x25, 0xab, 0x31, 0xd9, 0x39, 0x05, 0xac, 0x32, 0xba, 0x18, 0x36, 0xda, 0x28, 0xa8, 0x30, 0x91, - 0xac, 0x72, 0x90, 0x0b, 0x04, 0xba, 0x29, 0x05, 0x88, 0xb9, 0x60, 0xb2, 0x0c, 0x81, 0x08, 0x32, - 0xa0, 0xcb, 0x58, 0x92, 0x9e, 0x63, 0xb9, 0x38, 0x90, 0x00, 0x98, 0x89, 0x22, 0x8a, 0x40, 0xb1, - 0x9c, 0x20, 0x84, 0x09, 0xc1, 0x1a, 0x03, 0x20, 0xfa, 0x7c, 0xb1, 0x09, 0x62, 0xc0, 0xa9, 0x68, - 0x92, 0x8c, 0x22, 0x90, 0xc8, 0x3a, 0x04, 0xb9, 0x21, 0x09, 0xc3, 0x8d, 0x25, 0xca, 0x20, 0x01, - 0xc1, 0x0c, 0x23, 0xb1, 0x1b, 0xa3, 0x2d, 0xc3, 0x79, 0xa2, 0x9b, 0x89, 0x27, 0xa9, 0x89, 0x14, - 0xab, 0x21, 0x02, 0x8b, 0xd8, 0x4b, 0x85, 0x29, 0xd1, 0x1c, 0x14, 0xaa, 0x10, 0x10, 0x99, 0x88, - 0x11, 0x71, 0xc9, 0x19, 0x91, 0x2c, 0x86, 0x19, 0xe1, 0x2a, 0x82, 0x02, 0x9d, 0x23, 0xd9, 0x20, - 0xa8, 0x33, 0xaa, 0x92, 0x8f, 0x04, 0x09, 0x83, 0xdb, 0x58, 0xb0, 0x18, 0x15, 0xac, 0x11, 0x81, - 0x88, 0xa9, 0x13, 0x9a, 0x60, 0xa4, 0x8e, 0x23, 0xcb, 0x33, 0xaa, 0x81, 0x1a, 0x23, 0xab, 0x02, - 0xab, 0x88, 0x47, 0xa9, 0x9a, 0x14, 0x0e, 0x17, 0xeb, 0x40, 0x90, 0x09, 0x01, 0x0b, 0x92, 0x29, - 0x81, 0x8a, 0x84, 0x8e, 0x14, 0xaa, 0x03, 0x2a, 0xb0, 0x94, 0x8f, 0x86, 0x0a, 0x83, 0x8c, 0x13, - 0x8a, 0x8a, 0x42, 0xd0, 0x3b, 0x06, 0x9a, 0x39, 0xd0, 0x10, 0x0a, 0x86, 0x29, 0xc2, 0x0e, 0x03, - 0x1a, 0x00, 0x99, 0x20, 0x80, 0xda, 0x72, 0xc0, 0x3b, 0x86, 0x8c, 0x12, 0x8a, 0x13, 0x8c, 0x90, - 0x21, 0xab, 0x34, 0xd9, 0x30, 0xc2, 0x8c, 0x23, 0x98, 0x93, 0x1f, 0x93, 0x9b, 0x25, 0xab, 0x20, - 0x98, 0x32, 0xcd, 0x23, 0x99, 0x11, 0x80, 0x9e, 0x22, 0x98, 0x39, 0x93, 0xcb, 0x40, 0xaa, 0x32, - 0x07, 0xaf, 0x32, 0xd0, 0x49, 0xa2, 0x29, 0xd9, 0x49, 0x82, 0x9a, 0x42, 0xa9, 0x88, 0x3b, 0x95, - 0x89, 0x09, 0x15, 0x9d, 0x22, 0x98, 0x88, 0x1b, 0x06, 0x9f, 0x25, 0xba, 0x21, 0xb0, 0x39, 0xa2, - 0x9b, 0x30, 0x84, 0x0f, 0x25, 0xdb, 0x28, 0x91, 0x00, 0x89, 0x04, 0x8a, 0x90, 0x8a, 0x27, 0xbb, - 0x51, 0xe9, 0x48, 0x92, 0x0b, 0x02, 0xab, 0x32, 0x94, 0x9e, 0x22, 0x80, 0x0b, 0x93, 0x8e, 0x14, - 0x98, 0x98, 0x12, 0xaa, 0x40, 0xd0, 0x48, 0xb0, 0x38, 0xb2, 0x1e, 0x07, 0xac, 0x32, 0xd8, 0x30, - 0x98, 0x01, 0xa9, 0x29, 0x05, 0xab, 0x31, 0xc8, 0x20, 0x9b, 0x47, 0xac, 0x21, 0xc8, 0x30, 0x80, - 0x08, 0xb0, 0x2a, 0x80, 0x17, 0x9e, 0x31, 0xb1, 0x1b, 0x84, 0x0b, 0xa4, 0x6b, 0xb2, 0x0c, 0x22, - 0xb8, 0x29, 0x91, 0x58, 0xc1, 0x10, 0xdb, 0x6a, 0x85, 0xab, 0x32, 0xc0, 0x2b, 0x85, 0x8b, 0x22, - 0xa9, 0x18, 0x28, 0x01, 0xca, 0x3a, 0x94, 0x9a, 0x34, 0xeb, 0x71, 0xd8, 0x49, 0xb2, 0x1b, 0x13, - 0x88, 0x8b, 0x05, 0x9d, 0x42, 0xb0, 0x28, 0xaa, 0x40, 0xb2, 0x2e, 0x84, 0xab, 0x41, 0xa1, 0x8a, - 0x01, 0x18, 0x01, 0xc8, 0x2a, 0x82, 0x95, 0x2f, 0x93, 0xab, 0x28, 0x80, 0x43, 0x88, 0xf8, 0x19, - 0x00, 0x15, 0xae, 0x53, 0xb9, 0x00, 0x18, 0x81, 0xa9, 0x51, 0xe9, 0x48, 0x92, 0x8d, 0x32, 0xb8, - 0x2a, 0x21, 0xda, 0x20, 0x00, 0x21, 0xfb, 0x58, 0x90, 0x8b, 0x33, 0x9a, 0x82, 0xbb, 0x70, 0xd3, - 0x3a, 0x91, 0x00, 0xa8, 0x0f, 0x15, 0x0b, 0x92, 0x09, 0xb0, 0x4a, 0x02, 0xb8, 0x58, 0xd1, 0x28, - 0xa8, 0x12, 0x0a, 0x15, 0xcd, 0x11, 0x00, 0x95, 0x1d, 0x03, 0xaa, 0x8a, 0x24, 0x00, 0xd8, 0x0a, - 0x33, 0x88, 0x99, 0x84, 0x9f, 0x01, 0x14, 0xaa, 0x18, 0xa3, 0x9f, 0x26, 0xba, 0x21, 0x01, 0xbd, - 0x30, 0x04, 0xaa, 0x88, 0x15, 0x9a, 0xb1, 0x4a, 0x83, 0xbd, 0x64, 0xc8, 0x28, 0xa2, 0x0d, 0x14, - 0xaa, 0x10, 0x18, 0x90, 0xa8, 0x79, 0x93, 0xac, 0x12, 0x9a, 0x25, 0xaa, 0x30, 0xc8, 0xb9, 0x73, - 0x91, 0x8b, 0x33, 0xba, 0xba, 0x72, 0xb1, 0x3c, 0x07, 0xbb, 0x31, 0xa2, 0x0e, 0x82, 0x11, 0x9b, - 0x01, 0x1a, 0x05, 0x8b, 0x98, 0x48, 0xa3, 0x8a, 0x21, 0xeb, 0x61, 0xb8, 0x41, 0xad, 0x23, 0x88, - 0x98, 0x22, 0xfb, 0x28, 0x12, 0xc9, 0x42, 0xdb, 0x41, 0x98, 0x89, 0xa2, 0x68, 0xc0, 0x30, 0xb8, - 0x1b, 0x17, 0xbb, 0x53, 0xc9, 0x30, 0xb8, 0x39, 0xb4, 0x5b, 0xa0, 0x30, 0xd8, 0x1a, 0x14, 0xbb, - 0x63, 0x98, 0x98, 0x28, 0xba, 0x63, 0xa0, 0x09, 0x18, 0xb0, 0x59, 0x93, 0xbf, 0x36, 0xca, 0x48, - 0xb0, 0x29, 0x84, 0x0a, 0xa8, 0x28, 0x81, 0x18, 0xa9, 0x37, 0xdc, 0x28, 0x02, 0x19, 0xc1, 0x2a, - 0xa3, 0x1e, 0x94, 0x3b, 0xc3, 0x1b, 0x22, 0xb1, 0x8b, 0x30, 0xb3, 0x29, 0xda, 0x38, 0x82, 0x16, - 0x9d, 0x21, 0xf8, 0x3a, 0x07, 0xab, 0x21, 0xc0, 0x58, 0xa2, 0x8c, 0x13, 0xbb, 0x34, 0xcb, 0x62, - 0xb8, 0x19, 0x11, 0xba, 0x51, 0x81, 0xa9, 0x99, 0x58, 0x91, 0x22, 0xdc, 0x31, 0xf0, 0x6a, 0xb2, - 0x2a, 0x81, 0x89, 0x01, 0x89, 0x00, 0x29, 0xc1, 0x7a, 0xc1, 0x29, 0x81, 0x8a, 0x32, 0xa8, 0xb0, - 0x1d, 0x85, 0x28, 0xb9, 0x28, 0xb6, 0x1f, 0x84, 0x8a, 0x23, 0xeb, 0x30, 0xb1, 0x1b, 0x17, 0xbb, - 0x41, 0xa1, 0x8c, 0x13, 0x08, 0x00, 0xba, 0x19, 0x24, 0xeb, 0x41, 0x90, 0xb0, 0x3c, 0x85, 0x09, - 0xb8, 0x38, 0xc1, 0x28, 0x32, 0xf9, 0x31, 0xbb, 0x98, 0x70, 0xa4, 0x8c, 0x13, 0xab, 0x14, 0x0a, - 0x00, 0xd1, 0x2c, 0x13, 0xa1, 0x9a, 0x02, 0x9c, 0x07, 0x0c, 0x03, 0xa8, 0x2b, 0x13, 0xd0, 0x1d, - 0x84, 0x90, 0x09, 0x22, 0xf9, 0x49, 0xa1, 0x19, 0x81, 0x18, 0xa0, 0xaa, 0x53, 0x9a, 0x17, 0xdb, - 0x30, 0x82, 0x9c, 0x18, 0x44, 0xd8, 0x98, 0x28, 0x80, 0x83, 0x2c, 0xc3, 0x1d, 0x14, 0xaa, 0x01, - 0x99, 0x01, 0x11, 0xa2, 0xbf, 0x45, 0xb9, 0x18, 0x10, 0xb1, 0x2d, 0x93, 0x0a, 0x12, 0x90, 0x48, - 0xf3, 0x8f, 0x14, 0x99, 0x20, 0xc8, 0x58, 0xc1, 0x2a, 0x12, 0xbb, 0x72, 0xc8, 0x00, 0x10, 0x90, - 0x09, 0x00, 0x89, 0x32, 0xaa, 0x11, 0xb9, 0x6a, 0xa5, 0x9e, 0x34, 0xb9, 0x10, 0xa8, 0x29, 0x93, - 0x20, 0xeb, 0x53, 0xc9, 0x2a, 0x16, 0xac, 0x31, 0x89, 0x90, 0x18, 0x91, 0x09, 0x00, 0x58, 0xf1, - 0x69, 0xc8, 0x38, 0x91, 0x19, 0xb1, 0x0b, 0x62, 0x91, 0x0a, 0xaa, 0x41, 0xb1, 0x4a, 0xa3, 0x29, - 0xdc, 0x60, 0x90, 0x98, 0x61, 0xd8, 0x2a, 0x13, 0xb9, 0x19, 0x83, 0x0c, 0x14, 0x9a, 0xa8, 0x38, - 0x15, 0xe9, 0x39, 0xc3, 0x2c, 0x94, 0x2a, 0x02, 0xae, 0x22, 0x08, 0x1c, 0x85, 0x89, 0x88, 0x99, - 0x42, 0x88, 0x20, 0xbd, 0x22, 0x9b, 0x03, 0x32, 0xd2, 0x8e, 0x12, 0xa0, 0x1b, 0x05, 0x81, 0x8d, - 0x82, 0x00, 0x9d, 0x27, 0xca, 0x40, 0xc1, 0x2b, 0x04, 0x9b, 0x14, 0xaa, 0x18, 0x83, 0x9a, 0x01, - 0x99, 0x23, 0xa8, 0x9d, 0x64, 0xb9, 0x28, 0x01, 0xb9, 0x21, 0xaa, 0x62, 0xa0, 0x19, 0x08, 0xa0, - 0x1a, 0x14, 0x9a, 0x10, 0x98, 0x21, 0x89, 0x78, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, - 0x60, 0x14, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0xf7, 0x8f, 0x77, 0x8a, 0x77, 0x91, 0x88, 0x1b, - 0x86, 0x10, 0xfb, 0x18, 0xa2, 0x5b, 0xd0, 0x30, 0x98, 0x10, 0x0c, 0xd2, 0x1b, 0x80, 0x38, 0xc3, - 0x28, 0x9b, 0x27, 0x8a, 0x83, 0x09, 0x9c, 0x92, 0x58, 0xba, 0x88, 0x47, 0x19, 0xd8, 0x41, 0x8a, - 0x04, 0x80, 0xad, 0x00, 0x20, 0x09, 0x81, 0x90, 0x8f, 0x82, 0x11, 0x8d, 0x02, 0x81, 0x92, 0x8e, - 0x91, 0x40, 0xc0, 0x79, 0x80, 0x99, 0x11, 0x89, 0xc0, 0x38, 0x20, 0x37, 0xc9, 0xba, 0x51, 0x99, - 0x12, 0x91, 0x2b, 0xfa, 0x31, 0x88, 0x89, 0xb0, 0x3b, 0xc1, 0x31, 0x63, 0xb8, 0xf1, 0x3d, 0xa2, - 0x30, 0x99, 0xa0, 0x11, 0x2a, 0x9b, 0x17, 0x0f, 0x02, 0x10, 0x91, 0x9b, 0x58, 0x01, 0xb1, 0x8d, - 0x88, 0x28, 0xa3, 0x11, 0x89, 0x39, 0xf8, 0x28, 0xbd, 0x12, 0x01, 0x47, 0xcc, 0x80, 0x20, 0x30, - 0xa2, 0xba, 0x0e, 0x25, 0x99, 0x01, 0xba, 0x30, 0x19, 0x95, 0x9c, 0x71, 0xb8, 0x11, 0x8d, 0x83, - 0x59, 0x92, 0x08, 0xca, 0x31, 0x10, 0xd2, 0x8b, 0x0a, 0x04, 0x0c, 0x81, 0xbc, 0x44, 0x30, 0xfb, - 0x10, 0x9b, 0x21, 0x10, 0xb2, 0x8f, 0x03, 0x54, 0xc8, 0x88, 0x89, 0x24, 0x98, 0x19, 0x91, 0x88, - 0x18, 0x29, 0xb7, 0x0f, 0x02, 0x08, 0xb8, 0x3c, 0x94, 0x28, 0xa0, 0x00, 0xac, 0x22, 0x11, 0x01, - 0x9c, 0xb2, 0x2d, 0xa3, 0x1a, 0x30, 0xd4, 0x8d, 0x21, 0xd8, 0x1a, 0x14, 0x1b, 0x27, 0x8b, 0xa8, - 0x12, 0x3a, 0x27, 0xc0, 0xaa, 0x9c, 0x31, 0x22, 0x94, 0x9b, 0x0d, 0x95, 0x1a, 0x92, 0x8a, 0x14, - 0x38, 0xd0, 0x20, 0x9e, 0x11, 0x43, 0xdb, 0x18, 0x10, 0xb9, 0x28, 0xa1, 0xad, 0x34, 0xaa, 0xa4, - 0x0f, 0x92, 0x60, 0x82, 0x9a, 0x18, 0x81, 0x01, 0x34, 0xcb, 0x03, 0xbf, 0x81, 0x42, 0x80, 0x98, - 0x1a, 0xe2, 0x1d, 0x84, 0x30, 0xa1, 0xaa, 0x9c, 0x82, 0x5c, 0x84, 0xa9, 0x9b, 0x14, 0x08, 0xab, - 0x09, 0x04, 0x3c, 0x05, 0x02, 0x8f, 0x81, 0x10, 0x90, 0x30, 0xb0, 0x49, 0x04, 0x18, 0xf8, 0x19, - 0xba, 0x19, 0x30, 0x96, 0x49, 0xf9, 0x89, 0x31, 0xa8, 0x09, 0x02, 0x3a, 0x84, 0x31, 0x90, 0xac, - 0x48, 0x93, 0x58, 0x93, 0x4c, 0xb4, 0x9a, 0xdd, 0x38, 0x02, 0xa0, 0x0d, 0x08, 0x82, 0x48, 0x80, - 0xc9, 0x40, 0x10, 0xe3, 0x48, 0xa0, 0x99, 0x2a, 0x04, 0xa8, 0x49, 0x17, 0xc9, 0x18, 0xa9, 0x13, - 0x98, 0xba, 0x0e, 0x14, 0x10, 0xac, 0x88, 0x52, 0x99, 0x01, 0x80, 0x80, 0xad, 0x46, 0x90, 0x0a, - 0x88, 0x53, 0xeb, 0x29, 0x01, 0x40, 0x90, 0x81, 0x0c, 0xc3, 0x0a, 0xab, 0x84, 0x38, 0xdb, 0x33, - 0x52, 0xa8, 0xb9, 0x0c, 0x12, 0x91, 0x18, 0x28, 0x82, 0x0c, 0xe6, 0x4d, 0x83, 0x8b, 0x11, 0x8c, - 0x13, 0x00, 0x99, 0x88, 0x9c, 0x73, 0xf0, 0x0b, 0x12, 0x02, 0x8a, 0x30, 0xb3, 0x1d, 0x80, 0x32, - 0xb8, 0xbc, 0x89, 0x41, 0x83, 0xac, 0x73, 0xb2, 0x5b, 0x86, 0x9b, 0x80, 0x09, 0x50, 0x83, 0xaa, - 0x8b, 0x90, 0xc1, 0x0f, 0x14, 0x20, 0xea, 0x18, 0x22, 0xd9, 0x88, 0x63, 0xa8, 0x99, 0x09, 0x21, - 0x34, 0xd8, 0x9b, 0x81, 0x52, 0x98, 0x22, 0xbd, 0x80, 0x50, 0xa0, 0x21, 0xbb, 0x98, 0x78, 0x94, - 0x9e, 0x22, 0x21, 0xd0, 0x0c, 0x12, 0x98, 0x28, 0xc0, 0x38, 0x80, 0xc9, 0x2b, 0x27, 0x98, 0x89, - 0x54, 0xd9, 0x89, 0x30, 0xa4, 0x19, 0x90, 0xae, 0x12, 0x89, 0x42, 0x81, 0xca, 0x08, 0x32, 0xea, - 0x29, 0x11, 0x40, 0xb8, 0x98, 0x3c, 0x84, 0x10, 0xa8, 0x2a, 0xf2, 0x48, 0x32, 0xc3, 0xaf, 0x38, - 0x92, 0x28, 0xbb, 0x20, 0x31, 0x24, 0xfe, 0x09, 0x20, 0x83, 0x8b, 0xb0, 0x9d, 0x61, 0x04, 0xa9, - 0x89, 0x99, 0x65, 0x91, 0x9a, 0x89, 0x32, 0xb2, 0x0b, 0xaa, 0x35, 0x02, 0xa9, 0xaa, 0x29, 0x80, - 0x42, 0xa4, 0xff, 0x28, 0x22, 0xa1, 0xdb, 0x29, 0x06, 0x9b, 0x02, 0x1b, 0xa2, 0x20, 0x21, 0xea, - 0x99, 0x71, 0xb0, 0x00, 0x28, 0x82, 0x10, 0x88, 0xfe, 0x3a, 0x17, 0x98, 0x9b, 0x20, 0x08, 0x00, - 0x11, 0x94, 0x8e, 0x82, 0x09, 0x28, 0x81, 0x80, 0x9a, 0xba, 0x81, 0x2d, 0xb5, 0x4a, 0x99, 0x03, - 0x1c, 0xc2, 0x39, 0x99, 0x57, 0xca, 0x21, 0x98, 0xb9, 0x78, 0xa4, 0x3a, 0xb3, 0x2a, 0xd9, 0x48, - 0x10, 0x11, 0x11, 0xef, 0x29, 0x13, 0x88, 0xba, 0x00, 0x00, 0x88, 0x81, 0x8a, 0x02, 0x52, 0xa2, - 0xcf, 0x90, 0x50, 0x85, 0xa9, 0x8b, 0x04, 0x49, 0x04, 0xa9, 0x8b, 0x33, 0x80, 0xdc, 0x40, 0x02, - 0x08, 0xba, 0xbb, 0xcc, 0x71, 0x94, 0x18, 0xa9, 0x89, 0x22, 0xb8, 0x0c, 0x10, 0x25, 0x08, 0xc8, - 0x30, 0xda, 0x52, 0x91, 0x89, 0x98, 0xab, 0x64, 0x80, 0x08, 0x81, 0x88, 0xcd, 0x01, 0x1a, 0x37, - 0xb8, 0x9e, 0x00, 0x32, 0xb0, 0x3b, 0x86, 0xad, 0x28, 0x25, 0xb9, 0x89, 0x11, 0x00, 0xb9, 0x29, - 0x32, 0xc8, 0x61, 0xb8, 0x39, 0xa3, 0x8d, 0x26, 0x9c, 0x23, 0x99, 0x88, 0xb9, 0x09, 0x9f, 0x57, - 0xb8, 0x89, 0x11, 0x90, 0x10, 0x11, 0xc8, 0xcd, 0x40, 0x02, 0x00, 0xc9, 0x1a, 0x83, 0x00, 0x98, - 0x98, 0x20, 0x36, 0x88, 0xe9, 0x9d, 0x32, 0x22, 0x12, 0xcb, 0xae, 0x10, 0x73, 0x92, 0x8b, 0xb8, - 0x09, 0x32, 0x01, 0xa9, 0xa9, 0x78, 0xc8, 0x09, 0xaa, 0x74, 0x82, 0xb9, 0x8c, 0x21, 0x30, 0x15, - 0xc9, 0xac, 0x41, 0x82, 0x11, 0xba, 0x9b, 0x30, 0x47, 0xc8, 0x8c, 0x10, 0x04, 0x08, 0x80, 0xea, - 0x1a, 0x24, 0x10, 0xa9, 0x8a, 0xaa, 0x61, 0x92, 0x88, 0x18, 0xc1, 0x9a, 0x40, 0xa3, 0x9f, 0x63, - 0xa0, 0x0a, 0x9a, 0x53, 0x01, 0x9a, 0x91, 0x9d, 0x33, 0x8a, 0x43, 0xa0, 0xae, 0x31, 0x18, 0x82, - 0xcd, 0x28, 0x41, 0x94, 0x9e, 0x00, 0x10, 0x11, 0x18, 0xd1, 0x9c, 0x29, 0x17, 0x8b, 0x03, 0xcb, - 0x1a, 0x25, 0xa8, 0x08, 0x10, 0x04, 0xae, 0x28, 0x13, 0xba, 0x68, 0xa1, 0x08, 0xac, 0x13, 0x40, - 0xf1, 0x0a, 0x21, 0x93, 0x8b, 0x88, 0x15, 0x8b, 0x04, 0x9c, 0xd8, 0x48, 0x91, 0x58, 0xb2, 0xac, - 0x18, 0x17, 0x98, 0xa0, 0x8a, 0x22, 0x00, 0x00, 0x8a, 0x88, 0x09, 0x57, 0xc9, 0x0b, 0x04, 0x28, - 0x90, 0x08, 0xfb, 0x18, 0x35, 0xe8, 0x8a, 0x01, 0x21, 0xa1, 0x99, 0x19, 0xb1, 0x72, 0xa8, 0xa8, - 0x89, 0x72, 0x05, 0x99, 0x9b, 0x11, 0x12, 0xab, 0x04, 0x9e, 0x23, 0x1a, 0x94, 0xab, 0x9b, 0x42, - 0x10, 0x05, 0xae, 0x31, 0xb1, 0x19, 0xa2, 0x89, 0x89, 0x05, 0xbc, 0x51, 0xa2, 0x2b, 0x16, 0xba, - 0x90, 0x79, 0x83, 0xd8, 0x0b, 0x83, 0xca, 0x72, 0x91, 0xb8, 0x59, 0xa1, 0x2a, 0x93, 0x2a, 0x98, - 0x45, 0xcb, 0x10, 0x99, 0x89, 0x58, 0x27, 0xdb, 0x28, 0xb8, 0x49, 0x03, 0x99, 0x09, 0xa1, 0x0b, - 0x12, 0x18, 0xc8, 0x40, 0x91, 0xae, 0x11, 0x2a, 0x06, 0x80, 0x88, 0x08, 0x03, 0x63, 0xfa, 0x39, - 0x92, 0x51, 0xea, 0x10, 0x08, 0x90, 0x18, 0xa0, 0x9b, 0x08, 0x38, 0xf2, 0x50, 0xd1, 0x1c, 0x84, - 0x8c, 0x14, 0x80, 0x89, 0x81, 0x1b, 0x93, 0x0c, 0x07, 0x9b, 0x44, 0xb8, 0x09, 0xa8, 0x40, 0x13, - 0xeb, 0x89, 0x00, 0x20, 0x84, 0x9b, 0xac, 0x73, 0xc2, 0x19, 0x91, 0x8a, 0x44, 0xa9, 0x99, 0x0a, - 0x24, 0x81, 0x19, 0xf2, 0x0d, 0x25, 0x90, 0x8a, 0x98, 0x59, 0x82, 0x98, 0xac, 0x40, 0x92, 0x98, - 0x29, 0x97, 0x8d, 0x12, 0x80, 0xb9, 0x20, 0x01, 0x00, 0xaa, 0x8a, 0x05, 0xaf, 0x33, 0x81, 0xa0, - 0x3a, 0xb2, 0x3a, 0x73, 0xc1, 0x8d, 0x63, 0xa0, 0x89, 0x99, 0x20, 0x32, 0xa0, 0xbc, 0x9b, 0x52, - 0x26, 0xa1, 0xcf, 0x10, 0x32, 0xb0, 0xac, 0x21, 0x80, 0x31, 0xa5, 0xbf, 0x30, 0x23, 0x81, 0xdc, - 0x18, 0x02, 0x18, 0x25, 0xea, 0x8b, 0x53, 0x81, 0xb9, 0x1b, 0x13, 0x19, 0x83, 0xae, 0x08, 0x12, - 0x1a, 0x13, 0x99, 0xcf, 0x50, 0x03, 0xcc, 0x21, 0x98, 0x31, 0xb1, 0x8b, 0x28, 0x93, 0x9b, 0x28, - 0x07, 0x9f, 0x63, 0xb0, 0x8a, 0x02, 0x89, 0x32, 0x00, 0xd0, 0xac, 0x31, 0xb1, 0x61, 0xa1, 0x8c, - 0x11, 0x89, 0x33, 0xf9, 0x89, 0x29, 0x07, 0xa9, 0x8a, 0x16, 0x89, 0x98, 0x81, 0x9a, 0x32, 0x30, - 0xd1, 0x58, 0xb8, 0x88, 0x1b, 0x92, 0x49, 0x16, 0x98, 0xc9, 0x0d, 0x23, 0x91, 0x09, 0x83, 0x8c, - 0xf0, 0x3a, 0x14, 0xa8, 0x8c, 0x90, 0x63, 0xc8, 0x48, 0x93, 0xcc, 0x38, 0x05, 0xab, 0x10, 0x81, - 0x38, 0x22, 0xf0, 0x8e, 0x32, 0xa9, 0x53, 0xb0, 0x9d, 0x00, 0x23, 0xa0, 0x8a, 0xc0, 0x19, 0x17, - 0xa9, 0x0a, 0x02, 0x23, 0xaa, 0xd9, 0x58, 0xa0, 0x41, 0xa8, 0xba, 0x4b, 0x27, 0x99, 0x89, 0x00, - 0x8e, 0x34, 0x81, 0xda, 0x1a, 0x22, 0x83, 0xbd, 0x33, 0xb9, 0x9c, 0x24, 0x89, 0x01, 0x0a, 0x15, - 0xaa, 0xeb, 0x40, 0x81, 0x98, 0x19, 0x17, 0xec, 0x20, 0x21, 0xa8, 0x19, 0x88, 0x99, 0x50, 0x94, - 0x1a, 0xa1, 0x8c, 0x26, 0xcc, 0x28, 0x12, 0x18, 0x93, 0xbf, 0x38, 0x13, 0xa9, 0x0b, 0x21, 0xd1, - 0x6a, 0xa2, 0xaa, 0x19, 0x14, 0x11, 0xa2, 0xdf, 0x28, 0x24, 0xc9, 0x18, 0x81, 0x99, 0x18, 0x15, - 0x19, 0xe9, 0x48, 0xa2, 0x9b, 0x28, 0x14, 0x13, 0xfc, 0x1b, 0x01, 0x23, 0xa9, 0x9a, 0x40, 0xb1, - 0x8c, 0x43, 0xb8, 0x18, 0x13, 0x01, 0xfb, 0x0b, 0x02, 0x58, 0x15, 0xc9, 0x0c, 0x22, 0x98, 0x2a, - 0x86, 0x9a, 0x01, 0xc9, 0x5a, 0x05, 0xac, 0x11, 0x91, 0xa8, 0x9b, 0x47, 0xa1, 0x8b, 0x00, 0x12, - 0xc9, 0x0b, 0x45, 0xa8, 0x8c, 0x42, 0x98, 0x80, 0xaa, 0x40, 0x05, 0xba, 0x8b, 0x35, 0xa0, 0x0b, - 0x05, 0x98, 0xac, 0x12, 0x31, 0xb1, 0x9e, 0x21, 0x41, 0xd8, 0x0a, 0x14, 0xc8, 0x2b, 0x83, 0x19, - 0x82, 0xaa, 0x23, 0xcf, 0x35, 0xa9, 0x98, 0x29, 0x13, 0x09, 0xdb, 0x64, 0xc8, 0x0a, 0x32, 0x01, - 0xb9, 0x0c, 0x91, 0x3a, 0xa5, 0x2c, 0x87, 0x9b, 0x99, 0x62, 0x03, 0xbd, 0x48, 0x91, 0x88, 0x30, - 0xd1, 0x19, 0xc0, 0x60, 0x91, 0xa9, 0x1a, 0x32, 0x92, 0xaf, 0x21, 0x13, 0xab, 0x18, 0x80, 0x9a, - 0x31, 0x37, 0xfa, 0x0b, 0x32, 0x03, 0xba, 0x00, 0xaf, 0x51, 0x83, 0xbb, 0x19, 0x03, 0x1b, 0x07, - 0xa9, 0x8e, 0x23, 0x08, 0x80, 0x8b, 0x80, 0x10, 0x10, 0x01, 0xd9, 0xcd, 0x62, 0x81, 0xa9, 0x29, - 0x32, 0x96, 0xae, 0x52, 0xb9, 0x00, 0x30, 0x83, 0xab, 0x8c, 0x25, 0xa8, 0x8c, 0x31, 0x81, 0xbc, - 0x62, 0xa1, 0x8f, 0x21, 0x81, 0x88, 0xac, 0x22, 0x08, 0x15, 0xda, 0x19, 0x04, 0xab, 0x52, 0x91, - 0xab, 0x18, 0x44, 0xb0, 0xab, 0x39, 0x47, 0xb8, 0x9a, 0x10, 0x10, 0x90, 0x19, 0x83, 0xcf, 0x40, - 0x12, 0xb9, 0x9f, 0x63, 0x90, 0xaa, 0x08, 0x19, 0x02, 0x62, 0xc0, 0x9a, 0x21, 0x88, 0x14, 0xa8, - 0xca, 0x30, 0x34, 0xea, 0x2a, 0x01, 0x00, 0x09, 0x91, 0xac, 0x00, 0x73, 0xc0, 0x18, 0x18, 0xf9, - 0x19, 0x02, 0x41, 0xb1, 0x0c, 0x80, 0x93, 0x9f, 0x43, 0x88, 0xb9, 0x20, 0x82, 0x98, 0x0d, 0x26, - 0x82, 0xcd, 0x19, 0x31, 0xb1, 0x60, 0xa0, 0xa9, 0xa9, 0x52, 0xa2, 0x0b, 0xa1, 0x7a, 0x04, 0xdc, - 0x28, 0x01, 0x11, 0xb8, 0x0a, 0x83, 0xab, 0x73, 0x82, 0xc0, 0x9e, 0x53, 0x90, 0x8b, 0x00, 0x21, - 0x02, 0xcd, 0x28, 0x01, 0x89, 0x32, 0x91, 0xbd, 0x1a, 0x26, 0xb8, 0x09, 0x21, 0xa0, 0x80, 0x9a, - 0xfb, 0x79, 0x83, 0x08, 0x88, 0xd9, 0x0b, 0x33, 0x54, 0xe0, 0x1a, 0x01, 0x9a, 0x62, 0xb0, 0x8b, - 0x32, 0xaa, 0x83, 0x8e, 0x22, 0x14, 0x8a, 0xa3, 0xbf, 0x08, 0x63, 0x83, 0x9c, 0x99, 0x22, 0x11, - 0xf9, 0x49, 0x91, 0x1b, 0x03, 0xa9, 0x9a, 0x9a, 0x77, 0xc0, 0x1a, 0xa1, 0x38, 0x33, 0xfa, 0x18, - 0x99, 0x32, 0x91, 0x88, 0x9a, 0x90, 0x70, 0x82, 0xbc, 0x09, 0x44, 0xb0, 0x30, 0xfb, 0x18, 0x10, - 0x11, 0xa0, 0x0c, 0x81, 0x29, 0x35, 0xf9, 0x1a, 0x01, 0x19, 0x00, 0xc0, 0x29, 0x9b, 0x47, 0xb0, - 0x8b, 0x20, 0x83, 0x29, 0xc8, 0x91, 0x4b, 0x93, 0x38, 0xfa, 0xa0, 0x3b, 0x36, 0x02, 0xde, 0x28, - 0x02, 0x00, 0xba, 0x10, 0xa0, 0x38, 0x21, 0x94, 0xcf, 0x28, 0x86, 0x09, 0xa0, 0x8d, 0x44, 0xb0, - 0x0b, 0x03, 0x9b, 0x41, 0x11, 0xb1, 0x9f, 0x48, 0x84, 0x8a, 0x81, 0xab, 0x30, 0x17, 0x9b, 0x00, - 0x8c, 0x13, 0x18, 0xca, 0x33, 0xaf, 0x44, 0xa8, 0xab, 0x31, 0xa1, 0x50, 0x80, 0xe9, 0x38, 0x80, - 0x02, 0xb8, 0x3b, 0xb0, 0x61, 0x83, 0xbf, 0x42, 0x99, 0x10, 0x03, 0xae, 0x89, 0x72, 0x82, 0xab, - 0x10, 0x8a, 0x01, 0x04, 0x09, 0xe8, 0x59, 0xa2, 0x1a, 0x92, 0xca, 0x51, 0x91, 0x99, 0x9c, 0x64, - 0xa0, 0x09, 0x81, 0xc9, 0x10, 0x11, 0x12, 0xeb, 0x39, 0x06, 0x9c, 0x20, 0x80, 0x88, 0x91, 0x89, - 0x33, 0xaa, 0xfa, 0x71, 0xa1, 0x0b, 0x20, 0x03, 0xae, 0x08, 0x53, 0xc8, 0x28, 0xa0, 0x21, 0xdb, - 0x11, 0x38, 0xb1, 0x8a, 0x8a, 0x34, 0x81, 0x09, 0x41, 0xf2, 0x0f, 0x21, 0x01, 0x99, 0xab, 0x63, - 0xb1, 0x2d, 0xa4, 0x3b, 0x92, 0x8b, 0x21, 0xac, 0x13, 0x21, 0xa1, 0xbf, 0x32, 0x28, 0xe0, 0x4a, - 0x92, 0x0b, 0x32, 0xa2, 0xdf, 0x49, 0x13, 0x9a, 0x11, 0xe8, 0x48, 0x91, 0x1b, 0xa2, 0x10, 0x8c, - 0x12, 0x51, 0xf0, 0x2b, 0x93, 0x18, 0xba, 0x58, 0x02, 0xd8, 0x3a, 0xa3, 0x90, 0x0f, 0x05, 0x0a, - 0x90, 0x1b, 0x86, 0x28, 0xc0, 0x28, 0x88, 0xaa, 0x63, 0x90, 0x90, 0xac, 0x43, 0xe9, 0x21, 0x91, - 0x89, 0xa1, 0x3a, 0x87, 0x9d, 0x33, 0x89, 0x88, 0x9a, 0x0a, 0x35, 0x08, 0x22, 0xed, 0x20, 0xa1, - 0x20, 0xc2, 0x8c, 0x02, 0x40, 0xc2, 0xae, 0x31, 0xa3, 0x0b, 0x23, 0x8b, 0xa1, 0x2a, 0x93, 0x23, - 0x8d, 0xe8, 0x65, 0xd8, 0x19, 0x11, 0x88, 0x90, 0x0a, 0x23, 0xac, 0x34, 0x89, 0xa2, 0xbf, 0x39, - 0x15, 0x88, 0xa8, 0xaa, 0x22, 0x51, 0xd9, 0x20, 0x90, 0x9a, 0x57, 0xd9, 0x1a, 0x21, 0x82, 0x8a, - 0xa8, 0x19, 0x41, 0x25, 0xc9, 0xbd, 0x72, 0x91, 0x89, 0x80, 0xca, 0x51, 0x81, 0x90, 0xab, 0x20, - 0x40, 0xb3, 0x8c, 0xb0, 0x71, 0x82, 0xcb, 0x31, 0xd8, 0x41, 0xa8, 0x29, 0x98, 0x80, 0x58, 0x84, - 0x9c, 0x98, 0x41, 0x80, 0xa8, 0x8b, 0x14, 0x81, 0x9b, 0x44, 0xd8, 0xac, 0x73, 0xa0, 0x80, 0x08, - 0x81, 0x0b, 0x04, 0x9c, 0x43, 0x99, 0x8a, 0x32, 0xc9, 0x01, 0xac, 0x74, 0xb1, 0x99, 0x88, 0x48, - 0x86, 0x9b, 0x92, 0x1a, 0x13, 0x99, 0xb1, 0x8c, 0x1a, 0x57, 0x08, 0xdc, 0x28, 0x05, 0x88, 0x99, - 0x8a, 0x22, 0x22, 0xc9, 0x98, 0x89, 0x54, 0xb0, 0x38, 0xfa, 0x39, 0x14, 0xa9, 0xa9, 0x3a, 0x04, - 0xa0, 0x2a, 0xd1, 0x49, 0xa2, 0x8b, 0x22, 0xa1, 0x1e, 0x05, 0xaa, 0x0b, 0x16, 0xa9, 0x80, 0x48, - 0x91, 0x10, 0xe9, 0x41, 0x90, 0x30, 0xdd, 0x21, 0x11, 0xc8, 0x18, 0xfa, 0x30, 0x83, 0x88, 0xa0, - 0xbf, 0x53, 0x92, 0x89, 0xab, 0x02, 0x51, 0x91, 0x0b, 0xd1, 0x49, 0x01, 0x93, 0xaf, 0x23, 0x98, - 0x30, 0xd0, 0x9b, 0x23, 0x50, 0xb3, 0x9f, 0x08, 0x25, 0xa9, 0x99, 0x0a, 0x24, 0x01, 0xba, 0xaa, - 0x3a, 0x37, 0x80, 0xca, 0xab, 0x72, 0x82, 0x98, 0xa8, 0x19, 0x43, 0xb1, 0x0a, 0xc9, 0x61, 0xb2, - 0x0a, 0x20, 0xc9, 0x45, 0xba, 0x09, 0x1b, 0x27, 0x9a, 0x98, 0x18, 0x19, 0x87, 0x8b, 0x92, 0x2c, - 0x86, 0xab, 0x20, 0x02, 0x9a, 0x15, 0x9c, 0xa2, 0x61, 0xa9, 0x80, 0x2a, 0x17, 0xaa, 0xb3, 0x1e, - 0x12, 0x02, 0x80, 0xbd, 0x1a, 0x12, 0x31, 0x83, 0xdf, 0x28, 0x11, 0xa1, 0x8c, 0x21, 0x85, 0x8d, - 0x83, 0xa9, 0x28, 0x13, 0xa8, 0x9a, 0x09, 0x27, 0x0d, 0x83, 0xac, 0x33, 0x89, 0x00, 0xb8, 0x8f, - 0x35, 0xa0, 0x8a, 0xb9, 0x78, 0x81, 0xb8, 0x29, 0x15, 0xda, 0x5a, 0xc3, 0x2a, 0x03, 0x8a, 0x89, - 0x98, 0x49, 0x17, 0xab, 0x98, 0x30, 0x06, 0xcc, 0x20, 0x01, 0x98, 0x81, 0x10, 0xec, 0x31, 0x08, - 0x03, 0xeb, 0x19, 0x23, 0xa1, 0x0c, 0x92, 0x81, 0x40, 0xfb, 0x29, 0x24, 0xb0, 0x1a, 0xa8, 0x18, - 0x82, 0x88, 0x42, 0xfc, 0x39, 0x82, 0x91, 0xac, 0x38, 0x16, 0xbb, 0x21, 0xa8, 0x38, 0xa9, 0x57, - 0xc0, 0x0a, 0x80, 0x38, 0x02, 0x08, 0x99, 0xf9, 0x5d, 0x94, 0x0a, 0xa0, 0x20, 0xc9, 0x58, 0xa0, - 0x18, 0x31, 0xc0, 0x88, 0x9e, 0x21, 0x24, 0xb0, 0x9c, 0x92, 0x10, 0x98, 0x32, 0xa4, 0x8f, 0x28, - 0xa3, 0x28, 0xba, 0x36, 0xab, 0x05, 0xaf, 0x31, 0x88, 0x00, 0x20, 0xd1, 0x8a, 0xb9, 0x70, 0x85, - 0x99, 0x00, 0x99, 0x80, 0x0c, 0x37, 0xc0, 0x8a, 0x29, 0x83, 0x1a, 0x01, 0x80, 0x00, 0x9a, 0xce, - 0x41, 0x83, 0x9a, 0x44, 0xdb, 0x88, 0x2a, 0x16, 0x98, 0x8a, 0x11, 0x98, 0x88, 0x9b, 0x25, 0x61, - 0xd2, 0x8d, 0x11, 0x88, 0x31, 0xa2, 0x8b, 0xca, 0x30, 0x83, 0x98, 0x09, 0x16, 0xac, 0x13, 0xbc, - 0x00, 0x76, 0xd2, 0x1a, 0xa1, 0x09, 0x23, 0xa1, 0x9c, 0x32, 0x98, 0xea, 0x51, 0xa9, 0x52, 0xa8, - 0xa8, 0x09, 0x10, 0x42, 0x12, 0xf0, 0x0f, 0x03, 0x89, 0x01, 0x18, 0xba, 0x31, 0xc9, 0x38, 0xa2, - 0x52, 0xeb, 0x38, 0xa1, 0x2b, 0x16, 0xaa, 0x08, 0x12, 0x08, 0xc9, 0x81, 0x68, 0x91, 0x11, 0xcf, - 0x28, 0x22, 0x02, 0xdb, 0x99, 0x21, 0x02, 0xd8, 0x4a, 0x92, 0x8b, 0x34, 0xe1, 0x8d, 0x34, 0x80, - 0xaa, 0x8b, 0x29, 0x17, 0x08, 0x80, 0xbd, 0x32, 0x88, 0xa1, 0x2b, 0x27, 0xdb, 0x50, 0xb0, 0x09, - 0x01, 0x01, 0x80, 0xac, 0x31, 0x80, 0x23, 0xfb, 0x79, 0x91, 0x9c, 0x22, 0x99, 0x01, 0x00, 0xa0, - 0xad, 0x50, 0x93, 0x1b, 0xb2, 0x1c, 0x34, 0x91, 0x9f, 0x11, 0x00, 0x83, 0x9f, 0x01, 0x09, 0x53, - 0xe0, 0x2a, 0x83, 0x8a, 0x08, 0x92, 0x9e, 0x44, 0x80, 0xba, 0x89, 0x38, 0x34, 0xa3, 0xcf, 0x10, - 0x11, 0x91, 0x10, 0xb9, 0x2b, 0x04, 0xc8, 0x29, 0x99, 0x14, 0x50, 0xd1, 0x9c, 0x30, 0x12, 0x11, - 0xfa, 0x2c, 0x82, 0x40, 0xb0, 0x9b, 0x18, 0x35, 0x8a, 0xf9, 0x48, 0x81, 0x29, 0xa1, 0x8c, 0x09, - 0x13, 0x80, 0x0b, 0x83, 0x9c, 0x02, 0x42, 0x9b, 0x47, 0xeb, 0x1a, 0x02, 0x30, 0xc0, 0x89, 0xa8, - 0x20, 0x27, 0xcb, 0x21, 0x9b, 0x21, 0x25, 0xcb, 0x20, 0x10, 0xa1, 0xdb, 0x29, 0x00, 0x44, 0xc8, - 0x99, 0x5b, 0x94, 0x39, 0xf8, 0x18, 0x91, 0x31, 0xca, 0x8a, 0x35, 0x9c, 0x04, 0x9a, 0xba, 0x45, - 0x01, 0x99, 0x99, 0x8b, 0x38, 0x47, 0xbd, 0x41, 0x81, 0xaa, 0x28, 0x00, 0x01, 0x09, 0xb1, 0x1d, - 0x85, 0x8a, 0x50, 0xb1, 0x9c, 0x12, 0x32, 0xe9, 0x1a, 0x04, 0x1a, 0xe8, 0x29, 0x13, 0xc0, 0x2b, - 0x83, 0xab, 0x68, 0x91, 0x00, 0xaa, 0x72, 0x84, 0xac, 0x9a, 0x72, 0x02, 0x9a, 0x9b, 0x12, 0x8a, - 0x26, 0xc1, 0x0e, 0x02, 0x09, 0x22, 0xea, 0x19, 0x14, 0x99, 0xa0, 0x1c, 0x12, 0x10, 0x88, 0xc8, - 0x1c, 0x43, 0xa2, 0x9e, 0x02, 0x01, 0x22, 0xec, 0x09, 0x40, 0xb2, 0x40, 0xc9, 0x88, 0x11, 0x21, - 0xa2, 0x0c, 0xd9, 0x50, 0xb1, 0x2b, 0x12, 0x83, 0x9f, 0x91, 0x18, 0x19, 0x13, 0xb8, 0xbc, 0x70, - 0x83, 0x8b, 0xe1, 0x4a, 0x83, 0x98, 0x19, 0xc8, 0x70, 0xa2, 0x0b, 0x33, 0xd9, 0x09, 0x22, 0x80, - 0xd2, 0x2d, 0xa3, 0x9d, 0x02, 0x40, 0x83, 0xeb, 0x8b, 0x14, 0x82, 0x8c, 0x23, 0xba, 0x9b, 0x46, - 0xb2, 0x0d, 0x80, 0x41, 0xc0, 0x0a, 0x83, 0x28, 0x81, 0xa9, 0x30, 0xf8, 0x69, 0x92, 0x89, 0x8a, - 0x33, 0xa9, 0xaf, 0x33, 0x89, 0x42, 0xf8, 0x8b, 0x31, 0x01, 0x10, 0xc0, 0x1b, 0xc9, 0x64, 0xc9, - 0x20, 0x00, 0x91, 0x0b, 0x81, 0x48, 0x98, 0x92, 0x0c, 0x14, 0x9a, 0x31, 0xa4, 0xcf, 0x24, 0x98, - 0xa0, 0x8c, 0x12, 0x53, 0xd8, 0x88, 0x28, 0xd1, 0x29, 0x02, 0x89, 0x88, 0x31, 0xc0, 0x9c, 0x3a, - 0x67, 0x99, 0xaa, 0x28, 0x24, 0xb8, 0x8c, 0x22, 0x98, 0x23, 0x00, 0xcd, 0x99, 0x50, 0x22, 0xc3, - 0xbf, 0x31, 0x14, 0xab, 0x88, 0x31, 0xa9, 0x20, 0x90, 0x98, 0x4d, 0x06, 0xaa, 0xb9, 0x49, 0x16, - 0xa9, 0x09, 0x00, 0x10, 0x02, 0x88, 0xef, 0x31, 0x01, 0xb8, 0x29, 0xe8, 0x50, 0xa1, 0x09, 0xb8, - 0x52, 0xa9, 0x10, 0x02, 0xbc, 0x73, 0xb1, 0x89, 0x08, 0x82, 0x40, 0xa0, 0xca, 0x2d, 0x27, 0xab, - 0x08, 0x80, 0x02, 0x1a, 0x04, 0xcb, 0x89, 0x24, 0x98, 0x12, 0xcc, 0x28, 0x93, 0x8e, 0x14, 0x29, - 0xe0, 0x1b, 0x02, 0x31, 0xa9, 0x22, 0x9e, 0x02, 0x18, 0x00, 0xc8, 0x08, 0x38, 0xa6, 0x9f, 0x30, - 0x23, 0x91, 0xde, 0x29, 0x14, 0x98, 0x09, 0xb1, 0x0c, 0x25, 0x08, 0xdd, 0x30, 0x83, 0x80, 0xb9, - 0x09, 0x1a, 0x27, 0x08, 0xa8, 0xab, 0x38, 0x27, 0xd8, 0x8a, 0x21, 0x82, 0x28, 0xda, 0x80, 0x60, - 0xa2, 0x8d, 0x02, 0x9a, 0x11, 0x25, 0xec, 0x00, 0x20, 0x90, 0x08, 0x98, 0x10, 0x23, 0xa1, 0xcf, - 0x32, 0xb0, 0x2a, 0x25, 0xc9, 0x89, 0x08, 0x24, 0xad, 0x34, 0xab, 0x82, 0x0e, 0x04, 0x08, 0x08, - 0xca, 0x39, 0x22, 0xa2, 0xcb, 0x38, 0x13, 0xa3, 0xdf, 0x12, 0x99, 0x11, 0x48, 0xe2, 0x0b, 0x81, - 0x53, 0xa0, 0xaa, 0x3b, 0x07, 0x9a, 0x02, 0x99, 0x40, 0x85, 0xab, 0xea, 0x61, 0x80, 0x80, 0x08, - 0xb9, 0x4a, 0x06, 0x1b, 0xd1, 0x2a, 0x94, 0x09, 0x90, 0x18, 0xa1, 0x1a, 0x16, 0xcb, 0x18, 0x00, - 0x83, 0x49, 0xb2, 0x8f, 0x03, 0x09, 0x92, 0x28, 0xc8, 0x10, 0xa8, 0x38, 0x00, 0x06, 0x8f, 0x12, - 0x80, 0xbf, 0x53, 0xa1, 0x8b, 0x05, 0xa9, 0x19, 0x02, 0x14, 0xbe, 0x11, 0x21, 0xa9, 0x22, 0xfb, - 0x38, 0x90, 0x13, 0x8e, 0xc2, 0x3a, 0x04, 0x00, 0x98, 0xbd, 0x50, 0x02, 0x99, 0xa9, 0x34, 0xaa, - 0x84, 0x8d, 0x92, 0x69, 0x92, 0x08, 0xb9, 0xa9, 0x41, 0x35, 0xf9, 0x0b, 0x22, 0x01, 0xba, 0x90, - 0x38, 0x84, 0x88, 0x30, 0xde, 0x40, 0x92, 0x99, 0x01, 0xe8, 0x49, 0x94, 0x0b, 0x98, 0x63, 0xb0, - 0x1a, 0xa0, 0x58, 0x91, 0x08, 0xb0, 0x5b, 0xc2, 0x0a, 0x35, 0xca, 0x01, 0x29, 0xd9, 0x29, 0x13, - 0x10, 0xb8, 0x1a, 0xcf, 0x53, 0x82, 0xbd, 0x51, 0x91, 0xaa, 0x12, 0x00, 0x89, 0x03, 0xa9, 0xae, - 0x15, 0x18, 0x11, 0xe1, 0x8c, 0x28, 0x15, 0xaa, 0x0b, 0x33, 0x00, 0xa9, 0x1b, 0x23, 0xa9, 0x08, - 0x11, 0x28, 0xf8, 0x68, 0xa8, 0x11, 0xcf, 0x44, 0xa9, 0x09, 0x89, 0x17, 0x8a, 0x80, 0x98, 0x28, - 0xa2, 0x1b, 0x13, 0x1b, 0xd1, 0x30, 0xbc, 0x35, 0x8b, 0x83, 0xa8, 0xbd, 0x79, 0x24, 0xc1, 0xac, - 0x10, 0x24, 0xc8, 0x08, 0xa8, 0x48, 0x22, 0xd0, 0x0c, 0x03, 0x08, 0x80, 0x80, 0xbd, 0x31, 0x22, - 0x07, 0xaf, 0x82, 0x48, 0x91, 0xba, 0x18, 0x51, 0xb2, 0x9a, 0x23, 0xca, 0x41, 0x98, 0x80, 0x89, - 0x23, 0x3b, 0xc7, 0x0d, 0x82, 0x28, 0x94, 0xad, 0x31, 0xa2, 0x2b, 0xc1, 0x29, 0x42, 0xea, 0x58, - 0xb1, 0x1b, 0x03, 0xba, 0x51, 0xa1, 0x11, 0x9a, 0xca, 0x08, 0x74, 0x82, 0xb9, 0x9c, 0x41, 0x08, - 0x04, 0x8d, 0x81, 0x81, 0xbb, 0x44, 0x08, 0xc1, 0x28, 0xe9, 0x30, 0xca, 0x61, 0x92, 0xab, 0x98, - 0x30, 0x12, 0x81, 0xaa, 0x3a, 0x47, 0xac, 0x29, 0x93, 0x1a, 0x31, 0x90, 0xa1, 0xff, 0x33, 0xa0, - 0x8b, 0x84, 0x9b, 0x15, 0x99, 0x08, 0x29, 0x04, 0xcb, 0x49, 0xc0, 0x18, 0x49, 0x95, 0x9b, 0x10, - 0x91, 0x1a, 0x22, 0xa9, 0x22, 0xbb, 0x1d, 0xa2, 0x2f, 0x47, 0xaa, 0x99, 0x21, 0xd1, 0x3c, 0x06, - 0x89, 0x88, 0x11, 0xbc, 0x41, 0x98, 0x33, 0xcc, 0x08, 0x82, 0x29, 0x15, 0xae, 0x18, 0x12, 0x88, - 0x99, 0x8a, 0x13, 0x01, 0xb4, 0x4c, 0xf8, 0x39, 0x84, 0x1b, 0x81, 0x09, 0x42, 0xfa, 0x5b, 0x82, - 0x08, 0x99, 0x92, 0x0b, 0x14, 0x1b, 0x94, 0x1b, 0xc8, 0x28, 0x83, 0xaa, 0xcc, 0x72, 0x95, 0xad, - 0x41, 0x98, 0x08, 0x82, 0x19, 0x18, 0xb9, 0x50, 0xb9, 0x43, 0xca, 0x32, 0x90, 0xfb, 0x48, 0x82, - 0x00, 0xba, 0x00, 0x4a, 0xa4, 0xaa, 0x70, 0xa2, 0x19, 0xb2, 0x9f, 0x15, 0x9a, 0x23, 0x9b, 0xa8, - 0x59, 0x80, 0x80, 0xac, 0x63, 0xa1, 0x9c, 0x01, 0x88, 0x64, 0xb0, 0x8a, 0x88, 0x08, 0x54, 0x90, - 0xc0, 0x1c, 0x23, 0x91, 0xba, 0x8f, 0x26, 0x99, 0x80, 0x89, 0x1a, 0x13, 0xc8, 0x38, 0xa9, 0xb3, - 0x4f, 0x02, 0xc8, 0x2b, 0x33, 0xd0, 0xab, 0x69, 0x83, 0x28, 0xbc, 0x04, 0x0a, 0x92, 0x19, 0x15, - 0x99, 0xcb, 0x52, 0x10, 0xe0, 0x19, 0x01, 0x98, 0x1a, 0x01, 0x58, 0xd1, 0x8d, 0x23, 0x82, 0xbe, - 0x31, 0x11, 0xa9, 0x9a, 0x31, 0xa0, 0x40, 0x10, 0xe0, 0x38, 0xc0, 0x58, 0x93, 0xaa, 0xbd, 0x72, - 0x84, 0x9c, 0x08, 0x41, 0xa1, 0x8b, 0x81, 0x2a, 0x95, 0x28, 0x99, 0xd0, 0x0c, 0x53, 0x91, 0xb0, - 0x9f, 0x23, 0x03, 0x9c, 0xa8, 0x58, 0x00, 0x00, 0xa0, 0x8b, 0x0b, 0x27, 0x3a, 0xc4, 0x8b, 0x08, - 0x32, 0xc3, 0x0b, 0x40, 0xb4, 0x8d, 0x08, 0x14, 0xa9, 0x1a, 0x07, 0xa9, 0x99, 0xa1, 0x73, 0xc1, - 0x10, 0x9a, 0xb1, 0x5a, 0x03, 0x82, 0xdc, 0x19, 0x05, 0x98, 0x09, 0x08, 0x22, 0x11, 0xfb, 0x1a, - 0x18, 0x34, 0xa1, 0x9e, 0xa8, 0x51, 0x80, 0x12, 0xdb, 0x28, 0xb2, 0x60, 0xb0, 0x8c, 0x43, 0x98, - 0x98, 0xc9, 0x58, 0x93, 0x19, 0x11, 0xfc, 0x20, 0x80, 0x01, 0xaa, 0x08, 0x34, 0xb1, 0x9d, 0x90, - 0x50, 0x11, 0x94, 0x8f, 0x81, 0x09, 0x33, 0xa0, 0x8c, 0xc9, 0x39, 0x17, 0x98, 0xa8, 0x18, 0x18, - 0xc3, 0x1c, 0x13, 0xc0, 0x1a, 0x19, 0x07, 0x0d, 0x90, 0x42, 0xa8, 0xba, 0x60, 0x91, 0x1b, 0x87, - 0x8a, 0xa0, 0x11, 0x21, 0xaa, 0x93, 0x1c, 0x11, 0xa5, 0x2c, 0xe0, 0x29, 0x02, 0x84, 0xad, 0x48, - 0x81, 0xa8, 0x40, 0xd8, 0x18, 0x08, 0x81, 0x30, 0xca, 0x11, 0x98, 0x39, 0xa6, 0x0c, 0x21, 0xa2, - 0x3a, 0x91, 0x85, 0xaf, 0x49, 0x04, 0x98, 0x9d, 0x02, 0x12, 0x9b, 0x12, 0xb8, 0x2d, 0x91, 0x42, - 0xb9, 0xa9, 0x30, 0x2a, 0x17, 0x8f, 0x20, 0x82, 0x8b, 0x29, 0x93, 0x10, 0x1b, 0x97, 0xab, 0x42, - 0x99, 0x06, 0xbb, 0x20, 0xa0, 0x8e, 0x27, 0xaa, 0x98, 0x30, 0x89, 0x04, 0x8a, 0x18, 0x9a, 0x17, - 0x1f, 0xa2, 0x89, 0x28, 0x03, 0x8c, 0xa2, 0x0c, 0x06, 0x19, 0x94, 0x9d, 0x32, 0xe0, 0x39, 0xa2, - 0x0d, 0x41, 0x81, 0xaa, 0x8a, 0x02, 0x40, 0x82, 0xea, 0x0a, 0x18, 0x15, 0xa0, 0x1b, 0xe1, 0x2a, - 0x74, 0xc0, 0x0a, 0x11, 0x11, 0xa1, 0x8f, 0x01, 0x00, 0x10, 0x01, 0xd8, 0x8d, 0x11, 0x24, 0x9a, - 0xa9, 0x30, 0xa1, 0x0b, 0x16, 0xab, 0x00, 0x81, 0x51, 0xea, 0x20, 0x21, 0xaa, 0x14, 0xad, 0x81, - 0x48, 0x92, 0x89, 0x9b, 0x82, 0x51, 0xb0, 0x61, 0xda, 0x28, 0x10, 0x81, 0xcc, 0x19, 0x37, 0xb9, - 0x18, 0xb1, 0x8f, 0x22, 0x12, 0xc8, 0x2a, 0x90, 0x9a, 0x62, 0x83, 0xe8, 0x2a, 0xb3, 0x20, 0xa8, - 0x39, 0x07, 0x8d, 0x08, 0x00, 0x00, 0x0c, 0x17, 0xa9, 0x8c, 0x32, 0xa0, 0x29, 0xa0, 0x2a, 0x84, - 0xcb, 0x30, 0x52, 0xf8, 0x49, 0x81, 0x99, 0x09, 0x28, 0x04, 0xa9, 0x8c, 0x80, 0x63, 0xa8, 0xa9, - 0x46, 0xcb, 0x00, 0x01, 0x00, 0xb0, 0x38, 0x00, 0xa3, 0xac, 0x0e, 0x07, 0x99, 0x40, 0xc0, 0x18, - 0x99, 0x41, 0x93, 0x8c, 0xa8, 0x59, 0x92, 0x89, 0x99, 0x43, 0xc8, 0x08, 0x9b, 0x27, 0x0b, 0x91, - 0x31, 0xf9, 0x8d, 0x24, 0x00, 0x80, 0xc9, 0x09, 0x20, 0x06, 0x9a, 0x89, 0x04, 0xab, 0x30, 0xa4, - 0x0c, 0xb0, 0x73, 0x00, 0xda, 0x09, 0x43, 0x00, 0xea, 0x28, 0x91, 0x89, 0x50, 0xa3, 0x9c, 0x20, - 0x91, 0x2b, 0x96, 0x0b, 0x02, 0x01, 0xc8, 0x8c, 0x21, 0x15, 0x9c, 0x80, 0x40, 0xd9, 0x09, 0x73, - 0x90, 0xbb, 0x52, 0xa1, 0xab, 0x23, 0x48, 0xd0, 0x09, 0x30, 0x98, 0x80, 0x28, 0x98, 0xa3, 0x0f, - 0x80, 0x06, 0x3b, 0xb2, 0x9c, 0x99, 0x32, 0xa0, 0x73, 0xa1, 0x9e, 0x11, 0x01, 0x91, 0x99, 0x19, - 0x98, 0x35, 0xc9, 0x6a, 0x84, 0xaa, 0x18, 0xa9, 0x80, 0x44, 0x89, 0xa0, 0x0b, 0x9d, 0x47, 0xbb, - 0x08, 0x05, 0x89, 0x32, 0xfb, 0x29, 0x01, 0x01, 0x9b, 0x43, 0xfa, 0x49, 0x02, 0xb9, 0x39, 0x81, - 0xa1, 0x40, 0xdc, 0x22, 0x11, 0xea, 0x2a, 0x05, 0xab, 0x01, 0x21, 0x90, 0x9c, 0x53, 0xb9, 0x08, - 0x03, 0x9d, 0x33, 0xe9, 0x19, 0x24, 0xe0, 0x0a, 0x33, 0xc9, 0x20, 0x10, 0xd2, 0x1c, 0x02, 0x98, - 0x08, 0x01, 0x8b, 0x15, 0xc9, 0x2e, 0x85, 0x1b, 0x93, 0x9a, 0x88, 0x43, 0xc9, 0x58, 0xc0, 0x1a, - 0x04, 0x88, 0x80, 0x9a, 0x09, 0x42, 0x90, 0x09, 0xd3, 0x3c, 0xa3, 0x24, 0xcf, 0x31, 0x10, 0xc8, - 0x10, 0x01, 0xa9, 0xba, 0x56, 0x9a, 0x90, 0x48, 0x80, 0xd2, 0x1e, 0x12, 0x81, 0xab, 0x51, 0xd0, - 0x29, 0x01, 0xa3, 0x0d, 0x08, 0xc1, 0x41, 0x08, 0xb3, 0x0e, 0xa2, 0x19, 0x22, 0x84, 0xbe, 0x41, - 0x81, 0xb8, 0x28, 0xbb, 0x64, 0x90, 0x81, 0x8b, 0xb8, 0x58, 0x23, 0xc2, 0xaf, 0x02, 0x40, 0xb1, - 0x8a, 0x80, 0x28, 0x11, 0xaa, 0xa0, 0x0b, 0x75, 0x96, 0xac, 0x30, 0xa0, 0x40, 0xa0, 0x19, 0xa8, - 0x58, 0x93, 0xac, 0x01, 0x39, 0x84, 0x02, 0xdf, 0x21, 0x81, 0x89, 0x20, 0xc8, 0x09, 0x19, 0x15, - 0xab, 0x11, 0x21, 0xec, 0x18, 0x23, 0x98, 0x18, 0xf8, 0x3a, 0x34, 0xc1, 0x9d, 0x41, 0xb3, 0x0c, - 0x81, 0x88, 0x08, 0x23, 0xe9, 0x28, 0x89, 0x06, 0x9a, 0x81, 0xaa, 0x71, 0x85, 0xbc, 0x28, 0x01, - 0x92, 0x50, 0xfa, 0x08, 0x41, 0xa1, 0x9a, 0x29, 0x91, 0x50, 0x90, 0xab, 0x28, 0x24, 0xb9, 0x10, - 0xc8, 0x1d, 0x27, 0xa8, 0xaa, 0x21, 0x38, 0xb1, 0xcb, 0x3c, 0x07, 0x9a, 0x32, 0xda, 0x10, 0x21, - 0xa0, 0x0a, 0xeb, 0x52, 0x93, 0x0c, 0xa0, 0x19, 0x90, 0x40, 0x03, 0xcc, 0x38, 0x92, 0x8b, 0x17, - 0xba, 0x40, 0xc0, 0x49, 0xa1, 0x20, 0xab, 0x13, 0x8d, 0x31, 0xd4, 0x2c, 0x83, 0x9c, 0x13, 0x9a, - 0x04, 0x9d, 0x31, 0xa3, 0x9e, 0x51, 0x82, 0x9c, 0x28, 0x91, 0x12, 0x8a, 0xc0, 0x8d, 0x35, 0xb8, - 0x18, 0x08, 0xfa, 0x51, 0x91, 0xaa, 0x29, 0x13, 0x9a, 0x15, 0xcd, 0x31, 0x00, 0xb9, 0x13, 0x9b, - 0x12, 0x82, 0xa9, 0x8f, 0x17, 0x0a, 0xa0, 0x29, 0xb9, 0x35, 0xb1, 0x1a, 0xb8, 0xaa, 0x75, 0xb3, - 0xab, 0x29, 0x14, 0x99, 0xb9, 0x5a, 0x95, 0x2b, 0x80, 0xb3, 0x1e, 0x98, 0x14, 0x18, 0xb9, 0x8a, - 0x45, 0x99, 0xa0, 0x5b, 0x02, 0x93, 0x9f, 0x11, 0x91, 0x02, 0x9b, 0x87, 0x8d, 0xa0, 0x72, 0xb2, - 0x9b, 0x09, 0x43, 0xc2, 0x3b, 0x83, 0xea, 0x3a, 0x04, 0xa8, 0x4a, 0x82, 0xdb, 0x59, 0x91, 0x19, - 0x20, 0xa8, 0x38, 0xba, 0x82, 0x5a, 0xb5, 0x2d, 0x12, 0xa1, 0x9f, 0x21, 0xa0, 0x08, 0x22, 0x9a, - 0x91, 0x2b, 0x97, 0x1d, 0x83, 0x8c, 0x22, 0x8a, 0x82, 0xc0, 0x5b, 0x04, 0xfa, 0x29, 0x21, 0xb2, - 0x1c, 0x10, 0x81, 0x9c, 0x42, 0x93, 0x9e, 0x0a, 0x17, 0x09, 0xaa, 0x00, 0x41, 0xa0, 0x18, 0xa1, - 0x8d, 0x80, 0x71, 0xb2, 0x0d, 0x08, 0x22, 0x99, 0xa2, 0x0e, 0x03, 0x08, 0x89, 0x20, 0xd0, 0x48, - 0x85, 0xbc, 0x51, 0xb9, 0x52, 0xa9, 0x98, 0x40, 0xb2, 0x2a, 0xa1, 0xea, 0x5a, 0x25, 0xb9, 0x99, - 0x10, 0xab, 0x47, 0x99, 0x88, 0x98, 0x20, 0x8a, 0x17, 0xac, 0x11, 0x01, 0x09, 0x81, 0xac, 0x32, - 0x13, 0xfa, 0x1b, 0x14, 0x99, 0x28, 0x13, 0xcf, 0x00, 0x31, 0x03, 0xdc, 0x18, 0x12, 0x09, 0xa1, - 0x2b, 0xb1, 0x30, 0x40, 0x96, 0xce, 0x28, 0x25, 0xb9, 0x1b, 0x01, 0x08, 0x13, 0x80, 0xad, 0xc0, - 0x7a, 0x94, 0x89, 0x98, 0x28, 0xa2, 0x09, 0x40, 0xe0, 0x08, 0x22, 0x89, 0xa2, 0x0d, 0x23, 0x9a, - 0xab, 0x55, 0xa3, 0x9f, 0x23, 0xc9, 0x2a, 0x14, 0xba, 0x20, 0xa4, 0x8c, 0x00, 0x23, 0xb8, 0x1b, - 0xf1, 0x39, 0x32, 0xc2, 0x09, 0xac, 0x90, 0x65, 0x98, 0x98, 0x08, 0x41, 0xc0, 0x18, 0xa1, 0x1c, - 0x04, 0x21, 0xfb, 0x0d, 0x24, 0xa0, 0x09, 0xa8, 0x52, 0xd8, 0x28, 0x01, 0xaa, 0x11, 0x11, 0xe0, - 0x8c, 0x13, 0x41, 0xd8, 0x09, 0x88, 0x41, 0xb0, 0x40, 0x91, 0xbc, 0x30, 0x05, 0xbc, 0x53, 0xa8, - 0x19, 0x11, 0xf9, 0x38, 0x93, 0x0a, 0x90, 0x29, 0xf1, 0x29, 0x81, 0x51, 0xc1, 0x9b, 0x88, 0x51, - 0x01, 0xa0, 0x88, 0x0c, 0xa3, 0x3c, 0x01, 0xa2, 0x69, 0x92, 0xbf, 0x42, 0xa0, 0x41, 0xa0, 0xc9, - 0x1e, 0x23, 0x02, 0xad, 0x80, 0x28, 0x22, 0xaa, 0xaa, 0x23, 0x18, 0x92, 0x55, 0xfb, 0x2d, 0x03, - 0x18, 0xdb, 0x20, 0x01, 0xb0, 0x2a, 0x15, 0xba, 0x32, 0xb0, 0x9f, 0x05, 0x19, 0x84, 0xaa, 0x0b, - 0x33, 0x90, 0x1a, 0xd0, 0x01, 0x5b, 0xc5, 0x2b, 0x81, 0x12, 0xac, 0x81, 0x88, 0x41, 0x90, 0xd8, - 0x6a, 0x02, 0xb8, 0x10, 0xbd, 0x51, 0x84, 0x0a, 0xb0, 0x1b, 0x20, 0x16, 0x90, 0xbc, 0x2b, 0x17, - 0x89, 0xa3, 0x1e, 0x84, 0x9a, 0x18, 0x80, 0x80, 0x0b, 0x37, 0xdc, 0x31, 0xa8, 0x31, 0xda, 0x08, - 0x41, 0xb2, 0x1b, 0x98, 0x30, 0x88, 0x02, 0x3a, 0xf4, 0x1c, 0x32, 0x90, 0x88, 0xdb, 0x38, 0x93, - 0x8b, 0x35, 0xa8, 0xbc, 0x91, 0x60, 0x22, 0xcc, 0x32, 0xbf, 0x33, 0x80, 0x99, 0xa3, 0x1c, 0x12, - 0x90, 0x31, 0xd9, 0x9a, 0x50, 0x24, 0xed, 0x41, 0x90, 0x89, 0x88, 0x08, 0x81, 0x70, 0xa9, 0x88, - 0x40, 0xb0, 0x1a, 0x94, 0x8d, 0x34, 0xba, 0x28, 0x91, 0x9e, 0x35, 0xb8, 0x8a, 0x11, 0x08, 0x84, - 0x8c, 0x23, 0x0a, 0xfb, 0x52, 0x80, 0xaa, 0x08, 0x32, 0xc9, 0x08, 0x31, 0xc2, 0x8f, 0x14, 0xac, - 0x24, 0xb9, 0x81, 0x9a, 0x73, 0x91, 0x9b, 0x11, 0xa8, 0x19, 0x43, 0xa1, 0x0a, 0xdc, 0x62, 0xa1, - 0x89, 0x80, 0x02, 0xb0, 0x4c, 0xa4, 0x3c, 0xa2, 0x9a, 0x09, 0x21, 0x07, 0x8e, 0x02, 0x89, 0x13, - 0xad, 0x22, 0xb9, 0x2b, 0x35, 0xa1, 0xad, 0x31, 0xa8, 0x90, 0x51, 0xa1, 0x51, 0xba, 0x98, 0x11, - 0x7a, 0xd2, 0x38, 0xba, 0x88, 0x55, 0xa9, 0x89, 0x08, 0x82, 0x31, 0xe9, 0x8b, 0x25, 0x20, 0xf8, - 0x39, 0xa9, 0x11, 0x80, 0x31, 0xf9, 0x3a, 0x13, 0xd9, 0x50, 0xd9, 0x20, 0x01, 0xb8, 0x10, 0x0a, - 0xb4, 0x5b, 0xa2, 0x1b, 0x02, 0x18, 0xa4, 0xbf, 0x52, 0x02, 0x99, 0x8b, 0xc0, 0x49, 0x22, 0x02, - 0xcb, 0xa9, 0x9a, 0x72, 0x87, 0x9b, 0x22, 0xba, 0x09, 0x34, 0xc8, 0x18, 0xa1, 0x03, 0xaf, 0x04, - 0x18, 0xb8, 0x42, 0xca, 0x32, 0xac, 0x35, 0xb9, 0xab, 0x52, 0x12, 0xca, 0x09, 0x11, 0x22, 0xa1, - 0xbf, 0x10, 0x08, 0x62, 0xb1, 0x1c, 0xa1, 0x8a, 0x13, 0x70, 0xda, 0x38, 0x84, 0x9b, 0x89, 0x24, - 0x01, 0xca, 0x0a, 0x15, 0xc9, 0x58, 0xa3, 0x0a, 0xb8, 0x71, 0xc1, 0x8b, 0x31, 0x20, 0xc1, 0x9b, - 0x41, 0xa2, 0x2b, 0x85, 0x9b, 0xaa, 0x55, 0xd9, 0x30, 0x90, 0x21, 0xb0, 0xbf, 0x51, 0x82, 0x98, - 0x2a, 0xb1, 0x29, 0x20, 0x84, 0xde, 0x38, 0x92, 0x43, 0xdb, 0x08, 0x01, 0x10, 0xb1, 0x0c, 0x02, - 0x3a, 0xb1, 0x88, 0x7a, 0xc3, 0x4b, 0xc3, 0x0b, 0x32, 0xa8, 0x48, 0xe1, 0x1b, 0x22, 0xd3, 0x4c, - 0xb1, 0x80, 0x1b, 0x07, 0x8a, 0x82, 0x19, 0x93, 0x9f, 0x30, 0x03, 0x9d, 0x80, 0x49, 0x94, 0x8a, - 0x99, 0x02, 0x99, 0x37, 0x8e, 0x93, 0x9d, 0x42, 0x82, 0xbc, 0x28, 0x12, 0x90, 0x99, 0x21, 0x8a, - 0xb2, 0x71, 0x98, 0xb9, 0x5b, 0x25, 0xb1, 0xaf, 0x30, 0x13, 0x9a, 0x89, 0x99, 0x52, 0x92, 0x8b, - 0xc2, 0x0d, 0x16, 0x88, 0x9a, 0xa8, 0x38, 0x16, 0xb8, 0xb9, 0x48, 0x92, 0x13, 0x8a, 0xf9, 0x3a, - 0x17, 0x0b, 0xb8, 0x30, 0x83, 0x89, 0xac, 0x23, 0x11, 0xbf, 0x54, 0x9a, 0x00, 0x89, 0x21, 0x92, - 0xcf, 0x52, 0x90, 0xa8, 0x28, 0x80, 0xb8, 0x48, 0x82, 0x10, 0xfb, 0x10, 0x10, 0x18, 0x88, 0x11, - 0xb8, 0xef, 0x51, 0x82, 0xba, 0x30, 0x89, 0x12, 0xda, 0x49, 0x82, 0x08, 0x10, 0xe9, 0x99, 0x3a, - 0x17, 0x08, 0xd0, 0x8c, 0x14, 0x80, 0x88, 0xa0, 0x49, 0xa3, 0x1b, 0xc3, 0x1c, 0x13, 0x10, 0xd8, - 0x9c, 0x48, 0x16, 0xaa, 0x18, 0x89, 0x10, 0x30, 0xd0, 0x01, 0xad, 0x44, 0xa0, 0x8c, 0x18, 0x14, - 0x99, 0x81, 0xb8, 0x4a, 0x90, 0x20, 0x01, 0xea, 0x38, 0x91, 0x92, 0xae, 0x71, 0xc4, 0x0c, 0x13, - 0x8a, 0x12, 0xba, 0x69, 0x93, 0xab, 0x10, 0x40, 0xc1, 0x18, 0x88, 0xb8, 0x39, 0x85, 0x29, 0xea, - 0x2b, 0x26, 0x90, 0x9d, 0x00, 0x32, 0xc1, 0x19, 0xd0, 0x19, 0x12, 0x58, 0xa1, 0xae, 0x31, 0x01, - 0x01, 0xcd, 0x30, 0x83, 0x8b, 0xb4, 0x3d, 0x85, 0x0a, 0xb1, 0x0b, 0x31, 0x98, 0x73, 0xe0, 0x19, - 0xa9, 0x25, 0x9a, 0x80, 0x28, 0x90, 0x21, 0xeb, 0x28, 0x24, 0xd8, 0x1a, 0x88, 0x21, 0x01, 0x90, - 0x3a, 0x97, 0x8f, 0x03, 0x88, 0x8b, 0x35, 0xc9, 0x00, 0x9c, 0x83, 0x61, 0xb0, 0xab, 0x44, 0xb8, - 0x1a, 0x24, 0xa9, 0x00, 0xa9, 0x9a, 0x15, 0x0e, 0x04, 0x08, 0xc0, 0x8a, 0x24, 0x18, 0xd0, 0x29, - 0x20, 0xb4, 0x8f, 0x01, 0x13, 0xa9, 0x09, 0x80, 0x99, 0x39, 0xa4, 0x73, 0xe4, 0x0b, 0x12, 0xa8, - 0x19, 0x14, 0x0a, 0xd1, 0x3b, 0xc1, 0x41, 0x88, 0x81, 0x8a, 0xb0, 0x10, 0xdd, 0x76, 0xa0, 0x8a, - 0x00, 0xa1, 0x30, 0xb1, 0x20, 0xdb, 0x31, 0x90, 0x02, 0xbf, 0x42, 0x83, 0xac, 0x80, 0x98, 0x60, - 0x03, 0xba, 0x2a, 0xc9, 0x41, 0x09, 0x03, 0x0b, 0x80, 0xbb, 0x45, 0xc8, 0x9a, 0x55, 0xa3, 0xad, - 0x10, 0x11, 0x80, 0x10, 0xeb, 0x31, 0xb9, 0x1c, 0x27, 0xab, 0x82, 0x19, 0x90, 0x10, 0xc8, 0x78, - 0xa0, 0x01, 0x8a, 0x9a, 0x40, 0x43, 0xa1, 0x8f, 0x83, 0x9e, 0x33, 0x88, 0xc1, 0x29, 0x98, 0x12, - 0x9a, 0xc8, 0x74, 0xc0, 0x19, 0xa2, 0x3b, 0x83, 0x88, 0x10, 0xd0, 0x0c, 0x22, 0x96, 0x9e, 0x22, - 0x80, 0x98, 0x10, 0xab, 0x34, 0xb9, 0x30, 0xb9, 0x92, 0x8f, 0x34, 0x08, 0xd1, 0x8c, 0x81, 0x73, - 0xd1, 0x1a, 0x12, 0xb9, 0x10, 0x10, 0x81, 0x9e, 0x13, 0x8b, 0x27, 0xad, 0x10, 0x13, 0xcb, 0x42, - 0xaa, 0x12, 0x09, 0x91, 0xa8, 0x1c, 0x84, 0x1a, 0x85, 0x8d, 0x82, 0x3b, 0x06, 0xaa, 0x0c, 0x06, - 0x89, 0x90, 0x18, 0xa2, 0x00, 0x0d, 0x25, 0xbb, 0x89, 0x63, 0x01, 0xd9, 0x09, 0x81, 0x40, 0xd1, - 0x4b, 0xa4, 0x0c, 0x92, 0x18, 0x03, 0xab, 0x00, 0x18, 0x21, 0xfb, 0x7a, 0x92, 0x9b, 0x00, 0x25, - 0xac, 0x31, 0x90, 0x8b, 0x82, 0x0b, 0x44, 0x81, 0xbf, 0x52, 0x88, 0x88, 0x80, 0x8b, 0x24, 0xa8, - 0x29, 0xb1, 0x9f, 0x42, 0x01, 0xd8, 0x19, 0x01, 0x08, 0x93, 0x9f, 0x42, 0x90, 0x89, 0x0a, 0x07, - 0x0e, 0x83, 0x0a, 0x08, 0xa1, 0x49, 0xa2, 0x1a, 0x93, 0x8b, 0x29, 0x95, 0x0b, 0x81, 0x51, 0xf0, - 0x18, 0x8a, 0x94, 0x8b, 0x45, 0xa9, 0x01, 0x8c, 0x09, 0x27, 0x99, 0x09, 0x91, 0x9f, 0x14, 0x18, - 0x88, 0xc8, 0x3a, 0x24, 0xe9, 0x28, 0x01, 0xa8, 0x19, 0x18, 0xb0, 0x78, 0xd8, 0x48, 0x93, 0x9c, - 0x00, 0x81, 0x20, 0xb0, 0x38, 0xb0, 0x8b, 0xad, 0x47, 0x81, 0x9f, 0x22, 0x98, 0x88, 0x19, 0x11, - 0x12, 0xb9, 0x9c, 0x10, 0x43, 0x91, 0x0a, 0xfa, 0x28, 0x28, 0x03, 0xa8, 0xce, 0x51, 0xa2, 0x8a, - 0xb9, 0x58, 0x03, 0x39, 0xf3, 0x0f, 0x03, 0x8a, 0x22, 0xba, 0x30, 0xa0, 0x1b, 0x26, 0xcb, 0x38, - 0x25, 0xe9, 0x1a, 0x10, 0x31, 0x90, 0xbb, 0x0b, 0x17, 0xbb, 0x63, 0xb8, 0x18, 0x90, 0x19, 0x23, - 0xdd, 0x09, 0x63, 0xb1, 0x8a, 0x11, 0x90, 0x2a, 0x84, 0x09, 0xaa, 0x90, 0x78, 0x15, 0xa8, 0xae, - 0x42, 0xb9, 0x31, 0x98, 0x01, 0x8a, 0x12, 0x49, 0xf0, 0x8b, 0x72, 0xa1, 0x9a, 0x28, 0x93, 0x2a, - 0x86, 0xae, 0x10, 0x21, 0x01, 0x91, 0xae, 0x28, 0x16, 0x99, 0x8a, 0xa0, 0x69, 0x93, 0x1c, 0x91, - 0x8b, 0x40, 0x84, 0x9b, 0x18, 0x82, 0x20, 0xd8, 0x0c, 0x04, 0x01, 0x9b, 0x19, 0x87, 0x0e, 0x05, - 0x9a, 0x88, 0x02, 0x29, 0xc0, 0x20, 0xbb, 0x52, 0xa0, 0x80, 0x1b, 0xd0, 0x73, 0x98, 0x00, 0xa8, - 0x2a, 0x82, 0x30, 0x9a, 0xc2, 0x48, 0xec, 0x73, 0xc0, 0x39, 0x90, 0x09, 0x12, 0xf8, 0x38, 0xa2, - 0x9a, 0x3b, 0x07, 0x0d, 0x80, 0x22, 0xb9, 0x18, 0x19, 0x24, 0xfa, 0x09, 0x22, 0x88, 0x88, 0x28, - 0xb0, 0x8d, 0x43, 0x22, 0xe8, 0x9c, 0x42, 0x82, 0x8a, 0x10, 0xe9, 0x28, 0x98, 0x85, 0x1b, 0xa2, - 0x09, 0x21, 0xb3, 0xbf, 0x06, 0x9a, 0x02, 0x20, 0xe8, 0x39, 0xd1, 0x28, 0x15, 0xaa, 0x89, 0x83, - 0x3a, 0xa2, 0x06, 0x8f, 0x92, 0x19, 0x13, 0xda, 0x20, 0x02, 0xda, 0x2a, 0x85, 0x0a, 0x31, 0xc1, - 0x8e, 0x01, 0x08, 0x34, 0xc9, 0xbc, 0x43, 0x00, 0xa1, 0x1b, 0x91, 0x38, 0x95, 0x8d, 0x90, 0x80, - 0x79, 0x96, 0x8a, 0x90, 0x10, 0x91, 0x20, 0xa8, 0xa0, 0x4a, 0xe1, 0x58, 0x80, 0x0a, 0x10, 0xf0, - 0x2a, 0x84, 0x18, 0xb8, 0x08, 0x99, 0x35, 0xad, 0x23, 0x80, 0xdb, 0x49, 0x81, 0x20, 0xd8, 0x30, - 0x88, 0xa8, 0x60, 0xa1, 0xbb, 0x59, 0x16, 0xc8, 0x2a, 0xa0, 0x49, 0x13, 0xca, 0x18, 0xc0, 0x3a, - 0x23, 0x95, 0xaf, 0x12, 0x18, 0xc1, 0x1b, 0x12, 0x23, 0xcb, 0xa1, 0x2d, 0x93, 0x40, 0xa2, 0xbe, - 0x30, 0x84, 0x29, 0xc3, 0x8e, 0x11, 0x12, 0xca, 0x41, 0xfa, 0x48, 0x01, 0x98, 0x0c, 0x91, 0x30, - 0x80, 0x82, 0x8e, 0x03, 0xaa, 0x21, 0x19, 0x94, 0x0b, 0xe8, 0x30, 0x81, 0x99, 0x62, 0xc0, 0x0c, - 0x82, 0x38, 0xe8, 0x41, 0x99, 0x12, 0xad, 0x22, 0x81, 0xd9, 0x78, 0xa1, 0x8a, 0x10, 0xa3, 0x09, - 0xa0, 0x79, 0xb1, 0x1a, 0xba, 0x47, 0x98, 0x88, 0x19, 0xc8, 0x4a, 0x14, 0xc8, 0x1a, 0xa1, 0x68, - 0xb3, 0x0b, 0x90, 0x48, 0xa8, 0x22, 0xd9, 0x2b, 0x16, 0xa8, 0x80, 0xda, 0x61, 0x92, 0x9b, 0x88, - 0x63, 0xb8, 0x00, 0x88, 0x9a, 0x36, 0xca, 0x20, 0xc1, 0x8b, 0x73, 0x92, 0x8c, 0x90, 0x28, 0x20, - 0xa0, 0x89, 0x80, 0x99, 0x50, 0x24, 0xfa, 0x3a, 0x81, 0x80, 0x09, 0x9a, 0x47, 0xc9, 0x89, 0x22, - 0xb1, 0x8a, 0x31, 0xb2, 0x1d, 0x96, 0x2b, 0xc3, 0x29, 0x9a, 0x26, 0xb8, 0x2b, 0x07, 0xac, 0x21, - 0x90, 0x00, 0x10, 0xc9, 0x2b, 0x15, 0x99, 0x24, 0xdd, 0x29, 0x23, 0xaa, 0x10, 0xab, 0x72, 0xa2, - 0x8a, 0x89, 0x28, 0x82, 0x37, 0xf9, 0x0a, 0x02, 0x20, 0xa1, 0x0c, 0x00, 0x31, 0xd1, 0x8d, 0x13, - 0x8a, 0x25, 0xad, 0x81, 0x19, 0x13, 0x8a, 0xc2, 0x9f, 0x25, 0xb1, 0x1b, 0x80, 0x20, 0x91, 0x8a, - 0x90, 0x62, 0xea, 0x30, 0x14, 0xfb, 0x39, 0x83, 0x9b, 0x32, 0xa2, 0x8e, 0x81, 0x80, 0x19, 0x84, - 0x8c, 0x03, 0xba, 0x01, 0x78, 0xc1, 0x3a, 0xb2, 0x8c, 0x24, 0xd9, 0x58, 0xb3, 0x1c, 0x91, 0x18, - 0x89, 0x33, 0xe9, 0x29, 0x84, 0x89, 0x10, 0xc9, 0x80, 0x5b, 0x07, 0xaa, 0x10, 0x0a, 0x82, 0x32, - 0xdb, 0x08, 0x8c, 0x25, 0xb0, 0x9a, 0x21, 0xa1, 0x39, 0xf3, 0x0d, 0x16, 0xb9, 0x39, 0x85, 0x9c, - 0x18, 0x42, 0xc9, 0x29, 0x04, 0xba, 0x20, 0x98, 0x22, 0x21, 0xfb, 0x3b, 0x86, 0xab, 0x24, 0xa8, - 0x09, 0x81, 0x99, 0x11, 0x91, 0x63, 0xa1, 0xef, 0x30, 0x12, 0xaa, 0x89, 0x80, 0x20, 0x92, 0x08, - 0xc9, 0x4a, 0x86, 0x18, 0xc0, 0x1b, 0x00, 0x43, 0xd9, 0x31, 0xcc, 0x73, 0xa8, 0x8a, 0x22, 0xb9, - 0x42, 0x09, 0xb1, 0x0c, 0x30, 0x03, 0xb8, 0xcf, 0x51, 0xa2, 0x09, 0x80, 0xa8, 0x19, 0x38, 0x17, - 0x9b, 0xca, 0x60, 0x01, 0xa9, 0x1a, 0xa3, 0x1c, 0x45, 0xc0, 0x0c, 0x83, 0x09, 0x22, 0xa8, 0x8f, - 0x32, 0xa9, 0x28, 0x84, 0x9d, 0x21, 0x20, 0xc0, 0x9d, 0x23, 0x11, 0xc1, 0x8e, 0x81, 0x48, 0x92, - 0x2a, 0xc1, 0x9c, 0x33, 0x98, 0x21, 0xec, 0x20, 0x33, 0xda, 0x1b, 0x84, 0x8a, 0x25, 0xa9, 0x0a, - 0x08, 0x38, 0x37, 0xe9, 0x8b, 0x23, 0x80, 0x99, 0x31, 0xc8, 0x3a, 0xb3, 0x9d, 0x22, 0x88, 0x45, - 0xc9, 0xbd, 0x52, 0x80, 0x08, 0x00, 0xd9, 0x59, 0xa2, 0x29, 0x80, 0x98, 0x0a, 0x37, 0xdb, 0x18, - 0x10, 0x81, 0x10, 0xdb, 0x41, 0x92, 0xcb, 0x60, 0xa2, 0x9b, 0x22, 0xa0, 0xac, 0x35, 0xc8, 0x18, - 0x98, 0x98, 0x31, 0xd2, 0x3b, 0x05, 0xca, 0x59, 0xa3, 0x1e, 0x83, 0x99, 0x18, 0x23, 0xdd, 0x51, - 0x90, 0x8a, 0x30, 0xa8, 0x28, 0xb8, 0x32, 0x8a, 0xc4, 0x1e, 0x05, 0xab, 0x31, 0x00, 0xaa, 0xa0, - 0x3a, 0x84, 0x01, 0x9c, 0x21, 0xd1, 0x2d, 0x16, 0xc9, 0x2b, 0x05, 0x09, 0xa8, 0x58, 0xb1, 0x28, - 0xaa, 0x01, 0x53, 0xeb, 0x52, 0xb9, 0x10, 0x18, 0x91, 0xab, 0x10, 0x11, 0x32, 0xde, 0x30, 0x82, - 0xbd, 0x61, 0xa2, 0x0c, 0x23, 0xda, 0x2a, 0x85, 0x99, 0x20, 0xd2, 0x8c, 0x34, 0x91, 0x9c, 0x22, - 0x9c, 0x24, 0xb9, 0x09, 0x31, 0xd0, 0x40, 0x99, 0xb8, 0x5b, 0x14, 0x08, 0xca, 0x1b, 0x25, 0x91, - 0x8f, 0x02, 0x09, 0xa1, 0x30, 0xd9, 0x29, 0x83, 0x18, 0x98, 0xf9, 0x49, 0x04, 0xa8, 0x0b, 0x13, - 0xac, 0x53, 0xa8, 0x19, 0xa8, 0x59, 0x14, 0xcb, 0x28, 0x91, 0x98, 0x4b, 0x07, 0x8e, 0x11, 0x00, - 0x9a, 0x10, 0x01, 0x98, 0x0b, 0xb1, 0x72, 0xd5, 0x2a, 0x92, 0x0a, 0x12, 0x98, 0xbb, 0x65, 0xb8, - 0x1b, 0x17, 0xbb, 0x30, 0x82, 0x8a, 0x98, 0x00, 0x61, 0xa1, 0xae, 0x41, 0x83, 0xbb, 0x00, 0x21, - 0xa8, 0x71, 0xa0, 0x9a, 0x99, 0x72, 0x82, 0xc9, 0x0d, 0x15, 0x09, 0xa9, 0x20, 0x98, 0x41, 0xb8, - 0x8b, 0x10, 0x99, 0x67, 0xc9, 0x18, 0x88, 0x32, 0x99, 0xa8, 0x0a, 0x22, 0x05, 0x8b, 0xc0, 0x1d, - 0x27, 0xa8, 0x9a, 0x81, 0x1a, 0x26, 0xa0, 0xaa, 0x28, 0xd0, 0x49, 0x03, 0xda, 0x3a, 0x85, 0x8a, - 0x81, 0x8a, 0x21, 0x21, 0xf8, 0x19, 0x90, 0x38, 0x80, 0x25, 0xad, 0x23, 0xac, 0x33, 0xf1, 0x2b, - 0x04, 0x9a, 0x81, 0x08, 0xa1, 0x6a, 0x86, 0xaa, 0x88, 0xb8, 0x70, 0x83, 0x9a, 0x0a, 0x03, 0xbf, - 0x44, 0xa0, 0x99, 0x29, 0x03, 0x98, 0x89, 0x88, 0x37, 0xda, 0x00, 0x98, 0x3a, 0x05, 0x08, 0xa9, - 0xba, 0x54, 0x03, 0x9d, 0x98, 0x41, 0x00, 0x9a, 0xb0, 0x9f, 0x45, 0xa0, 0x9a, 0x11, 0xb9, 0x38, - 0x27, 0xc9, 0x19, 0x92, 0x09, 0x82, 0xaa, 0x69, 0x84, 0x0a, 0xb9, 0x61, 0xca, 0x41, 0x80, 0x88, - 0x18, 0xd8, 0x58, 0xb8, 0x52, 0xb9, 0xa0, 0x39, 0x86, 0x8c, 0x22, 0x91, 0x9e, 0x12, 0x0a, 0x12, - 0x90, 0x8b, 0x35, 0xec, 0x28, 0x12, 0x91, 0x8c, 0x12, 0xaa, 0x48, 0x82, 0xbb, 0x40, 0x90, 0x21, - 0x9e, 0x93, 0x1c, 0x03, 0x02, 0xaf, 0x22, 0x08, 0x90, 0x1c, 0x17, 0x9d, 0x81, 0x10, 0x8a, 0x35, - 0xb9, 0x09, 0x21, 0xf0, 0x4b, 0x82, 0xa8, 0x2a, 0x05, 0xbb, 0x41, 0xc8, 0x30, 0x01, 0xbe, 0x63, - 0xba, 0x43, 0xa8, 0xb8, 0x6a, 0x91, 0x80, 0x89, 0x00, 0x61, 0xb0, 0x8a, 0x13, 0xac, 0x52, 0x83, - 0x9c, 0xda, 0x51, 0x92, 0x0a, 0xa1, 0x1d, 0x05, 0x0b, 0x91, 0x89, 0x09, 0x16, 0x90, 0xcb, 0x38, - 0x82, 0x52, 0xfa, 0x18, 0x10, 0x91, 0x08, 0x90, 0x19, 0x28, 0x07, 0xac, 0x81, 0x29, 0x02, 0x53, - 0xfc, 0x28, 0x88, 0x11, 0x80, 0x9c, 0x43, 0xc9, 0x29, 0x93, 0x19, 0xa9, 0x52, 0xda, 0x49, 0x84, - 0x9c, 0x02, 0x0a, 0x05, 0xb9, 0x19, 0x11, 0x23, 0xbb, 0x22, 0xf8, 0x1c, 0x24, 0x98, 0xa0, 0x0f, - 0x13, 0x80, 0xac, 0x31, 0x81, 0x89, 0x11, 0xcc, 0x0a, 0x55, 0x90, 0xab, 0x02, 0x9c, 0x37, 0xc9, - 0x10, 0x0a, 0x11, 0x02, 0x9b, 0xe8, 0x69, 0x92, 0x89, 0x81, 0x8c, 0x32, 0x91, 0x8c, 0x83, 0x9f, - 0x33, 0x81, 0xbc, 0x61, 0xa0, 0x09, 0x11, 0xeb, 0x21, 0x11, 0xa0, 0x99, 0x08, 0x22, 0x8a, 0xf3, - 0x7a, 0xc1, 0x18, 0x80, 0x12, 0xc9, 0x0a, 0x25, 0xc9, 0x01, 0x0c, 0x16, 0xbb, 0x22, 0x00, 0xb0, - 0x0e, 0x22, 0x91, 0x19, 0xe9, 0x29, 0x14, 0x9b, 0x13, 0xa9, 0xaa, 0x41, 0x94, 0x8c, 0x02, 0x1a, - 0x27, 0xdb, 0x08, 0x80, 0x52, 0x90, 0xc8, 0x0c, 0x24, 0xa8, 0x11, 0xa9, 0x9b, 0x36, 0xa9, 0x08, - 0x0b, 0x05, 0x48, 0xf3, 0x0c, 0x81, 0x31, 0x81, 0xba, 0x8c, 0x92, 0x73, 0xd0, 0x29, 0x91, 0x28, - 0x89, 0xa2, 0x2a, 0xa0, 0x46, 0xca, 0x10, 0xbb, 0x67, 0xa9, 0x88, 0x08, 0x00, 0x04, 0x9d, 0x12, - 0x89, 0x18, 0x02, 0xca, 0x18, 0x28, 0x14, 0xda, 0x28, 0xca, 0x54, 0xa8, 0x08, 0x08, 0xa8, 0x31, - 0x89, 0xb1, 0x38, 0x02, 0xc9, 0x91, 0x8e, 0x73, 0xa3, 0x8f, 0x03, 0x9c, 0x04, 0x89, 0x01, 0x91, - 0x0e, 0x84, 0x0b, 0x94, 0x2c, 0x02, 0xa9, 0x0b, 0x25, 0x8a, 0x80, 0x1a, 0x04, 0xa8, 0x8b, 0x53, - 0xb8, 0x3a, 0x85, 0xac, 0x89, 0x34, 0x28, 0xe2, 0x9a, 0x70, 0x91, 0xbc, 0x42, 0x80, 0xa8, 0x2a, - 0x02, 0xb9, 0x3a, 0x27, 0x9c, 0x11, 0x18, 0x80, 0xa0, 0x0b, 0x74, 0x90, 0xb1, 0x9f, 0x12, 0x08, - 0x83, 0x68, 0xfa, 0x28, 0x92, 0x89, 0x00, 0x92, 0x1a, 0xc1, 0x3a, 0xa8, 0x41, 0x24, 0xfc, 0x39, - 0x91, 0x18, 0x32, 0xb0, 0xaf, 0x52, 0xa8, 0x11, 0xab, 0x52, 0x90, 0x99, 0x31, 0xec, 0x41, 0xa9, - 0x33, 0xc9, 0x8c, 0x23, 0x91, 0x0c, 0x82, 0x80, 0xae, 0x34, 0x10, 0xfa, 0x20, 0x89, 0x24, 0xdc, - 0x30, 0x81, 0x88, 0x88, 0x19, 0x94, 0x8e, 0x14, 0x9a, 0x02, 0x9b, 0x24, 0xb9, 0x29, 0xb1, 0x71, - 0xc0, 0x29, 0x92, 0x9d, 0x42, 0x80, 0x89, 0xa8, 0x39, 0x85, 0x1a, 0xc2, 0x8b, 0x42, 0xa0, 0x88, - 0x50, 0xd8, 0x80, 0x4b, 0x86, 0xba, 0x51, 0xa1, 0x8b, 0x20, 0x93, 0x09, 0xb9, 0x49, 0xb2, 0x19, - 0x5a, 0x07, 0xd9, 0x2b, 0x03, 0x18, 0xb1, 0x3c, 0x07, 0xad, 0x48, 0x83, 0x8b, 0x09, 0x41, 0xc8, - 0x29, 0xa0, 0x41, 0xc8, 0x18, 0x81, 0x01, 0xeb, 0x5a, 0x04, 0x9c, 0x81, 0x20, 0xd1, 0x38, 0x82, - 0x9e, 0x02, 0x38, 0x91, 0xfa, 0x49, 0x02, 0x91, 0xcb, 0x29, 0x84, 0x29, 0xb3, 0x1c, 0x95, 0x8c, - 0x14, 0xab, 0x00, 0x09, 0x17, 0xba, 0x10, 0xba, 0x55, 0xa0, 0x9b, 0x25, 0xac, 0x13, 0x08, 0x18, - 0xc0, 0x1a, 0x21, 0xb8, 0x20, 0x51, 0xd8, 0x11, 0x9b, 0x12, 0x09, 0xb2, 0x6a, 0xd2, 0x9d, 0x23, - 0x08, 0xa8, 0x29, 0x21, 0xf0, 0x4d, 0x85, 0x9c, 0x21, 0x08, 0x81, 0xbb, 0x48, 0x84, 0x8a, 0x91, - 0x49, 0xd3, 0x0d, 0x15, 0x88, 0xa9, 0x00, 0x32, 0xf9, 0x0a, 0x13, 0x01, 0xc9, 0x29, 0x09, 0x88, - 0x24, 0xab, 0x63, 0xca, 0x8a, 0x43, 0xb2, 0x0e, 0x04, 0x8a, 0x10, 0xa9, 0x41, 0x80, 0x8a, 0x87, - 0x8c, 0x82, 0x31, 0xa9, 0x01, 0xf9, 0x2b, 0x07, 0x8b, 0x03, 0x9a, 0x11, 0xa8, 0x00, 0x9d, 0x63, - 0xa2, 0x9b, 0x09, 0x82, 0x48, 0x92, 0xac, 0x12, 0x40, 0xdb, 0x24, 0xac, 0x22, 0x09, 0x85, 0xab, - 0x9a, 0x47, 0xa0, 0xaa, 0x42, 0xb0, 0x09, 0x99, 0x23, 0x30, 0x84, 0xff, 0x20, 0x80, 0x8a, 0x27, - 0xca, 0x10, 0x09, 0x01, 0x09, 0x00, 0x98, 0x01, 0x9c, 0x30, 0x96, 0x2a, 0x02, 0xdc, 0x18, 0x01, - 0x21, 0x91, 0x9a, 0x91, 0xaf, 0x17, 0x9b, 0x13, 0x8a, 0x02, 0x00, 0xbc, 0x33, 0x0d, 0x85, 0x4a, - 0xd1, 0x0c, 0x21, 0x12, 0xba, 0x82, 0x2c, 0xf3, 0x3b, 0x85, 0x8a, 0x19, 0x04, 0x8c, 0x93, 0x1e, - 0x93, 0x49, 0xc1, 0x88, 0x18, 0xa0, 0x61, 0xa0, 0x18, 0xc8, 0x19, 0x03, 0x88, 0x19, 0x82, 0x81, - 0xbf, 0x13, 0xad, 0x65, 0xa8, 0x00, 0xab, 0x18, 0x62, 0x82, 0x9c, 0xa0, 0x49, 0x91, 0x32, 0xcc, - 0x81, 0x58, 0xb3, 0x8d, 0xa2, 0x48, 0x91, 0x82, 0x8c, 0xb1, 0x61, 0x90, 0x8a, 0x28, 0x81, 0x29, - 0xf3, 0x2c, 0xa2, 0x50, 0xc8, 0x30, 0xaa, 0x80, 0x42, 0xb0, 0x2b, 0x02, 0xc9, 0x2e, 0x17, 0x9b, - 0x03, 0xdb, 0x30, 0x91, 0x01, 0x88, 0xd0, 0x3b, 0x07, 0xaa, 0x88, 0x22, 0x90, 0x19, 0xb2, 0xaa, - 0x79, 0x03, 0x01, 0x9e, 0xc0, 0x70, 0x91, 0x98, 0x89, 0x83, 0x1d, 0x85, 0x8c, 0x11, 0x88, 0x29, - 0xb3, 0x2c, 0xc4, 0x4c, 0x84, 0x8c, 0x82, 0x8a, 0x33, 0xd9, 0x18, 0x98, 0x42, 0x98, 0x02, 0xcc, - 0x19, 0x23, 0x29, 0x84, 0xde, 0x30, 0x90, 0x30, 0xa8, 0x9c, 0x23, 0xaa, 0x36, 0xb8, 0x0b, 0x84, - 0x8b, 0x41, 0xa9, 0x81, 0x2b, 0x95, 0xaa, 0x2b, 0x96, 0x60, 0xa2, 0x9a, 0x8c, 0x32, 0x12, 0x88, - 0xca, 0xce, 0x72, 0xa2, 0x89, 0x88, 0x89, 0x53, 0xa8, 0x91, 0x0e, 0x13, 0x80, 0x9a, 0xc0, 0x29, - 0x33, 0x84, 0xad, 0x10, 0x98, 0x52, 0xc0, 0x1a, 0x13, 0xa9, 0x12, 0xcf, 0x14, 0x88, 0x90, 0x2a, - 0xe2, 0x3a, 0x81, 0x22, 0x28, 0xf9, 0x59, 0xd8, 0x28, 0x82, 0x1a, 0xa4, 0x8b, 0x13, 0xcc, 0x25, - 0x9b, 0x14, 0x9a, 0x90, 0x1c, 0x05, 0x0b, 0x33, 0xfa, 0x09, 0x21, 0x98, 0x32, 0xcc, 0x31, 0xc8, - 0x38, 0x92, 0x9a, 0x20, 0x92, 0x8d, 0x01, 0x11, 0x02, 0xcf, 0x06, 0x0a, 0x12, 0x9d, 0x03, 0x8b, - 0x22, 0x89, 0x12, 0xcc, 0x49, 0x94, 0x0e, 0x14, 0xab, 0x30, 0xb8, 0x28, 0x91, 0x49, 0xa5, 0x8e, - 0x82, 0x0a, 0x26, 0xba, 0x20, 0xa9, 0x11, 0xa2, 0x6b, 0xc3, 0xaa, 0x73, 0xb0, 0x89, 0x09, 0x25, - 0xaa, 0x11, 0xca, 0x49, 0x15, 0xcb, 0x48, 0xa0, 0x19, 0x23, 0xba, 0xb9, 0x7b, 0x84, 0x0a, 0xa8, - 0x29, 0x00, 0x05, 0x8e, 0x93, 0x1c, 0x06, 0x9a, 0x81, 0x99, 0x33, 0xa1, 0x89, 0xda, 0x72, 0x98, - 0x08, 0x80, 0xab, 0x50, 0x04, 0xbb, 0x31, 0xb3, 0xbf, 0x35, 0xab, 0x00, 0x22, 0xa9, 0x08, 0xa0, - 0x3b, 0x37, 0xbb, 0x19, 0x22, 0xf0, 0x48, 0xa1, 0x99, 0x28, 0xd1, 0x59, 0xb2, 0x1c, 0x83, 0xaa, - 0x62, 0x93, 0x8c, 0xa9, 0x52, 0xab, 0x25, 0xa9, 0x8a, 0x20, 0x01, 0x14, 0xae, 0x21, 0xa9, 0x13, - 0xaa, 0x60, 0x95, 0x9f, 0x33, 0xab, 0x00, 0x9b, 0x37, 0xb0, 0x8d, 0x03, 0x10, 0xb0, 0x1a, 0x81, - 0x89, 0x24, 0xad, 0x43, 0xda, 0x50, 0x90, 0x80, 0x8a, 0x8a, 0x45, 0x90, 0x9b, 0x80, 0x18, 0x03, - 0x8f, 0x85, 0x9c, 0x34, 0xca, 0x30, 0xb0, 0x29, 0x15, 0xbb, 0x00, 0x1a, 0x87, 0x1b, 0x93, 0x99, - 0x3a, 0xd3, 0x48, 0xb0, 0x18, 0x92, 0xaa, 0x20, 0x81, 0x53, 0xfa, 0x29, 0x82, 0xc9, 0x10, 0x23, - 0x98, 0xed, 0x50, 0xa1, 0x1a, 0x12, 0x01, 0xdc, 0x09, 0x43, 0x01, 0xb9, 0xbb, 0x79, 0x03, 0x1b, - 0x82, 0x9e, 0x22, 0xbb, 0x72, 0x93, 0x9f, 0x31, 0x90, 0x9a, 0x10, 0x21, 0xbb, 0x36, 0xfc, 0x38, - 0x81, 0x10, 0xb8, 0x80, 0x0b, 0x25, 0xb0, 0x1a, 0xa3, 0x0e, 0x16, 0xaa, 0x88, 0x80, 0x40, 0x01, - 0x90, 0xcd, 0x60, 0xa1, 0x28, 0x99, 0x81, 0x2b, 0xa2, 0x09, 0x42, 0xcb, 0x31, 0x96, 0x9e, 0x88, - 0x45, 0xc8, 0x29, 0x91, 0x0a, 0x12, 0xab, 0x35, 0xca, 0x18, 0xa1, 0x52, 0xb9, 0x3a, 0x85, 0x0b, - 0xd1, 0x4a, 0x93, 0x8c, 0x14, 0xaa, 0x20, 0xa1, 0x8b, 0x73, 0x90, 0xb9, 0x2a, 0x43, 0xf9, 0x60, - 0xb0, 0x2a, 0x81, 0xa9, 0x62, 0xd0, 0x28, 0x90, 0x28, 0x90, 0x99, 0x10, 0x8c, 0x27, 0xca, 0x10, - 0x80, 0x11, 0x80, 0xbb, 0x03, 0x9b, 0x63, 0x98, 0xd0, 0x1c, 0x37, 0xf1, 0x2a, 0x80, 0x18, 0x82, - 0x89, 0x99, 0xa1, 0x69, 0x94, 0x19, 0xdc, 0x48, 0x01, 0x88, 0x89, 0x80, 0x02, 0x80, 0x98, 0x8b, - 0x06, 0x09, 0xb9, 0x53, 0xea, 0x20, 0x82, 0x81, 0xba, 0x38, 0x13, 0x1a, 0x97, 0xaf, 0x32, 0x90, - 0x28, 0xe8, 0x39, 0x90, 0x10, 0x20, 0xc2, 0x8f, 0x00, 0x13, 0x8b, 0x24, 0xcc, 0x88, 0x60, 0x93, - 0xac, 0x21, 0xa0, 0x69, 0xa3, 0xab, 0x20, 0x13, 0xda, 0x11, 0xbe, 0x40, 0x33, 0xb0, 0xab, 0xac, - 0x43, 0x32, 0xb5, 0x8f, 0x82, 0x2a, 0x84, 0xbb, 0x18, 0x33, 0x00, 0xb0, 0x9e, 0x80, 0x74, 0xb1, - 0x0b, 0x80, 0x99, 0x64, 0xb1, 0x8b, 0x08, 0x10, 0x13, 0xa9, 0x00, 0xbf, 0x73, 0xc1, 0x28, 0xb8, - 0x30, 0xc8, 0x40, 0x90, 0x08, 0x89, 0x81, 0x0c, 0x14, 0x32, 0xcf, 0x31, 0xb8, 0x02, 0x29, 0xd2, - 0x48, 0xc0, 0x0b, 0x23, 0x81, 0x2c, 0x92, 0xda, 0x1b, 0x27, 0xba, 0x43, 0xea, 0x18, 0x12, 0xb9, - 0x30, 0xd8, 0x30, 0x03, 0xc0, 0x0e, 0x12, 0x0a, 0x23, 0xd8, 0x8b, 0x02, 0x20, 0x20, 0xe8, 0x08, - 0x40, 0x91, 0xcc, 0x10, 0x11, 0x81, 0x82, 0xaf, 0x38, 0x93, 0x32, 0xec, 0x1a, 0x13, 0x80, 0x01, - 0xac, 0x84, 0x1e, 0x05, 0xa8, 0x8d, 0x33, 0x98, 0x91, 0x0c, 0x04, 0xba, 0x59, 0x13, 0xd9, 0x88, - 0x39, 0xe3, 0x39, 0x82, 0x89, 0x20, 0xed, 0x58, 0x92, 0x89, 0x01, 0xca, 0x30, 0x02, 0x99, 0x8b, - 0x27, 0xac, 0x32, 0xb8, 0x09, 0x01, 0x89, 0x25, 0xbc, 0x21, 0x12, 0xd1, 0x1d, 0x21, 0xa1, 0x2a, - 0x93, 0xce, 0x38, 0x93, 0x49, 0xf3, 0x1c, 0x11, 0x81, 0x01, 0xae, 0x22, 0xa9, 0x71, 0xb0, 0x1b, - 0x23, 0xa9, 0x00, 0xaa, 0x26, 0xb9, 0x00, 0x11, 0xa2, 0x9f, 0x34, 0xd0, 0x8c, 0x33, 0x19, 0xa1, - 0xbc, 0x59, 0x85, 0x0a, 0xb1, 0x29, 0x91, 0x20, 0xb3, 0x3a, 0xfc, 0x00, 0x59, 0x95, 0x8c, 0x11, - 0xa0, 0x39, 0xb4, 0x2c, 0xa2, 0x2a, 0x80, 0x02, 0x89, 0x90, 0x19, 0x84, 0x3a, 0xfb, 0x6c, 0x02, - 0xbb, 0x30, 0x22, 0xf9, 0x2b, 0x23, 0xeb, 0x40, 0x81, 0x01, 0xea, 0x0a, 0x41, 0x05, 0xbb, 0x10, - 0xb8, 0x3b, 0x37, 0xaa, 0x88, 0x29, 0xb1, 0x50, 0xd0, 0x39, 0xa0, 0x32, 0x88, 0xfb, 0x48, 0x91, - 0x11, 0xcb, 0x20, 0x91, 0x41, 0xca, 0x22, 0xa8, 0x9a, 0x61, 0xc2, 0x9e, 0x41, 0x85, 0xab, 0x11, - 0xba, 0x61, 0x91, 0x21, 0xfb, 0x10, 0x98, 0x32, 0xb0, 0x89, 0x00, 0xa8, 0x51, 0xc2, 0x8d, 0x21, - 0x10, 0x82, 0xa9, 0xae, 0x51, 0xa1, 0x62, 0xc8, 0x9a, 0x40, 0xa3, 0x2a, 0x82, 0xdb, 0x30, 0xa2, - 0x0d, 0x03, 0x1b, 0x15, 0xa9, 0xac, 0x19, 0x35, 0xb9, 0x44, 0xfb, 0x29, 0x82, 0x11, 0xa9, 0x8a, - 0x21, 0x22, 0x81, 0xbf, 0x21, 0x90, 0x59, 0x05, 0xbd, 0x28, 0x10, 0x11, 0x09, 0xc9, 0x10, 0x9a, - 0x73, 0xb3, 0x9c, 0x33, 0xaa, 0xc8, 0x6b, 0xa3, 0x1c, 0x14, 0xaa, 0x99, 0x38, 0x04, 0x60, 0xd0, - 0x9b, 0x33, 0x81, 0x9c, 0x13, 0xac, 0x35, 0xb9, 0x28, 0xeb, 0x30, 0x15, 0x9a, 0x00, 0xd8, 0x0b, - 0x35, 0xb0, 0x0c, 0x12, 0xb9, 0x60, 0xa0, 0x88, 0x98, 0x53, 0xab, 0x27, 0xbb, 0x1b, 0x35, 0xa8, - 0x8a, 0x00, 0x89, 0x42, 0xd0, 0x39, 0xc1, 0x21, 0x88, 0xa2, 0x9f, 0x02, 0x21, 0x80, 0x82, 0xff, - 0x30, 0x82, 0x98, 0x99, 0x81, 0x19, 0x25, 0xf8, 0x28, 0x98, 0x1a, 0x36, 0xc8, 0x8b, 0x08, 0x51, - 0x81, 0xb9, 0x1a, 0x81, 0x38, 0x21, 0xb1, 0x0b, 0xf9, 0x3a, 0x44, 0xd0, 0x2a, 0x84, 0x9a, 0x99, - 0x21, 0x2a, 0x07, 0xab, 0x21, 0x89, 0xa5, 0x2e, 0x83, 0x8a, 0x0a, 0x06, 0x8b, 0x81, 0x88, 0x39, - 0x94, 0x8a, 0x01, 0xc9, 0xcc, 0x74, 0x81, 0x99, 0x8a, 0xa8, 0x71, 0x91, 0x09, 0x98, 0x01, 0x18, - 0x23, 0xfc, 0x4a, 0x84, 0x0b, 0x11, 0xd8, 0x1c, 0x15, 0x99, 0x90, 0x2a, 0x83, 0x9a, 0x10, 0x08, - 0xa0, 0x11, 0x0b, 0xd9, 0x13, 0x4d, 0x16, 0xa9, 0xcb, 0x5b, 0x87, 0x88, 0x08, 0xa0, 0x8a, 0x53, - 0x90, 0x89, 0x00, 0xad, 0x44, 0xb0, 0x08, 0x9a, 0x32, 0x92, 0x8c, 0x81, 0x0b, 0xd3, 0x1c, 0x37, - 0xb0, 0x9c, 0x18, 0x15, 0x9a, 0x12, 0xcb, 0x21, 0x8a, 0x52, 0xa1, 0xae, 0x40, 0x84, 0x9a, 0xa0, - 0x20, 0x42, 0x84, 0xbe, 0x0b, 0x16, 0x01, 0x9a, 0xb9, 0x19, 0x44, 0xa3, 0x8c, 0xc9, 0x48, 0x15, - 0xa8, 0xba, 0x19, 0x46, 0xb8, 0x89, 0x89, 0x42, 0x91, 0x2a, 0xc0, 0x0b, 0x10, 0x17, 0x99, 0x99, - 0x39, 0x94, 0x19, 0xfa, 0x48, 0x01, 0x80, 0xcb, 0x5a, 0x04, 0x99, 0x99, 0x12, 0xda, 0x70, 0x91, - 0x8a, 0x80, 0x10, 0x00, 0x88, 0xd8, 0x5a, 0x05, 0xcb, 0x30, 0xa1, 0x18, 0x98, 0x89, 0x21, 0x44, - 0xfa, 0x18, 0x89, 0x22, 0x12, 0xbc, 0x98, 0x99, 0x64, 0x01, 0xb8, 0x9f, 0x23, 0x01, 0xe8, 0x1a, - 0x23, 0x82, 0xac, 0xaa, 0x73, 0xa0, 0x00, 0x18, 0xd9, 0x40, 0x91, 0x81, 0xbc, 0x41, 0x10, 0x93, - 0xaf, 0x18, 0x34, 0x98, 0xca, 0x19, 0x20, 0x84, 0x9a, 0x02, 0x9a, 0x12, 0x28, 0xfa, 0x39, 0x00, - 0x24, 0xda, 0xad, 0x51, 0x33, 0xea, 0x0a, 0x01, 0x41, 0xb0, 0x9c, 0x31, 0x93, 0x5a, 0xd0, 0x09, - 0x89, 0x63, 0xa8, 0x01, 0x9a, 0x98, 0x60, 0x91, 0x8a, 0x3a, 0x87, 0x8a, 0xc9, 0x48, 0x23, 0xc1, - 0xad, 0x21, 0x00, 0x91, 0x51, 0xda, 0x18, 0x18, 0x22, 0xd8, 0x0a, 0x11, 0x14, 0xea, 0x29, 0x11, - 0x90, 0x10, 0xda, 0x40, 0xa0, 0x20, 0x81, 0xfb, 0x59, 0x93, 0x8b, 0x91, 0x1a, 0x41, 0x95, 0x8e, - 0x98, 0x31, 0x80, 0x01, 0xcc, 0x32, 0x98, 0x80, 0x21, 0xec, 0x41, 0x00, 0x80, 0x9c, 0x23, 0x1a, - 0xc4, 0x0c, 0x01, 0x41, 0xb9, 0x00, 0x0c, 0x00, 0x34, 0xe8, 0x8d, 0x32, 0x01, 0xba, 0x01, 0x1a, - 0x08, 0x86, 0x0a, 0x80, 0xd8, 0x40, 0x81, 0x9d, 0x25, 0xa1, 0x9d, 0x10, 0x12, 0x81, 0xa0, 0x8e, - 0xa2, 0x29, 0x25, 0x80, 0xfd, 0x38, 0x82, 0x18, 0xa8, 0x9b, 0x50, 0x92, 0x09, 0x88, 0x38, 0xaa, - 0x23, 0xde, 0x41, 0x80, 0x11, 0x90, 0xbd, 0x30, 0x51, 0x92, 0xbc, 0xca, 0x45, 0x88, 0x80, 0x0c, - 0xb2, 0x39, 0x44, 0xe0, 0x0a, 0x10, 0x02, 0xaa, 0x30, 0xa9, 0xa8, 0x70, 0xc2, 0x30, 0xab, 0x04, - 0x2a, 0xb1, 0x40, 0xeb, 0x18, 0x22, 0xb1, 0x59, 0xf0, 0x2a, 0x02, 0x01, 0x8a, 0xb8, 0x2c, 0x33, - 0x04, 0xbd, 0x81, 0x29, 0x27, 0xcb, 0xba, 0x72, 0x83, 0x98, 0x9d, 0x11, 0x21, 0x12, 0xfb, 0x8a, - 0x40, 0x02, 0x98, 0xaa, 0xaa, 0x72, 0x04, 0xb8, 0x8c, 0x98, 0x64, 0x90, 0x89, 0xa0, 0x1a, 0x24, - 0x88, 0xa9, 0x38, 0xe8, 0x60, 0xb8, 0x29, 0x21, 0xa3, 0x8e, 0xa8, 0x50, 0x81, 0x08, 0x82, 0xbc, - 0x29, 0x28, 0x14, 0x98, 0xac, 0x38, 0xa1, 0x72, 0xf2, 0x2a, 0xa1, 0x28, 0x82, 0x9a, 0x84, 0xaf, - 0x53, 0x82, 0x9b, 0xaa, 0x52, 0x81, 0x88, 0xb1, 0x1b, 0x91, 0x45, 0xa8, 0xac, 0x11, 0x80, 0x32, - 0xf9, 0x0a, 0x08, 0x33, 0x22, 0xfa, 0x8f, 0x14, 0x81, 0xaa, 0x29, 0x84, 0x18, 0x98, 0xc8, 0x1b, - 0x25, 0x12, 0xf9, 0x9c, 0x43, 0x80, 0x82, 0x9d, 0x10, 0x91, 0x08, 0x22, 0xd8, 0x0a, 0x92, 0x5a, - 0xb3, 0x1c, 0x91, 0x08, 0x80, 0x20, 0xb3, 0x2e, 0xe8, 0x50, 0x00, 0x11, 0xdd, 0x40, 0x98, 0x11, - 0x88, 0xa0, 0x38, 0xb8, 0xaa, 0x61, 0x82, 0x48, 0xc1, 0xae, 0x28, 0x14, 0x00, 0xd8, 0x09, 0x91, - 0x3a, 0x37, 0xda, 0x89, 0x10, 0x42, 0xa0, 0xbb, 0x40, 0x01, 0x91, 0xab, 0x00, 0x18, 0x48, 0x87, - 0x9c, 0x88, 0x50, 0xa1, 0x89, 0x00, 0x42, 0xea, 0x42, 0xab, 0x92, 0x0b, 0x64, 0xa1, 0xac, 0x20, - 0x11, 0x93, 0x9c, 0x8b, 0x27, 0x9a, 0x81, 0x81, 0x9d, 0x52, 0x90, 0x8a, 0x00, 0x91, 0x8d, 0x27, - 0x9a, 0x80, 0x0b, 0x93, 0x6b, 0x86, 0xbb, 0x11, 0x89, 0x13, 0x91, 0x9b, 0x12, 0xc9, 0x72, 0xb1, - 0x8a, 0x21, 0x10, 0xb4, 0xaf, 0x40, 0x11, 0x98, 0xca, 0x2c, 0x15, 0x09, 0x90, 0x8b, 0x90, 0x70, - 0x95, 0x8b, 0x09, 0x22, 0x11, 0xfb, 0x28, 0x92, 0xaa, 0x13, 0x28, 0x03, 0xdd, 0x18, 0x02, 0xa9, - 0x48, 0x07, 0xbc, 0x01, 0x30, 0x81, 0xa9, 0x80, 0x8f, 0x24, 0x98, 0x8a, 0x11, 0x13, 0xdb, 0x9b, - 0x40, 0x36, 0xb0, 0xbc, 0x39, 0x92, 0x60, 0xb2, 0x8d, 0x12, 0x8a, 0x33, 0xa8, 0xbc, 0x49, 0x25, - 0xa0, 0x9f, 0x11, 0x08, 0x23, 0xca, 0x8a, 0x32, 0xb8, 0x3b, 0x27, 0xd8, 0x19, 0x10, 0xa2, 0x8f, - 0x11, 0x42, 0xe8, 0x8a, 0x21, 0x12, 0xab, 0x19, 0x07, 0xbb, 0x41, 0xa2, 0xa9, 0x49, 0x05, 0xa9, - 0x9c, 0x00, 0x54, 0x88, 0x99, 0x89, 0x48, 0xa1, 0x1a, 0xe1, 0x59, 0x04, 0xcb, 0x29, 0x00, 0x42, - 0xc0, 0x9c, 0x02, 0x18, 0x82, 0x11, 0xca, 0x8a, 0x30, 0x17, 0xbc, 0x31, 0x82, 0x0a, 0xa0, 0x00, - 0x0c, 0x36, 0xe0, 0x8b, 0x30, 0x13, 0x99, 0xbd, 0x44, 0x80, 0x80, 0xb9, 0x1a, 0xc1, 0x70, 0xa3, - 0xac, 0x20, 0x09, 0xa1, 0x38, 0x51, 0xc2, 0x2b, 0x99, 0x90, 0x58, 0x26, 0xba, 0xc8, 0x2c, 0x24, - 0x99, 0x12, 0xcb, 0x19, 0x14, 0x1b, 0x06, 0x9e, 0x24, 0xaa, 0xb1, 0x8b, 0x35, 0x98, 0x11, 0xc9, - 0x0b, 0x92, 0x38, 0x34, 0xa8, 0x09, 0x89, 0xea, 0x19, 0x51, 0x02, 0x42, 0xfd, 0x3b, 0x04, 0x00, - 0x09, 0xc0, 0x0b, 0x25, 0xaa, 0x10, 0x1a, 0x07, 0xa9, 0x89, 0xc9, 0x78, 0x94, 0x0b, 0x92, 0x8a, - 0x41, 0xb2, 0x0c, 0x81, 0x20, 0x91, 0xe9, 0x29, 0x12, 0x04, 0x1a, 0xf2, 0x0f, 0x13, 0x08, 0xa1, - 0xbb, 0x50, 0x81, 0x88, 0xa8, 0x49, 0x02, 0xdb, 0x51, 0xb9, 0x41, 0xa0, 0xa8, 0x3a, 0x95, 0x2b, - 0x04, 0xba, 0x3a, 0x83, 0x21, 0xac, 0xb8, 0x70, 0x85, 0x9d, 0x12, 0x18, 0xab, 0x98, 0x73, 0xa9, - 0x22, 0xb0, 0x1c, 0xb3, 0x6b, 0x84, 0xdb, 0x30, 0x98, 0x21, 0x81, 0xdc, 0x18, 0x14, 0x90, 0x08, - 0x91, 0x8c, 0x33, 0xb1, 0x0f, 0xb2, 0x79, 0xa3, 0x9c, 0x90, 0x31, 0x89, 0x17, 0xdb, 0x29, 0x02, - 0x22, 0xbc, 0x28, 0x91, 0x3a, 0xa5, 0x8e, 0x02, 0x08, 0x31, 0xa3, 0xdf, 0x38, 0x04, 0x98, 0x1a, - 0x91, 0x1a, 0x94, 0x1b, 0x04, 0xdb, 0x39, 0x94, 0x8c, 0x12, 0x00, 0xa1, 0x0b, 0x40, 0xd9, 0x39, - 0x82, 0x30, 0x91, 0xeb, 0x2a, 0xc8, 0x73, 0x81, 0xe9, 0x30, 0x91, 0x98, 0x29, 0xa3, 0x7a, 0xc2, - 0x1c, 0xb1, 0x1b, 0x37, 0x91, 0xcb, 0x1b, 0x84, 0x08, 0x21, 0xa9, 0x0a, 0x13, 0x99, 0xb8, 0x69, - 0x00, 0x02, 0x81, 0xef, 0x33, 0xda, 0x61, 0x90, 0x9a, 0x28, 0x92, 0x40, 0xdb, 0x31, 0xa8, 0x10, - 0x89, 0x01, 0xca, 0x2b, 0x67, 0xa9, 0x8a, 0x90, 0x72, 0xa1, 0x0a, 0x90, 0x90, 0x30, 0xb1, 0x33, - 0xcf, 0x32, 0x98, 0x88, 0xa1, 0x2d, 0x06, 0x8a, 0x91, 0x89, 0x02, 0x30, 0xc0, 0x09, 0x99, 0x81, - 0x6a, 0xa4, 0x0c, 0x92, 0x3a, 0x12, 0xe9, 0x8a, 0x53, 0x81, 0x00, 0xea, 0x38, 0xd9, 0x52, 0xa8, - 0x19, 0x93, 0x8f, 0x22, 0xb0, 0x0a, 0x02, 0x20, 0x15, 0xcf, 0x11, 0x10, 0xa1, 0x10, 0x9b, 0x01, - 0x89, 0x44, 0x08, 0xf0, 0x2b, 0x91, 0x53, 0xb9, 0x00, 0x29, 0xc2, 0x0b, 0x84, 0x8c, 0x22, 0x10, - 0x96, 0xaf, 0x30, 0x13, 0xb9, 0x39, 0xea, 0x28, 0x32, 0xa2, 0x8d, 0xb0, 0x3d, 0x17, 0xc9, 0x28, - 0x98, 0x11, 0x1b, 0x85, 0x9b, 0x10, 0x71, 0xd1, 0x19, 0xa0, 0x38, 0x82, 0xa0, 0x1b, 0x02, 0xae, - 0x72, 0x92, 0x9c, 0x00, 0x19, 0x14, 0xb9, 0x0a, 0x88, 0x37, 0xa9, 0xea, 0x28, 0x82, 0x42, 0xc9, - 0x09, 0x90, 0x48, 0x17, 0xbc, 0x10, 0x11, 0x08, 0xa0, 0x8b, 0x00, 0x62, 0x92, 0x9b, 0xe0, 0x4b, - 0x05, 0x98, 0x9a, 0x41, 0xb0, 0x20, 0x9a, 0x91, 0x0d, 0x33, 0x91, 0xca, 0x3a, 0x25, 0xb8, 0x0d, - 0x13, 0x99, 0x18, 0x81, 0x70, 0xc1, 0x1a, 0x94, 0x1c, 0xd0, 0x39, 0x43, 0xe8, 0x28, 0xb0, 0x2b, - 0x04, 0x8a, 0x14, 0xaa, 0xdb, 0x71, 0x90, 0x11, 0x9a, 0x98, 0x4a, 0xa3, 0x4b, 0x91, 0x90, 0x5c, - 0x94, 0xbb, 0x09, 0x63, 0x92, 0x90, 0xac, 0x10, 0x20, 0x10, 0x05, 0xbe, 0x28, 0x32, 0xd1, 0x0c, - 0x01, 0x20, 0x90, 0x09, 0x09, 0xe9, 0x38, 0x27, 0xb8, 0xae, 0x53, 0x80, 0xb9, 0x20, 0x91, 0x8a, - 0x23, 0xbb, 0x54, 0xdb, 0x31, 0x88, 0x00, 0x0b, 0xa3, 0x1f, 0x24, 0xb8, 0xab, 0x32, 0x9a, 0x47, - 0xa8, 0xab, 0x98, 0x1a, 0x77, 0xb0, 0x09, 0x90, 0x18, 0x03, 0x0a, 0xc9, 0x31, 0x11, 0xb9, 0x1a, - 0xa0, 0x61, 0x12, 0xce, 0x10, 0x19, 0x05, 0x91, 0xaa, 0xaf, 0x44, 0xa1, 0x0a, 0x98, 0x32, 0xa9, - 0x89, 0x64, 0xc9, 0x89, 0x43, 0x91, 0xc9, 0x0c, 0x26, 0x99, 0x98, 0x1a, 0x03, 0xa8, 0x8a, 0x64, - 0xd0, 0x2a, 0x82, 0x99, 0x81, 0x99, 0x51, 0x23, 0xfb, 0x5a, 0xb1, 0x19, 0x82, 0xb9, 0x52, 0xa1, - 0x9b, 0x21, 0x91, 0x20, 0xc9, 0x51, 0xb0, 0x9f, 0x31, 0x14, 0xa0, 0xcc, 0x41, 0xd8, 0x29, 0x84, - 0x00, 0xba, 0x89, 0x44, 0x80, 0xb9, 0x2b, 0xb3, 0x69, 0xa1, 0x21, 0x8d, 0x02, 0x28, 0xa1, 0x88, - 0xaf, 0x63, 0x03, 0xcb, 0x8a, 0x22, 0x11, 0xf9, 0x0b, 0x35, 0xb0, 0x0d, 0x13, 0xab, 0x09, 0x43, - 0x12, 0xea, 0x8b, 0x63, 0xc0, 0x28, 0x90, 0x29, 0xc8, 0x40, 0x80, 0xb2, 0x1d, 0x12, 0x00, 0xc9, - 0x38, 0xb0, 0x1b, 0x56, 0xb0, 0x9b, 0x39, 0x95, 0x0c, 0x33, 0xc1, 0x8a, 0x81, 0x89, 0x94, 0x0f, - 0x24, 0xa9, 0x8a, 0x01, 0x28, 0xf1, 0x4b, 0x86, 0x8a, 0x10, 0xa9, 0x48, 0xb1, 0x48, 0xa1, 0x8b, - 0x22, 0xc8, 0x09, 0x54, 0xa1, 0xbb, 0x09, 0x01, 0x60, 0x84, 0x99, 0xbc, 0x9a, 0x46, 0x91, 0x19, - 0xb9, 0x38, 0x92, 0x1a, 0xa5, 0x8d, 0x32, 0x13, 0xf9, 0x8c, 0x32, 0x82, 0x9d, 0x11, 0x30, 0xca, - 0x99, 0x52, 0xa8, 0x80, 0x62, 0xa1, 0xaf, 0x11, 0x41, 0xb1, 0x19, 0xb9, 0x88, 0x78, 0x83, 0x8b, - 0xb1, 0x8c, 0x01, 0x44, 0x98, 0x98, 0x01, 0xad, 0x35, 0xca, 0x28, 0x93, 0x9d, 0x33, 0x91, 0xab, - 0xab, 0x43, 0x33, 0xfc, 0x10, 0x09, 0x33, 0xc8, 0x3a, 0xa1, 0xb9, 0x2e, 0x07, 0x99, 0x80, 0x40, - 0x92, 0xba, 0xdb, 0x70, 0x02, 0x88, 0xbd, 0x31, 0x32, 0xc0, 0x8d, 0x81, 0x21, 0xa1, 0x09, 0x98, - 0xb8, 0x6c, 0x14, 0x91, 0xbf, 0x30, 0x22, 0xc0, 0x0a, 0x11, 0x30, 0xf0, 0x2a, 0x82, 0x09, 0x82, - 0xaa, 0x2b, 0x16, 0x99, 0x30, 0xc2, 0xaf, 0x40, 0x04, 0x89, 0x88, 0xbf, 0x63, 0xa0, 0x08, 0x00, - 0x89, 0x98, 0x38, 0x17, 0xcb, 0x18, 0x11, 0x82, 0x9a, 0x9a, 0x52, 0x90, 0x8c, 0x14, 0x9a, 0x18, - 0x83, 0x0c, 0x85, 0x8b, 0xa8, 0x35, 0x9b, 0x85, 0x8f, 0x14, 0xba, 0x09, 0x42, 0x82, 0xb9, 0x0c, - 0x13, 0x98, 0xaa, 0x74, 0x90, 0x99, 0x9c, 0x34, 0x08, 0x82, 0xcb, 0x09, 0x42, 0xc8, 0x20, 0x33, - 0xef, 0x38, 0x01, 0x98, 0x98, 0x28, 0x13, 0x81, 0xbf, 0x20, 0x12, 0x98, 0x0b, 0x41, 0xa4, 0x9f, - 0x02, 0x08, 0x22, 0x98, 0xa0, 0x8e, 0xa9, 0x46, 0xa0, 0x00, 0xdb, 0x49, 0x13, 0xaa, 0x2b, 0xb2, - 0x68, 0x01, 0x9a, 0x12, 0xbd, 0x61, 0x91, 0x09, 0xc9, 0x18, 0x64, 0xb1, 0x8a, 0x80, 0x00, 0x08, - 0xd8, 0x68, 0x92, 0x29, 0xe9, 0x1a, 0x22, 0x99, 0x30, 0xa4, 0xaf, 0x30, 0x11, 0x00, 0xc1, 0x0e, - 0x23, 0xca, 0x38, 0xa2, 0x18, 0x80, 0x88, 0x13, 0x8d, 0x13, 0xdc, 0x48, 0x16, 0xcb, 0x10, 0xb8, - 0x48, 0x04, 0xa8, 0xab, 0x01, 0x29, 0x15, 0x9c, 0x11, 0x0a, 0x02, 0xd2, 0x8f, 0x13, 0x11, 0xa0, - 0xb8, 0x0f, 0x24, 0x80, 0x99, 0xaa, 0x52, 0xa0, 0x58, 0xd8, 0x1a, 0x24, 0x00, 0xea, 0x09, 0x28, - 0x33, 0xb0, 0x9d, 0x08, 0x83, 0x8a, 0x11, 0x84, 0x9e, 0x34, 0xca, 0x80, 0x2a, 0x23, 0x82, 0xfa, - 0x09, 0x22, 0x81, 0x00, 0x9f, 0x22, 0x01, 0xac, 0x18, 0x83, 0x1e, 0x14, 0x98, 0xcb, 0x38, 0xb4, - 0x29, 0x33, 0xb8, 0xbb, 0x9f, 0x22, 0x82, 0x5a, 0x94, 0x8a, 0xaf, 0x62, 0x92, 0xa9, 0x0d, 0x14, - 0x89, 0x00, 0xa8, 0x8a, 0x52, 0x02, 0x99, 0xbd, 0x30, 0x31, 0x14, 0xc9, 0xad, 0x52, 0xb0, 0x10, - 0xa8, 0x22, 0x81, 0xda, 0x9a, 0x53, 0xa1, 0x50, 0x92, 0xcf, 0x10, 0x12, 0x81, 0x99, 0xaa, 0x43, - 0xb8, 0x08, 0x38, 0x15, 0xcd, 0x41, 0x90, 0x29, 0x91, 0xaa, 0x8a, 0x73, 0xa5, 0xab, 0x00, 0x00, - 0x33, 0xc9, 0x32, 0xcc, 0x99, 0x75, 0xb8, 0x1a, 0x08, 0x44, 0xb9, 0x99, 0x29, 0x82, 0x22, 0xac, - 0x80, 0x81, 0x3a, 0x17, 0x89, 0xca, 0x20, 0x01, 0xe1, 0x0e, 0x25, 0x90, 0x9a, 0x91, 0x09, 0x31, - 0xc0, 0x29, 0x04, 0xce, 0x42, 0xb0, 0x18, 0x00, 0xb9, 0x61, 0xd0, 0x3b, 0x15, 0xa8, 0x8a, 0x11, - 0x92, 0xbc, 0x34, 0xdb, 0x52, 0x98, 0x18, 0xa9, 0x28, 0x19, 0x07, 0xc9, 0x2b, 0x14, 0xa9, 0x29, - 0x82, 0x0a, 0x80, 0x50, 0xf8, 0x28, 0x18, 0x04, 0x0c, 0xd8, 0x58, 0x91, 0x0a, 0x90, 0x28, 0x98, - 0x43, 0xe8, 0x8b, 0x24, 0x18, 0xa2, 0xad, 0x21, 0x81, 0x03, 0xae, 0x01, 0x40, 0xc0, 0x48, 0xb0, - 0x1d, 0x25, 0xb9, 0x0a, 0x11, 0x89, 0x03, 0x08, 0xaf, 0x16, 0x9a, 0x90, 0x18, 0x43, 0xa0, 0x9a, - 0x18, 0xeb, 0x61, 0x91, 0x09, 0xc8, 0x58, 0x81, 0xa9, 0x89, 0x41, 0x04, 0xca, 0x0a, 0x33, 0xc2, - 0x0c, 0x31, 0xf8, 0x39, 0x81, 0x80, 0x9c, 0x14, 0x10, 0xba, 0x80, 0x29, 0x25, 0x90, 0xce, 0x40, - 0xa2, 0x8a, 0x42, 0xd8, 0x39, 0x23, 0xe8, 0x8c, 0x33, 0x98, 0x89, 0x80, 0xca, 0x50, 0x02, 0xa2, - 0xac, 0x8a, 0x37, 0x80, 0xca, 0x28, 0x80, 0x22, 0x9c, 0x02, 0x9e, 0x33, 0xa8, 0xb9, 0x62, 0xb9, - 0x53, 0x91, 0xe9, 0x1e, 0x14, 0x09, 0xc8, 0x38, 0x80, 0x00, 0x99, 0x80, 0x40, 0xc1, 0x19, 0x99, - 0x90, 0x72, 0x96, 0xba, 0x9b, 0x34, 0x13, 0xca, 0x09, 0x10, 0x11, 0x91, 0xab, 0x09, 0x16, 0x0b, - 0xc3, 0x9d, 0x52, 0x11, 0xb2, 0xaf, 0x11, 0x08, 0x25, 0xba, 0x99, 0x29, 0x26, 0xb8, 0x1b, 0xd1, - 0x4a, 0x03, 0x20, 0xb8, 0x9a, 0x9a, 0x33, 0x1d, 0x07, 0xbb, 0x38, 0xb1, 0x40, 0xa1, 0x39, 0xcf, - 0x33, 0x8b, 0x06, 0x0b, 0xc3, 0x7a, 0xb2, 0x89, 0x1a, 0x84, 0x1b, 0x12, 0xa1, 0x8f, 0x03, 0x1a, - 0xa3, 0x2a, 0x99, 0x21, 0xc9, 0xca, 0x79, 0x95, 0x1a, 0x01, 0xbc, 0x19, 0x55, 0x90, 0x0b, 0x88, - 0x08, 0x13, 0x09, 0xec, 0x40, 0x83, 0xab, 0x19, 0xa8, 0x74, 0x81, 0xc8, 0x0c, 0x13, 0x19, 0xe0, - 0x30, 0xb0, 0x59, 0xb1, 0x0c, 0x08, 0x25, 0x98, 0x98, 0xab, 0x41, 0x23, 0x91, 0xed, 0x29, 0x13, - 0x18, 0xd9, 0x88, 0x51, 0xb0, 0x38, 0xba, 0x11, 0x80, 0x10, 0xa9, 0x80, 0x6c, 0x06, 0xad, 0x20, - 0x08, 0x42, 0xda, 0x81, 0x19, 0xa1, 0x22, 0x01, 0xfc, 0x28, 0x92, 0x48, 0xb2, 0x0d, 0x92, 0x11, - 0x9a, 0xb0, 0x73, 0xd0, 0x19, 0x00, 0x02, 0x99, 0x99, 0x23, 0xca, 0x45, 0xac, 0x13, 0x8b, 0xa2, - 0x6a, 0x92, 0xa9, 0x9d, 0x27, 0xaa, 0x88, 0x51, 0xa0, 0x08, 0x99, 0x00, 0x38, 0x87, 0x9b, 0x90, - 0x01, 0x0e, 0x37, 0xdb, 0x2a, 0x23, 0x98, 0x98, 0xa8, 0x38, 0x15, 0x99, 0xdb, 0x30, 0x00, 0x12, - 0x9b, 0xb3, 0xbf, 0x70, 0x12, 0xaa, 0x89, 0x1a, 0x37, 0xcb, 0x18, 0x40, 0xc1, 0x1b, 0x90, 0x35, - 0xca, 0x10, 0x89, 0x81, 0x18, 0x99, 0x35, 0x9c, 0xb8, 0x58, 0xa3, 0x0c, 0x24, 0xa0, 0xae, 0x13, - 0x19, 0x06, 0x9a, 0xcb, 0x51, 0x01, 0xa0, 0x0c, 0x12, 0x8a, 0x10, 0x01, 0x10, 0xde, 0x51, 0x91, - 0xb9, 0x19, 0x12, 0x03, 0xb9, 0xac, 0x73, 0xc2, 0x08, 0x98, 0x18, 0x91, 0x11, 0x39, 0xf2, 0x3d, - 0x90, 0x23, 0xa9, 0xfd, 0x59, 0x84, 0x99, 0x90, 0x00, 0x2a, 0x85, 0x9b, 0x81, 0x19, 0x11, 0x14, - 0xad, 0xa1, 0x4c, 0x85, 0x8a, 0x89, 0x31, 0xa0, 0x28, 0xda, 0x21, 0x00, 0x99, 0x23, 0xbf, 0x23, - 0x80, 0x11, 0xba, 0x00, 0x21, 0xac, 0x23, 0xad, 0x4a, 0x27, 0x9e, 0x10, 0x04, 0x9b, 0x81, 0x8a, - 0x27, 0xac, 0x18, 0x12, 0x2b, 0x87, 0x9d, 0x01, 0x08, 0x08, 0x43, 0xea, 0x28, 0x90, 0x38, 0x92, - 0x9e, 0x32, 0xd8, 0x28, 0x90, 0x01, 0x28, 0xb1, 0x09, 0xa9, 0x00, 0x65, 0xe0, 0x39, 0xb0, 0x22, - 0x9c, 0x11, 0x9a, 0x31, 0x11, 0xb8, 0x9c, 0x03, 0x9f, 0x54, 0x02, 0xcb, 0x1b, 0x93, 0x38, 0xa8, - 0x20, 0x80, 0xe1, 0x4a, 0xe0, 0x60, 0xb0, 0x38, 0xb8, 0x09, 0x31, 0x98, 0x85, 0x2d, 0xb4, 0x2d, - 0xb1, 0x4a, 0x84, 0x18, 0xda, 0x20, 0x08, 0xc2, 0x39, 0xc2, 0x29, 0x40, 0xc5, 0x8f, 0x13, 0x8a, - 0x22, 0xa9, 0x89, 0x19, 0x22, 0x03, 0xae, 0x28, 0x84, 0x1a, 0xd8, 0x19, 0x10, 0x15, 0x9a, 0x99, - 0xba, 0x71, 0x12, 0x81, 0xca, 0x8c, 0x12, 0x19, 0x83, 0x31, 0x10, 0xfd, 0x0a, 0x11, 0x32, 0xe9, - 0x58, 0xb1, 0x91, 0x8f, 0x05, 0x0a, 0x11, 0x88, 0xcb, 0x48, 0x11, 0x80, 0x08, 0xba, 0x18, 0x30, - 0xa2, 0x8e, 0x04, 0x09, 0x15, 0xeb, 0x2a, 0x81, 0x54, 0xc8, 0x89, 0x8a, 0x14, 0x28, 0xc0, 0x39, - 0xb0, 0x18, 0x23, 0xce, 0x31, 0xa8, 0x35, 0xba, 0xcb, 0x6a, 0x04, 0x88, 0xa9, 0x09, 0x42, 0xc1, - 0x4b, 0xa5, 0x8c, 0x12, 0x02, 0xdb, 0x89, 0x33, 0x13, 0xd8, 0x9f, 0x33, 0x99, 0x91, 0x18, 0xba, - 0x52, 0x80, 0x91, 0x9b, 0x18, 0x23, 0x91, 0x05, 0xdf, 0x11, 0x30, 0xa4, 0x9c, 0x80, 0x30, 0xb2, - 0x0e, 0x43, 0xb8, 0x0b, 0x81, 0x40, 0xa3, 0x9e, 0x30, 0x82, 0xca, 0x3a, 0x02, 0x04, 0xae, 0x23, - 0x98, 0xa9, 0x4b, 0x27, 0xca, 0x8a, 0x22, 0x32, 0xd1, 0x8b, 0xa1, 0x61, 0xc8, 0x40, 0x80, 0xba, - 0x58, 0x92, 0x2a, 0xf0, 0x1a, 0x54, 0xc8, 0x1b, 0x12, 0x18, 0xa8, 0x01, 0x9a, 0x83, 0x8c, 0x44, - 0xb0, 0x0b, 0x94, 0x2b, 0xa3, 0x8b, 0x28, 0x96, 0x5b, 0xe3, 0x0c, 0x33, 0xb1, 0x0c, 0x81, 0x28, - 0x03, 0xcc, 0x1a, 0x15, 0x88, 0x10, 0xb8, 0x8d, 0x90, 0x70, 0x95, 0x0c, 0x81, 0x18, 0x90, 0xa9, - 0x4a, 0x06, 0xba, 0x18, 0x01, 0x8a, 0x47, 0xaa, 0xa0, 0x0d, 0x15, 0x88, 0x90, 0x88, 0x9a, 0x27, - 0x9a, 0xba, 0x72, 0xb1, 0x00, 0x99, 0x13, 0x9a, 0x00, 0x51, 0xf8, 0x29, 0x02, 0x09, 0x89, 0xaa, - 0x73, 0xa1, 0x8b, 0x81, 0x18, 0x21, 0x11, 0xf0, 0x8c, 0x08, 0x27, 0xda, 0x31, 0xa8, 0x10, 0xa9, - 0x01, 0x01, 0x98, 0x28, 0x32, 0xf9, 0x3d, 0xa1, 0x38, 0xb1, 0x19, 0x80, 0xfb, 0x70, 0xc3, 0x1a, - 0x81, 0x81, 0x9e, 0x23, 0x31, 0xf8, 0x2b, 0x01, 0x80, 0x88, 0x99, 0x43, 0x08, 0xd8, 0x3a, 0xa1, - 0x58, 0xb1, 0x19, 0xca, 0x32, 0x28, 0x07, 0xcb, 0x89, 0x42, 0x30, 0xf8, 0x0c, 0x12, 0x21, 0xb8, - 0x9a, 0x98, 0x18, 0x54, 0x90, 0xa3, 0xbf, 0x34, 0x08, 0xea, 0x30, 0x10, 0xa1, 0x8f, 0x20, 0x00, - 0x03, 0xbb, 0x0a, 0x13, 0x9b, 0x27, 0xb8, 0xab, 0x18, 0x14, 0x22, 0xdb, 0x9a, 0x72, 0xb1, 0x28, - 0xcb, 0x64, 0x98, 0xa8, 0x2b, 0x06, 0x99, 0x09, 0x00, 0x12, 0x9b, 0x11, 0x2a, 0xa4, 0xbb, 0x58, - 0x97, 0x8e, 0x23, 0x8a, 0x90, 0x1c, 0x92, 0x61, 0xb0, 0x89, 0x09, 0x14, 0x8a, 0x08, 0x82, 0x39, - 0xc4, 0x0f, 0x92, 0x3a, 0x92, 0x31, 0xd8, 0xad, 0x68, 0x14, 0xb8, 0xab, 0x20, 0x04, 0x89, 0x00, - 0xd0, 0x4b, 0x94, 0x19, 0xa1, 0x9c, 0x81, 0x42, 0x88, 0x99, 0x25, 0xbc, 0x00, 0x00, 0x59, 0x07, - 0xaa, 0xb9, 0x61, 0x80, 0x10, 0x9b, 0x10, 0x9a, 0x88, 0x55, 0xc9, 0x20, 0x00, 0xda, 0x30, 0x81, - 0x18, 0xc0, 0xaa, 0x7a, 0x84, 0x9a, 0xa8, 0x70, 0xa1, 0x29, 0x01, 0xfa, 0x39, 0x83, 0x18, 0xe9, - 0x28, 0x11, 0xc0, 0x2a, 0x92, 0x3b, 0x04, 0xc8, 0x0b, 0x53, 0x80, 0x83, 0x9f, 0x88, 0x18, 0x32, - 0x03, 0xfd, 0x19, 0x21, 0x00, 0x98, 0xbc, 0x42, 0x12, 0xb8, 0x99, 0x18, 0x01, 0x33, 0x31, 0xfc, - 0x0f, 0x93, 0x70, 0x90, 0xaa, 0x19, 0x15, 0x9a, 0x82, 0x0a, 0x99, 0x80, 0x69, 0x05, 0xab, 0x00, - 0x1a, 0xb3, 0x2b, 0x00, 0x47, 0xca, 0x19, 0x12, 0xba, 0x12, 0x2a, 0x17, 0xbf, 0x30, 0x13, 0x99, - 0x20, 0xde, 0x40, 0x91, 0x88, 0x80, 0x0a, 0x34, 0xc0, 0x2a, 0xd0, 0x19, 0x11, 0x32, 0xe9, 0x9a, - 0x20, 0x15, 0x9c, 0x03, 0x1a, 0xa3, 0x9a, 0x8e, 0x45, 0x90, 0x89, 0x99, 0xba, 0x54, 0xb9, 0x41, - 0x81, 0x9d, 0x11, 0x89, 0x53, 0xb8, 0x88, 0x00, 0xa8, 0x1b, 0x45, 0x91, 0xbd, 0x62, 0xa1, 0x9a, - 0x1a, 0x05, 0x48, 0xb1, 0xdb, 0x48, 0x82, 0x9a, 0x13, 0xbc, 0x02, 0x29, 0x16, 0xda, 0x3a, 0x03, - 0x18, 0xc8, 0xbb, 0x68, 0x04, 0x89, 0x92, 0x9b, 0x18, 0x01, 0x81, 0x50, 0xf8, 0x59, 0xb1, 0x39, - 0xc9, 0x28, 0x35, 0xd0, 0x9b, 0x89, 0x53, 0x92, 0x0a, 0x02, 0xcc, 0x19, 0x33, 0x99, 0x01, 0x8b, - 0x89, 0x02, 0x7a, 0xa3, 0x78, 0xc0, 0x0b, 0x21, 0x98, 0x12, 0xbb, 0x68, 0x04, 0xbb, 0xad, 0x63, - 0x02, 0xba, 0x81, 0x1b, 0x05, 0x88, 0x98, 0xea, 0x38, 0x26, 0xc8, 0x9c, 0x31, 0x05, 0xa9, 0x8a, - 0x01, 0x29, 0x44, 0xc0, 0x9d, 0x38, 0x14, 0xca, 0x10, 0xa0, 0x31, 0x92, 0x8c, 0xa2, 0x1e, 0x25, - 0xa9, 0x99, 0x0b, 0x25, 0x81, 0xac, 0x01, 0x98, 0x20, 0x22, 0xa0, 0xac, 0x73, 0xa9, 0x98, 0x34, - 0x9d, 0x95, 0x1c, 0x92, 0x1b, 0x13, 0x22, 0xb9, 0xcd, 0x39, 0x04, 0x8d, 0x15, 0x88, 0x8b, 0x93, - 0x0e, 0x02, 0x00, 0x20, 0xbc, 0x10, 0x42, 0x82, 0xdf, 0x40, 0x81, 0xa8, 0x19, 0xa1, 0x08, 0x71, - 0xb2, 0x0c, 0x98, 0x19, 0x63, 0xc1, 0x2b, 0x83, 0x89, 0xab, 0x14, 0x9b, 0x46, 0xa1, 0xac, 0x10, - 0x98, 0x63, 0x91, 0xbb, 0x39, 0x82, 0x01, 0x0b, 0xc8, 0x73, 0x94, 0xac, 0x88, 0x40, 0x13, 0xc8, - 0x9d, 0x81, 0x40, 0x02, 0xab, 0x00, 0x0a, 0x27, 0xc9, 0x8b, 0x04, 0x38, 0x87, 0xcb, 0x29, 0x02, - 0x18, 0x01, 0xbd, 0x42, 0x98, 0x81, 0x08, 0xcb, 0x72, 0xa3, 0xab, 0x8b, 0x04, 0x59, 0x03, 0xba, - 0x8c, 0x22, 0x89, 0x12, 0x08, 0xda, 0x4a, 0x15, 0xba, 0x4a, 0xa3, 0x4a, 0xa5, 0xaf, 0x42, 0x88, - 0x08, 0x80, 0x88, 0x9a, 0x20, 0x03, 0x09, 0xc0, 0x1c, 0x27, 0x9a, 0x80, 0xa9, 0x31, 0xbf, 0x63, - 0x91, 0x9a, 0x91, 0x3a, 0x07, 0xab, 0x29, 0x83, 0x48, 0xb0, 0x0b, 0x00, 0x00, 0x28, 0x07, 0x9f, - 0x81, 0x29, 0x35, 0xc9, 0x8c, 0x32, 0xa1, 0x9b, 0x30, 0x88, 0x52, 0x99, 0xb9, 0x8e, 0x31, 0x15, - 0xaa, 0x90, 0x0d, 0x44, 0xa9, 0x08, 0x81, 0x09, 0x03, 0xdb, 0x0c, 0x37, 0xa8, 0x8a, 0x94, 0x8e, - 0x13, 0x99, 0x22, 0x98, 0x81, 0xac, 0x08, 0xb1, 0x7c, 0x05, 0xa8, 0x9d, 0x21, 0x02, 0x18, 0xb0, - 0x1b, 0x01, 0x9a, 0x46, 0xbb, 0x08, 0x32, 0x90, 0xdc, 0x21, 0x0a, 0x06, 0x19, 0xd0, 0x8a, 0x41, - 0xb1, 0x1c, 0x15, 0x1b, 0xa2, 0x9d, 0x82, 0x19, 0x54, 0x91, 0x9c, 0xa9, 0x59, 0x23, 0xc9, 0x30, - 0xb9, 0xb0, 0x1c, 0x27, 0x99, 0x11, 0xda, 0x19, 0x84, 0x89, 0x11, 0x81, 0x99, 0x02, 0xcf, 0x33, - 0x98, 0x0a, 0x25, 0xa8, 0xfb, 0x3a, 0x06, 0x09, 0xc2, 0x0a, 0x02, 0x18, 0x99, 0x21, 0x23, 0xbe, - 0x43, 0xcd, 0x28, 0x14, 0x99, 0x18, 0xc8, 0x1a, 0x21, 0x16, 0xea, 0x29, 0x01, 0x00, 0xb8, 0x18, - 0x03, 0x90, 0x1b, 0x85, 0xbf, 0x30, 0x14, 0x88, 0xb0, 0x0e, 0x93, 0x3b, 0x02, 0x33, 0xbd, 0x88, - 0x88, 0x0c, 0x47, 0xa8, 0x8a, 0x89, 0x34, 0xc1, 0x0c, 0x15, 0xba, 0x09, 0x51, 0x91, 0xbb, 0x38, - 0x26, 0xd9, 0x89, 0x20, 0x85, 0xab, 0x11, 0x29, 0x26, 0xab, 0x99, 0x1c, 0x33, 0x11, 0xd0, 0x8b, - 0x99, 0x31, 0x27, 0xb8, 0xbc, 0x38, 0x04, 0x18, 0xa3, 0xaf, 0x35, 0xa9, 0x8a, 0x10, 0x08, 0x04, - 0x9a, 0x88, 0x2a, 0xa4, 0x6a, 0xc2, 0x0c, 0x02, 0x24, 0xcb, 0xca, 0x60, 0x02, 0x09, 0x99, 0x99, - 0x28, 0x93, 0x79, 0xa1, 0x1a, 0xb1, 0x58, 0xc0, 0x2b, 0x84, 0x89, 0x28, 0xd0, 0x8c, 0x25, 0x90, - 0xbb, 0x72, 0x01, 0xf8, 0x3a, 0x93, 0x29, 0xa2, 0x0a, 0xc9, 0x29, 0x53, 0xc3, 0x9d, 0x02, 0x20, - 0xc9, 0x30, 0x80, 0x90, 0x30, 0x82, 0xfb, 0x8d, 0x62, 0x92, 0xba, 0x28, 0x14, 0xc9, 0x19, 0xb8, - 0x58, 0x33, 0xb0, 0xcc, 0x1a, 0x14, 0x30, 0xd0, 0x09, 0xb8, 0x2b, 0x16, 0x32, 0xca, 0x9c, 0x32, - 0xd9, 0x29, 0x33, 0x83, 0x8f, 0x91, 0x4a, 0xb1, 0x0c, 0x43, 0xb0, 0x0a, 0x08, 0x12, 0x90, 0x8b, - 0x02, 0x35, 0xcf, 0x10, 0x10, 0x11, 0x80, 0xda, 0x71, 0xd1, 0x8c, 0x31, 0x03, 0xbb, 0x00, 0x00, - 0x82, 0x1b, 0x05, 0x89, 0xfb, 0x78, 0x81, 0xa9, 0x0a, 0x22, 0x24, 0xa9, 0xdc, 0x48, 0x81, 0x28, - 0xb1, 0x0c, 0x93, 0x28, 0x80, 0xf0, 0x1c, 0x23, 0x1a, 0xb3, 0x8e, 0x88, 0x64, 0xb0, 0x89, 0x89, - 0x32, 0x83, 0xed, 0x30, 0xa1, 0x28, 0x93, 0xac, 0x88, 0x09, 0x37, 0xa0, 0x89, 0xad, 0x53, 0x80, - 0x09, 0x80, 0x81, 0xac, 0x88, 0x30, 0x24, 0xb0, 0x1c, 0xa2, 0x98, 0x0b, 0x14, 0xbb, 0x27, 0x8c, - 0x16, 0xbc, 0x32, 0x98, 0x00, 0x98, 0x0c, 0x25, 0xd9, 0x2a, 0x15, 0x89, 0xa2, 0x9d, 0x01, 0x10, - 0x11, 0x24, 0xeb, 0x08, 0xc9, 0x38, 0x03, 0x08, 0x09, 0xa6, 0x0e, 0xb2, 0x2a, 0x35, 0x83, 0xaf, - 0x08, 0x00, 0x21, 0x98, 0x10, 0x89, 0xd0, 0x0c, 0x34, 0xa8, 0x22, 0x80, 0xbb, 0xbd, 0x19, 0x75, - 0x03, 0xbc, 0x19, 0x91, 0x0a, 0x23, 0x00, 0x01, 0xb9, 0x18, 0xfb, 0x2a, 0x00, 0x15, 0x28, 0xfb, - 0x6a, 0xa0, 0x08, 0x63, 0xa0, 0x8b, 0xb8, 0x3a, 0x25, 0x11, 0x90, 0xac, 0x99, 0xab, 0x64, 0x10, - 0xb3, 0x0a, 0xb8, 0xbc, 0x71, 0x83, 0x29, 0x82, 0xcf, 0x09, 0x53, 0x82, 0xaa, 0x80, 0x9c, 0x34, - 0xc0, 0x8c, 0x52, 0x81, 0xab, 0x22, 0xdb, 0x40, 0x12, 0xa8, 0xaa, 0x29, 0x14, 0x12, 0xf8, 0x8c, - 0x23, 0x08, 0xa3, 0x9f, 0x19, 0x34, 0x98, 0xa0, 0x8d, 0x12, 0x0a, 0x06, 0x9d, 0x23, 0x8a, 0x10, - 0xca, 0x29, 0x14, 0x11, 0xca, 0x4a, 0xc1, 0x2c, 0x05, 0xa9, 0x20, 0xc0, 0x19, 0x28, 0x02, 0x18, - 0xea, 0x0b, 0x17, 0x18, 0xb0, 0x1b, 0x83, 0x1b, 0x01, 0x94, 0xff, 0x48, 0x04, 0xb9, 0x8a, 0x12, - 0x09, 0x23, 0xc9, 0x89, 0x10, 0x33, 0xe9, 0x19, 0x91, 0x30, 0x81, 0xdb, 0x2a, 0x15, 0x19, 0x16, - 0xec, 0x0a, 0x34, 0xa0, 0x8a, 0x80, 0x08, 0x21, 0x91, 0x9c, 0x00, 0x90, 0x62, 0xa0, 0xbb, 0x74, - 0xb0, 0x89, 0x10, 0x81, 0x0a, 0x06, 0xa9, 0x9a, 0x42, 0xb1, 0x89, 0x0d, 0x47, 0xb9, 0x8a, 0x10, - 0x23, 0x08, 0x02, 0xaf, 0xd8, 0x69, 0x05, 0xba, 0x18, 0x01, 0x89, 0x02, 0x9d, 0x32, 0x82, 0xab, - 0xb9, 0x39, 0x54, 0x15, 0xbd, 0x00, 0x09, 0x13, 0x12, 0xea, 0x9a, 0x50, 0x14, 0xca, 0x8a, 0x11, - 0x52, 0xb2, 0x9d, 0x18, 0x22, 0x9a, 0x20, 0xa8, 0x18, 0x8a, 0x15, 0xbb, 0x41, 0xa2, 0x2a, 0xf3, - 0x9f, 0x36, 0xb9, 0x09, 0x01, 0x80, 0x1a, 0x95, 0x0d, 0x12, 0x08, 0xb8, 0x19, 0x02, 0x21, 0xac, - 0x11, 0xcb, 0x73, 0xb6, 0x8b, 0x81, 0x19, 0x64, 0xb1, 0x9e, 0x30, 0x80, 0x02, 0x8a, 0xba, 0x49, - 0x03, 0x34, 0xdc, 0x09, 0x20, 0x14, 0xbb, 0xab, 0x58, 0x05, 0x08, 0xb1, 0xad, 0x30, 0x23, 0xa0, - 0xac, 0x32, 0x01, 0xa9, 0x1c, 0xc2, 0x70, 0x93, 0xcc, 0x1a, 0x22, 0x32, 0xd2, 0x8d, 0x02, 0x9a, - 0x41, 0x82, 0x9a, 0x09, 0x10, 0xb0, 0xbf, 0x55, 0x01, 0xda, 0x2a, 0x22, 0x92, 0xdb, 0x19, 0x13, - 0x88, 0x33, 0xfc, 0x8a, 0x43, 0x90, 0x29, 0xe8, 0x19, 0x33, 0x92, 0x9f, 0x01, 0x29, 0x84, 0x8b, - 0xb9, 0x7a, 0x85, 0x9a, 0x88, 0x00, 0x21, 0x00, 0xcb, 0x99, 0x62, 0x02, 0x90, 0xdc, 0x19, 0x43, - 0x82, 0xcb, 0x0a, 0x12, 0x38, 0x84, 0xac, 0x28, 0x22, 0xfa, 0x2a, 0x01, 0x24, 0xab, 0x91, 0xaa, - 0x08, 0x71, 0x87, 0x9c, 0x80, 0x41, 0x81, 0xad, 0x28, 0x23, 0x91, 0xbe, 0x00, 0x21, 0x13, 0xa9, - 0x9a, 0x9c, 0x54, 0x91, 0xa9, 0x88, 0x29, 0x16, 0x90, 0xfb, 0x29, 0x34, 0x80, 0xcc, 0x89, 0x70, - 0x83, 0xab, 0x9a, 0x42, 0x92, 0x08, 0x90, 0xbc, 0x40, 0x32, 0xa1, 0xbc, 0x19, 0x22, 0x13, 0xdb, - 0x8c, 0x36, 0xc0, 0x9b, 0x18, 0x36, 0xa8, 0xa8, 0x1b, 0x33, 0xc8, 0x28, 0x93, 0xcf, 0x22, 0x21, - 0xa2, 0xaf, 0x38, 0x34, 0xe9, 0x1a, 0x80, 0x32, 0xa1, 0xad, 0x21, 0x03, 0xcc, 0x18, 0x08, 0x23, - 0x22, 0xb0, 0xaf, 0x0b, 0x25, 0x22, 0xc0, 0xac, 0x2b, 0x26, 0x90, 0xb9, 0x1b, 0x26, 0x98, 0xad, - 0x31, 0x32, 0xc0, 0x08, 0xca, 0x18, 0x22, 0x23, 0xdf, 0x28, 0x03, 0x08, 0xc0, 0x8a, 0x20, 0x27, - 0xc9, 0x9a, 0x00, 0x44, 0x90, 0x89, 0xdb, 0x50, 0x82, 0x90, 0xac, 0x02, 0x20, 0x24, 0xea, 0x8a, - 0x41, 0x92, 0xaa, 0x89, 0x41, 0x92, 0x09, 0xb8, 0xaa, 0x64, 0x14, 0xca, 0xab, 0x08, 0x65, 0x91, - 0xab, 0x20, 0xa0, 0x29, 0x15, 0xb9, 0xbb, 0x74, 0xa1, 0x8b, 0x12, 0x8b, 0x42, 0xc1, 0x1b, 0x81, - 0x38, 0x21, 0xf0, 0x1c, 0x05, 0xb8, 0x08, 0x08, 0x88, 0x32, 0x9a, 0x33, 0xf8, 0x0f, 0x14, 0x80, - 0x8b, 0x01, 0x88, 0xb9, 0x69, 0x04, 0x8a, 0xd0, 0x0b, 0x62, 0x92, 0x9b, 0x19, 0x04, 0x89, 0x84, - 0x9d, 0x13, 0x0a, 0xc1, 0x50, 0xc8, 0x19, 0x20, 0x06, 0xbc, 0x20, 0x12, 0x80, 0xcb, 0x30, 0xa0, - 0x49, 0x91, 0x10, 0xea, 0x8a, 0x25, 0x80, 0x99, 0x09, 0x11, 0xb1, 0x0c, 0x24, 0x18, 0x27, 0xfb, - 0x0b, 0x13, 0x8a, 0x34, 0x90, 0xaa, 0x8c, 0xbb, 0x77, 0x90, 0x0a, 0x08, 0x80, 0x19, 0x12, 0x88, - 0xc8, 0x8d, 0x24, 0xc8, 0x38, 0xa4, 0x49, 0xd2, 0x0b, 0x21, 0x98, 0x80, 0x39, 0x83, 0x8c, 0x93, - 0x8f, 0xa3, 0x7b, 0xa1, 0x18, 0x80, 0x91, 0x8d, 0x31, 0x02, 0xc8, 0x8a, 0x99, 0x21, 0x52, 0x04, - 0xf9, 0x0b, 0x04, 0x28, 0xa2, 0xbc, 0x34, 0xa0, 0x1a, 0x91, 0x8e, 0x13, 0x31, 0xa4, 0xdf, 0x20, - 0x91, 0x18, 0x02, 0xd9, 0x39, 0xa2, 0x5a, 0xd1, 0x0b, 0x21, 0x17, 0xba, 0x08, 0x1a, 0x15, 0x98, - 0x82, 0xb8, 0x9f, 0x44, 0xb0, 0x1a, 0x01, 0x10, 0xd0, 0x8b, 0x32, 0x80, 0x11, 0x90, 0xaf, 0x88, - 0x41, 0x24, 0xe8, 0x1a, 0x90, 0x8a, 0x71, 0x83, 0xaa, 0x00, 0x98, 0xab, 0x51, 0x25, 0xc8, 0x9b, - 0x02, 0x59, 0x94, 0x9c, 0x12, 0x88, 0xa8, 0x20, 0x91, 0x38, 0x21, 0xf3, 0x9d, 0x9a, 0x37, 0x99, - 0x09, 0x93, 0x8e, 0x43, 0xb0, 0x9d, 0x32, 0x81, 0x28, 0xda, 0x28, 0x81, 0xa9, 0x51, 0xc0, 0x09, - 0x08, 0x45, 0xd8, 0x8a, 0x42, 0xa0, 0x88, 0x19, 0xa4, 0x1d, 0x02, 0x10, 0xca, 0x19, 0x03, 0x91, - 0x4b, 0xb2, 0xad, 0x35, 0x99, 0xa8, 0x18, 0xa0, 0x60, 0xb1, 0x3a, 0x04, 0xcb, 0x8f, 0x36, 0xb8, - 0x19, 0x90, 0x2a, 0x14, 0xcc, 0x48, 0x01, 0x99, 0x09, 0xb8, 0x2c, 0x37, 0xa8, 0x8b, 0xd1, 0x3b, - 0x27, 0x90, 0xaa, 0x80, 0x0a, 0x17, 0xa9, 0x18, 0x01, 0x98, 0x19, 0x93, 0xcc, 0x59, 0x15, 0xba, - 0x9a, 0x31, 0x20, 0x03, 0xcc, 0x1b, 0x04, 0x8a, 0x11, 0xa1, 0x5b, 0x16, 0xda, 0x18, 0x01, 0xc9, - 0x50, 0xa1, 0x0a, 0x22, 0xb0, 0x9a, 0x59, 0x92, 0x20, 0xc0, 0xaf, 0x15, 0x2a, 0x93, 0xad, 0x29, - 0x15, 0xa8, 0xaa, 0x11, 0x21, 0x16, 0xbb, 0xa9, 0x0a, 0x33, 0x37, 0xba, 0xbb, 0x10, 0x44, 0x31, - 0xf0, 0x2f, 0x00, 0x80, 0x89, 0x01, 0x8a, 0x43, 0xaa, 0x92, 0x9f, 0x22, 0x03, 0x9b, 0x81, 0x98, - 0x31, 0xfb, 0x3a, 0x01, 0x41, 0xa3, 0xbf, 0x00, 0x31, 0x98, 0x22, 0x8a, 0xa3, 0x9f, 0x81, 0x78, - 0x96, 0x9a, 0x98, 0x00, 0x10, 0x53, 0xa2, 0xcb, 0x9f, 0x43, 0x81, 0xa8, 0x8d, 0x22, 0x00, 0xa9, - 0x1a, 0x12, 0xa2, 0x3b, 0xa5, 0x9f, 0x31, 0x15, 0xa9, 0xba, 0x2a, 0x15, 0x23, 0xec, 0x88, 0x30, - 0xa3, 0x0c, 0xb1, 0x68, 0x91, 0x08, 0xa8, 0x89, 0x20, 0x54, 0x82, 0xcf, 0x19, 0x24, 0xa9, 0x10, - 0xa9, 0x90, 0x28, 0x02, 0x31, 0xb9, 0xa9, 0x78, 0xb1, 0x8e, 0x44, 0xa0, 0x88, 0x9b, 0x12, 0x22, - 0xb0, 0x8f, 0x82, 0x6a, 0xb3, 0x8d, 0x01, 0x21, 0x99, 0x82, 0x0c, 0xc1, 0x0e, 0x24, 0x00, 0x9b, - 0x12, 0xa9, 0xb9, 0x1b, 0x77, 0x91, 0xbb, 0x39, 0x04, 0x9a, 0x33, 0xc9, 0x09, 0x9d, 0x17, 0x8a, - 0x82, 0x89, 0x00, 0x31, 0xfb, 0x1a, 0x32, 0x02, 0xda, 0x3a, 0x15, 0xfa, 0x28, 0x92, 0x1a, 0xa3, - 0x8c, 0x23, 0x99, 0x19, 0x73, 0xb1, 0xaf, 0x30, 0x02, 0x99, 0x00, 0x80, 0x80, 0x9a, 0x22, 0xec, - 0x52, 0xa0, 0x28, 0x90, 0xa9, 0x69, 0xb2, 0x78, 0xc1, 0x8b, 0x30, 0xa3, 0x0a, 0x09, 0x36, 0xd0, - 0xac, 0x38, 0x14, 0x18, 0x80, 0xd8, 0x8e, 0x22, 0x11, 0x91, 0xcb, 0x0a, 0x23, 0x20, 0xa0, 0x1a, - 0x52, 0xd1, 0x9b, 0x2b, 0x37, 0xa9, 0x08, 0xb8, 0x1b, 0x26, 0xb9, 0x62, 0xc0, 0x8a, 0x30, 0x04, - 0xcb, 0x20, 0x11, 0xd1, 0x1b, 0x01, 0x91, 0x9b, 0x69, 0x84, 0x8a, 0xb9, 0x39, 0x47, 0xa9, 0x09, - 0xa9, 0x89, 0x46, 0x80, 0x98, 0x8c, 0xa1, 0x79, 0x93, 0x0b, 0xb0, 0x2b, 0x37, 0xca, 0x19, 0x10, - 0x02, 0xa9, 0xbb, 0x72, 0xc1, 0x38, 0x11, 0xe8, 0x1a, 0x93, 0x2c, 0x84, 0x9a, 0x44, 0xc9, 0x8b, - 0x63, 0xb0, 0x2b, 0x15, 0xc9, 0x0b, 0x23, 0xa8, 0x31, 0x91, 0xc9, 0x2b, 0xa2, 0x79, 0x94, 0x8d, - 0x12, 0xaa, 0x38, 0x83, 0xb8, 0x9c, 0x53, 0x03, 0xcc, 0x10, 0x28, 0xd8, 0x70, 0x92, 0xac, 0x00, - 0x01, 0x32, 0xc8, 0x8a, 0x03, 0xbb, 0x31, 0x09, 0x27, 0xa1, 0x0d, 0xc9, 0x1a, 0x63, 0xa3, 0x1b, - 0xb3, 0xac, 0x19, 0x25, 0xa8, 0x21, 0xbb, 0x11, 0x82, 0xbf, 0x47, 0xb0, 0x0c, 0x04, 0xba, 0x29, - 0x23, 0x22, 0xe8, 0xab, 0x1a, 0x26, 0x8b, 0x23, 0x09, 0xd9, 0x19, 0x11, 0x90, 0x1a, 0xd4, 0x5a, - 0x85, 0x9d, 0x00, 0x30, 0x82, 0xaa, 0x9a, 0x13, 0x40, 0xb2, 0x8c, 0x81, 0x30, 0xcc, 0x64, 0xe8, - 0x2a, 0x14, 0xa8, 0x99, 0x8a, 0x34, 0x91, 0x98, 0x8c, 0x91, 0x59, 0xc1, 0x50, 0xa1, 0x9c, 0x32, - 0xc1, 0x5b, 0xa4, 0x8c, 0x22, 0x89, 0x89, 0x42, 0xc0, 0x09, 0x00, 0x90, 0x2a, 0xc1, 0x68, 0x93, - 0x9f, 0x11, 0x12, 0x9b, 0x00, 0x20, 0xfb, 0x29, 0x42, 0x91, 0x8a, 0xaa, 0x31, 0x84, 0x0d, 0x01, - 0x89, 0x09, 0x25, 0xac, 0x90, 0x79, 0xb4, 0x0a, 0xa0, 0x29, 0x15, 0x28, 0xd8, 0x0a, 0x28, 0xa0, - 0x34, 0xea, 0x1a, 0x83, 0x29, 0x15, 0xcb, 0x28, 0xac, 0x36, 0xd9, 0x18, 0x23, 0xdb, 0x38, 0x81, - 0x0a, 0x82, 0xa9, 0x29, 0x87, 0x0e, 0x13, 0x89, 0xba, 0x22, 0x9b, 0x41, 0x80, 0x33, 0xde, 0x18, - 0x81, 0x21, 0x04, 0xcd, 0x20, 0x00, 0x11, 0xa0, 0x9c, 0x22, 0x08, 0xb1, 0x1e, 0xb0, 0x70, 0x85, - 0xba, 0x9a, 0x31, 0x23, 0x81, 0x9d, 0xc1, 0x69, 0xd2, 0x2a, 0x84, 0x89, 0x01, 0x81, 0xda, 0x0a, - 0x43, 0x04, 0xca, 0x89, 0x18, 0x51, 0x91, 0xb9, 0x0b, 0x15, 0x99, 0x12, 0xac, 0x42, 0x13, 0xfb, - 0x0a, 0x99, 0x72, 0x93, 0x8c, 0x98, 0x30, 0x91, 0xba, 0x70, 0xb4, 0x1b, 0x03, 0x98, 0x8c, 0x63, - 0x98, 0x09, 0xb9, 0x2a, 0x45, 0x92, 0xad, 0x02, 0x8a, 0x36, 0xea, 0x18, 0x10, 0xa0, 0x1a, 0x82, - 0x19, 0xa8, 0x33, 0x8d, 0x96, 0x9c, 0x72, 0xb1, 0x9b, 0x32, 0x82, 0x99, 0x9b, 0x15, 0x9a, 0x84, - 0x8c, 0x33, 0xe1, 0x38, 0xb0, 0x9c, 0x32, 0x30, 0xd1, 0x8d, 0x33, 0xb9, 0x88, 0x12, 0x8f, 0x13, - 0x10, 0xd9, 0x0c, 0x34, 0xa1, 0xcb, 0x30, 0x80, 0x92, 0x60, 0xe8, 0x38, 0xa1, 0x3a, 0xa2, 0xfa, - 0x3a, 0x17, 0x98, 0xaa, 0x98, 0x50, 0x12, 0xba, 0x2a, 0x02, 0x08, 0x82, 0xce, 0x30, 0x23, 0xc8, - 0x0a, 0xb9, 0x7b, 0x15, 0x91, 0xcb, 0x8a, 0x43, 0x13, 0xb9, 0x9d, 0x31, 0xb2, 0x0c, 0x01, 0x08, - 0x88, 0x54, 0xc1, 0xac, 0x18, 0x53, 0x91, 0xbc, 0x41, 0x81, 0x09, 0xc9, 0x08, 0x30, 0x34, 0xe0, - 0x8b, 0x81, 0x31, 0x24, 0xe8, 0x8b, 0x02, 0x0a, 0x17, 0xb9, 0x88, 0x34, 0xa8, 0xcd, 0x38, 0x23, - 0x11, 0xfa, 0x1b, 0x03, 0xba, 0x70, 0x91, 0x09, 0x90, 0x2a, 0x84, 0xad, 0x52, 0x81, 0x88, 0xdb, - 0x28, 0x12, 0x30, 0xb2, 0x9f, 0x81, 0x88, 0x12, 0x30, 0x86, 0xcb, 0x0a, 0x21, 0xa9, 0x20, 0x33, - 0xe8, 0x8d, 0x22, 0x00, 0xd1, 0x8d, 0x44, 0xb1, 0x0c, 0x88, 0x31, 0x11, 0xda, 0x18, 0x90, 0x0b, - 0x47, 0xaa, 0x21, 0x99, 0x41, 0xc1, 0x9d, 0x80, 0x63, 0xa1, 0x8b, 0xa8, 0x59, 0x05, 0x99, 0x8a, - 0x81, 0x2a, 0x04, 0x01, 0xdd, 0x29, 0x52, 0x91, 0xda, 0x1a, 0x24, 0x90, 0x98, 0xa9, 0x70, 0xa1, - 0x88, 0x88, 0x08, 0x20, 0x00, 0x12, 0xff, 0x38, 0x12, 0xa1, 0x9c, 0x80, 0x40, 0x93, 0x9d, 0x11, - 0x81, 0x88, 0x99, 0x03, 0x9d, 0x02, 0x38, 0x15, 0xfb, 0x1b, 0x23, 0xa0, 0x89, 0x61, 0xa1, 0x9c, - 0x28, 0x89, 0x57, 0xb9, 0x1b, 0x14, 0xa9, 0x11, 0xaa, 0x12, 0xb8, 0x41, 0x01, 0xe0, 0x8e, 0x24, - 0x92, 0x9c, 0x99, 0x62, 0xa2, 0xab, 0x10, 0x12, 0x22, 0xfb, 0x8c, 0x15, 0x9a, 0x52, 0xb8, 0x09, - 0x99, 0x50, 0x04, 0xbb, 0x08, 0x40, 0x92, 0xab, 0x38, 0x12, 0x08, 0xc0, 0x0c, 0x92, 0x2b, 0x37, - 0xb8, 0x09, 0xea, 0x41, 0xc0, 0x28, 0x92, 0x21, 0xf8, 0x8b, 0x22, 0x21, 0x92, 0xae, 0x20, 0x81, - 0x9b, 0x12, 0x82, 0x6c, 0xb3, 0x1c, 0x90, 0xaa, 0x71, 0x24, 0xd9, 0x8b, 0x82, 0x63, 0xb0, 0x9b, - 0x42, 0xc1, 0x38, 0xc8, 0x8a, 0x53, 0xa1, 0x0a, 0xb2, 0x9e, 0x21, 0x44, 0xa0, 0xbc, 0x1a, 0x43, - 0x02, 0x9a, 0xbc, 0x72, 0xb3, 0x8c, 0x22, 0xb9, 0x50, 0x93, 0xac, 0x00, 0x39, 0x94, 0x28, 0xcb, - 0x18, 0x22, 0x90, 0x10, 0xc9, 0x0c, 0x34, 0xd1, 0x8e, 0x82, 0x38, 0x93, 0x08, 0xd9, 0x28, 0xdc, - 0x43, 0x81, 0xac, 0x63, 0xb0, 0x0a, 0x00, 0x01, 0x10, 0xdb, 0x31, 0x31, 0xe1, 0xab, 0x71, 0x93, - 0x9c, 0x08, 0x21, 0x9a, 0x34, 0xcb, 0x18, 0x80, 0xaa, 0x46, 0xe9, 0x20, 0x00, 0xb0, 0x28, 0xea, - 0x52, 0x88, 0x98, 0x09, 0x99, 0x55, 0xb8, 0x88, 0x89, 0x15, 0x8b, 0x05, 0x9a, 0xa9, 0x61, 0x91, - 0x89, 0xa9, 0x48, 0x94, 0x0a, 0xb1, 0x58, 0xb1, 0x4a, 0x93, 0xbf, 0x42, 0x02, 0xa8, 0xbc, 0x21, - 0x00, 0x62, 0xd0, 0x8a, 0x12, 0x11, 0x9a, 0x1a, 0x00, 0x24, 0xbb, 0x02, 0x9e, 0x82, 0x6a, 0x84, - 0x0b, 0xa8, 0x28, 0x39, 0xc7, 0x1d, 0x04, 0x99, 0x18, 0x00, 0x88, 0x89, 0x30, 0x85, 0xad, 0x18, - 0x12, 0xa0, 0x31, 0xa0, 0xd9, 0x00, 0xad, 0x73, 0xb4, 0x09, 0xb9, 0x62, 0xb0, 0x89, 0x18, 0x14, - 0x00, 0xec, 0x20, 0x80, 0x30, 0x92, 0x88, 0xaf, 0x12, 0x20, 0xb2, 0x0b, 0xc9, 0x70, 0x92, 0xcb, - 0x19, 0x26, 0x99, 0xa8, 0x20, 0x08, 0xc2, 0x2d, 0x15, 0x99, 0x9c, 0x32, 0xb8, 0x1a, 0x01, 0x24, - 0x11, 0xfa, 0x19, 0xb9, 0x62, 0x90, 0x41, 0xcb, 0x81, 0x0c, 0x17, 0xb9, 0x20, 0x90, 0x9a, 0x58, - 0x93, 0x1c, 0x03, 0xea, 0x29, 0x82, 0x8a, 0x11, 0x14, 0xa9, 0xb9, 0x1d, 0x44, 0x91, 0xad, 0x18, - 0x34, 0xa9, 0x88, 0xa1, 0x8e, 0x42, 0xa1, 0x8b, 0x85, 0x8d, 0x34, 0xa9, 0x19, 0x98, 0x20, 0x9a, - 0x85, 0x0e, 0x44, 0xc8, 0x0b, 0x11, 0x08, 0x20, 0x11, 0xeb, 0x19, 0x80, 0x28, 0x16, 0xe9, 0x3a, - 0xa4, 0x8a, 0x02, 0x90, 0x61, 0xd1, 0x8b, 0x12, 0x01, 0xb8, 0x30, 0xfa, 0x40, 0xa2, 0x19, 0x90, - 0x09, 0x41, 0xa3, 0xcf, 0x12, 0x12, 0x99, 0x98, 0xea, 0x68, 0x03, 0xba, 0x0a, 0x11, 0x12, 0x20, - 0xfa, 0x1b, 0x04, 0x0b, 0x81, 0x33, 0xaf, 0x30, 0x82, 0xae, 0x32, 0xb1, 0x78, 0xd1, 0x0b, 0x33, - 0x80, 0xba, 0x10, 0x01, 0xa9, 0x51, 0x81, 0x89, 0xc8, 0x2a, 0x02, 0x00, 0x0f, 0x16, 0xa9, 0xcb, - 0x48, 0x24, 0xb0, 0xac, 0x2b, 0x47, 0xa9, 0x88, 0x99, 0x33, 0xba, 0x42, 0xb8, 0x29, 0x44, 0xd9, - 0x1a, 0x88, 0x42, 0x01, 0xb8, 0xaf, 0x22, 0x24, 0xc8, 0x9c, 0x18, 0x34, 0xa0, 0x88, 0xac, 0x41, - 0xa0, 0x31, 0xfa, 0x1b, 0x13, 0x52, 0xd8, 0x9a, 0x30, 0x16, 0xab, 0x98, 0x20, 0x13, 0x10, 0xf9, - 0x2b, 0x81, 0x31, 0xb1, 0x09, 0x98, 0x1b, 0x17, 0xa8, 0x0b, 0x82, 0x35, 0xef, 0x20, 0x18, 0x03, - 0xad, 0x18, 0x21, 0x81, 0x9c, 0x50, 0xc3, 0x1c, 0x82, 0x9a, 0x19, 0x37, 0xa9, 0xba, 0x1a, 0x63, - 0x12, 0xb9, 0x0c, 0x90, 0x31, 0x21, 0xd1, 0xaf, 0x31, 0x23, 0xd0, 0x8b, 0x01, 0x10, 0x23, 0xf9, - 0x8c, 0x15, 0x09, 0x91, 0x9b, 0x19, 0x27, 0xa9, 0x99, 0x18, 0x22, 0x32, 0xf9, 0x8a, 0x8a, 0x45, - 0x90, 0xa8, 0x89, 0x01, 0x30, 0xf0, 0x29, 0x93, 0x19, 0x81, 0xdc, 0x48, 0x12, 0x01, 0xbd, 0x88, - 0x00, 0x34, 0xc1, 0x8a, 0x21, 0xa8, 0x62, 0xfb, 0x08, 0x61, 0xa1, 0x8b, 0x80, 0x28, 0x12, 0x88, - 0xab, 0x10, 0x23, 0x22, 0xfb, 0x8e, 0x42, 0x82, 0xa8, 0xbd, 0x48, 0x85, 0x89, 0x98, 0x30, 0x81, - 0x18, 0xf1, 0x1d, 0x21, 0x22, 0xd9, 0x9b, 0x09, 0x36, 0x00, 0xb0, 0x0c, 0xc8, 0x49, 0x13, 0x80, - 0xad, 0x53, 0xb9, 0x99, 0x32, 0xa0, 0x44, 0xe8, 0x8c, 0x32, 0x00, 0x81, 0xba, 0x89, 0x60, 0xa3, - 0x1b, 0xc8, 0x31, 0x31, 0xb4, 0xbf, 0x21, 0x01, 0x01, 0xdb, 0x28, 0x21, 0xb3, 0x8c, 0xd9, 0x69, - 0x03, 0x01, 0xaf, 0x80, 0x30, 0x04, 0xb9, 0x9b, 0x42, 0x91, 0x18, 0xe8, 0x2b, 0x26, 0x08, 0xa8, - 0xcb, 0x58, 0x03, 0xba, 0x10, 0x98, 0x02, 0x3a, 0xa4, 0x8c, 0x89, 0x66, 0xd8, 0x0a, 0x11, 0x31, - 0xc0, 0x8b, 0x88, 0x61, 0xa2, 0x8b, 0xa8, 0x72, 0x82, 0x9b, 0x00, 0xa9, 0x58, 0x02, 0x88, 0xcc, - 0x31, 0x82, 0x00, 0xdc, 0x51, 0x91, 0xab, 0x18, 0x14, 0x8a, 0x13, 0xba, 0xbc, 0x28, 0x43, 0x36, - 0xde, 0x21, 0x90, 0x80, 0x0a, 0x04, 0x8b, 0x04, 0xcb, 0x50, 0x82, 0x99, 0x88, 0x8a, 0x12, 0x57, - 0xe8, 0x8a, 0x32, 0xa0, 0x18, 0xa1, 0xc9, 0x2a, 0x17, 0x89, 0x98, 0x09, 0x42, 0x81, 0xcc, 0x0a, - 0x34, 0x10, 0xf8, 0x8a, 0x22, 0x11, 0xb0, 0x1c, 0x90, 0x48, 0x13, 0xdb, 0x01, 0x9d, 0x73, 0x81, - 0xbc, 0x18, 0x33, 0xa2, 0xac, 0x88, 0x30, 0x24, 0xa0, 0xac, 0xa9, 0x71, 0x02, 0x90, 0xbd, 0x12, - 0x29, 0x93, 0x0a, 0x89, 0x63, 0xc0, 0x8a, 0x82, 0x0c, 0x37, 0xd8, 0x2a, 0xa0, 0x00, 0x20, 0x21, - 0xe0, 0x8c, 0x21, 0x10, 0x03, 0xdc, 0x28, 0x83, 0xba, 0x59, 0x84, 0x9a, 0x11, 0x28, 0x93, 0xcf, - 0x09, 0x11, 0x73, 0x91, 0xba, 0x0a, 0x81, 0x40, 0x21, 0xc4, 0x9f, 0x30, 0x81, 0x9a, 0x10, 0x20, - 0xa2, 0x9c, 0x99, 0x59, 0x27, 0x90, 0x9a, 0xa9, 0x0b, 0x27, 0x08, 0x91, 0x8d, 0x13, 0x9b, 0xa1, - 0x3c, 0x17, 0x99, 0x9a, 0x11, 0x90, 0x11, 0x19, 0xb3, 0x9e, 0xa8, 0x61, 0x91, 0x09, 0x20, 0x02, - 0xfb, 0x8b, 0x28, 0x73, 0x96, 0x9c, 0x01, 0x11, 0x98, 0xaa, 0x41, 0x81, 0x99, 0x24, 0xad, 0x88, - 0x22, 0x24, 0x09, 0xf8, 0x1e, 0x03, 0x8a, 0x81, 0x23, 0xfb, 0x89, 0x20, 0x82, 0x48, 0xc0, 0x28, - 0xca, 0x00, 0x19, 0x36, 0xb1, 0x9e, 0x80, 0x51, 0x92, 0xad, 0x30, 0x83, 0x98, 0x9d, 0x42, 0x92, - 0x9c, 0x33, 0xb8, 0xbc, 0x70, 0x02, 0x89, 0xd9, 0x48, 0x92, 0x8a, 0x99, 0x52, 0x91, 0xa9, 0xa8, - 0x38, 0x03, 0x8a, 0x11, 0x0b, 0xc4, 0x8f, 0x52, 0xa1, 0x8a, 0x00, 0x21, 0xb2, 0xaf, 0x72, 0xc3, - 0x0b, 0x02, 0x08, 0x84, 0x9d, 0x12, 0x89, 0x01, 0x88, 0xa2, 0x8c, 0x11, 0x43, 0xc8, 0xbd, 0x30, - 0x14, 0x02, 0xdc, 0x09, 0x00, 0x25, 0x98, 0xbd, 0x42, 0x91, 0x9b, 0x24, 0xa0, 0x2b, 0x94, 0x0b, - 0x02, 0xc9, 0x79, 0x06, 0xba, 0x8c, 0x42, 0x92, 0x1b, 0xa2, 0x8a, 0x01, 0x11, 0xc9, 0x70, 0xe0, - 0x49, 0x92, 0xab, 0x20, 0x81, 0x12, 0xcc, 0x18, 0x21, 0x13, 0xbf, 0x32, 0x80, 0x90, 0x80, 0xbb, - 0x43, 0x43, 0xe0, 0x19, 0xb0, 0x30, 0x18, 0xc1, 0x69, 0x83, 0xae, 0x11, 0x8a, 0x23, 0x99, 0xb9, - 0x18, 0xac, 0x63, 0x01, 0xe9, 0x39, 0x04, 0x90, 0xdb, 0x2a, 0x17, 0x09, 0xa0, 0x1a, 0xc8, 0x30, - 0x45, 0xd9, 0x2a, 0x80, 0x12, 0xa8, 0x9a, 0x41, 0x44, 0xca, 0x89, 0x08, 0x08, 0x34, 0xda, 0x00, - 0x09, 0x00, 0x02, 0xce, 0x21, 0x38, 0x06, 0xbc, 0x0b, 0x53, 0x81, 0x09, 0xcb, 0x61, 0xa0, 0x28, - 0x91, 0x0a, 0x14, 0x9a, 0xd8, 0x8b, 0x44, 0x23, 0xb9, 0xbe, 0x40, 0x81, 0x22, 0x9b, 0xa8, 0x8b, - 0x53, 0x12, 0xfb, 0x0a, 0x43, 0xa0, 0xb8, 0x3b, 0x93, 0x4c, 0x86, 0xba, 0x8b, 0x35, 0xa1, 0x8d, - 0x10, 0x23, 0x01, 0xdf, 0x51, 0xa0, 0x08, 0x09, 0x04, 0xa9, 0x88, 0x22, 0xba, 0x38, 0x22, 0x91, - 0xfa, 0x9c, 0x62, 0x91, 0x9a, 0x18, 0x04, 0xa8, 0xac, 0x20, 0x52, 0x91, 0x99, 0xe8, 0x0c, 0x25, - 0x00, 0x91, 0xca, 0x1b, 0x17, 0xa9, 0x28, 0xb9, 0x55, 0xb8, 0x19, 0x99, 0x43, 0x89, 0x90, 0x2a, - 0xeb, 0x50, 0x03, 0xa9, 0x8e, 0x22, 0x18, 0xc0, 0x8c, 0x12, 0x21, 0x91, 0xeb, 0x89, 0x51, 0x01, - 0xa9, 0x20, 0xbb, 0x43, 0x98, 0x31, 0xca, 0x19, 0x27, 0xab, 0xc1, 0x3b, 0x27, 0x98, 0xba, 0x30, - 0x03, 0xa9, 0xc9, 0x68, 0xa0, 0x20, 0xaa, 0xc0, 0x1d, 0x27, 0x98, 0xc9, 0x1b, 0x26, 0x00, 0xdb, - 0x28, 0x83, 0x89, 0x90, 0x08, 0x98, 0x51, 0xa3, 0x2a, 0xd9, 0x08, 0x71, 0xc2, 0x0c, 0x81, 0x52, - 0xb8, 0x9b, 0x21, 0x11, 0x01, 0xb8, 0x9f, 0x14, 0x8b, 0x24, 0xb8, 0x09, 0x21, 0xfb, 0x1a, 0x24, - 0xa0, 0x11, 0xda, 0x89, 0x40, 0x16, 0xa8, 0x8d, 0x81, 0x38, 0x86, 0xab, 0x80, 0x42, 0x98, 0x29, - 0xe8, 0x1b, 0x44, 0x90, 0xa9, 0x8b, 0x33, 0x00, 0xa2, 0xdf, 0x42, 0x92, 0x8b, 0x92, 0x0b, 0x02, - 0x44, 0xdb, 0x10, 0xba, 0x52, 0x81, 0xb9, 0x49, 0x90, 0x32, 0xca, 0xaa, 0x78, 0x04, 0xa8, 0x9b, - 0x13, 0x1a, 0x84, 0xac, 0x41, 0xa8, 0x39, 0xd2, 0x2e, 0x14, 0x80, 0x9b, 0xc9, 0x68, 0x93, 0x99, - 0x00, 0xb8, 0x50, 0x91, 0x88, 0xca, 0x51, 0x01, 0xa0, 0x9f, 0x21, 0x01, 0x99, 0xa1, 0x3b, 0x06, - 0xbb, 0x19, 0x15, 0x0c, 0x27, 0xb8, 0xba, 0x4b, 0x17, 0x99, 0x18, 0xc8, 0x29, 0x01, 0x31, 0xca, - 0x08, 0x88, 0x21, 0xba, 0x18, 0x54, 0xb0, 0x28, 0xdc, 0x88, 0x3a, 0x57, 0x9a, 0x89, 0x10, 0x90, - 0x21, 0xc8, 0x1a, 0x34, 0xea, 0x39, 0x12, 0xd8, 0x38, 0xc8, 0x51, 0x88, 0xb9, 0x40, 0x91, 0x09, - 0x08, 0x01, 0xbe, 0x30, 0x43, 0xd1, 0x8d, 0x81, 0x48, 0x04, 0xbd, 0x30, 0xa0, 0x31, 0x90, 0xc8, - 0x0f, 0x03, 0x31, 0xb2, 0xbc, 0x3a, 0x15, 0x99, 0x21, 0xdb, 0x40, 0x80, 0xa9, 0x80, 0x21, 0xb2, - 0x0d, 0x34, 0xc9, 0x38, 0xa9, 0x23, 0xe9, 0x2a, 0xc1, 0x38, 0x38, 0xf3, 0x0f, 0x03, 0xa8, 0x48, - 0xa3, 0x9c, 0x89, 0x46, 0x98, 0x88, 0xbb, 0x41, 0x04, 0xaa, 0x20, 0x80, 0xb8, 0x2b, 0x27, 0xe9, - 0x2a, 0x04, 0x09, 0x90, 0xcc, 0x51, 0x81, 0x98, 0x89, 0x22, 0xd8, 0x39, 0xa1, 0x18, 0x9a, 0x15, - 0x00, 0xeb, 0x2a, 0x15, 0x10, 0xe9, 0x0a, 0x22, 0x92, 0x5a, 0xd1, 0x2a, 0x93, 0x9a, 0x09, 0x42, - 0x94, 0x0d, 0x04, 0xac, 0x01, 0x0b, 0x44, 0xb2, 0x9f, 0x22, 0xa0, 0x9a, 0x43, 0x02, 0xcc, 0x28, - 0xb0, 0x61, 0x80, 0x0a, 0x91, 0x8c, 0x12, 0x80, 0x00, 0xbb, 0x67, 0xb8, 0x08, 0xa9, 0x38, 0x26, - 0xa0, 0xae, 0x30, 0x13, 0xa8, 0xbb, 0x39, 0x14, 0x08, 0xaa, 0x81, 0xcf, 0x72, 0x82, 0xb9, 0x9b, - 0x32, 0x23, 0xda, 0x30, 0x91, 0xcb, 0x48, 0x84, 0xad, 0x52, 0x90, 0x08, 0xba, 0x29, 0x36, 0xc8, - 0x2a, 0x92, 0x8a, 0x18, 0x85, 0x1c, 0x94, 0x99, 0x89, 0x38, 0xb1, 0x38, 0x13, 0xf9, 0x6a, 0xc0, - 0x1a, 0x22, 0xc0, 0x49, 0x14, 0xda, 0x9b, 0x51, 0x12, 0xa8, 0x8c, 0x21, 0x00, 0x90, 0x1b, 0x32, - 0xb1, 0x9f, 0x15, 0xbd, 0x41, 0x80, 0x20, 0xd1, 0x8c, 0x21, 0x11, 0x80, 0x8a, 0x02, 0x09, 0xc0, - 0xaf, 0x51, 0x81, 0x00, 0xa0, 0x9b, 0xa9, 0x74, 0x94, 0x9b, 0x9a, 0x62, 0x81, 0x98, 0x9b, 0x34, - 0x90, 0xbd, 0x41, 0x11, 0xa0, 0x0d, 0x13, 0x8b, 0x92, 0x3a, 0x91, 0x9e, 0x21, 0x24, 0x8a, 0xfa, - 0x2b, 0x31, 0x05, 0x9d, 0x20, 0x21, 0xd8, 0x0b, 0x81, 0x54, 0xa8, 0x9a, 0x0b, 0x25, 0xa8, 0x41, - 0xc0, 0x0b, 0x90, 0x39, 0x47, 0xdb, 0x29, 0x33, 0xb8, 0x9d, 0x20, 0x10, 0x02, 0x88, 0xfa, 0x30, - 0x98, 0x32, 0x98, 0xcc, 0x28, 0x22, 0xa2, 0x9f, 0x24, 0x9b, 0x13, 0xad, 0x11, 0x23, 0xdc, 0x21, - 0x90, 0x08, 0xa0, 0x8a, 0x14, 0x9c, 0x01, 0x64, 0x92, 0x9f, 0x01, 0x28, 0x02, 0xd9, 0x39, 0x90, - 0x90, 0x89, 0x73, 0xc3, 0x8b, 0x90, 0x28, 0x43, 0xb8, 0x8a, 0x90, 0xb9, 0x73, 0x08, 0xc2, 0x9d, - 0x33, 0x31, 0xe9, 0x88, 0x0b, 0x17, 0x08, 0xba, 0x50, 0xa1, 0x98, 0x2b, 0xb3, 0x70, 0xb2, 0x0a, - 0xa0, 0xab, 0x67, 0xa1, 0x8b, 0xa0, 0x51, 0xa1, 0x08, 0x8b, 0x02, 0x09, 0x08, 0xa3, 0x9e, 0x11, - 0x44, 0xb2, 0x9e, 0x18, 0x10, 0x30, 0xb3, 0xaf, 0x63, 0xc0, 0x1b, 0x83, 0x08, 0x31, 0xf9, 0x89, - 0x21, 0x83, 0xab, 0x43, 0xfb, 0x38, 0x14, 0xda, 0x29, 0x81, 0x00, 0x1a, 0x15, 0xbd, 0x28, 0x13, - 0xa9, 0x41, 0xea, 0x19, 0x23, 0x02, 0xbe, 0x10, 0x81, 0x30, 0xb3, 0xcf, 0x42, 0x90, 0x1a, 0x91, - 0x09, 0x21, 0x92, 0x8f, 0x11, 0x00, 0x80, 0x01, 0xad, 0x01, 0x39, 0xb3, 0xa9, 0xff, 0x43, 0x80, - 0xb1, 0x8e, 0x31, 0x80, 0x08, 0x82, 0xaf, 0x13, 0x09, 0x04, 0xa9, 0x8b, 0x34, 0xa0, 0xca, 0x69, - 0x92, 0x01, 0xbb, 0x99, 0x72, 0x94, 0x8c, 0x80, 0x12, 0x88, 0x98, 0x80, 0xbd, 0x62, 0x03, 0x9b, - 0xc1, 0x8e, 0x32, 0x12, 0xa8, 0x8d, 0x03, 0xab, 0x11, 0x92, 0x70, 0xa5, 0xad, 0x21, 0x20, 0x92, - 0x19, 0xa8, 0xba, 0x1c, 0x24, 0x44, 0xeb, 0x88, 0x40, 0xb1, 0x2b, 0xc0, 0x50, 0x91, 0x98, 0x0b, - 0x33, 0x90, 0xd9, 0x28, 0x99, 0x37, 0xbb, 0x01, 0x99, 0x20, 0x45, 0xb1, 0xdf, 0x28, 0x25, 0xb8, - 0x0b, 0x11, 0x20, 0xb0, 0x8c, 0x21, 0xb8, 0x70, 0x93, 0xba, 0xab, 0x25, 0x18, 0x94, 0xbc, 0x10, - 0x24, 0xd9, 0x28, 0x88, 0x25, 0xb9, 0xcc, 0x49, 0x23, 0x90, 0xaa, 0x80, 0x1a, 0x93, 0x7a, 0xa3, - 0x9c, 0x18, 0x36, 0xd8, 0xab, 0x62, 0x92, 0x99, 0x8c, 0x23, 0x11, 0xd0, 0x8c, 0x12, 0x22, 0xa9, - 0xbb, 0x21, 0x89, 0x57, 0xa0, 0xac, 0x80, 0x21, 0x23, 0xc9, 0x8b, 0x72, 0xb3, 0x8d, 0x00, 0x00, - 0x33, 0xf8, 0x1a, 0x91, 0x1a, 0x23, 0x91, 0xad, 0x00, 0x72, 0xa3, 0x9e, 0x08, 0x33, 0x01, 0xfb, - 0x0a, 0x23, 0x88, 0x10, 0x92, 0xaf, 0x12, 0x00, 0x99, 0x20, 0x98, 0x04, 0x08, 0xfa, 0x3b, 0x04, - 0x89, 0x20, 0xd0, 0x2c, 0x06, 0xac, 0x30, 0x13, 0x9b, 0x81, 0x9f, 0x42, 0x90, 0x1a, 0x85, 0xbb, - 0x18, 0x23, 0xb9, 0x20, 0x72, 0xb1, 0xad, 0x89, 0x45, 0xa0, 0x80, 0x9a, 0x90, 0x39, 0x26, 0xb8, - 0xbc, 0x38, 0x35, 0xa1, 0xbe, 0x30, 0x23, 0xb9, 0x01, 0xbe, 0x52, 0x80, 0x90, 0x08, 0x38, 0xf1, - 0x1a, 0x03, 0x9c, 0x43, 0x90, 0x80, 0xcc, 0x38, 0x33, 0xb2, 0xaf, 0x42, 0xa0, 0x8d, 0x22, 0xa0, - 0x20, 0xd9, 0x29, 0x92, 0x0a, 0x24, 0x98, 0x81, 0x9e, 0x84, 0x0a, 0x84, 0x9a, 0x60, 0x85, 0x9c, - 0x90, 0x38, 0x12, 0xb0, 0x9a, 0x10, 0x98, 0x14, 0x0a, 0xb2, 0xaf, 0x51, 0x11, 0xd9, 0x8c, 0x45, - 0xa8, 0x09, 0xb0, 0x3c, 0x16, 0xaa, 0x18, 0x02, 0x99, 0xb9, 0x61, 0x91, 0xab, 0x45, 0x90, 0xaa, - 0xbc, 0x72, 0x13, 0xb9, 0x0b, 0x02, 0x8a, 0x51, 0x03, 0xbc, 0x99, 0x11, 0x18, 0x81, 0xa9, 0x0a, - 0xbd, 0x77, 0xa9, 0x28, 0x81, 0x09, 0x98, 0x20, 0xa8, 0x9c, 0x46, 0xba, 0x22, 0xcb, 0x50, 0x13, - 0xcb, 0x0d, 0x03, 0x68, 0x92, 0xab, 0x9a, 0x24, 0x89, 0x33, 0xfa, 0x0a, 0x14, 0x09, 0x91, 0x9d, - 0x20, 0x14, 0xaa, 0x9a, 0x18, 0x33, 0xa9, 0x32, 0x88, 0xef, 0x30, 0x10, 0x85, 0xbc, 0x20, 0x04, - 0xba, 0x28, 0x05, 0x8a, 0x90, 0xaa, 0x34, 0x00, 0xf9, 0x48, 0x82, 0x80, 0xac, 0x11, 0xba, 0x50, - 0x16, 0xba, 0x18, 0xa9, 0x22, 0xea, 0x32, 0x89, 0x33, 0xcf, 0x20, 0xb0, 0x58, 0x84, 0x99, 0xbc, - 0x52, 0x81, 0x10, 0x01, 0xfb, 0x19, 0x84, 0x09, 0x81, 0xb9, 0x51, 0xb0, 0x0b, 0x12, 0x22, 0xcb, - 0x88, 0x8a, 0x37, 0xb9, 0x10, 0xc0, 0x1e, 0x14, 0x09, 0xc0, 0x0b, 0x58, 0x05, 0x9a, 0x80, 0x89, - 0x34, 0xfa, 0x18, 0x81, 0x18, 0x82, 0xcc, 0x49, 0x04, 0x88, 0x9a, 0x11, 0x9c, 0x26, 0x99, 0xac, - 0x34, 0xa0, 0x18, 0xad, 0x28, 0x41, 0x92, 0x0c, 0xa2, 0x9f, 0x63, 0xa1, 0x8a, 0x88, 0x20, 0x02, - 0x99, 0xad, 0x50, 0x03, 0xaa, 0x00, 0xad, 0x52, 0x11, 0xc9, 0x1a, 0x82, 0x40, 0xa2, 0xae, 0x29, - 0x14, 0x11, 0xda, 0x88, 0xa0, 0x51, 0x04, 0xca, 0x89, 0x01, 0x88, 0x43, 0xe8, 0x28, 0x92, 0x9a, - 0x18, 0x80, 0x44, 0xb0, 0xae, 0x22, 0x2a, 0x87, 0x9c, 0x01, 0x11, 0x89, 0x91, 0x8b, 0x16, 0x99, - 0x10, 0x18, 0xd8, 0x1c, 0x35, 0xd8, 0x9b, 0x62, 0x92, 0x99, 0xb9, 0x30, 0x04, 0x18, 0xc9, 0x8a, - 0x09, 0x25, 0x80, 0xcb, 0x38, 0x14, 0x9a, 0xc9, 0x69, 0x05, 0x0a, 0xc0, 0x0a, 0x22, 0x01, 0x88, - 0xa9, 0x40, 0xfa, 0x31, 0xa0, 0x0a, 0x24, 0x10, 0xf9, 0x9c, 0x21, 0x53, 0xb1, 0xad, 0x88, 0x72, - 0x91, 0xa9, 0x89, 0x24, 0x89, 0x81, 0x8b, 0xb8, 0x72, 0x91, 0x81, 0xae, 0x52, 0xa8, 0x22, 0xda, - 0x39, 0x02, 0xa8, 0x89, 0x88, 0x71, 0x94, 0x8b, 0xa8, 0x09, 0x31, 0x16, 0xc9, 0xa9, 0x49, 0x12, - 0xa8, 0x8d, 0x53, 0xa0, 0x8b, 0x88, 0x20, 0x24, 0xcb, 0x10, 0x00, 0xd8, 0x59, 0x84, 0x99, 0x8f, - 0x16, 0xa9, 0x18, 0x88, 0x21, 0xa2, 0xac, 0x41, 0x90, 0x88, 0x0a, 0xb2, 0x4a, 0x16, 0x9a, 0xcb, - 0x40, 0x93, 0xa9, 0x10, 0x01, 0x08, 0x19, 0xf9, 0x5b, 0x80, 0x35, 0xca, 0xab, 0x21, 0x52, 0x04, - 0x9c, 0xc9, 0x39, 0x12, 0x01, 0x80, 0xbb, 0x44, 0xa9, 0x00, 0x9d, 0x61, 0x04, 0xeb, 0x1a, 0x12, - 0x21, 0xc0, 0x8a, 0x08, 0x01, 0x11, 0xcb, 0x18, 0x82, 0x62, 0x82, 0xef, 0x10, 0x12, 0x00, 0xab, - 0x48, 0x81, 0x82, 0x9f, 0x12, 0x18, 0x88, 0x83, 0x9e, 0xa8, 0x71, 0x02, 0xaa, 0x8a, 0x20, 0x02, - 0x18, 0xd8, 0x40, 0xb0, 0x09, 0x89, 0xba, 0x78, 0xa3, 0x33, 0xdd, 0x8b, 0x15, 0x21, 0xc8, 0x18, - 0x9a, 0x05, 0x9c, 0x12, 0x22, 0xb0, 0x09, 0x9c, 0xa8, 0x77, 0xb0, 0x09, 0x80, 0x30, 0xc0, 0x0a, - 0x28, 0x43, 0xe9, 0x1c, 0x04, 0x9c, 0x23, 0x89, 0x80, 0x8a, 0x90, 0x69, 0xb2, 0x0d, 0x44, 0xb0, - 0x9b, 0x19, 0x14, 0x08, 0x11, 0xc2, 0x9f, 0x12, 0x08, 0x41, 0xc2, 0xac, 0x51, 0x90, 0x98, 0x18, - 0x00, 0x22, 0xcc, 0x89, 0x28, 0x27, 0xc9, 0x89, 0x80, 0x38, 0x14, 0xaa, 0x9a, 0x12, 0xb9, 0x73, - 0xe5, 0x09, 0x81, 0x20, 0xb3, 0x8f, 0x22, 0x90, 0x89, 0x81, 0x10, 0x92, 0x9e, 0x34, 0xd1, 0x0b, - 0x02, 0x18, 0x81, 0xac, 0x23, 0x20, 0xf8, 0x0e, 0x23, 0x80, 0xb9, 0x8b, 0x16, 0x98, 0x99, 0x1a, - 0x27, 0x99, 0x9a, 0x60, 0xb0, 0x1b, 0x24, 0x92, 0xcb, 0x0a, 0x46, 0xc0, 0x8a, 0x11, 0x31, 0xc8, - 0x9c, 0x41, 0x93, 0x29, 0xe8, 0x18, 0x8b, 0x24, 0x09, 0x11, 0xa8, 0xbf, 0x31, 0x21, 0xd1, 0x3b, - 0x94, 0x0b, 0x98, 0x08, 0x72, 0x82, 0xca, 0x18, 0x98, 0x29, 0x37, 0xb8, 0xac, 0x00, 0x63, 0xb1, - 0x0c, 0x80, 0x33, 0xa0, 0xba, 0x8d, 0x22, 0x23, 0xa9, 0x51, 0xba, 0xbc, 0x68, 0x83, 0x8b, 0x80, - 0x08, 0x02, 0xf0, 0x2d, 0x85, 0x39, 0xe1, 0x1a, 0x91, 0x01, 0x19, 0x42, 0xb0, 0x9c, 0x98, 0x18, - 0x64, 0x82, 0x99, 0x99, 0xa9, 0x39, 0x47, 0xd0, 0x8b, 0x23, 0xc1, 0x0b, 0x02, 0x02, 0x09, 0x93, - 0xbf, 0x1a, 0x35, 0x21, 0x98, 0xde, 0x18, 0x12, 0x08, 0x80, 0x09, 0x80, 0x30, 0xb9, 0x63, 0xf8, - 0x3a, 0x82, 0x19, 0x93, 0x8d, 0x99, 0x43, 0x12, 0xbf, 0x24, 0xca, 0x38, 0x91, 0x20, 0xa9, 0x9b, - 0x53, 0xa8, 0x13, 0x0c, 0xe3, 0x48, 0xb8, 0x10, 0xbc, 0x44, 0x11, 0xf9, 0x09, 0x12, 0x80, 0x30, - 0xd1, 0x9d, 0x30, 0x35, 0xc8, 0xad, 0x32, 0x91, 0x10, 0xca, 0x11, 0x01, 0x8a, 0x23, 0xac, 0xb9, - 0x72, 0x86, 0xac, 0x00, 0x31, 0x81, 0xaa, 0x8c, 0x20, 0x23, 0x88, 0xd1, 0x1b, 0x25, 0xa9, 0x9a, - 0x21, 0xea, 0x70, 0x95, 0xac, 0x10, 0x20, 0x01, 0x88, 0xaa, 0x1a, 0x26, 0xb8, 0x39, 0xd0, 0x39, - 0x92, 0x30, 0xfa, 0x30, 0xc9, 0x20, 0x01, 0x02, 0xcc, 0x0a, 0x22, 0x88, 0x22, 0x20, 0xfa, 0x9b, - 0x45, 0xb8, 0x18, 0x08, 0x24, 0xea, 0x8a, 0x30, 0x27, 0xca, 0x19, 0x90, 0x8a, 0x46, 0x80, 0xb8, - 0xab, 0x21, 0x34, 0xc1, 0x9f, 0x21, 0x00, 0x82, 0xad, 0x21, 0x80, 0x08, 0x09, 0x12, 0xbb, 0x40, - 0x36, 0xfb, 0x1b, 0x15, 0x98, 0xa9, 0x80, 0x58, 0x05, 0xaa, 0x00, 0x8a, 0x32, 0xb0, 0xab, 0x3a, - 0x06, 0x51, 0xf9, 0x08, 0x09, 0x32, 0x01, 0xea, 0x1b, 0x03, 0x12, 0xba, 0x08, 0x29, 0x44, 0xf9, - 0x0a, 0x00, 0x43, 0x98, 0x91, 0x0e, 0x11, 0x11, 0xda, 0x00, 0x99, 0x72, 0x96, 0xac, 0x11, 0x18, - 0x12, 0x98, 0xbc, 0x50, 0xa0, 0x08, 0x38, 0x86, 0x9c, 0x92, 0x8a, 0x80, 0x44, 0x11, 0xc1, 0xaf, - 0x10, 0x22, 0x82, 0xaa, 0xa8, 0x8a, 0x45, 0x00, 0xb8, 0x8c, 0x24, 0xa0, 0x99, 0x9b, 0x34, 0x02, - 0xb8, 0xcb, 0x39, 0x54, 0xa1, 0x9a, 0x1a, 0x93, 0x78, 0xb7, 0x8e, 0x02, 0x21, 0xb8, 0x80, 0x9a, - 0x12, 0x12, 0xbc, 0x63, 0x90, 0x00, 0xeb, 0x00, 0x09, 0x27, 0x99, 0x8a, 0xa2, 0x1c, 0x17, 0xaa, - 0x18, 0x10, 0x80, 0x89, 0xcc, 0x72, 0x81, 0x80, 0xbc, 0x18, 0x33, 0x83, 0x08, 0xfd, 0x28, 0x12, - 0xa1, 0x0c, 0xc1, 0x59, 0x84, 0x9a, 0x99, 0x11, 0x31, 0xc3, 0x9e, 0x10, 0x32, 0xa1, 0x9d, 0x88, - 0x11, 0x20, 0x85, 0xcc, 0x09, 0x34, 0x12, 0xc8, 0xbe, 0x40, 0x03, 0xa0, 0x1a, 0xc2, 0x1c, 0x04, - 0x88, 0x99, 0x10, 0x43, 0xf8, 0x2a, 0xa1, 0x62, 0xb9, 0x09, 0x09, 0x13, 0x88, 0x09, 0xb0, 0x19, - 0x04, 0x18, 0xc1, 0x4c, 0x07, 0x9c, 0x80, 0x28, 0x13, 0x11, 0xfc, 0x2b, 0x23, 0x92, 0x9c, 0x91, - 0x2a, 0x07, 0x99, 0x08, 0xab, 0x51, 0x92, 0x98, 0xbe, 0x63, 0x11, 0x98, 0xad, 0x18, 0x52, 0xa1, - 0x8a, 0x99, 0x31, 0x11, 0x04, 0xbe, 0x18, 0x23, 0xaa, 0x62, 0xd9, 0x20, 0x81, 0x80, 0xec, 0x48, - 0x03, 0xa8, 0x9b, 0x18, 0x24, 0x88, 0xe9, 0x3a, 0x82, 0x80, 0x18, 0xa3, 0x9e, 0x12, 0x0a, 0x33, - 0xa9, 0x8a, 0x36, 0xf9, 0x9a, 0x71, 0x84, 0x9d, 0x01, 0x80, 0x20, 0x90, 0x8a, 0x01, 0xb9, 0x42, - 0x28, 0xe1, 0x2b, 0x84, 0xba, 0x19, 0x31, 0x38, 0x07, 0xfb, 0x1b, 0x34, 0x88, 0xa8, 0xab, 0x28, - 0x56, 0xc0, 0x8a, 0x01, 0x81, 0x10, 0x91, 0x8d, 0x24, 0x9a, 0x04, 0xbb, 0x18, 0x41, 0xa4, 0x9e, - 0x11, 0x88, 0x51, 0xb1, 0x0f, 0x02, 0x89, 0x10, 0x90, 0x89, 0x13, 0xbd, 0x38, 0x23, 0xc9, 0x70, - 0x92, 0xbf, 0x40, 0x92, 0x28, 0xa8, 0x80, 0x0a, 0x13, 0xea, 0x68, 0xa2, 0x0a, 0x92, 0xaa, 0x61, - 0x82, 0xbb, 0x08, 0x91, 0x2a, 0x47, 0xa8, 0xac, 0x48, 0x02, 0x88, 0xba, 0x29, 0x45, 0xc1, 0x1b, - 0x82, 0x9a, 0x19, 0xa5, 0x4a, 0x82, 0x81, 0xbd, 0x53, 0xea, 0x30, 0x81, 0x00, 0xdb, 0x38, 0x00, - 0x43, 0xc9, 0x89, 0x8a, 0x32, 0x21, 0x10, 0xb1, 0xdf, 0x42, 0xa1, 0xac, 0x59, 0x84, 0x0a, 0xa0, - 0x28, 0x00, 0xca, 0x70, 0x81, 0x98, 0x9c, 0x22, 0x88, 0x90, 0x1a, 0xb1, 0x72, 0xe2, 0x88, 0x29, - 0x13, 0x8b, 0x07, 0xab, 0x08, 0x30, 0x92, 0x12, 0xcf, 0x22, 0x8a, 0x84, 0xac, 0x52, 0xa1, 0x08, - 0x99, 0xa9, 0x62, 0x91, 0x0a, 0x31, 0xfa, 0x1b, 0x24, 0xa1, 0x8a, 0x00, 0x01, 0xcc, 0x70, 0xa4, - 0x0b, 0x92, 0x00, 0x0a, 0x92, 0x2d, 0x86, 0x8b, 0x81, 0x41, 0xcb, 0x28, 0x20, 0x92, 0xab, 0x80, - 0x78, 0x95, 0xac, 0x21, 0x80, 0x51, 0xd8, 0x8a, 0x1a, 0x36, 0xa8, 0x8a, 0x02, 0x8e, 0x23, 0x0a, - 0xa2, 0x0e, 0x14, 0x99, 0x98, 0x1a, 0x03, 0x10, 0xf9, 0x59, 0xb1, 0x3a, 0x82, 0x20, 0xcd, 0x41, - 0x80, 0x09, 0x19, 0xea, 0x52, 0x98, 0x90, 0x0a, 0x81, 0x34, 0xbc, 0x32, 0xa8, 0x99, 0x40, 0xf8, - 0x30, 0xb8, 0x40, 0x00, 0xf1, 0x0d, 0x14, 0x88, 0x99, 0x02, 0x19, 0x91, 0x99, 0x31, 0x21, 0xf3, - 0x9e, 0x41, 0x80, 0x99, 0x32, 0xc8, 0x88, 0x9a, 0x20, 0x28, 0x86, 0x48, 0xd2, 0xac, 0x31, 0x91, - 0x99, 0x22, 0xba, 0x42, 0x01, 0xea, 0x02, 0x1e, 0x94, 0x40, 0xf8, 0x0a, 0x24, 0xa9, 0x30, 0xb3, - 0xbf, 0x32, 0x81, 0x91, 0x8a, 0x20, 0x02, 0xaa, 0xaf, 0x41, 0x32, 0xc0, 0x8d, 0x82, 0x8b, 0x52, - 0x82, 0x9d, 0x12, 0xbc, 0x42, 0x02, 0xac, 0x20, 0x20, 0x94, 0xbe, 0x20, 0x14, 0x90, 0x99, 0xa8, - 0x2a, 0x83, 0x43, 0x01, 0xda, 0x9b, 0x31, 0x81, 0x0a, 0x08, 0x57, 0xd1, 0x9c, 0x10, 0x20, 0x16, - 0xcb, 0x00, 0x88, 0x02, 0xc9, 0x59, 0x83, 0x8b, 0x18, 0x88, 0xb9, 0x39, 0x67, 0xb1, 0x9e, 0x12, - 0x21, 0xc8, 0x1b, 0x14, 0x80, 0xa0, 0xaf, 0x63, 0xa8, 0x49, 0x91, 0xaa, 0x00, 0x10, 0x22, 0xc2, - 0x9f, 0x21, 0x11, 0xc0, 0x9b, 0x51, 0x82, 0x0a, 0xb9, 0x30, 0x01, 0x08, 0xb9, 0x32, 0xfd, 0x38, - 0x15, 0xbc, 0x32, 0xa8, 0x33, 0xda, 0x9c, 0x63, 0x81, 0x9a, 0x19, 0x83, 0xbb, 0x30, 0x83, 0x49, - 0xe1, 0x19, 0x99, 0x81, 0x2c, 0x27, 0xc8, 0x8c, 0x03, 0x10, 0xb2, 0x9c, 0x19, 0x47, 0xa9, 0x89, - 0x89, 0x23, 0x81, 0xa8, 0xa8, 0xaf, 0x26, 0x00, 0x90, 0xbc, 0x38, 0x27, 0xb9, 0x99, 0x18, 0x16, - 0xaa, 0x88, 0x10, 0x82, 0x28, 0xb9, 0xfb, 0x59, 0x04, 0x89, 0xa8, 0x9c, 0x43, 0x01, 0xb1, 0x9e, - 0x10, 0x00, 0x33, 0xfb, 0x30, 0x82, 0xa9, 0x11, 0xca, 0x29, 0x24, 0x08, 0xd3, 0xaf, 0x42, 0x02, - 0xab, 0x89, 0x30, 0x83, 0x9d, 0x11, 0x11, 0xb9, 0x19, 0x91, 0xee, 0x39, 0x15, 0x10, 0xc9, 0x2a, - 0xa3, 0x0c, 0x11, 0x20, 0x26, 0xbc, 0x88, 0x9c, 0x37, 0xa8, 0x89, 0x80, 0x08, 0x21, 0xab, 0x27, - 0xca, 0x39, 0x83, 0xbc, 0x80, 0x48, 0x27, 0xab, 0xab, 0x40, 0x12, 0xa8, 0x40, 0xd8, 0x3a, 0x94, - 0xab, 0x20, 0x14, 0x1a, 0xa3, 0x9e, 0x20, 0x11, 0x22, 0xcc, 0xa8, 0x8f, 0x27, 0xa8, 0x8a, 0x21, - 0x01, 0xb8, 0x9e, 0x23, 0x00, 0x81, 0x39, 0xf1, 0x0d, 0x21, 0x82, 0xbb, 0x88, 0x72, 0x83, 0xda, - 0x8b, 0x41, 0x13, 0xa8, 0x88, 0xcc, 0x30, 0x24, 0xb0, 0xaa, 0x99, 0x58, 0x16, 0xba, 0x8a, 0x35, - 0x00, 0xda, 0x9b, 0x58, 0x15, 0x99, 0x9a, 0x91, 0x1c, 0x17, 0x8b, 0x01, 0x09, 0x90, 0x23, 0xca, - 0x8a, 0x53, 0x91, 0x9a, 0xb9, 0x71, 0x92, 0x99, 0x18, 0xea, 0x61, 0xa1, 0x8b, 0x02, 0x21, 0xa0, - 0xad, 0x14, 0xab, 0x53, 0x91, 0x1a, 0xd9, 0x40, 0x82, 0xda, 0x1a, 0x45, 0xc1, 0x8c, 0x12, 0x91, - 0x2a, 0xb1, 0x48, 0xa8, 0x10, 0x18, 0xd3, 0x0e, 0x11, 0x23, 0xdc, 0x18, 0x90, 0x32, 0xb8, 0x8c, - 0x42, 0x82, 0x99, 0x80, 0xce, 0x62, 0xa1, 0x09, 0x19, 0x93, 0x0f, 0x05, 0x98, 0x89, 0x81, 0x29, - 0xc3, 0x0c, 0x23, 0x80, 0xa8, 0xcc, 0x1a, 0x35, 0x80, 0x08, 0xc9, 0x29, 0x12, 0xa9, 0x8a, 0x53, - 0x81, 0x18, 0xfc, 0x0b, 0x54, 0x02, 0xbc, 0x0a, 0x31, 0x83, 0x2b, 0x87, 0x8d, 0x82, 0x19, 0xa2, - 0x8b, 0x20, 0x36, 0xb9, 0xea, 0x1b, 0x16, 0x80, 0x90, 0x8a, 0x88, 0x21, 0xb2, 0xab, 0x61, 0xa0, - 0x54, 0xda, 0x09, 0x20, 0x23, 0x81, 0xbf, 0x20, 0x80, 0x22, 0xc8, 0x39, 0xc1, 0xcb, 0x78, 0xa4, - 0x0b, 0x22, 0x98, 0x1a, 0xa0, 0x3b, 0x37, 0xeb, 0x38, 0x02, 0xeb, 0x40, 0x90, 0x08, 0xa0, 0x19, - 0x82, 0x19, 0x84, 0xbc, 0x52, 0xba, 0x22, 0xa0, 0x0b, 0x93, 0x5a, 0x15, 0xa9, 0xb1, 0x9f, 0x17, - 0x09, 0xa9, 0x28, 0x00, 0x80, 0x19, 0xb4, 0x0c, 0x14, 0x98, 0xb8, 0x8e, 0x53, 0x04, 0xca, 0x99, - 0x38, 0x94, 0x8a, 0x42, 0xd0, 0x2b, 0x03, 0x8a, 0x83, 0xab, 0x29, 0x06, 0xbe, 0x41, 0x11, 0xa0, - 0x4b, 0xf2, 0x2c, 0x05, 0x8a, 0x10, 0x90, 0x8c, 0x23, 0x98, 0x91, 0x1a, 0xb1, 0x20, 0xdc, 0x51, - 0x12, 0xa0, 0xaf, 0x18, 0x16, 0xb9, 0x21, 0xa9, 0x00, 0x19, 0xa2, 0x2b, 0xa5, 0x49, 0x91, 0xb0, - 0x8f, 0x14, 0x40, 0xe0, 0x0a, 0x82, 0x18, 0x02, 0xb8, 0x09, 0x81, 0xba, 0xaa, 0x77, 0xb1, 0x18, - 0x80, 0x98, 0xae, 0x22, 0x42, 0x92, 0xdc, 0x29, 0x84, 0x9b, 0x41, 0x90, 0x80, 0x18, 0xca, 0x21, - 0x88, 0x35, 0xb8, 0xca, 0x1d, 0x84, 0x2a, 0x14, 0xa0, 0x0c, 0xb2, 0x8c, 0x21, 0x22, 0x26, 0xfb, - 0x1a, 0x02, 0x9a, 0x23, 0x18, 0x81, 0xfb, 0x0c, 0x24, 0x88, 0xb0, 0x50, 0xc8, 0x89, 0x42, 0x91, - 0x8a, 0x08, 0x02, 0xda, 0x70, 0xc0, 0x19, 0x13, 0x89, 0x91, 0x8c, 0x99, 0x45, 0x90, 0x38, 0xc0, - 0xbe, 0x50, 0x84, 0xab, 0x32, 0xb1, 0x8c, 0x10, 0x00, 0x29, 0x86, 0x8a, 0xa1, 0x8e, 0x22, 0x12, - 0xbb, 0x32, 0xb9, 0x08, 0x1b, 0x05, 0x03, 0xbf, 0x61, 0xa0, 0x2b, 0x93, 0x1c, 0x06, 0x8b, 0xa0, - 0x29, 0x02, 0x28, 0x20, 0xfb, 0x21, 0xdc, 0x48, 0x13, 0x99, 0x99, 0x8a, 0x23, 0x13, 0xb8, 0x9f, - 0x93, 0x8e, 0x23, 0x13, 0xdc, 0x29, 0x02, 0x02, 0xbd, 0x23, 0x09, 0x11, 0xc3, 0x8e, 0x14, 0xdb, - 0x30, 0x82, 0x88, 0xba, 0x2a, 0x17, 0x9a, 0x22, 0x20, 0xd0, 0x9b, 0x99, 0x42, 0x73, 0xf2, 0x0a, - 0x80, 0x80, 0x51, 0x92, 0x9a, 0xab, 0x20, 0x21, 0x87, 0x9b, 0x24, 0xd0, 0x8f, 0x13, 0x88, 0x11, - 0xa9, 0x8b, 0x34, 0xa9, 0x32, 0xba, 0x20, 0x00, 0xda, 0x0b, 0x73, 0xa1, 0x0c, 0x26, 0xda, 0x9a, - 0x23, 0x12, 0xc0, 0x29, 0xc2, 0x2c, 0xa4, 0x2c, 0x05, 0xba, 0x19, 0x83, 0x88, 0x00, 0x20, 0x04, - 0xae, 0x00, 0x28, 0x93, 0x3c, 0xf2, 0x59, 0x90, 0x90, 0x8a, 0x51, 0xc8, 0x39, 0x04, 0xc9, 0x9a, - 0x32, 0x23, 0x90, 0xdd, 0x20, 0xb8, 0x30, 0x35, 0xf1, 0x0a, 0x91, 0x28, 0xa0, 0x28, 0x30, 0xd4, - 0x0c, 0x92, 0x38, 0xa2, 0x18, 0xda, 0x29, 0x14, 0xa8, 0x8c, 0x53, 0xa2, 0x8d, 0x12, 0x89, 0xca, - 0x52, 0x00, 0xa3, 0x0d, 0xb8, 0x50, 0xf2, 0x39, 0x84, 0xca, 0x19, 0x02, 0x28, 0x82, 0xbb, 0x1a, - 0x00, 0x37, 0x8b, 0x93, 0x8f, 0x01, 0x32, 0xfa, 0x19, 0x28, 0x03, 0x89, 0xeb, 0x19, 0x35, 0xc1, - 0x0a, 0x83, 0x9c, 0x21, 0x84, 0xbb, 0x99, 0x71, 0x94, 0x9b, 0x9a, 0x64, 0x90, 0x99, 0x0b, 0x22, - 0x28, 0x23, 0xac, 0xd9, 0x3b, 0x16, 0x08, 0xa0, 0x0b, 0x91, 0x50, 0x01, 0xa9, 0x49, 0xf0, 0x1a, - 0x11, 0x08, 0x06, 0xcb, 0x10, 0x99, 0x58, 0x93, 0x8b, 0x38, 0xb2, 0x4a, 0xe9, 0x48, 0xa2, 0x1a, - 0x81, 0x08, 0x8c, 0x37, 0x9e, 0x81, 0x00, 0x11, 0x10, 0xfa, 0x19, 0x22, 0x90, 0x10, 0xfb, 0x18, - 0x11, 0x23, 0xca, 0xba, 0x4a, 0x35, 0xc0, 0x0e, 0x01, 0x20, 0xa0, 0x0a, 0x01, 0x8c, 0x24, 0xa1, - 0x9d, 0x21, 0x80, 0x99, 0x15, 0xaa, 0x10, 0x13, 0xcf, 0x30, 0x82, 0x18, 0x00, 0xe1, 0x4b, 0x93, - 0xbb, 0x40, 0xc8, 0x51, 0x92, 0xda, 0x19, 0x25, 0xa9, 0x8a, 0x80, 0x11, 0x88, 0x61, 0xf9, 0x49, - 0x92, 0x09, 0xa0, 0xcb, 0x78, 0x85, 0x0a, 0x91, 0x9b, 0x30, 0x84, 0x09, 0x98, 0x8a, 0x8a, 0x46, - 0xc9, 0x18, 0x81, 0x88, 0x01, 0xcd, 0x73, 0xa1, 0x88, 0x89, 0x82, 0x89, 0x12, 0x18, 0xba, 0x18, - 0xb0, 0x72, 0xb8, 0x1d, 0x86, 0x0a, 0x11, 0x88, 0xba, 0x01, 0x7a, 0xa7, 0x0b, 0x02, 0x10, 0xbd, - 0x53, 0x90, 0x9b, 0x31, 0x98, 0x14, 0x9e, 0x32, 0xa9, 0x88, 0x23, 0xbf, 0x33, 0xb9, 0x72, 0xa1, - 0xac, 0x30, 0xb3, 0x2b, 0x04, 0xb9, 0x50, 0x80, 0xc9, 0x1c, 0x14, 0x90, 0x8a, 0x22, 0xd9, 0x09, - 0x55, 0xc8, 0x1a, 0x92, 0x58, 0xb1, 0x8c, 0x31, 0x02, 0xc9, 0x8a, 0x12, 0xda, 0x50, 0x03, 0xa9, - 0x1a, 0xa2, 0x1c, 0x89, 0x27, 0x08, 0xd9, 0x09, 0x91, 0x19, 0x55, 0xb1, 0x9e, 0x81, 0x28, 0x05, - 0xba, 0x31, 0xc1, 0x0b, 0x41, 0xb0, 0x38, 0xa3, 0x59, 0xfa, 0x3a, 0x03, 0x01, 0xab, 0x91, 0x8c, - 0x23, 0x18, 0x98, 0x01, 0x9f, 0x24, 0xc9, 0x19, 0xa0, 0x79, 0x83, 0x8a, 0xa0, 0xad, 0x54, 0xa1, - 0x8a, 0x82, 0x29, 0xa2, 0x0c, 0x02, 0xa9, 0x71, 0xb1, 0x1a, 0xa8, 0x9a, 0x56, 0xb1, 0x1c, 0xa1, - 0x20, 0x0b, 0x07, 0x1a, 0xb1, 0x0b, 0xb2, 0x3c, 0x07, 0x18, 0xbc, 0x41, 0xb2, 0x0f, 0x83, 0x2a, - 0x04, 0xba, 0x20, 0x91, 0x8b, 0x91, 0x59, 0xb3, 0x1d, 0x23, 0xa8, 0xbf, 0x44, 0x88, 0x90, 0x88, - 0xab, 0x73, 0xb1, 0x48, 0xa1, 0xad, 0x20, 0x80, 0x30, 0x82, 0xaa, 0x1c, 0x15, 0xb9, 0xab, 0x74, - 0xa1, 0x89, 0x98, 0x1a, 0x17, 0xaa, 0x32, 0xc9, 0xaa, 0x62, 0x13, 0xda, 0x1a, 0x01, 0x24, 0xbc, - 0x11, 0x8a, 0x82, 0x60, 0xe8, 0x18, 0x91, 0x28, 0x91, 0x90, 0x9c, 0x32, 0x07, 0xab, 0xb8, 0x4b, - 0x17, 0x99, 0x99, 0x38, 0xb3, 0x9b, 0x70, 0x93, 0x8a, 0x80, 0xa8, 0x50, 0x01, 0x88, 0x91, 0xdf, - 0x30, 0x83, 0x8c, 0x01, 0x01, 0x0c, 0x15, 0xac, 0x30, 0xb2, 0x49, 0xb3, 0xcf, 0x51, 0x81, 0xa9, - 0x19, 0x83, 0x9a, 0x60, 0xb1, 0x8d, 0x23, 0x00, 0x00, 0xfa, 0x09, 0x23, 0x01, 0xb9, 0x89, 0x19, - 0x42, 0x03, 0xfb, 0x0c, 0x23, 0x01, 0xeb, 0x28, 0x80, 0x52, 0xb0, 0xac, 0x1a, 0x27, 0x98, 0xb8, - 0x0b, 0x63, 0x01, 0xa1, 0xcd, 0x38, 0x13, 0x90, 0x9a, 0x99, 0x49, 0x17, 0xba, 0x19, 0x11, 0x02, - 0x9b, 0xb2, 0x8f, 0x14, 0x52, 0xc0, 0xac, 0x30, 0x04, 0xa8, 0x9c, 0x31, 0x83, 0x98, 0xbd, 0x00, - 0x73, 0x91, 0x99, 0x9a, 0x19, 0x64, 0x91, 0x08, 0xeb, 0x18, 0x31, 0xb2, 0x9c, 0x21, 0x01, 0x04, - 0xbe, 0x28, 0x33, 0xb1, 0x9d, 0x88, 0x73, 0xb0, 0x09, 0x01, 0x9c, 0x31, 0x92, 0x08, 0xbe, 0x61, - 0x01, 0x80, 0xbc, 0x48, 0x12, 0xaa, 0x08, 0x20, 0x04, 0xdb, 0x1b, 0x03, 0x55, 0xc8, 0x0b, 0x82, - 0x0c, 0x44, 0x90, 0xe8, 0x1c, 0x14, 0x80, 0xa9, 0x8a, 0x50, 0x03, 0xba, 0x9a, 0x32, 0x01, 0x12, - 0xcc, 0x8c, 0x44, 0xa1, 0x89, 0xb9, 0x58, 0x12, 0x81, 0xcd, 0x88, 0x58, 0x24, 0xca, 0xaa, 0x31, - 0x24, 0xe0, 0x1b, 0x02, 0x10, 0xa0, 0x0a, 0xb9, 0x61, 0x11, 0x82, 0xaf, 0x18, 0x22, 0xb0, 0x1b, - 0xc2, 0x70, 0x82, 0xda, 0x8a, 0x43, 0x13, 0xea, 0x8a, 0x18, 0x34, 0x00, 0xbb, 0x8a, 0x20, 0x33, - 0x10, 0xfb, 0x1f, 0x13, 0x09, 0xc8, 0x2a, 0xa3, 0x62, 0xc8, 0x8b, 0x41, 0x14, 0xab, 0x08, 0x99, - 0x31, 0x04, 0xcd, 0x20, 0x80, 0x28, 0x13, 0xcd, 0x0a, 0x51, 0x04, 0xcb, 0x89, 0x43, 0x91, 0x99, - 0x88, 0x09, 0x82, 0xaa, 0x63, 0xa2, 0x5a, 0xd2, 0x8e, 0x21, 0x21, 0x81, 0xea, 0x8b, 0x23, 0x20, - 0x92, 0xcc, 0x2a, 0x25, 0x98, 0x9b, 0x30, 0x24, 0xe9, 0x1b, 0xb2, 0x6a, 0x05, 0x98, 0xdb, 0x28, - 0x13, 0x11, 0xbd, 0x28, 0x28, 0x13, 0x80, 0xfb, 0x2b, 0x11, 0x63, 0xd0, 0x9c, 0x23, 0x01, 0x09, - 0xa8, 0x8d, 0x14, 0x80, 0x88, 0x9a, 0x21, 0x20, 0xa1, 0xba, 0x9a, 0x78, 0x97, 0x8b, 0x01, 0x00, - 0x10, 0x04, 0xff, 0x40, 0x81, 0x8a, 0x80, 0x08, 0x11, 0x98, 0x18, 0x98, 0x10, 0x9a, 0x34, 0xfb, - 0x39, 0x24, 0xd0, 0x8e, 0x11, 0x12, 0x01, 0xdc, 0x19, 0x33, 0xa1, 0xaa, 0x99, 0x60, 0x91, 0x30, - 0xf9, 0x1b, 0x22, 0x22, 0x89, 0xfb, 0x0a, 0x44, 0xa0, 0x1a, 0x98, 0x29, 0x05, 0xdc, 0x49, 0x04, - 0x0a, 0x99, 0x08, 0x09, 0x22, 0x12, 0xb1, 0xcf, 0x30, 0x03, 0xa8, 0x99, 0x30, 0xa1, 0xcb, 0x79, - 0x82, 0x09, 0x98, 0x00, 0xbe, 0x44, 0x80, 0x9b, 0x12, 0x9a, 0x63, 0xb0, 0xab, 0x38, 0x14, 0x21, - 0xe9, 0xcc, 0x71, 0x83, 0xbb, 0x29, 0x91, 0x38, 0x84, 0xaa, 0x98, 0x31, 0x10, 0x04, 0xdf, 0x10, - 0x21, 0x93, 0x9e, 0x10, 0x80, 0x41, 0xb1, 0xbe, 0x39, 0x27, 0xc8, 0x08, 0x88, 0x80, 0x30, 0xa2, - 0x9b, 0xc8, 0x71, 0x83, 0xaa, 0x00, 0x88, 0x90, 0x34, 0xbd, 0x32, 0xf9, 0x39, 0x84, 0x8a, 0x10, - 0xaa, 0x08, 0x51, 0x04, 0xbb, 0x80, 0xcb, 0x72, 0xb3, 0x1b, 0xb8, 0x73, 0xb1, 0x1b, 0xb0, 0x61, - 0x02, 0xd9, 0x1a, 0xa1, 0x60, 0x82, 0xab, 0xab, 0x62, 0x12, 0x90, 0xbb, 0x1c, 0x26, 0xa8, 0x20, - 0xca, 0x8a, 0x73, 0x91, 0xaa, 0x30, 0xb1, 0x2a, 0xc1, 0x8a, 0x52, 0x24, 0xea, 0x89, 0x80, 0x40, - 0x13, 0xbb, 0x8a, 0x83, 0x0d, 0x04, 0x23, 0xba, 0xac, 0x00, 0x00, 0x0b, 0x37, 0x83, 0x9b, 0xfa, - 0x0c, 0x24, 0x20, 0xb9, 0x23, 0xae, 0x91, 0x39, 0x14, 0xa8, 0x9e, 0x00, 0x18, 0x33, 0xd8, 0x30, - 0xd2, 0x1b, 0x13, 0xe9, 0x0c, 0x24, 0x02, 0xb9, 0xaa, 0x1a, 0x36, 0xb9, 0x11, 0x13, 0xbc, 0x09, - 0x04, 0xac, 0x60, 0xa0, 0x44, 0xfb, 0x09, 0x21, 0x84, 0x1a, 0xc0, 0x0a, 0x11, 0x82, 0x0a, 0x04, - 0xcb, 0x00, 0xdb, 0x51, 0x82, 0x88, 0x28, 0xb2, 0x0e, 0x98, 0x72, 0xa1, 0x8a, 0x30, 0x01, 0xca, - 0x18, 0xab, 0x57, 0xb9, 0x39, 0xb1, 0x4a, 0x81, 0x09, 0x98, 0x00, 0x8e, 0x14, 0x9c, 0x12, 0x22, - 0x92, 0xed, 0x0a, 0x22, 0x03, 0xeb, 0x61, 0xa0, 0x08, 0x9b, 0x42, 0x02, 0x09, 0xc9, 0x0c, 0x85, - 0x8a, 0x26, 0xb9, 0x9a, 0x31, 0x01, 0x91, 0xbf, 0x43, 0x00, 0xa0, 0x0c, 0x90, 0x51, 0x93, 0xad, - 0x08, 0x03, 0x1b, 0x84, 0x8b, 0x91, 0x2c, 0x27, 0x9a, 0xca, 0x39, 0x25, 0x81, 0xac, 0x89, 0x16, - 0x9b, 0x81, 0x38, 0x83, 0x9c, 0x90, 0x68, 0xd2, 0x29, 0x22, 0xc1, 0xaf, 0x23, 0x89, 0x00, 0x08, - 0x88, 0x34, 0xdc, 0x18, 0x28, 0x83, 0xaa, 0x2a, 0x02, 0x22, 0xbe, 0x51, 0xa1, 0x9c, 0x01, 0x60, - 0xd1, 0x8a, 0x62, 0x82, 0xac, 0x11, 0x90, 0xa9, 0x20, 0x33, 0xb2, 0x8d, 0xa3, 0x0e, 0x92, 0x40, - 0x93, 0xcb, 0x8b, 0x42, 0x13, 0x88, 0xf1, 0x8d, 0x20, 0x23, 0xb9, 0x0e, 0x24, 0x80, 0xcb, 0x88, - 0x33, 0x08, 0xa9, 0x43, 0xbd, 0x22, 0x62, 0xf1, 0x0b, 0x12, 0x81, 0x8a, 0x92, 0x0c, 0x93, 0x3d, - 0x87, 0x8a, 0x98, 0x23, 0xa0, 0xbc, 0x70, 0x83, 0xba, 0x19, 0xa2, 0x4b, 0x84, 0x8b, 0x80, 0x18, - 0xa3, 0x8c, 0x06, 0x19, 0x13, 0xdb, 0x0a, 0x81, 0x2c, 0x47, 0xa8, 0xda, 0x38, 0x10, 0x92, 0x8b, - 0x82, 0x1e, 0x05, 0x8b, 0x81, 0x1a, 0x88, 0x43, 0xb8, 0xbe, 0x61, 0xa3, 0x09, 0xb8, 0x20, 0x24, - 0xb8, 0x9f, 0x11, 0x22, 0x99, 0x91, 0x9c, 0x9a, 0x73, 0xa5, 0x18, 0xfa, 0x38, 0x01, 0x20, 0xd8, - 0x2b, 0x13, 0x90, 0xad, 0x21, 0x01, 0x80, 0x9d, 0x32, 0x02, 0xdd, 0x40, 0x91, 0xaa, 0x31, 0x91, - 0x81, 0xdb, 0x50, 0x82, 0x99, 0x09, 0xb8, 0x21, 0x4b, 0x27, 0x0d, 0xa1, 0x1b, 0xb0, 0x70, 0x04, - 0xaa, 0x8a, 0x02, 0x08, 0x18, 0x13, 0xcc, 0x90, 0x69, 0x84, 0xba, 0x1a, 0x24, 0x81, 0xcd, 0x48, - 0xb1, 0x49, 0x03, 0xfa, 0x29, 0xb1, 0x38, 0x13, 0xa0, 0xab, 0x60, 0xa3, 0x9f, 0x04, 0x18, 0x92, - 0x8c, 0xa8, 0x58, 0x82, 0x99, 0x40, 0xf8, 0x29, 0x81, 0x88, 0x28, 0xa4, 0x0d, 0x03, 0xba, 0x40, - 0xb0, 0x30, 0xa3, 0x0b, 0xfb, 0x63, 0xb9, 0x38, 0x83, 0x89, 0xc8, 0x9d, 0x52, 0x13, 0x09, 0xf8, - 0x0a, 0x82, 0x20, 0x83, 0x9c, 0x11, 0xa0, 0x0d, 0xa2, 0x59, 0x92, 0x30, 0xc9, 0xbd, 0x41, 0x43, - 0xe9, 0x18, 0x98, 0x28, 0x02, 0x8a, 0xa0, 0x79, 0x13, 0xc9, 0xac, 0x59, 0x84, 0x08, 0x80, 0xba, - 0x1b, 0x20, 0x37, 0xd9, 0x39, 0xa2, 0x0c, 0x01, 0xa8, 0x50, 0x83, 0xcb, 0x28, 0xa0, 0x19, 0x34, - 0xe9, 0x28, 0xb3, 0x3a, 0xc3, 0x0e, 0x13, 0x92, 0xac, 0x99, 0x50, 0x02, 0x01, 0xaa, 0xeb, 0x51, - 0x92, 0x9d, 0x32, 0xa2, 0x29, 0xf2, 0x1a, 0x01, 0x19, 0x03, 0xd0, 0x9e, 0x14, 0x08, 0x04, 0xea, - 0x19, 0x82, 0x18, 0x92, 0xbb, 0x63, 0xb0, 0x08, 0x90, 0x29, 0xf0, 0x59, 0x82, 0x0a, 0x98, 0x31, - 0xa1, 0xaa, 0x80, 0xab, 0x55, 0xca, 0x75, 0xc0, 0x0a, 0x01, 0x19, 0x02, 0xa9, 0x09, 0x13, 0xba, - 0x52, 0xa8, 0x99, 0x32, 0x81, 0xfd, 0x1a, 0x16, 0x18, 0xa0, 0xb9, 0x9d, 0x34, 0x82, 0x99, 0x09, - 0xcb, 0x74, 0xa0, 0x09, 0x90, 0x19, 0x26, 0xea, 0x2a, 0x82, 0x30, 0xb2, 0xac, 0x38, 0xa1, 0x41, - 0xb1, 0x8c, 0x12, 0x41, 0xd2, 0xae, 0x28, 0x05, 0x00, 0xaa, 0x9a, 0x43, 0x18, 0x01, 0xaa, 0x0e, - 0x23, 0x88, 0xac, 0x42, 0x98, 0x43, 0xd9, 0x9c, 0x41, 0x82, 0x21, 0xd8, 0x9b, 0x39, 0x07, 0x9a, - 0x21, 0x90, 0x1b, 0xa2, 0x8f, 0x84, 0x18, 0x00, 0x82, 0xae, 0x0a, 0x35, 0xa0, 0x9b, 0x11, 0x21, - 0xeb, 0x32, 0xa9, 0x71, 0xc1, 0x1a, 0xa0, 0x91, 0x78, 0xa2, 0x19, 0x80, 0xaa, 0x89, 0x12, 0x60, - 0x93, 0x1c, 0xf2, 0x2b, 0x93, 0x80, 0x08, 0xb0, 0x21, 0x9a, 0x19, 0x64, 0x92, 0x9d, 0x41, 0xe9, - 0x1a, 0x53, 0xa0, 0x09, 0xda, 0x48, 0x83, 0x1a, 0xa0, 0x0a, 0x22, 0x89, 0x37, 0xec, 0x39, 0x13, - 0xba, 0x0a, 0x21, 0x80, 0x42, 0xb9, 0xca, 0x2b, 0x47, 0xa1, 0xad, 0x28, 0x14, 0x8a, 0x80, 0xbb, - 0x50, 0x82, 0x39, 0xc9, 0x8b, 0x64, 0x91, 0x9a, 0x09, 0x02, 0xb8, 0x70, 0xa8, 0x18, 0x04, 0xbc, - 0x28, 0x21, 0x82, 0x10, 0x8a, 0xc8, 0x31, 0xbf, 0x64, 0x81, 0xbd, 0x38, 0x82, 0x8b, 0x25, 0x98, - 0x91, 0xdf, 0x21, 0x02, 0xa8, 0x10, 0x9a, 0x12, 0x8b, 0x07, 0x9a, 0x11, 0x88, 0x88, 0x48, 0xe0, - 0x39, 0x05, 0x99, 0x99, 0xc8, 0x6a, 0x05, 0xaa, 0x28, 0xa2, 0x39, 0xe0, 0x28, 0xb1, 0x0d, 0x24, - 0xa0, 0x9c, 0x02, 0x29, 0x85, 0x90, 0x9d, 0x31, 0xb1, 0x8a, 0x53, 0x92, 0xab, 0x18, 0x01, 0xbe, - 0x73, 0xa1, 0x58, 0xc1, 0x9b, 0x33, 0xb0, 0x43, 0xda, 0x89, 0x00, 0xbb, 0x75, 0x81, 0xaa, 0x1a, - 0x82, 0x48, 0xd1, 0x29, 0x82, 0x80, 0xca, 0x20, 0x02, 0x81, 0x8f, 0x83, 0xad, 0x62, 0x91, 0x09, - 0x92, 0x9d, 0x34, 0xb9, 0x18, 0xb0, 0x1b, 0x57, 0xa9, 0x09, 0x80, 0x18, 0xb0, 0x30, 0x84, 0xbd, - 0x30, 0x22, 0xa3, 0x9f, 0x90, 0x30, 0xc1, 0x2a, 0x85, 0x09, 0x08, 0xb3, 0x1c, 0xe1, 0x29, 0x15, - 0xa1, 0xad, 0x22, 0x4b, 0x07, 0xab, 0x98, 0x11, 0x11, 0x10, 0x98, 0xca, 0x1b, 0x37, 0x88, 0xba, - 0x9a, 0x61, 0x84, 0xba, 0x0a, 0x33, 0x98, 0x41, 0xfb, 0x1b, 0x22, 0x21, 0x93, 0xad, 0x0c, 0x25, - 0x89, 0x82, 0xba, 0x9b, 0x47, 0x99, 0x90, 0x2b, 0x07, 0x8c, 0x00, 0x02, 0x8c, 0x13, 0x09, 0xa0, - 0x1c, 0x03, 0x80, 0xad, 0x22, 0xc9, 0x51, 0x88, 0x98, 0x39, 0xfb, 0x51, 0x00, 0x90, 0x0a, 0xd9, - 0x28, 0x00, 0x47, 0xaa, 0xba, 0x68, 0x82, 0x08, 0x80, 0xba, 0x58, 0x80, 0x88, 0x21, 0x29, 0xf3, - 0x8c, 0x82, 0x2b, 0x06, 0x89, 0x98, 0x88, 0x8a, 0x37, 0xb0, 0xbd, 0x38, 0x17, 0xa0, 0x8b, 0x11, - 0x0a, 0x04, 0x1a, 0xc1, 0x0a, 0x01, 0x30, 0x93, 0xcc, 0x61, 0xa0, 0x08, 0xaa, 0x42, 0x29, 0x97, - 0x0c, 0xb0, 0x78, 0xc2, 0x1a, 0x02, 0x89, 0x0a, 0x81, 0x59, 0xb2, 0x2b, 0x13, 0xc9, 0xac, 0x71, - 0x83, 0xba, 0xab, 0x74, 0x90, 0x80, 0x9a, 0x22, 0x08, 0x98, 0x99, 0x38, 0x16, 0xa8, 0xce, 0x48, - 0x92, 0x30, 0x90, 0xeb, 0x19, 0x11, 0x45, 0xc0, 0x8c, 0x08, 0x24, 0xa8, 0xba, 0x71, 0xb1, 0x09, - 0x81, 0x10, 0x88, 0x11, 0xc8, 0xab, 0x22, 0x51, 0x05, 0xad, 0x89, 0x50, 0x02, 0xcb, 0x28, 0x91, - 0x40, 0xa1, 0xa8, 0x1b, 0x86, 0x9b, 0x25, 0xaa, 0x99, 0x54, 0xa8, 0x88, 0x09, 0x2a, 0x37, 0xbf, - 0x11, 0x31, 0xd1, 0x19, 0x88, 0x82, 0x0b, 0x04, 0x9a, 0x18, 0x22, 0x9a, 0xa2, 0x9f, 0x17, 0x9b, - 0x11, 0x80, 0xa9, 0x30, 0x14, 0xdc, 0x30, 0x9a, 0x46, 0xea, 0x10, 0x81, 0x81, 0x9a, 0x80, 0x19, - 0x04, 0x18, 0xd1, 0x8d, 0x32, 0x91, 0x88, 0xdb, 0x49, 0x07, 0x9a, 0x00, 0x09, 0x88, 0x42, 0xc8, - 0x31, 0xcd, 0x43, 0x90, 0xc9, 0x49, 0x82, 0x98, 0x89, 0xb9, 0x71, 0x95, 0x8a, 0xb8, 0x40, 0x80, - 0x11, 0x81, 0xcc, 0x39, 0x03, 0x88, 0xab, 0x10, 0x62, 0xe1, 0x0b, 0x14, 0x00, 0x90, 0xab, 0x08, - 0x81, 0x62, 0x02, 0xfb, 0x2a, 0x13, 0x08, 0xb1, 0x9f, 0x61, 0x92, 0x9a, 0x98, 0x28, 0x22, 0x90, - 0x9d, 0x92, 0x5b, 0xa3, 0x9e, 0x33, 0xa8, 0x38, 0xb3, 0x9c, 0x0b, 0x14, 0x78, 0x86, 0xaf, 0x31, - 0x81, 0x9a, 0x01, 0x0a, 0x22, 0xa0, 0x9b, 0x30, 0x98, 0x43, 0x08, 0xd1, 0x9f, 0x12, 0x31, 0x83, - 0xbf, 0x39, 0x04, 0xa8, 0xaa, 0x63, 0xb1, 0x0a, 0x08, 0x24, 0xcb, 0x0a, 0x44, 0xb0, 0x8d, 0x23, - 0x98, 0x80, 0xac, 0x62, 0x92, 0x9b, 0x00, 0x42, 0xe0, 0x0c, 0x13, 0x30, 0xc9, 0x09, 0x8b, 0x44, - 0x82, 0xc9, 0x0a, 0x90, 0x71, 0xa2, 0x99, 0x29, 0xf9, 0x78, 0xa2, 0x9b, 0x28, 0x23, 0x91, 0xbb, - 0xac, 0x71, 0xa3, 0x1c, 0x93, 0x8b, 0x21, 0x12, 0xca, 0x9a, 0x68, 0x84, 0x89, 0xc9, 0x28, 0x10, - 0x17, 0xbb, 0x29, 0x80, 0x10, 0x13, 0x9e, 0x11, 0x3a, 0xa4, 0x89, 0xcd, 0x31, 0x20, 0x05, 0xdb, - 0x09, 0x10, 0x21, 0x00, 0xba, 0x80, 0x31, 0xda, 0x08, 0x10, 0x61, 0x83, 0xaa, 0xce, 0x68, 0xa2, - 0x6b, 0xa3, 0x0b, 0xab, 0x17, 0x99, 0x10, 0x11, 0xb9, 0x0b, 0xa8, 0x62, 0x31, 0xe9, 0x39, 0xa1, - 0x99, 0x0b, 0x22, 0x36, 0xb8, 0x9b, 0xd9, 0x69, 0x81, 0x24, 0xbb, 0xc9, 0x3a, 0x17, 0xa8, 0x89, - 0x20, 0x81, 0x21, 0xfc, 0x30, 0xd1, 0x58, 0xa2, 0x8d, 0x01, 0x00, 0x19, 0x02, 0x8b, 0xa9, 0x52, - 0xa9, 0x91, 0x3b, 0x07, 0x9a, 0x93, 0x2d, 0xb2, 0x4b, 0x82, 0x80, 0x11, 0xbf, 0x33, 0x9b, 0x14, - 0x1a, 0xc3, 0x0d, 0x11, 0x12, 0xbc, 0x33, 0x9c, 0x24, 0xd9, 0x8b, 0x73, 0xa1, 0x29, 0xa0, 0xaa, - 0x08, 0x45, 0xb8, 0x28, 0xf0, 0x29, 0x80, 0x04, 0xac, 0x21, 0x01, 0x89, 0x91, 0xac, 0x42, 0x03, - 0x9b, 0x27, 0xbf, 0x41, 0x91, 0x89, 0x00, 0x8b, 0x26, 0xca, 0x10, 0x81, 0x80, 0x38, 0xf2, 0x1d, - 0x82, 0x18, 0x21, 0xd9, 0x1b, 0x02, 0x21, 0xd0, 0x1a, 0x12, 0xd0, 0x49, 0x92, 0x09, 0xa8, 0x8a, - 0x25, 0x98, 0x89, 0x91, 0x0a, 0x47, 0xc0, 0x0a, 0x11, 0xba, 0x73, 0xa9, 0x00, 0x9b, 0x36, 0x80, - 0xfa, 0x2a, 0x85, 0x29, 0xd8, 0x18, 0x10, 0x80, 0x20, 0xf2, 0x0c, 0x03, 0x00, 0x19, 0xe0, 0x2c, - 0x15, 0x98, 0x99, 0x10, 0x9a, 0x34, 0x8a, 0xa8, 0x11, 0x8a, 0x32, 0xb9, 0x34, 0xff, 0x21, 0x01, - 0xa8, 0x8a, 0x31, 0x84, 0xb8, 0x9e, 0x23, 0x98, 0x08, 0x18, 0x13, 0xcf, 0x50, 0x81, 0xaa, 0x09, - 0x35, 0xa8, 0xb8, 0x2b, 0xa0, 0x67, 0xb0, 0x9b, 0x21, 0x93, 0x0b, 0x14, 0x99, 0xfa, 0x30, 0x80, - 0x13, 0xbc, 0x81, 0x43, 0xcd, 0x21, 0x11, 0xa2, 0x9f, 0x02, 0x21, 0xe9, 0x28, 0x82, 0x98, 0x8a, - 0x10, 0x33, 0xb0, 0x0b, 0xfa, 0x20, 0x18, 0x16, 0xab, 0x99, 0x29, 0x13, 0x52, 0xc8, 0xda, 0x6b, - 0x16, 0xca, 0x28, 0x91, 0x00, 0x09, 0x90, 0x0a, 0x03, 0x8a, 0x34, 0xd8, 0x8d, 0x22, 0x21, 0xe9, - 0x30, 0xa8, 0x98, 0x29, 0xa4, 0x4a, 0xd0, 0x40, 0xd9, 0x31, 0xa0, 0x08, 0x10, 0xa1, 0x0a, 0x38, - 0x27, 0xaf, 0x22, 0xaa, 0x30, 0xb3, 0x0f, 0x85, 0x9a, 0x02, 0x00, 0x11, 0xcb, 0x99, 0x53, 0x98, - 0xa2, 0x69, 0xda, 0x20, 0x80, 0x32, 0xf9, 0x1a, 0x01, 0x02, 0x89, 0x92, 0x9b, 0x68, 0xc1, 0x22, - 0xaf, 0x32, 0x01, 0xbb, 0x01, 0x28, 0x25, 0xfa, 0x0a, 0x11, 0x43, 0xa9, 0x88, 0xfb, 0x58, 0x12, - 0xb0, 0x8e, 0x02, 0x8b, 0x34, 0x9a, 0xa0, 0x30, 0xc2, 0x0c, 0x90, 0x72, 0x80, 0x90, 0x9a, 0x09, - 0x34, 0x90, 0xdb, 0x38, 0x82, 0x19, 0xb3, 0xbf, 0x54, 0x82, 0xba, 0x0b, 0x23, 0x8d, 0x25, 0xa8, - 0xaa, 0x18, 0x92, 0x00, 0x5b, 0xd1, 0x58, 0xa1, 0xab, 0x40, 0x93, 0x3c, 0xa3, 0xb9, 0x9f, 0x16, - 0x19, 0xb0, 0x38, 0xc0, 0x51, 0xb8, 0x08, 0x90, 0x21, 0xa8, 0x01, 0x98, 0x0d, 0xa1, 0x64, 0xb9, - 0x09, 0xaa, 0x33, 0x59, 0x87, 0x0c, 0x93, 0x9e, 0x20, 0x13, 0x88, 0xbc, 0x28, 0x03, 0x41, 0xe1, - 0x8b, 0x10, 0x22, 0x91, 0x8a, 0x88, 0x01, 0x8a, 0x83, 0xbb, 0x79, 0xa4, 0x61, 0xfb, 0x29, 0x34, - 0xa0, 0xdc, 0x09, 0x33, 0x01, 0xa9, 0x81, 0x9e, 0x32, 0x00, 0xa9, 0x29, 0xc8, 0x27, 0x9a, 0xf9, - 0x69, 0x93, 0x8b, 0x89, 0x21, 0x81, 0x12, 0xba, 0xba, 0x73, 0xc1, 0x29, 0xb1, 0x88, 0x18, 0x26, - 0xa9, 0xcc, 0x61, 0x82, 0xa9, 0x88, 0x0a, 0x25, 0x98, 0x09, 0xa9, 0xcb, 0x70, 0x83, 0xab, 0x29, - 0x04, 0x9a, 0x42, 0xb1, 0x0d, 0x22, 0xb9, 0x99, 0x48, 0x86, 0x2a, 0xb0, 0xaa, 0x78, 0xa3, 0x19, - 0x8a, 0x07, 0xab, 0x10, 0x03, 0xad, 0x32, 0xc1, 0x0a, 0x1a, 0x36, 0xa0, 0xab, 0x0c, 0x07, 0x19, - 0xd1, 0x1b, 0x24, 0x90, 0x99, 0x90, 0x9e, 0x43, 0x83, 0x19, 0xf9, 0x4a, 0x90, 0x11, 0x89, 0xa0, - 0x29, 0x05, 0xcc, 0x50, 0x81, 0x9b, 0x23, 0xba, 0x80, 0x71, 0xc1, 0x08, 0xa9, 0x32, 0xa2, 0x0c, - 0xb3, 0x6a, 0x92, 0x8d, 0x12, 0x08, 0xb8, 0x28, 0x91, 0x8c, 0x17, 0x8c, 0x92, 0x4a, 0x91, 0x31, - 0xbc, 0x21, 0x19, 0x84, 0x8f, 0x02, 0x9a, 0x48, 0x85, 0xbc, 0x38, 0x82, 0x20, 0xaa, 0x81, 0xac, - 0x27, 0xba, 0x53, 0xca, 0x00, 0x39, 0x93, 0xcd, 0x68, 0x83, 0xab, 0x32, 0xda, 0x30, 0x83, 0xbd, - 0x52, 0xb8, 0x18, 0x02, 0x89, 0x98, 0xa8, 0x79, 0x94, 0xad, 0x50, 0x92, 0x89, 0xa0, 0x10, 0xa9, - 0x81, 0x5b, 0x05, 0x8a, 0x89, 0x11, 0x92, 0x8f, 0x14, 0x98, 0xbb, 0x33, 0x80, 0x17, 0xad, 0x21, - 0x80, 0xba, 0x51, 0x90, 0x20, 0xb9, 0x18, 0xa1, 0x1d, 0x85, 0x88, 0x8b, 0x10, 0x32, 0xad, 0x37, - 0xbb, 0x89, 0x44, 0xb1, 0x9d, 0x42, 0x90, 0x9a, 0x80, 0x38, 0x26, 0xd9, 0x9c, 0x32, 0x89, 0x24, - 0x98, 0xb9, 0x89, 0x19, 0x21, 0x27, 0xaf, 0x22, 0x81, 0xdb, 0x28, 0x82, 0x63, 0xd9, 0x09, 0x10, - 0x00, 0x01, 0x09, 0x80, 0xfa, 0x5a, 0x83, 0x99, 0x9b, 0x44, 0xb0, 0xa9, 0x38, 0x84, 0xa9, 0x41, - 0xb1, 0x19, 0xec, 0x38, 0x04, 0x08, 0xb1, 0x8a, 0xaa, 0x71, 0x95, 0x1b, 0x81, 0xbb, 0x30, 0x72, - 0xc0, 0x89, 0x28, 0x04, 0xa9, 0x88, 0xaa, 0x72, 0x95, 0x0a, 0xca, 0x51, 0x91, 0x89, 0x00, 0xb1, - 0x1b, 0x25, 0xc2, 0x8f, 0x10, 0x31, 0x81, 0xbc, 0x9a, 0x73, 0x91, 0x8a, 0x94, 0x8c, 0x33, 0x99, - 0xa1, 0x9c, 0x51, 0x93, 0x08, 0xdb, 0x10, 0x42, 0xb1, 0x89, 0x8a, 0xc8, 0x71, 0x98, 0x20, 0xb1, - 0x0b, 0x83, 0xeb, 0x4a, 0x06, 0x8b, 0x32, 0xfa, 0x19, 0x22, 0xa9, 0x48, 0xa1, 0x0b, 0x18, 0x14, - 0xa2, 0x8f, 0x05, 0xcb, 0x51, 0xa0, 0x09, 0x80, 0x80, 0x53, 0xd0, 0x9b, 0x33, 0xa0, 0x28, 0xb3, - 0x8f, 0x81, 0x2a, 0x06, 0x99, 0x88, 0xa0, 0x30, 0xa4, 0xaf, 0x23, 0x13, 0xaa, 0xa1, 0x9d, 0x53, - 0xb8, 0x10, 0x90, 0x9a, 0x36, 0x9a, 0x83, 0xea, 0x3b, 0x06, 0x9a, 0x01, 0xd9, 0x50, 0x81, 0xa8, - 0x1a, 0x90, 0x10, 0x81, 0x71, 0xe3, 0x0b, 0x11, 0x11, 0xa9, 0x9a, 0x45, 0xd8, 0x08, 0x08, 0x04, - 0x8a, 0x92, 0x9b, 0x36, 0xea, 0x09, 0x23, 0xa9, 0x11, 0x09, 0xa8, 0x1a, 0xa0, 0x65, 0x90, 0xa0, - 0x9e, 0x33, 0x81, 0xab, 0x51, 0xc2, 0x9c, 0x28, 0x24, 0x12, 0xfd, 0x28, 0x92, 0x19, 0x99, 0x31, - 0xaa, 0x13, 0x8b, 0x98, 0x20, 0x44, 0xfb, 0x59, 0x81, 0xab, 0x42, 0x80, 0xb9, 0x0b, 0x24, 0x44, - 0xec, 0x28, 0x02, 0xa0, 0xaa, 0x32, 0x01, 0xbf, 0x45, 0xa9, 0x09, 0x80, 0x88, 0x41, 0xa1, 0xaa, - 0x10, 0xc1, 0x48, 0x04, 0xaa, 0x19, 0xb9, 0x4a, 0x37, 0xaa, 0xb9, 0x40, 0x14, 0xac, 0x20, 0x32, - 0xf9, 0x0b, 0x21, 0x02, 0x98, 0x8b, 0x06, 0xcb, 0x38, 0x22, 0xa2, 0xcc, 0x1a, 0x44, 0xc0, 0x89, - 0x1a, 0x35, 0xa9, 0x98, 0xad, 0x43, 0x12, 0xb8, 0x4a, 0x93, 0xab, 0x8d, 0x17, 0xaa, 0x18, 0x11, - 0x33, 0xbf, 0x28, 0x12, 0x88, 0xb9, 0xac, 0x72, 0x93, 0x0b, 0x94, 0xad, 0x51, 0xa1, 0x09, 0x88, - 0x80, 0x21, 0x41, 0xd1, 0x8c, 0x80, 0x29, 0x15, 0x89, 0x9b, 0x25, 0xad, 0x20, 0x62, 0xc0, 0x9b, - 0x33, 0x98, 0x89, 0x14, 0x00, 0xcd, 0x00, 0x41, 0xa1, 0xac, 0x50, 0x82, 0xab, 0x10, 0x12, 0xa8, - 0x39, 0xc3, 0x0c, 0x13, 0x0c, 0x07, 0x9c, 0x33, 0x99, 0xa8, 0x90, 0x0f, 0x12, 0x24, 0xaa, 0xb9, - 0x8e, 0x23, 0x23, 0xda, 0x18, 0xa0, 0x29, 0x05, 0x8b, 0x94, 0x8c, 0x33, 0xfb, 0x5b, 0x13, 0x8a, - 0x88, 0x0a, 0x00, 0xd9, 0x71, 0xb3, 0x8c, 0x11, 0x81, 0x99, 0x9b, 0x72, 0x92, 0x1b, 0x91, 0x89, - 0x9e, 0x44, 0x81, 0xac, 0x20, 0x01, 0xc9, 0x58, 0xa2, 0x0c, 0x81, 0x22, 0xaa, 0x81, 0x3b, 0x17, - 0xbf, 0x32, 0x82, 0xb9, 0x0a, 0x22, 0x32, 0xf0, 0x3d, 0xa2, 0x8c, 0x42, 0x92, 0xab, 0xa8, 0x71, - 0x91, 0xaa, 0x1a, 0x43, 0x01, 0xa8, 0x8d, 0x01, 0x51, 0xb8, 0x18, 0x0a, 0x85, 0x2a, 0x86, 0xac, - 0x9b, 0x64, 0x92, 0xbb, 0x10, 0x20, 0x05, 0xac, 0x10, 0x80, 0x99, 0x28, 0x36, 0xea, 0x19, 0x13, - 0xda, 0x28, 0x92, 0x30, 0xd8, 0x8b, 0x53, 0x80, 0x88, 0xb1, 0x8f, 0x24, 0x98, 0x8b, 0x33, 0x8b, - 0x11, 0xc1, 0x0c, 0x14, 0xac, 0x33, 0xa0, 0xbd, 0x70, 0x82, 0x99, 0xbc, 0x62, 0x92, 0x89, 0xa8, - 0x38, 0x14, 0xac, 0x11, 0x10, 0xc9, 0x40, 0x81, 0xc8, 0x0d, 0x34, 0x90, 0xc8, 0x9a, 0x50, 0xa2, - 0x21, 0xbc, 0x11, 0x08, 0x90, 0x18, 0x90, 0x9a, 0x66, 0x90, 0xbc, 0x58, 0x12, 0xa9, 0x00, 0xaf, - 0x53, 0x91, 0x99, 0x88, 0xa9, 0x52, 0xa8, 0x22, 0x89, 0xc9, 0x50, 0xc1, 0x3a, 0x02, 0x00, 0xeb, - 0x30, 0xa9, 0x44, 0xb9, 0x1a, 0xa1, 0x30, 0x26, 0xeb, 0xab, 0x46, 0x91, 0xba, 0x29, 0x22, 0x90, - 0x10, 0xe0, 0x0d, 0x22, 0x11, 0xb0, 0x8e, 0x00, 0x42, 0xb1, 0x9d, 0x21, 0x81, 0x31, 0xe9, 0x99, - 0x29, 0x15, 0x01, 0xca, 0x0c, 0x03, 0x11, 0x89, 0x94, 0x0e, 0x83, 0x89, 0xa9, 0x32, 0xca, 0x53, - 0x88, 0xc8, 0x39, 0xb2, 0x2d, 0x06, 0x8c, 0x04, 0x9d, 0x11, 0x12, 0x8a, 0xc0, 0x1c, 0x14, 0x8a, - 0x81, 0x00, 0x9a, 0x24, 0x10, 0xd9, 0xab, 0x58, 0x16, 0xa9, 0x8a, 0x30, 0xb2, 0x61, 0xf9, 0x08, - 0x19, 0x33, 0x98, 0xda, 0x2b, 0x16, 0x08, 0xa9, 0x9a, 0x11, 0x44, 0xb2, 0x9e, 0x08, 0x12, 0x52, - 0xf9, 0x1a, 0x12, 0x00, 0x80, 0xbb, 0x00, 0x30, 0x27, 0xab, 0xcb, 0x31, 0x12, 0x81, 0xda, 0x1b, - 0x15, 0x21, 0xfb, 0x09, 0x31, 0x92, 0x9b, 0x12, 0x09, 0xd9, 0x61, 0x98, 0x83, 0x8f, 0x81, 0x38, - 0xb1, 0x5a, 0xb2, 0x09, 0x8a, 0x16, 0xba, 0x2c, 0x05, 0x1a, 0x92, 0x9b, 0x09, 0x35, 0x9a, 0x02, - 0xdc, 0x2a, 0x37, 0xb9, 0x1a, 0xa0, 0x21, 0x12, 0xb9, 0xaa, 0x9b, 0x14, 0x65, 0xe9, 0x18, 0x80, - 0x12, 0x9b, 0x10, 0x01, 0x99, 0x72, 0xf0, 0x28, 0x88, 0x80, 0x51, 0xe8, 0x19, 0x01, 0x18, 0x82, - 0xca, 0x39, 0x84, 0xab, 0x20, 0xb1, 0x61, 0xa8, 0x18, 0xbb, 0x23, 0x90, 0x71, 0x83, 0xbe, 0x20, - 0x82, 0x3a, 0x96, 0x9c, 0x11, 0x80, 0xaa, 0x33, 0xb8, 0x0b, 0x02, 0x98, 0x71, 0xf4, 0x4b, 0x83, - 0x8a, 0x80, 0xb9, 0x71, 0xa1, 0x09, 0x89, 0x03, 0x9a, 0x10, 0x96, 0x9f, 0x33, 0x81, 0x99, 0xcc, - 0x50, 0x02, 0xa8, 0x8b, 0x00, 0x12, 0x9b, 0x57, 0xcb, 0x11, 0x09, 0x02, 0x81, 0xae, 0x43, 0x99, - 0x18, 0x80, 0xa0, 0x3a, 0x92, 0x98, 0x59, 0xb1, 0x0c, 0x01, 0x12, 0x2b, 0x07, 0x8f, 0x12, 0xb9, - 0x9d, 0x44, 0x92, 0x9b, 0xa3, 0x9d, 0x22, 0x11, 0xa1, 0x18, 0xae, 0x35, 0xb9, 0x00, 0x13, 0x9d, - 0x01, 0x00, 0xb9, 0x32, 0x9b, 0x25, 0xbc, 0x51, 0xc0, 0x3b, 0xa1, 0x73, 0xc0, 0x1c, 0x04, 0xaa, - 0x39, 0x95, 0x9b, 0x12, 0x18, 0x91, 0x9a, 0x2a, 0x57, 0xc8, 0x0b, 0x13, 0x80, 0x29, 0xc3, 0x0f, - 0x11, 0x10, 0xa0, 0xab, 0x12, 0x39, 0x37, 0xfb, 0x28, 0x90, 0x01, 0x39, 0xe1, 0x1c, 0x04, 0x0a, - 0x01, 0x9a, 0x00, 0x00, 0x11, 0x91, 0x9a, 0x4a, 0x15, 0xea, 0x10, 0x21, 0xcb, 0x42, 0xd9, 0x29, - 0x83, 0x2b, 0xa2, 0x9d, 0x33, 0xaa, 0x14, 0x61, 0xe9, 0x89, 0x3a, 0x85, 0x89, 0x01, 0x89, 0xba, - 0x53, 0x09, 0x93, 0xcb, 0x39, 0x06, 0x09, 0xb0, 0x2a, 0xd9, 0x72, 0xb0, 0x10, 0xbb, 0x41, 0x92, - 0x1a, 0xd1, 0x0c, 0x36, 0xc8, 0x1a, 0xa1, 0x69, 0x83, 0x9d, 0x80, 0x10, 0x02, 0x01, 0xbb, 0x99, - 0x43, 0x28, 0xd2, 0x0e, 0x21, 0x80, 0x3a, 0xf3, 0x1c, 0x14, 0x99, 0x88, 0x99, 0x39, 0x03, 0x20, - 0xcc, 0x29, 0x93, 0x9b, 0xb2, 0x32, 0x1b, 0x17, 0xac, 0x10, 0x10, 0x01, 0x98, 0x9b, 0x00, 0x29, - 0x12, 0x99, 0x29, 0x11, 0xb1, 0xab, 0x31, 0x91, 0x51, 0xc1, 0x3a, 0xf0, 0x38, 0xa2, 0x0a, 0x10, - 0x02, 0x99, 0xab, 0x31, 0xa9, 0x33, 0x91, 0x9c, 0x99, 0x53, 0x81, 0x09, 0xdb, 0x31, 0x99, 0x11, - 0x33, 0xa9, 0xb9, 0x31, 0xb1, 0x2c, 0x03, 0x9b, 0x01, 0x9a, 0x29, 0x91, 0x31, 0xa1, 0x9b, 0x30, - 0x21, 0xa0, 0x9b, 0x31, 0xa1, 0x19, 0x99, 0x92, 0x99, 0x31, 0xb1, 0x1b, 0x21, 0x11, 0xaa, 0x29, - 0x11, 0x00, 0x11, 0xa9, 0x1b, 0x12, 0x00, 0x92, 0xaa, 0x29, 0x13, 0xa9, 0x10, 0x99, 0x11, 0x01, - 0x90, 0xa9, 0x21, 0x11, 0x90, 0xa9, 0x19, 0x21, 0x90, 0x99, 0x11, 0x90, 0x19, 0x01, 0x09, 0x19, - 0x01, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, - 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x70, 0xff, 0x71, 0x77, 0xb1, 0x22, 0xbc, 0xe9, - 0x39, 0x13, 0x18, 0xfc, 0x1a, 0x98, 0x42, 0x14, 0x99, 0xc9, 0x39, 0x21, 0x92, 0x37, 0xcb, 0xba, - 0x20, 0x28, 0xd4, 0x49, 0xa1, 0x09, 0x99, 0x42, 0x01, 0xc9, 0x59, 0x83, 0x9a, 0x19, 0xbb, 0x12, - 0x20, 0x9c, 0x01, 0x27, 0x8f, 0xb2, 0x31, 0xba, 0xb2, 0x79, 0x84, 0x2a, 0xb2, 0x9e, 0x20, 0x00, - 0x02, 0xcb, 0x21, 0xb9, 0x29, 0x37, 0x8b, 0xb0, 0x98, 0x70, 0x90, 0x93, 0x0e, 0x10, 0x83, 0x48, - 0xc2, 0x9c, 0xbb, 0x20, 0x25, 0xa0, 0x1b, 0xf8, 0x60, 0x82, 0x0a, 0x90, 0x31, 0x8a, 0xe3, 0x3a, - 0xeb, 0x20, 0x23, 0x98, 0x90, 0x09, 0x88, 0xab, 0xc2, 0x0b, 0x88, 0x77, 0x91, 0xa0, 0x51, 0xd9, - 0x1a, 0x82, 0x29, 0xb1, 0x30, 0x22, 0xf8, 0x29, 0xa9, 0x90, 0x09, 0x89, 0x04, 0xaf, 0x73, 0x92, - 0x28, 0x88, 0xb0, 0x0d, 0x00, 0x02, 0x0c, 0x34, 0xa8, 0xeb, 0x11, 0x0d, 0xc2, 0x19, 0x39, 0x87, - 0x00, 0x88, 0x90, 0x32, 0x90, 0xec, 0x19, 0x01, 0x9a, 0x80, 0x08, 0x73, 0x81, 0x18, 0x82, 0x29, - 0xf2, 0x8f, 0xa1, 0x39, 0x12, 0x90, 0x41, 0x90, 0xfa, 0x00, 0x38, 0x95, 0x09, 0xc0, 0x0c, 0x92, - 0x18, 0x01, 0x01, 0x3a, 0xa5, 0x4a, 0xb8, 0x28, 0x32, 0x28, 0xfc, 0x9b, 0x1b, 0x45, 0x91, 0x08, - 0xba, 0x38, 0xa8, 0x37, 0xaa, 0x21, 0x81, 0x0d, 0xf8, 0x4c, 0x08, 0x04, 0x89, 0xa8, 0x8a, 0x11, - 0x42, 0x51, 0xb0, 0xab, 0x12, 0x0e, 0xb8, 0x60, 0x88, 0x00, 0x2b, 0xa3, 0x0d, 0x24, 0x9b, 0x10, - 0x03, 0x9c, 0x21, 0xf9, 0x20, 0xac, 0x27, 0x1b, 0xa2, 0xa9, 0x98, 0x4b, 0x05, 0x32, 0xbd, 0x03, - 0xca, 0x9a, 0x61, 0x81, 0x00, 0x9b, 0x21, 0xb0, 0x63, 0xaa, 0xa1, 0x73, 0xd8, 0x11, 0x8b, 0x32, - 0xf8, 0x2a, 0x91, 0xab, 0x26, 0x89, 0x62, 0xc8, 0x20, 0xba, 0x31, 0x81, 0x88, 0x10, 0xde, 0x41, - 0xa9, 0x12, 0x9a, 0x10, 0x01, 0x9a, 0x93, 0x4c, 0x34, 0xfc, 0x32, 0xab, 0x91, 0x42, 0x89, 0xa0, - 0x31, 0xba, 0xac, 0x81, 0x29, 0x11, 0x88, 0x27, 0x0c, 0xab, 0x17, 0x22, 0xaa, 0x38, 0xb6, 0x1f, - 0xa2, 0x89, 0x98, 0x19, 0x25, 0xc9, 0x59, 0xb8, 0x18, 0x45, 0x89, 0xb1, 0x2c, 0x01, 0xd9, 0x3b, - 0x03, 0x29, 0xf0, 0x2a, 0x12, 0x90, 0x31, 0xb1, 0xad, 0x11, 0x24, 0xc9, 0x4a, 0xf3, 0x2b, 0x80, - 0x84, 0x3d, 0xb2, 0x18, 0xb8, 0x18, 0x20, 0x21, 0x88, 0x29, 0xa4, 0xfa, 0x2f, 0xa3, 0x20, 0x18, - 0xf2, 0x1c, 0x82, 0x19, 0x81, 0x09, 0x31, 0xf0, 0x3a, 0x03, 0xcb, 0x62, 0xa8, 0x98, 0x00, 0x08, - 0xa0, 0x0e, 0x06, 0x9a, 0x31, 0xd3, 0x2a, 0x82, 0x9a, 0x14, 0x9f, 0x12, 0x10, 0x0c, 0x83, 0xb8, - 0x2a, 0x88, 0x86, 0x1a, 0x8c, 0x85, 0x1c, 0x03, 0x88, 0xa9, 0x30, 0xa9, 0x42, 0xf8, 0x50, 0xba, - 0x11, 0x41, 0xca, 0x01, 0x80, 0x1d, 0xb3, 0x71, 0xb8, 0x01, 0x3a, 0xc1, 0x19, 0xd3, 0x59, 0xa8, - 0x12, 0x00, 0xbc, 0x29, 0x96, 0x3c, 0x93, 0x8a, 0x81, 0x98, 0x60, 0xd0, 0x10, 0x18, 0xc8, 0x33, - 0xaf, 0x11, 0x88, 0x20, 0x80, 0x8c, 0x17, 0x09, 0x90, 0x89, 0x09, 0x83, 0x8d, 0x12, 0x0a, 0x84, - 0x88, 0x8b, 0xba, 0x14, 0x54, 0xba, 0x16, 0x8e, 0xa8, 0x23, 0x28, 0x81, 0xa9, 0x13, 0xab, 0x9f, - 0x17, 0x99, 0x0a, 0x92, 0x80, 0x09, 0x80, 0x81, 0xad, 0x63, 0x00, 0x33, 0xd9, 0x31, 0xbb, 0x08, - 0xab, 0xbd, 0x20, 0x15, 0x19, 0x8d, 0x06, 0x10, 0x8a, 0x91, 0x72, 0xc8, 0x20, 0xd9, 0x1a, 0x03, - 0x2b, 0xa5, 0x89, 0x30, 0xfa, 0x20, 0x01, 0x2c, 0x87, 0x8a, 0x12, 0xad, 0x83, 0x39, 0xb9, 0x95, - 0x1a, 0xa2, 0x10, 0xad, 0x14, 0x28, 0x19, 0xc3, 0x59, 0xb9, 0x10, 0x02, 0xad, 0x26, 0xbc, 0x23, - 0x9c, 0x10, 0xc4, 0x4b, 0x93, 0x1a, 0x58, 0xf2, 0x38, 0xc8, 0x10, 0x80, 0x09, 0x10, 0xc1, 0x59, - 0xb8, 0x10, 0x93, 0x2a, 0x9a, 0xd3, 0x70, 0x98, 0x80, 0x22, 0xad, 0x00, 0x81, 0x00, 0x10, 0xad, - 0x85, 0x2c, 0xa3, 0x80, 0x1b, 0x14, 0x81, 0xac, 0x29, 0x86, 0x0c, 0x92, 0x30, 0xe9, 0x10, 0x9b, - 0x05, 0x59, 0xc8, 0x93, 0x1d, 0x21, 0xc3, 0x09, 0x31, 0xcc, 0x12, 0xaa, 0x48, 0xd1, 0x31, 0x90, - 0x99, 0x00, 0xad, 0x26, 0x08, 0x0b, 0x86, 0x1c, 0xa2, 0x00, 0x8b, 0x90, 0x68, 0xa2, 0x1b, 0x99, - 0x85, 0x1e, 0x94, 0x98, 0x20, 0x92, 0x18, 0xfb, 0x30, 0xb3, 0x4c, 0xd1, 0x18, 0x18, 0xb0, 0x40, - 0xd2, 0x4b, 0xb1, 0x01, 0x3a, 0x94, 0x39, 0xfb, 0x41, 0xc0, 0x29, 0xa0, 0x20, 0x8a, 0x91, 0x72, - 0xb8, 0x9a, 0x15, 0x0a, 0xa2, 0x22, 0xc9, 0x5b, 0xb8, 0x02, 0x0f, 0x96, 0x39, 0xd0, 0x10, 0x8a, - 0x03, 0x0a, 0x84, 0x1d, 0xa1, 0x22, 0xab, 0x02, 0x9c, 0x14, 0x29, 0xf1, 0x08, 0x10, 0x88, 0x22, - 0xcb, 0x21, 0x3a, 0xf3, 0x5a, 0xa1, 0x89, 0x99, 0x05, 0x0d, 0x86, 0x1a, 0x90, 0x82, 0x9b, 0x05, - 0x0d, 0xb3, 0x59, 0x90, 0x80, 0x29, 0xf0, 0x38, 0x81, 0x89, 0x93, 0x0d, 0x38, 0xc1, 0x30, 0x98, - 0x89, 0x0a, 0xa4, 0x4a, 0xd0, 0x73, 0xa9, 0xa2, 0x59, 0xc0, 0x22, 0x9c, 0x92, 0x20, 0xac, 0x05, - 0x9a, 0x30, 0xa0, 0xa2, 0x7a, 0xb0, 0x31, 0xbc, 0x26, 0x9a, 0x91, 0x19, 0xaa, 0x16, 0x8d, 0x04, - 0x8b, 0x28, 0x82, 0x0b, 0x23, 0xab, 0x05, 0x1e, 0x92, 0x08, 0x09, 0xb1, 0x08, 0x9e, 0x44, 0x08, - 0xf1, 0x29, 0x98, 0x12, 0x4b, 0x96, 0x8c, 0x01, 0x01, 0x8b, 0x92, 0x0c, 0x86, 0x8b, 0x04, 0x09, - 0x98, 0x15, 0x8d, 0xa3, 0x3b, 0xa3, 0x1c, 0x81, 0x94, 0x2b, 0xb2, 0x38, 0xa8, 0xbd, 0x43, 0x22, - 0xaf, 0x24, 0x0a, 0xa8, 0x92, 0x3b, 0xfa, 0x61, 0x10, 0xc9, 0x40, 0xb9, 0x30, 0xb9, 0x03, 0x38, - 0xed, 0x42, 0xa9, 0x10, 0x82, 0x0c, 0x83, 0x89, 0x40, 0xea, 0x21, 0x88, 0x99, 0x12, 0x8a, 0x50, - 0xc1, 0x19, 0x10, 0xbe, 0x44, 0x9a, 0x02, 0x10, 0x9a, 0x10, 0xf8, 0x50, 0xa8, 0x12, 0x8b, 0xb1, - 0x49, 0xa9, 0x17, 0xbb, 0x52, 0x8b, 0xa1, 0x53, 0xac, 0x14, 0xa9, 0x28, 0xa1, 0x09, 0x00, 0xb8, - 0x55, 0xac, 0x93, 0x20, 0x0c, 0x86, 0x8b, 0x12, 0xab, 0x21, 0x96, 0x0f, 0x13, 0x9a, 0x28, 0xa1, - 0x19, 0x18, 0xc9, 0x22, 0x2f, 0xa3, 0x18, 0x8d, 0xa3, 0x79, 0xa0, 0x81, 0x89, 0x00, 0x0a, 0x96, - 0x5a, 0xc9, 0x21, 0x09, 0x93, 0xaa, 0x01, 0x1b, 0xb3, 0x74, 0xaa, 0x93, 0x3c, 0xd2, 0x20, 0x80, - 0x8e, 0x21, 0xc1, 0x48, 0xa0, 0x90, 0x58, 0xda, 0x12, 0x10, 0x80, 0x08, 0xf0, 0x3a, 0xb2, 0x31, - 0xab, 0x87, 0x1c, 0xb0, 0x23, 0xab, 0x24, 0x02, 0xca, 0x59, 0xe0, 0x18, 0x08, 0x91, 0x21, 0x9c, - 0x23, 0xca, 0x38, 0x14, 0x99, 0x90, 0xbb, 0x27, 0xaf, 0x84, 0x19, 0x00, 0x00, 0x89, 0x15, 0xac, - 0x02, 0x09, 0x90, 0x35, 0xcd, 0x11, 0x08, 0x89, 0x28, 0xb2, 0x34, 0xbf, 0x86, 0x0a, 0x40, 0xd1, - 0x39, 0x90, 0xa9, 0x24, 0xba, 0x30, 0xa8, 0x50, 0xa8, 0x81, 0xaa, 0x81, 0x78, 0xc2, 0x31, 0xea, - 0x20, 0x09, 0xe2, 0x58, 0x98, 0x08, 0x00, 0x08, 0x1a, 0x82, 0x8f, 0x15, 0x8b, 0x82, 0x89, 0x18, - 0xc0, 0x49, 0xc4, 0x4b, 0xa4, 0x8a, 0x03, 0xaa, 0x42, 0xb1, 0x2c, 0xa5, 0x0b, 0x81, 0x81, 0x98, - 0x20, 0x3a, 0xf9, 0x21, 0x8a, 0x12, 0x10, 0x22, 0xab, 0x87, 0xaf, 0x28, 0x95, 0x0d, 0x86, 0x8b, - 0x12, 0x80, 0x1b, 0xb5, 0x29, 0x00, 0xb8, 0x52, 0xbc, 0x15, 0xab, 0x41, 0xb8, 0x3a, 0x85, 0x9c, - 0x14, 0xa9, 0x31, 0xc0, 0x08, 0x89, 0x14, 0xc0, 0x4a, 0xb1, 0x1a, 0x12, 0x9a, 0x94, 0x1d, 0x80, - 0x23, 0xa9, 0xaa, 0x47, 0xf8, 0x58, 0xa1, 0x9a, 0x21, 0xc8, 0x31, 0x8b, 0x93, 0x20, 0x9e, 0x82, - 0x40, 0x8a, 0x81, 0x11, 0xfc, 0x41, 0xa8, 0x28, 0x90, 0x92, 0x2d, 0x29, 0xb3, 0x1a, 0x87, 0x8d, - 0x84, 0x0c, 0x82, 0x91, 0x0b, 0x86, 0x1b, 0x92, 0x21, 0xb8, 0x2e, 0x95, 0x0a, 0x00, 0xa0, 0x1c, - 0xa4, 0x3a, 0x82, 0xb0, 0x5a, 0x94, 0x0b, 0x10, 0xc3, 0x5b, 0xa0, 0xb2, 0x1e, 0x10, 0x06, 0x8d, - 0x02, 0x8a, 0x91, 0x31, 0x9c, 0x04, 0x0a, 0x11, 0xdb, 0x00, 0x61, 0xd0, 0x39, 0xa2, 0x90, 0x3d, - 0xa5, 0x3b, 0x98, 0x11, 0xa8, 0x39, 0x10, 0xc5, 0x2d, 0xb1, 0x31, 0xb9, 0x59, 0xc4, 0x1a, 0x21, - 0xc1, 0x1a, 0x88, 0x02, 0x90, 0x7c, 0xa4, 0x9a, 0x28, 0x8b, 0x86, 0x99, 0x41, 0xb8, 0x0a, 0x17, - 0x8b, 0x80, 0x11, 0xba, 0x4a, 0xb3, 0x3a, 0x18, 0xc3, 0x41, 0xa8, 0x49, 0xf2, 0x2c, 0x84, 0x9a, - 0x91, 0x2c, 0x41, 0xe2, 0x58, 0xb8, 0x19, 0x01, 0x90, 0x91, 0x4c, 0x91, 0xb1, 0x5a, 0xa0, 0x20, - 0xc3, 0x5b, 0xb8, 0x18, 0x21, 0xac, 0x02, 0x90, 0x54, 0xbc, 0x15, 0xba, 0x39, 0xb1, 0x16, 0x1a, - 0xbb, 0x17, 0xab, 0x34, 0xac, 0x10, 0x00, 0x38, 0xf8, 0x19, 0x32, 0xca, 0x32, 0xe9, 0x20, 0xa2, - 0x1b, 0xa2, 0x19, 0x53, 0xc9, 0x81, 0x1c, 0x10, 0x90, 0x16, 0x9d, 0x81, 0x88, 0x08, 0x11, 0x08, - 0x85, 0x4a, 0xc3, 0x9e, 0x22, 0xaa, 0x34, 0xa8, 0x0a, 0xb9, 0x28, 0x95, 0x2c, 0x24, 0xd8, 0x48, - 0xcb, 0x15, 0x1b, 0x91, 0x80, 0xb9, 0x78, 0xb1, 0x01, 0x18, 0xc1, 0x2c, 0xc2, 0x11, 0x1c, 0xa2, - 0x71, 0xd0, 0x40, 0xa9, 0x80, 0x11, 0x0c, 0x12, 0xd9, 0x41, 0xba, 0x11, 0x01, 0x1b, 0xa6, 0x29, - 0x81, 0x9f, 0x13, 0x00, 0x09, 0xa3, 0x0c, 0xf1, 0x48, 0x08, 0xa8, 0x21, 0xab, 0x22, 0xc8, 0x33, - 0x9b, 0x21, 0x3a, 0x97, 0x5b, 0xc0, 0x08, 0x0d, 0x05, 0x1e, 0xa2, 0x20, 0x0b, 0xc3, 0x3a, 0xa1, - 0x20, 0x02, 0x90, 0x5d, 0xc1, 0x00, 0x8a, 0x28, 0xf3, 0x2a, 0x11, 0x90, 0x88, 0x8d, 0x04, 0x08, - 0x12, 0x0a, 0x80, 0xd1, 0x50, 0xea, 0x38, 0xa2, 0x10, 0x8c, 0xa2, 0x50, 0xbb, 0x36, 0xbc, 0x14, - 0x8c, 0x12, 0x01, 0xdb, 0x42, 0xad, 0x05, 0x09, 0x80, 0x90, 0x3a, 0xc3, 0x3b, 0xb3, 0x10, 0x10, - 0xda, 0x11, 0xba, 0x73, 0xb8, 0x01, 0x19, 0x89, 0x07, 0x0b, 0x21, 0xda, 0x86, 0x0c, 0x00, 0x02, - 0x8a, 0x01, 0xb9, 0x80, 0x7a, 0xc2, 0x2a, 0x02, 0x10, 0xb8, 0x90, 0x60, 0xfb, 0x53, 0xba, 0x11, - 0x09, 0x09, 0xa6, 0x3b, 0xa3, 0x9c, 0x43, 0x90, 0x39, 0xf1, 0x4b, 0x80, 0x18, 0xa3, 0x0c, 0x29, - 0xf0, 0x28, 0x91, 0x48, 0xc3, 0x29, 0x0b, 0xa4, 0x18, 0x89, 0x83, 0x0f, 0x23, 0xe9, 0x20, 0xa9, - 0x14, 0x9c, 0x91, 0x60, 0xa9, 0x32, 0xbb, 0x02, 0x08, 0x61, 0xe1, 0x1a, 0x01, 0x98, 0x42, 0xb9, - 0x80, 0x0e, 0x81, 0x13, 0x8d, 0x02, 0x00, 0x10, 0x88, 0x90, 0xcb, 0x33, 0x5e, 0xf2, 0x29, 0x3a, - 0xd2, 0x41, 0xaa, 0x00, 0x80, 0x29, 0x91, 0xd8, 0x79, 0xa0, 0x3a, 0xa1, 0x31, 0xa0, 0x9c, 0x63, - 0xb8, 0x5a, 0xf1, 0x38, 0xa8, 0x10, 0x80, 0x08, 0x82, 0x9a, 0x6a, 0xd9, 0x24, 0x99, 0x08, 0x92, - 0x1a, 0x0b, 0x86, 0x88, 0x0b, 0x84, 0xc8, 0x70, 0xb9, 0x85, 0x0a, 0x10, 0x98, 0x80, 0x63, 0xbd, - 0x04, 0x1c, 0x83, 0x1a, 0x81, 0x09, 0x99, 0x12, 0x1e, 0xc3, 0x39, 0x80, 0x08, 0xa2, 0x8d, 0x04, - 0x99, 0x50, 0xe2, 0x3b, 0xa6, 0x2a, 0x91, 0xa9, 0x22, 0x2b, 0x94, 0xb0, 0x1e, 0x94, 0x1b, 0x86, - 0x8c, 0x83, 0x18, 0x08, 0x91, 0x1a, 0xa1, 0x3a, 0xf3, 0x49, 0xb8, 0x00, 0x11, 0xd3, 0x09, 0x3b, - 0x84, 0xb9, 0x71, 0xe3, 0x29, 0xa1, 0x38, 0xc9, 0x30, 0x81, 0xfa, 0x69, 0xb0, 0x19, 0x01, 0x50, - 0x99, 0x92, 0x2c, 0xa1, 0x21, 0x9c, 0x21, 0xf1, 0x38, 0x98, 0xb1, 0x7b, 0xa0, 0x81, 0x39, 0xa1, - 0x8a, 0x68, 0xc1, 0x11, 0x2c, 0x81, 0x95, 0x0d, 0x81, 0x89, 0x21, 0xab, 0x25, 0xad, 0x41, 0x98, - 0x99, 0x23, 0x0a, 0x06, 0x0e, 0x81, 0x01, 0x89, 0x02, 0xba, 0x98, 0x2e, 0xa7, 0x2a, 0x80, 0x00, - 0x80, 0x10, 0x9b, 0x96, 0x4b, 0x93, 0x89, 0xd3, 0x2d, 0x85, 0x0b, 0x00, 0x91, 0x1c, 0xc2, 0x21, - 0xbb, 0x40, 0x96, 0x0a, 0x68, 0xc0, 0x31, 0xdb, 0x22, 0xa0, 0x2b, 0xc2, 0x01, 0x3e, 0xc4, 0x38, - 0xcb, 0x13, 0x19, 0x81, 0x18, 0xa3, 0x3c, 0xe1, 0x20, 0xab, 0x33, 0x0e, 0xb5, 0x3b, 0xb1, 0x18, - 0x38, 0x95, 0x09, 0x02, 0x9f, 0x85, 0x2b, 0xa3, 0x0a, 0x81, 0x10, 0x9f, 0x05, 0x0e, 0x84, 0x89, - 0x20, 0xa8, 0x09, 0x41, 0xd9, 0x22, 0x8b, 0xa4, 0x3a, 0xb8, 0x25, 0xbb, 0x30, 0x98, 0xf0, 0x52, - 0xba, 0x13, 0x9c, 0x33, 0xd1, 0x2a, 0x93, 0x9b, 0x32, 0xaa, 0x32, 0xe1, 0x58, 0xe8, 0x28, 0x80, - 0x92, 0x19, 0xca, 0x33, 0xc9, 0x69, 0xb3, 0x09, 0x31, 0xda, 0x3b, 0x95, 0x2b, 0xe3, 0x30, 0x8c, - 0x95, 0x3b, 0xb1, 0x2a, 0x21, 0xb0, 0x10, 0x02, 0x0f, 0x93, 0xc9, 0x73, 0xbb, 0x04, 0x2a, 0xc8, - 0x10, 0x00, 0x18, 0xb2, 0x59, 0x3a, 0xd6, 0x5b, 0xb1, 0x18, 0x19, 0xa0, 0x29, 0x81, 0x2c, 0xc4, - 0x58, 0xa8, 0x11, 0x19, 0xc8, 0x40, 0xa8, 0x9b, 0x24, 0xa9, 0x40, 0xa1, 0x81, 0x0d, 0xb8, 0x15, - 0x80, 0x39, 0xf3, 0x30, 0x8c, 0x9a, 0x17, 0x0c, 0x11, 0xd0, 0x29, 0x81, 0xa8, 0x71, 0xb9, 0x15, - 0x8c, 0x91, 0x12, 0x8c, 0x02, 0x8a, 0x92, 0x28, 0xa0, 0x08, 0x2b, 0x16, 0xd8, 0x48, 0xa8, 0x98, - 0x51, 0xa0, 0x29, 0xcc, 0x14, 0x20, 0xcc, 0x24, 0x8c, 0x80, 0x04, 0x2b, 0xd0, 0x21, 0xa9, 0x91, - 0x79, 0xd1, 0x38, 0x99, 0x10, 0xc0, 0x21, 0x3a, 0xf3, 0x39, 0xb1, 0x0a, 0x02, 0x12, 0x9d, 0x02, - 0x3c, 0xd4, 0x49, 0xa8, 0x83, 0x0c, 0x04, 0x8b, 0x92, 0x2c, 0xb3, 0x3a, 0x80, 0x95, 0x0e, 0x32, - 0xd1, 0x19, 0x00, 0xb2, 0x1d, 0x80, 0x30, 0xf2, 0x58, 0xb9, 0x81, 0x69, 0x90, 0x80, 0x98, 0x48, - 0xc0, 0x28, 0x98, 0x12, 0x8f, 0x84, 0x19, 0xb9, 0x42, 0xa9, 0x03, 0x39, 0xf8, 0x10, 0x28, 0xb8, - 0xa9, 0x62, 0xaa, 0x24, 0xba, 0x40, 0x9a, 0x17, 0x8b, 0xa8, 0x21, 0x9a, 0x86, 0x0b, 0x41, 0xe8, - 0x20, 0x2a, 0xd0, 0x23, 0x0d, 0x83, 0x0a, 0x92, 0x2c, 0xd8, 0x21, 0x19, 0xa3, 0x9a, 0x12, 0x1f, - 0xb5, 0x38, 0x2a, 0xe3, 0x28, 0xb9, 0x30, 0xc1, 0x01, 0x82, 0x2c, 0xa0, 0x91, 0x3a, 0xa2, 0x8e, - 0x23, 0xab, 0x27, 0x9b, 0x02, 0x09, 0xb0, 0x39, 0xfb, 0x16, 0x2e, 0xc3, 0x28, 0x0c, 0xa4, 0x29, - 0x0a, 0x94, 0x98, 0x60, 0xc9, 0x03, 0x9b, 0x31, 0x82, 0xb8, 0x41, 0xcd, 0x31, 0xb8, 0x01, 0x11, - 0x8d, 0x96, 0x1b, 0x11, 0xb0, 0x52, 0xc9, 0x38, 0xd1, 0x20, 0x19, 0xe3, 0x3a, 0xa9, 0x03, 0x3b, - 0x03, 0xf9, 0x41, 0x0b, 0xc4, 0x29, 0x08, 0xa1, 0x48, 0xa1, 0x0d, 0x87, 0x1d, 0x91, 0xa1, 0x58, - 0xa9, 0x01, 0x00, 0x1b, 0x93, 0x9a, 0x54, 0xc9, 0x40, 0xba, 0x01, 0x49, 0x00, 0xb1, 0x2a, 0xa4, - 0x1c, 0xaa, 0x33, 0x18, 0x30, 0xa9, 0xea, 0x13, 0x39, 0x1c, 0xf4, 0x28, 0x98, 0xa1, 0x68, 0xaa, - 0x87, 0x2c, 0x82, 0xb9, 0x43, 0x9c, 0x90, 0x13, 0x2d, 0x82, 0x9a, 0x20, 0xca, 0x63, 0xba, 0x24, - 0xd9, 0x38, 0xa1, 0x81, 0x6a, 0xb9, 0x13, 0x8e, 0x92, 0x20, 0x8b, 0x83, 0x90, 0x59, 0xd9, 0x34, - 0x8c, 0x83, 0x2b, 0xf8, 0x60, 0xb9, 0x11, 0x3a, 0xe1, 0x21, 0x1b, 0x90, 0x91, 0x6a, 0x90, 0x18, - 0xa0, 0x30, 0x9d, 0x94, 0x4b, 0xa1, 0x08, 0x90, 0x2a, 0x85, 0x3c, 0xf2, 0x20, 0x0b, 0xa4, 0x48, - 0xaa, 0x83, 0x8c, 0x23, 0x08, 0xf9, 0x41, 0xba, 0x32, 0xba, 0x84, 0x1b, 0x22, 0xa4, 0x0d, 0x00, - 0x0b, 0x97, 0x89, 0x5b, 0xa4, 0x89, 0x28, 0x90, 0x0b, 0x94, 0x39, 0x18, 0xb0, 0x85, 0x0f, 0xa2, - 0x32, 0x9f, 0x84, 0x2b, 0x81, 0x00, 0x8a, 0xa6, 0x3e, 0xc2, 0x10, 0x08, 0xb1, 0x5a, 0xb0, 0x28, - 0xa8, 0x13, 0x2a, 0xb3, 0x09, 0x0e, 0x95, 0x11, 0x1f, 0xa1, 0xa2, 0x5b, 0x90, 0xb1, 0x7a, 0x98, - 0x90, 0x12, 0x0a, 0x04, 0xb9, 0x50, 0xf9, 0x48, 0x98, 0x01, 0x0a, 0xa2, 0x11, 0xae, 0x43, 0xaa, - 0x22, 0x39, 0xe8, 0x00, 0x29, 0x30, 0xd9, 0x13, 0x0c, 0xc0, 0x59, 0xa2, 0x9a, 0x40, 0x80, 0xb8, - 0x21, 0x3a, 0xd8, 0x22, 0x07, 0x8f, 0x82, 0x8a, 0x03, 0x09, 0x98, 0x06, 0x0e, 0x92, 0x0a, 0x91, - 0x40, 0x81, 0x99, 0x48, 0xd1, 0x08, 0x08, 0x09, 0xa5, 0x38, 0xcb, 0x01, 0x82, 0x4d, 0xa4, 0x0c, - 0x12, 0xa9, 0x5a, 0x92, 0x0c, 0x84, 0x3b, 0xf2, 0x00, 0x2a, 0xc1, 0x41, 0xc9, 0x40, 0x99, 0x10, - 0x10, 0xc2, 0x59, 0xc0, 0x19, 0x98, 0x13, 0xab, 0x32, 0xb9, 0x2a, 0x14, 0x9d, 0x15, 0x99, 0x4a, - 0xa0, 0x05, 0x0c, 0xaa, 0x15, 0x39, 0xb8, 0x1b, 0xa0, 0xc0, 0x72, 0x98, 0x01, 0x19, 0xb3, 0x6c, - 0xc2, 0x19, 0x19, 0xc0, 0x18, 0x21, 0xf8, 0x68, 0x88, 0xa8, 0x20, 0x98, 0x20, 0x19, 0xa5, 0x1b, - 0x30, 0xfb, 0x32, 0xab, 0x02, 0x08, 0xf9, 0x78, 0xa8, 0x01, 0x19, 0x11, 0xa8, 0x41, 0xda, 0x09, - 0x03, 0x1a, 0x82, 0x8d, 0x05, 0x0c, 0xa1, 0x21, 0x1d, 0xa3, 0x98, 0x33, 0x0f, 0xa2, 0xa8, 0x70, - 0xc1, 0x49, 0x91, 0xb9, 0x48, 0x91, 0x0c, 0x85, 0x18, 0x8c, 0x91, 0x02, 0x2c, 0x91, 0x18, 0x18, - 0x12, 0xbf, 0x16, 0x8b, 0x13, 0xba, 0x3c, 0xa3, 0x28, 0x0b, 0xa9, 0x87, 0x2e, 0x03, 0x1a, 0xba, - 0x16, 0x0d, 0x95, 0x1c, 0xa2, 0x28, 0x08, 0xb1, 0x88, 0x1c, 0x17, 0xbb, 0x04, 0x19, 0x88, 0xa4, - 0x1d, 0x92, 0x09, 0x02, 0x88, 0x29, 0xbb, 0x36, 0xe8, 0x19, 0x03, 0x1c, 0xc1, 0x82, 0x3c, 0x90, - 0x25, 0xbb, 0x82, 0x0d, 0x04, 0x1b, 0x90, 0x44, 0x9f, 0x84, 0x1c, 0x81, 0x18, 0x80, 0x90, 0x4c, - 0xd2, 0x49, 0x90, 0x08, 0x81, 0xa9, 0x31, 0xb8, 0x2c, 0xc4, 0x4a, 0x92, 0x08, 0x02, 0x9c, 0x12, - 0x8b, 0x01, 0x18, 0x82, 0x60, 0xbe, 0x05, 0x1b, 0xc1, 0x12, 0x89, 0x89, 0x53, 0xf8, 0x59, 0xa0, - 0x20, 0x9a, 0x82, 0x49, 0xea, 0x32, 0xc9, 0x10, 0x11, 0x88, 0x08, 0x9d, 0x24, 0x9d, 0x14, 0x8a, - 0x08, 0x83, 0x1c, 0xc2, 0x2a, 0x23, 0xca, 0x81, 0x08, 0x5a, 0xf1, 0x30, 0x9b, 0x04, 0xa8, 0x04, - 0x0e, 0x93, 0x00, 0x0a, 0xb1, 0x5b, 0xa2, 0x2a, 0x81, 0x91, 0x8e, 0x05, 0x1d, 0x93, 0x2a, 0xc1, - 0x38, 0x81, 0xaa, 0x49, 0xb5, 0x1a, 0xb0, 0x1a, 0x84, 0x79, 0xb2, 0x1b, 0xa8, 0x25, 0x2c, 0xd4, - 0x28, 0x98, 0x88, 0xb3, 0x20, 0x1f, 0x94, 0x98, 0x9a, 0x21, 0xa2, 0x79, 0xc0, 0x22, 0x9c, 0x04, - 0x89, 0xa8, 0x48, 0xa4, 0x19, 0x8d, 0x93, 0x1a, 0x88, 0x14, 0xa0, 0x0f, 0x86, 0x09, 0x08, 0x90, - 0x01, 0xb8, 0x60, 0xb8, 0x8b, 0x07, 0x19, 0xa8, 0x08, 0x81, 0x38, 0x0c, 0x87, 0x1b, 0xa1, 0x20, - 0xe8, 0x48, 0x89, 0x03, 0x9c, 0x13, 0xaa, 0x4b, 0x14, 0xe8, 0x59, 0xb0, 0x00, 0x88, 0x31, 0xa8, - 0x1c, 0x02, 0xc0, 0x34, 0xaf, 0x03, 0x09, 0x00, 0x80, 0xc0, 0x6b, 0xb2, 0x3a, 0xe1, 0x42, 0x0b, - 0xa2, 0x0a, 0xa2, 0x7b, 0xa1, 0x01, 0x2b, 0xf0, 0x28, 0x81, 0x2b, 0x95, 0x0a, 0x88, 0x20, 0xb8, - 0x15, 0x8f, 0x04, 0x8a, 0x82, 0x1a, 0x99, 0x12, 0xb0, 0x58, 0xcb, 0x05, 0x2c, 0x08, 0x83, 0xca, - 0x61, 0xa9, 0x14, 0xab, 0x02, 0x09, 0xae, 0x16, 0x9a, 0x13, 0x8c, 0x83, 0x19, 0x1a, 0xa1, 0x2c, - 0x05, 0x98, 0x29, 0xcb, 0x43, 0x8a, 0xe8, 0x41, 0xa0, 0x49, 0xa2, 0xab, 0x28, 0xa4, 0x6d, 0xc1, - 0x31, 0x0c, 0x81, 0x8a, 0x84, 0x0c, 0x01, 0x80, 0xc8, 0x31, 0x8b, 0x97, 0x1b, 0x15, 0x9a, 0x80, - 0x10, 0xac, 0x15, 0x0b, 0xa3, 0x0d, 0x22, 0xd8, 0x10, 0x09, 0x20, 0x09, 0xa1, 0x27, 0x9c, 0x12, - 0xba, 0xa4, 0x2d, 0x93, 0x29, 0xf9, 0x78, 0x99, 0x81, 0x01, 0xa8, 0x5a, 0xb3, 0x3b, 0x89, 0x91, - 0x60, 0xd0, 0x48, 0xaa, 0x12, 0xa8, 0x1a, 0x15, 0x9c, 0x14, 0xb9, 0x38, 0xa8, 0x10, 0xa4, 0x48, - 0xc8, 0x2b, 0xc4, 0x38, 0x21, 0xda, 0x11, 0xaa, 0x3a, 0xb4, 0x51, 0x99, 0xa2, 0x1b, 0x21, 0x06, - 0x8f, 0x84, 0x1a, 0x92, 0x3c, 0xd9, 0x82, 0x4c, 0xb3, 0x4b, 0xc2, 0x29, 0x08, 0x88, 0x50, 0xc1, - 0x10, 0x1a, 0xd2, 0x00, 0x0b, 0x83, 0x80, 0xb1, 0x3c, 0xba, 0x91, 0x77, 0x98, 0x2a, 0xa2, 0x8a, - 0x15, 0x1d, 0xc1, 0x00, 0x30, 0xca, 0x20, 0xc2, 0x5a, 0xc0, 0x38, 0x93, 0xda, 0x68, 0xa0, 0x11, - 0x08, 0x98, 0xaa, 0x22, 0x83, 0x0f, 0x91, 0x88, 0x81, 0x48, 0xcc, 0x42, 0x80, 0x91, 0x5a, 0xeb, - 0x15, 0x99, 0x19, 0x82, 0xc9, 0x51, 0xaa, 0x03, 0x0e, 0x13, 0xaa, 0x20, 0x90, 0x29, 0x12, 0xae, - 0x05, 0xa9, 0x7a, 0xa1, 0x88, 0x18, 0x29, 0xc2, 0x38, 0xc1, 0x0c, 0x10, 0x83, 0x08, 0xdb, 0x51, - 0x88, 0xb3, 0x78, 0xac, 0x13, 0x0a, 0x93, 0x0d, 0x03, 0x91, 0x2f, 0xc1, 0x18, 0x03, 0x0c, 0x80, - 0x98, 0x51, 0xb0, 0x49, 0xc9, 0x42, 0xa9, 0x28, 0x99, 0xc4, 0x78, 0xa8, 0x09, 0x94, 0x08, 0x1a, - 0xa4, 0x29, 0xc8, 0x32, 0x8e, 0x94, 0x89, 0x21, 0xaa, 0x01, 0x33, 0x1b, 0xe8, 0x91, 0x00, 0x8f, - 0x35, 0xe9, 0x20, 0xb9, 0x40, 0xa1, 0x08, 0x22, 0xcd, 0x23, 0x8a, 0x04, 0x9b, 0x12, 0xc9, 0x29, - 0x93, 0x1f, 0xa5, 0x19, 0x90, 0x1a, 0x92, 0x07, 0x1c, 0x90, 0x82, 0x90, 0x0a, 0x00, 0xc1, 0x21, - 0x8b, 0x8b, 0x12, 0x27, 0xca, 0x5b, 0xb0, 0x33, 0x10, 0xbf, 0x06, 0x2b, 0x82, 0xa9, 0x38, 0xf8, - 0x29, 0x91, 0x69, 0xb0, 0x82, 0x2c, 0xb0, 0x35, 0xab, 0x48, 0xc8, 0x31, 0x08, 0x9a, 0x98, 0x02, - 0x97, 0x1e, 0xb2, 0x19, 0x81, 0x89, 0x33, 0xb2, 0x2c, 0xc9, 0x70, 0xc2, 0x28, 0x99, 0xc2, 0x70, - 0xc0, 0x39, 0xa8, 0x92, 0x49, 0xb1, 0x39, 0xab, 0x94, 0x51, 0x8a, 0x00, 0xb0, 0x11, 0x4c, 0x98, - 0x86, 0x9c, 0x33, 0xdb, 0x30, 0x88, 0x90, 0x99, 0xa0, 0x27, 0x8c, 0x20, 0xa2, 0x1b, 0x17, 0x8e, - 0x93, 0x19, 0x81, 0xc0, 0x49, 0xf3, 0x2a, 0x81, 0x80, 0x81, 0x88, 0x6b, 0xe2, 0x28, 0xa1, 0x20, - 0x89, 0xa5, 0x2b, 0xa9, 0x22, 0x99, 0x98, 0x2d, 0x01, 0xa6, 0x11, 0x1d, 0xb1, 0x04, 0x2a, 0x9a, - 0x13, 0xb8, 0x93, 0x4e, 0xe8, 0x38, 0xa8, 0x12, 0x5b, 0xe1, 0x20, 0x0c, 0x04, 0x8a, 0x91, 0x48, - 0xaa, 0x06, 0x8c, 0x82, 0x1a, 0x80, 0x82, 0xb2, 0x3e, 0x98, 0xe3, 0x58, 0x98, 0x11, 0xb0, 0x28, - 0x1b, 0xda, 0x27, 0xaa, 0x11, 0x9a, 0x81, 0x02, 0x0d, 0x04, 0xaa, 0x85, 0x1c, 0x91, 0x11, 0x8a, - 0x96, 0x2c, 0xa1, 0x91, 0x38, 0x99, 0x10, 0xd9, 0x52, 0x1b, 0x82, 0xc0, 0x19, 0x3e, 0xd3, 0x01, - 0x99, 0x20, 0x8c, 0x07, 0x1b, 0x91, 0x80, 0x09, 0x95, 0x2e, 0x93, 0x0a, 0x01, 0xda, 0x48, 0xb0, - 0x30, 0x90, 0x1a, 0x13, 0xad, 0x27, 0x9b, 0x38, 0xb3, 0x89, 0x2f, 0xe1, 0x21, 0x98, 0x20, 0xb9, - 0x88, 0x40, 0x80, 0x41, 0xf8, 0x28, 0x99, 0x02, 0x05, 0xbb, 0x50, 0xa9, 0xa1, 0x5a, 0x9a, 0x06, - 0x0a, 0x13, 0xbc, 0x28, 0x12, 0x0b, 0x86, 0x8a, 0x82, 0xdc, 0x51, 0x89, 0xa0, 0x22, 0x1a, 0x81, - 0x9f, 0x05, 0x2a, 0xb9, 0x23, 0x80, 0x0c, 0x22, 0xcd, 0x82, 0x59, 0x90, 0x10, 0xa8, 0x80, 0x1f, - 0x95, 0x10, 0x08, 0xba, 0x02, 0x0b, 0x28, 0xa3, 0x5a, 0xb2, 0x92, 0x8f, 0x10, 0x12, 0x84, 0x2f, - 0xb9, 0x84, 0x2b, 0x80, 0x00, 0xaa, 0x87, 0x4e, 0xb1, 0x29, 0xa3, 0x1b, 0x32, 0xe0, 0x39, 0xc1, - 0x3a, 0xd3, 0x1c, 0x23, 0xb9, 0x21, 0xea, 0x30, 0x80, 0x38, 0x95, 0x9c, 0x40, 0xb8, 0x00, 0x99, - 0x34, 0x9d, 0xa2, 0x03, 0x2e, 0xe1, 0x50, 0xb9, 0x21, 0x10, 0xc1, 0x39, 0xc9, 0x22, 0xab, 0x05, - 0x29, 0xab, 0xa4, 0x2a, 0x52, 0xbb, 0x24, 0xe8, 0x4a, 0x80, 0x90, 0x11, 0xe8, 0x50, 0xa9, 0x84, - 0x88, 0x89, 0x91, 0x98, 0x22, 0x38, 0x8d, 0xa6, 0x2c, 0xa4, 0x2b, 0x81, 0x04, 0x8f, 0x11, 0xa8, - 0x11, 0x18, 0xb8, 0x09, 0x18, 0x17, 0x8c, 0x20, 0xe0, 0x20, 0x88, 0x18, 0xa2, 0x1c, 0x23, 0xaf, - 0x32, 0x90, 0x89, 0xf2, 0x4b, 0x92, 0x18, 0x13, 0xfb, 0x41, 0xc9, 0x20, 0xa8, 0x10, 0x12, 0x9d, - 0x14, 0x9b, 0x20, 0xc0, 0x08, 0x22, 0x0a, 0x05, 0x0d, 0xb3, 0x0a, 0x8a, 0x07, 0x19, 0xa1, 0x3c, - 0xf1, 0x30, 0x89, 0x13, 0x8c, 0x91, 0x09, 0x98, 0x53, 0xab, 0x86, 0x1d, 0x98, 0x11, 0x10, 0x88, - 0x11, 0xe8, 0x68, 0xb0, 0x89, 0x20, 0xa1, 0x11, 0x80, 0xd8, 0x1d, 0x31, 0xf8, 0x21, 0x30, 0xaa, - 0x83, 0x9f, 0x13, 0x3a, 0xb0, 0x22, 0xaf, 0x92, 0x28, 0x99, 0x06, 0x1b, 0xa6, 0x2c, 0xa2, 0x19, - 0x00, 0x91, 0x3b, 0xc3, 0x3a, 0x92, 0xf0, 0x7a, 0x98, 0x10, 0x92, 0x8d, 0x92, 0x40, 0xab, 0x86, - 0x3a, 0xd9, 0x12, 0x89, 0xa1, 0x78, 0xd0, 0x20, 0x88, 0x92, 0x3a, 0xc0, 0x21, 0xba, 0x00, 0x18, - 0x93, 0x3c, 0xf1, 0x28, 0x2a, 0x85, 0x28, 0xfc, 0x43, 0xba, 0x82, 0x28, 0x00, 0xa0, 0x9f, 0x83, - 0x88, 0x60, 0x98, 0xb0, 0x58, 0xb1, 0x10, 0x1b, 0x84, 0x09, 0xa1, 0x10, 0xbf, 0x05, 0x1a, 0xa8, - 0x05, 0x2c, 0xa3, 0x1c, 0x81, 0x18, 0x0c, 0x06, 0x29, 0xe8, 0x28, 0xa8, 0x28, 0x82, 0x88, 0x9a, - 0x90, 0x14, 0x00, 0x8d, 0x05, 0x19, 0x0a, 0xa5, 0x8b, 0x51, 0xa0, 0xb1, 0x1c, 0x94, 0x0a, 0x38, - 0xb8, 0x53, 0xb0, 0x8f, 0x85, 0x1a, 0x82, 0x30, 0xfb, 0x48, 0xa2, 0x8b, 0x49, 0xc3, 0x2a, 0x38, - 0xc1, 0x3a, 0xe1, 0x20, 0x9a, 0x03, 0x08, 0x12, 0xba, 0x11, 0x95, 0x0f, 0x22, 0xf3, 0x4b, 0xa1, - 0x89, 0x21, 0xbc, 0x25, 0x8b, 0x10, 0x92, 0x3b, 0x21, 0xd2, 0x19, 0x9d, 0x07, 0x9a, 0x19, 0x85, - 0xaa, 0x62, 0xb8, 0x09, 0x11, 0x8b, 0x06, 0x9a, 0x11, 0xa8, 0x41, 0xaa, 0x24, 0xea, 0x21, 0x9b, - 0x93, 0x49, 0x89, 0x88, 0x27, 0xbb, 0x1a, 0x21, 0x09, 0x07, 0x0e, 0x88, 0x92, 0x29, 0x13, 0x8a, - 0x96, 0x8c, 0x09, 0x08, 0xa1, 0x61, 0xc9, 0x25, 0x9b, 0x13, 0xdb, 0x49, 0x95, 0xaa, 0x41, 0xd9, - 0x21, 0xa0, 0x0a, 0x24, 0x19, 0x99, 0xd1, 0x3a, 0xa8, 0x50, 0x95, 0x8b, 0x13, 0xf9, 0x49, 0xa0, - 0x20, 0xa1, 0x0b, 0x01, 0xaa, 0x65, 0xa8, 0x18, 0xb8, 0x32, 0xac, 0x28, 0x82, 0xc8, 0x3b, 0x07, - 0x22, 0x9f, 0x01, 0x8a, 0x01, 0x42, 0xc0, 0x8b, 0x38, 0xc5, 0x19, 0x01, 0x81, 0x29, 0xbd, 0x92, - 0x61, 0x00, 0x98, 0x81, 0x8c, 0x11, 0x90, 0x28, 0x9b, 0xa1, 0x20, 0x1d, 0x07, 0x8d, 0x14, 0x8e, - 0x94, 0x38, 0xa9, 0xa5, 0x1c, 0x02, 0xba, 0x15, 0x1a, 0x88, 0xc4, 0x2c, 0x92, 0x19, 0x01, 0xb9, - 0x53, 0x89, 0x19, 0xc3, 0x3a, 0x93, 0xbf, 0x15, 0x08, 0x9a, 0xc2, 0x59, 0x81, 0x18, 0xa0, 0x98, - 0x6b, 0xb8, 0x21, 0xa9, 0x81, 0x71, 0xc1, 0x18, 0x90, 0x8a, 0x24, 0xb8, 0x30, 0xac, 0x96, 0x4a, - 0xec, 0x33, 0x8b, 0x04, 0x89, 0x88, 0x09, 0xa8, 0x46, 0xaa, 0x21, 0xcb, 0x28, 0x81, 0x1c, 0x86, - 0xa9, 0x33, 0x8d, 0x80, 0x82, 0x1a, 0xa2, 0x3b, 0xc2, 0x51, 0xd9, 0x21, 0x0b, 0xc4, 0x4a, 0x10, - 0xc3, 0x0e, 0x13, 0xab, 0x22, 0x00, 0xd0, 0x58, 0x8b, 0xa6, 0x1b, 0x22, 0xd9, 0x20, 0x92, 0x3c, - 0xc1, 0x38, 0x90, 0xaa, 0x6a, 0xb4, 0x39, 0x80, 0x08, 0xc1, 0x19, 0x58, 0xf8, 0x11, 0x1a, 0xa1, - 0x18, 0xa4, 0x2a, 0xb1, 0x63, 0xcb, 0x90, 0x22, 0x39, 0x9a, 0x87, 0x1f, 0x00, 0xa0, 0x10, 0x01, - 0x8d, 0x23, 0xc9, 0x5a, 0xb1, 0x49, 0x80, 0xa0, 0x59, 0xfa, 0x52, 0x9b, 0x13, 0x98, 0x8a, 0x22, - 0xbd, 0x25, 0x9b, 0x11, 0x91, 0x19, 0x0a, 0xc2, 0x60, 0xb8, 0x41, 0xc9, 0x20, 0x90, 0x1a, 0x18, - 0xb3, 0x3a, 0x38, 0xfa, 0x70, 0xb8, 0x28, 0xa4, 0x3c, 0xa2, 0xae, 0x34, 0x9a, 0x28, 0xb3, 0x0c, - 0x85, 0x1d, 0x02, 0x89, 0x22, 0x9c, 0x1b, 0xa5, 0x2a, 0x02, 0xd9, 0x50, 0x98, 0x88, 0x12, 0x9b, - 0x92, 0x60, 0xc9, 0x04, 0x1a, 0x80, 0x0b, 0xa0, 0x86, 0x2e, 0x80, 0x81, 0x00, 0xca, 0x78, 0xb1, - 0x10, 0x82, 0xad, 0x30, 0xc1, 0x70, 0xa8, 0x08, 0xa1, 0x38, 0xa1, 0x1a, 0x31, 0xf1, 0x6b, 0xc0, - 0x48, 0x98, 0x81, 0x3a, 0xd1, 0x10, 0x89, 0x12, 0xba, 0x15, 0x99, 0x2c, 0xb1, 0x20, 0x14, 0xac, - 0x28, 0xb0, 0x26, 0x8d, 0x02, 0x90, 0x8c, 0x12, 0x0c, 0x07, 0x98, 0x19, 0xe0, 0x40, 0x98, 0x91, - 0x19, 0xa1, 0x31, 0x9f, 0x24, 0xab, 0x03, 0x0a, 0x11, 0x99, 0xc0, 0x3a, 0x09, 0x07, 0x80, 0xca, - 0x40, 0x01, 0x9b, 0x96, 0x2d, 0x91, 0x82, 0x2c, 0xd0, 0x40, 0xa1, 0x4a, 0xc1, 0x89, 0x12, 0x8a, - 0x12, 0xd0, 0x4b, 0x95, 0x1b, 0x81, 0x89, 0x11, 0x00, 0x1a, 0xe6, 0x6a, 0x98, 0x88, 0x21, 0xaa, - 0x30, 0x90, 0x0a, 0x34, 0xbf, 0x22, 0xa2, 0x0c, 0x24, 0xbb, 0x85, 0x90, 0x2a, 0xd0, 0x58, 0xa1, - 0x0a, 0x22, 0xfa, 0x31, 0xc9, 0x30, 0x82, 0x9a, 0x71, 0xd9, 0x10, 0x08, 0x80, 0x11, 0x8a, 0xb5, - 0x2d, 0x08, 0xa3, 0x2a, 0x22, 0x9d, 0x93, 0x89, 0x62, 0xd8, 0x1a, 0x24, 0xf9, 0x21, 0x8b, 0x81, - 0x02, 0x0d, 0x14, 0xb9, 0x31, 0xab, 0x18, 0x98, 0x12, 0x05, 0x9f, 0x83, 0xa0, 0x5a, 0xa2, 0x8a, - 0x06, 0x0c, 0x20, 0xc4, 0x1b, 0x02, 0x8c, 0x20, 0x11, 0xd9, 0x22, 0x0a, 0xb2, 0x1d, 0x84, 0x2b, - 0x92, 0xb2, 0x5c, 0xb0, 0x0a, 0x14, 0xa9, 0x3a, 0x87, 0xaa, 0x39, 0x90, 0x21, 0xa6, 0x3c, 0x90, - 0xf2, 0x31, 0x9c, 0x84, 0x89, 0x19, 0x90, 0x09, 0x17, 0xbb, 0x13, 0x91, 0x1f, 0x94, 0x09, 0x02, - 0xab, 0x22, 0xba, 0x11, 0x4c, 0xa7, 0x0a, 0x80, 0xb2, 0x5b, 0xb5, 0x3a, 0xb1, 0x18, 0x05, 0x8d, - 0x03, 0xcb, 0x51, 0xb8, 0x58, 0xb3, 0x2e, 0xa2, 0x0b, 0x12, 0xb0, 0x58, 0xc0, 0x20, 0xb0, 0x4a, - 0xb4, 0x4b, 0x91, 0xa9, 0x78, 0xb1, 0x28, 0xc0, 0x4a, 0xc0, 0x12, 0x90, 0x39, 0xd2, 0x0a, 0x14, - 0xca, 0x50, 0xc1, 0x49, 0xc0, 0x30, 0xa9, 0x20, 0x98, 0x98, 0x14, 0xac, 0x34, 0xeb, 0x32, 0xc9, - 0x20, 0x80, 0x00, 0x80, 0x0d, 0x13, 0xaf, 0x25, 0xab, 0x23, 0xbb, 0x31, 0xa3, 0x1e, 0x83, 0xaa, - 0x31, 0xaa, 0x17, 0xdb, 0x22, 0xab, 0x12, 0x22, 0x8e, 0x04, 0x9b, 0x84, 0x2c, 0x81, 0xa0, 0x20, - 0xe8, 0x58, 0xa0, 0x18, 0xb3, 0x8e, 0x12, 0x99, 0x13, 0x00, 0x1c, 0xb2, 0x7a, 0xc0, 0x49, 0xa1, - 0x0b, 0x33, 0x9e, 0x22, 0x99, 0x30, 0x9a, 0xb9, 0x20, 0x65, 0xba, 0x21, 0x98, 0xb8, 0x71, 0xf0, - 0x11, 0x98, 0x18, 0xa8, 0x31, 0xa1, 0x4b, 0x02, 0xf9, 0x30, 0xd0, 0x39, 0xa1, 0xa9, 0x36, 0x9c, - 0x94, 0x19, 0x99, 0x91, 0x41, 0x88, 0x98, 0x2c, 0xb3, 0xa0, 0x78, 0xb2, 0x9b, 0x15, 0x8a, 0x83, - 0x8f, 0x14, 0x9a, 0x31, 0xf8, 0x4a, 0x91, 0x8a, 0x14, 0xac, 0x32, 0x91, 0x8a, 0x94, 0x2a, 0x98, - 0x2b, 0x87, 0xaa, 0x41, 0xa0, 0x0c, 0x03, 0x0c, 0x31, 0xf1, 0x19, 0x00, 0xc1, 0x70, 0xc1, 0x28, - 0x98, 0x80, 0x21, 0xc9, 0x10, 0xbb, 0x21, 0x04, 0x2f, 0xa4, 0x2a, 0x11, 0xda, 0x41, 0xe0, 0x28, - 0x90, 0x00, 0x10, 0x98, 0x89, 0x89, 0x93, 0x2a, 0x40, 0xe1, 0x41, 0xaa, 0x18, 0x04, 0x10, 0x9f, - 0x20, 0xa1, 0x1d, 0x84, 0x8b, 0x31, 0xe2, 0x2a, 0x94, 0x4b, 0xb2, 0x0a, 0x10, 0xaa, 0x24, 0xba, - 0x24, 0x2a, 0xf0, 0x78, 0xaa, 0x22, 0xc9, 0x20, 0x92, 0x1b, 0xa6, 0x09, 0x0a, 0x86, 0x8a, 0x21, - 0xc8, 0x38, 0xa0, 0x18, 0x30, 0x1c, 0x87, 0xad, 0x13, 0xab, 0x43, 0xa8, 0x2d, 0x85, 0x2b, 0xb3, - 0x1c, 0x91, 0x10, 0xa0, 0xa2, 0x5e, 0xb1, 0x4a, 0xb2, 0x1a, 0x80, 0x21, 0xe8, 0x69, 0xb2, 0x0a, - 0x01, 0x1a, 0x02, 0xd0, 0x58, 0xb0, 0x18, 0x20, 0xad, 0x93, 0x7a, 0x00, 0xd0, 0x49, 0xd1, 0x28, - 0x80, 0x92, 0x5a, 0xb9, 0x04, 0x9c, 0x41, 0xa8, 0x10, 0xa0, 0x4c, 0xc1, 0x21, 0xa1, 0x0a, 0x08, - 0xa0, 0x51, 0xa8, 0x03, 0xb9, 0x59, 0xf3, 0x3b, 0xa2, 0x30, 0x94, 0x9d, 0x10, 0xba, 0x15, 0x3b, - 0xa2, 0x94, 0x2d, 0xa3, 0x0e, 0x82, 0x88, 0x20, 0xc2, 0x58, 0xe9, 0x28, 0x81, 0x88, 0x08, 0x02, - 0x0a, 0xab, 0x64, 0xba, 0x12, 0x20, 0x1c, 0xf0, 0x58, 0x91, 0x0b, 0x93, 0xab, 0x53, 0x99, 0x22, - 0xfa, 0x20, 0x93, 0x0d, 0x12, 0xbb, 0x06, 0x9b, 0x13, 0x8b, 0x22, 0x98, 0xaa, 0x95, 0x48, 0x00, - 0xa8, 0x01, 0x81, 0xfe, 0x38, 0x01, 0xa0, 0x51, 0xda, 0x80, 0x01, 0x20, 0x01, 0x80, 0x91, 0xec, - 0x78, 0xb8, 0x29, 0x82, 0x0d, 0x24, 0x8b, 0x82, 0x8c, 0x19, 0xa7, 0x4a, 0x81, 0x00, 0xa9, 0xb1, - 0x3d, 0xa8, 0x14, 0x29, 0xb0, 0x3b, 0x95, 0x8a, 0x4b, 0xa1, 0x87, 0x0a, 0x83, 0xb9, 0x2f, 0xa7, - 0x19, 0x98, 0x18, 0x11, 0xa9, 0x30, 0xc8, 0x82, 0x78, 0xb8, 0x31, 0xda, 0x12, 0x18, 0xbd, 0x44, - 0xca, 0x41, 0x89, 0x90, 0x01, 0x8b, 0x12, 0xca, 0x53, 0xa0, 0x28, 0xa9, 0xa1, 0x38, 0xcb, 0x60, - 0xd2, 0x38, 0x11, 0xc8, 0x09, 0x81, 0x1a, 0xba, 0x42, 0x07, 0x0f, 0x81, 0x08, 0x90, 0x32, 0x0c, - 0x93, 0x0e, 0xa2, 0x0a, 0x12, 0xa4, 0x3e, 0xb2, 0x90, 0x21, 0xaa, 0x7c, 0xb0, 0xa2, 0x4a, 0x98, - 0x16, 0x99, 0x1a, 0xb1, 0xb1, 0x71, 0xe1, 0x28, 0xa0, 0x4a, 0xb5, 0x1b, 0x03, 0xaa, 0x60, 0xc1, - 0x39, 0xc1, 0x28, 0x92, 0xab, 0x06, 0x0b, 0x02, 0xa8, 0x1b, 0xa3, 0x78, 0x92, 0x9b, 0x98, 0x34, - 0x1a, 0xd2, 0x2b, 0xa9, 0x02, 0x17, 0x1a, 0xad, 0x24, 0xa9, 0x18, 0x0b, 0x22, 0x87, 0x0e, 0x03, - 0xbb, 0x41, 0xc2, 0x2a, 0xb2, 0x3a, 0xa3, 0x98, 0x7a, 0xf2, 0x58, 0xa8, 0x18, 0x88, 0x08, 0x01, - 0x09, 0xa2, 0x20, 0x9f, 0x22, 0x92, 0xae, 0x53, 0x99, 0x18, 0xa2, 0x2a, 0xa8, 0x93, 0x01, 0x9f, - 0x05, 0xb9, 0x30, 0xb9, 0x25, 0x0a, 0xe3, 0x68, 0xc9, 0x41, 0xa9, 0x01, 0x09, 0xa1, 0x08, 0xa8, - 0x71, 0xa8, 0x92, 0xb0, 0x79, 0x90, 0x20, 0x98, 0xd2, 0x4c, 0xb2, 0x00, 0x0b, 0x04, 0x8b, 0x87, - 0x8c, 0x81, 0x18, 0x21, 0x80, 0x9b, 0x07, 0x8c, 0x94, 0x2c, 0xb3, 0x00, 0x8a, 0x82, 0x4b, 0xd3, - 0x38, 0xb9, 0x12, 0x2e, 0x92, 0x01, 0x1f, 0xa3, 0x09, 0x2a, 0x94, 0x18, 0xe8, 0x38, 0xb8, 0x82, - 0x3d, 0x14, 0xba, 0x28, 0x92, 0x99, 0x7a, 0xc3, 0x8a, 0x11, 0x01, 0x9d, 0x12, 0x00, 0x81, 0x98, - 0x3f, 0xc5, 0x39, 0x9a, 0x14, 0x9e, 0x84, 0x38, 0xca, 0x21, 0x88, 0x8a, 0x15, 0xaa, 0x10, 0x09, - 0x03, 0x90, 0x0b, 0x89, 0x87, 0xba, 0x28, 0x9a, 0x33, 0x77, 0xdb, 0x11, 0x09, 0x23, 0xba, 0x21, - 0xbc, 0x23, 0xaa, 0x86, 0x1a, 0xdb, 0x26, 0xbb, 0x32, 0x9b, 0x07, 0x1a, 0x80, 0xc8, 0x30, 0x81, - 0xaa, 0x22, 0xf8, 0x7a, 0x98, 0x00, 0x28, 0xb9, 0x53, 0xca, 0x21, 0x99, 0x00, 0x82, 0x39, 0xe9, - 0x11, 0x3c, 0xf1, 0x48, 0xa8, 0x21, 0xb9, 0x04, 0x9b, 0x15, 0xb9, 0x02, 0x4b, 0xe9, 0x32, 0x9c, - 0x33, 0xca, 0x12, 0x8a, 0x81, 0x89, 0x63, 0xa8, 0x8b, 0x05, 0x8e, 0x13, 0xaa, 0x30, 0xa2, 0x0b, - 0x23, 0xdf, 0x73, 0x99, 0x11, 0xab, 0x22, 0xa9, 0x80, 0x78, 0xba, 0x33, 0xaa, 0x82, 0x1c, 0x80, - 0x22, 0x21, 0xad, 0x07, 0x9c, 0x31, 0xb0, 0x1a, 0x91, 0x3c, 0xa4, 0x9c, 0x25, 0x9c, 0x14, 0xa9, - 0x10, 0x00, 0x1d, 0x87, 0x8c, 0x03, 0x0b, 0x91, 0x08, 0x29, 0xb6, 0x3b, 0xa3, 0x1a, 0x93, 0x1a, - 0x83, 0xcc, 0x5a, 0xb4, 0x28, 0x3b, 0xa5, 0x0b, 0x9a, 0x53, 0x1a, 0xa7, 0x1d, 0x91, 0x08, 0x38, - 0xb1, 0x2b, 0x14, 0x8c, 0xc2, 0x38, 0x92, 0x2c, 0x93, 0xe3, 0x3d, 0xa1, 0x18, 0xb1, 0x6a, 0xa9, - 0x04, 0x20, 0x8d, 0xd3, 0x29, 0x80, 0x22, 0x1a, 0xf2, 0x3b, 0xa4, 0x3a, 0x99, 0x83, 0x1a, 0xa2, - 0x20, 0xdf, 0x43, 0x89, 0x92, 0xab, 0x94, 0x58, 0x9a, 0x81, 0xb8, 0x54, 0x8a, 0x94, 0x8b, 0x39, - 0xd3, 0x2a, 0x96, 0x2c, 0xb8, 0x12, 0x39, 0xc2, 0x20, 0xa2, 0x2e, 0xa8, 0x00, 0x01, 0x0c, 0x07, - 0xaa, 0x01, 0x99, 0x12, 0x4a, 0x1a, 0xf3, 0x20, 0x09, 0x00, 0xb1, 0x2f, 0x05, 0x9a, 0x29, 0xd2, - 0x4b, 0xc1, 0x31, 0x99, 0x11, 0x0b, 0xb0, 0x01, 0x2a, 0x35, 0xa9, 0x20, 0xbe, 0xa1, 0x34, 0x78, - 0xf3, 0x18, 0xaa, 0x89, 0x25, 0xa8, 0x41, 0xba, 0x11, 0x8a, 0x19, 0xa6, 0x38, 0x49, 0xf1, 0x28, - 0xba, 0x42, 0xb8, 0x30, 0x08, 0xbb, 0x17, 0xac, 0x22, 0x81, 0x19, 0xa2, 0x09, 0xbc, 0x53, 0x01, - 0xca, 0x71, 0xc9, 0x11, 0x08, 0xab, 0x64, 0xa0, 0x0a, 0xa1, 0x8a, 0x33, 0x91, 0x88, 0x00, 0x1e, - 0xa7, 0x3a, 0x98, 0x91, 0x21, 0x09, 0xba, 0xf0, 0x6a, 0x20, 0xb8, 0x20, 0x08, 0xab, 0x87, 0x0c, - 0x11, 0x08, 0x05, 0x8b, 0xd0, 0x41, 0x99, 0xc8, 0x40, 0xa2, 0x3b, 0xb3, 0xaa, 0x41, 0x59, 0xf1, - 0x20, 0x9a, 0x93, 0x49, 0xc1, 0x19, 0xa2, 0x18, 0x2c, 0xa5, 0x2b, 0x82, 0xba, 0x15, 0x29, 0x9f, - 0x94, 0x39, 0xa1, 0x3a, 0xc4, 0x4b, 0xb2, 0x0a, 0x3a, 0x97, 0x3a, 0x89, 0xb9, 0x40, 0x83, 0x0f, - 0x83, 0x09, 0x12, 0xbb, 0x29, 0x87, 0xbb, 0x32, 0xb0, 0x14, 0x0e, 0xb4, 0x2c, 0xa2, 0x42, 0xbc, - 0x63, 0xb9, 0x91, 0x51, 0x9c, 0x03, 0x98, 0x5b, 0xc0, 0x21, 0x89, 0x91, 0x20, 0xdb, 0x33, 0xca, - 0x63, 0xba, 0x81, 0x20, 0x9b, 0x16, 0xd0, 0x5b, 0xa2, 0x1a, 0x92, 0x99, 0x40, 0xc0, 0x30, 0xe0, - 0x28, 0x81, 0x09, 0x91, 0x9c, 0x42, 0xb3, 0x2a, 0xa2, 0x0f, 0x91, 0x13, 0x2d, 0xc2, 0x19, 0x02, - 0x8a, 0xa9, 0x06, 0x0a, 0x08, 0x2a, 0xf3, 0x38, 0x01, 0xb1, 0x2c, 0x84, 0x99, 0x01, 0xbe, 0x13, - 0x90, 0x4e, 0x85, 0x9b, 0x28, 0x89, 0x82, 0x08, 0x63, 0xe8, 0x29, 0xa2, 0x89, 0x12, 0x10, 0x9a, - 0xf4, 0x3b, 0x19, 0xb7, 0x18, 0x30, 0xca, 0x12, 0x09, 0x10, 0xc0, 0x1b, 0x23, 0x9e, 0x25, 0xaa, - 0x89, 0x08, 0x44, 0xb9, 0xb8, 0x70, 0xe8, 0x12, 0x10, 0xc0, 0x28, 0x88, 0x89, 0x81, 0x1a, 0x03, - 0xcb, 0x74, 0xb9, 0x99, 0x04, 0x20, 0xa2, 0x9d, 0x31, 0xf9, 0x51, 0xa8, 0x18, 0x28, 0x9c, 0x05, - 0xac, 0x24, 0x8b, 0x84, 0x0a, 0x19, 0xb3, 0x1c, 0x04, 0xdb, 0x43, 0x9a, 0x92, 0x1a, 0x84, 0x1b, - 0xc3, 0x68, 0xb9, 0x20, 0x8c, 0x96, 0x4a, 0xb0, 0x18, 0x81, 0x88, 0x29, 0xb2, 0x49, 0xa6, 0x2f, - 0xc2, 0x28, 0x00, 0x88, 0x1b, 0xa4, 0x2a, 0xb2, 0x8b, 0x23, 0x2b, 0x97, 0x19, 0x11, 0xbc, 0x51, - 0xc0, 0x1a, 0x86, 0x2a, 0xd2, 0x29, 0xb8, 0x80, 0x73, 0xc9, 0x21, 0xa8, 0x49, 0xe2, 0x38, 0x90, - 0x88, 0x20, 0xd9, 0x31, 0xc9, 0x50, 0xc8, 0x10, 0x81, 0x8b, 0x86, 0x0a, 0x12, 0xaa, 0x10, 0x83, - 0x2c, 0xd1, 0x48, 0x99, 0x91, 0x38, 0xce, 0x17, 0x8a, 0x81, 0x8a, 0x03, 0x08, 0x09, 0xc1, 0x2a, - 0x06, 0x8c, 0x04, 0xac, 0x33, 0xba, 0x18, 0x13, 0x1e, 0xa5, 0x3c, 0xb1, 0x29, 0x22, 0xab, 0x12, - 0xe8, 0x3a, 0x01, 0x0a, 0x13, 0x8f, 0x87, 0x1c, 0x91, 0x29, 0x90, 0x21, 0x9b, 0xb3, 0x7a, 0xb0, - 0x18, 0x92, 0x1c, 0x92, 0x00, 0x32, 0xbe, 0x21, 0xd4, 0x6c, 0xa1, 0x2a, 0x81, 0x0a, 0x21, 0xc0, - 0x0c, 0x01, 0x10, 0x90, 0x78, 0xc2, 0x2a, 0x90, 0x90, 0x19, 0x81, 0x03, 0x9c, 0x33, 0xcf, 0x84, - 0x3b, 0x93, 0x93, 0x1f, 0xd3, 0x29, 0x91, 0x89, 0x13, 0x0c, 0x43, 0xd9, 0x0a, 0x84, 0x2d, 0x83, - 0x9b, 0x04, 0xaa, 0x58, 0xd3, 0x2b, 0x12, 0xaa, 0x24, 0xab, 0x91, 0x4a, 0x83, 0x90, 0xaf, 0x15, - 0x2a, 0xe2, 0x28, 0xba, 0x23, 0x00, 0x88, 0x99, 0x39, 0x07, 0xb8, 0x2b, 0xa2, 0x3a, 0xf1, 0x70, - 0xb8, 0x30, 0x82, 0x9e, 0x88, 0x21, 0x90, 0x50, 0x98, 0xf1, 0x30, 0xa8, 0x00, 0x08, 0x30, 0xca, - 0x84, 0x2b, 0xaa, 0x84, 0x2a, 0x14, 0xdc, 0x41, 0x91, 0x09, 0x88, 0xa0, 0x6a, 0xc2, 0x60, 0xd9, - 0x28, 0x88, 0xa3, 0x18, 0x08, 0xa8, 0x10, 0x23, 0x9d, 0x01, 0xa1, 0x03, 0xff, 0x05, 0x88, 0x18, - 0xb0, 0x2c, 0x94, 0x2a, 0x91, 0x8a, 0x24, 0xac, 0x84, 0x8c, 0x13, 0x01, 0x9b, 0x96, 0x1e, 0x82, - 0x08, 0x88, 0x80, 0x01, 0x98, 0x28, 0xe9, 0x29, 0x43, 0xca, 0xa1, 0x59, 0x01, 0xc0, 0x49, 0xb0, - 0x41, 0x9d, 0x85, 0x89, 0x3a, 0xa4, 0x9a, 0x14, 0x0d, 0xa1, 0x81, 0x78, 0xb0, 0x09, 0x82, 0x38, - 0xc9, 0x28, 0x04, 0x9d, 0x24, 0xbd, 0x30, 0x01, 0x08, 0xb1, 0x2a, 0x85, 0x8c, 0x03, 0x8d, 0x13, - 0xc1, 0x69, 0xb8, 0x8a, 0x15, 0x99, 0x80, 0xa2, 0x3a, 0xa0, 0x62, 0xe2, 0x3a, 0x80, 0x90, 0x88, - 0x90, 0x6a, 0xb2, 0x18, 0xab, 0x85, 0x4b, 0x94, 0x8b, 0x22, 0x8b, 0xa0, 0x07, 0x8e, 0x14, 0x8c, - 0x93, 0x0b, 0x12, 0xa8, 0x4b, 0xa4, 0x2b, 0x83, 0x00, 0x85, 0xaf, 0x04, 0x90, 0x8c, 0x13, 0x89, - 0xc1, 0x7a, 0xb1, 0x18, 0x21, 0x08, 0x8c, 0xc1, 0x50, 0x99, 0x90, 0x43, 0x9d, 0xb1, 0x40, 0x90, - 0x98, 0x52, 0xc0, 0x3a, 0xb2, 0x22, 0xad, 0x04, 0x0a, 0x98, 0x01, 0x40, 0x9c, 0xf2, 0x61, 0xa9, - 0x00, 0x81, 0x18, 0x2a, 0xa4, 0x01, 0xaf, 0x83, 0x88, 0x28, 0xb3, 0x3d, 0xb3, 0x0a, 0x63, 0xea, - 0x30, 0x81, 0x9b, 0x82, 0x11, 0x9a, 0x98, 0x42, 0x88, 0x2d, 0xc7, 0x59, 0xc9, 0x22, 0x8a, 0x92, - 0x19, 0x02, 0xa9, 0x5b, 0xb3, 0x0b, 0x23, 0xe8, 0x3c, 0xb0, 0x36, 0xaa, 0x08, 0xa0, 0x28, 0x18, - 0x00, 0x17, 0xbf, 0x42, 0x98, 0x99, 0x33, 0xa9, 0x94, 0x0e, 0x01, 0xc8, 0x51, 0x99, 0xa2, 0x10, - 0x18, 0xb3, 0x8f, 0x85, 0x1b, 0xa0, 0x03, 0x7b, 0xd2, 0x39, 0xa9, 0x13, 0x8b, 0x1a, 0x94, 0x89, - 0x24, 0x8b, 0xba, 0x36, 0x0b, 0xe9, 0x51, 0xa0, 0x10, 0x8b, 0xa0, 0x21, 0x81, 0x79, 0xf1, 0x28, - 0x90, 0x11, 0xac, 0x83, 0x48, 0xc8, 0x40, 0xba, 0x14, 0x1c, 0x12, 0xaa, 0x10, 0x18, 0x9c, 0x17, - 0x8d, 0x82, 0x89, 0x30, 0xc1, 0x58, 0xc9, 0x20, 0x83, 0x9d, 0x20, 0xa0, 0x40, 0x90, 0x00, 0xcb, - 0x20, 0x83, 0x3a, 0xc1, 0x0a, 0x06, 0x0d, 0x91, 0x11, 0x9d, 0x05, 0x09, 0xc1, 0x40, 0x80, 0xcb, - 0x18, 0x85, 0x28, 0xbb, 0x17, 0x8b, 0x01, 0x08, 0xb8, 0x00, 0x30, 0x13, 0xdf, 0x14, 0x9a, 0x18, - 0x08, 0x12, 0xa0, 0x1f, 0x94, 0x8b, 0x40, 0x83, 0xad, 0x11, 0x10, 0xc9, 0x41, 0x98, 0x98, 0x3a, - 0x42, 0xf0, 0x59, 0x98, 0x09, 0xc2, 0x48, 0x00, 0xc9, 0x33, 0xbb, 0x41, 0xc8, 0x20, 0xb2, 0x0e, - 0x03, 0x9a, 0x04, 0x1a, 0x30, 0xf9, 0x58, 0x09, 0x98, 0x10, 0x99, 0x1b, 0x10, 0xc2, 0x71, 0xa1, - 0x19, 0x10, 0xdc, 0x25, 0x8c, 0x80, 0x81, 0x3a, 0xb2, 0x19, 0xa0, 0x81, 0x79, 0xf1, 0x30, 0x98, - 0x08, 0x80, 0xd9, 0x30, 0x59, 0xc3, 0x8a, 0x02, 0x9a, 0x40, 0xc8, 0x23, 0x9d, 0x31, 0x85, 0xae, - 0x23, 0x0c, 0x01, 0x98, 0x30, 0xea, 0x50, 0xa1, 0x89, 0x21, 0xca, 0x22, 0xaa, 0x52, 0xba, 0x83, - 0x4a, 0xc0, 0x48, 0xa8, 0x84, 0x2f, 0xc3, 0x10, 0x99, 0x01, 0x98, 0x88, 0x14, 0xba, 0x63, 0xca, - 0x28, 0x96, 0x0b, 0x11, 0xa9, 0x68, 0xc2, 0x39, 0xd0, 0x29, 0x01, 0xa9, 0x52, 0xaa, 0x23, 0xba, - 0x48, 0xf2, 0x5b, 0x91, 0x08, 0x08, 0x81, 0x89, 0xca, 0x27, 0x0d, 0x83, 0x9a, 0x10, 0x88, 0x88, - 0x11, 0x0b, 0x87, 0x1a, 0x01, 0xbb, 0x14, 0x8c, 0x22, 0xf2, 0x4a, 0xa2, 0x0c, 0x84, 0x8a, 0x20, - 0xb0, 0x23, 0xbd, 0x71, 0xa8, 0x20, 0x93, 0x8f, 0x93, 0x89, 0x04, 0x8c, 0x10, 0xb1, 0x50, 0xc0, - 0x19, 0x82, 0x0a, 0x53, 0xbc, 0x04, 0x8b, 0x21, 0x92, 0x0c, 0xa2, 0x28, 0x08, 0x91, 0xe8, 0x2c, - 0x07, 0x2b, 0xc1, 0x18, 0x39, 0xd1, 0x30, 0xc0, 0x3a, 0x84, 0x0a, 0xb8, 0x0a, 0x73, 0xc0, 0x38, - 0xa1, 0x0e, 0x93, 0x1a, 0x01, 0x2a, 0xa5, 0x00, 0x4b, 0xc9, 0x32, 0xb0, 0x3c, 0xc1, 0x8c, 0x25, - 0x9b, 0x14, 0xba, 0x42, 0xc0, 0x59, 0xc0, 0x29, 0x02, 0x9b, 0x24, 0xfb, 0x40, 0x89, 0x80, 0x81, - 0x1c, 0x93, 0x0b, 0x13, 0x90, 0x7a, 0xb8, 0x10, 0x98, 0x8a, 0x49, 0xf3, 0x50, 0x80, 0xc1, 0x2a, - 0xb1, 0x5b, 0xa3, 0x8a, 0x52, 0xc8, 0x20, 0xc8, 0x1a, 0x05, 0x0c, 0x86, 0x8b, 0x11, 0xa0, 0x3a, - 0xb4, 0x2a, 0x80, 0x88, 0x17, 0x9c, 0x19, 0x81, 0x98, 0x42, 0x0b, 0xa3, 0x30, 0xca, 0x00, 0x8c, - 0x27, 0x9b, 0x81, 0x29, 0xc0, 0x92, 0x0f, 0x12, 0xa2, 0x7a, 0xa0, 0x8a, 0x11, 0x88, 0x31, 0xe2, - 0x4b, 0xb1, 0x09, 0x30, 0xba, 0x94, 0x2a, 0x31, 0xa1, 0xbf, 0x47, 0xbb, 0x13, 0x08, 0x8c, 0x83, - 0x20, 0xf8, 0x1a, 0x20, 0xc1, 0x38, 0x92, 0xc2, 0x5d, 0xb1, 0x82, 0x0d, 0x83, 0x2a, 0xb0, 0x68, - 0xa8, 0x01, 0x28, 0xea, 0x18, 0x11, 0x28, 0xd4, 0x3b, 0x94, 0x19, 0x9a, 0x90, 0x21, 0xf3, 0x59, - 0xaa, 0x02, 0x11, 0xa9, 0x81, 0x68, 0xd9, 0x12, 0x0b, 0x94, 0x4b, 0xf0, 0x51, 0xa8, 0x10, 0xa8, - 0x19, 0xa8, 0x29, 0x17, 0x9d, 0x23, 0x99, 0x88, 0x08, 0x10, 0x00, 0xaa, 0x16, 0x0f, 0x82, 0x88, - 0x88, 0x0a, 0x30, 0xb2, 0x03, 0x1e, 0x18, 0xb1, 0x32, 0x20, 0xcf, 0x14, 0x8b, 0x10, 0xb8, 0x11, - 0xc1, 0x3c, 0xc3, 0x20, 0x51, 0xb0, 0x80, 0xab, 0x91, 0x78, 0x90, 0xe1, 0x50, 0xb9, 0x28, 0x18, - 0x08, 0x94, 0x0f, 0x15, 0xaa, 0x22, 0xac, 0x20, 0x84, 0x9e, 0x05, 0x0c, 0x82, 0x19, 0x9a, 0x93, - 0x60, 0xa1, 0x0a, 0x92, 0x8a, 0xa8, 0x14, 0x19, 0x92, 0xb9, 0x84, 0x0f, 0xb2, 0x16, 0x9c, 0x62, - 0xa9, 0x91, 0x29, 0x99, 0x05, 0x0b, 0x12, 0xea, 0x58, 0xa0, 0x39, 0xb9, 0x31, 0x10, 0xd9, 0x71, - 0xc8, 0x01, 0x08, 0xa0, 0x08, 0x82, 0x18, 0xf0, 0x30, 0x89, 0xb3, 0x2d, 0x84, 0x1b, 0xa5, 0x39, - 0x9a, 0xf0, 0x50, 0xa0, 0x80, 0x10, 0xaa, 0x22, 0x1a, 0x96, 0x9c, 0x38, 0x12, 0xbb, 0x60, 0xb1, - 0x1c, 0x10, 0x83, 0x0d, 0x91, 0x52, 0xca, 0x21, 0x99, 0x89, 0x50, 0xc2, 0x59, 0xa8, 0x08, 0x80, - 0x8a, 0x28, 0xb5, 0x5a, 0x80, 0xa0, 0x12, 0x1b, 0xa8, 0x00, 0x04, 0xca, 0x8f, 0x07, 0xaa, 0x20, - 0x84, 0x0b, 0x21, 0x98, 0xd0, 0x38, 0x2a, 0xb6, 0x09, 0x01, 0x0b, 0xc2, 0x58, 0x92, 0x9f, 0x82, - 0x41, 0x0c, 0xa5, 0x29, 0xb9, 0x31, 0xc1, 0x12, 0x8e, 0x23, 0x98, 0x9e, 0x21, 0x00, 0x0a, 0x13, - 0xa0, 0xbe, 0x45, 0x9a, 0xa0, 0x41, 0xc0, 0x28, 0xa9, 0x15, 0x8b, 0x90, 0x21, 0x80, 0x8e, 0x03, - 0x99, 0x21, 0x08, 0xf1, 0x59, 0x0a, 0xb4, 0x5a, 0x91, 0x09, 0xd1, 0x3a, 0x98, 0x03, 0x94, 0x08, - 0x1f, 0xa3, 0x80, 0x0b, 0x38, 0xf8, 0x43, 0x19, 0xfa, 0x21, 0x88, 0x88, 0x01, 0xb9, 0x38, 0x49, - 0xf0, 0x19, 0x33, 0x0b, 0x84, 0x9c, 0x18, 0x90, 0x14, 0x8d, 0x90, 0x81, 0x78, 0xa0, 0x09, 0x95, - 0x2b, 0xb0, 0xb0, 0x79, 0xb2, 0x38, 0x92, 0x0b, 0x91, 0x79, 0xe0, 0x00, 0x3a, 0xc0, 0x18, 0x11, - 0xa0, 0x29, 0x16, 0x0b, 0xa2, 0x2c, 0xb0, 0xa0, 0x6b, 0x86, 0x8b, 0x21, 0xb3, 0x8f, 0x00, 0x88, - 0x85, 0x1b, 0x82, 0xa8, 0x62, 0xaa, 0x90, 0x11, 0x1b, 0x95, 0x1b, 0x90, 0x23, 0x8c, 0x68, 0xf0, - 0x50, 0x99, 0x80, 0x1a, 0xb3, 0x7b, 0xb2, 0x18, 0xaa, 0x86, 0x2a, 0x89, 0x02, 0xaa, 0x62, 0xd8, - 0x38, 0x98, 0x01, 0x12, 0xf9, 0x3c, 0x01, 0xab, 0x24, 0x18, 0x92, 0x0f, 0x92, 0x19, 0x1c, 0x87, - 0x9a, 0x02, 0x99, 0x81, 0x10, 0xa0, 0x16, 0x9f, 0x22, 0x89, 0x88, 0x01, 0xaa, 0x23, 0x2c, 0xa5, - 0x8b, 0x41, 0xa9, 0x11, 0xbc, 0x15, 0x2a, 0xf9, 0x42, 0x89, 0x80, 0x08, 0x98, 0x8d, 0x24, 0x91, - 0x1d, 0x01, 0xa1, 0x3a, 0xab, 0x87, 0x1a, 0xb2, 0x18, 0x99, 0x4b, 0x82, 0xc2, 0x4c, 0x95, 0x29, - 0x09, 0xf0, 0x48, 0x89, 0x81, 0xa1, 0x29, 0xe8, 0x30, 0xc8, 0x40, 0xa1, 0x21, 0x2d, 0xd1, 0x28, - 0xb8, 0x51, 0x98, 0x18, 0x88, 0x19, 0xb2, 0xeb, 0x71, 0xc8, 0x21, 0x88, 0x00, 0x91, 0x8a, 0x43, - 0xea, 0x48, 0xa8, 0x14, 0x9f, 0x12, 0x08, 0xa0, 0x11, 0x88, 0x1c, 0x92, 0x80, 0xc0, 0x79, 0x91, - 0x90, 0x1e, 0xa3, 0x10, 0x0a, 0x14, 0x9d, 0x98, 0x63, 0xa8, 0x39, 0xb8, 0x11, 0x8b, 0x33, 0xcb, - 0xb3, 0x5f, 0x93, 0x8b, 0x19, 0x07, 0x8b, 0x00, 0x88, 0xb2, 0x4c, 0x01, 0xca, 0x50, 0x80, 0xa1, - 0x80, 0x2b, 0x92, 0xb9, 0x73, 0xb0, 0x3a, 0xb2, 0x10, 0xfa, 0x49, 0x83, 0xdb, 0x41, 0xa8, 0x32, - 0x9d, 0x83, 0x21, 0x9c, 0x17, 0xbb, 0x18, 0x88, 0x92, 0x0c, 0x42, 0xb8, 0x14, 0x8a, 0xa0, 0x78, - 0xc9, 0x23, 0x18, 0xaa, 0x18, 0xe2, 0x1d, 0x10, 0xb3, 0x79, 0xb0, 0x21, 0xc9, 0x10, 0xb0, 0x52, - 0x90, 0x0a, 0xa1, 0x99, 0x5e, 0xa4, 0x2c, 0xb2, 0x1a, 0x01, 0xa1, 0x71, 0xc8, 0x18, 0x02, 0x99, - 0x28, 0xd8, 0x38, 0xa9, 0x71, 0xd1, 0x20, 0x89, 0x08, 0x12, 0xda, 0x10, 0xa1, 0x2e, 0x83, 0x28, - 0xac, 0x43, 0xb8, 0xba, 0x54, 0xa8, 0x88, 0x19, 0x13, 0x0a, 0xb2, 0xba, 0x7a, 0x90, 0x23, 0x08, - 0xf1, 0x7c, 0xb8, 0x22, 0x0b, 0x82, 0x92, 0x8f, 0x02, 0x0b, 0x82, 0x09, 0x19, 0x80, 0x72, 0xd9, - 0x41, 0x90, 0x90, 0x29, 0xd9, 0x42, 0xbb, 0x31, 0xca, 0x31, 0xcb, 0x51, 0x84, 0x0d, 0x03, 0xba, - 0x41, 0x89, 0x94, 0x8c, 0x13, 0x90, 0x9e, 0x00, 0x81, 0x20, 0x19, 0xf3, 0x3a, 0x82, 0x98, 0x41, - 0xab, 0x85, 0x2b, 0x91, 0x87, 0x8f, 0x92, 0x3a, 0xa4, 0x09, 0x29, 0xc2, 0x38, 0xa8, 0x38, 0x05, - 0x0d, 0xb1, 0x19, 0x49, 0xd4, 0x29, 0x88, 0x8a, 0x85, 0x08, 0x1a, 0x83, 0xb1, 0x2f, 0x93, 0x19, - 0xa1, 0x48, 0x0a, 0xfc, 0x32, 0xc9, 0x42, 0x99, 0xa1, 0x22, 0xaf, 0x13, 0x9a, 0x12, 0x11, 0xb8, - 0x30, 0xcb, 0x07, 0x8c, 0x11, 0xa9, 0x85, 0x3c, 0xc0, 0x00, 0x28, 0xb1, 0x58, 0xb1, 0x50, 0xd8, - 0x10, 0x88, 0xb9, 0x54, 0xba, 0x21, 0x8a, 0x22, 0x80, 0x8e, 0x04, 0x9d, 0x04, 0x29, 0xa1, 0xa0, - 0x5b, 0xc0, 0x89, 0x33, 0x1a, 0xc2, 0x02, 0xa9, 0x0f, 0x13, 0x23, 0xe8, 0x39, 0xa9, 0xe9, 0x01, - 0x60, 0xb9, 0x04, 0x1b, 0x93, 0x0a, 0x10, 0xa6, 0x2e, 0xb2, 0x1a, 0x81, 0x01, 0x20, 0xf8, 0x29, - 0x02, 0xba, 0x22, 0x8c, 0x14, 0x89, 0x00, 0x00, 0x39, 0x95, 0x8f, 0xa1, 0x00, 0x49, 0xc8, 0x83, - 0x0f, 0x04, 0x18, 0xa8, 0x90, 0x3c, 0x94, 0x0a, 0x91, 0x10, 0x1b, 0xd8, 0x20, 0x8b, 0x07, 0x1a, - 0x09, 0x83, 0x2a, 0xb1, 0x12, 0xf3, 0x4a, 0x1b, 0xf3, 0x28, 0x3c, 0xe2, 0x11, 0x2a, 0xd2, 0x38, - 0xd0, 0x21, 0x0b, 0x93, 0x60, 0xd8, 0x00, 0x8b, 0x12, 0x01, 0x3c, 0xa2, 0xba, 0x78, 0xa0, 0x02, - 0xa9, 0x30, 0x81, 0xa2, 0x3c, 0xd4, 0x2b, 0x90, 0x91, 0xbf, 0x24, 0x41, 0xf9, 0x11, 0x1b, 0x82, - 0x19, 0x82, 0x02, 0xbe, 0x13, 0xab, 0x09, 0x23, 0x2d, 0xc6, 0x49, 0x00, 0xd0, 0x30, 0xb8, 0x40, - 0x91, 0x1a, 0xb2, 0x9d, 0x42, 0xe8, 0x3b, 0x95, 0x3a, 0xd0, 0x30, 0x1a, 0xa5, 0x3a, 0xb1, 0x19, - 0x88, 0x13, 0xbb, 0x81, 0x1f, 0xb6, 0x29, 0x18, 0xa8, 0x03, 0x1c, 0xc9, 0x37, 0x8d, 0x83, 0x1a, - 0x90, 0x18, 0xc8, 0x52, 0xcb, 0x31, 0xa9, 0x52, 0x9a, 0xa0, 0x28, 0xcb, 0x46, 0xaa, 0x13, 0x89, - 0xa8, 0x42, 0xca, 0x51, 0xb9, 0x81, 0x1b, 0x80, 0x15, 0x0c, 0x88, 0x22, 0xba, 0x32, 0x2b, 0x87, - 0xab, 0x98, 0x04, 0x8e, 0x17, 0x8b, 0x81, 0x89, 0x09, 0x05, 0x0e, 0x04, 0x8a, 0x00, 0xb0, 0x29, - 0x92, 0x79, 0xd2, 0x28, 0x98, 0xa8, 0x49, 0xb3, 0x7b, 0xc1, 0x38, 0x99, 0xa2, 0x1c, 0x03, 0x80, - 0x1a, 0x94, 0x9c, 0x33, 0xbc, 0x25, 0xab, 0x21, 0x95, 0x0f, 0x92, 0x19, 0x93, 0x8c, 0x44, 0xea, - 0x38, 0x91, 0x09, 0x12, 0xba, 0x48, 0xb0, 0x28, 0x99, 0x12, 0xad, 0x32, 0xb3, 0x4e, 0x93, 0xaa, - 0x1a, 0x52, 0xe1, 0x3a, 0x83, 0xc9, 0x48, 0xaa, 0x23, 0xd9, 0x59, 0xa2, 0x8c, 0x25, 0xb9, 0x81, - 0x09, 0x41, 0xf8, 0x39, 0x81, 0x9a, 0x24, 0x9d, 0x85, 0x9a, 0x30, 0xb1, 0x0a, 0x22, 0x89, 0xb2, - 0x5a, 0x04, 0x8e, 0x12, 0xaa, 0x22, 0xb9, 0x3e, 0xc5, 0x3a, 0xa0, 0x11, 0x84, 0x2b, 0xa2, 0xcb, - 0x71, 0xc0, 0x49, 0x90, 0x9a, 0x83, 0x2b, 0xa2, 0x21, 0x28, 0x88, 0xb5, 0x0e, 0x31, 0xf3, 0x38, - 0x99, 0x8a, 0x06, 0x8b, 0x81, 0xa9, 0x45, 0xac, 0x13, 0xba, 0x41, 0x02, 0xcb, 0x24, 0x0b, 0x02, - 0xac, 0x18, 0x84, 0x1c, 0xb1, 0x7b, 0xd1, 0x29, 0x91, 0x09, 0x21, 0x85, 0x8a, 0xa2, 0x40, 0xf8, - 0x20, 0x0a, 0x81, 0xa0, 0x3c, 0xd2, 0x0a, 0x23, 0x0a, 0xb3, 0x12, 0x7b, 0xd9, 0x31, 0x88, 0x11, - 0xb9, 0x0b, 0x04, 0xce, 0x52, 0xb0, 0x20, 0x9b, 0x97, 0x8a, 0x32, 0x81, 0xad, 0x25, 0x8c, 0x01, - 0x88, 0x2a, 0xc3, 0x1d, 0x83, 0x8c, 0x11, 0x02, 0x90, 0x8b, 0x42, 0xe2, 0x30, 0x89, 0xc0, 0x19, - 0x01, 0x9b, 0x80, 0x07, 0x1e, 0x94, 0x1d, 0x03, 0x9a, 0x02, 0x00, 0x8e, 0x94, 0x3b, 0xa3, 0x89, - 0x30, 0xf8, 0x48, 0xb1, 0x1a, 0x91, 0x18, 0x62, 0xfa, 0x31, 0x8a, 0x98, 0x11, 0x1b, 0x12, 0xa1, - 0x30, 0x8e, 0xb5, 0x5a, 0xa1, 0x8a, 0x02, 0x9b, 0x21, 0xb4, 0x3f, 0xe4, 0x39, 0xa1, 0x29, 0x12, - 0xb8, 0x78, 0xe8, 0x28, 0x91, 0x89, 0x11, 0xa8, 0x20, 0xb8, 0x41, 0xd8, 0x31, 0x01, 0xab, 0xa1, - 0x22, 0x1c, 0xc9, 0x21, 0x85, 0x1a, 0x90, 0x15, 0xdf, 0x31, 0x99, 0x11, 0x08, 0x90, 0x20, 0xbe, - 0x17, 0x9b, 0x23, 0x99, 0x80, 0x09, 0xac, 0x27, 0x0c, 0x93, 0x09, 0xa8, 0x20, 0xa2, 0x39, 0xcc, - 0x33, 0x89, 0x88, 0x70, 0xc0, 0x19, 0x94, 0x1b, 0x01, 0xab, 0x97, 0x3b, 0x08, 0x95, 0x9b, 0x85, - 0x1e, 0xa4, 0x29, 0x09, 0x92, 0x4a, 0x91, 0x09, 0xc9, 0x31, 0x9b, 0x82, 0x91, 0x2f, 0xb4, 0x38, - 0x2a, 0xb6, 0x29, 0x98, 0x9b, 0x86, 0x3a, 0xa6, 0x2c, 0xb2, 0x2a, 0xc8, 0x04, 0x3c, 0xc5, 0x29, - 0x90, 0x18, 0x98, 0x32, 0x8c, 0xb2, 0x73, 0xba, 0x03, 0xa9, 0x0b, 0x80, 0x42, 0xa2, 0x4b, 0xd4, - 0x19, 0x01, 0xd9, 0x52, 0xc8, 0x38, 0x98, 0x91, 0x83, 0x1c, 0x00, 0x92, 0x3e, 0xe1, 0x18, 0x20, - 0x09, 0x89, 0xd8, 0x50, 0x9b, 0x06, 0x1a, 0x12, 0x8c, 0x81, 0x01, 0x9e, 0x13, 0x9b, 0x85, 0x19, - 0xb1, 0x9f, 0x31, 0x03, 0x1a, 0xa4, 0x9a, 0x48, 0xba, 0x06, 0x1b, 0xa2, 0x0a, 0x91, 0x1c, 0x02, - 0x37, 0x9e, 0x02, 0x9a, 0x93, 0x4c, 0xc3, 0x39, 0xa9, 0x94, 0x4c, 0xb1, 0x38, 0xa0, 0x0c, 0x43, - 0xca, 0x03, 0x8c, 0x10, 0xb3, 0x7b, 0x93, 0xab, 0x05, 0x8c, 0x00, 0x88, 0x32, 0x82, 0xae, 0x02, - 0x9a, 0x91, 0x78, 0xa1, 0x48, 0xa0, 0x80, 0x1e, 0xa3, 0x20, 0xb9, 0x00, 0x0a, 0x63, 0xe8, 0x08, - 0x30, 0xc8, 0x22, 0xab, 0x01, 0x85, 0x8f, 0x22, 0x09, 0x97, 0x0a, 0x89, 0x93, 0x2d, 0xa2, 0x1a, - 0x80, 0x22, 0xc9, 0x03, 0x3c, 0x81, 0x9a, 0x82, 0x44, 0xae, 0x31, 0xf8, 0x33, 0x9e, 0x90, 0x13, - 0x8a, 0x05, 0xb9, 0x30, 0x08, 0xb8, 0xb3, 0x6e, 0xb2, 0x09, 0x28, 0xd8, 0x48, 0xa1, 0x09, 0x92, - 0x2a, 0x63, 0xb0, 0xa9, 0x1a, 0x82, 0x1b, 0x93, 0xa4, 0x0b, 0x53, 0xba, 0xf1, 0x60, 0x9a, 0x84, - 0x88, 0x49, 0xe2, 0x91, 0x6a, 0xa0, 0x08, 0x90, 0x21, 0xad, 0x13, 0x0b, 0xa5, 0x5b, 0xa1, 0x12, - 0x0b, 0x85, 0x8c, 0x98, 0x40, 0xb0, 0x81, 0x50, 0xcb, 0x11, 0x08, 0x20, 0x82, 0x99, 0xa2, 0x18, - 0xbf, 0x32, 0x13, 0xcf, 0x13, 0x89, 0x89, 0x23, 0x9e, 0x85, 0x0b, 0x35, 0xc9, 0x4a, 0xa2, 0x8a, - 0x0a, 0xa1, 0x45, 0xbb, 0x33, 0xeb, 0x38, 0x02, 0xb1, 0x2a, 0xca, 0x64, 0xc0, 0x19, 0x29, 0xc4, - 0x3a, 0x92, 0x8b, 0x89, 0x06, 0x9a, 0x81, 0x58, 0xc0, 0x38, 0xb3, 0x1a, 0x02, 0xaa, 0x14, 0xae, - 0x89, 0x27, 0x9a, 0x81, 0xa9, 0x02, 0x4c, 0x04, 0xd9, 0x19, 0x24, 0x8d, 0xa2, 0x1a, 0x92, 0x4a, - 0x91, 0x05, 0x8f, 0x82, 0x09, 0xa1, 0x60, 0xb0, 0x28, 0x98, 0x8a, 0x31, 0x88, 0x05, 0x9c, 0x0a, - 0x87, 0x2b, 0xb4, 0x2a, 0x92, 0x0a, 0x01, 0xd0, 0x4e, 0xb3, 0x3b, 0xa1, 0x22, 0x9b, 0x96, 0x0c, - 0xa3, 0x58, 0xf2, 0x39, 0xb9, 0x23, 0x0b, 0x91, 0x43, 0xb9, 0x10, 0x8e, 0xa3, 0x29, 0x32, 0xe2, - 0x49, 0xb8, 0xab, 0x23, 0x1a, 0x16, 0xea, 0x28, 0x11, 0x92, 0x0c, 0x81, 0x93, 0x1d, 0x93, 0xf9, - 0x68, 0xa0, 0x80, 0x1a, 0x92, 0x28, 0xb8, 0x22, 0x0d, 0xb5, 0x4a, 0xa1, 0x00, 0x48, 0xc1, 0x09, - 0xa0, 0x3b, 0x96, 0x0c, 0x03, 0x9c, 0x34, 0x8b, 0x01, 0x80, 0x8f, 0x85, 0x0b, 0x13, 0x99, 0x98, - 0x98, 0x60, 0x83, 0x0c, 0xb1, 0x99, 0x19, 0x58, 0xe2, 0x11, 0x1c, 0xa5, 0x2c, 0x83, 0x11, 0x9c, - 0x82, 0x8e, 0x93, 0x2b, 0x03, 0x82, 0x8d, 0xa3, 0x3b, 0x09, 0x07, 0xa9, 0x2a, 0x26, 0xc8, 0x8b, - 0x13, 0xab, 0x01, 0x81, 0x4a, 0xe8, 0x33, 0x28, 0xad, 0x13, 0xa1, 0x3b, 0xac, 0x27, 0xb8, 0x2b, - 0xa2, 0x99, 0x4b, 0xb2, 0x69, 0xa8, 0x33, 0xb1, 0x5a, 0x01, 0xe9, 0x3c, 0x06, 0x99, 0x99, 0x90, - 0x29, 0x1e, 0x86, 0x89, 0x8a, 0x24, 0x99, 0x91, 0x6a, 0xb2, 0x31, 0xbf, 0x04, 0x8b, 0x11, 0x13, - 0xcd, 0x21, 0xa3, 0x29, 0x89, 0xb3, 0x0c, 0x88, 0x23, 0xea, 0x63, 0x99, 0xc0, 0x40, 0xa8, 0x04, - 0x0d, 0x91, 0x02, 0x9a, 0x32, 0xbd, 0x14, 0x09, 0x90, 0x91, 0x1b, 0x15, 0x9b, 0x03, 0x18, 0xc5, - 0x39, 0xbc, 0xc3, 0x0c, 0x62, 0xc2, 0x69, 0x90, 0x99, 0x10, 0x88, 0x10, 0x93, 0x2f, 0xc2, 0x1a, - 0x88, 0x10, 0x39, 0x97, 0x3b, 0xf8, 0x38, 0x99, 0x04, 0x29, 0xe2, 0x19, 0x00, 0x92, 0x3a, 0xf1, - 0x28, 0x98, 0x0a, 0x04, 0x8c, 0x21, 0xa2, 0x2b, 0x82, 0x0a, 0x82, 0x31, 0x73, 0xf0, 0x5c, 0xb9, - 0x12, 0x19, 0xc9, 0x22, 0xaa, 0x14, 0x08, 0xd0, 0x60, 0x98, 0x80, 0x39, 0xf2, 0x29, 0x90, 0x10, - 0xa8, 0x20, 0xb8, 0xaa, 0x74, 0xc8, 0x33, 0xda, 0x28, 0x80, 0x08, 0x22, 0xdb, 0x43, 0xcb, 0x21, - 0x99, 0x01, 0x10, 0xca, 0x11, 0x3a, 0xb4, 0x0a, 0x61, 0xa5, 0x0d, 0x92, 0x11, 0x1d, 0xd3, 0x3a, - 0x80, 0x08, 0x0a, 0x97, 0x0c, 0x14, 0x99, 0xa9, 0x58, 0x92, 0x09, 0x00, 0x94, 0x8f, 0x03, 0x09, - 0x89, 0xa2, 0x3a, 0xc2, 0x1c, 0x85, 0x09, 0x0a, 0x04, 0x12, 0x8f, 0x83, 0x99, 0x19, 0x00, 0xb1, - 0x91, 0x3e, 0xa5, 0x8b, 0x81, 0x7a, 0xa1, 0x39, 0x83, 0xb9, 0x2f, 0xa4, 0x2c, 0x91, 0x08, 0x18, - 0xc1, 0x59, 0xa1, 0x11, 0x8c, 0xa0, 0x12, 0x1e, 0x05, 0x9b, 0x82, 0x49, 0xbc, 0x06, 0x29, 0xa8, - 0x21, 0xa9, 0x29, 0xa0, 0xbb, 0x27, 0x0a, 0x11, 0xb8, 0x2a, 0xaa, 0x73, 0xe8, 0x22, 0x29, 0xc0, - 0x80, 0x0e, 0x04, 0x89, 0x18, 0x99, 0x90, 0x22, 0x60, 0xb8, 0x83, 0x0c, 0xca, 0x33, 0x9b, 0x17, - 0x8d, 0xa2, 0x51, 0x99, 0x98, 0x20, 0xd4, 0x4b, 0xb2, 0x1a, 0x21, 0x19, 0x92, 0xab, 0x7b, 0xb4, - 0x2c, 0xb1, 0x29, 0xb1, 0x32, 0x13, 0xbf, 0x62, 0xc8, 0x11, 0x2a, 0xb0, 0x13, 0x0f, 0xa3, 0x20, - 0xaa, 0xa1, 0x30, 0xa8, 0x52, 0xb9, 0x10, 0x0c, 0xc3, 0x1b, 0x71, 0xa4, 0x4a, 0xc1, 0x0a, 0x23, - 0xbb, 0x33, 0xdc, 0x49, 0x90, 0x18, 0x86, 0x0e, 0x92, 0x18, 0x18, 0xc2, 0x49, 0xd9, 0x21, 0x81, - 0x89, 0x11, 0xc9, 0x58, 0xd9, 0x12, 0x0a, 0xa1, 0x01, 0x1a, 0x13, 0x53, 0xba, 0xc1, 0x3a, 0xd2, - 0x18, 0x3b, 0x87, 0x89, 0x89, 0xa1, 0x2d, 0xa1, 0x70, 0x92, 0x0c, 0x83, 0xa8, 0x50, 0xa1, 0xbb, - 0x11, 0x1f, 0xa6, 0x1a, 0x91, 0x09, 0x92, 0x18, 0x62, 0xb0, 0x41, 0x9a, 0xd0, 0x19, 0x29, 0x95, - 0x0c, 0x84, 0xac, 0x22, 0x90, 0x40, 0xd0, 0x59, 0x91, 0x8a, 0x01, 0x0a, 0x85, 0x0c, 0x11, 0xe8, - 0x4a, 0x92, 0x1b, 0x94, 0x39, 0xa0, 0xb9, 0x63, 0xab, 0x02, 0x08, 0x0b, 0x93, 0x70, 0xb2, 0x18, - 0x90, 0x0a, 0xb2, 0x9f, 0x52, 0xdb, 0x24, 0xa9, 0x30, 0xc8, 0x38, 0xb2, 0x1e, 0x84, 0x0a, 0x38, - 0xf1, 0x29, 0xb1, 0x51, 0xb0, 0x09, 0x02, 0x99, 0x38, 0xb2, 0x50, 0xf8, 0x38, 0xc8, 0x00, 0x29, - 0x01, 0xb8, 0x38, 0x07, 0x9f, 0x14, 0x89, 0x01, 0xa9, 0x28, 0xd8, 0x29, 0x01, 0x89, 0x33, 0xfb, - 0x43, 0xbb, 0x41, 0xa9, 0x09, 0x24, 0x99, 0x02, 0xbd, 0x03, 0x0b, 0x83, 0x92, 0x1f, 0x95, 0x0b, - 0x95, 0x3a, 0xc1, 0x28, 0xb0, 0x3a, 0x09, 0xa3, 0x78, 0xfb, 0x50, 0x98, 0x08, 0x82, 0x1a, 0x93, - 0x0a, 0x84, 0xad, 0x30, 0xd8, 0x40, 0xb8, 0x20, 0x82, 0xad, 0x43, 0xc9, 0x50, 0x91, 0x51, 0xf9, - 0x18, 0x90, 0x08, 0x10, 0x98, 0x28, 0xd0, 0x41, 0xa9, 0x18, 0x13, 0x19, 0xc0, 0x2a, 0xb1, 0xca, - 0x71, 0xb0, 0x40, 0x99, 0x01, 0xaa, 0x52, 0xa2, 0x1a, 0xac, 0x94, 0x60, 0xca, 0x32, 0x9c, 0x83, - 0x1a, 0x91, 0x20, 0xf9, 0x31, 0x9a, 0x21, 0x9a, 0x97, 0x3c, 0xa2, 0xb2, 0x4c, 0x02, 0xda, 0x11, - 0x19, 0xb9, 0x32, 0xd9, 0x2b, 0x16, 0x08, 0x9a, 0x93, 0x0f, 0x23, 0xa0, 0x18, 0xbb, 0x91, 0x5c, - 0x83, 0xb0, 0x0f, 0x04, 0x0d, 0x84, 0x0b, 0x11, 0x83, 0x8b, 0x00, 0x8c, 0x15, 0x89, 0xb9, 0x1a, - 0x04, 0x08, 0x8d, 0x94, 0x19, 0x13, 0x9f, 0x03, 0x19, 0x02, 0x18, 0xfa, 0x3a, 0x02, 0xb9, 0x34, - 0xbb, 0x0d, 0x86, 0x3a, 0xe3, 0x39, 0x81, 0x99, 0x09, 0xb2, 0x5a, 0xba, 0x32, 0x99, 0x91, 0x46, - 0xd8, 0x19, 0x29, 0xd2, 0x30, 0xc1, 0x2a, 0xa2, 0xac, 0x47, 0xb9, 0x10, 0xc1, 0x3b, 0xd2, 0x20, - 0x02, 0xa9, 0x72, 0xc8, 0x2a, 0xa2, 0x38, 0xa3, 0x8e, 0x04, 0x99, 0x0a, 0x94, 0x8a, 0x01, 0x11, - 0xfb, 0x41, 0x01, 0x9a, 0x19, 0x23, 0xa0, 0x2b, 0xe1, 0xac, 0x55, 0xba, 0x10, 0x08, 0x40, 0xa4, - 0x0c, 0x82, 0x99, 0x40, 0xc8, 0x00, 0x90, 0x60, 0xf0, 0x18, 0x90, 0x08, 0x11, 0x01, 0x89, 0x2a, - 0x84, 0xac, 0x25, 0x9b, 0x12, 0x9c, 0x11, 0xb2, 0xbf, 0x05, 0x09, 0x11, 0xc0, 0x20, 0x99, 0x73, - 0xb0, 0x0b, 0x32, 0xaa, 0x10, 0xaa, 0x31, 0xd2, 0x1d, 0x03, 0xb1, 0x3b, 0x99, 0x91, 0x31, 0x25, - 0x39, 0xf1, 0x29, 0x90, 0xbb, 0x31, 0xd1, 0x3c, 0xa5, 0x30, 0xc1, 0x3a, 0x94, 0x9e, 0x21, 0xa0, - 0x30, 0xaa, 0x01, 0x99, 0x5b, 0xa3, 0x9b, 0x44, 0x90, 0x59, 0xb0, 0x3a, 0xf1, 0x0c, 0x11, 0xa0, - 0x70, 0x91, 0x99, 0xa9, 0x38, 0xb2, 0x63, 0x01, 0x90, 0x9b, 0x92, 0x9c, 0xd9, 0x41, 0x9a, 0x33, - 0xbb, 0x93, 0x4b, 0x99, 0x27, 0xbb, 0x12, 0x8c, 0x05, 0x99, 0x09, 0x03, 0xa9, 0x1d, 0xa2, 0xa8, - 0x29, 0x43, 0xbb, 0x35, 0x2a, 0xa0, 0x91, 0x1b, 0xc2, 0x2a, 0x03, 0xac, 0x04, 0x3d, 0xa4, 0x0b, - 0x0b, 0x15, 0x19, 0x94, 0x1d, 0xa2, 0x29, 0x92, 0xb8, 0x2c, 0xb8, 0x30, 0xc0, 0x30, 0x03, 0xbd, - 0x32, 0xb9, 0x30, 0x11, 0x13, 0x30, 0xca, 0x01, 0x0a, 0xd9, 0x30, 0xb3, 0x9d, 0x13, 0xb9, 0x09, - 0x21, 0x32, 0xba, 0x52, 0xb1, 0x9b, 0x04, 0x1a, 0x12, 0x9a, 0x43, 0xca, 0x00, 0x00, 0x10, 0xa3, - 0x1b, 0x93, 0x9a, 0x32, 0xb9, 0x39, 0x01, 0x2a, 0xb2, 0xab, 0x04, 0x0a, 0x11, 0x91, 0x39, 0xa1, - 0x10, 0x9a, 0x01, 0x19, 0x00, 0x92, 0x0c, 0x04, 0x1b, 0x92, 0x9a, 0x10, 0x9b, 0x33, 0xa0, 0x1a, - 0x92, 0x0b, 0x04, 0x0a, 0x12, 0x99, 0x99, 0x90, 0x2a, 0xb0, 0x31, 0x93, 0x09, 0x99, 0xa0, 0x11, - 0x09, 0x23, 0x90, 0xa9, 0x11, 0x9a, 0x91, 0x29, 0x91, 0x99, 0x11, 0xa0, 0x20, 0x01, 0x10, 0x91, - 0x09, 0x90, 0x99, 0x10, 0x99, 0x11, 0x91, 0x10, 0x90, 0x10, 0x09, 0x91, 0x19, 0x91, 0x10, 0x09, - 0x91, 0x09, 0x10, 0x00, 0x00, 0x90, 0x10, 0x90, 0x10, 0x00, 0x09, 0x01, 0x90, 0x10, 0x09, 0x10, - 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, - 0x34, 0x06, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x77, 0x7f, 0x77, 0x4c, 0xf5, 0x19, 0xb5, 0x2f, - 0x92, 0x10, 0xa8, 0xcc, 0x75, 0xf8, 0x48, 0x81, 0x99, 0x28, 0xa8, 0x69, 0xc0, 0x12, 0x89, 0x99, - 0x82, 0x31, 0x06, 0x9e, 0x31, 0xba, 0x23, 0x9b, 0xa8, 0x52, 0xb8, 0x50, 0xb9, 0x93, 0x1a, 0x4a, - 0xb4, 0x0b, 0x93, 0x28, 0x11, 0xf9, 0x11, 0x3c, 0x94, 0x0c, 0x83, 0x9b, 0x12, 0x80, 0x28, 0x95, - 0x8f, 0x86, 0x8b, 0x12, 0x9b, 0x43, 0xc9, 0x19, 0x93, 0x88, 0x49, 0xb9, 0x84, 0x3d, 0xd1, 0x51, - 0xd9, 0x21, 0xa8, 0x31, 0xf8, 0x30, 0x98, 0x90, 0x20, 0x99, 0xa1, 0x2b, 0x85, 0x5a, 0xc1, 0x0a, - 0x30, 0xa8, 0xc1, 0x50, 0x89, 0xa0, 0x21, 0xd8, 0x7a, 0xa2, 0x10, 0x89, 0xc0, 0x5b, 0xa2, 0x00, - 0x88, 0x28, 0xac, 0x17, 0x8d, 0x04, 0x0c, 0x93, 0x8b, 0x31, 0xb1, 0x4b, 0xd1, 0x59, 0xb1, 0x29, - 0x88, 0x81, 0x98, 0x79, 0xc1, 0x10, 0x1a, 0x28, 0xd3, 0x19, 0x32, 0xbf, 0x13, 0xa1, 0x31, 0x0f, - 0xa3, 0x89, 0x28, 0x00, 0x9c, 0x86, 0x9a, 0x22, 0xca, 0x33, 0x0f, 0x82, 0x1a, 0x82, 0x98, 0x08, - 0x40, 0xa8, 0x1a, 0xc3, 0x59, 0xd1, 0x89, 0x52, 0x99, 0x41, 0xcb, 0x93, 0x1b, 0x42, 0xe1, 0x28, - 0xa8, 0x68, 0xe1, 0x29, 0x93, 0x3b, 0xe3, 0x38, 0xb8, 0x19, 0x82, 0x18, 0x11, 0x9f, 0x13, 0x8b, - 0x92, 0x92, 0x2b, 0x1b, 0x87, 0xcb, 0x51, 0x88, 0x98, 0x87, 0x8c, 0x31, 0xa8, 0x12, 0x89, 0xc8, - 0x28, 0x09, 0x83, 0xcb, 0x34, 0x60, 0xd0, 0x08, 0xcb, 0x34, 0xa8, 0x49, 0xf1, 0x28, 0x90, 0x18, - 0x98, 0x32, 0x8d, 0x02, 0xca, 0x40, 0xb1, 0x28, 0x81, 0xa8, 0x3a, 0x32, 0xf8, 0x0b, 0x34, 0x93, - 0x1b, 0xbc, 0xd2, 0x52, 0x80, 0x29, 0xc8, 0x0c, 0x05, 0x8a, 0x82, 0x19, 0xa8, 0x16, 0xbd, 0x28, - 0x21, 0x01, 0xb9, 0x87, 0x9f, 0x04, 0x88, 0x09, 0x92, 0x11, 0x8b, 0xc2, 0x7b, 0xa2, 0xa8, 0x52, - 0xa0, 0x1c, 0x80, 0x82, 0x09, 0x10, 0x9a, 0x0a, 0x87, 0x0e, 0x03, 0x8b, 0x01, 0x84, 0x9d, 0x29, - 0x85, 0x99, 0x53, 0xca, 0x10, 0x8a, 0x33, 0x0c, 0xc1, 0x61, 0xa9, 0x91, 0x4b, 0xb2, 0x40, 0xaa, - 0x83, 0x0d, 0x01, 0x80, 0x82, 0xca, 0x20, 0x24, 0xcb, 0x11, 0xab, 0x48, 0x86, 0x0a, 0xaa, 0x03, - 0x20, 0x14, 0xbf, 0x22, 0x12, 0x0d, 0xd0, 0x49, 0x85, 0x1b, 0xc1, 0x1a, 0x82, 0x18, 0x24, 0xba, - 0xea, 0x51, 0xb0, 0x4b, 0x92, 0x90, 0x5a, 0xb0, 0x29, 0xa0, 0x71, 0xc1, 0x89, 0x81, 0x08, 0x13, - 0x1b, 0x14, 0xcf, 0x12, 0x80, 0x99, 0x61, 0xb9, 0x31, 0xc0, 0x1b, 0x85, 0x09, 0x88, 0x13, 0x8e, - 0x91, 0x48, 0xc3, 0x3c, 0x89, 0x97, 0x2b, 0x90, 0x10, 0xc0, 0x38, 0x83, 0xcb, 0x08, 0x34, 0x0e, - 0x82, 0x9b, 0x51, 0xd0, 0x38, 0xa0, 0x10, 0x98, 0x60, 0xcb, 0x12, 0xa8, 0x70, 0xc0, 0x30, 0xd8, - 0x20, 0x88, 0x08, 0x80, 0x88, 0x24, 0xbd, 0x01, 0x10, 0x82, 0x20, 0xe9, 0x2a, 0xa3, 0x4b, 0xa2, - 0xf0, 0x61, 0x09, 0xc8, 0x10, 0x0a, 0x05, 0x0b, 0x92, 0x8a, 0x19, 0x83, 0x23, 0xad, 0x30, 0x11, - 0xfa, 0x1c, 0x16, 0xb9, 0x42, 0xda, 0x21, 0x8b, 0x04, 0x00, 0x9b, 0x80, 0x52, 0xe9, 0x38, 0xb0, - 0x48, 0xa1, 0x38, 0xea, 0x30, 0xb1, 0x20, 0x89, 0x89, 0xa8, 0x32, 0x81, 0x9c, 0xa5, 0x7c, 0xc2, - 0x08, 0xa1, 0x49, 0x03, 0xa8, 0x8d, 0x80, 0x00, 0x51, 0xd8, 0x11, 0x09, 0xa0, 0x31, 0xcf, 0x86, - 0x18, 0xa8, 0x00, 0x90, 0x48, 0xb0, 0x30, 0xca, 0x14, 0x08, 0xbb, 0x33, 0xbd, 0x17, 0x3b, 0xc9, - 0x20, 0xa1, 0x5b, 0x02, 0xba, 0x91, 0x6b, 0xb0, 0x20, 0x80, 0x38, 0xf1, 0x10, 0x0f, 0x84, 0x88, - 0x00, 0xa0, 0x19, 0x13, 0x8b, 0x89, 0x07, 0x8d, 0x13, 0x9d, 0x83, 0x19, 0x08, 0xb2, 0x30, 0x8d, - 0x22, 0xb8, 0x02, 0x0d, 0x42, 0xf2, 0x4c, 0xc1, 0x20, 0xb1, 0x69, 0xb8, 0x10, 0xb0, 0x4a, 0x02, - 0x99, 0x90, 0x48, 0xd3, 0x3e, 0xb4, 0x3a, 0xa1, 0x28, 0xc9, 0x00, 0x38, 0x12, 0xf0, 0x28, 0xa9, - 0x21, 0x0c, 0x87, 0x8a, 0x18, 0x13, 0xcb, 0x0a, 0x53, 0xb8, 0x31, 0xfa, 0x22, 0xab, 0x34, 0xd9, - 0x01, 0x19, 0x13, 0xbe, 0x42, 0xb9, 0x43, 0xcb, 0x31, 0xca, 0x31, 0x80, 0x80, 0xad, 0x53, 0xc8, - 0x30, 0x9c, 0x05, 0x89, 0x02, 0x9a, 0x01, 0x98, 0x20, 0xa4, 0x1c, 0x00, 0x42, 0xdd, 0x22, 0x9a, - 0x33, 0xfa, 0x40, 0xa9, 0x00, 0x81, 0x10, 0x9d, 0x05, 0x9a, 0x92, 0x0c, 0x15, 0x99, 0x00, 0x9a, - 0x24, 0xbb, 0x53, 0xa8, 0x10, 0x89, 0x03, 0xc8, 0x4c, 0xc2, 0x41, 0xb8, 0x3a, 0xd3, 0x1c, 0xa2, - 0x38, 0x9a, 0x23, 0xf1, 0x29, 0x98, 0x72, 0xd0, 0x20, 0x9a, 0x20, 0x9a, 0x02, 0x42, 0x1b, 0xfa, - 0x52, 0x8d, 0x02, 0x90, 0x10, 0xba, 0x52, 0x99, 0x90, 0x39, 0x87, 0x9b, 0x03, 0x9b, 0x81, 0x40, - 0x10, 0xfa, 0x21, 0x2b, 0xc8, 0x82, 0x21, 0x09, 0xa3, 0x9f, 0x84, 0x8a, 0x79, 0xb0, 0x18, 0x91, - 0x2b, 0x93, 0x8a, 0x23, 0x34, 0x9c, 0x99, 0xf3, 0x70, 0xa8, 0x10, 0x81, 0x9c, 0x11, 0x82, 0x0f, - 0x83, 0x2b, 0xb4, 0x9c, 0x22, 0xa0, 0x42, 0x0d, 0xa1, 0x88, 0x19, 0x11, 0xa2, 0x4d, 0x92, 0xc0, - 0x5a, 0xb1, 0x31, 0x19, 0xa1, 0xc9, 0x58, 0x02, 0x0a, 0xd9, 0x48, 0xa8, 0x59, 0xb0, 0x2a, 0xf3, - 0x5a, 0x91, 0x99, 0x3a, 0xb4, 0x40, 0xa9, 0x32, 0x8c, 0x13, 0xbe, 0x33, 0xcb, 0x54, 0xca, 0x32, - 0xbb, 0x11, 0x02, 0x8c, 0x84, 0x20, 0xba, 0x0a, 0x33, 0xdb, 0x84, 0x79, 0xb0, 0x00, 0xb9, 0x59, - 0x95, 0x0d, 0x03, 0xb9, 0x20, 0x80, 0x18, 0xc8, 0x34, 0x9f, 0x94, 0x8a, 0x22, 0x00, 0xbb, 0x04, - 0x1d, 0x83, 0xa9, 0x73, 0xab, 0x85, 0x1a, 0x81, 0x8a, 0x05, 0x8b, 0x93, 0x0d, 0x03, 0x8a, 0x14, - 0xbe, 0x42, 0xb8, 0x30, 0xc9, 0x28, 0x12, 0xf8, 0x40, 0x99, 0x92, 0x38, 0xc9, 0x38, 0xc2, 0x61, - 0xa9, 0x88, 0x18, 0xa1, 0x20, 0xc2, 0x4b, 0xa4, 0x8c, 0x01, 0x20, 0xd8, 0x02, 0x3b, 0x92, 0x9f, - 0x04, 0x81, 0x1d, 0x83, 0x9a, 0x81, 0x4b, 0x97, 0x08, 0xb9, 0x21, 0x00, 0x9a, 0x83, 0x19, 0xad, - 0x30, 0x07, 0x9e, 0x21, 0x88, 0x38, 0xd0, 0x38, 0x90, 0xc9, 0x71, 0xc0, 0x20, 0xa1, 0x10, 0xba, - 0x42, 0x98, 0x01, 0xbd, 0x42, 0xa8, 0x18, 0x03, 0x8f, 0xa2, 0x51, 0x9a, 0xab, 0x16, 0x1a, 0xb3, - 0x2c, 0xb2, 0x71, 0x99, 0x00, 0x11, 0x9d, 0x05, 0x89, 0x8b, 0x11, 0x84, 0x9a, 0x10, 0x90, 0x8a, - 0x53, 0xda, 0xa2, 0x59, 0xb0, 0x21, 0xf8, 0x3a, 0x86, 0x09, 0x98, 0x92, 0x4b, 0xb4, 0x38, 0xca, - 0x11, 0xa2, 0x79, 0xd9, 0x11, 0x88, 0x10, 0xa1, 0x3a, 0xe1, 0x1a, 0x03, 0x80, 0xac, 0x63, 0x90, - 0x0a, 0x81, 0x08, 0xc4, 0x7b, 0xd1, 0x08, 0x21, 0x0b, 0x85, 0xbb, 0x51, 0xb0, 0x28, 0x88, 0x93, - 0x8e, 0x05, 0x0b, 0xa1, 0x09, 0x35, 0x9a, 0x80, 0xbb, 0x16, 0x3a, 0xc1, 0x00, 0x89, 0xa0, 0x42, - 0xdb, 0x20, 0x41, 0xc0, 0x89, 0x8a, 0x30, 0x93, 0x72, 0xf0, 0x5b, 0xa1, 0x09, 0x83, 0x1b, 0x13, - 0x9c, 0xb3, 0x3c, 0xb2, 0x70, 0xa1, 0x1b, 0xb1, 0x6a, 0x91, 0x1a, 0x91, 0x99, 0x51, 0xc0, 0xab, - 0x72, 0xa1, 0x28, 0xd8, 0x19, 0x13, 0x0a, 0x96, 0x0c, 0x13, 0x8c, 0x82, 0xaa, 0x73, 0xb8, 0x10, - 0x1b, 0xc3, 0x99, 0x25, 0x1b, 0xd0, 0x18, 0x33, 0xac, 0x90, 0x22, 0xc8, 0x38, 0xa2, 0x9b, 0xc1, - 0x7a, 0x94, 0x89, 0x2a, 0x96, 0x08, 0x0b, 0x93, 0x0b, 0x05, 0x19, 0xb0, 0xae, 0x26, 0x9a, 0x11, - 0xca, 0x41, 0x8a, 0xb5, 0x58, 0x99, 0x81, 0x18, 0x99, 0xa3, 0x5b, 0xa3, 0x9c, 0x93, 0x2d, 0x81, - 0x20, 0xb3, 0x8e, 0x19, 0x12, 0x86, 0x8e, 0x12, 0xa0, 0x98, 0x6b, 0xb2, 0x29, 0x22, 0x9c, 0x86, - 0x0e, 0x13, 0x9a, 0xa1, 0x20, 0xa0, 0x9b, 0x06, 0x1b, 0x93, 0xa9, 0x72, 0xdb, 0x02, 0x1c, 0x04, - 0x9b, 0x30, 0x95, 0x1d, 0x90, 0x22, 0x98, 0x9a, 0x43, 0xca, 0x00, 0x22, 0x0a, 0x0a, 0xa8, 0x07, - 0x0f, 0x91, 0x40, 0xc1, 0x1b, 0x02, 0x09, 0xb2, 0x48, 0xe9, 0x40, 0xb8, 0x13, 0xbc, 0x62, 0x98, - 0x20, 0xb8, 0x48, 0xc1, 0x2d, 0x84, 0x1a, 0xd3, 0x3a, 0xb2, 0x1c, 0x04, 0x1a, 0xb0, 0x20, 0x01, - 0xbd, 0x23, 0x00, 0x9d, 0x06, 0x8b, 0x93, 0x1c, 0x23, 0xb8, 0x20, 0x9f, 0x24, 0xc8, 0x28, 0x0a, - 0xa5, 0x3a, 0xa8, 0x92, 0x81, 0x7b, 0xa0, 0x90, 0x8a, 0x25, 0x08, 0xfa, 0x30, 0x90, 0x11, 0xc8, - 0x5a, 0xd0, 0x22, 0x8a, 0x08, 0xc3, 0x3b, 0x23, 0xdd, 0x02, 0x18, 0x93, 0x8d, 0x11, 0x8a, 0x10, - 0x12, 0xc8, 0x59, 0x90, 0x90, 0x53, 0xbb, 0x23, 0xc9, 0x2a, 0x82, 0xd2, 0x5c, 0xa2, 0x2a, 0xe1, - 0x40, 0xda, 0x31, 0x89, 0x11, 0xe9, 0x18, 0x22, 0x1a, 0xe1, 0x40, 0xa9, 0x00, 0x10, 0x9b, 0x95, - 0x3c, 0x96, 0x1c, 0x91, 0x58, 0xb1, 0x8c, 0x04, 0x8a, 0x12, 0xaa, 0x31, 0xb8, 0x08, 0x2a, 0xa6, - 0x1c, 0x15, 0xba, 0x80, 0x21, 0x10, 0x89, 0xb0, 0x83, 0x2f, 0xf3, 0x18, 0x11, 0x9c, 0x33, 0xba, - 0x2b, 0xa3, 0x4d, 0xa6, 0x4b, 0xb0, 0x38, 0xe3, 0x4b, 0x92, 0x29, 0xb1, 0x29, 0xfa, 0x51, 0x88, - 0x90, 0x80, 0x1c, 0xa4, 0x49, 0xc1, 0x3a, 0xa1, 0x38, 0xa1, 0x0e, 0x09, 0x15, 0x2a, 0xba, 0x20, - 0xaa, 0x52, 0x91, 0x49, 0xd9, 0x40, 0xb1, 0x1c, 0x81, 0x04, 0xc0, 0x2c, 0x02, 0xca, 0x53, 0x9b, - 0x06, 0x9c, 0x11, 0x88, 0x98, 0x33, 0xc8, 0x1a, 0x84, 0x1c, 0x93, 0x09, 0x98, 0x24, 0xbc, 0x1a, - 0x84, 0x20, 0x9a, 0x87, 0x9a, 0x68, 0xb1, 0x98, 0x1c, 0x25, 0x8c, 0x93, 0x8c, 0x03, 0x0b, 0x07, - 0xa9, 0x00, 0x09, 0x82, 0x91, 0x0f, 0x14, 0x9a, 0x91, 0x39, 0x98, 0x15, 0x8d, 0x91, 0x09, 0x09, - 0x10, 0x83, 0x89, 0x5b, 0xa4, 0x0b, 0x91, 0x64, 0xb0, 0x3c, 0xc3, 0x99, 0x30, 0xe8, 0x31, 0x90, - 0x08, 0xb9, 0x38, 0xed, 0x64, 0xb8, 0x29, 0x88, 0xb3, 0x2c, 0x02, 0x30, 0xad, 0x14, 0x9a, 0x09, - 0xb2, 0x70, 0xf2, 0x28, 0x81, 0xaa, 0x41, 0x88, 0x01, 0xab, 0x62, 0xac, 0x83, 0x1a, 0x23, 0xcc, - 0x32, 0xaa, 0xa8, 0x63, 0x18, 0xba, 0x05, 0x8d, 0x12, 0xaa, 0x44, 0xb8, 0x38, 0xab, 0x86, 0x0c, - 0x11, 0x81, 0x8a, 0x80, 0xa9, 0x41, 0x1a, 0x07, 0x0c, 0xa0, 0x39, 0x93, 0xab, 0x1a, 0x27, 0x88, - 0xd9, 0x50, 0xc0, 0x39, 0x94, 0x1c, 0xb2, 0x4a, 0xc2, 0x48, 0xd1, 0x39, 0xb2, 0x2c, 0xa6, 0x1c, - 0x83, 0x89, 0x80, 0x18, 0x81, 0x09, 0x88, 0x88, 0x90, 0x24, 0x2c, 0xf9, 0x41, 0xb8, 0x48, 0xca, - 0x43, 0xb9, 0x39, 0xd3, 0x39, 0x01, 0xb8, 0x28, 0xaa, 0x25, 0xa8, 0x2a, 0x90, 0x27, 0x9f, 0x04, - 0x9c, 0x32, 0xb8, 0x31, 0xf9, 0x49, 0x91, 0x28, 0xb9, 0x10, 0xa1, 0x4b, 0xb2, 0x0a, 0x01, 0x09, - 0x27, 0x9f, 0x12, 0xa8, 0x51, 0xb9, 0x80, 0x20, 0x31, 0xac, 0x93, 0x6a, 0xc8, 0x42, 0xc8, 0x29, - 0x91, 0x90, 0x81, 0x0b, 0x32, 0xe5, 0x2b, 0x20, 0xd8, 0x30, 0x9a, 0x05, 0x8e, 0x12, 0xa9, 0x21, - 0x99, 0x63, 0xf9, 0x30, 0x99, 0x12, 0xb8, 0x0a, 0x84, 0x4c, 0xb2, 0x39, 0xb8, 0x49, 0x05, 0xcb, - 0x21, 0x98, 0xa9, 0x20, 0x51, 0xf8, 0x48, 0x90, 0x8a, 0x02, 0x2b, 0xa4, 0x0a, 0x1d, 0x06, 0x8b, - 0x81, 0x30, 0xc8, 0x39, 0x89, 0x86, 0x0d, 0x22, 0xc9, 0x10, 0x11, 0x89, 0xd0, 0x58, 0x98, 0x22, - 0xfa, 0x58, 0xb0, 0x39, 0xa1, 0x3c, 0xb1, 0x38, 0xb0, 0x4a, 0x90, 0x10, 0x02, 0x0e, 0xa8, 0x20, - 0x04, 0x2c, 0xc3, 0x3b, 0xa8, 0x34, 0xb0, 0x1b, 0x20, 0x22, 0xcf, 0x37, 0xad, 0x32, 0xc9, 0x00, - 0x80, 0x80, 0x09, 0xc1, 0x4d, 0xa3, 0x0a, 0x04, 0x8c, 0x13, 0xbb, 0x16, 0x0b, 0x00, 0xb0, 0x41, - 0x8a, 0x12, 0xd1, 0x59, 0xbb, 0x15, 0x09, 0x38, 0xf9, 0x30, 0xb8, 0x49, 0xc1, 0x48, 0xa8, 0x82, - 0x2b, 0xf1, 0x08, 0x51, 0xb1, 0x9b, 0x41, 0xb8, 0x41, 0x9a, 0x23, 0xba, 0x30, 0xc9, 0x38, 0x98, - 0x22, 0x1a, 0xe9, 0x3b, 0x86, 0x21, 0x8b, 0x81, 0x00, 0xa0, 0xaf, 0x35, 0xca, 0x51, 0xc8, 0x20, - 0xb9, 0x44, 0xad, 0x13, 0x1a, 0xa1, 0x0d, 0x13, 0x9a, 0x32, 0x9b, 0x82, 0x0c, 0x90, 0x06, 0x2e, - 0x93, 0x2a, 0xc8, 0x09, 0x60, 0x98, 0x03, 0xb8, 0x8a, 0x28, 0x14, 0xaa, 0x84, 0x7b, 0xc2, 0x9a, - 0x38, 0xd0, 0x32, 0xaa, 0x09, 0x85, 0x8e, 0x03, 0x3a, 0xf4, 0x38, 0x90, 0xa8, 0x32, 0x8b, 0x12, - 0xb8, 0x80, 0x11, 0x5c, 0xcf, 0x26, 0xaa, 0x08, 0x03, 0x9b, 0x80, 0x51, 0xd2, 0x1b, 0x84, 0x19, - 0x89, 0x91, 0x59, 0xc8, 0x10, 0x18, 0xd1, 0x18, 0x40, 0xb2, 0x1c, 0x84, 0x09, 0x99, 0x29, 0xd4, - 0x5b, 0x91, 0x88, 0xb0, 0x21, 0x02, 0x9f, 0xa7, 0x4a, 0xb2, 0x8a, 0x04, 0x1b, 0xa5, 0x1b, 0x84, - 0x0a, 0x11, 0xb8, 0x08, 0x4a, 0xb1, 0xa0, 0x50, 0xea, 0x52, 0xc8, 0x38, 0x91, 0x89, 0x28, 0x99, - 0x02, 0x9c, 0x27, 0xca, 0x29, 0x92, 0x19, 0x04, 0xa8, 0x0a, 0x00, 0x14, 0x8e, 0xa1, 0x58, 0xb8, - 0x53, 0xf9, 0x28, 0xa0, 0x40, 0xb1, 0x1a, 0xa8, 0x00, 0x25, 0x0a, 0xd2, 0x1b, 0x04, 0x9a, 0x60, - 0xa8, 0x11, 0x0c, 0x12, 0xcc, 0x58, 0x92, 0x09, 0x9a, 0x01, 0x10, 0x80, 0xb9, 0x79, 0xe2, 0x38, - 0x18, 0xc8, 0x49, 0x02, 0x91, 0x8e, 0x12, 0xb8, 0x58, 0xa1, 0x08, 0x9d, 0x32, 0xb4, 0x0c, 0x90, - 0x22, 0x29, 0xe0, 0x00, 0x0e, 0x84, 0x49, 0xb1, 0x0b, 0x01, 0x28, 0xc1, 0x2b, 0x08, 0x04, 0x30, - 0xbd, 0x13, 0x39, 0x07, 0xd9, 0x2b, 0x80, 0x22, 0xd3, 0x0e, 0x12, 0x8a, 0x04, 0xab, 0x12, 0x0d, - 0x07, 0x0b, 0x88, 0x08, 0x04, 0x89, 0xa8, 0x09, 0x33, 0xa9, 0xa0, 0x0e, 0x52, 0xa1, 0x0c, 0xa2, - 0x2c, 0x05, 0x09, 0xb2, 0x2d, 0x84, 0x8b, 0x33, 0xaf, 0x21, 0x91, 0x20, 0x8f, 0x92, 0x21, 0x08, - 0xaa, 0x02, 0x2b, 0x96, 0x0d, 0x93, 0xad, 0x61, 0x90, 0x90, 0x18, 0x0b, 0x84, 0x98, 0x12, 0x0d, - 0x12, 0xc0, 0x3a, 0xb2, 0x73, 0x99, 0x93, 0x9f, 0x02, 0x92, 0x4a, 0xb1, 0x9c, 0x44, 0xd8, 0x28, - 0x00, 0x90, 0x1b, 0x05, 0xcb, 0x18, 0x32, 0xb5, 0x1e, 0xa1, 0x39, 0x85, 0x8b, 0x01, 0x8b, 0x04, - 0x10, 0xd8, 0x18, 0x81, 0x19, 0x20, 0xbb, 0xa4, 0x9c, 0x72, 0xb4, 0x0d, 0x03, 0x88, 0x88, 0x9a, - 0x15, 0x88, 0x09, 0xc3, 0x0d, 0x15, 0x8c, 0x95, 0x0b, 0x81, 0x51, 0xc9, 0x29, 0xa2, 0x3b, 0x95, - 0x2b, 0x91, 0x09, 0x82, 0x59, 0xe8, 0x48, 0x81, 0x9a, 0x91, 0x4a, 0xc3, 0x1c, 0x06, 0x8c, 0x11, - 0xa9, 0x42, 0xc9, 0x31, 0xca, 0x21, 0x99, 0x21, 0x8d, 0x04, 0x1a, 0xc3, 0x3b, 0x80, 0x02, 0xaa, - 0x68, 0xa0, 0x80, 0x21, 0x12, 0xdf, 0x21, 0x81, 0x88, 0xab, 0x02, 0x01, 0x38, 0xe0, 0x79, 0xd1, - 0x39, 0xc3, 0x1a, 0x80, 0x32, 0xcb, 0x08, 0x12, 0x0e, 0x97, 0x2b, 0x93, 0x0c, 0x05, 0x9a, 0x91, - 0x3b, 0x87, 0x8b, 0x92, 0x2a, 0x93, 0x1b, 0x97, 0x8b, 0x11, 0xb0, 0x20, 0xb0, 0x78, 0x80, 0x88, - 0x1a, 0x81, 0x1b, 0xf3, 0x51, 0xab, 0x11, 0xa0, 0x00, 0x19, 0x33, 0x9d, 0x86, 0x9c, 0x32, 0xd0, - 0x31, 0x98, 0x0d, 0x04, 0x9c, 0x85, 0x29, 0xaa, 0x94, 0x0a, 0x38, 0xb3, 0x1d, 0x85, 0x1d, 0xa3, - 0x0d, 0x03, 0x08, 0x91, 0x0c, 0xb2, 0x2b, 0x27, 0x9b, 0xa0, 0x40, 0x92, 0x11, 0xcb, 0x10, 0x4b, - 0x87, 0x8d, 0x82, 0x0a, 0x14, 0xb8, 0x5b, 0xd1, 0x30, 0xb8, 0x20, 0xaa, 0x10, 0x11, 0x02, 0xce, - 0x41, 0xb1, 0x38, 0xd3, 0x2c, 0x92, 0x90, 0x1a, 0x43, 0xd9, 0x50, 0xc0, 0x39, 0xb1, 0x31, 0xa9, - 0x08, 0x91, 0xdb, 0x52, 0xa1, 0x3b, 0xc1, 0x39, 0xf1, 0x58, 0xa8, 0x28, 0xb2, 0x3e, 0xb1, 0x20, - 0x91, 0x2b, 0x82, 0xcc, 0x37, 0xdb, 0x32, 0xba, 0x30, 0xb8, 0x42, 0xca, 0x31, 0x9d, 0x25, 0xc9, - 0x30, 0xb8, 0x01, 0x8c, 0x23, 0x88, 0x11, 0xca, 0x10, 0xa9, 0x26, 0x8c, 0xa0, 0x31, 0xbc, 0x07, - 0x0a, 0x81, 0x8a, 0x14, 0xbb, 0x41, 0xca, 0x40, 0x93, 0x09, 0x99, 0x39, 0xe2, 0x44, 0xbb, 0x59, - 0xb5, 0x2d, 0xa3, 0x1b, 0x85, 0x8a, 0x13, 0xac, 0x82, 0x09, 0x14, 0x9e, 0x02, 0x88, 0x08, 0x08, - 0x14, 0xda, 0x41, 0xa8, 0x08, 0x80, 0x28, 0xc2, 0x08, 0x21, 0x9f, 0x05, 0x9a, 0x10, 0x13, 0xbc, - 0x14, 0x0e, 0xa2, 0x59, 0xb0, 0x40, 0xd9, 0x31, 0xb0, 0x2c, 0xa4, 0x08, 0x21, 0x9e, 0x82, 0x20, - 0xa9, 0x18, 0x05, 0x9c, 0x12, 0x8c, 0x05, 0x0b, 0x81, 0x08, 0x80, 0x9b, 0x54, 0xbc, 0x36, 0xc9, - 0x10, 0x89, 0x91, 0x28, 0x82, 0x0c, 0x99, 0x23, 0xcc, 0x35, 0xac, 0x43, 0xda, 0x39, 0xa1, 0x21, - 0x8b, 0x31, 0xf0, 0x09, 0x04, 0x2a, 0xa1, 0x39, 0xfa, 0x51, 0xb0, 0x3a, 0xb2, 0x59, 0xb1, 0x19, - 0xc3, 0x5b, 0xb4, 0x2b, 0xd3, 0x1a, 0x31, 0xc2, 0x1a, 0x8a, 0x04, 0x19, 0xf1, 0x39, 0xb1, 0x00, - 0x52, 0xc8, 0x2b, 0xa4, 0x38, 0xa1, 0x1d, 0x00, 0x12, 0xad, 0x88, 0x25, 0xb0, 0x3a, 0xa5, 0x0e, - 0x82, 0x18, 0xa9, 0x42, 0xdc, 0x32, 0x90, 0x8a, 0x03, 0x29, 0xb8, 0x82, 0x9e, 0x61, 0xb1, 0x2c, - 0x85, 0x0b, 0xb0, 0x31, 0xa2, 0x2b, 0x12, 0x9c, 0x07, 0x0e, 0x91, 0x88, 0x43, 0xcb, 0x11, 0x29, - 0xb1, 0x70, 0xd8, 0x11, 0x88, 0x99, 0x00, 0x80, 0x30, 0x89, 0xa6, 0x4c, 0x98, 0x93, 0x9c, 0x15, - 0x9a, 0x10, 0x02, 0xcc, 0x12, 0x6b, 0xa2, 0x19, 0xd8, 0x39, 0x80, 0x14, 0xac, 0x21, 0x81, 0x99, - 0xf2, 0x2f, 0x84, 0x0a, 0x93, 0x1b, 0xc9, 0x52, 0x90, 0x88, 0x19, 0x98, 0x05, 0x8b, 0x81, 0x3b, - 0x07, 0x9a, 0x0b, 0x01, 0x33, 0x89, 0x92, 0xc0, 0xcf, 0x31, 0x85, 0x8c, 0x00, 0x12, 0x8a, 0xd0, - 0x48, 0x90, 0x88, 0x33, 0xdc, 0x31, 0xc9, 0x40, 0x99, 0x22, 0xea, 0x32, 0x8b, 0x98, 0x83, 0x32, - 0xac, 0x81, 0xf0, 0x4a, 0x23, 0xad, 0x85, 0x1c, 0x81, 0x00, 0x92, 0x1d, 0x92, 0x88, 0x01, 0x8c, - 0x22, 0x12, 0xa0, 0x8f, 0xb2, 0x2a, 0x08, 0x23, 0xbc, 0x03, 0x79, 0xa1, 0xfa, 0x21, 0x10, 0xc0, - 0x00, 0xa8, 0x7a, 0xa5, 0x29, 0xb9, 0x21, 0x80, 0xd2, 0x69, 0xd0, 0x48, 0xa0, 0x28, 0x9b, 0x01, - 0x43, 0xba, 0xa8, 0x58, 0xa2, 0x68, 0xda, 0x08, 0x40, 0x90, 0x00, 0xb1, 0x0d, 0x31, 0xa2, 0xf2, - 0x3a, 0x00, 0x99, 0x05, 0x0c, 0xa3, 0x60, 0xa9, 0x08, 0x98, 0x11, 0x93, 0x1c, 0xba, 0x80, 0x17, - 0x0a, 0x23, 0xdb, 0x21, 0xdb, 0x04, 0x9b, 0x43, 0xa8, 0xa2, 0x3d, 0xe1, 0x30, 0x18, 0xb1, 0x2b, - 0xf9, 0x24, 0x1a, 0xa0, 0x01, 0xb0, 0x71, 0xaa, 0x82, 0x0c, 0x33, 0xb9, 0x88, 0xa0, 0x48, 0x2b, - 0x87, 0x1b, 0x01, 0xd8, 0x31, 0x9a, 0x8a, 0x07, 0x8c, 0x94, 0x2d, 0x93, 0xca, 0x52, 0x90, 0x8a, - 0x21, 0xb0, 0x3b, 0xd4, 0x78, 0xa0, 0x09, 0x12, 0xad, 0x43, 0xb8, 0x01, 0x9b, 0x25, 0x9e, 0x94, - 0x49, 0x99, 0x02, 0xa9, 0x10, 0x29, 0xe1, 0x31, 0xba, 0x19, 0x22, 0x90, 0x9c, 0x03, 0x60, 0xc2, - 0x2c, 0xc1, 0x59, 0xa0, 0x28, 0x82, 0x99, 0x9d, 0x26, 0xba, 0x20, 0x81, 0x8a, 0x97, 0x2e, 0xa1, - 0x10, 0x80, 0x20, 0xc8, 0x19, 0x98, 0x22, 0x1a, 0xb1, 0x01, 0x8f, 0x02, 0x19, 0x82, 0x33, 0x8d, - 0xc9, 0x80, 0x2a, 0x27, 0x48, 0xdd, 0x22, 0x9a, 0x22, 0x09, 0xd8, 0x32, 0xd8, 0x18, 0x88, 0x88, - 0x45, 0xd8, 0x08, 0x8a, 0x13, 0xab, 0x74, 0xc8, 0x29, 0xc3, 0x28, 0xc0, 0x41, 0xb8, 0x11, 0xb9, - 0x4a, 0x85, 0x9a, 0x25, 0x9d, 0x93, 0x2a, 0x90, 0x18, 0x88, 0x02, 0x9c, 0x84, 0x0e, 0x03, 0x98, - 0x3a, 0xd1, 0x2a, 0x95, 0x00, 0x88, 0x0b, 0x07, 0x9a, 0x1a, 0x54, 0xea, 0x22, 0x99, 0x29, 0xc8, - 0x24, 0x9b, 0x00, 0xa1, 0x19, 0x81, 0x59, 0xf0, 0x40, 0xaa, 0x02, 0xa0, 0x59, 0x90, 0x0b, 0x96, - 0x3a, 0xa1, 0x19, 0xa2, 0x3d, 0x96, 0x1a, 0x80, 0x10, 0xf9, 0x48, 0xb0, 0x29, 0xa3, 0x29, 0x99, - 0x32, 0xf9, 0x40, 0xaa, 0x22, 0xf1, 0x38, 0xa0, 0x11, 0x9b, 0x14, 0xba, 0x29, 0x00, 0x22, 0xd9, - 0x71, 0xb8, 0x30, 0xf9, 0x41, 0xd0, 0x38, 0xb0, 0x3a, 0xa3, 0x1e, 0x94, 0x19, 0xb0, 0x69, 0xc1, - 0x39, 0xa2, 0x19, 0x99, 0x30, 0xa1, 0x2b, 0x97, 0x2b, 0x88, 0x18, 0xf1, 0x40, 0x98, 0x09, 0xa4, - 0x1a, 0x92, 0x01, 0x9f, 0x84, 0x18, 0x00, 0xda, 0x48, 0xc0, 0x20, 0x08, 0x38, 0xc9, 0x21, 0x91, - 0x1b, 0x5b, 0xa4, 0x90, 0x9c, 0x18, 0x62, 0xe1, 0x48, 0xc8, 0x21, 0xa9, 0x12, 0x83, 0x1d, 0xd8, - 0x32, 0xeb, 0x60, 0xa0, 0x89, 0x02, 0x08, 0xb1, 0x29, 0xb1, 0x49, 0x03, 0xcb, 0x41, 0xad, 0x04, - 0x22, 0xbd, 0x10, 0x12, 0xaa, 0x31, 0xa8, 0x8d, 0x27, 0x9a, 0x01, 0xc0, 0x1a, 0x37, 0xbc, 0x82, - 0x30, 0xe9, 0x30, 0x98, 0xa1, 0x30, 0xc8, 0x09, 0x02, 0x0f, 0x04, 0xa0, 0x2b, 0xb8, 0x35, 0xd9, - 0x28, 0x91, 0x19, 0xb3, 0x2a, 0x21, 0xea, 0x53, 0xc9, 0x48, 0xe2, 0x2a, 0x91, 0x02, 0x1a, 0xb2, - 0x3a, 0xd8, 0x11, 0x90, 0x70, 0xb9, 0x08, 0x34, 0xbc, 0x29, 0x15, 0xac, 0x23, 0x9d, 0x22, 0x0b, - 0xa1, 0x63, 0xb1, 0x9f, 0x23, 0xd9, 0x58, 0x91, 0x98, 0x90, 0x00, 0x80, 0x02, 0xa0, 0x8a, 0x54, - 0xab, 0x24, 0xca, 0x08, 0x13, 0x1b, 0xb8, 0x85, 0x1f, 0x06, 0x0c, 0x98, 0x03, 0x0d, 0x82, 0x98, - 0x90, 0x52, 0xba, 0x10, 0x90, 0x15, 0x8c, 0x92, 0x01, 0x8e, 0x25, 0xab, 0xa6, 0x4b, 0x91, 0x09, - 0x91, 0x08, 0x98, 0x40, 0xc1, 0x08, 0x21, 0x9d, 0x32, 0xf0, 0x4a, 0x91, 0x18, 0xa8, 0x92, 0x3c, - 0xc1, 0x33, 0xa9, 0x88, 0x89, 0x95, 0x2b, 0xc4, 0x7a, 0xa0, 0x08, 0x00, 0x9e, 0x33, 0xc2, 0x29, - 0xa9, 0x39, 0xa4, 0x21, 0x98, 0x1d, 0xd2, 0x20, 0x08, 0x0a, 0xf2, 0x70, 0xc8, 0x19, 0x22, 0xc0, - 0x29, 0x90, 0x19, 0xa2, 0x49, 0x94, 0x9d, 0x11, 0x12, 0x8b, 0x95, 0x1c, 0x23, 0xc9, 0x5b, 0xe2, - 0x38, 0x90, 0x19, 0xb8, 0x03, 0x3e, 0x90, 0x83, 0x9b, 0x18, 0x34, 0xd8, 0xb9, 0x53, 0x1c, 0xa3, - 0xaa, 0x59, 0x89, 0x33, 0x90, 0xcb, 0x98, 0x70, 0xb1, 0x04, 0xba, 0x3e, 0x96, 0x88, 0x9a, 0x04, - 0x29, 0xa9, 0x01, 0x8a, 0xa3, 0x3a, 0x47, 0xec, 0x28, 0x11, 0x88, 0xa1, 0x89, 0x4b, 0xa5, 0x09, - 0x3a, 0x86, 0xac, 0x53, 0xc0, 0x19, 0x29, 0xc2, 0x39, 0xc0, 0x29, 0x85, 0x0a, 0x08, 0x8a, 0x03, - 0x1e, 0x84, 0x0a, 0x00, 0xc0, 0x52, 0x89, 0xb8, 0x31, 0xc1, 0x39, 0x89, 0xb0, 0x04, 0x38, 0xaf, - 0x05, 0x19, 0xa9, 0x20, 0xda, 0x34, 0x9d, 0x02, 0x99, 0x48, 0x83, 0xc9, 0x3a, 0xb1, 0x38, 0x83, - 0x22, 0x2d, 0xdb, 0x07, 0x2b, 0xb3, 0x0c, 0x13, 0xaa, 0xd1, 0x7a, 0xb1, 0x29, 0x92, 0xba, 0x51, - 0xb8, 0x32, 0xba, 0x62, 0xd9, 0x31, 0xa9, 0x48, 0x93, 0x8c, 0x48, 0xe3, 0x2b, 0x84, 0x8c, 0x33, - 0x9e, 0x11, 0x90, 0x18, 0x09, 0x92, 0x8a, 0x22, 0xac, 0x86, 0x0d, 0x83, 0x29, 0xa4, 0xbb, 0x34, - 0x9c, 0x93, 0x50, 0xb9, 0x80, 0x21, 0x2c, 0xe4, 0x3a, 0x84, 0x9c, 0x01, 0x80, 0x88, 0x31, 0xa7, - 0x1c, 0x90, 0x00, 0x83, 0x8d, 0x41, 0xaa, 0x85, 0x8a, 0x18, 0xb9, 0x46, 0x99, 0xa0, 0x4c, 0xb1, - 0x21, 0x09, 0x88, 0x81, 0xa9, 0x49, 0x1a, 0xc5, 0x7b, 0x92, 0xab, 0x38, 0x91, 0x82, 0x09, 0x93, - 0x1e, 0x18, 0xf2, 0x40, 0x0a, 0x92, 0x11, 0xd9, 0x09, 0x32, 0xe0, 0x52, 0x9c, 0x83, 0x0a, 0xb1, - 0x71, 0xc9, 0x00, 0x12, 0x9d, 0x04, 0x99, 0x00, 0x08, 0x10, 0x89, 0xf1, 0x59, 0xa2, 0x1b, 0x03, - 0x88, 0xc1, 0x4c, 0x91, 0xb1, 0x30, 0x31, 0xfb, 0x80, 0x11, 0x09, 0x13, 0xbf, 0x17, 0xaa, 0x28, - 0xb8, 0x30, 0x91, 0xb0, 0x79, 0xc8, 0x10, 0x11, 0x98, 0x81, 0x3a, 0xf2, 0x1a, 0x04, 0x1a, 0x90, - 0x14, 0xad, 0x30, 0xd3, 0x40, 0x89, 0x9b, 0x14, 0x9b, 0x38, 0x04, 0xbd, 0x34, 0xab, 0x98, 0x24, - 0x1d, 0xa2, 0x02, 0xad, 0x71, 0xa0, 0x2c, 0x95, 0x0a, 0x08, 0x92, 0x5a, 0xa8, 0x91, 0x3c, 0x87, - 0x8d, 0x02, 0x00, 0x8b, 0x83, 0x19, 0x91, 0x90, 0x4c, 0xa3, 0x8c, 0x11, 0x85, 0x8b, 0x0a, 0x06, - 0x8b, 0x22, 0xa0, 0x89, 0xa0, 0x36, 0x9e, 0xb0, 0x71, 0xb0, 0x18, 0x18, 0xc0, 0x49, 0x09, 0x95, - 0x1d, 0x80, 0x10, 0x20, 0xbc, 0x23, 0x08, 0xd8, 0x68, 0xa0, 0x1a, 0x95, 0x0a, 0x81, 0x08, 0x92, - 0x9b, 0x68, 0xc1, 0x40, 0xdb, 0x32, 0x1a, 0xc1, 0x38, 0x93, 0x8e, 0x00, 0x21, 0x8b, 0xb4, 0x4a, - 0xa2, 0x99, 0x43, 0x98, 0xbb, 0x60, 0x92, 0xda, 0x48, 0xb3, 0x2d, 0x92, 0x48, 0xda, 0x81, 0x40, - 0x98, 0xd1, 0x79, 0xb2, 0x0b, 0x13, 0xa9, 0x30, 0x0b, 0x13, 0xd8, 0x9a, 0x43, 0x10, 0xce, 0x41, - 0x89, 0xa2, 0x2c, 0x01, 0xf3, 0x59, 0xa0, 0x08, 0x98, 0x49, 0x92, 0x09, 0xa8, 0x42, 0xbb, 0x34, - 0xa9, 0x09, 0x13, 0x2e, 0xc5, 0x0b, 0x22, 0x00, 0x1a, 0xf1, 0x28, 0xa8, 0x88, 0x15, 0x0d, 0x03, - 0x89, 0xc8, 0x3a, 0x91, 0x44, 0x9c, 0x81, 0xa0, 0x1a, 0x15, 0x98, 0x18, 0xa9, 0x75, 0xbb, 0x04, - 0x1b, 0x23, 0xcd, 0x32, 0xb9, 0x18, 0xc1, 0x50, 0xa0, 0x2a, 0x93, 0x0c, 0x92, 0x89, 0x27, 0x9e, - 0x20, 0x82, 0x9c, 0x32, 0xa0, 0x5a, 0x90, 0xaa, 0x32, 0x9e, 0x03, 0x00, 0x1c, 0x82, 0x91, 0x9d, - 0x23, 0x18, 0xa3, 0xbb, 0x1c, 0x16, 0x9b, 0x73, 0xf1, 0x20, 0x8a, 0x11, 0xa9, 0x92, 0x08, 0x29, - 0xf3, 0x4b, 0xc1, 0x28, 0x81, 0x10, 0xc8, 0x4c, 0xe3, 0x49, 0x98, 0x01, 0x01, 0x8e, 0x94, 0x28, - 0xa9, 0x32, 0xb9, 0x5b, 0xb3, 0x2d, 0x92, 0x88, 0x18, 0x93, 0x1e, 0xd0, 0x28, 0x11, 0xe0, 0x31, - 0xab, 0x21, 0x11, 0xba, 0x09, 0x78, 0xc4, 0x18, 0x0b, 0x04, 0xda, 0x53, 0xb8, 0x11, 0xac, 0x30, - 0x95, 0x8c, 0x22, 0x09, 0xd0, 0x28, 0x91, 0x58, 0xc0, 0x38, 0xc8, 0x28, 0xa2, 0x5c, 0xb2, 0x0a, - 0x12, 0xc9, 0x40, 0x88, 0xa1, 0x68, 0xc1, 0x0b, 0x82, 0x38, 0x00, 0xaa, 0x09, 0x04, 0x0b, 0x63, - 0xaa, 0x94, 0xcc, 0x70, 0xc1, 0x28, 0x98, 0x18, 0x82, 0x2b, 0xa1, 0x09, 0x11, 0x71, 0xf8, 0x4a, - 0x80, 0x18, 0xca, 0x50, 0x81, 0x0c, 0x93, 0x28, 0xd9, 0x58, 0xa0, 0x18, 0x9a, 0x42, 0xc1, 0x18, - 0x80, 0x2a, 0xa1, 0x8b, 0x26, 0xbb, 0x18, 0x26, 0xac, 0x20, 0xa1, 0x88, 0x2b, 0x44, 0xf1, 0x5a, - 0x09, 0xa3, 0x8d, 0x41, 0x80, 0x98, 0xa9, 0x52, 0xb8, 0x29, 0xa6, 0x1a, 0xa9, 0x23, 0x89, 0xa9, - 0x80, 0x37, 0xad, 0x82, 0x2b, 0x05, 0xaa, 0x34, 0xd9, 0x39, 0x98, 0x04, 0xa8, 0x3d, 0x92, 0x0a, - 0xb0, 0x43, 0x3b, 0xe0, 0x20, 0xb1, 0x1d, 0x51, 0xd0, 0x00, 0x0b, 0x03, 0xa1, 0x1e, 0x95, 0x1b, - 0x81, 0x95, 0x0c, 0x91, 0x11, 0x08, 0xb8, 0x34, 0x8d, 0x01, 0x89, 0x12, 0x9b, 0x6a, 0xe2, 0x21, - 0x9e, 0x13, 0xa9, 0x20, 0xa8, 0x39, 0x83, 0xb1, 0x7c, 0xc3, 0x1b, 0x21, 0xd8, 0x49, 0x90, 0x81, - 0x89, 0x33, 0x9d, 0x90, 0x34, 0x9e, 0x21, 0x88, 0xac, 0x24, 0xa9, 0x01, 0x3b, 0xd3, 0x80, 0x3a, - 0x90, 0xf3, 0x7a, 0xa3, 0x8c, 0x24, 0xbb, 0x62, 0xb9, 0x11, 0x09, 0xa2, 0x1a, 0x88, 0x81, 0x31, - 0xeb, 0x03, 0x8f, 0x23, 0xda, 0x33, 0x9c, 0x02, 0x01, 0x1f, 0xa2, 0x09, 0x68, 0xa1, 0x99, 0x2b, - 0x97, 0x3a, 0x91, 0x9a, 0x32, 0xb9, 0x40, 0xaa, 0x15, 0x0b, 0x09, 0xb5, 0x2d, 0xc2, 0x5a, 0x92, - 0x0a, 0x91, 0x0b, 0x07, 0x0a, 0xa2, 0x0e, 0x05, 0x8c, 0x12, 0x8a, 0x92, 0x19, 0x91, 0x89, 0x4c, - 0xd0, 0x52, 0xa9, 0x20, 0x8a, 0x91, 0x30, 0x2b, 0xa5, 0x29, 0x8a, 0xb2, 0xbc, 0x62, 0x21, 0xc8, - 0x4a, 0xd2, 0x09, 0x20, 0x31, 0xfb, 0x38, 0x00, 0x0b, 0xc6, 0x5c, 0xa2, 0x29, 0xd8, 0x30, 0xa8, - 0x20, 0xb2, 0x4b, 0xc1, 0x09, 0x05, 0x8c, 0x02, 0x80, 0x10, 0xaa, 0x23, 0xdb, 0x69, 0x92, 0x9a, - 0x88, 0x33, 0xab, 0x30, 0xf0, 0x79, 0xb0, 0x18, 0x28, 0xc8, 0x34, 0xda, 0x30, 0x89, 0x11, 0xe0, - 0x3a, 0xc1, 0x30, 0xb1, 0x3c, 0xb2, 0x1c, 0x91, 0x64, 0x9b, 0x80, 0x12, 0x0e, 0x95, 0x1b, 0x94, - 0x09, 0x09, 0x94, 0x8a, 0x19, 0x15, 0x9c, 0x02, 0xac, 0x25, 0xa9, 0x11, 0x8c, 0x06, 0x9c, 0x12, - 0xa1, 0x1a, 0x82, 0x10, 0xab, 0x98, 0x35, 0xa8, 0x12, 0x8e, 0x84, 0x2a, 0x09, 0xf4, 0x28, 0x98, - 0x4b, 0xc2, 0x18, 0x08, 0x20, 0xf1, 0x40, 0xca, 0x32, 0xb1, 0x2d, 0xa3, 0x2a, 0xa4, 0x2e, 0x82, - 0xba, 0x45, 0x8c, 0x82, 0x1a, 0x88, 0x11, 0xc8, 0x28, 0x01, 0xb9, 0x24, 0x0e, 0x91, 0xa8, 0x22, - 0x9a, 0x06, 0xaa, 0x39, 0xa3, 0xac, 0x37, 0x8b, 0xa1, 0x0b, 0x16, 0x2b, 0xc4, 0x28, 0x9a, 0x08, - 0x00, 0x93, 0x4d, 0xf1, 0x3a, 0x93, 0x19, 0x09, 0xb0, 0x80, 0x73, 0xc9, 0x38, 0x98, 0x20, 0xf3, - 0x6b, 0xb8, 0x21, 0x00, 0x9a, 0x11, 0x9a, 0x22, 0x0b, 0xd4, 0x4c, 0x81, 0x82, 0x2a, 0xd8, 0x38, - 0x91, 0x7a, 0xe2, 0x2b, 0x83, 0x90, 0x2b, 0x92, 0x18, 0xc1, 0x1c, 0x16, 0xbc, 0x43, 0x89, 0x98, - 0x81, 0x29, 0x20, 0xf0, 0x5a, 0xa8, 0x40, 0xb8, 0x88, 0x71, 0xb8, 0x92, 0x5a, 0xc0, 0x32, 0xac, - 0x32, 0x9b, 0xb2, 0x41, 0x0d, 0xa4, 0x0a, 0x28, 0x93, 0x8a, 0x94, 0x0e, 0x23, 0x9a, 0x13, 0xbb, - 0xb9, 0x73, 0xa0, 0x21, 0x80, 0xb8, 0x40, 0xae, 0xa3, 0x59, 0x2b, 0xa7, 0x0b, 0x81, 0x89, 0x41, - 0xe3, 0x2a, 0x04, 0xab, 0x48, 0xd1, 0x30, 0xa0, 0x39, 0xc1, 0x89, 0x39, 0xb3, 0x44, 0xfb, 0x39, - 0xb0, 0x83, 0x2c, 0xc2, 0x40, 0x90, 0x88, 0x1c, 0xa1, 0x34, 0x19, 0xf8, 0x5a, 0x98, 0x01, 0x98, - 0x12, 0xb8, 0x28, 0x84, 0xfa, 0x38, 0x38, 0xb1, 0x04, 0xaf, 0x31, 0xc8, 0x20, 0x01, 0x99, 0x80, - 0x1e, 0x84, 0x99, 0x38, 0xa3, 0x1f, 0x92, 0xb9, 0x53, 0x2b, 0xb4, 0x29, 0x1c, 0xc4, 0x30, 0x9a, - 0x22, 0xb0, 0x82, 0x9e, 0x40, 0xd8, 0x30, 0x91, 0x9a, 0x18, 0x81, 0xb9, 0x47, 0x8c, 0x32, 0xf8, - 0x09, 0x20, 0x99, 0x49, 0xb5, 0x29, 0xc8, 0x58, 0xd2, 0x28, 0x88, 0x80, 0x08, 0x9a, 0x23, 0x0b, - 0x12, 0x05, 0xdb, 0x2d, 0x93, 0x13, 0x1c, 0xa2, 0xb0, 0x4d, 0xb0, 0x18, 0x10, 0x22, 0x95, 0xaf, - 0x11, 0x9a, 0x33, 0xf2, 0x29, 0x9a, 0x12, 0x91, 0x38, 0x28, 0xf9, 0x60, 0xd0, 0x28, 0x98, 0x58, - 0xa2, 0x10, 0xab, 0x08, 0x01, 0x10, 0x01, 0x8e, 0x96, 0x0e, 0x82, 0x88, 0x88, 0x32, 0x9a, 0xb5, - 0x1e, 0x83, 0x09, 0x11, 0x88, 0x0b, 0x95, 0x1f, 0x93, 0x8a, 0x01, 0x01, 0x18, 0x9f, 0x82, 0x41, - 0x9b, 0x96, 0x8a, 0x08, 0x18, 0x83, 0x3d, 0xd2, 0xa0, 0x79, 0xb1, 0x19, 0x83, 0x29, 0xd1, 0x19, - 0x10, 0xb8, 0x38, 0xa0, 0x20, 0x19, 0xd5, 0x2a, 0xbc, 0x52, 0x14, 0xad, 0x31, 0xfa, 0x21, 0x98, - 0x11, 0x19, 0xb3, 0x0e, 0xa2, 0x30, 0x2b, 0x97, 0x2b, 0xa1, 0x2b, 0xa2, 0x59, 0x94, 0x8d, 0x03, - 0xca, 0x41, 0xc9, 0x41, 0xb8, 0x29, 0x90, 0x28, 0x89, 0x27, 0xaa, 0x11, 0x9f, 0x84, 0x28, 0xbb, - 0x27, 0x9b, 0x92, 0x29, 0x90, 0x19, 0x8a, 0x16, 0x8a, 0xa8, 0x31, 0xca, 0x52, 0xbb, 0x15, 0x8d, - 0x32, 0xb8, 0x08, 0x05, 0x9d, 0x12, 0x98, 0x0a, 0x33, 0xd0, 0x39, 0xb1, 0x0e, 0x84, 0x2a, 0x81, - 0x8a, 0x42, 0xf0, 0x4b, 0xd2, 0x39, 0x11, 0xc8, 0x20, 0xab, 0x23, 0x00, 0x81, 0x20, 0xfb, 0x40, - 0x9c, 0x04, 0x89, 0x98, 0x03, 0x8f, 0x82, 0x80, 0x88, 0x40, 0xa8, 0x08, 0x8e, 0x03, 0x1c, 0x87, - 0x1a, 0x10, 0x99, 0xa9, 0x79, 0xa3, 0x1d, 0x04, 0xab, 0x02, 0xa0, 0x7b, 0x92, 0x19, 0x89, 0x00, - 0xbb, 0x17, 0x8a, 0x02, 0xbb, 0x30, 0x80, 0x1c, 0x94, 0x49, 0xd3, 0x28, 0x8a, 0xa0, 0x78, 0xb3, - 0x2c, 0x92, 0xca, 0x60, 0x98, 0x81, 0x29, 0xb4, 0x7b, 0xc0, 0x08, 0x01, 0x09, 0x03, 0xca, 0x38, - 0xaa, 0x04, 0x28, 0xc8, 0x88, 0xa2, 0x7d, 0xb1, 0x18, 0x42, 0xac, 0x23, 0xdc, 0x30, 0x08, 0x91, - 0x01, 0x0c, 0xa1, 0x14, 0x8d, 0x12, 0xb8, 0x24, 0x9f, 0x02, 0x88, 0x10, 0x99, 0x42, 0xa8, 0xaa, - 0x78, 0xa1, 0x19, 0x12, 0xcc, 0x42, 0xf8, 0x5a, 0xa1, 0x18, 0x08, 0xa1, 0x09, 0x92, 0x4a, 0xb8, - 0x14, 0x09, 0xa9, 0x62, 0xcb, 0x33, 0x98, 0x91, 0x9e, 0x91, 0x71, 0xa0, 0x80, 0x10, 0xe8, 0x20, - 0x99, 0x11, 0x10, 0xd2, 0x59, 0xb0, 0x1a, 0x82, 0x3b, 0x06, 0xc9, 0x22, 0xbd, 0x24, 0x9a, 0x23, - 0xa9, 0x82, 0xdb, 0x3a, 0x88, 0x47, 0x8c, 0x02, 0xea, 0x30, 0x08, 0x99, 0x13, 0x9b, 0x14, 0x99, - 0xaa, 0x71, 0x80, 0x81, 0x8d, 0x91, 0x30, 0xb0, 0x71, 0xda, 0x13, 0xab, 0x31, 0xc9, 0x40, 0x83, - 0x0e, 0xa2, 0x00, 0x08, 0x48, 0xc9, 0x14, 0xab, 0x81, 0x84, 0x0f, 0x02, 0xa1, 0x19, 0x81, 0x8d, - 0x92, 0x83, 0x2c, 0x32, 0xbc, 0x05, 0x8c, 0x80, 0x30, 0x83, 0xbb, 0x70, 0xd0, 0x08, 0x15, 0xaa, - 0x29, 0xc2, 0x32, 0xbc, 0x02, 0x3d, 0x95, 0x8b, 0x80, 0xd1, 0x58, 0x81, 0x20, 0xbc, 0x14, 0xab, - 0x42, 0x9a, 0x24, 0x98, 0x8a, 0xc1, 0x3a, 0xc9, 0x45, 0x90, 0xab, 0x84, 0x8b, 0x24, 0xa8, 0x90, - 0x2a, 0xd2, 0x3b, 0xf8, 0x22, 0x13, 0xab, 0x19, 0xf1, 0x4b, 0x05, 0x99, 0x11, 0xbb, 0x02, 0x1b, - 0x63, 0xda, 0x24, 0x8c, 0x00, 0x98, 0x11, 0x98, 0x19, 0x9a, 0x16, 0xba, 0x5b, 0xa4, 0x8c, 0x25, - 0x88, 0xa9, 0x92, 0x0f, 0x84, 0x08, 0x10, 0xb9, 0x28, 0xd1, 0x40, 0xb8, 0x38, 0x03, 0xb9, 0x2b, - 0xbb, 0x37, 0x02, 0xcc, 0x18, 0xa3, 0x9e, 0x44, 0xd1, 0x2a, 0xb3, 0x3b, 0xa2, 0x3b, 0x17, 0xaa, - 0x08, 0x91, 0x8d, 0x32, 0x22, 0xf1, 0x3b, 0xb2, 0x29, 0x09, 0x97, 0x9a, 0x34, 0xba, 0x80, 0x80, - 0x2c, 0x17, 0x8b, 0xb1, 0x49, 0xd0, 0x31, 0x8c, 0x05, 0x9a, 0x91, 0x19, 0x99, 0x05, 0x29, 0xb3, - 0x1d, 0x92, 0x98, 0x7b, 0xd2, 0x18, 0x12, 0x9b, 0x08, 0x03, 0xad, 0x23, 0xa9, 0x1a, 0xc3, 0x44, - 0x9f, 0x12, 0x18, 0x98, 0x08, 0x89, 0x08, 0x5b, 0xa4, 0x8a, 0x32, 0x9d, 0xa3, 0x3e, 0x33, 0xfa, - 0x30, 0xb8, 0x10, 0x5b, 0xb4, 0x5b, 0xa1, 0x18, 0x9c, 0x80, 0x42, 0xc0, 0x28, 0xa2, 0x8a, 0x8a, - 0x87, 0x2b, 0x99, 0x85, 0xa9, 0x30, 0x01, 0x02, 0x39, 0xfa, 0x0d, 0x93, 0x3a, 0x06, 0x09, 0x1a, - 0xf2, 0x38, 0x91, 0x0b, 0x90, 0x49, 0x94, 0x8a, 0x8f, 0x02, 0x00, 0x20, 0xa9, 0x0d, 0x85, 0x3b, - 0xa4, 0x2b, 0xb2, 0x58, 0xb8, 0x81, 0x9a, 0x42, 0x00, 0xdc, 0x26, 0xbb, 0x23, 0x9a, 0x04, 0xac, - 0x70, 0xb2, 0x8a, 0xa0, 0x51, 0x99, 0x12, 0x99, 0xa8, 0x60, 0x81, 0xab, 0x89, 0x68, 0xc0, 0x21, - 0xf9, 0x78, 0x90, 0x19, 0x90, 0x88, 0x58, 0xb1, 0x29, 0x99, 0x08, 0x20, 0xd2, 0x39, 0xc0, 0x29, - 0x11, 0xd8, 0x38, 0xc0, 0x25, 0xcc, 0x11, 0x21, 0x98, 0x8a, 0x00, 0x98, 0x91, 0x72, 0x90, 0x9d, - 0x23, 0x9a, 0x35, 0x9d, 0x91, 0x32, 0xcb, 0x15, 0x9b, 0x09, 0x53, 0x90, 0xbd, 0x11, 0x40, 0x91, - 0x0f, 0x93, 0x99, 0x30, 0xa3, 0x0e, 0x83, 0x2c, 0x85, 0xa9, 0x18, 0x82, 0x4a, 0xe0, 0x49, 0xb0, - 0x20, 0x98, 0x91, 0x3a, 0xa3, 0x1a, 0x98, 0xfb, 0x70, 0xc3, 0x8a, 0x83, 0x9d, 0x32, 0xa0, 0x81, - 0x4b, 0xc1, 0x31, 0xb0, 0x99, 0x51, 0xa2, 0x0f, 0xc2, 0x12, 0x2c, 0xb3, 0x8b, 0x81, 0x59, 0x90, - 0x02, 0x9f, 0x20, 0x13, 0xa9, 0x29, 0xd8, 0x50, 0xa2, 0x0a, 0xb1, 0x1f, 0x86, 0x19, 0xa8, 0xa2, - 0x70, 0xb9, 0x38, 0xb2, 0x2a, 0x38, 0xb4, 0x1b, 0x89, 0xa1, 0x54, 0xdb, 0x28, 0x93, 0x9a, 0x71, - 0xa9, 0x28, 0xa4, 0x32, 0x8f, 0xa1, 0x19, 0x85, 0x1a, 0xb8, 0x07, 0x0b, 0x92, 0x01, 0xea, 0x31, - 0xa8, 0x39, 0x91, 0xba, 0x36, 0xda, 0x29, 0xb1, 0x03, 0x1a, 0x00, 0x90, 0x29, 0x06, 0xbd, 0x02, - 0x38, 0x06, 0xb9, 0x10, 0xad, 0x06, 0x4b, 0x82, 0xcb, 0x11, 0x10, 0x9c, 0x82, 0x50, 0x90, 0x9d, - 0xa1, 0x62, 0x98, 0x08, 0x83, 0x9e, 0x30, 0x90, 0x03, 0xad, 0x34, 0xac, 0x22, 0x8c, 0x83, 0x90, - 0x4a, 0x99, 0x11, 0xc1, 0x51, 0xba, 0x24, 0x30, 0x9c, 0xe1, 0x1a, 0x13, 0x99, 0x0d, 0x85, 0x89, - 0x11, 0xca, 0x23, 0x18, 0x18, 0xcc, 0xa1, 0x3f, 0x94, 0x3b, 0xa3, 0x31, 0xaf, 0x13, 0xc8, 0x40, - 0x90, 0x2b, 0xb5, 0x2d, 0x95, 0x1a, 0xa3, 0x1b, 0x01, 0xab, 0x44, 0xa8, 0x10, 0x8c, 0x04, 0x8d, - 0x83, 0x8b, 0x14, 0x9c, 0x02, 0x91, 0x2b, 0xb1, 0x60, 0xa8, 0x13, 0xbd, 0x12, 0x0c, 0xc0, 0x52, - 0x80, 0x98, 0x59, 0xa9, 0x81, 0x83, 0x51, 0xab, 0xf3, 0x40, 0x09, 0xd9, 0x21, 0x1b, 0x93, 0x89, - 0x89, 0x01, 0x40, 0xb2, 0x99, 0x8b, 0x23, 0xdf, 0x07, 0x8c, 0x84, 0x9a, 0x52, 0xc9, 0x01, 0x10, - 0x80, 0x99, 0x01, 0xac, 0x23, 0x19, 0x17, 0xb8, 0x39, 0xc9, 0x13, 0x0c, 0x83, 0x99, 0x24, 0xac, - 0x03, 0xa9, 0x61, 0xb8, 0x29, 0x11, 0xd8, 0x20, 0xfb, 0x09, 0x82, 0x32, 0xd9, 0x2a, 0x35, 0xbd, - 0x23, 0xb2, 0x1b, 0x1c, 0x05, 0xb3, 0x5d, 0xa1, 0x18, 0x89, 0x23, 0xb9, 0xa5, 0x1f, 0x92, 0x0b, - 0x32, 0xe1, 0x49, 0xb9, 0x12, 0xbb, 0x07, 0x08, 0xaa, 0x00, 0x8b, 0x27, 0x1b, 0xa2, 0x08, 0xb9, - 0x50, 0xa0, 0x34, 0xba, 0x09, 0x8f, 0x03, 0xa3, 0x3c, 0xc2, 0x2a, 0xc8, 0x43, 0x0b, 0x82, 0xe8, - 0x40, 0xb9, 0x39, 0xa7, 0x29, 0x99, 0x83, 0x3c, 0xc1, 0x39, 0x14, 0xac, 0x13, 0xe8, 0x72, 0x9a, - 0x00, 0x88, 0x01, 0x39, 0xa8, 0xd1, 0x1a, 0x82, 0x79, 0xd1, 0x48, 0xb9, 0x30, 0xc8, 0x11, 0x20, - 0xd1, 0x38, 0xa1, 0x90, 0x58, 0xb1, 0x8b, 0x83, 0x29, 0x32, 0xac, 0xda, 0x29, 0x47, 0x8b, 0x18, - 0xf0, 0x39, 0xa1, 0x88, 0x80, 0x81, 0x2a, 0x86, 0x89, 0x9a, 0x22, 0x00, 0x07, 0xaf, 0x03, 0x08, - 0x21, 0xa9, 0x0d, 0x05, 0x19, 0xa8, 0x38, 0xf9, 0x22, 0x0d, 0x02, 0xa9, 0x22, 0x9b, 0x18, 0xa5, - 0x3c, 0xa5, 0x0c, 0x02, 0x9a, 0x48, 0xa1, 0x11, 0x2d, 0x84, 0x9a, 0xe1, 0x29, 0x40, 0x02, 0x89, - 0xd1, 0x2a, 0xb8, 0x49, 0x25, 0xbc, 0x23, 0x8d, 0x93, 0x18, 0x8a, 0x72, 0xc1, 0x08, 0x90, 0x98, - 0x48, 0xb9, 0x73, 0xb9, 0x28, 0x18, 0x91, 0x42, 0xbd, 0x05, 0x8c, 0x83, 0x2a, 0xb2, 0x49, 0xab, - 0x04, 0xb8, 0x89, 0x36, 0x9e, 0x43, 0x9b, 0x01, 0xb1, 0x0c, 0x28, 0x01, 0x24, 0xbc, 0x19, 0x07, - 0x9b, 0x21, 0x90, 0x90, 0xb4, 0x3e, 0xb1, 0x88, 0x21, 0x91, 0xa9, 0xbf, 0x47, 0xb8, 0x19, 0x80, - 0x08, 0x21, 0xbc, 0x83, 0x59, 0x84, 0x19, 0xfa, 0x1a, 0x01, 0x20, 0x88, 0x90, 0x59, 0xb0, 0x91, - 0x8b, 0x32, 0x17, 0xcd, 0x40, 0xa0, 0x08, 0x21, 0xb9, 0x02, 0x0c, 0x38, 0x97, 0xab, 0x14, 0x1b, - 0x82, 0x89, 0x80, 0x20, 0x31, 0xfa, 0x7a, 0xb8, 0x51, 0xa8, 0x20, 0xa9, 0x8a, 0x27, 0x0a, 0xfa, - 0x40, 0x88, 0x08, 0x81, 0xbb, 0x48, 0x91, 0x11, 0x89, 0x08, 0x38, 0x17, 0x8f, 0x01, 0x89, 0x41, - 0xb8, 0x30, 0xbc, 0x25, 0xa9, 0x18, 0x00, 0xe0, 0x11, 0x38, 0xe2, 0x18, 0xba, 0x42, 0x1c, 0xd3, - 0x29, 0x88, 0x80, 0x89, 0x23, 0xe8, 0x29, 0x20, 0xc0, 0x72, 0x98, 0xb8, 0x5b, 0x92, 0x21, 0xa1, - 0xce, 0x28, 0x02, 0x10, 0xbb, 0x84, 0x0a, 0x24, 0x9b, 0x17, 0xbc, 0x20, 0x20, 0x89, 0x0a, 0x47, - 0xac, 0x21, 0x91, 0x8b, 0x32, 0xb8, 0xab, 0x21, 0x43, 0xdb, 0x02, 0x0d, 0xa1, 0x71, 0x81, 0xb8, - 0x8b, 0x42, 0x20, 0xa9, 0xa9, 0x87, 0x2c, 0x21, 0xe3, 0x5b, 0x80, 0x01, 0xa9, 0x0b, 0x32, 0x0a, - 0x86, 0x9b, 0x89, 0x31, 0xf2, 0x31, 0x9d, 0xb2, 0x69, 0x84, 0xbb, 0x20, 0x91, 0x39, 0xfa, 0x48, - 0xc2, 0x20, 0xb8, 0x79, 0xb8, 0x30, 0xa2, 0xb8, 0x48, 0x29, 0xb3, 0x68, 0xc9, 0x1a, 0x81, 0x01, - 0x90, 0x7b, 0xc0, 0x81, 0x8c, 0x08, 0x33, 0x99, 0x14, 0x1a, 0xf2, 0x2b, 0x22, 0xc4, 0x1c, 0x95, - 0x0c, 0x81, 0x80, 0x48, 0xa9, 0x51, 0xb1, 0x38, 0xcc, 0x41, 0x98, 0x98, 0x20, 0xc1, 0x2a, 0x08, - 0x02, 0x09, 0x31, 0x12, 0xff, 0x30, 0x0b, 0x25, 0xc9, 0x38, 0xb9, 0x10, 0x82, 0x20, 0xf9, 0x60, - 0xb1, 0x9b, 0x14, 0x0b, 0x13, 0x3a, 0xea, 0x01, 0x20, 0x98, 0xa2, 0x20, 0x20, 0xc1, 0xb9, 0xff, - 0x51, 0x80, 0x10, 0xcb, 0x18, 0x10, 0x91, 0x30, 0xfb, 0x30, 0x00, 0xc0, 0x18, 0x59, 0xa0, 0x11, - 0x9c, 0x50, 0xc0, 0x09, 0x22, 0xa9, 0x19, 0x82, 0xb8, 0x4c, 0x89, 0x55, 0xc8, 0x49, 0xa8, 0x90, - 0x1c, 0xa2, 0x31, 0x9e, 0x14, 0x9d, 0x12, 0x09, 0x23, 0x08, 0xaa, 0x40, 0xf9, 0x88, 0x52, 0x98, - 0xa0, 0x49, 0xd9, 0x10, 0x22, 0x98, 0x2b, 0x94, 0x8c, 0x12, 0x8c, 0x33, 0xf0, 0x48, 0xb8, 0x08, - 0x10, 0x25, 0x9f, 0x01, 0x00, 0x1c, 0xa2, 0x39, 0x92, 0x3a, 0xe2, 0x5b, 0x81, 0x08, 0x80, 0x89, - 0xb9, 0x20, 0xa0, 0x75, 0xb8, 0x68, 0xa0, 0xbb, 0x62, 0x98, 0x11, 0xaa, 0x18, 0x01, 0x90, 0x35, - 0xdc, 0x08, 0x48, 0x84, 0x8c, 0x01, 0x98, 0x11, 0x8a, 0x11, 0xe0, 0x29, 0x08, 0x84, 0xfc, 0x40, - 0x82, 0x0c, 0x91, 0x28, 0xa9, 0x20, 0x89, 0x99, 0x98, 0x61, 0xa1, 0x0e, 0x85, 0x1a, 0x91, 0x9c, - 0x16, 0x89, 0x20, 0xa1, 0x9c, 0x32, 0x9a, 0x08, 0x87, 0x09, 0x10, 0xbc, 0x73, 0xc8, 0x30, 0xb8, - 0x19, 0x99, 0x4b, 0x07, 0x99, 0x01, 0x8b, 0x82, 0x98, 0x01, 0x23, 0xcb, 0x0b, 0x17, 0x99, 0x22, - 0xa0, 0x78, 0xe9, 0x29, 0x23, 0xa8, 0x00, 0x80, 0xae, 0x21, 0x93, 0x2a, 0xe3, 0x3a, 0x94, 0xbc, - 0x33, 0x9b, 0x05, 0x2a, 0x05, 0xaf, 0x11, 0x10, 0x91, 0x99, 0x38, 0x90, 0xb9, 0x19, 0x86, 0x0e, - 0x15, 0xbb, 0x81, 0x3c, 0x05, 0x90, 0x99, 0x29, 0x91, 0xa3, 0xaf, 0x42, 0x8a, 0x23, 0xbb, 0x92, - 0x99, 0x79, 0x12, 0x89, 0xa0, 0x78, 0xc1, 0x0a, 0x30, 0xa9, 0x43, 0xfb, 0x3b, 0x04, 0x11, 0xae, - 0x11, 0x01, 0x0c, 0x04, 0x9c, 0x21, 0x80, 0x23, 0xa2, 0xdf, 0x11, 0x00, 0x81, 0x08, 0x1b, 0x81, - 0xc3, 0x0b, 0x59, 0xd2, 0x18, 0x42, 0xa8, 0x9c, 0x51, 0xa3, 0x8e, 0x02, 0x8a, 0x13, 0x09, 0x24, - 0xcc, 0x8a, 0x33, 0x38, 0xb4, 0x9d, 0x32, 0xc9, 0x0a, 0x98, 0x07, 0x1d, 0x94, 0x99, 0x29, 0x91, - 0x32, 0xe9, 0x11, 0x0a, 0x02, 0xa8, 0x5a, 0xd2, 0x39, 0xb2, 0x9a, 0x3b, 0x27, 0xb8, 0x1d, 0xc1, - 0x31, 0xa1, 0x39, 0xca, 0x10, 0xd1, 0x51, 0xb8, 0xba, 0x71, 0xa3, 0x0c, 0x83, 0x09, 0x18, 0xb0, - 0x6a, 0xd1, 0x49, 0x88, 0x90, 0x08, 0x23, 0x0c, 0xe2, 0x39, 0x90, 0x21, 0xb1, 0x8f, 0x84, 0x39, - 0xa4, 0xba, 0x9d, 0x44, 0x80, 0x99, 0x00, 0xa9, 0x40, 0x38, 0xa6, 0x9d, 0x02, 0x4a, 0xb2, 0x30, - 0x8a, 0xb0, 0x0e, 0x11, 0x05, 0x0a, 0x91, 0x9c, 0x23, 0x98, 0x02, 0x08, 0x9f, 0x12, 0x29, 0xeb, - 0x30, 0x84, 0x1a, 0xba, 0xb2, 0x25, 0x1e, 0x85, 0xa9, 0x48, 0xb1, 0x3c, 0xb4, 0x38, 0x90, 0xba, - 0x12, 0x89, 0x43, 0xdb, 0x2a, 0xc4, 0x8d, 0x02, 0x99, 0x93, 0x73, 0xb0, 0xa9, 0x30, 0xb0, 0x59, - 0x93, 0x2c, 0xa7, 0x0a, 0x90, 0x20, 0x54, 0xf0, 0x08, 0x81, 0x98, 0x88, 0x11, 0x90, 0x18, 0x9c, - 0xb1, 0x70, 0x91, 0x08, 0xb0, 0x1a, 0x99, 0x59, 0xc2, 0x5a, 0x91, 0x33, 0x21, 0xcf, 0x02, 0x18, - 0x08, 0x31, 0xf3, 0x3d, 0xb2, 0x4b, 0xb2, 0x1c, 0x12, 0x88, 0xb2, 0x8f, 0x31, 0xc8, 0x41, 0xa0, - 0x88, 0x9a, 0x32, 0x94, 0x2b, 0xb0, 0x61, 0x0a, 0x87, 0x0a, 0x00, 0xc9, 0x29, 0x43, 0xd8, 0x2b, - 0x83, 0x89, 0x30, 0xca, 0xa5, 0x4b, 0x81, 0x80, 0xb8, 0x0c, 0x99, 0x68, 0x93, 0x3a, 0xb5, 0x4a, - 0x80, 0xba, 0x37, 0xac, 0x88, 0x10, 0x81, 0x51, 0xd0, 0x8b, 0x92, 0x3b, 0x87, 0x0a, 0x30, 0xe8, - 0x18, 0x90, 0x72, 0xd0, 0x18, 0x80, 0x08, 0x90, 0x02, 0x39, 0xd4, 0x1a, 0x11, 0xa8, 0x9d, 0x24, - 0x08, 0x01, 0xae, 0x38, 0xa3, 0x2c, 0x00, 0x18, 0xd0, 0x60, 0xa1, 0x0d, 0x38, 0x84, 0x80, 0x99, - 0x9b, 0x20, 0x43, 0x9a, 0x04, 0xbf, 0x23, 0xa0, 0x29, 0x98, 0x91, 0x41, 0xa0, 0xbd, 0x27, 0xba, - 0x21, 0x82, 0x08, 0xdf, 0x40, 0x92, 0x89, 0x30, 0xa8, 0xa1, 0x3a, 0x80, 0x41, 0xc1, 0x20, 0xec, - 0x29, 0x23, 0x2a, 0xf4, 0x8b, 0x81, 0x53, 0xb8, 0x20, 0xba, 0x51, 0xa0, 0xb0, 0x8f, 0x13, 0x12, - 0xc0, 0x09, 0x0c, 0x88, 0x17, 0x8a, 0xb8, 0x8b, 0x47, 0xa8, 0x09, 0x81, 0x01, 0x88, 0xb1, 0x0a, - 0x62, 0x99, 0x13, 0xae, 0x20, 0x03, 0x89, 0xfb, 0x69, 0xb0, 0x12, 0xcb, 0x32, 0xb9, 0x43, 0x90, - 0xc9, 0x2a, 0x05, 0x09, 0x19, 0x08, 0xc3, 0x6b, 0x01, 0xcb, 0x25, 0x9b, 0x23, 0xac, 0x20, 0x22, - 0xa9, 0x99, 0xa8, 0xcb, 0x7a, 0xc4, 0x38, 0xa0, 0x0d, 0x84, 0x0a, 0x3a, 0x04, 0x98, 0xb2, 0x3f, - 0xa5, 0x1a, 0x23, 0xcc, 0x20, 0x81, 0x09, 0x34, 0xbc, 0x1a, 0xa4, 0x0c, 0x34, 0xbb, 0x41, 0xaa, - 0x93, 0x0e, 0x30, 0xe3, 0x1a, 0x80, 0x02, 0x2b, 0x11, 0xa9, 0x08, 0xb0, 0x77, 0xc0, 0x10, 0xba, - 0x41, 0x21, 0xd0, 0x1b, 0xa2, 0x8c, 0x83, 0x8c, 0x33, 0x01, 0xd9, 0x10, 0xab, 0x62, 0x05, 0xbc, - 0x04, 0x0b, 0xa3, 0x59, 0x91, 0x1b, 0x96, 0x8b, 0x10, 0xa1, 0x31, 0xb8, 0x9a, 0x9b, 0x67, 0xaa, - 0x43, 0xb9, 0x18, 0x80, 0x00, 0xa1, 0x19, 0x29, 0xf0, 0x30, 0x80, 0x3b, 0xc2, 0x17, 0x0a, 0xea, - 0x40, 0xb8, 0x21, 0x19, 0xbb, 0x64, 0xc0, 0x19, 0x92, 0x0a, 0x01, 0x00, 0x21, 0xc9, 0x91, 0x8c, - 0x35, 0xbf, 0x26, 0xa8, 0x1a, 0x80, 0x21, 0x80, 0xb2, 0xaf, 0x14, 0xa9, 0x13, 0x82, 0x9e, 0x9a, - 0x62, 0xa1, 0x20, 0xca, 0x21, 0xb0, 0x1a, 0xa9, 0x26, 0x8b, 0x04, 0xba, 0x30, 0xa5, 0x0d, 0x24, - 0xba, 0x11, 0x9b, 0x14, 0x11, 0xce, 0x24, 0x9c, 0x83, 0x1c, 0xa2, 0x0b, 0x03, 0x2b, 0xb1, 0x8b, - 0x17, 0x0a, 0x23, 0x9f, 0x13, 0x0b, 0x21, 0xe9, 0x18, 0x0b, 0xa3, 0x5a, 0xd0, 0x19, 0x82, 0xba, - 0x8a, 0x93, 0x49, 0x09, 0x30, 0xf1, 0x5a, 0xb1, 0x0b, 0x84, 0xc8, 0x4a, 0xb1, 0x39, 0xe9, 0x1a, - 0x31, 0xa1, 0x81, 0x9e, 0x81, 0x8d, 0x11, 0x02, 0xba, 0x1b, 0xb0, 0x2b, 0xc1, 0x53, 0xb2, 0xaf, - 0x89, 0x11, 0x99, 0x81, 0xab, 0xb0, 0x23, 0x0f, 0xb3, 0x9c, 0x10, 0x9a, 0x9b, 0xb3, 0x0b, 0x8d, - 0x00, 0xb8, 0x9b, 0xb9, 0x0b, 0xa9, 0x9b, 0x7f, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, - 0xd0, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0xe0, 0x71, 0x89, 0x83, 0xfc, 0x2e, 0x47, 0xaf, - 0x14, 0x98, 0x89, 0x11, 0xab, 0x16, 0x0c, 0xa3, 0x88, 0x2a, 0x00, 0x54, 0xe1, 0x2b, 0x84, 0x1b, - 0xa3, 0x8a, 0x0a, 0x86, 0x0a, 0x83, 0x2c, 0xb8, 0xa2, 0x63, 0xba, 0x38, 0x98, 0x12, 0x00, 0x0f, - 0xb2, 0x71, 0xb8, 0x28, 0xc2, 0x19, 0x01, 0x88, 0x31, 0xf0, 0x69, 0xc0, 0x29, 0xa2, 0x2a, 0x03, - 0x9e, 0x30, 0xa0, 0x90, 0x83, 0x2c, 0xe1, 0x22, 0x8c, 0x86, 0x0c, 0x83, 0x0a, 0x13, 0x9f, 0x04, - 0x89, 0x88, 0x82, 0x19, 0xb9, 0x50, 0xb0, 0x43, 0xbc, 0x01, 0x12, 0x1c, 0xaa, 0x87, 0x19, 0x0a, - 0x82, 0xba, 0x55, 0x89, 0x91, 0x08, 0xda, 0x52, 0x8a, 0x81, 0x88, 0x91, 0x4d, 0xe3, 0x39, 0xd3, - 0x49, 0xb8, 0x18, 0x22, 0xbb, 0x32, 0xbc, 0x26, 0xab, 0x02, 0x19, 0x88, 0xb8, 0x37, 0x8d, 0x91, - 0x00, 0x41, 0x9c, 0x20, 0xd3, 0x2c, 0x12, 0x8a, 0xc4, 0x59, 0x99, 0x08, 0x01, 0xa0, 0x6b, 0xa0, - 0x19, 0x92, 0x2d, 0xd3, 0x38, 0xa8, 0x30, 0x80, 0x8a, 0x00, 0x05, 0xba, 0x40, 0xba, 0x25, 0xad, - 0x00, 0x06, 0x0a, 0x94, 0x1d, 0xb1, 0x28, 0x22, 0xbc, 0x04, 0x8b, 0x35, 0xbe, 0x33, 0xc8, 0x42, - 0x9c, 0x03, 0x9b, 0x30, 0x88, 0x10, 0xe2, 0x4b, 0xa2, 0x2a, 0x18, 0xb8, 0xa2, 0x79, 0xb0, 0x8b, - 0x07, 0x09, 0x59, 0xf1, 0x18, 0x11, 0x0a, 0x92, 0x08, 0x8b, 0x92, 0x38, 0xb0, 0x2d, 0x05, 0x23, - 0x9f, 0xa1, 0x2d, 0x84, 0x99, 0x32, 0xae, 0x23, 0x9a, 0x01, 0x2b, 0xb6, 0x28, 0x90, 0x0e, 0x22, - 0x9b, 0x12, 0x80, 0xb9, 0x22, 0x13, 0xbf, 0x48, 0x23, 0xc0, 0xa1, 0x2c, 0x0b, 0x07, 0x98, 0x11, - 0xdb, 0x48, 0xb2, 0x39, 0x98, 0x00, 0x6b, 0xc2, 0x8d, 0x11, 0x02, 0x80, 0x3c, 0xf3, 0x4d, 0x80, - 0x98, 0x20, 0x88, 0xa2, 0x3a, 0xea, 0x53, 0x99, 0x09, 0x15, 0xca, 0x10, 0x18, 0xa1, 0x18, 0xa1, - 0x9a, 0x79, 0xe1, 0x28, 0xb2, 0x19, 0x40, 0xd0, 0x8a, 0x51, 0x90, 0x2a, 0x96, 0x8b, 0xa2, 0x39, - 0xa3, 0x4a, 0x8c, 0x87, 0x0a, 0xb0, 0x42, 0x9a, 0x94, 0x3b, 0xd0, 0x10, 0x80, 0x10, 0x98, 0x9b, - 0x53, 0xb3, 0x0c, 0xa2, 0x8c, 0x63, 0xa0, 0x99, 0x3a, 0x91, 0x42, 0xf3, 0x1c, 0x22, 0xc1, 0x18, - 0xac, 0x73, 0xc1, 0x10, 0xc9, 0x21, 0x98, 0x21, 0xa3, 0x9b, 0x0f, 0x15, 0xcb, 0x32, 0x09, 0xa9, - 0x33, 0xad, 0x12, 0x0a, 0x17, 0xab, 0x18, 0x88, 0x20, 0xb3, 0x58, 0xf3, 0x1c, 0x02, 0x89, 0x1a, - 0x86, 0x0b, 0x13, 0xcc, 0x31, 0xa0, 0x80, 0x38, 0xf3, 0x19, 0x88, 0x62, 0xe9, 0x01, 0x59, 0xc8, - 0x11, 0x89, 0x11, 0xab, 0x34, 0xb0, 0x8c, 0x20, 0xb5, 0x5a, 0xa8, 0x09, 0x14, 0x9d, 0x13, 0x8a, - 0x02, 0x8a, 0x96, 0x1e, 0x81, 0x89, 0x06, 0x0c, 0x03, 0x8d, 0x02, 0x88, 0x08, 0x88, 0x30, 0xc5, - 0x0c, 0x81, 0x21, 0x88, 0x02, 0xbd, 0x32, 0xd8, 0x22, 0x89, 0x0d, 0x07, 0x19, 0x8d, 0x91, 0x48, - 0xb1, 0x28, 0xb0, 0x98, 0x48, 0x18, 0xa4, 0x0c, 0x22, 0x90, 0xbe, 0x70, 0x92, 0x1b, 0x84, 0x0e, - 0x92, 0x39, 0x01, 0xb0, 0x1c, 0x00, 0x05, 0x9e, 0x13, 0x9b, 0x33, 0xab, 0x85, 0x8d, 0x23, 0x8b, - 0x82, 0x89, 0x09, 0x1a, 0x13, 0xc0, 0x5b, 0xf0, 0x25, 0x9c, 0x01, 0x99, 0x33, 0x81, 0xda, 0x19, - 0x88, 0x10, 0x15, 0x0f, 0x81, 0x08, 0x88, 0xe4, 0x5b, 0xa1, 0x02, 0x8b, 0x00, 0x98, 0x15, 0x0c, - 0x92, 0x2b, 0x84, 0xb0, 0x1c, 0xa4, 0x5c, 0xb1, 0x83, 0x0d, 0x11, 0xc8, 0x32, 0x90, 0x0c, 0xb8, - 0x24, 0x8c, 0x02, 0x88, 0x32, 0x8f, 0xf3, 0x48, 0x90, 0x08, 0x00, 0x99, 0x30, 0xb2, 0x99, 0x79, - 0xd1, 0x39, 0xc2, 0x3b, 0xa1, 0x81, 0x30, 0xaa, 0xb5, 0x4a, 0x82, 0x1b, 0xd2, 0x28, 0x34, 0xcf, - 0x42, 0xab, 0x24, 0xba, 0x15, 0x8d, 0x02, 0xba, 0x33, 0x80, 0x0a, 0x99, 0x44, 0xfa, 0x61, 0xbb, - 0x23, 0xa9, 0x83, 0x8d, 0x81, 0x21, 0x11, 0x9e, 0x02, 0x0b, 0xb4, 0x7a, 0xb1, 0x88, 0x40, 0xa1, - 0x9c, 0x10, 0x05, 0x0b, 0x93, 0x1e, 0xa3, 0x2b, 0x86, 0x0c, 0x91, 0x30, 0xb1, 0x0f, 0x84, 0x1b, - 0x95, 0x0c, 0x93, 0x0c, 0x12, 0x08, 0xb8, 0x3c, 0x05, 0x8c, 0xb3, 0x6b, 0x91, 0x29, 0xa1, 0x1a, - 0x92, 0x89, 0x43, 0xd9, 0x10, 0x10, 0xb4, 0x0f, 0xa3, 0x29, 0x84, 0x8f, 0x84, 0x0a, 0x00, 0x80, - 0xb1, 0x5c, 0xb2, 0x19, 0xe0, 0x48, 0x92, 0x0a, 0xa1, 0x39, 0xb4, 0x1b, 0x05, 0x8a, 0x82, 0x39, - 0x80, 0xfb, 0x23, 0x0b, 0x05, 0xbb, 0x43, 0xfb, 0x30, 0xa9, 0x93, 0x2a, 0x12, 0xbc, 0x03, 0x2a, - 0x27, 0x8e, 0x82, 0x0b, 0x92, 0x3b, 0x10, 0x96, 0x08, 0x0f, 0xb6, 0x3a, 0x81, 0x09, 0x91, 0x0c, - 0x85, 0x0a, 0x98, 0x71, 0xc1, 0x29, 0x90, 0x09, 0x08, 0x03, 0x80, 0x8f, 0xa4, 0x01, 0x1c, 0x00, - 0x92, 0x10, 0xe8, 0x49, 0xb0, 0x98, 0x16, 0x8c, 0x11, 0xa9, 0x30, 0xa8, 0x28, 0x22, 0xa5, 0x89, - 0x2a, 0xab, 0x47, 0x8c, 0x12, 0xc8, 0x1a, 0x31, 0xf0, 0x59, 0xb0, 0x40, 0xc9, 0x29, 0x11, 0x0a, - 0xb4, 0x29, 0x99, 0x98, 0x20, 0x21, 0xf8, 0x42, 0x09, 0xcb, 0x24, 0x0b, 0x94, 0x20, 0x99, 0x9b, - 0x35, 0xa0, 0x08, 0x9d, 0x13, 0xac, 0x15, 0xbb, 0x42, 0xdc, 0x24, 0xa9, 0xa9, 0x62, 0x99, 0x83, - 0x1b, 0xa5, 0x29, 0xb2, 0x1f, 0x93, 0x2c, 0x95, 0x0c, 0x94, 0x0a, 0x10, 0xb1, 0x38, 0x80, 0xa3, - 0xac, 0x20, 0x83, 0x2f, 0xa0, 0x16, 0x9b, 0x81, 0xab, 0x74, 0xc8, 0x38, 0x80, 0x8b, 0x12, 0x89, - 0x01, 0x2d, 0xc7, 0x39, 0xb0, 0x29, 0x12, 0xb0, 0x2d, 0xd2, 0x48, 0x90, 0x19, 0xa5, 0x4c, 0xb1, - 0x10, 0xa0, 0x59, 0xb1, 0x39, 0xd8, 0x38, 0x90, 0x39, 0xe3, 0x1d, 0x13, 0x8c, 0x82, 0x9b, 0x32, - 0x01, 0x9f, 0x85, 0x19, 0xa0, 0x03, 0x9c, 0x23, 0x0b, 0x87, 0x9a, 0x88, 0x12, 0x9a, 0x23, 0xdb, - 0x43, 0xe8, 0x18, 0x00, 0x00, 0x1c, 0xb1, 0x32, 0xe8, 0x5b, 0x01, 0xd0, 0x30, 0xa0, 0x09, 0xc1, - 0x71, 0x98, 0x80, 0x8a, 0x03, 0x90, 0x3b, 0x90, 0xc1, 0x0c, 0x72, 0xd1, 0x1a, 0x02, 0x98, 0x22, - 0xad, 0x14, 0x99, 0x8a, 0x27, 0x9d, 0x13, 0x89, 0x91, 0x1b, 0x85, 0x19, 0xb8, 0x1c, 0x85, 0x8a, - 0x21, 0xe1, 0x29, 0x08, 0x94, 0xba, 0x5b, 0xa4, 0x38, 0xd9, 0x21, 0x8a, 0x87, 0x0a, 0x01, 0xc2, - 0x5b, 0x92, 0xb9, 0x29, 0x40, 0xc1, 0x08, 0x00, 0xa8, 0x18, 0x85, 0x1e, 0xa8, 0x23, 0x0c, 0x02, - 0xaf, 0x62, 0xa0, 0x80, 0x18, 0xb8, 0x62, 0xa9, 0x93, 0x1c, 0x11, 0xb8, 0x06, 0x0e, 0x81, 0x18, - 0x18, 0xa8, 0x21, 0xbc, 0x40, 0x01, 0xb9, 0x3b, 0x17, 0xa9, 0x28, 0x88, 0x30, 0xfa, 0x24, 0x9e, - 0x10, 0xa3, 0x59, 0xb0, 0x0c, 0x05, 0x9a, 0x82, 0x28, 0xe0, 0x59, 0xa0, 0x18, 0xa8, 0x48, 0x94, - 0x09, 0xa8, 0x4b, 0xb3, 0x31, 0x8c, 0x91, 0x08, 0x0a, 0xa6, 0x0c, 0x12, 0x22, 0xad, 0x90, 0x09, - 0x32, 0x88, 0x27, 0xcf, 0x14, 0xa9, 0x30, 0xb8, 0x30, 0xc3, 0x3a, 0xca, 0x32, 0x8b, 0x27, 0xab, - 0x20, 0xbb, 0x26, 0xba, 0x31, 0xa9, 0x19, 0x14, 0xcc, 0x0a, 0x17, 0x8a, 0x02, 0xac, 0x31, 0xa2, - 0x79, 0xc0, 0x38, 0xb1, 0x39, 0xb8, 0x1a, 0x27, 0x8d, 0xb2, 0x30, 0xaa, 0x49, 0xa4, 0x18, 0x8d, - 0x21, 0xa4, 0x8b, 0x10, 0x82, 0xbb, 0x35, 0xba, 0x19, 0xd9, 0x35, 0xa8, 0xa8, 0x71, 0x98, 0xa0, - 0x48, 0xb8, 0x48, 0x91, 0x10, 0xeb, 0x5a, 0xa3, 0x1a, 0x92, 0x0e, 0xa3, 0x68, 0xaa, 0x05, 0x2b, - 0x98, 0x92, 0x3a, 0xc8, 0x42, 0xb8, 0x3b, 0xe0, 0x20, 0x08, 0x22, 0xd9, 0x89, 0x30, 0x50, 0xf1, - 0x29, 0x11, 0xa9, 0xc9, 0x44, 0xba, 0x22, 0xa2, 0x7b, 0xe0, 0x38, 0xa2, 0x09, 0x89, 0x03, 0xc9, - 0x49, 0xb1, 0x58, 0x99, 0x08, 0xa6, 0x1d, 0xb1, 0x50, 0xa0, 0x0a, 0x62, 0xd8, 0x20, 0x0a, 0x83, - 0xa8, 0x29, 0x94, 0x8b, 0x20, 0xa3, 0x98, 0x28, 0x7c, 0xf1, 0x18, 0x88, 0x23, 0xcc, 0x21, 0x90, - 0x28, 0xa9, 0x03, 0x8f, 0x04, 0x2c, 0xb2, 0x1c, 0x04, 0x0a, 0x02, 0x8c, 0x33, 0xfc, 0x31, 0xb0, - 0x40, 0xbb, 0x43, 0xbb, 0x50, 0xa1, 0x28, 0x9b, 0x13, 0xb0, 0x1e, 0x03, 0xc0, 0x6b, 0xc2, 0x39, - 0xb8, 0x30, 0x01, 0x8a, 0xe3, 0x5b, 0x83, 0xab, 0xa3, 0x79, 0xb8, 0x02, 0x1a, 0x08, 0xc1, 0x33, - 0x8b, 0xe8, 0x48, 0x82, 0x88, 0x8f, 0x04, 0x09, 0x01, 0xbb, 0x24, 0x0e, 0x94, 0x09, 0x28, 0xc9, - 0x22, 0xa1, 0x1f, 0x91, 0x21, 0xc8, 0x29, 0x91, 0x09, 0x10, 0x12, 0xbc, 0x34, 0x09, 0x2b, 0x97, - 0x1b, 0x12, 0xbc, 0x21, 0x38, 0xfa, 0x52, 0xba, 0x22, 0x9c, 0x84, 0x0f, 0x93, 0x18, 0x91, 0x8c, - 0x11, 0x93, 0x30, 0x8f, 0x85, 0x0b, 0x01, 0xa0, 0x3a, 0xf1, 0x51, 0xc8, 0x38, 0x99, 0x24, 0xda, - 0x39, 0xb2, 0x39, 0x91, 0x0b, 0x04, 0x9b, 0x91, 0x41, 0xda, 0x50, 0xa2, 0x0b, 0x98, 0x14, 0x91, - 0x19, 0x09, 0xf1, 0x41, 0x9c, 0x11, 0xc2, 0x4b, 0x93, 0xab, 0x40, 0xc9, 0x72, 0xb9, 0x23, 0x9c, - 0x32, 0xfb, 0x22, 0xa8, 0x22, 0xba, 0x02, 0x8f, 0x06, 0x88, 0x09, 0xc0, 0x40, 0xa9, 0x33, 0xbd, - 0x23, 0x99, 0x31, 0xe9, 0x08, 0x49, 0xa2, 0xa2, 0x1d, 0x91, 0x09, 0x23, 0x98, 0x02, 0x8f, 0x24, - 0xea, 0x10, 0x28, 0x82, 0xcc, 0x31, 0x90, 0x1c, 0x96, 0x3a, 0xd2, 0x1a, 0x82, 0x0a, 0x29, 0x05, - 0xbb, 0x50, 0xb0, 0x40, 0x99, 0x00, 0x3a, 0xc4, 0x9b, 0x30, 0x91, 0x82, 0x7a, 0xc0, 0x88, 0x34, - 0x9b, 0xfa, 0x31, 0xb3, 0x4c, 0xc0, 0x28, 0xa1, 0x59, 0xa2, 0x0b, 0xa1, 0x38, 0x10, 0xf8, 0x6a, - 0xa2, 0x09, 0xa0, 0x02, 0x4a, 0xc2, 0x29, 0xab, 0x91, 0x00, 0x50, 0xa0, 0x98, 0x44, 0xbb, 0x30, - 0x29, 0x27, 0xfb, 0x41, 0xa9, 0x09, 0x03, 0x8d, 0x13, 0x89, 0x88, 0x99, 0xa2, 0x1f, 0x27, 0x9d, - 0x01, 0x28, 0xb9, 0x30, 0x00, 0xc3, 0x4c, 0xa2, 0x9a, 0x20, 0x9a, 0x47, 0x9d, 0x12, 0x88, 0x8b, - 0x05, 0x08, 0x98, 0x1a, 0xa7, 0x2c, 0xa1, 0x38, 0xa1, 0x1d, 0x93, 0x0a, 0x0a, 0x07, 0x90, 0x3b, - 0xd1, 0x28, 0xa1, 0x3a, 0x15, 0x9c, 0x83, 0x3d, 0xd0, 0x28, 0x10, 0x90, 0x89, 0x08, 0xa8, 0x13, - 0x70, 0xe1, 0x28, 0xa9, 0x31, 0xb8, 0x89, 0x30, 0x04, 0x89, 0x9f, 0x06, 0xab, 0x63, 0xd0, 0x38, - 0xa9, 0x22, 0x9b, 0x15, 0xac, 0x33, 0xdb, 0x51, 0xd8, 0x48, 0xa1, 0x08, 0x09, 0x11, 0x09, 0x90, - 0x98, 0x11, 0x2c, 0xb5, 0x10, 0x0e, 0x13, 0xac, 0x04, 0x0d, 0x85, 0x9a, 0x31, 0xca, 0x32, 0x88, - 0xaa, 0x03, 0x2c, 0x85, 0x8a, 0x81, 0x49, 0xf3, 0x5a, 0xd1, 0x29, 0x83, 0x0b, 0x83, 0x9f, 0x23, - 0x98, 0x00, 0x8b, 0x02, 0xba, 0x44, 0xab, 0x18, 0x80, 0x70, 0xe2, 0x2a, 0x82, 0x99, 0x05, 0x8c, - 0x10, 0x81, 0x81, 0x1a, 0xa8, 0x06, 0x0e, 0x04, 0xba, 0x22, 0x09, 0x98, 0xa1, 0x09, 0x45, 0xfb, - 0x11, 0x91, 0x0b, 0x83, 0x3b, 0xe4, 0x39, 0x90, 0x1b, 0x94, 0x39, 0x94, 0x8f, 0x95, 0x19, 0x82, - 0x9b, 0x20, 0xb8, 0x44, 0xca, 0x12, 0x9a, 0x43, 0xb0, 0x8c, 0x12, 0x90, 0x0d, 0x93, 0x32, 0xaf, - 0x15, 0xa9, 0x2a, 0xa1, 0x51, 0xb9, 0xb8, 0x70, 0xc2, 0x18, 0x90, 0x83, 0xab, 0x03, 0x7a, 0xd0, - 0x28, 0x94, 0x0c, 0x01, 0x00, 0x80, 0xab, 0x07, 0x2a, 0x92, 0x8f, 0x04, 0xaa, 0x32, 0xda, 0x22, - 0x9b, 0x13, 0xab, 0x13, 0x1a, 0x82, 0xc8, 0x08, 0x9a, 0x72, 0xb0, 0x25, 0xbc, 0x22, 0x2b, 0x93, - 0x99, 0x82, 0x6c, 0xd2, 0x6a, 0xc3, 0x2c, 0x94, 0x0b, 0x81, 0x08, 0xa0, 0x39, 0xf9, 0x41, 0xa9, - 0x30, 0xd2, 0x39, 0xb2, 0x3c, 0xa3, 0x09, 0x18, 0x0b, 0xa5, 0x49, 0x11, 0x9d, 0x94, 0x2d, 0x93, - 0x98, 0x04, 0x8e, 0x13, 0xab, 0x23, 0x9c, 0x04, 0x3b, 0xe8, 0x21, 0x9c, 0x11, 0x43, 0xeb, 0x08, - 0x12, 0x8b, 0x85, 0x0a, 0x03, 0xab, 0x04, 0x9a, 0x00, 0x38, 0xa1, 0xa0, 0xaa, 0x78, 0x01, 0xd3, - 0x29, 0x82, 0x88, 0xc0, 0x3e, 0x86, 0x9b, 0x14, 0x9c, 0x82, 0x2a, 0xb7, 0x3b, 0xb3, 0x28, 0xc9, - 0x39, 0xa4, 0x3b, 0xa6, 0x29, 0x9a, 0x82, 0x3a, 0xf3, 0x79, 0x88, 0x88, 0x89, 0x08, 0x84, 0x39, - 0x80, 0xbb, 0x81, 0x02, 0x41, 0xab, 0x94, 0x63, 0xcb, 0xa8, 0x42, 0x8c, 0xb4, 0x3a, 0x38, 0xf0, - 0x3a, 0xa3, 0x40, 0x9d, 0x14, 0xa8, 0x3a, 0xc4, 0x29, 0x82, 0x1b, 0x88, 0xa4, 0xb0, 0x4f, 0xa5, - 0x8a, 0x38, 0xe0, 0x10, 0x80, 0x22, 0xfa, 0x38, 0xa2, 0x88, 0x10, 0xa9, 0x12, 0x9b, 0x94, 0x2a, - 0xdb, 0x43, 0x04, 0xbc, 0x62, 0x90, 0x88, 0x09, 0x29, 0xd9, 0x51, 0xc0, 0x39, 0x9b, 0x16, 0xc9, - 0x68, 0xc9, 0x33, 0xca, 0x30, 0xb0, 0x58, 0xc8, 0x21, 0xa8, 0x28, 0x82, 0x9b, 0xa0, 0x33, 0x0e, - 0xa1, 0x02, 0x0f, 0x15, 0x9c, 0x32, 0xaa, 0x10, 0x90, 0x29, 0xd0, 0x48, 0x94, 0xac, 0x31, 0x98, - 0x28, 0x40, 0xe0, 0x08, 0x30, 0xd0, 0x29, 0x9a, 0x06, 0x0b, 0x05, 0x9e, 0x12, 0x0a, 0x23, 0xcb, - 0x82, 0x1b, 0x12, 0x91, 0x32, 0xcd, 0x48, 0xa2, 0x0c, 0x05, 0x0c, 0xa4, 0x1a, 0x92, 0xac, 0x45, - 0x9a, 0x81, 0x0a, 0x81, 0x09, 0x83, 0x8c, 0x42, 0xcb, 0x32, 0x82, 0x9f, 0x24, 0x89, 0xb1, 0x2a, - 0x04, 0x9e, 0x14, 0x0a, 0xb1, 0x1e, 0x23, 0xd9, 0x00, 0x18, 0xc3, 0x10, 0x2b, 0xf2, 0x49, 0xa0, - 0x32, 0xca, 0x19, 0x01, 0x28, 0xf8, 0x20, 0x89, 0x02, 0x92, 0x1c, 0x92, 0x51, 0x98, 0xd9, 0x08, - 0x29, 0x42, 0xf9, 0x39, 0x92, 0x3b, 0xb6, 0x3c, 0xc1, 0x79, 0xc1, 0x29, 0xa0, 0x30, 0xb2, 0x1b, - 0xa1, 0x0a, 0x15, 0xaa, 0xb8, 0x51, 0x10, 0xc0, 0x19, 0xb8, 0x72, 0xb1, 0x28, 0xa8, 0x50, 0xd1, - 0x38, 0xe3, 0x1c, 0x83, 0x28, 0xf1, 0x28, 0x19, 0x92, 0xa0, 0x19, 0x92, 0x09, 0x80, 0x3b, 0xf0, - 0x9c, 0x36, 0x98, 0x1d, 0xb2, 0x38, 0x89, 0x38, 0xc2, 0x20, 0x00, 0x9f, 0x85, 0x3a, 0xa4, 0x3c, - 0xf2, 0x3a, 0x10, 0x99, 0x21, 0xca, 0x38, 0x04, 0x9d, 0x02, 0x10, 0xc9, 0x40, 0xc1, 0x0c, 0x13, - 0x20, 0xe9, 0x10, 0x89, 0x23, 0xb8, 0x1b, 0xb3, 0x69, 0x88, 0x94, 0x9c, 0x22, 0x0b, 0xb5, 0x48, - 0x8d, 0x03, 0xad, 0x36, 0xcb, 0x21, 0x91, 0x1a, 0xa0, 0x58, 0x90, 0x81, 0x1a, 0xdb, 0x51, 0xc1, - 0x48, 0xd8, 0x20, 0x89, 0x04, 0xac, 0x31, 0xc8, 0x50, 0xa8, 0x21, 0xaa, 0x30, 0xa8, 0x15, 0xac, - 0x24, 0xa9, 0x1a, 0x94, 0x29, 0xe9, 0x50, 0xb1, 0x1b, 0x03, 0x8c, 0x85, 0x0c, 0x93, 0x1d, 0xa3, - 0x29, 0xc1, 0x49, 0xb2, 0x48, 0xb9, 0x02, 0x39, 0xb4, 0x1d, 0x93, 0x2b, 0x93, 0x39, 0xb7, 0x0f, - 0x83, 0x19, 0xc1, 0x3a, 0x90, 0x80, 0x01, 0x8c, 0x16, 0x9b, 0x43, 0xe9, 0x08, 0x10, 0x82, 0x8b, - 0x19, 0xe3, 0x79, 0xc0, 0x30, 0xb0, 0x5a, 0xa1, 0x09, 0x98, 0x61, 0xb1, 0x2a, 0xc9, 0x43, 0x8a, - 0x28, 0xc1, 0x0a, 0x32, 0xba, 0x03, 0x8d, 0x25, 0xa8, 0x89, 0x80, 0x99, 0x02, 0x1f, 0x96, 0x8c, - 0x03, 0x1b, 0xb1, 0x22, 0x11, 0x3b, 0xf3, 0x2b, 0x24, 0xad, 0x53, 0xc8, 0x49, 0xc1, 0x3a, 0xa3, - 0x08, 0x2b, 0xf2, 0x08, 0x30, 0xc0, 0x39, 0xd3, 0x38, 0xc9, 0x2a, 0x84, 0x18, 0xa0, 0x88, 0xcc, - 0x71, 0x92, 0x09, 0x0c, 0x15, 0x89, 0xa1, 0x19, 0xb0, 0x70, 0xd1, 0x39, 0xc0, 0x38, 0x02, 0xac, - 0x13, 0x8c, 0x14, 0x9c, 0x82, 0x89, 0x48, 0xb0, 0x03, 0x8f, 0x13, 0x0a, 0x12, 0xf9, 0x39, 0x01, - 0xab, 0x21, 0x14, 0xac, 0x15, 0xbb, 0x23, 0x1b, 0xa6, 0x2a, 0x98, 0x20, 0xae, 0x25, 0xaa, 0x41, - 0xba, 0x24, 0xbc, 0x23, 0x8c, 0x33, 0xfb, 0x20, 0x88, 0x38, 0xc1, 0x08, 0x00, 0x3d, 0x96, 0x0c, - 0x02, 0x9b, 0x04, 0x1b, 0x96, 0x0c, 0x83, 0x2c, 0x83, 0x8c, 0x14, 0x8c, 0xa1, 0x39, 0x02, 0x0a, - 0xa2, 0x4a, 0xeb, 0x41, 0xa0, 0x89, 0x28, 0xc4, 0x4b, 0xb2, 0x19, 0x88, 0x31, 0xa2, 0x8d, 0x83, - 0x9e, 0x72, 0xa0, 0x08, 0x90, 0x20, 0x89, 0x85, 0x9c, 0x53, 0xd9, 0x30, 0xc0, 0x3a, 0xa3, 0x4b, - 0xc4, 0x1a, 0xa8, 0x31, 0xe2, 0x39, 0x98, 0x83, 0x8b, 0x10, 0x15, 0x8b, 0xa2, 0x08, 0x82, 0x0f, - 0x33, 0xfb, 0x20, 0x89, 0x10, 0xa2, 0x0b, 0x51, 0xb1, 0x08, 0xb3, 0x2f, 0xc8, 0x24, 0x8c, 0x03, - 0x0d, 0x23, 0xea, 0x58, 0xa9, 0x21, 0x90, 0x8c, 0x33, 0xd9, 0x00, 0x49, 0xd2, 0x18, 0x00, 0x89, - 0xa3, 0x8e, 0x14, 0x98, 0x00, 0x98, 0x04, 0x0f, 0x06, 0x9b, 0x01, 0x18, 0x89, 0x81, 0x19, 0xb2, - 0x1c, 0x04, 0x0f, 0xb4, 0x3a, 0x93, 0xac, 0x03, 0x3b, 0xd2, 0x83, 0x5a, 0xd0, 0x28, 0x81, 0x20, - 0xd9, 0x30, 0x8b, 0x86, 0x89, 0x30, 0xd9, 0x32, 0x9c, 0x31, 0xea, 0x42, 0xba, 0x30, 0xda, 0x21, - 0x13, 0x8f, 0x82, 0x1b, 0x02, 0xa1, 0x2b, 0xd2, 0x29, 0x92, 0x43, 0xcd, 0x53, 0xba, 0x32, 0xc9, - 0x30, 0x89, 0x81, 0x9c, 0x22, 0x03, 0xad, 0x52, 0xe9, 0x41, 0xaa, 0x93, 0x2b, 0x95, 0x1d, 0x94, - 0x1a, 0x01, 0x8b, 0x13, 0xcb, 0x22, 0x8b, 0x06, 0x9d, 0x21, 0x91, 0x2a, 0x88, 0x05, 0xad, 0x40, - 0xa2, 0x29, 0x98, 0x39, 0xe2, 0x4b, 0xa5, 0x2a, 0x09, 0x84, 0x0b, 0x81, 0x8d, 0x16, 0xa9, 0xb9, - 0x60, 0x90, 0x89, 0x03, 0x0c, 0xa5, 0x4b, 0xb1, 0x3b, 0xa3, 0x11, 0x8a, 0x82, 0x0a, 0x04, 0x83, - 0x0e, 0x86, 0x9c, 0x12, 0xb8, 0x10, 0x80, 0x38, 0xf3, 0x70, 0xca, 0x21, 0xa0, 0x19, 0x93, 0x0b, - 0xad, 0x45, 0xa9, 0x20, 0xb9, 0x22, 0x0a, 0xb2, 0x20, 0x11, 0x78, 0xf9, 0x18, 0x48, 0xb0, 0x32, - 0xc9, 0xab, 0x41, 0xa2, 0x4a, 0xa8, 0x28, 0x87, 0x8d, 0x04, 0xaa, 0x33, 0xab, 0x03, 0x9f, 0x14, - 0x8b, 0x82, 0x9b, 0x36, 0xcb, 0x22, 0xb8, 0x4a, 0x80, 0xa2, 0x1a, 0x18, 0xf9, 0x62, 0x98, 0x00, - 0xa9, 0x82, 0x3a, 0xa1, 0xb2, 0x7b, 0xa7, 0x1c, 0x92, 0x18, 0x00, 0x80, 0x8d, 0xa3, 0x1c, 0x03, - 0x3a, 0xf2, 0x6b, 0x90, 0x09, 0x92, 0x3a, 0xb4, 0x2b, 0x94, 0x9c, 0x12, 0x10, 0x10, 0xfb, 0x41, - 0x89, 0x83, 0x8e, 0x05, 0x8c, 0x12, 0xa8, 0x08, 0x88, 0x49, 0xb3, 0x88, 0x0e, 0x85, 0x0a, 0x93, - 0x09, 0xba, 0x43, 0x01, 0x99, 0x8d, 0x14, 0xc0, 0x40, 0xbc, 0x42, 0xc8, 0x41, 0xb8, 0x10, 0x08, - 0x14, 0xa8, 0x9d, 0x32, 0x1a, 0xc4, 0x0d, 0x02, 0x0b, 0x96, 0x39, 0xd1, 0x2a, 0x85, 0x1b, 0xb1, - 0x19, 0x22, 0x9a, 0x99, 0x32, 0xbb, 0x49, 0x17, 0xcd, 0x20, 0x21, 0xc0, 0x31, 0x0c, 0xb3, 0x6b, - 0xb3, 0x1b, 0x91, 0x2a, 0x92, 0xc9, 0x8a, 0x71, 0xa2, 0x09, 0x8a, 0x95, 0x5d, 0xb4, 0x1a, 0xa1, - 0x39, 0xc1, 0x4a, 0xd0, 0x31, 0x88, 0x8c, 0x04, 0x1b, 0x90, 0x63, 0xc8, 0x19, 0x88, 0x13, 0x91, - 0x8f, 0x05, 0xab, 0x24, 0xac, 0x82, 0x28, 0x82, 0x9c, 0x82, 0x88, 0x72, 0xb8, 0x88, 0x39, 0xd3, - 0x5b, 0xc2, 0x19, 0x90, 0x32, 0xdb, 0x30, 0x98, 0x62, 0xc1, 0x19, 0x9a, 0x24, 0x99, 0x88, 0xa2, - 0x0b, 0x50, 0xb2, 0x9d, 0x41, 0xa0, 0x70, 0xd9, 0x28, 0x20, 0x98, 0xb1, 0x30, 0xb9, 0x2c, 0x27, - 0xbc, 0x11, 0x1a, 0xa5, 0x1b, 0x31, 0x80, 0xa0, 0x7b, 0xa3, 0xac, 0x28, 0x04, 0x0a, 0xc1, 0x3c, - 0x93, 0x88, 0x3a, 0xa5, 0x0b, 0x12, 0x9b, 0x9a, 0x18, 0x37, 0x4b, 0xf1, 0x3b, 0xb0, 0x63, 0xb9, - 0x41, 0xeb, 0x40, 0x80, 0x90, 0x2a, 0x03, 0x0a, 0x8a, 0xb2, 0x39, 0x31, 0x08, 0xf3, 0x0f, 0x11, - 0x89, 0x83, 0x8d, 0x33, 0xad, 0x22, 0xa8, 0x1c, 0x83, 0x21, 0xcb, 0x99, 0x43, 0x42, 0xb8, 0xb8, - 0x7b, 0xc1, 0x81, 0x5b, 0x86, 0x0d, 0x93, 0x0b, 0x11, 0xb9, 0x34, 0xa9, 0xb8, 0x09, 0x21, 0xa2, - 0x78, 0xc0, 0x09, 0x11, 0x00, 0xd8, 0x39, 0xb5, 0x5a, 0xc9, 0x22, 0x90, 0x2a, 0x86, 0x1a, 0xc0, - 0x40, 0xa8, 0x28, 0xca, 0x41, 0xb8, 0x4a, 0xb3, 0x9a, 0x79, 0x96, 0x2b, 0xd8, 0x38, 0x82, 0x0c, - 0x92, 0x59, 0xd9, 0x12, 0x90, 0x89, 0x00, 0x80, 0x93, 0xaf, 0x54, 0xa0, 0x19, 0xa8, 0x51, 0xb8, - 0x22, 0xcc, 0x33, 0xda, 0x48, 0xa1, 0x88, 0x1a, 0x06, 0xab, 0x51, 0xb0, 0x10, 0xaa, 0x13, 0x8d, - 0x01, 0x18, 0x90, 0x52, 0xcc, 0x11, 0x01, 0x98, 0x30, 0xab, 0x85, 0x69, 0xc0, 0x19, 0x22, 0x09, - 0x91, 0xcf, 0x33, 0x1b, 0xb2, 0x2d, 0x93, 0x0c, 0x14, 0xc8, 0x88, 0x69, 0xa2, 0xa9, 0x2b, 0x04, - 0xc0, 0x58, 0xb0, 0x09, 0x81, 0x60, 0xa0, 0x80, 0x1b, 0x06, 0xaa, 0x81, 0x59, 0xd0, 0x39, 0x84, - 0x99, 0x89, 0x02, 0x89, 0x10, 0xaa, 0x00, 0x12, 0xc9, 0x54, 0xcc, 0x30, 0xb5, 0x4c, 0xc8, 0x20, - 0x18, 0xbb, 0x45, 0x98, 0x29, 0xa0, 0x20, 0xa9, 0x44, 0xab, 0xc2, 0x1e, 0x03, 0x08, 0x10, 0xba, - 0x45, 0xda, 0x00, 0x30, 0xe9, 0x31, 0xb8, 0x09, 0x09, 0x15, 0x0c, 0xb4, 0x2d, 0x86, 0x9b, 0x03, - 0x8b, 0x15, 0x9b, 0x04, 0x8c, 0x93, 0x49, 0xa0, 0x19, 0x9a, 0x02, 0x39, 0xc1, 0x19, 0x43, 0x09, - 0xc1, 0x38, 0x8a, 0x93, 0x87, 0x9f, 0x82, 0x1c, 0xc3, 0x60, 0x9a, 0x03, 0x8b, 0x00, 0x92, 0x8b, - 0x51, 0x91, 0x8e, 0x05, 0x8b, 0x13, 0x99, 0xa0, 0x6c, 0xd2, 0x30, 0xc8, 0x48, 0x90, 0x08, 0x80, - 0x29, 0x88, 0xa3, 0x9c, 0x18, 0x01, 0xe8, 0x2b, 0xb0, 0x57, 0xab, 0x23, 0xba, 0x59, 0x82, 0x01, - 0x9d, 0x10, 0x91, 0x18, 0x9a, 0x01, 0x21, 0xc8, 0x4a, 0xa6, 0x6b, 0xb0, 0x10, 0xa9, 0x29, 0x42, - 0x81, 0xfb, 0x58, 0xb9, 0x02, 0x4a, 0xf1, 0x39, 0xc2, 0x58, 0xa8, 0x10, 0x18, 0x80, 0x99, 0x20, - 0xda, 0x22, 0x0c, 0x96, 0xab, 0x15, 0x8b, 0x05, 0x89, 0xa1, 0x1b, 0x94, 0x88, 0x24, 0x9f, 0x12, - 0x01, 0xcb, 0x48, 0xa1, 0x89, 0x21, 0x84, 0xbf, 0x33, 0x98, 0x80, 0x18, 0x10, 0xd1, 0x1a, 0xa3, - 0x4a, 0xd9, 0x83, 0x68, 0xdb, 0x22, 0x30, 0xe9, 0x30, 0xa9, 0x04, 0x8b, 0x82, 0x8a, 0x82, 0x18, - 0x80, 0xbc, 0x59, 0x07, 0x8b, 0xb2, 0x1b, 0x17, 0xbc, 0x52, 0xa9, 0x11, 0x29, 0xb0, 0x09, 0x72, - 0xb8, 0x09, 0x82, 0x08, 0x31, 0xf9, 0x29, 0x81, 0x31, 0xf0, 0x29, 0xb9, 0x04, 0x89, 0x88, 0x19, - 0x04, 0x8c, 0x34, 0xf0, 0x18, 0x11, 0xd1, 0x18, 0xa8, 0x00, 0x2a, 0xa5, 0x4b, 0xa3, 0x2b, 0xb2, - 0x2a, 0xf1, 0x79, 0xb0, 0x11, 0xa0, 0x1c, 0x83, 0x3a, 0xa1, 0x08, 0x9b, 0x87, 0x3d, 0xb3, 0x0b, - 0x01, 0x36, 0xea, 0x2a, 0x84, 0x1a, 0xc0, 0x29, 0x80, 0x01, 0x0e, 0x84, 0x1c, 0xa3, 0x59, 0xb0, - 0x4a, 0xd2, 0x59, 0xb0, 0x49, 0xa1, 0x0a, 0x81, 0x38, 0xb1, 0x30, 0xab, 0xa0, 0x79, 0xc1, 0x21, - 0x99, 0x92, 0x98, 0x19, 0xf0, 0x5a, 0x91, 0x02, 0x9f, 0x03, 0x8a, 0x51, 0xa9, 0x02, 0x5a, 0xc2, - 0x1a, 0x02, 0x9b, 0x15, 0x8a, 0xe2, 0x1c, 0x92, 0x73, 0xd8, 0x10, 0xa8, 0x31, 0xa8, 0x19, 0x98, - 0x30, 0xc0, 0x4b, 0xb3, 0x1c, 0x23, 0xb2, 0x1d, 0x9e, 0x16, 0x8a, 0x82, 0x1a, 0x93, 0x0c, 0x02, - 0x83, 0x9e, 0x42, 0xf8, 0x29, 0x91, 0x20, 0xa0, 0x09, 0x08, 0x30, 0xe3, 0x3a, 0x89, 0xd5, 0x59, - 0xb0, 0x01, 0x0a, 0x81, 0x18, 0x58, 0xf2, 0x1a, 0x01, 0x99, 0x02, 0x88, 0x21, 0xc9, 0x6a, 0xa3, - 0x39, 0xe8, 0x4a, 0x93, 0xac, 0x24, 0x89, 0xb8, 0x58, 0xc2, 0x38, 0x08, 0xdb, 0x32, 0xa8, 0x08, - 0x82, 0xbd, 0x25, 0x88, 0x8a, 0xd3, 0x48, 0x00, 0xba, 0x20, 0x83, 0x8c, 0x32, 0xa5, 0x1f, 0xb3, - 0x2a, 0x60, 0xb1, 0x19, 0x89, 0x19, 0xb0, 0x2d, 0x07, 0x0c, 0x81, 0x0a, 0x83, 0x49, 0xe9, 0x32, - 0xca, 0x30, 0x80, 0xca, 0x59, 0x85, 0x8b, 0x02, 0x98, 0xac, 0x62, 0xa2, 0x2c, 0xc3, 0x3b, 0x82, - 0x11, 0x8d, 0x14, 0xbb, 0x59, 0xb1, 0x8d, 0x24, 0x98, 0x09, 0xb2, 0x48, 0x90, 0x8a, 0x32, 0x91, - 0x9a, 0x1a, 0xa6, 0x1e, 0x84, 0x90, 0x8b, 0x89, 0x86, 0x48, 0xb9, 0xa3, 0x5c, 0xe0, 0x50, 0xa8, - 0x20, 0xa8, 0x11, 0xa9, 0x38, 0xf2, 0x48, 0x99, 0x80, 0x88, 0x61, 0xa8, 0x80, 0x81, 0x2b, 0x06, - 0xbc, 0x32, 0x9a, 0x99, 0x16, 0x9c, 0x11, 0x11, 0x18, 0xc9, 0x1b, 0x06, 0x80, 0x99, 0x40, 0xc3, - 0x19, 0x0c, 0xb4, 0x1b, 0x14, 0xc8, 0x09, 0x80, 0x70, 0xc8, 0x82, 0x3c, 0x96, 0x0a, 0x91, 0x09, - 0x10, 0x85, 0x9c, 0x00, 0x88, 0x92, 0x69, 0xd2, 0x29, 0x02, 0xd8, 0x11, 0x0a, 0x93, 0x0a, 0x94, - 0x1d, 0x80, 0x00, 0xc9, 0x29, 0x16, 0x0a, 0xc2, 0x1b, 0xa8, 0x64, 0x89, 0x01, 0xa9, 0x10, 0x50, - 0xf0, 0x19, 0x81, 0x88, 0x38, 0xd2, 0x4b, 0x91, 0x18, 0x84, 0x8c, 0xe0, 0x60, 0xb0, 0x21, 0xb8, - 0x3b, 0xa4, 0x3b, 0xb1, 0x2a, 0x07, 0xa8, 0x8c, 0x10, 0x03, 0x2c, 0x85, 0x9c, 0x31, 0xd0, 0x18, - 0x80, 0x11, 0xa0, 0x81, 0x8e, 0x84, 0x2a, 0x82, 0x69, 0xe1, 0x1a, 0x02, 0x2a, 0xb3, 0x1d, 0xa0, - 0x98, 0x51, 0x92, 0x0e, 0x84, 0x0c, 0x82, 0x8a, 0x18, 0x14, 0x9b, 0x02, 0xb9, 0x4a, 0x33, 0xc4, - 0x2a, 0xa9, 0x72, 0xe0, 0x4a, 0x91, 0x08, 0x00, 0x9b, 0x09, 0x13, 0x23, 0xad, 0x0a, 0x92, 0x62, - 0xac, 0x33, 0xa1, 0x0e, 0x18, 0x92, 0x8d, 0x52, 0xb1, 0x2b, 0x1b, 0x07, 0x0c, 0x20, 0xb8, 0x32, - 0xab, 0x24, 0x9a, 0xb8, 0x1d, 0x17, 0x0e, 0x91, 0x30, 0xb8, 0x38, 0x90, 0x8b, 0x04, 0x49, 0xa3, - 0xbd, 0x3b, 0x17, 0x8a, 0xb0, 0x33, 0x9f, 0x12, 0x90, 0x88, 0x8b, 0x25, 0xb0, 0x2a, 0x04, 0x19, - 0xd8, 0x51, 0xc8, 0x28, 0x0c, 0xc3, 0x2b, 0x25, 0x19, 0xe0, 0x2b, 0xa3, 0x5a, 0x82, 0x0c, 0xa1, - 0x4a, 0x88, 0x11, 0xb9, 0x48, 0x13, 0xfb, 0x29, 0x29, 0x81, 0x10, 0xb2, 0x2e, 0xe0, 0x70, 0xa0, - 0x09, 0x01, 0x8a, 0x81, 0x09, 0x08, 0x70, 0xc4, 0x0c, 0x03, 0xa9, 0x33, 0xbc, 0x05, 0x1c, 0x84, - 0x89, 0xc9, 0x41, 0x89, 0x02, 0x99, 0x1b, 0x80, 0x16, 0x0b, 0xc0, 0x19, 0x22, 0xb1, 0x1c, 0x14, - 0xad, 0x05, 0x9a, 0x01, 0x68, 0xd3, 0x2b, 0xa1, 0x19, 0x03, 0x09, 0xd8, 0x62, 0xa9, 0x09, 0x02, - 0x2a, 0xe2, 0x3a, 0xb2, 0x10, 0x8b, 0x06, 0x99, 0x1a, 0xc2, 0x6b, 0xa3, 0x29, 0x08, 0xf8, 0x48, - 0x80, 0x82, 0x1d, 0x93, 0x2c, 0xb0, 0x10, 0x08, 0x10, 0xd9, 0x20, 0x38, 0xf3, 0x30, 0x9c, 0x01, - 0x99, 0x72, 0xb0, 0x2b, 0xb2, 0x72, 0xc9, 0x00, 0x49, 0xd2, 0x1b, 0x02, 0x08, 0x90, 0x41, 0xab, - 0x40, 0x97, 0x1c, 0xb1, 0x69, 0xa2, 0x0c, 0xa3, 0x1a, 0x83, 0x08, 0x90, 0x1c, 0xb2, 0x68, 0xb1, - 0x0b, 0x52, 0x93, 0xae, 0x11, 0x09, 0xd8, 0x61, 0xa8, 0x02, 0x0c, 0x84, 0x1c, 0x91, 0x02, 0x00, - 0xbc, 0x33, 0x01, 0xf0, 0x5a, 0xb1, 0x88, 0x08, 0xa0, 0x31, 0x11, 0xaf, 0x12, 0x20, 0x88, 0x96, - 0x0d, 0x88, 0x23, 0xbc, 0x00, 0x29, 0x02, 0x33, 0xae, 0x93, 0x1f, 0x04, 0xa8, 0x8a, 0x33, 0x82, - 0x9e, 0x04, 0x1d, 0xa2, 0x10, 0x1b, 0x99, 0x85, 0x1c, 0xb3, 0x1b, 0x23, 0x88, 0x05, 0xaf, 0x31, - 0x91, 0x9b, 0x21, 0xc9, 0x13, 0x3d, 0xd3, 0x28, 0x8e, 0x15, 0x99, 0x19, 0x10, 0x81, 0x0a, 0x84, - 0x0d, 0x85, 0x9d, 0x14, 0x9b, 0x02, 0x2b, 0xa5, 0x1b, 0xa2, 0x28, 0x33, 0xcc, 0x02, 0x9f, 0x12, - 0x31, 0xca, 0xb0, 0x78, 0xb1, 0x10, 0x2a, 0x90, 0x01, 0xc8, 0x6b, 0xb3, 0x2d, 0x85, 0x8b, 0x01, - 0x99, 0x63, 0xda, 0x21, 0x98, 0x00, 0x1c, 0x85, 0xaa, 0x30, 0xb1, 0x08, 0x00, 0x61, 0xc8, 0x08, - 0x0b, 0x23, 0x0c, 0x95, 0x19, 0xb8, 0x9c, 0x37, 0x99, 0x81, 0x0d, 0x85, 0x8b, 0x04, 0x9b, 0x12, - 0x88, 0x81, 0x9d, 0x05, 0x2a, 0xb5, 0x0b, 0x02, 0x18, 0xd9, 0x18, 0x20, 0x81, 0x01, 0xea, 0x38, - 0x89, 0x37, 0x8d, 0x98, 0x00, 0x14, 0xbc, 0x22, 0x99, 0x13, 0x2b, 0xa5, 0xae, 0x12, 0x41, 0xe8, - 0x19, 0x04, 0x9a, 0x01, 0x90, 0x20, 0x8c, 0x02, 0x89, 0xca, 0x00, 0x73, 0xb0, 0x18, 0x89, 0x85, - 0x1e, 0x84, 0x98, 0x19, 0x83, 0x8c, 0x99, 0x00, 0x71, 0xa4, 0x8d, 0x03, 0x0d, 0x93, 0x2a, 0xa3, - 0x1b, 0x42, 0xeb, 0x02, 0x0c, 0x05, 0x8a, 0x08, 0xa1, 0x49, 0xc1, 0x08, 0x01, 0x02, 0x9a, 0x10, - 0x90, 0x68, 0x85, 0xad, 0x40, 0xd0, 0x18, 0x12, 0x9d, 0x14, 0x9b, 0x13, 0x8d, 0x04, 0x0a, 0xa1, - 0x18, 0x83, 0xaf, 0x05, 0x0b, 0x83, 0x89, 0x12, 0xaa, 0xab, 0x74, 0xa8, 0x08, 0x41, 0xb0, 0x99, - 0x09, 0x16, 0x0a, 0xa2, 0x98, 0x0c, 0xa9, 0x37, 0xad, 0x33, 0x9a, 0x95, 0x0c, 0x82, 0x20, 0x08, - 0xda, 0x21, 0xbb, 0x43, 0x08, 0xb0, 0x6b, 0xa3, 0x09, 0x9c, 0x00, 0x16, 0x8c, 0x01, 0x82, 0x8c, - 0x01, 0x16, 0xad, 0x12, 0x18, 0xb0, 0x8b, 0x34, 0xba, 0x15, 0x1d, 0x95, 0x0d, 0x12, 0x99, 0x88, - 0x89, 0x52, 0xd0, 0x29, 0x90, 0x91, 0x28, 0x31, 0xdc, 0x92, 0x40, 0x98, 0xa2, 0x3d, 0x83, 0x98, - 0x98, 0x29, 0x09, 0x17, 0x19, 0xd8, 0x0f, 0x13, 0x8a, 0x80, 0x0a, 0x27, 0xac, 0x80, 0x39, 0x85, - 0xa9, 0x40, 0xd0, 0x88, 0x30, 0x93, 0xcb, 0x50, 0xa1, 0x2a, 0xf9, 0x42, 0xa9, 0x10, 0x88, 0x28, - 0xc9, 0x34, 0x8a, 0xa3, 0x0f, 0x13, 0xca, 0x28, 0xa1, 0x21, 0x9a, 0xa1, 0x28, 0x29, 0xa6, 0x68, - 0xc8, 0x09, 0x90, 0x7b, 0xa2, 0x98, 0x2a, 0x04, 0xa8, 0x1b, 0x20, 0x03, 0xd8, 0x4c, 0xb9, 0x26, - 0x1a, 0x05, 0xac, 0x01, 0x00, 0xa0, 0x1b, 0x10, 0xb8, 0x34, 0xff, 0x33, 0xaa, 0x22, 0x9a, 0xa1, - 0x1b, 0x52, 0xd2, 0x09, 0x88, 0x22, 0xab, 0x33, 0x80, 0xda, 0x22, 0x8e, 0x85, 0x19, 0x91, 0x15, - 0xad, 0x52, 0xdb, 0x32, 0x09, 0xc8, 0x19, 0x04, 0xab, 0x03, 0xab, 0x36, 0xba, 0x11, 0xa8, 0x09, - 0x65, 0xd0, 0x08, 0x88, 0x11, 0x08, 0x98, 0x80, 0x49, 0xa1, 0x31, 0xce, 0x12, 0x61, 0xc9, 0x19, - 0x08, 0x04, 0xab, 0x21, 0xb1, 0x71, 0xda, 0x30, 0xc8, 0x58, 0x80, 0x89, 0x89, 0x11, 0x21, 0xf9, - 0x48, 0xa0, 0x00, 0x8a, 0x83, 0x19, 0x9b, 0x55, 0x80, 0xba, 0x29, 0x14, 0xca, 0x51, 0xc0, 0x20, - 0xad, 0x31, 0x02, 0x0b, 0x90, 0x22, 0xe9, 0x3b, 0xe0, 0x42, 0xb9, 0x02, 0x8e, 0x14, 0x0a, 0xb3, - 0x4b, 0xa8, 0x15, 0x9a, 0xb0, 0x7b, 0x01, 0x91, 0x1b, 0x08, 0x96, 0x1c, 0xc1, 0x38, 0x98, 0x22, - 0xaa, 0x80, 0x3b, 0x07, 0x1a, 0xb2, 0x1e, 0x82, 0xac, 0x33, 0x99, 0x59, 0xb3, 0xbb, 0x6b, 0x90, - 0x83, 0x71, 0xe1, 0x19, 0x88, 0x12, 0x0c, 0x86, 0x8a, 0x80, 0x91, 0x89, 0x3a, 0x83, 0x84, 0x09, - 0xde, 0x41, 0x98, 0x24, 0xac, 0x01, 0x80, 0x38, 0xf2, 0x2c, 0x83, 0x99, 0x01, 0xae, 0x33, 0x02, - 0x98, 0xac, 0x23, 0x1a, 0xb3, 0x98, 0x1f, 0x96, 0x1a, 0x92, 0x8a, 0x22, 0x92, 0x0a, 0xbf, 0x43, - 0x90, 0x12, 0xbd, 0x73, 0xa9, 0x91, 0x40, 0xaa, 0x81, 0x9a, 0x00, 0x3a, 0xa6, 0x68, 0xb0, 0xa9, - 0x72, 0x90, 0x98, 0x10, 0x81, 0xab, 0x08, 0x45, 0xf9, 0x38, 0xb1, 0x28, 0xc0, 0x38, 0x02, 0x9b, - 0xb9, 0x73, 0xc9, 0x41, 0x00, 0xb9, 0x28, 0x01, 0xb9, 0x2b, 0xf1, 0x61, 0x88, 0xa8, 0x29, 0x02, - 0x28, 0x96, 0x9f, 0x11, 0x82, 0x8c, 0x94, 0x2a, 0xa1, 0x40, 0xc8, 0x29, 0x02, 0x91, 0xda, 0x50, - 0xb8, 0x22, 0x0a, 0x93, 0x9a, 0x89, 0x00, 0x7a, 0xe2, 0x2a, 0x01, 0xb1, 0x2b, 0x28, 0x92, 0xfc, - 0x72, 0xc0, 0x10, 0x1a, 0x95, 0x1b, 0x81, 0x20, 0xca, 0x22, 0x8d, 0x04, 0x8a, 0x52, 0xf8, 0x19, - 0x01, 0x01, 0xbb, 0x21, 0x80, 0x48, 0xb9, 0x11, 0x0a, 0x06, 0xc9, 0x1a, 0xb3, 0x70, 0x99, 0xa0, - 0x70, 0xa1, 0x29, 0x08, 0xe9, 0x70, 0xb0, 0x10, 0x9a, 0x13, 0x29, 0xb8, 0x89, 0x18, 0x95, 0x2e, - 0xd3, 0x1a, 0x02, 0x81, 0x89, 0x88, 0x10, 0x05, 0x9a, 0x09, 0x94, 0xbc, 0x60, 0x92, 0x9a, 0x21, - 0x2c, 0xa7, 0x09, 0x39, 0xe3, 0x49, 0xa0, 0x82, 0x0f, 0x13, 0x98, 0xaa, 0x09, 0x63, 0xb0, 0x2a, - 0xb1, 0x39, 0xa9, 0x27, 0xac, 0x81, 0x61, 0x91, 0xba, 0x2c, 0x85, 0x98, 0x09, 0x22, 0xbb, 0x62, - 0xa0, 0x8a, 0x31, 0x81, 0x40, 0xe9, 0x98, 0x34, 0xbb, 0x13, 0x8f, 0x01, 0x80, 0x1a, 0xc4, 0x59, - 0xb9, 0x42, 0xc8, 0x21, 0x9d, 0x13, 0x18, 0xc9, 0x01, 0x28, 0x80, 0x2a, 0xf1, 0x51, 0x98, 0x88, - 0x88, 0xb8, 0x52, 0x24, 0xf0, 0x1c, 0x01, 0x03, 0xbd, 0x30, 0x80, 0x00, 0xb8, 0x19, 0x90, 0x41, - 0x21, 0x95, 0xdf, 0x12, 0x11, 0xd8, 0x39, 0x83, 0x88, 0x99, 0x19, 0x22, 0xc9, 0x53, 0xac, 0xa0, - 0x2a, 0x27, 0xaa, 0x2a, 0x96, 0x2b, 0xd2, 0x39, 0xb8, 0x72, 0xb8, 0x10, 0x0a, 0x00, 0x85, 0x0a, - 0x9a, 0x33, 0xbd, 0x16, 0x8a, 0xa0, 0x48, 0x81, 0x92, 0x0e, 0xa1, 0x48, 0xa8, 0x13, 0x99, 0x8f, - 0x33, 0xb9, 0x89, 0x42, 0x21, 0xea, 0x89, 0x30, 0xb1, 0x35, 0x8d, 0xa3, 0x9c, 0x13, 0x0c, 0x81, - 0xb2, 0x60, 0xe9, 0x21, 0xa9, 0x32, 0x98, 0x11, 0xf9, 0x49, 0x92, 0x1a, 0xa5, 0x3b, 0xc1, 0x8a, - 0x23, 0x81, 0xbd, 0x52, 0xc8, 0x38, 0xd3, 0x4a, 0x81, 0x80, 0x8b, 0x88, 0x1a, 0x05, 0x91, 0x0e, - 0x84, 0x19, 0xa0, 0x88, 0x52, 0xc1, 0x9a, 0x62, 0x98, 0x21, 0xa9, 0xa9, 0x7b, 0xd1, 0x19, 0x82, - 0x1b, 0x93, 0x0e, 0x13, 0xba, 0x72, 0x92, 0x8b, 0x98, 0x23, 0xbb, 0x61, 0x80, 0xa0, 0xa8, 0x49, - 0xa0, 0x28, 0x01, 0x4b, 0xf1, 0x3d, 0x58, 0xb0, 0xa1, 0x7b, 0xb8, 0x38, 0x81, 0x10, 0xc8, 0x1a, - 0x02, 0x89, 0x28, 0x81, 0x27, 0x9e, 0x01, 0x31, 0xdd, 0x22, 0x90, 0xb0, 0x3c, 0x02, 0x90, 0x89, - 0x09, 0x23, 0xab, 0x07, 0x2e, 0xb0, 0x21, 0x12, 0x8f, 0xb0, 0x34, 0x9a, 0xa0, 0x79, 0x83, 0xac, - 0x28, 0x98, 0x22, 0x88, 0xa8, 0x2e, 0xa5, 0x2b, 0x93, 0x08, 0x2a, 0x96, 0x99, 0x0d, 0x02, 0x20, - 0xc0, 0x8a, 0x31, 0x35, 0xdd, 0x12, 0x2a, 0xf0, 0x50, 0xb8, 0x20, 0x2b, 0xa3, 0x30, 0xda, 0x10, - 0x9b, 0x14, 0x8a, 0x2c, 0xb5, 0x28, 0x2a, 0xa5, 0xcb, 0x71, 0x90, 0x81, 0x8b, 0x91, 0x32, 0xa9, - 0x81, 0x48, 0xe0, 0x31, 0xab, 0xc9, 0x62, 0x80, 0x22, 0xcf, 0x21, 0x10, 0x91, 0x0d, 0xa2, 0x20, - 0x99, 0x88, 0x80, 0x08, 0x71, 0xe2, 0x88, 0x1a, 0x04, 0x12, 0xbd, 0x32, 0xaa, 0x84, 0x8c, 0x12, - 0x91, 0x2a, 0x92, 0xea, 0x3b, 0x37, 0xb9, 0x98, 0x59, 0x92, 0xb9, 0x59, 0xc1, 0x20, 0x19, 0xc0, - 0x29, 0xe9, 0x31, 0x23, 0xdd, 0x29, 0x02, 0x18, 0x84, 0x9c, 0x82, 0x80, 0x29, 0xb1, 0x8a, 0x52, - 0x84, 0xcf, 0x32, 0x90, 0x29, 0xa1, 0x1a, 0xc1, 0x33, 0x1c, 0xf8, 0x81, 0x39, 0x82, 0x8d, 0x02, - 0x08, 0x90, 0xab, 0x70, 0xe1, 0x4a, 0x13, 0xbb, 0x20, 0x11, 0xc9, 0x30, 0x3a, 0xc7, 0x0a, 0x00, - 0x04, 0x9d, 0x22, 0x10, 0xe9, 0x11, 0x99, 0x81, 0x28, 0xc0, 0x01, 0x0f, 0x93, 0x18, 0x10, 0xaa, - 0x17, 0x0e, 0x92, 0x1a, 0x01, 0x12, 0xa9, 0x8d, 0x90, 0x75, 0xa8, 0x99, 0x30, 0xb2, 0x0c, 0x03, - 0x1a, 0x19, 0xa5, 0x89, 0xbc, 0x73, 0xa3, 0x9b, 0xa8, 0x78, 0x91, 0x99, 0x42, 0xa8, 0x00, 0x1b, - 0xb4, 0x1a, 0x09, 0x17, 0xaa, 0xa9, 0x4a, 0x87, 0x88, 0x19, 0x00, 0x90, 0x2b, 0x05, 0x10, 0xfc, - 0x30, 0xa0, 0x29, 0xa0, 0x08, 0x42, 0xe9, 0x0a, 0x61, 0xc8, 0x31, 0x8b, 0xa3, 0x3a, 0x90, 0x53, - 0xbe, 0x52, 0x90, 0x09, 0xaa, 0x20, 0x33, 0xdb, 0x80, 0x50, 0xc1, 0x4a, 0x84, 0x9b, 0x09, 0x03, - 0x88, 0xbc, 0x31, 0x43, 0xe9, 0x09, 0x20, 0x93, 0x2c, 0xa3, 0x8c, 0x18, 0x07, 0x1d, 0xc2, 0x4a, - 0x01, 0xa8, 0x09, 0xa0, 0x60, 0xc8, 0x21, 0xa9, 0x13, 0x1c, 0x05, 0xba, 0x58, 0xd2, 0x5b, 0x91, - 0x8a, 0x08, 0x12, 0x01, 0xbc, 0x38, 0x82, 0x49, 0xa1, 0x28, 0xc8, 0x2d, 0xa6, 0x0d, 0x13, 0x1a, - 0x91, 0xb8, 0x3c, 0x94, 0x01, 0x0f, 0x04, 0x8c, 0x01, 0x20, 0xd8, 0x40, 0x99, 0x83, 0x8e, 0x02, - 0x90, 0x0a, 0x14, 0x99, 0xc0, 0x68, 0x90, 0x88, 0x30, 0xd8, 0x08, 0x88, 0x05, 0x0c, 0xa0, 0x41, - 0xa0, 0x80, 0x1d, 0x84, 0x09, 0x09, 0x04, 0x8b, 0xd0, 0x61, 0xb8, 0x08, 0x30, 0x02, 0xbc, 0x08, - 0x51, 0xd8, 0x22, 0x8c, 0x92, 0x1a, 0x84, 0x09, 0x49, 0xe2, 0x4a, 0xa0, 0x98, 0x3a, 0xb4, 0x69, - 0x88, 0x91, 0x9b, 0x73, 0x90, 0x09, 0x9a, 0xc1, 0x78, 0xb2, 0x0a, 0x32, 0x09, 0xc4, 0x2c, 0x81, - 0x80, 0xaa, 0x70, 0xb0, 0x0b, 0x63, 0xc8, 0x28, 0x88, 0x28, 0xc1, 0x1d, 0x04, 0x88, 0x98, 0x58, - 0xd0, 0x38, 0x91, 0x90, 0x18, 0xa9, 0x11, 0xc9, 0x7b, 0x93, 0x1a, 0xd2, 0x6a, 0xa2, 0x9a, 0x28, - 0x06, 0xbb, 0x01, 0x09, 0x01, 0x22, 0xdc, 0x00, 0x32, 0xba, 0x43, 0xfa, 0x40, 0x08, 0xc0, 0x29, - 0x08, 0x12, 0x21, 0xec, 0x88, 0x21, 0x28, 0xc4, 0x0c, 0x00, 0x04, 0x29, 0xe9, 0x00, 0x39, 0x94, - 0x99, 0x8a, 0x12, 0x0b, 0xc6, 0x2c, 0x92, 0x19, 0x31, 0xa6, 0x8b, 0x1a, 0x17, 0x9a, 0x89, 0x12, - 0x88, 0x22, 0xbc, 0x01, 0x0b, 0x35, 0xa2, 0xbe, 0x88, 0x71, 0xa3, 0x9e, 0x01, 0x04, 0x8b, 0x82, - 0x0a, 0xa0, 0x61, 0xb2, 0x9d, 0x09, 0x35, 0xa1, 0x0b, 0x80, 0x21, 0xb9, 0x48, 0x9b, 0x87, 0x2a, - 0xb1, 0x0a, 0x10, 0x83, 0x72, 0xfb, 0x18, 0x12, 0x99, 0xb9, 0x14, 0x1d, 0x04, 0x98, 0x1c, 0xb1, - 0x71, 0xb0, 0x19, 0x0a, 0xa5, 0x59, 0xc0, 0x18, 0x10, 0x91, 0x8a, 0x10, 0x90, 0x0b, 0x17, 0x1a, - 0xf0, 0x39, 0x93, 0x08, 0x8b, 0x05, 0x1a, 0xba, 0x05, 0x0e, 0x02, 0x88, 0x08, 0xb9, 0x2a, 0x07, - 0x58, 0xe8, 0x28, 0x90, 0x81, 0x2b, 0xc3, 0x4b, 0x92, 0x10, 0x99, 0x0a, 0x17, 0x9b, 0x82, 0xa8, - 0x3a, 0x26, 0xad, 0x03, 0x2b, 0xb2, 0x90, 0x28, 0xa8, 0xf1, 0x4a, 0x12, 0xcd, 0x31, 0x13, 0xaa, - 0x80, 0x8c, 0x07, 0x4b, 0xb0, 0x38, 0xf8, 0x49, 0xb3, 0x29, 0x89, 0x28, 0xa3, 0xad, 0x48, 0x02, - 0xd9, 0x11, 0x08, 0xe0, 0x40, 0xb2, 0x2d, 0x92, 0x01, 0xab, 0x98, 0x44, 0x19, 0xc0, 0x29, 0xa0, - 0x24, 0xac, 0x35, 0xdb, 0x08, 0x40, 0xd0, 0x29, 0x00, 0x02, 0x1d, 0xc2, 0x49, 0x80, 0xb8, 0x62, - 0xc9, 0x30, 0x98, 0x91, 0x0c, 0x24, 0xb8, 0x08, 0x08, 0x98, 0x28, 0xd1, 0x28, 0x42, 0xfc, 0x00, - 0x50, 0xa0, 0x99, 0x28, 0x13, 0xd0, 0x0a, 0x18, 0x12, 0x06, 0x9b, 0x10, 0xd8, 0x48, 0x82, 0x1b, - 0xdc, 0x61, 0xb0, 0x89, 0x20, 0x04, 0x99, 0xa1, 0x0b, 0x92, 0x61, 0x99, 0x98, 0x00, 0x5b, 0x94, - 0xba, 0x20, 0x52, 0xc2, 0xcb, 0x78, 0x90, 0x11, 0x9b, 0x32, 0xd9, 0x2a, 0x43, 0xc9, 0xb8, 0x72, - 0xa8, 0x90, 0x09, 0x93, 0x5b, 0xa5, 0x0c, 0x13, 0x98, 0x99, 0x88, 0x23, 0x8b, 0x26, 0xdd, 0x01, - 0x1b, 0x07, 0x80, 0x8a, 0x90, 0x3a, 0x85, 0x8a, 0x19, 0x93, 0x2b, 0x84, 0x8f, 0x00, 0x32, 0x81, - 0xdf, 0x21, 0x81, 0x08, 0x0b, 0x85, 0x0b, 0x22, 0xb1, 0x9e, 0x11, 0x30, 0xf3, 0x2b, 0x98, 0x32, - 0x99, 0x18, 0x14, 0xeb, 0x31, 0x88, 0xc0, 0x59, 0x81, 0x94, 0xaf, 0x14, 0x0a, 0x90, 0x39, 0x95, - 0x9c, 0x10, 0x18, 0xa3, 0x0d, 0x13, 0xba, 0x80, 0x61, 0xa8, 0x10, 0x89, 0xa3, 0x0c, 0x21, 0x05, - 0x0d, 0xb2, 0x69, 0xb1, 0x98, 0x61, 0xd0, 0x28, 0xb8, 0x30, 0xa8, 0x22, 0xab, 0xc1, 0x78, 0xa2, - 0x9a, 0x42, 0xd2, 0x1b, 0x01, 0xc1, 0x2b, 0x84, 0x23, 0xbc, 0x80, 0x40, 0xb3, 0x00, 0x8e, 0x84, - 0x0c, 0x12, 0xa0, 0x0a, 0x31, 0x13, 0xed, 0x1b, 0x85, 0x21, 0x8e, 0x93, 0x2b, 0xb2, 0x5b, 0x23, - 0xe8, 0x2a, 0x91, 0xc8, 0x5b, 0x83, 0x09, 0x02, 0x8d, 0x92, 0x39, 0x18, 0x04, 0x9d, 0xa0, 0x39, - 0xa3, 0x0a, 0x58, 0xa4, 0x1b, 0x99, 0xa2, 0x71, 0xc8, 0x44, 0xdb, 0x10, 0x18, 0x93, 0x19, 0xbb, - 0x88, 0x47, 0xeb, 0x21, 0x99, 0x03, 0xaa, 0x41, 0xa8, 0xa0, 0x51, 0x09, 0xb1, 0x3c, 0x15, 0xb9, - 0x9b, 0x22, 0x21, 0x1c, 0xb6, 0x2a, 0x9b, 0x45, 0x92, 0xdc, 0x2a, 0x84, 0x10, 0xfa, 0x38, 0x01, - 0xa0, 0x39, 0xb0, 0xaa, 0x70, 0x97, 0x8a, 0x98, 0x41, 0x91, 0x8a, 0x00, 0x10, 0x00, 0xd9, 0x09, - 0xca, 0x45, 0x18, 0xc8, 0x18, 0x29, 0x95, 0x0a, 0xaa, 0x16, 0xac, 0x24, 0xab, 0x10, 0x00, 0x33, - 0xca, 0x9b, 0x15, 0x10, 0xab, 0x13, 0xae, 0x32, 0x80, 0x8d, 0x85, 0x1d, 0x94, 0x29, 0xc8, 0x20, - 0xa8, 0x52, 0xa0, 0xa9, 0x20, 0xa8, 0x24, 0xcb, 0x10, 0x34, 0xfa, 0x19, 0x0a, 0x15, 0x19, 0xc1, - 0x9c, 0x42, 0x10, 0xd0, 0x2a, 0x22, 0xc9, 0x8a, 0x22, 0xc8, 0x5a, 0x93, 0x20, 0x9d, 0x82, 0x44, - 0xca, 0x18, 0x39, 0xa5, 0xad, 0x30, 0xa1, 0x50, 0xc9, 0x03, 0x8d, 0x02, 0x38, 0xe1, 0x0a, 0x22, - 0x80, 0x9a, 0x13, 0x99, 0x04, 0xae, 0x11, 0xa1, 0x4b, 0x14, 0xa8, 0x9a, 0x01, 0x35, 0xc0, 0x4a, - 0xfa, 0x11, 0x91, 0x0f, 0x04, 0x9a, 0x81, 0x28, 0xa0, 0x31, 0xa8, 0x90, 0xb0, 0x4a, 0x69, 0xb2, - 0x91, 0x1f, 0x92, 0x8b, 0x11, 0x25, 0xeb, 0x40, 0xb9, 0x11, 0x20, 0xa0, 0x13, 0x9f, 0x86, 0x08, - 0xa9, 0x08, 0x20, 0xc0, 0x23, 0xaf, 0x22, 0x89, 0x03, 0x82, 0x8d, 0x99, 0x02, 0x01, 0x1c, 0x00, - 0xd3, 0x2c, 0xc3, 0x7b, 0xa3, 0x2c, 0x84, 0xaa, 0x18, 0x08, 0x94, 0x2a, 0x95, 0x0e, 0x02, 0x0b, - 0x82, 0x01, 0xbc, 0x60, 0xc1, 0x1b, 0x23, 0x19, 0xc1, 0x2c, 0xa4, 0x4a, 0xb0, 0x21, 0xb8, 0x8e, - 0x04, 0x2b, 0x96, 0x1b, 0x03, 0xa0, 0x18, 0xab, 0x92, 0x49, 0x88, 0x21, 0xfa, 0x6a, 0xa2, 0x19, - 0xc9, 0x44, 0xba, 0x13, 0x8d, 0x80, 0x12, 0x80, 0xc2, 0x3c, 0xa8, 0x11, 0x01, 0xaa, 0x68, 0xa0, - 0x13, 0xbf, 0x33, 0x38, 0xc2, 0x8b, 0x91, 0x0b, 0x17, 0x1d, 0xd3, 0x3a, 0xb4, 0x5b, 0xb2, 0x2d, - 0x85, 0x19, 0xa9, 0x1b, 0x86, 0x89, 0x00, 0x0a, 0x92, 0x30, 0xa8, 0xb0, 0x4d, 0x84, 0x80, 0xbb, - 0x3a, 0x11, 0x07, 0x29, 0xb1, 0x8d, 0x80, 0x48, 0xe3, 0x0a, 0x33, 0x09, 0xfa, 0x38, 0xa3, 0x5a, - 0xa8, 0x02, 0xbb, 0x49, 0x02, 0xd9, 0x09, 0x49, 0xb3, 0x70, 0xd9, 0x21, 0x88, 0x20, 0xc1, 0x0b, - 0x33, 0x0b, 0x97, 0x8d, 0xa2, 0x58, 0xb1, 0x80, 0x0a, 0x21, 0x84, 0x9d, 0x01, 0x00, 0x88, 0x22, - 0xfa, 0x31, 0xf0, 0x39, 0x90, 0xad, 0x35, 0x98, 0xa8, 0x3a, 0x96, 0x19, 0x88, 0x11, 0x88, 0xca, - 0x14, 0x8b, 0xb2, 0x68, 0xb2, 0xac, 0x71, 0x80, 0xb1, 0x2a, 0x02, 0xc1, 0x0b, 0x49, 0x87, 0x0c, - 0x91, 0x28, 0xca, 0x43, 0x88, 0xbb, 0x01, 0x5a, 0x84, 0x89, 0x0a, 0x33, 0xfb, 0x51, 0xb8, 0x48, - 0x9a, 0x11, 0xb9, 0x40, 0x92, 0x6a, 0xd0, 0x28, 0x88, 0x10, 0xba, 0x42, 0xd9, 0x30, 0x92, 0x0d, - 0xb1, 0x62, 0xd9, 0x21, 0x98, 0x19, 0x82, 0x89, 0x02, 0x0e, 0x15, 0xab, 0x01, 0x28, 0x91, 0x89, - 0x88, 0x08, 0xf0, 0x6c, 0x95, 0x8a, 0x88, 0x30, 0x90, 0xaa, 0x31, 0x93, 0x9f, 0x11, 0xb3, 0x1d, - 0x84, 0x48, 0xe9, 0x20, 0x80, 0x81, 0x9b, 0x10, 0x03, 0xaf, 0x33, 0x81, 0xcc, 0x31, 0x00, 0xb1, - 0x80, 0x3c, 0xd1, 0x50, 0xb9, 0x61, 0xc9, 0x41, 0xa8, 0x19, 0xa9, 0x16, 0x9a, 0x81, 0xa0, 0x18, - 0x02, 0x70, 0xe8, 0x20, 0x0a, 0x92, 0x0c, 0x81, 0x80, 0x2b, 0x93, 0x43, 0x9e, 0x14, 0x88, 0x9a, - 0x11, 0x39, 0xd1, 0x3a, 0xd2, 0x2c, 0xa2, 0x61, 0xb0, 0x8a, 0x30, 0x08, 0x48, 0xf0, 0x1a, 0x28, - 0xa3, 0x42, 0xac, 0x02, 0x3a, 0xf3, 0x1e, 0x81, 0x81, 0x20, 0xb8, 0x38, 0xbd, 0x36, 0xb8, 0x08, - 0x01, 0xb2, 0x09, 0xad, 0x52, 0xa2, 0x2c, 0x93, 0xeb, 0x31, 0x89, 0x06, 0xbb, 0x51, 0x90, 0x80, - 0xac, 0x71, 0xa0, 0x28, 0x9a, 0x82, 0x8d, 0x05, 0x80, 0x88, 0xb0, 0x38, 0xc8, 0x22, 0x40, 0xa4, - 0x1d, 0xe0, 0x39, 0x91, 0x10, 0xa2, 0x8a, 0x91, 0x1f, 0x84, 0x11, 0x0a, 0xa9, 0x12, 0xbe, 0x10, - 0x43, 0x98, 0x23, 0xcd, 0x39, 0xc0, 0x79, 0xa2, 0x0a, 0x90, 0x18, 0x02, 0x8c, 0x12, 0x40, 0xc4, - 0x1d, 0x81, 0xa8, 0x39, 0xa3, 0x41, 0xcb, 0x11, 0x90, 0x82, 0xac, 0x64, 0xa8, 0x9b, 0x32, 0xba, - 0x33, 0x3a, 0xf2, 0x90, 0x2a, 0x12, 0x98, 0x02, 0x9c, 0x72, 0xf0, 0x29, 0x90, 0x38, 0x83, 0x1a, - 0xa4, 0xaf, 0x33, 0x8b, 0x07, 0x9d, 0x02, 0x91, 0x0c, 0x93, 0x48, 0xb1, 0x5a, 0xc0, 0x1b, 0x04, - 0x19, 0x80, 0x91, 0x2b, 0xa8, 0x86, 0x3c, 0xc2, 0x29, 0x00, 0xc0, 0x2b, 0x92, 0x69, 0x93, 0xba, - 0x68, 0xc0, 0x48, 0x90, 0x90, 0x19, 0xb1, 0x1b, 0x9e, 0x27, 0x9a, 0x22, 0xca, 0x19, 0x43, 0x9a, - 0x94, 0x1c, 0x92, 0x38, 0xc2, 0x0e, 0x12, 0x8c, 0x14, 0xbd, 0x43, 0x9a, 0x02, 0x18, 0xa9, 0x22, - 0x8a, 0x86, 0x0d, 0xa1, 0x12, 0xab, 0x05, 0xab, 0x08, 0x73, 0xb1, 0x0b, 0x04, 0x1b, 0xa5, 0x0c, - 0x15, 0x99, 0x00, 0xd9, 0x08, 0x24, 0x1b, 0xe1, 0x40, 0xda, 0x21, 0x98, 0x20, 0x08, 0x98, 0x31, - 0x89, 0xf1, 0x59, 0xa0, 0x09, 0x89, 0x33, 0xbe, 0x25, 0xa9, 0x28, 0xb1, 0x62, 0xb9, 0x18, 0x18, - 0xe2, 0x48, 0xb8, 0x21, 0x98, 0xcb, 0x54, 0x98, 0x08, 0x8a, 0xa5, 0x0f, 0x85, 0x1a, 0xa1, 0x28, - 0x02, 0xda, 0x11, 0x1b, 0x85, 0x8b, 0x92, 0xa9, 0x2a, 0x27, 0x08, 0x9b, 0x14, 0xca, 0x29, 0x18, - 0x07, 0xab, 0x13, 0x0a, 0xd8, 0x10, 0x21, 0xa1, 0x29, 0x8d, 0x97, 0x8f, 0x02, 0x12, 0x8b, 0x82, - 0x8a, 0xa9, 0x32, 0x52, 0xf1, 0x2a, 0x92, 0x19, 0xc9, 0x62, 0x98, 0x88, 0x0a, 0x14, 0xab, 0x22, - 0x15, 0x9f, 0x01, 0x2b, 0x82, 0xba, 0x73, 0xa0, 0x2b, 0x91, 0xa1, 0x2d, 0x95, 0x2b, 0xb2, 0x1a, - 0x44, 0xda, 0x22, 0x8a, 0x94, 0x1d, 0x81, 0xa8, 0x09, 0x70, 0xb1, 0x1a, 0x21, 0x91, 0xbb, 0x22, - 0x28, 0x9a, 0xa7, 0x4d, 0xc2, 0x3a, 0x02, 0xb0, 0x8b, 0x30, 0x97, 0x8d, 0x81, 0x30, 0x8a, 0x21, - 0xd1, 0x19, 0x99, 0x72, 0xa1, 0xbb, 0x54, 0xa9, 0xa8, 0x18, 0x04, 0x19, 0xc3, 0x48, 0xda, 0x29, - 0x15, 0x09, 0x99, 0x18, 0x19, 0x91, 0xaa, 0x92, 0x4a, 0x33, 0xa9, 0xff, 0x20, 0x20, 0xc5, 0x2b, - 0xa2, 0x28, 0xa0, 0x20, 0xf1, 0x39, 0x93, 0x89, 0xba, 0x68, 0x94, 0x8c, 0x53, 0xbb, 0x84, 0x3a, - 0x93, 0x0d, 0x92, 0x38, 0xf1, 0x1c, 0x01, 0x01, 0x89, 0x00, 0x82, 0x9d, 0xb0, 0x71, 0xc3, 0x09, - 0x13, 0xac, 0x12, 0x8a, 0x32, 0xb9, 0x44, 0x9b, 0xcc, 0x21, 0x08, 0x16, 0x8b, 0x01, 0xb8, 0x68, - 0xa0, 0x29, 0x90, 0x79, 0xf2, 0x3b, 0xa2, 0x48, 0xc1, 0x30, 0xd8, 0x1c, 0x85, 0x1b, 0xa2, 0x49, - 0x90, 0x89, 0x19, 0x01, 0x12, 0x0c, 0x86, 0xab, 0xa0, 0x78, 0x91, 0x88, 0x31, 0xb9, 0x10, 0xac, - 0x33, 0x1a, 0x17, 0x9e, 0x83, 0x8e, 0x12, 0x80, 0x20, 0xba, 0x82, 0x8f, 0x02, 0x89, 0x24, 0x08, - 0xe9, 0x80, 0x0a, 0x63, 0x80, 0x00, 0xb8, 0x1a, 0xb3, 0x7a, 0xb1, 0x2a, 0x84, 0x9b, 0xb8, 0x0d, - 0x47, 0x99, 0x00, 0x89, 0xc8, 0x49, 0x93, 0x28, 0x9d, 0x22, 0xc8, 0x29, 0xc3, 0x58, 0xb2, 0x1a, - 0xb0, 0x2a, 0x82, 0x72, 0xb3, 0x0d, 0x02, 0x9b, 0x83, 0x8c, 0x01, 0x08, 0x83, 0xaa, 0xab, 0x37, - 0x23, 0xba, 0xb8, 0x1d, 0x95, 0x39, 0xd8, 0x08, 0x00, 0x78, 0xf3, 0x1b, 0x03, 0x0c, 0x06, 0x8b, - 0x01, 0x99, 0x38, 0x90, 0x13, 0x9a, 0x12, 0xc9, 0x9d, 0x41, 0x00, 0x83, 0x9f, 0x04, 0x9c, 0x41, - 0x80, 0x00, 0x9c, 0x22, 0xd8, 0x39, 0xd1, 0x28, 0x22, 0xeb, 0x01, 0x09, 0x20, 0x14, 0xca, 0x11, - 0x9c, 0x24, 0x98, 0x89, 0x88, 0x50, 0xb5, 0x1c, 0xc0, 0x48, 0x92, 0x1a, 0xe2, 0x3a, 0x94, 0x89, - 0x81, 0x0c, 0x16, 0x9a, 0x98, 0x08, 0x11, 0x01, 0x88, 0xf0, 0x3b, 0x85, 0x11, 0xaa, 0x99, 0x63, - 0x98, 0x98, 0xac, 0x21, 0x24, 0x82, 0x9e, 0x10, 0x90, 0x28, 0xc2, 0x0a, 0x69, 0xa4, 0x8a, 0xba, - 0x71, 0x01, 0x80, 0xa8, 0xdb, 0x60, 0xa1, 0x28, 0xd9, 0x41, 0xa0, 0x00, 0xb9, 0x6a, 0x83, 0x3a, - 0xf8, 0x2a, 0x01, 0x00, 0x28, 0x9a, 0x13, 0xbb, 0x62, 0xd0, 0x2a, 0x82, 0x02, 0xad, 0x88, 0x42, - 0xd0, 0x5a, 0xa8, 0x32, 0xc9, 0x3b, 0xa7, 0x2a, 0x81, 0x20, 0xac, 0x81, 0x38, 0x12, 0xb8, 0x73, - 0xcc, 0x01, 0x3a, 0x95, 0x1c, 0x92, 0x2a, 0x94, 0x9b, 0x20, 0xa2, 0x2b, 0xa3, 0xaa, 0xbf, 0x71, - 0xa2, 0x29, 0x01, 0x99, 0x31, 0xf0, 0x2a, 0x80, 0x20, 0xb1, 0xac, 0x59, 0x05, 0x9b, 0xa1, 0x61, - 0xa0, 0x80, 0x0d, 0x84, 0x0b, 0x13, 0x93, 0x1e, 0xa0, 0x19, 0x84, 0x2e, 0x92, 0x9c, 0x40, 0x98, - 0x21, 0xdb, 0x52, 0xb0, 0x18, 0x80, 0xa9, 0x48, 0xa0, 0x03, 0x9f, 0x01, 0x22, 0x9b, 0x24, 0xc9, - 0x72, 0x99, 0xa8, 0x89, 0x64, 0xa9, 0x20, 0xba, 0x42, 0xa8, 0xa8, 0x18, 0x48, 0xb5, 0x2d, 0xd3, - 0x1b, 0x11, 0x03, 0x1a, 0xa0, 0x1a, 0x81, 0xac, 0x05, 0x40, 0x8c, 0xc2, 0x30, 0xbb, 0x47, 0xa8, - 0x10, 0x09, 0xa9, 0x9b, 0x82, 0x70, 0x84, 0xbb, 0x18, 0x30, 0xf8, 0x58, 0x80, 0x98, 0x81, 0x9f, - 0x13, 0x0b, 0x25, 0xa9, 0x00, 0xa8, 0x09, 0x02, 0x39, 0xf0, 0x6a, 0xb0, 0x41, 0xdb, 0x52, 0xa0, - 0x18, 0xb0, 0x19, 0x91, 0x3b, 0x87, 0x18, 0xdb, 0x48, 0xa1, 0x18, 0x80, 0x12, 0xbb, 0x20, 0xdc, - 0x23, 0x8c, 0x34, 0xa2, 0xbf, 0x14, 0x89, 0x00, 0x19, 0x13, 0x8a, 0xf1, 0x3a, 0xb2, 0x2a, 0x37, - 0xb9, 0xca, 0x48, 0x02, 0x8a, 0xa0, 0x62, 0xdb, 0x22, 0xba, 0x31, 0x03, 0x01, 0xce, 0x08, 0x00, - 0x00, 0x22, 0x89, 0xc0, 0x30, 0x0a, 0x73, 0xf8, 0x68, 0xb0, 0x2a, 0x90, 0x38, 0x01, 0x98, 0xba, - 0x52, 0xd8, 0x72, 0xc8, 0x19, 0x90, 0x42, 0xcb, 0x21, 0x88, 0x01, 0xb0, 0x32, 0xdc, 0x40, 0x90, - 0x90, 0x9c, 0x53, 0x91, 0x88, 0xa8, 0x20, 0x01, 0xa9, 0xc8, 0x38, 0x04, 0x0f, 0xd3, 0x2c, 0x15, - 0x00, 0xaa, 0x89, 0x81, 0x31, 0xa0, 0x98, 0x2c, 0x03, 0x00, 0xdf, 0x39, 0x14, 0xa8, 0x8a, 0x0a, - 0x02, 0x2a, 0x06, 0x88, 0xa0, 0x2e, 0xa5, 0x2c, 0x04, 0xaa, 0x23, 0xab, 0x19, 0x83, 0x5a, 0xb2, - 0x34, 0xcf, 0x14, 0x89, 0x92, 0x9c, 0x02, 0x09, 0xc0, 0x08, 0x19, 0xd3, 0x70, 0xa2, 0x99, 0x08, - 0x20, 0x88, 0xc1, 0x6b, 0x91, 0x03, 0x1b, 0xf9, 0x69, 0x92, 0x8a, 0x00, 0x99, 0x84, 0x1d, 0x83, - 0x3a, 0xb3, 0x2c, 0xc0, 0x0d, 0x23, 0x92, 0x9c, 0x10, 0xbb, 0x22, 0x72, 0x81, 0x0a, 0xa0, 0x0b, - 0x86, 0x0f, 0x13, 0xa0, 0x0b, 0x93, 0x1c, 0xa3, 0x20, 0x48, 0xb6, 0x8f, 0x03, 0x80, 0x09, 0x89, - 0x12, 0x21, 0xaa, 0xf9, 0x69, 0x9a, 0x15, 0xbc, 0x32, 0x99, 0x12, 0xa8, 0x01, 0x1b, 0x01, 0xb4, - 0x9f, 0xa0, 0x73, 0xb3, 0x0d, 0x91, 0x68, 0x90, 0x18, 0x98, 0x80, 0x18, 0x83, 0xcb, 0x2b, 0x27, - 0xb9, 0x9d, 0x52, 0xa1, 0x0a, 0x80, 0x01, 0x9d, 0x23, 0x11, 0xfa, 0x2a, 0x22, 0x01, 0xd9, 0x4a, - 0x93, 0x0d, 0x03, 0x0b, 0xa8, 0x25, 0x10, 0xdc, 0x20, 0x80, 0x13, 0xdb, 0x21, 0xcc, 0x21, 0x10, - 0x89, 0xd1, 0x70, 0xa1, 0x99, 0x09, 0x23, 0x20, 0xdc, 0x11, 0x9a, 0x13, 0x32, 0xce, 0x20, 0x01, - 0x81, 0xeb, 0x39, 0x05, 0x8a, 0x01, 0x9a, 0xc1, 0x7b, 0x97, 0x8a, 0x81, 0x10, 0xa8, 0x09, 0x01, - 0x11, 0x09, 0xb1, 0x8d, 0x12, 0x42, 0x8b, 0xe4, 0x1a, 0x10, 0x99, 0x90, 0x40, 0xa6, 0x5a, 0xc8, - 0x01, 0x9a, 0x44, 0x91, 0xbb, 0x31, 0x0b, 0xc3, 0x40, 0x99, 0x40, 0xd8, 0x19, 0x90, 0x09, 0x53, - 0x99, 0xc1, 0x70, 0xbc, 0x24, 0x99, 0x12, 0xb9, 0x28, 0xfa, 0x40, 0x08, 0x00, 0x84, 0x8c, 0x81, - 0x28, 0xa1, 0x29, 0x81, 0xe9, 0x8b, 0x38, 0x86, 0x30, 0xba, 0x90, 0x2c, 0xc3, 0x1c, 0x14, 0x98, - 0x5b, 0xe1, 0x28, 0x92, 0x5b, 0x94, 0x8b, 0x8a, 0x21, 0x0a, 0x07, 0x8b, 0x88, 0x22, 0x2a, 0xc4, - 0x0c, 0x32, 0xc0, 0x0a, 0x81, 0x38, 0xc2, 0x8a, 0x00, 0x10, 0x11, 0x18, 0x00, 0xbf, 0x92, 0x79, - 0xc5, 0x8a, 0x28, 0x21, 0xe5, 0x2b, 0x82, 0x11, 0xb1, 0x2b, 0xe2, 0x68, 0xa0, 0x88, 0x28, 0x8b, - 0x17, 0x9a, 0x21, 0x9c, 0xb1, 0x52, 0xab, 0x06, 0x8b, 0x04, 0x9a, 0x22, 0xaa, 0x24, 0xcc, 0x91, - 0x1c, 0x04, 0xb0, 0x40, 0x99, 0x04, 0xab, 0x72, 0xb8, 0x40, 0xc9, 0x31, 0xbb, 0x16, 0x8c, 0x13, - 0x9a, 0x81, 0x99, 0x41, 0xcb, 0x25, 0xb9, 0x10, 0x9b, 0x83, 0x79, 0xb2, 0x09, 0x9c, 0x14, 0x08, - 0xab, 0x34, 0x89, 0x90, 0x8b, 0x23, 0x2a, 0x17, 0x10, 0xfb, 0x3a, 0x93, 0x39, 0xc9, 0x18, 0x09, - 0x95, 0x09, 0x9c, 0x10, 0x81, 0x37, 0xde, 0x30, 0x11, 0xc0, 0x1a, 0x98, 0x06, 0x0a, 0x11, 0xb8, - 0x8d, 0x35, 0x89, 0xcb, 0x32, 0x82, 0x0c, 0x91, 0x0a, 0x34, 0xad, 0x24, 0xae, 0x12, 0x02, 0xa9, - 0x9c, 0x43, 0x11, 0xb0, 0x0d, 0x83, 0xbb, 0x60, 0xe0, 0x28, 0x88, 0x42, 0xb0, 0x0c, 0x03, 0x18, - 0xa8, 0x01, 0x0e, 0xa1, 0x79, 0x92, 0xba, 0x70, 0x91, 0x89, 0x99, 0x32, 0x80, 0x8e, 0x11, 0xa1, - 0x0e, 0x14, 0x88, 0xc8, 0x3b, 0x12, 0xe1, 0x29, 0x18, 0xb2, 0x39, 0x95, 0x9d, 0x22, 0x10, 0xa2, - 0xad, 0x12, 0x48, 0xb2, 0x0c, 0x03, 0xbc, 0x51, 0xd0, 0x31, 0x8a, 0x84, 0x9c, 0x81, 0x1a, 0x04, - 0xa8, 0x88, 0x2a, 0xc3, 0x73, 0xa0, 0xad, 0x34, 0x8a, 0xc1, 0x10, 0x30, 0xa9, 0xa1, 0x48, 0x91, - 0xac, 0x33, 0x19, 0xe1, 0x1c, 0x92, 0x02, 0x20, 0x2b, 0x07, 0x9f, 0x04, 0x0b, 0xc0, 0x68, 0xb1, - 0x39, 0xd8, 0x30, 0x99, 0x14, 0x89, 0x9a, 0x05, 0x1b, 0xd3, 0x2b, 0x83, 0x28, 0xac, 0x00, 0x10, - 0x17, 0x90, 0x9e, 0x82, 0x58, 0xb2, 0x8b, 0x33, 0xb0, 0x1e, 0x83, 0x8c, 0xa1, 0x31, 0x0d, 0xd1, - 0x28, 0x31, 0xc1, 0x39, 0xd1, 0x49, 0xb1, 0x39, 0xc0, 0x2a, 0x26, 0xad, 0x02, 0x80, 0x29, 0x82, - 0xca, 0x73, 0xc9, 0x21, 0x09, 0xa8, 0x13, 0x9f, 0x34, 0xca, 0x08, 0x28, 0xb1, 0x70, 0xc8, 0x3a, - 0x90, 0x02, 0x80, 0x9c, 0x34, 0x80, 0xa9, 0x80, 0x0c, 0x15, 0x99, 0x0b, 0xb8, 0x70, 0x95, 0x19, - 0xc9, 0x50, 0x90, 0xa0, 0x1b, 0x13, 0x09, 0x94, 0x9e, 0x11, 0x91, 0x70, 0xd1, 0x1a, 0x00, 0x93, - 0x1c, 0x81, 0x98, 0x52, 0xa9, 0x98, 0xad, 0x26, 0xa8, 0x01, 0x8b, 0x83, 0x28, 0x04, 0x9f, 0x12, - 0x90, 0x38, 0xc8, 0x19, 0x20, 0x21, 0xf1, 0x0f, 0x82, 0x10, 0x90, 0xa1, 0x0b, 0x22, 0x41, 0xfa, - 0x8a, 0x42, 0x92, 0x8e, 0x02, 0x89, 0x22, 0x89, 0xa2, 0x9a, 0x5b, 0x15, 0xda, 0x88, 0x42, 0x99, - 0x93, 0x09, 0xda, 0x43, 0x80, 0xc9, 0x08, 0x89, 0x33, 0xa4, 0x9c, 0x50, 0xb0, 0x85, 0x0e, 0xa1, - 0x28, 0x03, 0x9d, 0x23, 0xea, 0x30, 0x82, 0x01, 0xaf, 0x42, 0x98, 0xa8, 0x18, 0x58, 0xd3, 0x2b, - 0xc3, 0x49, 0xa0, 0x12, 0x9c, 0x91, 0x19, 0x73, 0xb8, 0x2a, 0xa1, 0x32, 0xea, 0x29, 0x81, 0x09, - 0x14, 0xbb, 0x8e, 0x35, 0x99, 0x88, 0x20, 0x01, 0xcc, 0x32, 0x3a, 0xf0, 0x4c, 0x81, 0xa0, 0x29, - 0x81, 0xa9, 0x10, 0x16, 0xba, 0x20, 0x38, 0xe1, 0x9a, 0x31, 0x13, 0xcc, 0x9d, 0x17, 0xb9, 0x30, - 0x91, 0x81, 0xad, 0x31, 0x83, 0xb9, 0x1a, 0x37, 0xac, 0x12, 0x8b, 0x96, 0x3b, 0xa6, 0x9b, 0x21, - 0x90, 0x21, 0xab, 0x24, 0xa9, 0x80, 0x8b, 0x13, 0xcb, 0x38, 0x87, 0x29, 0xdd, 0x52, 0x88, 0xb8, - 0x31, 0xb8, 0x8c, 0x02, 0x58, 0xa3, 0x5a, 0xa4, 0xbd, 0x32, 0x11, 0xd9, 0x28, 0xa1, 0x40, 0xfa, - 0x50, 0xa0, 0x19, 0x80, 0x11, 0xdb, 0x38, 0x90, 0x03, 0x9c, 0x13, 0x9a, 0x35, 0xca, 0x80, 0x8a, - 0x43, 0xa3, 0xcd, 0x4a, 0x85, 0x89, 0xb0, 0x48, 0x98, 0x31, 0xd1, 0x18, 0xb0, 0x61, 0xc2, 0x0b, - 0x01, 0x18, 0xa4, 0x3b, 0xd1, 0x1a, 0x04, 0xb0, 0x09, 0x0a, 0x06, 0x90, 0x9c, 0x62, 0xe0, 0x29, - 0x11, 0x09, 0xd1, 0x48, 0xa8, 0x0a, 0x84, 0x38, 0xb1, 0x88, 0x78, 0xc1, 0x8a, 0x53, 0xb8, 0x09, - 0x81, 0xbb, 0x41, 0x32, 0xa1, 0xfd, 0x38, 0x11, 0xb9, 0x09, 0x14, 0x19, 0xb1, 0x28, 0xcd, 0x53, - 0x81, 0x91, 0xbd, 0x10, 0x18, 0x11, 0x30, 0xf8, 0x48, 0x21, 0xa0, 0x9f, 0x18, 0x12, 0xda, 0x41, - 0xb8, 0x11, 0x99, 0x40, 0xd2, 0x1a, 0x12, 0x03, 0xee, 0x49, 0x03, 0x9a, 0xa1, 0x3a, 0xc1, 0x1a, - 0x34, 0xa0, 0xce, 0x41, 0x82, 0xab, 0x31, 0x12, 0xa0, 0x8f, 0x12, 0xea, 0x30, 0x23, 0xc8, 0xad, - 0x22, 0x80, 0xd2, 0x49, 0x02, 0xc9, 0x21, 0xa9, 0x00, 0x10, 0x90, 0x93, 0xcf, 0x04, 0x18, 0xa1, - 0x1a, 0x12, 0xaa, 0x1a, 0xb2, 0xa0, 0x7c, 0x17, 0xbc, 0x21, 0x18, 0x92, 0x2b, 0x89, 0x06, 0xad, - 0x38, 0x10, 0xa9, 0x63, 0xb0, 0x8b, 0x81, 0x48, 0xc4, 0x2c, 0x82, 0x08, 0xda, 0x61, 0x90, 0x0b, - 0x03, 0x28, 0xf8, 0x29, 0x92, 0x39, 0xb2, 0x1d, 0xa4, 0x0c, 0x23, 0x11, 0xbd, 0x11, 0x11, 0x8e, - 0x94, 0x9a, 0x11, 0x25, 0xda, 0x88, 0x49, 0xa2, 0x18, 0xa0, 0x09, 0x32, 0xd0, 0x0b, 0x81, 0x72, - 0x98, 0xa1, 0x2b, 0x91, 0x3b, 0xa5, 0xc9, 0x4a, 0x40, 0x95, 0x8b, 0x82, 0x1b, 0x12, 0x08, 0xfa, - 0x3b, 0x22, 0xf0, 0x0b, 0x22, 0x06, 0x8d, 0x02, 0xa8, 0x2a, 0x04, 0x80, 0x9a, 0x09, 0x83, 0x1a, - 0x04, 0x1d, 0x87, 0x8b, 0xb0, 0x8d, 0x33, 0x24, 0xf3, 0x2c, 0xb2, 0x39, 0x02, 0x80, 0xba, 0x2a, - 0x83, 0xaf, 0x30, 0xb1, 0x71, 0xb0, 0x99, 0x1b, 0x25, 0x00, 0xa2, 0x9f, 0x23, 0xa9, 0x13, 0xdd, - 0x41, 0x84, 0x0b, 0xd8, 0x18, 0x11, 0x92, 0x3a, 0xb1, 0x9e, 0x53, 0xa0, 0xa9, 0x39, 0x04, 0x00, - 0xdd, 0x18, 0x82, 0x48, 0xb2, 0x8b, 0x90, 0x71, 0x91, 0x88, 0xb9, 0x71, 0xc0, 0x10, 0xc9, 0x42, - 0x00, 0x99, 0xa9, 0x3b, 0x07, 0x1a, 0x80, 0xab, 0x31, 0x24, 0xf8, 0x0b, 0x23, 0x21, 0xc1, 0x9f, - 0x12, 0x98, 0x20, 0x90, 0x09, 0x09, 0x04, 0x00, 0xac, 0x3a, 0x27, 0xaa, 0xa0, 0x0d, 0x21, 0x24, - 0xac, 0x11, 0x10, 0x99, 0x80, 0x9b, 0x11, 0x09, 0x67, 0xfa, 0x18, 0x01, 0x23, 0xca, 0x0a, 0x81, - 0xa9, 0x61, 0xb0, 0x49, 0xd8, 0x61, 0xa8, 0x08, 0x09, 0x11, 0x94, 0x0f, 0x82, 0x18, 0x99, 0x42, - 0xb0, 0x9d, 0x40, 0x83, 0xac, 0x00, 0x23, 0xc8, 0x09, 0xa9, 0x34, 0x9a, 0x42, 0xd0, 0x9a, 0x61, - 0x94, 0x9c, 0x02, 0x0a, 0x92, 0x19, 0x92, 0xaf, 0x64, 0x98, 0x80, 0x8b, 0x24, 0x8a, 0xa2, 0x8e, - 0x02, 0x18, 0x83, 0x9a, 0xaa, 0x30, 0x13, 0xdd, 0x50, 0x82, 0xba, 0x11, 0x88, 0x29, 0x27, 0xb0, - 0x89, 0xbd, 0x68, 0x01, 0xa8, 0x29, 0x89, 0x84, 0x8c, 0x24, 0xb0, 0x2a, 0x81, 0x80, 0xcc, 0x5a, - 0x84, 0x19, 0xb0, 0x58, 0xf8, 0x3a, 0x94, 0x29, 0xd2, 0x39, 0xb3, 0x8f, 0x23, 0xa8, 0x09, 0x30, - 0xc2, 0x0f, 0x02, 0x2b, 0xa3, 0x1b, 0x94, 0x9a, 0x32, 0x81, 0xa8, 0x38, 0x84, 0xaf, 0x88, 0x12, - 0x71, 0xc9, 0x20, 0x99, 0x19, 0x80, 0x13, 0xa8, 0x9b, 0x52, 0xa0, 0xb0, 0x8f, 0x37, 0x8c, 0x82, - 0x99, 0x81, 0x1d, 0x15, 0xa9, 0x28, 0x90, 0x88, 0xc8, 0x6a, 0xa4, 0x0c, 0x03, 0x98, 0x09, 0x18, - 0x96, 0xab, 0x3b, 0x07, 0x88, 0x8a, 0x85, 0x8b, 0x23, 0x80, 0xf8, 0x2c, 0x04, 0x1a, 0xc1, 0x6a, - 0xa2, 0x0a, 0x02, 0x8a, 0xca, 0x60, 0x82, 0x9a, 0x8a, 0x32, 0x83, 0x8e, 0x03, 0x8c, 0x81, 0x88, - 0x21, 0xca, 0x72, 0x82, 0xc9, 0x9c, 0x42, 0x91, 0x88, 0x08, 0x09, 0x8b, 0x47, 0xa9, 0x09, 0x88, - 0x44, 0xb8, 0xad, 0x30, 0x13, 0x90, 0xb0, 0x9d, 0x98, 0x73, 0x91, 0x8b, 0x31, 0x15, 0xca, 0x3a, - 0xe0, 0x40, 0x80, 0x09, 0xf9, 0x49, 0x02, 0x99, 0x99, 0x42, 0xa1, 0x8c, 0x12, 0x0b, 0xa1, 0x73, - 0xb5, 0x9d, 0x22, 0x08, 0x89, 0x09, 0xa3, 0x0a, 0x28, 0xa1, 0x02, 0x09, 0x65, 0xa0, 0xbc, 0x0c, - 0x27, 0xa0, 0x09, 0x80, 0x9b, 0x39, 0x84, 0x11, 0xa8, 0x61, 0xa1, 0xcd, 0x48, 0x02, 0x20, 0xdb, - 0x00, 0x09, 0x88, 0x35, 0xe9, 0x0a, 0x23, 0x9a, 0xa8, 0x30, 0x09, 0x07, 0x00, 0xaa, 0x09, 0x11, - 0x72, 0xd8, 0x09, 0x20, 0xc0, 0x0b, 0x15, 0x28, 0xc8, 0x32, 0xec, 0x39, 0x03, 0x09, 0xa8, 0x10, - 0x99, 0x09, 0x14, 0x9b, 0x43, 0xab, 0xa5, 0x1e, 0x82, 0x29, 0x17, 0xdb, 0x08, 0x09, 0x26, 0xb9, - 0x21, 0xbb, 0x30, 0xb9, 0x53, 0xca, 0x38, 0x02, 0x94, 0xaf, 0x04, 0x01, 0x9a, 0x01, 0x8b, 0x51, - 0x92, 0xa9, 0x8c, 0x25, 0x10, 0xf1, 0x1b, 0x00, 0x80, 0xa2, 0x2b, 0xf1, 0x48, 0x23, 0xbc, 0x18, - 0x98, 0x23, 0x18, 0xba, 0xb9, 0x72, 0x86, 0x9b, 0x08, 0x40, 0x94, 0x8c, 0x88, 0x49, 0xa4, 0x09, - 0xa9, 0x08, 0x26, 0xbb, 0x22, 0xca, 0x31, 0xa8, 0x22, 0xdf, 0x32, 0x98, 0x31, 0xad, 0x01, 0x31, - 0x85, 0x0b, 0xf9, 0x58, 0xa1, 0x1b, 0x02, 0x9b, 0x24, 0xa9, 0xb8, 0x3a, 0x17, 0x89, 0x0a, 0x09, - 0x07, 0x0b, 0x10, 0xa1, 0x28, 0xb0, 0x48, 0xf2, 0x0f, 0x23, 0xaa, 0x88, 0x20, 0x81, 0x90, 0x30, - 0x9b, 0xa7, 0x3c, 0xa1, 0x80, 0x0b, 0x12, 0x86, 0x8f, 0x14, 0x99, 0x28, 0x82, 0xc9, 0x1a, 0x32, - 0xaa, 0x88, 0x07, 0x1d, 0xa3, 0x3b, 0xf0, 0x1b, 0x17, 0x9a, 0x81, 0x0b, 0x82, 0x58, 0xa1, 0x88, - 0x08, 0x09, 0x07, 0xac, 0x12, 0x19, 0x85, 0xaa, 0x81, 0x8b, 0x27, 0xa0, 0x8c, 0x93, 0x2b, 0x02, - 0x02, 0xdc, 0x30, 0xa0, 0x19, 0xb9, 0x74, 0xb8, 0x31, 0xf8, 0x2b, 0x14, 0x98, 0x88, 0x09, 0x10, - 0x92, 0x11, 0x0b, 0xf8, 0x58, 0xa2, 0xaa, 0x69, 0xa1, 0x88, 0x18, 0x48, 0xc2, 0x8c, 0x44, 0xd9, - 0x09, 0x31, 0xc1, 0x18, 0x80, 0x11, 0xab, 0x22, 0x21, 0xfb, 0x2a, 0x88, 0xb3, 0x8f, 0x17, 0x89, - 0xb8, 0x60, 0xa1, 0x0b, 0x14, 0x99, 0x99, 0x28, 0x84, 0x19, 0xa0, 0xaa, 0x45, 0xbd, 0x35, 0xcb, - 0x30, 0xa8, 0x41, 0xd8, 0x29, 0x84, 0x8a, 0xb1, 0x48, 0xc8, 0x10, 0x90, 0x42, 0xe9, 0x41, 0xa8, - 0xa8, 0x21, 0x14, 0x99, 0x9a, 0x38, 0xd8, 0x2a, 0x25, 0xc0, 0x9c, 0x33, 0xaa, 0x80, 0x3c, 0x17, - 0x9a, 0x0c, 0x02, 0x80, 0x38, 0x91, 0xc2, 0x8e, 0x41, 0xb0, 0x90, 0x71, 0xb0, 0x0b, 0x11, 0x80, - 0x53, 0xda, 0x40, 0xc8, 0x58, 0xb8, 0x21, 0xac, 0x31, 0x91, 0x8a, 0x00, 0x31, 0xa8, 0x32, 0xbe, - 0x55, 0xda, 0x48, 0xc0, 0x39, 0x01, 0x10, 0xcd, 0x41, 0x88, 0x91, 0x1b, 0x04, 0xcb, 0x51, 0x90, - 0x99, 0x20, 0x11, 0xa2, 0xae, 0x20, 0x01, 0xa8, 0x11, 0x0a, 0x21, 0x90, 0x25, 0xce, 0x29, 0x16, - 0xa9, 0xa9, 0x10, 0x18, 0x12, 0xbc, 0x38, 0x84, 0x5a, 0xd3, 0x0c, 0x00, 0x23, 0x88, 0x91, 0x8d, - 0x91, 0x60, 0x84, 0xae, 0x22, 0x89, 0x82, 0x9c, 0x23, 0xcb, 0x44, 0xda, 0x30, 0xdb, 0x63, 0x98, - 0x80, 0xbb, 0x25, 0x8a, 0x80, 0x28, 0x83, 0xac, 0x60, 0xc0, 0x28, 0x12, 0xa1, 0xbc, 0x08, 0x23, - 0xa3, 0x1e, 0xa3, 0xab, 0x51, 0x81, 0x90, 0xd9, 0x6a, 0xa4, 0x9c, 0x42, 0xa9, 0x20, 0x82, 0xc9, - 0x29, 0x82, 0x08, 0x98, 0x8b, 0x74, 0xd3, 0x0a, 0x82, 0x2b, 0x94, 0x4a, 0xc3, 0x8f, 0x22, 0x99, - 0x81, 0x19, 0x80, 0x02, 0xb8, 0x1b, 0x14, 0x1c, 0x07, 0xdb, 0x08, 0x28, 0x16, 0xb9, 0x08, 0x88, - 0x00, 0x08, 0x22, 0xbb, 0x24, 0x11, 0xf8, 0x9f, 0x34, 0xa8, 0x39, 0xb9, 0x11, 0x30, 0xaa, 0x04, - 0x9e, 0x51, 0x81, 0xc9, 0x1c, 0x04, 0x00, 0x99, 0x08, 0xa8, 0x1b, 0x16, 0xab, 0x04, 0x9a, 0x30, - 0x85, 0xae, 0x34, 0xb0, 0x89, 0x20, 0xc9, 0x38, 0x13, 0xa0, 0x09, 0x9a, 0x97, 0x3b, 0xf0, 0x4a, - 0x96, 0x8a, 0x80, 0x20, 0x91, 0x2a, 0xf1, 0x3a, 0x90, 0x18, 0x84, 0x9d, 0x11, 0x02, 0x18, 0xc8, - 0x21, 0xcc, 0x72, 0x90, 0xb8, 0x48, 0xb1, 0x28, 0x89, 0x82, 0x5b, 0xb2, 0x2b, 0xeb, 0x71, 0xa2, - 0x0b, 0x98, 0x41, 0x80, 0x1a, 0xe1, 0x38, 0x98, 0x13, 0xaa, 0x8a, 0x22, 0x2b, 0xe7, 0x3c, 0x94, - 0x10, 0x98, 0xc9, 0x30, 0x89, 0x50, 0xb1, 0x80, 0x9c, 0x52, 0xa0, 0x08, 0x00, 0x10, 0xc9, 0x49, - 0xd0, 0x40, 0x92, 0xbb, 0x09, 0x02, 0x72, 0xb2, 0xea, 0x40, 0xa8, 0x20, 0xe8, 0x30, 0x08, 0x82, - 0xa8, 0xac, 0x73, 0xb8, 0x51, 0xa1, 0x9b, 0x39, 0x03, 0xe8, 0x59, 0x80, 0x82, 0xdb, 0x29, 0x02, - 0x1a, 0x87, 0x8d, 0x92, 0x4b, 0x96, 0x1a, 0x89, 0x20, 0xc0, 0x18, 0x01, 0xab, 0x34, 0x10, 0xf9, - 0x0a, 0x24, 0x88, 0x91, 0xac, 0x42, 0xc8, 0x12, 0x88, 0xba, 0x62, 0xa0, 0x8a, 0x2a, 0x94, 0x33, - 0xbf, 0x14, 0xa9, 0x31, 0x89, 0x88, 0x10, 0x99, 0x84, 0xaa, 0x0f, 0x86, 0x38, 0xd0, 0x0a, 0xb1, - 0x71, 0xa0, 0x30, 0xcb, 0x33, 0xd9, 0x28, 0x81, 0x8a, 0x90, 0x48, 0xb3, 0x1a, 0x89, 0x06, 0x29, - 0xbb, 0x05, 0x8b, 0xc2, 0x71, 0xe3, 0x1b, 0x22, 0x90, 0x9c, 0x22, 0x90, 0x9b, 0x93, 0x2e, 0x95, - 0x39, 0x93, 0xbb, 0x01, 0x39, 0x01, 0xf8, 0x79, 0xa9, 0x02, 0x2a, 0xb8, 0x31, 0x81, 0x88, 0xda, - 0x89, 0x45, 0x0a, 0xb4, 0x1c, 0xa1, 0x78, 0xc0, 0x29, 0x80, 0x30, 0xb1, 0xad, 0x63, 0x80, 0x88, - 0xac, 0x24, 0x98, 0x39, 0xe0, 0x89, 0x32, 0x88, 0x48, 0xf9, 0x49, 0xa1, 0x19, 0x88, 0x33, 0xea, - 0x29, 0x02, 0x0a, 0xb0, 0x7a, 0xb2, 0x1f, 0x82, 0x28, 0xb0, 0x3a, 0x87, 0x8c, 0x00, 0x02, 0xa0, - 0x1d, 0x84, 0xaa, 0x31, 0x89, 0x90, 0x2a, 0x03, 0x4a, 0xf2, 0x1f, 0x84, 0x1a, 0x91, 0x38, 0xc8, - 0x00, 0x19, 0x90, 0xd0, 0x6a, 0x82, 0x89, 0x9a, 0x24, 0x1a, 0xa1, 0x40, 0xd8, 0x8c, 0x34, 0xb9, - 0x28, 0xcb, 0x36, 0xba, 0x22, 0xb0, 0xab, 0x73, 0xb1, 0xa9, 0x51, 0x98, 0x01, 0xb8, 0x4a, 0x93, - 0x0e, 0x94, 0x9b, 0x08, 0x73, 0xa2, 0xab, 0x19, 0x36, 0xea, 0x20, 0xb2, 0x0c, 0x14, 0x99, 0x90, - 0x2b, 0x15, 0x90, 0x9c, 0x19, 0x05, 0x19, 0xa0, 0x28, 0xba, 0x2c, 0x87, 0x89, 0x99, 0x13, 0x11, - 0xd9, 0x2a, 0x12, 0xa3, 0x1b, 0xa6, 0x2d, 0xb2, 0x38, 0xd1, 0x1c, 0x27, 0xb8, 0x0b, 0xb0, 0x20, - 0x42, 0x91, 0xa1, 0xbf, 0x23, 0x39, 0x93, 0xa8, 0xcd, 0x21, 0x48, 0xe8, 0x48, 0x89, 0x15, 0xd8, - 0x1b, 0x13, 0x18, 0xa2, 0x8c, 0xa1, 0x1b, 0x27, 0x99, 0xaa, 0x34, 0xb8, 0x9c, 0x13, 0x2a, 0x95, - 0x5b, 0xd1, 0x89, 0x20, 0x05, 0x99, 0x8c, 0x03, 0x28, 0x90, 0xaf, 0x03, 0x29, 0x05, 0xbb, 0x10, - 0x98, 0x45, 0xb8, 0x99, 0x0b, 0x27, 0xb9, 0x38, 0xa1, 0x09, 0x01, 0x88, 0xba, 0x32, 0x54, 0xe2, - 0x0f, 0x02, 0x39, 0xc0, 0x10, 0xab, 0x42, 0x88, 0x22, 0xf9, 0x3b, 0xa4, 0x2a, 0x90, 0x98, 0x31, - 0x03, 0x98, 0x0d, 0xc0, 0x72, 0xd2, 0x2a, 0xc1, 0x40, 0x98, 0x81, 0x1d, 0xa2, 0x58, 0xb1, 0x8b, - 0x12, 0x91, 0x0c, 0x02, 0x9c, 0x27, 0x0b, 0x82, 0xcb, 0x41, 0x09, 0xa2, 0x0b, 0x98, 0x54, 0x90, - 0x9c, 0x12, 0x88, 0x21, 0x8e, 0x85, 0xab, 0x31, 0x02, 0xe0, 0x1c, 0x13, 0x10, 0xf8, 0x28, 0x80, - 0xb8, 0x62, 0xc9, 0x08, 0x53, 0x99, 0xc1, 0x2b, 0x22, 0x01, 0xdb, 0x08, 0x49, 0xd2, 0x48, 0xb8, - 0x18, 0x01, 0x24, 0xba, 0x88, 0x8b, 0x61, 0x93, 0xc9, 0x0f, 0x33, 0xa0, 0x9b, 0x11, 0x48, 0xc3, - 0x19, 0xe9, 0x39, 0x93, 0x20, 0xc9, 0x0a, 0x45, 0xbb, 0x01, 0x1e, 0x06, 0x8b, 0x81, 0x1b, 0x83, - 0x4a, 0x93, 0x8b, 0x09, 0x61, 0xb3, 0x8b, 0x8c, 0x06, 0xaa, 0x18, 0x28, 0x82, 0x89, 0x24, 0xff, - 0x31, 0x81, 0x8a, 0xaa, 0x72, 0xb0, 0x10, 0x88, 0x88, 0x41, 0xc2, 0x8a, 0x99, 0x2a, 0x27, 0x9c, - 0x12, 0x29, 0xd3, 0x2a, 0xa1, 0x98, 0x38, 0x93, 0x99, 0xaf, 0x17, 0x9c, 0x23, 0x09, 0x89, 0xa2, - 0x2c, 0x07, 0x8d, 0x83, 0x09, 0x8a, 0x22, 0x90, 0x9c, 0x23, 0x18, 0xaa, 0x9f, 0x16, 0x99, 0x28, - 0xc2, 0x39, 0xa0, 0x41, 0xa8, 0xa0, 0x79, 0xa4, 0x8b, 0xc9, 0x20, 0x43, 0xb8, 0x49, 0xe0, 0x38, - 0xa8, 0x21, 0xda, 0x41, 0x88, 0xa0, 0x9a, 0x61, 0x82, 0x09, 0xa8, 0xaa, 0x38, 0x06, 0x1b, 0xc2, - 0x51, 0xb9, 0x1a, 0x03, 0x00, 0x71, 0xd9, 0x91, 0x8d, 0x43, 0x98, 0xa8, 0x5a, 0x12, 0xbc, 0x11, - 0x19, 0x96, 0x1c, 0x82, 0x99, 0x9a, 0x27, 0x89, 0x98, 0x01, 0x08, 0x01, 0x8e, 0x05, 0x89, 0x89, - 0xa0, 0x0a, 0x01, 0x54, 0xb1, 0x8b, 0x29, 0x23, 0xc9, 0x0a, 0x01, 0x73, 0xf9, 0x39, 0xa2, 0x21, - 0xaf, 0x06, 0x9a, 0x12, 0xa0, 0x09, 0xa8, 0x64, 0xba, 0x43, 0xba, 0x21, 0x9c, 0x02, 0x21, 0x9c, - 0x02, 0x08, 0xea, 0x18, 0x16, 0x8a, 0x82, 0xe8, 0x30, 0xb0, 0x22, 0xda, 0x48, 0xa0, 0xa8, 0x21, - 0x99, 0x25, 0xa9, 0x29, 0xda, 0x88, 0x61, 0x12, 0xdb, 0x32, 0x9a, 0x23, 0xdb, 0x42, 0xc9, 0x2a, - 0x95, 0x8e, 0x10, 0x33, 0xb9, 0x53, 0xbe, 0x32, 0x9b, 0x21, 0x90, 0x39, 0xfc, 0x41, 0xb0, 0x08, - 0x20, 0x05, 0xbd, 0x31, 0x98, 0x21, 0x90, 0x00, 0xc9, 0x0c, 0x34, 0xd3, 0x0c, 0x11, 0x80, 0x99, - 0x31, 0xa0, 0x9e, 0x15, 0x98, 0xab, 0x42, 0x01, 0xa3, 0x8d, 0x91, 0x39, 0xe1, 0x20, 0xb9, 0x08, - 0x37, 0xb0, 0x0b, 0x90, 0x32, 0x83, 0xaf, 0xa1, 0x8a, 0x72, 0x83, 0x9f, 0x20, 0x05, 0x9b, 0x08, - 0x89, 0x33, 0xb8, 0x89, 0x00, 0x80, 0x72, 0x04, 0xbf, 0x20, 0x01, 0x09, 0xbb, 0x24, 0x99, 0x11, - 0x8c, 0x07, 0x0e, 0x13, 0x98, 0xb9, 0x49, 0x14, 0xc8, 0x1b, 0x04, 0x98, 0x38, 0xa0, 0x89, 0x8b, - 0x07, 0x1a, 0xd8, 0x28, 0x10, 0xb1, 0x49, 0xb1, 0x0b, 0x04, 0x10, 0xbd, 0x21, 0x42, 0xc8, 0x38, - 0xf9, 0x39, 0x22, 0x08, 0xf1, 0x49, 0x8a, 0x23, 0x9d, 0x83, 0x2b, 0xa1, 0x24, 0xca, 0x0c, 0x94, - 0x48, 0xda, 0x01, 0x40, 0xb8, 0x22, 0xea, 0x30, 0x1b, 0x07, 0x8b, 0x91, 0x0a, 0x43, 0xb9, 0xd9, - 0x3a, 0x26, 0xb9, 0x30, 0xb8, 0x12, 0x10, 0xc9, 0x9d, 0x43, 0x90, 0x04, 0xaf, 0x13, 0x88, 0x01, - 0xa9, 0x88, 0x0b, 0x65, 0xc8, 0x2a, 0x90, 0x34, 0xc8, 0x08, 0xaa, 0x42, 0x92, 0xbc, 0x18, 0x43, - 0x8b, 0x84, 0x8d, 0x04, 0x18, 0x90, 0xa9, 0x89, 0x78, 0x94, 0x1b, 0xc8, 0x4a, 0x85, 0x8a, 0x90, - 0x29, 0xa2, 0x30, 0xc9, 0x2d, 0x04, 0xa8, 0x2a, 0xd8, 0x72, 0x90, 0xa0, 0x9a, 0x63, 0xab, 0x04, - 0x29, 0xa0, 0xab, 0x44, 0x90, 0x8b, 0x12, 0x30, 0xf9, 0x2f, 0x93, 0x08, 0xa9, 0x42, 0xd8, 0x28, - 0x00, 0x00, 0xa9, 0x11, 0xba, 0x0a, 0x71, 0x13, 0xbd, 0x24, 0x8c, 0x01, 0x98, 0x58, 0x91, 0x88, - 0x9c, 0x83, 0x0d, 0x04, 0x38, 0xc8, 0x00, 0x99, 0x01, 0x39, 0xf8, 0x40, 0x20, 0xf9, 0x18, 0x12, - 0x99, 0x11, 0xdc, 0x58, 0xa0, 0x19, 0x12, 0xb0, 0x3a, 0xa4, 0x0c, 0x25, 0xda, 0x21, 0xc8, 0x1a, - 0x83, 0x28, 0x98, 0x02, 0xac, 0x42, 0x2a, 0xb6, 0x8b, 0x73, 0xc8, 0x19, 0x81, 0x32, 0xac, 0x98, - 0x11, 0x30, 0xea, 0x42, 0xdb, 0x30, 0x02, 0xad, 0x28, 0x13, 0x18, 0xe3, 0x4b, 0xd1, 0x21, 0x0a, - 0x91, 0xac, 0x32, 0x85, 0x0e, 0xa2, 0x41, 0x89, 0xa1, 0xaa, 0x11, 0x18, 0x94, 0x89, 0x8c, 0x31, - 0xa4, 0x9e, 0x72, 0xa1, 0x8a, 0x19, 0xa8, 0x81, 0x73, 0x88, 0xc1, 0x10, 0x19, 0x81, 0xfc, 0x38, - 0x03, 0x9c, 0x28, 0x14, 0x9b, 0x80, 0x40, 0x98, 0xaa, 0x06, 0x1a, 0x9d, 0x04, 0x40, 0xe8, 0x0a, - 0x05, 0x99, 0x29, 0x92, 0x98, 0x2b, 0x02, 0xa0, 0x99, 0x56, 0x98, 0xaa, 0x08, 0x33, 0xa8, 0x29, - 0xca, 0x31, 0xd4, 0x5c, 0x90, 0x98, 0x24, 0x8c, 0x00, 0x98, 0x85, 0x3b, 0xc0, 0x98, 0x8a, 0x36, - 0xb9, 0xa8, 0x61, 0x8a, 0x83, 0xbc, 0x38, 0x85, 0x1b, 0x33, 0xe0, 0x82, 0x4b, 0x92, 0x9d, 0x16, - 0x8a, 0x88, 0xbb, 0x27, 0xa9, 0x10, 0xa0, 0x22, 0xac, 0x21, 0xa4, 0x0e, 0xa0, 0x62, 0xca, 0x31, - 0x01, 0xca, 0x08, 0x15, 0xab, 0x32, 0xd9, 0x31, 0xb8, 0x00, 0x10, 0x09, 0x23, 0xa2, 0xd9, 0x0d, - 0x84, 0x0e, 0xa0, 0x40, 0xa0, 0x43, 0xba, 0x92, 0x0b, 0x20, 0x01, 0xf4, 0x4a, 0x90, 0x98, 0x22, - 0x0f, 0x85, 0x1a, 0xa2, 0x9d, 0x22, 0x10, 0xa1, 0x0d, 0x83, 0x1b, 0x86, 0x28, 0xd8, 0x98, 0x5c, - 0xb4, 0x1a, 0x10, 0x10, 0xd3, 0x0c, 0x08, 0x02, 0xa0, 0x58, 0xa0, 0x1d, 0x05, 0x88, 0xcb, 0x41, - 0x81, 0xa9, 0x88, 0x79, 0xb2, 0x3a, 0x93, 0x9b, 0xaa, 0x55, 0xb0, 0x2b, 0xa2, 0x44, 0xd9, 0x39, - 0xd0, 0x20, 0x91, 0x88, 0xb9, 0x29, 0x22, 0x05, 0xcb, 0x41, 0xb0, 0x19, 0x21, 0xc9, 0xd9, 0x51, - 0x01, 0x88, 0x09, 0x15, 0x9a, 0x9c, 0x82, 0x83, 0x0e, 0x24, 0xba, 0x08, 0x41, 0x83, 0x9e, 0xa0, - 0x0d, 0x16, 0x0c, 0x83, 0xac, 0x12, 0x48, 0xb3, 0x9d, 0x32, 0x98, 0x98, 0x4b, 0x95, 0x1d, 0x03, - 0x80, 0xba, 0x8a, 0x26, 0xb8, 0xa9, 0x61, 0x91, 0x0a, 0x13, 0xcb, 0x39, 0x02, 0xf3, 0x2b, 0x1a, - 0x33, 0xc6, 0x2d, 0xa2, 0x08, 0x0a, 0xa2, 0x58, 0xa1, 0x38, 0xb1, 0x0c, 0xa1, 0x73, 0xb0, 0x1a, - 0xc8, 0x68, 0x91, 0x00, 0x99, 0x0a, 0x86, 0x0a, 0x09, 0x02, 0xaa, 0x33, 0xae, 0x34, 0x99, 0x04, - 0x8b, 0xf9, 0x10, 0x81, 0xb8, 0x29, 0x42, 0xa2, 0x89, 0x24, 0xaf, 0x34, 0xbc, 0x42, 0xd9, 0x40, - 0x01, 0xbb, 0x08, 0x35, 0xcb, 0x12, 0x0a, 0xd3, 0x2a, 0x11, 0xc9, 0x31, 0x08, 0x00, 0xdc, 0x51, - 0x98, 0x88, 0xd9, 0x71, 0x98, 0x18, 0xa1, 0x18, 0x09, 0x32, 0xc1, 0x2a, 0x12, 0xea, 0x29, 0xa9, - 0x15, 0x18, 0xbc, 0x31, 0x81, 0xa0, 0x1d, 0xf1, 0x20, 0x80, 0x30, 0xf8, 0x20, 0x08, 0x2b, 0x96, - 0x8b, 0x21, 0x99, 0x03, 0x9e, 0x21, 0x13, 0x9b, 0xbd, 0x36, 0x88, 0x08, 0x19, 0xc1, 0xb8, 0x7c, - 0x93, 0xdb, 0x50, 0xa2, 0x9b, 0x81, 0x51, 0x99, 0xb1, 0x30, 0x8a, 0x9a, 0x15, 0x10, 0xea, 0x40, - 0x22, 0xe9, 0x09, 0x14, 0xba, 0x09, 0x90, 0x14, 0x39, 0xbb, 0x16, 0x18, 0x9a, 0x19, 0xf0, 0x1c, - 0x34, 0xc1, 0x1a, 0x08, 0x00, 0x98, 0x10, 0x9c, 0x15, 0x98, 0x0d, 0xa8, 0x17, 0x5a, 0xb8, 0x09, - 0x21, 0xa0, 0x29, 0xd9, 0x11, 0x4b, 0xa5, 0x2a, 0x89, 0x21, 0x42, 0xfb, 0x08, 0x22, 0xac, 0x24, - 0xab, 0x81, 0x29, 0x12, 0xcf, 0x11, 0x11, 0x81, 0xbc, 0x33, 0xb2, 0x2d, 0x90, 0x24, 0xab, 0x22, - 0x19, 0xc8, 0x72, 0xa1, 0xae, 0x23, 0xbb, 0x42, 0xa2, 0x1b, 0x85, 0xbb, 0x72, 0xb2, 0x8b, 0x04, - 0xac, 0x12, 0x8a, 0x11, 0x16, 0x9c, 0x89, 0x06, 0x09, 0xa1, 0x09, 0x88, 0x01, 0x89, 0x84, 0x71, - 0xf1, 0x18, 0x98, 0x90, 0x2a, 0x15, 0xa9, 0x48, 0xfa, 0x32, 0xa9, 0x18, 0x13, 0xa8, 0x9b, 0x20, - 0xaa, 0x11, 0x52, 0x97, 0x9f, 0x22, 0x89, 0xa1, 0x6a, 0x92, 0x9c, 0x80, 0x32, 0x98, 0xaa, 0x45, - 0xaa, 0x0a, 0x93, 0x71, 0xd9, 0x13, 0x99, 0x99, 0x88, 0x17, 0x09, 0x91, 0xab, 0x49, 0x83, 0x99, - 0x81, 0x1c, 0x93, 0x10, 0xf9, 0x3e, 0x03, 0x89, 0xb0, 0x1d, 0x04, 0x10, 0x99, 0x8b, 0x91, 0x73, - 0xc3, 0x39, 0xd9, 0x20, 0x04, 0xba, 0x9c, 0x42, 0x88, 0x82, 0x9f, 0x22, 0x18, 0x96, 0x9c, 0x20, - 0x80, 0x10, 0xb9, 0x80, 0xaa, 0x74, 0xd2, 0x08, 0x89, 0x42, 0xb0, 0x8a, 0x98, 0x43, 0x0a, 0x07, - 0xca, 0x39, 0x05, 0x99, 0xba, 0x21, 0x91, 0x60, 0xf8, 0x38, 0x88, 0x03, 0xab, 0x01, 0x0b, 0x84, - 0x34, 0x9d, 0xb0, 0x39, 0x92, 0xb9, 0x41, 0x1c, 0xa4, 0x38, 0xe9, 0x30, 0x89, 0x86, 0x1b, 0x98, - 0x18, 0x07, 0x8a, 0x91, 0x9a, 0x21, 0x15, 0xab, 0xa8, 0x41, 0xa8, 0x09, 0x95, 0x1b, 0x08, 0x17, - 0x8c, 0xd0, 0x49, 0x80, 0x80, 0x0b, 0x86, 0xaa, 0x70, 0xb3, 0xba, 0x48, 0x85, 0x98, 0xb9, 0x61, - 0xb0, 0x40, 0x98, 0x90, 0x89, 0x32, 0xa9, 0xd9, 0x2a, 0x27, 0xcb, 0x08, 0x12, 0x09, 0x31, 0xa8, - 0xbd, 0x42, 0x28, 0x13, 0xef, 0x28, 0x32, 0xb8, 0x1a, 0x00, 0x98, 0x30, 0xd9, 0x89, 0x12, 0x50, - 0xb1, 0xbd, 0x53, 0x02, 0x9a, 0xb2, 0x0f, 0x82, 0x10, 0xb2, 0x1d, 0x80, 0x63, 0xa8, 0xca, 0x40, - 0x90, 0x08, 0x12, 0xba, 0x0b, 0x74, 0xd3, 0x0c, 0x21, 0x80, 0xa9, 0x10, 0x09, 0x04, 0x8b, 0x37, - 0xcd, 0x18, 0x22, 0x92, 0x8d, 0x13, 0x9c, 0x81, 0x09, 0x24, 0xbc, 0x43, 0xad, 0x03, 0x09, 0x31, - 0x31, 0xfa, 0x1b, 0x01, 0x9a, 0x23, 0xa8, 0x10, 0xba, 0x46, 0xa9, 0x18, 0x02, 0x01, 0x8d, 0xa1, - 0x0c, 0x43, 0x88, 0x84, 0xbb, 0x0f, 0x03, 0x0a, 0x13, 0x9f, 0x05, 0x8a, 0x39, 0xd8, 0x41, 0x01, - 0x9b, 0xa9, 0x51, 0xa8, 0x02, 0x40, 0xad, 0x03, 0xad, 0x73, 0xb9, 0x13, 0x89, 0x80, 0x9a, 0x63, - 0xd9, 0x50, 0xa8, 0x80, 0x2a, 0x03, 0x9b, 0x00, 0x11, 0x98, 0xa9, 0x20, 0x11, 0xc5, 0x0e, 0x21, - 0x13, 0xb8, 0xac, 0x88, 0xe8, 0x73, 0x98, 0x88, 0x80, 0x80, 0x40, 0xfa, 0x43, 0x88, 0xa9, 0x4b, - 0xc4, 0x39, 0x88, 0x21, 0xbc, 0x38, 0x04, 0x90, 0x9e, 0x23, 0xc1, 0x29, 0xad, 0x13, 0x00, 0x31, - 0xd1, 0x9c, 0x03, 0x48, 0xc1, 0x28, 0x80, 0x89, 0x0a, 0xca, 0x41, 0x45, 0xb0, 0x9a, 0xab, 0x37, - 0x9b, 0x12, 0x8c, 0x94, 0x1b, 0x94, 0xab, 0x32, 0x16, 0x8c, 0xea, 0x39, 0x03, 0x01, 0x9b, 0x02, - 0x2b, 0xa7, 0x2a, 0x12, 0xdc, 0x43, 0x98, 0xa9, 0x09, 0x42, 0xc1, 0x8b, 0x43, 0x88, 0xfa, 0x61, - 0xc8, 0x10, 0x91, 0x08, 0x88, 0xa8, 0x54, 0xc9, 0x20, 0x80, 0x99, 0x29, 0x92, 0x91, 0x1e, 0xb4, - 0x3b, 0x01, 0x44, 0xda, 0x38, 0x80, 0x89, 0xc1, 0x1e, 0x02, 0x10, 0x88, 0x93, 0x9f, 0x15, 0x08, - 0xba, 0x1b, 0x27, 0xb9, 0x00, 0x98, 0x38, 0x01, 0x02, 0xdd, 0x39, 0x81, 0xb2, 0x1c, 0x22, 0x81, - 0xc1, 0x3c, 0xa5, 0x6a, 0xc2, 0x29, 0xe8, 0x30, 0x80, 0x01, 0xac, 0x10, 0x12, 0x9a, 0x82, 0x1d, - 0x05, 0xaa, 0x90, 0x2b, 0x10, 0x36, 0xe0, 0x9b, 0x61, 0x92, 0xa9, 0x1a, 0x11, 0x81, 0x20, 0xdd, - 0x21, 0x30, 0x95, 0x8d, 0xa3, 0x2c, 0x92, 0x13, 0xbd, 0x09, 0x51, 0xa3, 0x0b, 0x9d, 0x33, 0x14, - 0x9e, 0x02, 0x9a, 0x00, 0x05, 0x9a, 0x9a, 0x63, 0xa2, 0x9b, 0x08, 0x24, 0xd8, 0x38, 0xa9, 0x02, - 0xaa, 0x64, 0xb8, 0x9b, 0x34, 0x01, 0xc8, 0x8a, 0x09, 0x26, 0xba, 0x38, 0xf9, 0x61, 0x88, 0x18, - 0xb8, 0x09, 0x58, 0xc3, 0x0c, 0x94, 0x39, 0xc1, 0x18, 0x9a, 0x05, 0x2b, 0xb4, 0x8c, 0x13, 0x18, - 0x90, 0xa9, 0x29, 0x17, 0x08, 0x8a, 0xe0, 0x4b, 0x95, 0x8a, 0x18, 0x08, 0x14, 0xbb, 0x84, 0x1f, - 0xa1, 0x51, 0xa0, 0x9a, 0x10, 0x32, 0xa9, 0x8b, 0x10, 0xa1, 0x1f, 0x17, 0xbb, 0x40, 0x81, 0xa0, - 0x9c, 0x22, 0x18, 0x15, 0xfb, 0x39, 0xa2, 0x61, 0xb9, 0x89, 0x90, 0x61, 0x80, 0xc8, 0x2a, 0x13, - 0x92, 0x0f, 0xa2, 0x39, 0xa1, 0x31, 0xc8, 0x9e, 0x32, 0x01, 0xbb, 0x52, 0xb0, 0x39, 0xd8, 0x18, - 0x91, 0x78, 0x96, 0xac, 0x21, 0x08, 0x03, 0x9a, 0xaa, 0x42, 0x9a, 0x91, 0x4a, 0xc2, 0x52, 0xb9, - 0x09, 0x1a, 0x33, 0x05, 0x0e, 0xb1, 0x9f, 0x42, 0x92, 0x09, 0xa0, 0x1c, 0x93, 0x30, 0x98, 0x8a, - 0x59, 0x94, 0xab, 0x80, 0x61, 0x90, 0xe0, 0x49, 0xa1, 0x99, 0x03, 0x19, 0xd0, 0x58, 0x10, 0xc0, - 0x9c, 0x50, 0x82, 0x81, 0xcc, 0x40, 0xa1, 0x1a, 0x06, 0xac, 0x11, 0x11, 0x91, 0x8d, 0x12, 0x01, - 0xc8, 0x39, 0xc9, 0x39, 0x04, 0x99, 0x18, 0x9d, 0x25, 0x91, 0x9e, 0x12, 0x90, 0x89, 0x33, 0xcd, - 0x33, 0x98, 0x91, 0xbd, 0x62, 0x91, 0x8b, 0x82, 0x19, 0xb1, 0x64, 0x98, 0xb9, 0x4a, 0x86, 0x89, - 0x89, 0x98, 0x22, 0x8e, 0x83, 0x39, 0xf3, 0x5a, 0xa1, 0x08, 0x89, 0x20, 0x92, 0x0a, 0xc9, 0x24, - 0xcb, 0x6a, 0x92, 0xa9, 0x20, 0x32, 0xf0, 0x2b, 0x94, 0x1a, 0xb3, 0x69, 0xd1, 0x09, 0x02, 0x08, - 0xa8, 0x19, 0x33, 0xda, 0x18, 0x29, 0xa5, 0x1d, 0x85, 0x0c, 0x81, 0x98, 0x32, 0xb2, 0x9f, 0x83, - 0x99, 0x63, 0xa9, 0x08, 0x9a, 0x26, 0xa0, 0x9b, 0x03, 0x2b, 0x07, 0x9d, 0x02, 0x18, 0xc1, 0x39, - 0x98, 0x23, 0x08, 0xcb, 0x8a, 0x01, 0x47, 0x9a, 0xb0, 0x40, 0x9d, 0x86, 0x09, 0x89, 0x81, 0x20, - 0xc0, 0x3b, 0x84, 0x68, 0xa0, 0x08, 0xaa, 0x8a, 0x64, 0xa0, 0xba, 0x78, 0xa3, 0x0d, 0x01, 0x29, - 0xb1, 0x21, 0x9c, 0x92, 0x30, 0x01, 0xc8, 0x1c, 0x81, 0x40, 0xf1, 0x1a, 0x23, 0xad, 0x43, 0xab, - 0x04, 0x0b, 0x86, 0x1a, 0xa1, 0x8e, 0x02, 0x40, 0xa0, 0xa9, 0x28, 0xa9, 0x33, 0x89, 0xa9, 0x37, - 0xbc, 0x73, 0xc8, 0x01, 0x19, 0x81, 0xb8, 0x8c, 0x24, 0x89, 0xa8, 0x25, 0x8f, 0x12, 0xb0, 0x09, - 0x8a, 0x45, 0x91, 0xac, 0x88, 0x44, 0xa8, 0x00, 0x91, 0x8f, 0x02, 0x18, 0xd2, 0x5a, 0x91, 0x28, - 0xd0, 0x29, 0x88, 0x20, 0x92, 0xcc, 0x00, 0x39, 0x86, 0x98, 0x0a, 0x03, 0xc8, 0x1b, 0x35, 0xab, - 0x24, 0xa9, 0x9a, 0x48, 0x89, 0x17, 0x9b, 0x02, 0x9f, 0x14, 0x88, 0x8b, 0x83, 0x20, 0xa1, 0xca, - 0x1b, 0x15, 0x1b, 0x85, 0xba, 0x00, 0x21, 0x13, 0xbf, 0x43, 0xc8, 0x81, 0x1c, 0x14, 0x89, 0x82, - 0x9c, 0xaa, 0x84, 0x79, 0xa6, 0x0a, 0x88, 0x10, 0x10, 0xc8, 0x30, 0xab, 0x86, 0x1a, 0xb0, 0x19, - 0x24, 0x28, 0xf1, 0x1d, 0x22, 0x89, 0xa1, 0x0c, 0x91, 0x52, 0x8a, 0xb3, 0x0f, 0x05, 0x99, 0x8a, - 0x15, 0xa9, 0x01, 0x19, 0xa8, 0x30, 0x53, 0xf0, 0x19, 0x00, 0x09, 0xa5, 0x0c, 0x91, 0x88, 0x32, - 0x48, 0xf0, 0x3b, 0x83, 0x0a, 0xd1, 0x29, 0x10, 0xa0, 0x8a, 0x62, 0x92, 0x9c, 0x00, 0x83, 0x9f, - 0x35, 0xb8, 0x2a, 0x82, 0xa0, 0x40, 0xda, 0x30, 0xa1, 0x9b, 0x20, 0x80, 0xfa, 0x78, 0xb3, 0xa9, - 0x0c, 0x34, 0xa8, 0x20, 0x9c, 0x91, 0x53, 0x9b, 0x85, 0x9e, 0x42, 0x90, 0x8a, 0x88, 0x31, 0x90, - 0x12, 0xb8, 0x8b, 0x88, 0x53, 0xfd, 0x30, 0x83, 0x02, 0xce, 0x28, 0x80, 0x21, 0x92, 0xac, 0x18, - 0x39, 0x86, 0x18, 0xec, 0x42, 0xb0, 0x1b, 0x92, 0x48, 0xb0, 0x48, 0xb1, 0x0e, 0x12, 0x81, 0x00, - 0xc9, 0x3b, 0x06, 0xaa, 0x19, 0x16, 0xbb, 0x44, 0xd8, 0x2a, 0x82, 0x08, 0x88, 0x8a, 0x24, 0xc9, - 0x3a, 0xb4, 0x1b, 0x22, 0x10, 0xf8, 0x0d, 0x21, 0x85, 0x0b, 0x83, 0xcb, 0x59, 0x02, 0x28, 0xfb, - 0x41, 0xb9, 0x11, 0xaa, 0x35, 0x9a, 0x81, 0xac, 0x32, 0xa8, 0x41, 0xc8, 0x18, 0xca, 0x73, 0xb8, - 0x88, 0x01, 0x28, 0x91, 0x08, 0x9a, 0x44, 0x01, 0xd1, 0x0c, 0x91, 0x39, 0x15, 0x9a, 0xaa, 0x90, - 0x35, 0x98, 0xce, 0x48, 0x03, 0xba, 0x30, 0x9a, 0x30, 0x93, 0x14, 0xbc, 0x8d, 0x36, 0xd9, 0x8a, - 0x21, 0x15, 0xa8, 0x8d, 0x25, 0xbb, 0x58, 0xa2, 0x09, 0x9b, 0x26, 0xab, 0x91, 0x29, 0x86, 0x0c, - 0x83, 0xbb, 0x32, 0x80, 0x82, 0x08, 0x98, 0x41, 0xc0, 0x9a, 0x37, 0xdc, 0x12, 0x0d, 0x83, 0x0a, - 0x02, 0x8b, 0x22, 0x89, 0x59, 0xb2, 0x8f, 0x12, 0x00, 0x8b, 0x04, 0xd0, 0x8a, 0x20, 0x13, 0x08, - 0x60, 0xe8, 0xb8, 0x78, 0x91, 0x01, 0xcb, 0x31, 0x98, 0x8b, 0x40, 0x84, 0x9b, 0x80, 0xa0, 0xa9, - 0x72, 0x15, 0x99, 0xbc, 0x15, 0x0a, 0x12, 0x89, 0x82, 0x9f, 0x02, 0x2a, 0xe0, 0x49, 0x83, 0x8b, - 0x92, 0x0d, 0x16, 0xbb, 0x42, 0x9b, 0x12, 0x88, 0x0a, 0xa2, 0x3b, 0x26, 0xa0, 0xcc, 0x40, 0x93, - 0x8c, 0x14, 0x8a, 0xc9, 0x52, 0x91, 0x0a, 0x89, 0x81, 0x8a, 0xa8, 0x53, 0xa8, 0x11, 0x0c, 0x87, - 0x0d, 0x21, 0x94, 0x9f, 0x21, 0x81, 0x8a, 0x81, 0x80, 0x18, 0x0b, 0x07, 0x99, 0x1c, 0x03, 0x89, - 0x99, 0x83, 0x3b, 0x13, 0xbb, 0x13, 0xff, 0x70, 0x92, 0xaa, 0x02, 0x8c, 0x24, 0x89, 0x99, 0x8a, - 0x14, 0x9b, 0x80, 0x61, 0xc2, 0x4a, 0xd1, 0x99, 0x51, 0x80, 0x08, 0xc9, 0x29, 0x83, 0x43, 0xea, - 0x19, 0x00, 0x82, 0x82, 0x0e, 0x02, 0x48, 0xb0, 0x39, 0xfc, 0x30, 0x93, 0x8b, 0xb0, 0x4b, 0xb2, - 0x41, 0x80, 0xbb, 0x32, 0xc3, 0x8d, 0x18, 0x25, 0xd9, 0x52, 0xc0, 0x19, 0x10, 0x90, 0x98, 0x4a, - 0xc2, 0x38, 0xa9, 0x14, 0x88, 0x8c, 0x16, 0x88, 0xdd, 0x41, 0xa1, 0x0a, 0x90, 0x08, 0x82, 0x10, - 0x18, 0xf2, 0x4a, 0x10, 0x80, 0xb8, 0x59, 0x12, 0xc9, 0xaa, 0x52, 0xb9, 0x72, 0xd1, 0x0b, 0x14, - 0x0a, 0xb0, 0x28, 0x02, 0x21, 0xdb, 0x10, 0x9a, 0x37, 0xba, 0x90, 0x0a, 0x06, 0x9a, 0x22, 0xcb, - 0x18, 0x23, 0x8b, 0xa7, 0x1d, 0x11, 0x81, 0xd8, 0x1a, 0x22, 0x21, 0xf0, 0x1b, 0x23, 0x10, 0x99, - 0xe8, 0x20, 0x89, 0x25, 0xcd, 0x20, 0x84, 0x19, 0xa0, 0x90, 0x0d, 0x11, 0xb4, 0x0e, 0x90, 0x42, - 0x81, 0xb9, 0x0b, 0x53, 0xa9, 0x24, 0xcb, 0x88, 0x71, 0xc3, 0x09, 0x18, 0x11, 0xba, 0x03, 0xab, - 0x31, 0xed, 0x53, 0xba, 0x40, 0x01, 0x90, 0xae, 0x20, 0x11, 0x10, 0xc1, 0x09, 0xa9, 0x42, 0x93, - 0x8a, 0x99, 0xab, 0x27, 0x89, 0xb1, 0x6a, 0x06, 0xcc, 0x22, 0x8a, 0x81, 0x41, 0xc2, 0x8d, 0x01, - 0x01, 0x9c, 0x02, 0x02, 0x18, 0xca, 0x80, 0x60, 0x00, 0x03, 0x8b, 0xfb, 0x58, 0x91, 0x9c, 0x32, - 0x99, 0xa0, 0x31, 0xbe, 0x01, 0x68, 0x05, 0xaa, 0x8c, 0x13, 0x08, 0x12, 0x3a, 0xc2, 0xbc, 0x48, - 0x02, 0xad, 0x63, 0x91, 0xba, 0x9a, 0x33, 0x12, 0x03, 0x8d, 0x88, 0xd1, 0x5a, 0x82, 0xba, 0xca, - 0x72, 0xc4, 0x0b, 0x13, 0x10, 0xa8, 0x58, 0xc8, 0x0b, 0x34, 0x00, 0xd9, 0x2b, 0x06, 0x8a, 0x90, - 0x0b, 0x04, 0x2b, 0x94, 0xbb, 0x48, 0x42, 0xb2, 0x9c, 0x22, 0x0a, 0xb0, 0x10, 0xcb, 0x40, 0x37, - 0xb9, 0x9e, 0x28, 0x21, 0x82, 0xbc, 0x41, 0x80, 0x90, 0x11, 0xc8, 0x9e, 0x44, 0xb1, 0x9b, 0x09, - 0x34, 0x00, 0x81, 0xaa, 0x0c, 0xe1, 0x70, 0xb0, 0x09, 0x22, 0x01, 0xda, 0x1c, 0x07, 0x09, 0xa9, - 0x18, 0x91, 0x3c, 0x86, 0x09, 0xb0, 0x5a, 0x92, 0x89, 0x99, 0x31, 0xc1, 0x50, 0xa0, 0xc8, 0x69, - 0x81, 0xa9, 0x39, 0x88, 0x01, 0xb8, 0x78, 0xd2, 0x2b, 0x03, 0xa8, 0x09, 0x08, 0x92, 0xa0, 0x78, - 0xd3, 0x00, 0x9a, 0x42, 0xfa, 0x41, 0x91, 0x89, 0x0a, 0x21, 0x98, 0x08, 0x21, 0x8b, 0xb1, 0xbb, - 0x27, 0x8f, 0x93, 0x30, 0x10, 0xec, 0x09, 0x12, 0x38, 0x88, 0x22, 0xf0, 0x3a, 0xb4, 0x5b, 0xd1, - 0x48, 0xc1, 0x8a, 0x21, 0x91, 0x9b, 0x73, 0xd1, 0x2a, 0x82, 0x1b, 0x94, 0x2a, 0xa3, 0x8c, 0x81, - 0x18, 0xb0, 0x70, 0x82, 0xca, 0x88, 0x28, 0x03, 0x8a, 0x71, 0xd8, 0x18, 0x00, 0xa4, 0x0b, 0x1b, - 0x07, 0xa9, 0x98, 0x8a, 0x71, 0x83, 0x89, 0x00, 0xba, 0x4a, 0x17, 0x99, 0x8a, 0x02, 0x1a, 0xd0, - 0x3a, 0x91, 0x73, 0xe1, 0x09, 0xb9, 0x63, 0x91, 0x90, 0x9d, 0x24, 0x90, 0x09, 0x98, 0x28, 0x90, - 0x42, 0xf9, 0x1a, 0x13, 0x81, 0x9b, 0x01, 0xaa, 0x36, 0x8a, 0xb2, 0x9f, 0x31, 0x33, 0xfb, 0x0c, - 0x23, 0xa1, 0x8d, 0x12, 0x98, 0x93, 0x78, 0xc8, 0x08, 0x10, 0x80, 0x01, 0x8f, 0x13, 0x1b, 0x84, - 0x8c, 0x10, 0x98, 0x28, 0xa1, 0xae, 0x32, 0x20, 0x06, 0xad, 0x00, 0x10, 0x10, 0x99, 0x88, 0x0a, - 0x80, 0x66, 0xb9, 0x18, 0x30, 0xc2, 0x8a, 0xdb, 0x51, 0x12, 0xb9, 0x99, 0x48, 0x11, 0xb1, 0x0b, - 0x04, 0xbc, 0x74, 0xc8, 0x8a, 0x20, 0x52, 0xa2, 0xbc, 0x19, 0x25, 0x88, 0x89, 0xf3, 0x4a, 0x82, - 0x99, 0x99, 0x99, 0x37, 0x9a, 0x02, 0x9f, 0x12, 0x80, 0x00, 0x9b, 0x22, 0x30, 0xd1, 0x2c, 0x92, - 0x39, 0x84, 0xcc, 0x99, 0x59, 0x14, 0xa8, 0x9e, 0x32, 0xa0, 0x19, 0x94, 0x1b, 0x00, 0x85, 0x0c, - 0xe8, 0x29, 0x25, 0xa9, 0x80, 0xaa, 0x42, 0x82, 0x8a, 0x98, 0x30, 0x83, 0xa0, 0xcf, 0x12, 0x18, - 0x23, 0xfb, 0x8a, 0x21, 0xa8, 0x19, 0x19, 0x07, 0x3e, 0xb4, 0x0a, 0x10, 0x22, 0xa1, 0x9d, 0xb9, - 0x60, 0x00, 0x01, 0xb8, 0x29, 0x11, 0xc0, 0x99, 0x61, 0x93, 0xbd, 0x71, 0xc0, 0x18, 0x21, 0xb1, - 0x9b, 0x1a, 0x07, 0x0b, 0x88, 0x20, 0xa8, 0x30, 0xd2, 0x49, 0x18, 0x84, 0xc9, 0x3b, 0x93, 0x1a, - 0xc3, 0x40, 0x9f, 0x03, 0x39, 0xa2, 0x9f, 0x11, 0x82, 0x3a, 0xc4, 0x1d, 0x82, 0x11, 0xaf, 0x21, - 0x12, 0xc1, 0x39, 0xca, 0x80, 0x43, 0xca, 0x08, 0x52, 0xd0, 0x4a, 0xa1, 0x2a, 0xa2, 0x3a, 0x86, - 0xab, 0x88, 0x60, 0x91, 0x8c, 0x14, 0x99, 0x98, 0x48, 0xb3, 0x0c, 0x81, 0x28, 0xb2, 0x8e, 0x33, - 0x89, 0x1a, 0x27, 0xcd, 0x29, 0x11, 0xb2, 0x29, 0xb9, 0x36, 0xfb, 0x38, 0x82, 0x08, 0x19, 0x90, - 0xab, 0x51, 0x92, 0x1b, 0xb0, 0x72, 0xf0, 0x08, 0x00, 0x91, 0x01, 0x9b, 0x16, 0xbb, 0x48, 0x85, - 0x1a, 0xba, 0x43, 0xc0, 0x9b, 0x21, 0x17, 0xaa, 0x28, 0xa8, 0x98, 0x49, 0x35, 0xd8, 0x0b, 0x25, - 0xb9, 0x8a, 0x32, 0x91, 0x0d, 0xb2, 0x38, 0xe9, 0x49, 0x05, 0xa9, 0x09, 0x00, 0x92, 0x2a, 0x02, - 0xb8, 0x08, 0x9e, 0x27, 0xb8, 0x0a, 0x21, 0xc9, 0x0a, 0x88, 0x37, 0x0a, 0x92, 0x89, 0x9b, 0x34, - 0xdc, 0x28, 0x98, 0x35, 0xaa, 0x92, 0x0c, 0x90, 0x54, 0x83, 0xac, 0x8a, 0x05, 0x09, 0x8b, 0x01, - 0x32, 0xf9, 0x1a, 0x00, 0xac, 0x44, 0xa3, 0x0e, 0x91, 0x12, 0x1b, 0x94, 0x39, 0x90, 0xae, 0x14, - 0x2a, 0x98, 0x10, 0x85, 0x8e, 0x20, 0xb8, 0x08, 0x42, 0xa8, 0xb3, 0x8e, 0x30, 0xa1, 0x5a, 0xf2, - 0x3a, 0x91, 0x10, 0xd1, 0x1a, 0x24, 0x0a, 0xa3, 0x8d, 0x02, 0x1a, 0x07, 0x8a, 0xaa, 0x69, 0x83, - 0xba, 0x29, 0x12, 0x88, 0xb2, 0xbf, 0x31, 0x02, 0x73, 0xda, 0x00, 0x09, 0x85, 0xab, 0x01, 0x10, - 0xa4, 0x0f, 0x05, 0x9a, 0x82, 0x09, 0x12, 0xbb, 0x88, 0x36, 0xda, 0x2a, 0x83, 0x49, 0xa2, 0x29, - 0xc9, 0x0b, 0x07, 0x89, 0xaa, 0x26, 0xa9, 0x98, 0x20, 0x01, 0x99, 0x01, 0xda, 0x31, 0xaa, 0x46, - 0xb8, 0x88, 0x8b, 0x46, 0xf0, 0x3a, 0xb1, 0x58, 0x98, 0x01, 0xca, 0x41, 0x82, 0xa9, 0x1a, 0x33, - 0xd8, 0x00, 0x0b, 0x17, 0xca, 0x30, 0x88, 0xbb, 0x20, 0x33, 0x98, 0x9d, 0x98, 0x27, 0xb8, 0x30, - 0x88, 0xb9, 0x6a, 0xa4, 0x99, 0x4c, 0x87, 0x0a, 0xb9, 0x33, 0xb9, 0x18, 0x22, 0x89, 0xfb, 0x63, - 0x98, 0xa9, 0x00, 0x11, 0x2b, 0x95, 0xae, 0x11, 0x38, 0x94, 0x9d, 0x22, 0x81, 0x39, 0xfa, 0x10, - 0x1a, 0x96, 0x2a, 0xc2, 0x2b, 0x01, 0x02, 0x98, 0xaf, 0x53, 0xa8, 0x80, 0x0a, 0x16, 0xaa, 0x20, - 0xb8, 0x49, 0x93, 0x2b, 0xf1, 0x80, 0x1a, 0x15, 0xa0, 0x89, 0x18, 0x81, 0x01, 0xad, 0x88, 0x34, - 0x1a, 0xb4, 0x1d, 0xba, 0x36, 0x11, 0xcd, 0x38, 0x92, 0x80, 0x29, 0xb8, 0x22, 0xd8, 0x72, 0xd0, - 0x8a, 0x42, 0x01, 0xac, 0x00, 0x20, 0xa1, 0x29, 0x9a, 0xe3, 0x7a, 0xb3, 0x8c, 0x00, 0x11, 0x03, - 0x8e, 0x82, 0x9a, 0x62, 0xa0, 0x09, 0x91, 0x49, 0xa1, 0x21, 0xbf, 0x53, 0x99, 0x88, 0xba, 0x12, - 0x32, 0x48, 0xf1, 0x1a, 0x39, 0xa7, 0x0c, 0x02, 0x88, 0x30, 0xc8, 0x2a, 0x99, 0x70, 0xa2, 0x89, - 0x8d, 0x14, 0x89, 0x91, 0x2a, 0x03, 0x0a, 0x91, 0xcd, 0x38, 0x80, 0x23, 0xb9, 0xad, 0x75, 0xa1, - 0x98, 0x18, 0x0a, 0x87, 0x8c, 0x02, 0x09, 0x81, 0x02, 0xcf, 0x32, 0xa8, 0x20, 0x89, 0xa8, 0x34, - 0x9e, 0x23, 0x98, 0x1a, 0xa1, 0xb8, 0x72, 0xd0, 0x10, 0x81, 0x09, 0xa4, 0x1e, 0x82, 0x18, 0xa1, - 0x0a, 0x11, 0x95, 0x2c, 0xd0, 0x01, 0x1b, 0xc0, 0x59, 0xa2, 0x0a, 0x40, 0xa3, 0x0f, 0xa3, 0x40, - 0x99, 0xa0, 0x28, 0x28, 0x13, 0x9f, 0xa1, 0x79, 0xb1, 0x3b, 0xc0, 0x41, 0x88, 0xa9, 0x33, 0xac, - 0x06, 0x0c, 0xa2, 0x2c, 0x85, 0x1b, 0xc8, 0x41, 0x98, 0x08, 0x88, 0x22, 0x90, 0x3a, 0xe2, 0x8a, - 0x81, 0x61, 0xa8, 0x8c, 0x03, 0x11, 0xad, 0x02, 0x07, 0x3b, 0xea, 0x32, 0x98, 0x99, 0x12, 0x0a, - 0x00, 0xa2, 0xad, 0x41, 0xc1, 0x30, 0xf8, 0x20, 0x99, 0x15, 0x99, 0x01, 0xcc, 0x20, 0x91, 0x4a, - 0xc2, 0x52, 0xc9, 0x09, 0x11, 0x43, 0xc8, 0x2a, 0xa3, 0x2c, 0x18, 0x87, 0x8d, 0x28, 0xb3, 0x0b, - 0xaa, 0x72, 0xc3, 0x89, 0x30, 0xc0, 0x8a, 0x43, 0x80, 0xb8, 0x0e, 0x15, 0x98, 0x1a, 0x95, 0x1a, - 0xa8, 0x10, 0x1a, 0xb0, 0x73, 0xb2, 0x8c, 0x23, 0x98, 0x04, 0x9f, 0x02, 0xaa, 0x49, 0x82, 0x8b, - 0x91, 0x73, 0xa0, 0xb9, 0x10, 0x61, 0xc9, 0x32, 0xcb, 0x11, 0x10, 0x2a, 0xd0, 0x08, 0x34, 0xba, - 0xbc, 0x36, 0x98, 0x8a, 0x42, 0xf8, 0x20, 0x08, 0xa1, 0x8b, 0x19, 0x47, 0xba, 0x20, 0x88, 0x09, - 0x82, 0xb0, 0x0a, 0x09, 0x15, 0x8d, 0xa2, 0x3a, 0x05, 0x9d, 0x92, 0x41, 0x98, 0x31, 0xe1, 0x0a, - 0x99, 0x47, 0xa9, 0x98, 0x51, 0xba, 0xa2, 0x3b, 0x04, 0x29, 0xb9, 0x84, 0x9f, 0x43, 0xa9, 0x81, - 0x08, 0x19, 0xfb, 0x71, 0xa8, 0x21, 0xba, 0x13, 0x9c, 0x14, 0x8b, 0x13, 0xd9, 0x51, 0x99, 0x03, - 0x9a, 0x39, 0xb2, 0x10, 0xdf, 0x20, 0x88, 0x32, 0xe8, 0x28, 0xb0, 0x61, 0xaa, 0x03, 0x1b, 0xc9, - 0x43, 0xc0, 0x49, 0x80, 0x91, 0x88, 0x8e, 0x04, 0x18, 0x91, 0x0a, 0x98, 0x58, 0x95, 0xaa, 0x09, - 0x02, 0x81, 0x8f, 0x91, 0x51, 0xa8, 0x08, 0x80, 0x08, 0x28, 0x84, 0x91, 0x8f, 0xa2, 0x63, 0xaa, - 0xa0, 0x38, 0x40, 0xf8, 0x3a, 0x88, 0x42, 0xc0, 0x19, 0xc9, 0x44, 0xa9, 0x80, 0x91, 0x3d, 0x95, - 0x0a, 0x83, 0x1d, 0x90, 0x12, 0x0e, 0xa4, 0x2a, 0xa3, 0x1a, 0x93, 0x8d, 0x05, 0x9b, 0xb8, 0x4a, - 0x13, 0xba, 0x16, 0x2b, 0xa4, 0x9a, 0x34, 0xcb, 0x22, 0x9e, 0x14, 0x1b, 0x94, 0x1e, 0x83, 0x0b, - 0x80, 0x89, 0x03, 0x0d, 0x05, 0x9c, 0x02, 0x1a, 0x91, 0x58, 0xc0, 0x98, 0x3b, 0x85, 0x00, 0x8d, - 0x14, 0x88, 0x98, 0x08, 0x81, 0x30, 0xb1, 0x01, 0xaf, 0x42, 0xb1, 0x28, 0xac, 0x11, 0x39, 0xe1, - 0x18, 0x9a, 0x28, 0x38, 0x37, 0xef, 0x31, 0x00, 0xb8, 0x18, 0x2b, 0x97, 0x1a, 0x12, 0xab, 0x19, - 0x17, 0x89, 0x9d, 0x23, 0xa0, 0x2a, 0xa0, 0x08, 0x86, 0x0d, 0x85, 0x8b, 0x11, 0x82, 0xb9, 0x0c, - 0x25, 0x00, 0xc9, 0x3a, 0x93, 0xcc, 0x51, 0xba, 0x12, 0x1b, 0x25, 0xc0, 0x2b, 0x84, 0x08, 0x8a, - 0x93, 0x1c, 0xe1, 0x60, 0x90, 0xa9, 0x52, 0xa0, 0x09, 0x0b, 0x24, 0xd8, 0x2a, 0x12, 0xe0, 0x3a, - 0x12, 0x98, 0xfb, 0x10, 0x10, 0xd8, 0x21, 0x39, 0xc0, 0x58, 0x91, 0x9b, 0x12, 0x41, 0xb1, 0x8f, - 0x02, 0x20, 0xb0, 0x2a, 0x93, 0xad, 0x30, 0xba, 0x17, 0x1a, 0xa3, 0x0b, 0xb8, 0x68, 0x81, 0xab, - 0x91, 0x7a, 0xb8, 0x15, 0xa8, 0x0d, 0x07, 0x1a, 0xb8, 0x11, 0x12, 0x99, 0xa9, 0x21, 0x82, 0x8f, - 0x02, 0x09, 0xb1, 0x5b, 0xa0, 0x89, 0x23, 0x72, 0xb8, 0x1c, 0x95, 0x1b, 0xc9, 0x61, 0xc0, 0x20, - 0xaa, 0x13, 0x1b, 0x86, 0x08, 0x0b, 0xa4, 0x4b, 0xd1, 0x29, 0x91, 0x01, 0x1d, 0x91, 0x18, 0x05, - 0xb8, 0x1e, 0xa3, 0x71, 0xb9, 0x29, 0x04, 0xc8, 0x29, 0x91, 0x2a, 0xc8, 0x92, 0x6a, 0xd8, 0x20, - 0x12, 0xc9, 0x30, 0xc0, 0x48, 0xb9, 0x31, 0x98, 0x18, 0x85, 0x0e, 0x01, 0x90, 0x39, 0xa1, 0x8c, - 0x37, 0xac, 0x02, 0x18, 0x88, 0xc2, 0x0e, 0x15, 0xab, 0x80, 0x30, 0xba, 0x46, 0xda, 0x10, 0x08, - 0x01, 0x90, 0x1c, 0x05, 0x98, 0x08, 0x88, 0x1a, 0x94, 0x9a, 0x18, 0xba, 0x73, 0x93, 0x90, 0xad, - 0x26, 0x8a, 0xc1, 0x49, 0x91, 0x19, 0xb0, 0x1b, 0x11, 0xb8, 0x77, 0xd9, 0x28, 0x00, 0xa0, 0x28, - 0x80, 0x89, 0x13, 0x9c, 0xb3, 0x8f, 0x05, 0x89, 0xa2, 0x3b, 0x93, 0x18, 0x94, 0x8f, 0x03, 0x99, - 0x32, 0xca, 0x10, 0x28, 0x33, 0xf9, 0x1f, 0x91, 0x11, 0x08, 0xa0, 0x0b, 0x21, 0x03, 0xbe, 0x2a, - 0x35, 0xd2, 0x0c, 0x92, 0x18, 0x83, 0x29, 0xa8, 0xd8, 0x7a, 0x82, 0x9a, 0x10, 0x85, 0x1c, 0xa0, - 0x20, 0xba, 0x33, 0x12, 0xaf, 0x01, 0x8c, 0x24, 0xa8, 0x09, 0x31, 0x9c, 0xa7, 0x4b, 0xa8, 0x30, - 0x92, 0x1c, 0x14, 0xaf, 0x31, 0x10, 0x92, 0x9f, 0x14, 0x9a, 0x98, 0x01, 0x78, 0xc0, 0x3a, 0xb0, - 0x41, 0x0a, 0xa3, 0x2b, 0xd1, 0x19, 0x35, 0xcb, 0x30, 0xa8, 0x23, 0xcd, 0x31, 0xa9, 0x18, 0x84, - 0xa0, 0x0e, 0x14, 0x99, 0x1a, 0x13, 0x80, 0xad, 0x03, 0x58, 0xfa, 0x59, 0x80, 0x90, 0x18, 0x88, - 0x99, 0x40, 0x86, 0x8a, 0x80, 0x28, 0x98, 0xba, 0x31, 0x07, 0xac, 0x1b, 0x16, 0xab, 0x31, 0x20, - 0xe2, 0x8b, 0x41, 0x82, 0xca, 0x38, 0x85, 0x0c, 0x81, 0x3b, 0xb6, 0x5b, 0xb2, 0x8a, 0x20, 0x09, - 0x03, 0x9c, 0x33, 0xa9, 0x98, 0x88, 0x32, 0xfc, 0x2b, 0x07, 0x80, 0xac, 0x14, 0x09, 0x98, 0x23, - 0xca, 0x1b, 0xa2, 0x72, 0xa0, 0x30, 0xc2, 0x9f, 0x22, 0x00, 0x9c, 0x22, 0x9a, 0x23, 0xcf, 0x25, - 0x99, 0x08, 0x08, 0x02, 0xcb, 0x21, 0x88, 0x93, 0x0d, 0x02, 0x89, 0x25, 0xca, 0x99, 0x29, 0x52, - 0xb2, 0xdc, 0x41, 0xa1, 0x0a, 0xb0, 0x52, 0xa9, 0x52, 0xb0, 0x0a, 0x88, 0x63, 0xc2, 0x0a, 0x01, - 0x29, 0xe1, 0x40, 0xa9, 0x29, 0x21, 0xd8, 0x99, 0x3c, 0x05, 0x90, 0x9c, 0x42, 0xcb, 0x32, 0x00, - 0x38, 0xfa, 0x21, 0xc8, 0x2a, 0x94, 0x40, 0x90, 0xb8, 0x69, 0xc0, 0x29, 0x14, 0xba, 0x09, 0xa2, - 0x8c, 0x10, 0x45, 0xb0, 0xcb, 0x22, 0x01, 0xca, 0x40, 0x93, 0x2b, 0xc8, 0x42, 0xac, 0x22, 0x32, - 0xc1, 0xaf, 0x01, 0x10, 0x08, 0x43, 0xea, 0x20, 0x10, 0xb1, 0xad, 0x2a, 0x06, 0xab, 0x43, 0x89, - 0x91, 0x9b, 0x72, 0xb1, 0x08, 0x29, 0x94, 0xdd, 0x68, 0x82, 0x8a, 0xa0, 0x20, 0xba, 0x29, 0x35, - 0xb1, 0xaf, 0x53, 0xa0, 0x0a, 0x12, 0x00, 0xe1, 0x2a, 0x83, 0xad, 0x21, 0x24, 0xc8, 0x8d, 0x02, - 0x18, 0xc0, 0x60, 0x81, 0xab, 0x22, 0x99, 0x81, 0x88, 0x29, 0xc6, 0x1d, 0x82, 0x18, 0x98, 0x30, - 0x03, 0xad, 0x28, 0x80, 0xc8, 0x71, 0x94, 0xac, 0x02, 0x28, 0xb1, 0x2a, 0x31, 0xe3, 0xad, 0x31, - 0x10, 0x99, 0x35, 0xea, 0x18, 0x90, 0x31, 0xf9, 0x28, 0x81, 0x80, 0xac, 0x44, 0xb8, 0x29, 0x93, - 0x00, 0xfb, 0x58, 0xa1, 0x18, 0xb1, 0x59, 0xd1, 0x1a, 0x12, 0x82, 0xac, 0x01, 0x82, 0x1e, 0x83, - 0x8a, 0x18, 0x17, 0xbb, 0x80, 0x59, 0xa0, 0x10, 0xa8, 0x11, 0x23, 0xfa, 0x1a, 0x80, 0x43, 0x8b, - 0xc0, 0x51, 0xb8, 0x29, 0xa0, 0x82, 0x28, 0x79, 0xb3, 0x3b, 0xc1, 0x2a, 0x03, 0x00, 0xcf, 0x23, - 0x98, 0xeb, 0x38, 0x43, 0xe2, 0x1b, 0x12, 0xd9, 0x38, 0x02, 0xc0, 0x19, 0x10, 0xe0, 0x3a, 0x04, - 0x39, 0xe2, 0x0a, 0xa8, 0x1b, 0x45, 0x22, 0xf8, 0x5b, 0xa0, 0x10, 0x08, 0x01, 0xba, 0x2a, 0xb2, - 0x8c, 0x33, 0xa9, 0x27, 0xcb, 0xb0, 0x58, 0x02, 0x18, 0xc2, 0x0e, 0x03, 0x0b, 0x83, 0xae, 0x73, - 0xa1, 0x09, 0xc9, 0x11, 0x30, 0xb1, 0x31, 0xf8, 0x8a, 0x24, 0xa9, 0xa8, 0x40, 0x81, 0xb0, 0xbd, - 0x51, 0x91, 0x42, 0xc8, 0x09, 0x88, 0x24, 0x88, 0x98, 0xca, 0x35, 0x9e, 0x12, 0xab, 0x16, 0x88, - 0x98, 0xba, 0x79, 0xa3, 0x10, 0xb8, 0x89, 0x21, 0x32, 0xf9, 0x1c, 0x12, 0x12, 0xd8, 0x0c, 0x13, - 0x99, 0x11, 0x98, 0x89, 0x3a, 0x23, 0xb5, 0x9f, 0x48, 0x83, 0xaa, 0xd0, 0x1a, 0x42, 0x94, 0x8b, - 0x02, 0x01, 0x99, 0x93, 0x9c, 0x12, 0x29, 0x16, 0xff, 0x20, 0x80, 0x13, 0xba, 0x29, 0x90, 0xab, - 0x54, 0xd9, 0x41, 0xbb, 0x35, 0xaa, 0x80, 0x89, 0x51, 0xc2, 0x2d, 0x92, 0x81, 0x0b, 0x35, 0xc9, - 0x9b, 0x61, 0x81, 0x9c, 0x18, 0x13, 0xb9, 0x08, 0x2b, 0x86, 0x0b, 0x33, 0xc0, 0xac, 0x73, 0xb2, - 0x0b, 0xa2, 0x4a, 0xa2, 0x28, 0xc2, 0x9f, 0x25, 0x89, 0xa1, 0x0b, 0x14, 0x18, 0xf0, 0x1a, 0x01, - 0x20, 0xa0, 0x09, 0xbb, 0x41, 0x04, 0xbb, 0x63, 0x80, 0xaa, 0x31, 0xb0, 0x6b, 0x23, 0xaa, 0xb2, - 0xef, 0x31, 0x10, 0xa9, 0x88, 0x29, 0xb3, 0x3c, 0x16, 0xb9, 0x19, 0x21, 0xb3, 0xbf, 0x40, 0x91, - 0x11, 0xb9, 0x30, 0xfb, 0x7a, 0xa2, 0x20, 0xca, 0x51, 0xc1, 0x0b, 0x33, 0xc8, 0x88, 0x30, 0xf2, - 0x1a, 0xa2, 0x40, 0xc0, 0x39, 0xa1, 0x28, 0x81, 0x29, 0xb0, 0x38, 0xc4, 0x8e, 0x99, 0x32, 0x26, - 0xac, 0x01, 0x99, 0x20, 0x1a, 0x04, 0x89, 0x99, 0x40, 0x12, 0xf9, 0x2f, 0x84, 0x1b, 0x91, 0x1b, - 0xb3, 0x6b, 0x82, 0x99, 0x20, 0x08, 0xa2, 0xbd, 0x71, 0xc1, 0x2a, 0x82, 0x90, 0x99, 0x78, 0xb2, - 0xac, 0x58, 0x83, 0xa0, 0x2c, 0x94, 0x1a, 0x01, 0x18, 0xfa, 0x5c, 0x91, 0x18, 0xd8, 0x40, 0x91, - 0x0a, 0x82, 0x0a, 0xd9, 0x41, 0x81, 0xa9, 0x0a, 0x51, 0xb3, 0x0e, 0x83, 0x09, 0x88, 0x89, 0x32, - 0x9c, 0x34, 0x02, 0xfc, 0x09, 0x23, 0xa9, 0x88, 0x12, 0xa0, 0x1f, 0x05, 0x99, 0x09, 0x19, 0x25, - 0xca, 0x9d, 0x23, 0x01, 0x08, 0xa8, 0x9c, 0x9a, 0x47, 0xb0, 0x0a, 0x32, 0x93, 0xeb, 0x58, 0xa8, - 0x12, 0x89, 0x81, 0xbf, 0x50, 0x83, 0x9b, 0x09, 0x35, 0xc8, 0x0a, 0x83, 0x19, 0xb9, 0x57, 0xd8, - 0x09, 0x11, 0x90, 0x98, 0x28, 0xa2, 0x99, 0x28, 0x10, 0x94, 0x8a, 0x35, 0xaa, 0xfc, 0x39, 0x16, - 0xaa, 0x18, 0x80, 0xba, 0x59, 0x12, 0x02, 0x9b, 0x41, 0xc1, 0x9f, 0x41, 0x81, 0x81, 0x9c, 0x82, - 0x0a, 0x09, 0x16, 0xba, 0x1a, 0x12, 0x0a, 0xa8, 0x33, 0x4a, 0xc2, 0x33, 0x9d, 0xa9, 0x90, 0x67, - 0xaa, 0x98, 0x21, 0xc9, 0x49, 0x13, 0x20, 0xaf, 0x84, 0xab, 0x41, 0x82, 0x98, 0x0b, 0x02, 0xdb, - 0x39, 0x84, 0x38, 0xb2, 0x8f, 0x92, 0x30, 0x84, 0x2a, 0x95, 0xaf, 0x00, 0x18, 0x06, 0x8a, 0x02, - 0x9d, 0x01, 0x1a, 0x84, 0x9a, 0x20, 0x10, 0xc5, 0x2d, 0x02, 0x80, 0x9a, 0x03, 0x0b, 0x21, 0x92, - 0xc8, 0x1c, 0x25, 0x40, 0xfa, 0x09, 0x10, 0x80, 0xb1, 0x38, 0xfb, 0x30, 0x04, 0x9c, 0x02, 0x8b, - 0x85, 0x00, 0x0a, 0xca, 0x64, 0xa1, 0x9a, 0x00, 0x41, 0xd0, 0x19, 0x90, 0x58, 0xc2, 0x08, 0x98, - 0x08, 0x04, 0x8d, 0x02, 0xab, 0x33, 0x8b, 0x86, 0x9d, 0x04, 0x0a, 0x13, 0x9b, 0x91, 0x40, 0x95, - 0x2b, 0xbd, 0x73, 0xb0, 0x1a, 0x83, 0x9b, 0x04, 0x9a, 0x98, 0x51, 0x92, 0xb8, 0x3a, 0x30, 0x97, - 0x8a, 0x30, 0xd0, 0x08, 0x80, 0x32, 0xfc, 0x3b, 0x07, 0x9a, 0x99, 0x43, 0x99, 0x98, 0x22, 0x2b, - 0xe4, 0x38, 0xa0, 0x91, 0x0b, 0x22, 0xf1, 0x4a, 0x05, 0x9a, 0x20, 0x30, 0xea, 0x09, 0x12, 0x99, - 0x29, 0xa6, 0x1c, 0xb1, 0x40, 0xe9, 0x3a, 0x04, 0x0b, 0xc2, 0x39, 0xb1, 0x50, 0x80, 0xa1, 0x8a, - 0x4a, 0x86, 0x8c, 0x92, 0x49, 0xa3, 0x0b, 0xb2, 0x2d, 0x05, 0xb8, 0x2a, 0xf2, 0x28, 0x01, 0x01, - 0xbe, 0x32, 0x89, 0x00, 0x9c, 0x16, 0x9a, 0x32, 0xfa, 0x49, 0x01, 0x88, 0x98, 0x0a, 0x20, 0x80, - 0x02, 0x89, 0xdc, 0x50, 0x01, 0xb9, 0x51, 0x99, 0xab, 0x11, 0x73, 0xe2, 0x0a, 0x14, 0xb9, 0x89, - 0x52, 0xb8, 0x20, 0x09, 0x02, 0xab, 0x11, 0x34, 0xfb, 0x99, 0x40, 0xc0, 0x4b, 0x84, 0x19, 0xca, - 0x63, 0xb8, 0x2a, 0x03, 0x88, 0xa8, 0x49, 0xb2, 0x41, 0x9b, 0x8b, 0x27, 0x9f, 0x15, 0x9c, 0x11, - 0x88, 0x11, 0xc8, 0x39, 0xa3, 0x2b, 0xb8, 0x43, 0xbc, 0x12, 0x8b, 0x17, 0xac, 0x15, 0x89, 0x9a, - 0x31, 0x04, 0x89, 0x9a, 0x38, 0xf8, 0x39, 0x32, 0xd0, 0x9d, 0x13, 0x99, 0xa1, 0x7a, 0x82, 0xb8, - 0x3b, 0x83, 0x99, 0x21, 0x31, 0xf0, 0x8f, 0x31, 0x98, 0x88, 0x42, 0xc9, 0x29, 0x90, 0x02, 0x20, - 0xab, 0x46, 0xfa, 0x20, 0x99, 0x04, 0x9d, 0x11, 0x81, 0x8a, 0x10, 0x21, 0xa8, 0x10, 0x2a, 0x37, - 0xcf, 0x41, 0xb8, 0x28, 0x11, 0x91, 0xaf, 0x33, 0x88, 0xd0, 0x39, 0x84, 0x9d, 0x22, 0x80, 0x9a, - 0x10, 0x33, 0xc1, 0xad, 0x21, 0x18, 0xa8, 0x21, 0x00, 0x19, 0x10, 0x17, 0xbf, 0x48, 0x84, 0x9a, - 0xa8, 0x20, 0x80, 0x88, 0x2a, 0x03, 0xf9, 0x58, 0xa0, 0x9a, 0x40, 0x13, 0x8a, 0xa1, 0x4a, 0xc1, - 0x68, 0xa3, 0x8f, 0x82, 0x28, 0xa1, 0x8d, 0x14, 0xaa, 0x14, 0x9f, 0x12, 0x9b, 0x34, 0x99, 0xa2, - 0x9f, 0x05, 0x0a, 0x90, 0x21, 0x92, 0xbb, 0x71, 0xc8, 0x31, 0x10, 0xa8, 0xbb, 0x39, 0x34, 0xc9, - 0x39, 0x92, 0x9f, 0x21, 0x01, 0x88, 0xea, 0x78, 0xb1, 0x0b, 0x23, 0xaa, 0x51, 0x81, 0xb9, 0x39, - 0xa0, 0x39, 0xc3, 0x2a, 0x47, 0xda, 0x29, 0x92, 0x39, 0xa0, 0x31, 0xf8, 0x0d, 0x04, 0x09, 0x91, - 0x09, 0x19, 0x02, 0xaa, 0x18, 0x15, 0x1a, 0x86, 0xae, 0x90, 0x50, 0x84, 0xaa, 0x00, 0x88, 0x98, - 0x28, 0x14, 0x9b, 0x28, 0x03, 0xfa, 0x0f, 0x24, 0xb9, 0x21, 0x9b, 0x13, 0x80, 0x1a, 0xa5, 0x0c, - 0x43, 0x98, 0xf9, 0x4b, 0x82, 0x80, 0xa9, 0x02, 0xb9, 0x1a, 0x83, 0x2e, 0x94, 0x9b, 0x51, 0x93, - 0x0f, 0x23, 0xaa, 0x00, 0x28, 0xc8, 0x3a, 0x13, 0xa2, 0x30, 0xbb, 0xc1, 0x53, 0xbf, 0x70, 0xc2, - 0x19, 0x89, 0x12, 0xb0, 0x39, 0xda, 0x24, 0x8a, 0x18, 0xf3, 0x1a, 0x12, 0x00, 0x10, 0x8b, 0x96, - 0x9f, 0x34, 0x09, 0xb9, 0x48, 0xb8, 0x20, 0x0a, 0x93, 0x59, 0xc0, 0x18, 0x9c, 0x73, 0xb0, 0x08, - 0x89, 0x22, 0x92, 0x1e, 0xc0, 0x22, 0x8c, 0x05, 0x99, 0x00, 0xc8, 0x59, 0xd2, 0x48, 0xb0, 0x20, - 0x89, 0xaa, 0x13, 0x8b, 0x41, 0x01, 0xb1, 0x8f, 0x33, 0x0a, 0xb8, 0x28, 0x81, 0xe8, 0x70, 0xc0, - 0x21, 0xb8, 0x99, 0x10, 0xa0, 0x65, 0x99, 0x99, 0x33, 0x9e, 0x31, 0xdb, 0x11, 0x10, 0x00, 0xc0, - 0x9a, 0x35, 0xad, 0x35, 0x98, 0xaa, 0x38, 0x00, 0xc0, 0x72, 0x98, 0x91, 0xbc, 0x40, 0x92, 0x29, - 0xe3, 0x1a, 0xb1, 0x7a, 0xa4, 0x19, 0x98, 0x31, 0xda, 0x10, 0x81, 0x9c, 0x24, 0x20, 0xeb, 0x19, - 0x12, 0x00, 0xb1, 0x8a, 0x35, 0x9e, 0x12, 0x88, 0x8b, 0x43, 0xc0, 0xaa, 0x38, 0x80, 0x97, 0x1d, - 0x03, 0x9a, 0x04, 0x8a, 0x88, 0x82, 0x3a, 0xc3, 0xb9, 0x7b, 0xa1, 0x62, 0xca, 0x28, 0xc9, 0x41, - 0xa8, 0x22, 0x9d, 0x25, 0x9b, 0x10, 0x91, 0x99, 0xba, 0x71, 0xa3, 0xa8, 0x0a, 0x12, 0x04, 0x0c, - 0x84, 0x8a, 0x9b, 0x57, 0xd9, 0x29, 0x02, 0x88, 0x9d, 0x13, 0x80, 0x9b, 0x82, 0x48, 0xb0, 0x52, - 0x82, 0xac, 0x91, 0x58, 0x88, 0xab, 0x37, 0x8c, 0x91, 0x18, 0x98, 0x00, 0x81, 0x80, 0x9c, 0xaa, - 0x37, 0x4a, 0xc1, 0x2a, 0xa8, 0x51, 0xc9, 0x21, 0x89, 0x32, 0xc8, 0x99, 0x62, 0xa8, 0x01, 0x8f, - 0x15, 0xb9, 0x59, 0xb8, 0x29, 0x82, 0x09, 0x14, 0xcd, 0x40, 0xb0, 0x11, 0x08, 0x82, 0xbc, 0x30, - 0x14, 0x99, 0xcc, 0x70, 0xc1, 0x3a, 0x92, 0x30, 0xf9, 0x49, 0x91, 0x0a, 0x10, 0x11, 0xf0, 0x2a, - 0x81, 0x9a, 0x13, 0x09, 0x88, 0x08, 0x31, 0x82, 0xf8, 0x2f, 0xa5, 0x19, 0x90, 0x22, 0x9b, 0xb1, - 0x59, 0x91, 0xbc, 0x71, 0x81, 0x99, 0x1b, 0x86, 0x29, 0xb0, 0x41, 0xd9, 0x1a, 0x05, 0xa9, 0x80, - 0x0a, 0x17, 0x8b, 0x21, 0xa8, 0xaa, 0x73, 0x90, 0x9a, 0x12, 0x08, 0xa0, 0xbb, 0x74, 0xb0, 0x2b, - 0xa3, 0x9b, 0x08, 0x67, 0xb0, 0x0a, 0x18, 0x86, 0xab, 0x41, 0xc1, 0x19, 0x04, 0x9a, 0xa1, 0x3a, - 0x24, 0xd9, 0x9a, 0x38, 0x85, 0x19, 0x89, 0x12, 0xf9, 0x3b, 0x93, 0x98, 0x1b, 0x32, 0x84, 0xbe, - 0x50, 0x10, 0x99, 0x20, 0xc2, 0x39, 0xda, 0x21, 0xd8, 0x59, 0x14, 0xdb, 0x18, 0xa8, 0x22, 0x01, - 0x19, 0xe2, 0x0c, 0x03, 0x30, 0x90, 0xa9, 0xad, 0x13, 0x52, 0xdb, 0x02, 0x2d, 0x07, 0xba, 0x29, - 0x02, 0x01, 0xb0, 0x2b, 0xc2, 0x4b, 0x14, 0x98, 0x8d, 0x14, 0xb8, 0x1b, 0x92, 0x69, 0xa1, 0x40, - 0xd9, 0x88, 0x40, 0x92, 0xa8, 0x1e, 0x82, 0x01, 0x90, 0x8f, 0x84, 0x29, 0xa2, 0x0c, 0x82, 0x1b, - 0x16, 0xb9, 0x90, 0x3b, 0x17, 0xab, 0x32, 0xa9, 0x88, 0x18, 0x08, 0xab, 0x68, 0x05, 0xe8, 0x1c, - 0x83, 0x30, 0xbb, 0x93, 0xad, 0x43, 0x1a, 0x14, 0xea, 0x28, 0xa2, 0x20, 0x99, 0xaa, 0x22, 0x05, - 0x9a, 0x28, 0xfb, 0x54, 0xc9, 0x30, 0xa9, 0x02, 0x1a, 0xc3, 0x2d, 0xa1, 0x52, 0xc8, 0x09, 0x00, - 0xa2, 0x1a, 0x03, 0x0f, 0x85, 0x0a, 0x81, 0xa9, 0x23, 0x29, 0x94, 0x9d, 0x98, 0x63, 0x98, 0x0b, - 0x14, 0x99, 0x91, 0x2f, 0x93, 0x9b, 0x23, 0x40, 0xf9, 0x1a, 0x12, 0x22, 0xdc, 0x12, 0x99, 0x8a, - 0x24, 0x9b, 0x91, 0x44, 0x09, 0xf9, 0x1a, 0x12, 0x03, 0xbc, 0x92, 0x6a, 0xc8, 0x24, 0xca, 0x10, - 0x88, 0x14, 0x1b, 0xc1, 0x2b, 0x33, 0x03, 0xfa, 0x1f, 0x12, 0xa0, 0x1a, 0x81, 0x2a, 0xa1, 0x08, - 0xba, 0x70, 0x90, 0x83, 0xad, 0x28, 0x02, 0x8c, 0x95, 0x4c, 0x93, 0x1c, 0xb0, 0x4a, 0xc2, 0x68, - 0x98, 0x00, 0x8a, 0x42, 0x91, 0x9a, 0x0a, 0x82, 0xca, 0x01, 0x70, 0xb8, 0x29, 0x94, 0xaf, 0x34, - 0x90, 0x8a, 0xb9, 0x45, 0xb9, 0x11, 0x88, 0xa0, 0x70, 0xc1, 0x08, 0x99, 0x20, 0x95, 0x8b, 0x05, - 0x19, 0xd0, 0x30, 0xa8, 0x99, 0x30, 0x01, 0xa8, 0x1f, 0x86, 0x8c, 0x02, 0x00, 0x19, 0xc0, 0x58, - 0xc3, 0x1d, 0x83, 0x89, 0x88, 0x31, 0xd0, 0x8b, 0x11, 0x22, 0xc1, 0x1f, 0x84, 0x99, 0x10, 0x91, - 0x38, 0xb8, 0x52, 0xbb, 0x80, 0x71, 0xb4, 0x8a, 0xac, 0x12, 0x33, 0xc9, 0x32, 0xec, 0x11, 0x89, - 0x13, 0xae, 0x33, 0xa8, 0xa9, 0x0b, 0x34, 0xa2, 0x38, 0xb8, 0xac, 0x20, 0x27, 0x2a, 0xc9, 0x25, - 0xab, 0x08, 0x89, 0x03, 0x44, 0x1c, 0xf3, 0x0d, 0x31, 0x88, 0xc0, 0x38, 0x93, 0x9d, 0x01, 0x48, - 0xf0, 0x38, 0x91, 0x88, 0x8b, 0x16, 0x09, 0x99, 0x10, 0x10, 0x90, 0x2d, 0x87, 0x0a, 0x88, 0x00, - 0xa9, 0x29, 0x71, 0xb0, 0x08, 0x8a, 0x24, 0xc9, 0x18, 0x21, 0x22, 0xcf, 0x50, 0xa0, 0xa0, 0x2e, - 0x84, 0x89, 0x02, 0xa9, 0x09, 0x19, 0x27, 0x8c, 0x81, 0xa9, 0x23, 0x9d, 0x11, 0x83, 0x0d, 0x12, - 0x81, 0xbd, 0x29, 0x07, 0x19, 0x98, 0x99, 0x35, 0xba, 0x11, 0xda, 0x31, 0xa8, 0xbb, 0x23, 0x1a, - 0x27, 0xbb, 0x01, 0x1b, 0xd1, 0x71, 0x81, 0x0b, 0x83, 0x09, 0x82, 0x8f, 0x43, 0xa8, 0x1c, 0xc1, - 0x0b, 0x62, 0x03, 0xbb, 0x15, 0x9f, 0x13, 0x9b, 0x21, 0x90, 0x01, 0xaf, 0x34, 0xa9, 0x88, 0x31, - 0x94, 0x9f, 0x21, 0x88, 0x01, 0x19, 0x92, 0xd9, 0x2b, 0x14, 0xd0, 0x19, 0x11, 0x91, 0x8c, 0x23, - 0xb2, 0x1e, 0x92, 0xa0, 0x0b, 0x13, 0x70, 0xe2, 0x1a, 0xa1, 0x49, 0xa2, 0x20, 0xc9, 0x0c, 0x26, - 0xa8, 0x09, 0x18, 0x88, 0x91, 0x1d, 0xd1, 0x08, 0x41, 0xb3, 0x8f, 0x30, 0x87, 0x8a, 0x80, 0x09, - 0x12, 0x99, 0x89, 0x00, 0x90, 0x48, 0x07, 0xaf, 0x11, 0x00, 0x81, 0x9b, 0x30, 0xd8, 0x21, 0x2b, - 0xb6, 0x1d, 0x14, 0x98, 0xaa, 0x31, 0x22, 0xfb, 0x49, 0x81, 0x89, 0x13, 0x9b, 0x80, 0x2c, 0x86, - 0x88, 0xcb, 0x11, 0x01, 0x98, 0x21, 0xa0, 0x0d, 0x90, 0x34, 0xbb, 0x15, 0x20, 0xca, 0x51, 0xcd, - 0x10, 0x23, 0x29, 0xfa, 0x11, 0x3b, 0x95, 0x29, 0xe0, 0x10, 0x09, 0x93, 0x9b, 0x4b, 0x92, 0x20, - 0xad, 0x93, 0x60, 0x89, 0x13, 0xbf, 0x02, 0x79, 0x92, 0x0a, 0xb8, 0x3a, 0x15, 0xb9, 0xbc, 0x51, - 0x02, 0xb9, 0x11, 0x0c, 0x83, 0x62, 0xc8, 0x0a, 0x01, 0x18, 0x96, 0x0e, 0x01, 0x88, 0x01, 0x89, - 0xb0, 0x3a, 0x37, 0xdb, 0x18, 0x19, 0x34, 0xb8, 0x99, 0x9b, 0x41, 0xa3, 0xae, 0x41, 0x82, 0x1c, - 0x93, 0x0e, 0x91, 0x32, 0x11, 0xcb, 0xbb, 0x72, 0xa2, 0x08, 0xda, 0x50, 0xa1, 0x80, 0x89, 0x48, - 0x02, 0x02, 0xfa, 0x2a, 0x81, 0x98, 0x31, 0xbc, 0x05, 0x1b, 0x91, 0x0c, 0x17, 0x0c, 0x83, 0x00, - 0xc9, 0x0c, 0x25, 0x98, 0x09, 0xa0, 0x30, 0xe8, 0x49, 0xa1, 0x00, 0x8a, 0x34, 0xdc, 0x10, 0x10, - 0x12, 0x9a, 0x98, 0xa9, 0x2a, 0x37, 0x08, 0xaf, 0x04, 0x0b, 0x90, 0x11, 0x43, 0x90, 0xca, 0x2a, - 0xc8, 0x60, 0x98, 0x12, 0xcb, 0x10, 0x80, 0x93, 0x09, 0xcb, 0x47, 0x08, 0xcb, 0x40, 0x02, 0x09, - 0x99, 0xab, 0x51, 0xc8, 0x39, 0x02, 0xb8, 0x2a, 0xa5, 0x3c, 0x94, 0x9d, 0x24, 0xca, 0x2a, 0x23, - 0x18, 0x88, 0xc3, 0x8f, 0x13, 0x20, 0xc8, 0x99, 0x55, 0xa8, 0x8a, 0x01, 0x12, 0x9c, 0x80, 0xb0, - 0x21, 0xae, 0x36, 0xaa, 0x88, 0x84, 0x8d, 0x12, 0x01, 0x18, 0xf0, 0x58, 0xa9, 0x11, 0x19, 0x92, - 0x8f, 0x11, 0x93, 0x1e, 0xa0, 0x23, 0x08, 0x9a, 0xa0, 0x11, 0x8b, 0x14, 0xea, 0x1a, 0x41, 0xb2, - 0x0d, 0x34, 0xe9, 0x89, 0x00, 0x28, 0x82, 0x33, 0x2d, 0xca, 0x91, 0x68, 0x80, 0xcd, 0x32, 0x90, - 0x89, 0x28, 0x07, 0xab, 0x80, 0x31, 0x88, 0x1a, 0xd4, 0x98, 0x4b, 0x93, 0x25, 0xdc, 0x3a, 0x03, - 0xa9, 0x59, 0xa1, 0xb8, 0x39, 0x12, 0xb1, 0x9c, 0x37, 0x99, 0xab, 0x00, 0x33, 0xbb, 0x24, 0x90, - 0x39, 0xf8, 0x68, 0x98, 0x29, 0x97, 0x1a, 0x98, 0x0b, 0x94, 0x38, 0x99, 0xd0, 0x59, 0x82, 0x0b, - 0xda, 0x42, 0x09, 0xa3, 0xac, 0x30, 0x86, 0x08, 0x39, 0x99, 0xe3, 0x39, 0x92, 0x1f, 0x84, 0x09, - 0x90, 0x0d, 0x23, 0xac, 0x01, 0x19, 0x83, 0x1b, 0x11, 0xf8, 0x0b, 0x49, 0x07, 0x9d, 0x21, 0x00, - 0x98, 0x1a, 0x84, 0x0a, 0x93, 0x8d, 0x12, 0xa9, 0x38, 0xb5, 0x2d, 0x12, 0x90, 0xc0, 0x1c, 0x03, - 0x8f, 0x80, 0x40, 0x08, 0x82, 0x8d, 0x93, 0x8b, 0x31, 0x34, 0xfa, 0x20, 0x89, 0x01, 0xb2, 0x7b, - 0xb2, 0x3b, 0xf0, 0x08, 0x02, 0x38, 0xc8, 0x39, 0xa1, 0x69, 0xb2, 0x49, 0xb9, 0xcb, 0x71, 0xd3, - 0x18, 0x18, 0x28, 0xd1, 0x88, 0x39, 0x91, 0xab, 0x45, 0xb9, 0x28, 0x03, 0x98, 0xbc, 0x73, 0x91, - 0xcb, 0x81, 0x71, 0xb8, 0x20, 0x80, 0xb8, 0x0c, 0x26, 0xc0, 0x10, 0x89, 0x05, 0xbc, 0x50, 0xa8, - 0x01, 0x90, 0x00, 0xba, 0x28, 0x04, 0x20, 0xac, 0x41, 0xb8, 0x99, 0x53, 0x90, 0xa9, 0x08, 0x42, - 0xd1, 0x4c, 0x84, 0x88, 0x9d, 0x22, 0xb0, 0x2a, 0x06, 0x9a, 0x10, 0x1a, 0x83, 0x0c, 0xda, 0x29, - 0xa6, 0x7a, 0xb1, 0x1b, 0x83, 0x71, 0xb1, 0x8c, 0x82, 0x18, 0xc8, 0x40, 0xc2, 0x3a, 0x02, 0x81, - 0xca, 0x2a, 0x05, 0x98, 0x9b, 0x22, 0xa1, 0x58, 0x04, 0xfa, 0x29, 0x28, 0xe8, 0x10, 0x1a, 0x42, - 0xf0, 0x38, 0xa8, 0x81, 0x29, 0x91, 0x12, 0xbd, 0x30, 0x91, 0x0a, 0x12, 0x14, 0xf9, 0x3a, 0xd0, - 0x68, 0x90, 0x81, 0x8a, 0x0a, 0x86, 0x89, 0x11, 0xb9, 0x09, 0x23, 0x0d, 0xa5, 0x2b, 0x82, 0x29, - 0xcb, 0x01, 0x09, 0x9a, 0x47, 0x98, 0x9a, 0x8a, 0x86, 0x2b, 0x96, 0x1b, 0x21, 0xf9, 0x42, 0xa0, - 0x8b, 0x20, 0x86, 0x8d, 0x81, 0x39, 0xc2, 0x0a, 0x10, 0x19, 0x13, 0xa1, 0xbb, 0x8e, 0x27, 0x8a, - 0x88, 0xaa, 0x44, 0x98, 0x1c, 0x90, 0x25, 0x89, 0x01, 0xeb, 0x21, 0x03, 0xba, 0x28, 0x9d, 0x26, - 0x90, 0xbb, 0x20, 0x19, 0xe1, 0x38, 0xab, 0x26, 0x8a, 0x91, 0x9e, 0x12, 0x33, 0x20, 0xe1, 0x9b, - 0x81, 0x49, 0x95, 0x0a, 0x81, 0x00, 0xbb, 0x1c, 0x35, 0x94, 0x99, 0x0e, 0xa8, 0x02, 0x72, 0xa1, - 0xbb, 0x68, 0x91, 0x8b, 0x92, 0x21, 0x3b, 0xd1, 0xb2, 0x1b, 0x1b, 0x47, 0xa0, 0xac, 0x20, 0x24, - 0xca, 0x28, 0xa3, 0xbc, 0x29, 0xa2, 0x21, 0x04, 0x3d, 0x95, 0x9a, 0x19, 0x38, 0xb5, 0x2c, 0x86, - 0xbb, 0x41, 0x82, 0x09, 0x00, 0xc8, 0x8d, 0x03, 0x18, 0x19, 0xaa, 0xa4, 0x73, 0x9a, 0x11, 0x13, - 0xfc, 0x00, 0x0a, 0xb2, 0x74, 0xa0, 0x18, 0x8a, 0x02, 0x11, 0xac, 0x31, 0xc1, 0x1c, 0x24, 0xac, - 0x10, 0x00, 0x93, 0x9f, 0x83, 0x30, 0xf9, 0x1a, 0x22, 0x81, 0x1a, 0x38, 0xc3, 0x8e, 0x13, 0xa8, - 0x0a, 0x24, 0x90, 0x9d, 0x94, 0x9a, 0x48, 0xa1, 0x39, 0xb4, 0x8f, 0x43, 0xc9, 0x18, 0x80, 0x0a, - 0x05, 0x9a, 0x30, 0x96, 0x0c, 0x28, 0xe3, 0x29, 0x90, 0x80, 0x0a, 0x12, 0x89, 0x80, 0x57, 0xdb, - 0x10, 0x19, 0xb2, 0x1e, 0x92, 0x08, 0x33, 0x9f, 0x05, 0x0a, 0x80, 0x11, 0x90, 0x9a, 0x10, 0xaa, - 0x04, 0x50, 0xc3, 0x1c, 0x93, 0x2a, 0xf9, 0x48, 0x80, 0x9a, 0x18, 0x15, 0x98, 0x8b, 0x16, 0x9a, - 0x00, 0xa1, 0x45, 0x9e, 0x91, 0x00, 0x00, 0x29, 0x86, 0x8a, 0x88, 0xa8, 0x50, 0x92, 0x0b, 0x94, - 0x8b, 0x18, 0x22, 0xfb, 0x79, 0x90, 0x19, 0xc0, 0x28, 0x91, 0x92, 0x2a, 0x0a, 0xb0, 0x46, 0xaa, - 0x32, 0xbd, 0x41, 0x03, 0xbc, 0x09, 0x11, 0x88, 0xd0, 0x0d, 0x16, 0x49, 0xc2, 0x8b, 0x10, 0xa0, - 0x11, 0x1b, 0x86, 0x9c, 0x14, 0xaa, 0x03, 0x0d, 0x14, 0xaa, 0x89, 0x9a, 0x16, 0x2b, 0x95, 0x8b, - 0x40, 0xb2, 0x8a, 0x9c, 0x44, 0xa8, 0x38, 0xdc, 0x51, 0x09, 0x92, 0x09, 0xa8, 0x38, 0xc0, 0x24, - 0x0c, 0xa0, 0x40, 0xa9, 0x90, 0x86, 0x0c, 0x90, 0x91, 0x1a, 0x94, 0x2a, 0xf2, 0x20, 0x31, 0x90, - 0xd1, 0x2b, 0x91, 0x00, 0x88, 0x07, 0x8b, 0xa0, 0x03, 0xae, 0x31, 0x80, 0x05, 0x8d, 0xa1, 0x59, - 0xd9, 0x20, 0x80, 0x91, 0x08, 0xb1, 0xbf, 0x55, 0x80, 0xba, 0x28, 0x01, 0x90, 0x89, 0x44, 0xdb, - 0x12, 0x29, 0xb0, 0x9c, 0x24, 0x09, 0xea, 0x29, 0x03, 0x9c, 0x02, 0x82, 0xab, 0x30, 0x95, 0x0d, - 0x82, 0x08, 0x13, 0xff, 0x20, 0x03, 0xba, 0x21, 0xa9, 0x00, 0x90, 0x29, 0xb8, 0x41, 0x50, 0xa1, - 0xac, 0x35, 0xa1, 0x2b, 0xe3, 0x8b, 0xa8, 0x50, 0xb2, 0x38, 0xa8, 0x17, 0xa9, 0xcb, 0x15, 0x99, - 0x19, 0x14, 0xa9, 0x8c, 0x43, 0xd8, 0x09, 0x12, 0xa0, 0xca, 0x03, 0x48, 0x82, 0x0b, 0x57, 0x9e, - 0x00, 0x10, 0x82, 0x8b, 0x83, 0x9d, 0x01, 0x10, 0x00, 0x8d, 0x04, 0x0f, 0x02, 0x99, 0x00, 0x21, - 0xda, 0x18, 0xb0, 0x21, 0x03, 0xba, 0x80, 0x1d, 0x17, 0x0a, 0x90, 0x19, 0x08, 0x01, 0xdb, 0x19, - 0x38, 0x3a, 0xa6, 0x91, 0xaf, 0x13, 0x2a, 0xc0, 0x1c, 0x85, 0x18, 0x18, 0xdb, 0x30, 0xa3, 0x38, - 0xbe, 0x10, 0x21, 0xb1, 0x12, 0x9f, 0x02, 0x9b, 0x47, 0xbb, 0x21, 0x09, 0xa8, 0x99, 0x25, 0xbc, - 0x35, 0xab, 0xc2, 0x28, 0x81, 0x10, 0xa8, 0x88, 0x20, 0xb9, 0x07, 0x0d, 0x90, 0x09, 0x40, 0x99, - 0x90, 0x01, 0x9b, 0xfb, 0x32, 0x1c, 0x59, 0xb3, 0xbb, 0x6b, 0x1a, 0x05, 0xbb, 0xb1, 0x6a, 0xc2, - 0x21, 0x9a, 0x82, 0x8d, 0x21, 0xa3, 0xc8, 0x0c, 0x61, 0xb9, 0x18, 0x0a, 0x20, 0xab, 0x28, 0x92, - 0x0c, 0x26, 0x09, 0xdb, 0x29, 0x84, 0x8e, 0x00, 0x08, 0x48, 0xa3, 0xbd, 0x20, 0x2b, 0x04, 0xba, - 0x18, 0x0a, 0x84, 0x2e, 0xb0, 0x8c, 0x42, 0x81, 0x9c, 0xbb, 0x7b, 0x81, 0x12, 0x8c, 0x09, 0x49, - 0xa1, 0xa0, 0x81, 0x9e, 0x33, 0x0c, 0xc1, 0x38, 0x29, 0xba, 0xa2, 0x3b, 0x8d, 0x29, 0x50, 0xbb, - 0x93, 0xd2, 0x19, 0x3a, 0x0a, 0x70, 0xb9, 0x92, 0x0b, 0x08, 0x11, 0x32, 0x8f, 0x09, 0x90, 0xa3, - 0xf2, 0xb2, 0x90, 0x00, 0x02, 0xf9, 0x88, 0x70, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, - 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x7f, 0xf3, 0x5a, 0x74, 0xda, 0x32, 0x29, 0xb5, - 0x2d, 0x06, 0x0a, 0x47, 0x2a, 0xf8, 0x1a, 0x81, 0x81, 0x28, 0xf0, 0x29, 0xb0, 0x5a, 0x03, 0xbb, - 0x60, 0xa2, 0xab, 0x0a, 0x05, 0x89, 0x20, 0x07, 0xbb, 0x21, 0x11, 0xce, 0x33, 0x8b, 0xb5, 0x5d, - 0xb2, 0x1b, 0x11, 0x82, 0xab, 0x31, 0xc1, 0x0a, 0x54, 0xf8, 0x28, 0xb1, 0x3a, 0x91, 0x13, 0x2c, - 0xb6, 0x8d, 0x43, 0xb9, 0x81, 0x30, 0xda, 0x11, 0x2a, 0xb4, 0x3a, 0x98, 0x04, 0x3b, 0xc0, 0x90, - 0x90, 0x1f, 0x07, 0x8c, 0x10, 0xa1, 0x3a, 0xa2, 0xaa, 0x50, 0xa3, 0x1b, 0xd8, 0x41, 0x0b, 0x87, - 0x0d, 0x82, 0x08, 0x20, 0xa0, 0x1a, 0xb2, 0x41, 0x1b, 0xb3, 0x6a, 0xb0, 0x59, 0xc1, 0x00, 0x8c, - 0x99, 0x24, 0x9b, 0x13, 0x89, 0xce, 0x53, 0xa8, 0x10, 0xaa, 0x24, 0x8b, 0xa3, 0x4a, 0x83, 0x08, - 0xba, 0x07, 0x8f, 0x12, 0x12, 0xbe, 0x22, 0x40, 0xd9, 0x00, 0x20, 0xa9, 0x83, 0xaa, 0x30, 0xdd, - 0xea, 0x1c, 0x26, 0x28, 0xc1, 0x1a, 0x82, 0xc9, 0x50, 0x01, 0xc8, 0x29, 0x81, 0x12, 0x9e, 0x85, - 0x38, 0x9c, 0x05, 0x28, 0xcb, 0x41, 0xa0, 0x8b, 0x32, 0x90, 0x92, 0x0f, 0x05, 0x9c, 0x12, 0x0a, - 0x12, 0xbd, 0x23, 0xca, 0x9a, 0x45, 0xb8, 0x89, 0x11, 0x19, 0xf0, 0x29, 0x10, 0xcc, 0x52, 0x81, - 0xbb, 0x40, 0x93, 0x0c, 0x88, 0x02, 0x0a, 0x41, 0xa4, 0x0e, 0x82, 0x19, 0x03, 0xfb, 0x5a, 0x02, - 0xca, 0x30, 0xa8, 0x88, 0x61, 0x00, 0xfb, 0x32, 0x98, 0x80, 0x89, 0x02, 0x62, 0xfb, 0x38, 0x81, - 0x88, 0x20, 0xb1, 0x0c, 0x15, 0x1c, 0xa1, 0x99, 0x38, 0x03, 0xbc, 0x12, 0x21, 0xe8, 0x78, 0xd1, - 0x29, 0x81, 0xa8, 0x10, 0xc9, 0x5a, 0x00, 0xa2, 0x19, 0x80, 0x88, 0xaa, 0x00, 0x17, 0xab, 0x30, - 0x00, 0xf1, 0x7b, 0xb2, 0x08, 0x0b, 0xd2, 0x70, 0xa8, 0x20, 0x98, 0x21, 0x8e, 0x94, 0x9a, 0x32, - 0x98, 0x88, 0xfa, 0x42, 0x80, 0xa8, 0x33, 0xcd, 0x20, 0x01, 0xa1, 0x2c, 0xa3, 0x20, 0xaf, 0x85, - 0x38, 0xa0, 0xb8, 0x4a, 0xb4, 0x69, 0xa0, 0x09, 0x08, 0x82, 0x08, 0xc1, 0x1b, 0x83, 0x40, 0xcb, - 0x32, 0xf9, 0x59, 0xd8, 0x21, 0x89, 0x02, 0x2a, 0xd0, 0x88, 0x68, 0xa0, 0x89, 0x13, 0x1b, 0xc3, - 0x19, 0xab, 0x37, 0x0b, 0xb8, 0x24, 0xae, 0x51, 0x91, 0xba, 0x62, 0x89, 0x90, 0x08, 0x01, 0x08, - 0x98, 0x00, 0xf1, 0x5a, 0x02, 0xc8, 0x38, 0x88, 0xa1, 0x5d, 0xb3, 0x0b, 0x48, 0xb9, 0x14, 0xb8, - 0x49, 0xa2, 0xab, 0x69, 0xa1, 0x0a, 0x45, 0xc0, 0xab, 0x62, 0xb8, 0x19, 0x14, 0x9c, 0x32, 0xcb, - 0x24, 0xab, 0x29, 0x85, 0x89, 0x08, 0xa8, 0x23, 0x0e, 0x04, 0xac, 0x62, 0xb8, 0x21, 0xab, 0x28, - 0x05, 0x99, 0x9b, 0x16, 0x0a, 0x81, 0x93, 0x9f, 0x12, 0x91, 0x2c, 0x94, 0xaa, 0x32, 0xb4, 0x0f, - 0x81, 0x10, 0x88, 0x89, 0x48, 0xa0, 0x14, 0x8d, 0xa0, 0x20, 0x2a, 0x14, 0xcb, 0x11, 0x89, 0x05, - 0x8e, 0x01, 0x91, 0x20, 0xb8, 0x0b, 0x06, 0x0c, 0x05, 0x9b, 0x28, 0x99, 0x05, 0x09, 0x8c, 0x04, - 0x89, 0x80, 0xa8, 0x44, 0x8b, 0x90, 0xb6, 0x2f, 0x83, 0x8a, 0x22, 0xc8, 0x8c, 0x35, 0xc9, 0x20, - 0xa8, 0x12, 0xbb, 0x31, 0xa1, 0x0b, 0x12, 0x38, 0xf4, 0x2e, 0x24, 0xdb, 0x28, 0x22, 0xdd, 0x33, - 0x9a, 0x00, 0xa0, 0x48, 0xb1, 0x09, 0x08, 0x35, 0xaf, 0x33, 0x9b, 0xa1, 0x30, 0xa1, 0x8d, 0x82, - 0x42, 0xba, 0xa1, 0x61, 0xbb, 0x15, 0x0a, 0x80, 0x0a, 0x15, 0xca, 0x00, 0x4a, 0xd3, 0x29, 0x93, - 0x2c, 0xd3, 0x4a, 0xa0, 0x29, 0x91, 0x32, 0xaf, 0x22, 0xa8, 0x10, 0x03, 0x8f, 0x92, 0x28, 0x99, - 0x21, 0xbd, 0x27, 0x8c, 0x00, 0x82, 0x8b, 0xa2, 0x38, 0x98, 0xb8, 0x46, 0xaa, 0x00, 0x2b, 0x86, - 0x98, 0x3c, 0xf3, 0x38, 0x98, 0x84, 0x8d, 0x03, 0x09, 0x88, 0xa0, 0x78, 0xc2, 0x2a, 0x91, 0x89, - 0x81, 0x71, 0xf0, 0x28, 0x08, 0x80, 0x98, 0x28, 0xa3, 0x1b, 0xc0, 0x48, 0xa1, 0x6a, 0xb1, 0x91, - 0x3b, 0x91, 0x82, 0x0c, 0x15, 0x9d, 0x82, 0x1b, 0x40, 0xf3, 0x39, 0x88, 0x18, 0xc2, 0x4a, 0x98, - 0x82, 0x0a, 0xa9, 0x13, 0x0e, 0x17, 0x8b, 0x94, 0x89, 0x0b, 0x03, 0x01, 0x1d, 0xa5, 0x2a, 0xd0, - 0x58, 0x81, 0x9a, 0x22, 0xad, 0x33, 0xbb, 0x10, 0x14, 0x9d, 0x42, 0xc0, 0x19, 0x82, 0xbb, 0x32, - 0x83, 0x1b, 0xd3, 0xad, 0x36, 0xaa, 0x89, 0x05, 0x99, 0x59, 0xa3, 0x8f, 0x22, 0xb8, 0x5b, 0xa2, - 0x89, 0x40, 0xa2, 0x9c, 0x10, 0x20, 0x0a, 0x96, 0x8a, 0x19, 0x03, 0x1b, 0x98, 0x0a, 0x57, 0xda, - 0x09, 0x12, 0x10, 0xb1, 0x0b, 0x01, 0xba, 0x64, 0xb0, 0x2b, 0xb0, 0x72, 0xb1, 0x0b, 0x83, 0x10, - 0x9a, 0x90, 0x3f, 0x97, 0x1b, 0x82, 0xa8, 0x38, 0x1b, 0xa7, 0x28, 0x9f, 0x15, 0x89, 0x9a, 0x15, - 0x9a, 0x09, 0x15, 0x9d, 0x11, 0x11, 0xab, 0x12, 0x08, 0x99, 0x0a, 0x27, 0xaa, 0x09, 0x00, 0x20, - 0xf1, 0x09, 0x73, 0xc9, 0x19, 0x05, 0x8c, 0x81, 0x12, 0xaa, 0x8a, 0x45, 0xc9, 0x08, 0x21, 0xb1, - 0x0a, 0x00, 0x33, 0xaf, 0x13, 0x09, 0xb0, 0x49, 0x20, 0xf3, 0x0c, 0x13, 0x98, 0x88, 0x31, 0xa9, - 0x8b, 0x37, 0xeb, 0x20, 0x10, 0xd0, 0x4b, 0xb4, 0x38, 0xa9, 0x90, 0x21, 0xd8, 0x38, 0x13, 0xea, - 0x2a, 0x85, 0x99, 0x0b, 0x17, 0xb8, 0x29, 0x90, 0x84, 0x8c, 0x12, 0xa0, 0x98, 0x3a, 0x07, 0xbc, - 0x43, 0xa9, 0x30, 0x90, 0xb8, 0x5a, 0xa5, 0x0c, 0x94, 0x8a, 0x41, 0xe8, 0x51, 0xa9, 0x08, 0x10, - 0xb1, 0x19, 0x19, 0x23, 0xca, 0x39, 0x03, 0xcd, 0x41, 0x81, 0x8b, 0x80, 0x23, 0x8a, 0x9f, 0x15, - 0x9b, 0x12, 0xb2, 0x3b, 0x00, 0xa4, 0x8e, 0x02, 0x29, 0xd0, 0x91, 0x7a, 0xb0, 0x80, 0x41, 0x9a, - 0xa0, 0x12, 0x38, 0xdc, 0x41, 0xa3, 0x9f, 0x42, 0xb0, 0x20, 0x98, 0x99, 0x62, 0xf8, 0x59, 0xa8, - 0x11, 0x89, 0x02, 0x9c, 0x21, 0x01, 0xc9, 0x30, 0xb1, 0x1a, 0x08, 0x03, 0x80, 0x9d, 0x54, 0xe9, - 0x39, 0x92, 0x09, 0x88, 0x01, 0x18, 0xca, 0x71, 0x81, 0xab, 0x98, 0x64, 0xcb, 0x41, 0x98, 0xa8, - 0x51, 0xb0, 0x09, 0x01, 0x88, 0x81, 0xbc, 0x65, 0xa8, 0x28, 0xb8, 0x20, 0xc8, 0x31, 0xa0, 0xa8, - 0x7a, 0xa5, 0x9a, 0x30, 0x19, 0xd1, 0x30, 0x98, 0x98, 0x39, 0xc0, 0x12, 0x0c, 0x09, 0x27, 0x9e, - 0x42, 0xb8, 0x08, 0x2a, 0x93, 0xba, 0x71, 0xa1, 0x18, 0xa0, 0xab, 0x75, 0xc8, 0x28, 0x88, 0x09, - 0x82, 0x91, 0x38, 0xae, 0x22, 0x18, 0xf9, 0x58, 0x90, 0x80, 0xaa, 0x32, 0x00, 0x09, 0xd3, 0x69, - 0xa9, 0x11, 0xb1, 0x0c, 0x08, 0x37, 0xca, 0x19, 0x02, 0x08, 0xb2, 0x2f, 0x91, 0x80, 0x28, 0x03, - 0xcf, 0x22, 0x02, 0x9c, 0x91, 0x50, 0xa8, 0x18, 0x91, 0xba, 0x52, 0x99, 0xa1, 0x38, 0x18, 0xc4, - 0x3b, 0x08, 0xc7, 0x3e, 0x94, 0x8a, 0x18, 0x82, 0x98, 0x09, 0x22, 0xc9, 0x81, 0x61, 0xc9, 0x80, - 0x12, 0x2a, 0xf0, 0x29, 0x91, 0x93, 0x2b, 0x00, 0xf4, 0x3b, 0x12, 0xd1, 0x1d, 0x14, 0xaa, 0x21, - 0xbb, 0x43, 0xa8, 0x00, 0x11, 0xa9, 0x18, 0x38, 0x92, 0x87, 0xaf, 0x33, 0x8b, 0x85, 0x0d, 0x92, - 0x3a, 0xb0, 0x29, 0x84, 0x0a, 0x18, 0xc3, 0x18, 0x2c, 0x96, 0xab, 0x18, 0x34, 0xb8, 0x81, 0xbc, - 0x70, 0xb9, 0x24, 0x08, 0xc9, 0x30, 0x90, 0x9d, 0x05, 0x8a, 0x52, 0xd1, 0x8a, 0x42, 0xd0, 0x3a, - 0x95, 0x8b, 0x31, 0xe8, 0x58, 0xa0, 0x19, 0x18, 0x92, 0x9b, 0x32, 0x99, 0x88, 0xc8, 0x51, 0x19, - 0xc1, 0x1a, 0x63, 0xf8, 0x39, 0x92, 0xaa, 0x51, 0xa8, 0x02, 0x98, 0x1a, 0x91, 0x0a, 0x11, 0x27, - 0xbe, 0x63, 0xb8, 0x09, 0x00, 0x82, 0x0b, 0x04, 0xb9, 0x01, 0x40, 0xa0, 0xba, 0x78, 0xb0, 0x50, - 0xc0, 0x29, 0x91, 0x1b, 0x96, 0x1a, 0x88, 0x83, 0x48, 0xfb, 0x20, 0x10, 0xc0, 0x49, 0xa0, 0x00, - 0x10, 0x99, 0xc3, 0x4c, 0x92, 0xb8, 0x78, 0xb2, 0x1d, 0x94, 0x1a, 0xa8, 0x23, 0xab, 0x15, 0xba, - 0x88, 0x13, 0x0b, 0x86, 0x3a, 0xf1, 0x3a, 0x11, 0xc2, 0x0c, 0x21, 0xf8, 0x50, 0xa8, 0x08, 0x22, - 0xbb, 0x01, 0x00, 0x98, 0x2c, 0x07, 0x8c, 0x11, 0x90, 0x81, 0x8e, 0x14, 0x99, 0x20, 0xb0, 0x8a, - 0x40, 0x11, 0xc2, 0x0b, 0x38, 0x05, 0xb9, 0x49, 0xcc, 0x25, 0xb8, 0x3a, 0x86, 0x0d, 0x12, 0xb8, - 0x8b, 0x24, 0xb1, 0x2a, 0xa3, 0x89, 0x39, 0x80, 0x94, 0xbc, 0x49, 0x31, 0xf3, 0x0d, 0x42, 0xe0, - 0x28, 0x90, 0x81, 0x1a, 0x02, 0xc8, 0x0a, 0x02, 0x58, 0xd1, 0x39, 0x92, 0x0e, 0x03, 0xa9, 0x8b, - 0x25, 0xb0, 0x1c, 0x06, 0x0c, 0x01, 0x91, 0x2b, 0xa0, 0x1a, 0x03, 0x82, 0x0e, 0x82, 0x9b, 0x12, - 0x19, 0x13, 0x60, 0xf4, 0x2e, 0x92, 0xa8, 0x49, 0x94, 0x0d, 0x03, 0x0b, 0x01, 0xa0, 0x08, 0x20, - 0xc9, 0x00, 0x33, 0xaf, 0x16, 0x9a, 0x08, 0x11, 0x88, 0x1a, 0xa6, 0x0e, 0x23, 0xc8, 0x19, 0x00, - 0x90, 0x20, 0xa1, 0x0d, 0x85, 0xaa, 0x20, 0x05, 0xac, 0x33, 0xc9, 0x88, 0x42, 0xc9, 0x83, 0x39, - 0xea, 0x33, 0xbd, 0x42, 0x92, 0x0b, 0x01, 0xc2, 0x2d, 0x11, 0xb0, 0x29, 0xa1, 0x1c, 0x84, 0x00, - 0x8b, 0x20, 0xb5, 0x3d, 0xc3, 0x0c, 0x31, 0xe2, 0x2b, 0x93, 0x8b, 0x72, 0xd1, 0x28, 0xb0, 0x28, - 0x80, 0x81, 0x19, 0xa8, 0x23, 0x9a, 0xa9, 0x10, 0x74, 0xd8, 0x02, 0x08, 0xaf, 0x14, 0xb8, 0x4c, - 0x83, 0x09, 0xa9, 0x31, 0xa8, 0x99, 0x03, 0x1e, 0x86, 0x99, 0x38, 0xb3, 0x8c, 0x43, 0xfa, 0x21, - 0x99, 0x12, 0xb1, 0x1d, 0x05, 0xab, 0x12, 0x3a, 0xd0, 0x31, 0xc8, 0x39, 0xa1, 0xa1, 0x8f, 0x05, - 0x19, 0xa8, 0x93, 0x2e, 0xb3, 0x29, 0x81, 0x8d, 0x07, 0x1a, 0xb0, 0xa8, 0x58, 0xa2, 0x19, 0x08, - 0xa2, 0x9b, 0x73, 0xc1, 0x1b, 0x14, 0xda, 0x40, 0x90, 0x88, 0x05, 0x8d, 0x03, 0x8a, 0x11, 0x80, - 0x8b, 0x84, 0x0c, 0xc2, 0x79, 0xc3, 0x19, 0x02, 0xcb, 0x31, 0xa1, 0x0b, 0x18, 0xf3, 0x4a, 0xc2, - 0x38, 0x88, 0xc0, 0x39, 0x81, 0x8b, 0x13, 0x30, 0xad, 0x87, 0x1c, 0x93, 0x98, 0x8a, 0x21, 0xc0, - 0x38, 0x81, 0x9c, 0x36, 0xad, 0x22, 0xe3, 0x3a, 0xa1, 0x91, 0x1c, 0x80, 0x61, 0xc0, 0x18, 0x00, - 0x92, 0x89, 0xa0, 0x3c, 0xa7, 0x4a, 0xc1, 0x18, 0x91, 0x28, 0x83, 0xaf, 0x24, 0xa8, 0x20, 0xa8, - 0x08, 0x1a, 0xa5, 0x4a, 0xa4, 0x8d, 0x33, 0xc9, 0x18, 0x82, 0x0b, 0x92, 0x8c, 0x13, 0x0b, 0x89, - 0x25, 0xf8, 0x1f, 0x05, 0xa8, 0x0b, 0x13, 0xca, 0x28, 0x07, 0x8c, 0x02, 0x98, 0x00, 0xc9, 0x50, - 0x80, 0x90, 0x2b, 0x86, 0x8c, 0x12, 0x09, 0xca, 0x31, 0x81, 0x91, 0x8d, 0x22, 0x12, 0xaf, 0x16, - 0x9b, 0x20, 0x81, 0x89, 0x89, 0x41, 0x98, 0xb0, 0x69, 0xa0, 0x51, 0xb8, 0x08, 0x98, 0x31, 0x18, - 0xf0, 0x2b, 0x32, 0xdc, 0x13, 0xab, 0x55, 0xb8, 0x81, 0x8b, 0x89, 0x24, 0x90, 0x9b, 0x02, 0x9c, - 0x36, 0xba, 0x80, 0x00, 0x18, 0x91, 0xac, 0x01, 0x75, 0xd0, 0x29, 0xa1, 0x40, 0xd8, 0x20, 0xab, - 0x32, 0x81, 0x0a, 0xb4, 0x2b, 0x46, 0xf8, 0x29, 0x98, 0x28, 0x22, 0xb9, 0x1b, 0x93, 0x12, 0x82, - 0x1e, 0xd8, 0x38, 0x24, 0xbc, 0x38, 0x80, 0x57, 0xbe, 0x23, 0x08, 0xa0, 0x18, 0xa9, 0x93, 0x3c, - 0x07, 0xab, 0x29, 0x92, 0x31, 0xcd, 0x20, 0x83, 0x8c, 0x22, 0xdb, 0x00, 0x20, 0xb0, 0x0a, 0xba, - 0x77, 0xb0, 0x19, 0x08, 0x90, 0x88, 0x36, 0xfb, 0x28, 0x92, 0x88, 0x89, 0x10, 0x89, 0x24, 0xac, - 0x92, 0x8b, 0x27, 0xa9, 0x09, 0x29, 0x07, 0x9b, 0x21, 0xcc, 0x43, 0x82, 0x9b, 0x00, 0x88, 0x50, - 0x04, 0xae, 0x12, 0x08, 0x00, 0x30, 0xfa, 0x39, 0x85, 0x9b, 0x28, 0x22, 0xc0, 0x59, 0xd9, 0x20, - 0x80, 0x02, 0xca, 0x0a, 0x14, 0x19, 0xa0, 0x88, 0x80, 0x90, 0x4d, 0xc1, 0x8a, 0x42, 0x91, 0x1c, - 0xfb, 0x44, 0xba, 0x10, 0xb1, 0x29, 0x10, 0x80, 0x93, 0xcf, 0x44, 0xa8, 0x9c, 0x42, 0xa0, 0x80, - 0x11, 0xbc, 0x32, 0x98, 0x60, 0xb2, 0x9e, 0x31, 0x92, 0xbc, 0x42, 0x91, 0x89, 0x41, 0xc9, 0x00, - 0x13, 0x0d, 0x80, 0x9c, 0x55, 0xa0, 0x9b, 0x42, 0xc8, 0x59, 0x90, 0x89, 0x20, 0xa3, 0x8c, 0x10, - 0xd9, 0x42, 0x98, 0x9a, 0x51, 0xb3, 0x3b, 0x94, 0xcc, 0x42, 0x91, 0x0c, 0x93, 0x2b, 0x90, 0x20, - 0x99, 0x31, 0xb3, 0x8f, 0x13, 0xae, 0x34, 0xa8, 0x0d, 0x13, 0xbb, 0x27, 0x9b, 0xb0, 0x53, 0xaa, - 0x13, 0x9c, 0x42, 0xa8, 0x01, 0x90, 0x9f, 0x82, 0x22, 0x00, 0xaf, 0x14, 0x98, 0x00, 0x08, 0xb1, - 0x1b, 0x0a, 0x17, 0xab, 0x30, 0x14, 0xdd, 0x38, 0x03, 0xdb, 0x43, 0xbb, 0x01, 0x39, 0x04, 0xc8, - 0x9a, 0x70, 0xb0, 0x18, 0x01, 0x8d, 0x13, 0x01, 0xa8, 0x0f, 0x85, 0x09, 0x99, 0xa3, 0x7a, 0xb1, - 0x21, 0xba, 0xb1, 0x70, 0xa2, 0x8a, 0x00, 0x61, 0xd9, 0x11, 0x89, 0xc2, 0x51, 0xa9, 0x92, 0x0b, - 0x44, 0xb0, 0x8c, 0x32, 0x98, 0x0a, 0x88, 0x22, 0xba, 0x30, 0x91, 0xcd, 0x43, 0x42, 0xcb, 0xa8, - 0x50, 0xc9, 0x22, 0xb9, 0xaa, 0x37, 0x9b, 0x94, 0xa0, 0x0e, 0x13, 0x0c, 0x01, 0x00, 0x0c, 0x13, - 0xd8, 0x1c, 0x06, 0x9a, 0x28, 0xb2, 0x29, 0x03, 0x0e, 0x86, 0x8c, 0x10, 0x83, 0x9a, 0x30, 0xf8, - 0x20, 0x08, 0x82, 0x1c, 0x92, 0x28, 0x9f, 0x93, 0x4a, 0x13, 0xea, 0x38, 0xb3, 0x0f, 0x03, 0x88, - 0x0b, 0x11, 0x93, 0x0e, 0x11, 0x90, 0x91, 0x8b, 0x86, 0x8a, 0x00, 0x25, 0xcc, 0x30, 0xa2, 0x8b, - 0x00, 0x68, 0xb0, 0x0b, 0x33, 0x8b, 0xf2, 0x49, 0x93, 0x0e, 0x02, 0x89, 0x99, 0x40, 0x81, 0xb0, - 0x4b, 0xb1, 0x20, 0xb0, 0x50, 0x88, 0x9a, 0x27, 0x9f, 0x93, 0x29, 0x12, 0xba, 0x92, 0x3c, 0xd0, - 0x11, 0x08, 0x88, 0x27, 0xcb, 0x09, 0x31, 0x93, 0x3b, 0xf8, 0x31, 0x8f, 0x84, 0x19, 0x89, 0x01, - 0x59, 0xf8, 0x20, 0x88, 0x80, 0x29, 0xb5, 0x1e, 0x82, 0x91, 0x28, 0xda, 0x32, 0xa9, 0x29, 0xa3, - 0x20, 0x9f, 0x85, 0x0a, 0x0a, 0x83, 0x02, 0x1e, 0xb2, 0x29, 0x20, 0xdb, 0x15, 0x8d, 0x83, 0x80, - 0x09, 0x98, 0x44, 0x9a, 0xd1, 0x48, 0xb9, 0x42, 0xb0, 0x30, 0xcb, 0x28, 0x16, 0xab, 0x10, 0x30, - 0xea, 0x13, 0x0c, 0x98, 0x07, 0x89, 0x89, 0x91, 0x29, 0x23, 0xcc, 0x08, 0x83, 0x51, 0xda, 0x13, - 0x1a, 0xb9, 0x94, 0x4a, 0xb2, 0x2c, 0x97, 0x0b, 0x08, 0x83, 0x2b, 0x81, 0xc2, 0x0a, 0x88, 0x64, - 0xe8, 0x18, 0x88, 0x95, 0x2b, 0x80, 0xa0, 0x48, 0x02, 0x90, 0xbb, 0x79, 0x95, 0x8d, 0x90, 0x12, - 0x09, 0x83, 0x89, 0x1d, 0x95, 0x0b, 0x13, 0x8f, 0x82, 0x21, 0x9d, 0x11, 0x38, 0xc1, 0x1a, 0x00, - 0xb0, 0x70, 0xd2, 0x3a, 0xb8, 0x43, 0x81, 0xbc, 0x42, 0xc0, 0x18, 0x82, 0x9d, 0x20, 0x85, 0x29, - 0xda, 0x20, 0x80, 0x02, 0x8c, 0x18, 0xe0, 0x48, 0x88, 0xa2, 0x4b, 0x13, 0xe8, 0x3b, 0xa3, 0x4a, - 0xe1, 0x30, 0xbb, 0x22, 0x11, 0x29, 0xf0, 0x5a, 0xa0, 0x30, 0xb9, 0x33, 0xbf, 0x06, 0x09, 0xc8, - 0x30, 0x92, 0x00, 0x0a, 0xb1, 0x01, 0x59, 0xc2, 0x8d, 0xa3, 0x70, 0xa9, 0x80, 0x10, 0xa0, 0x48, - 0xa9, 0x80, 0x69, 0x94, 0x8b, 0xb0, 0x38, 0x52, 0x9a, 0xc0, 0x38, 0x13, 0xae, 0xa3, 0x1c, 0x24, - 0xa1, 0x9c, 0x02, 0x0a, 0x84, 0x40, 0xfb, 0x89, 0x52, 0x8b, 0x95, 0x2b, 0x92, 0x00, 0x8b, 0x02, - 0xaa, 0x55, 0xa9, 0xa0, 0x4b, 0x11, 0xa4, 0x8f, 0x04, 0x09, 0x80, 0x18, 0xc0, 0x09, 0x33, 0xbc, - 0x01, 0x18, 0x02, 0xc3, 0x1f, 0x86, 0x9b, 0x12, 0x20, 0x9e, 0x01, 0x32, 0xae, 0x30, 0xb2, 0x10, - 0x1a, 0xa3, 0x8e, 0xa2, 0x70, 0xc1, 0x09, 0x02, 0x08, 0xb0, 0x89, 0x63, 0xc9, 0x20, 0x91, 0x99, - 0x29, 0x15, 0xd9, 0x1a, 0x52, 0xd0, 0x89, 0x12, 0xa8, 0x43, 0xcb, 0x82, 0x1a, 0x94, 0x1b, 0x11, - 0x94, 0x9f, 0x14, 0x8d, 0x83, 0x28, 0x82, 0xfb, 0x38, 0x82, 0xa0, 0x4a, 0xb0, 0x18, 0xa9, 0x36, - 0xab, 0x88, 0x23, 0x8e, 0x93, 0x4b, 0x94, 0xea, 0x50, 0xa8, 0x10, 0x82, 0x8e, 0x03, 0x1b, 0x02, - 0xaa, 0x00, 0x38, 0x9a, 0x97, 0x2c, 0xc1, 0x31, 0x90, 0xb9, 0x28, 0x84, 0x9c, 0x11, 0x9d, 0x26, - 0xc0, 0x59, 0xa0, 0xa9, 0x33, 0x1a, 0xc0, 0x38, 0xa3, 0x8c, 0x18, 0xb2, 0x15, 0x9e, 0x32, 0xd1, - 0x1b, 0x27, 0xbd, 0x21, 0x91, 0x10, 0xa1, 0x1e, 0x82, 0x8a, 0x41, 0x99, 0x98, 0x51, 0x0a, 0xe1, - 0x48, 0x90, 0x0a, 0xa3, 0x38, 0x90, 0x0c, 0x12, 0xb8, 0x21, 0x78, 0xe0, 0x8a, 0x42, 0x91, 0x9a, - 0x71, 0xc9, 0x10, 0x81, 0x10, 0xb8, 0x2b, 0x07, 0x0f, 0x01, 0x82, 0x8c, 0x81, 0x00, 0x08, 0x00, - 0x83, 0xaf, 0x23, 0xb9, 0x40, 0xaa, 0x42, 0xa1, 0xbd, 0x52, 0xa0, 0x39, 0x92, 0xa9, 0x10, 0x20, - 0x97, 0x1d, 0x81, 0xba, 0x44, 0xcb, 0x24, 0xa9, 0x80, 0x84, 0x8f, 0x02, 0x93, 0x2b, 0xb9, 0x11, - 0x12, 0x8e, 0x14, 0xbb, 0x62, 0xa8, 0x90, 0x2a, 0xa2, 0x35, 0xad, 0x21, 0xa1, 0x98, 0x19, 0x28, - 0xd1, 0x29, 0x17, 0xae, 0x21, 0x83, 0x0d, 0xb2, 0x3a, 0x12, 0x98, 0x82, 0x9f, 0x82, 0x10, 0xb0, - 0x3d, 0x86, 0xa9, 0x29, 0x84, 0x0e, 0x03, 0xa9, 0x8b, 0x15, 0x8c, 0x23, 0xc0, 0x29, 0x18, 0xd0, - 0x4a, 0x92, 0xbb, 0x55, 0xc9, 0x28, 0x81, 0x09, 0x28, 0xa4, 0x19, 0x8b, 0x80, 0x96, 0xaa, 0x3d, - 0x07, 0x8a, 0x18, 0x94, 0x8e, 0x12, 0x00, 0x9a, 0x83, 0x0b, 0x23, 0xbd, 0x31, 0x03, 0x9b, 0x11, - 0x82, 0xdf, 0x41, 0xa2, 0x0b, 0x03, 0xb0, 0x7a, 0xe1, 0x29, 0x02, 0xba, 0x22, 0xb8, 0x89, 0x35, - 0x19, 0xb8, 0xb9, 0x6b, 0xb3, 0x0b, 0x63, 0x90, 0xd0, 0x49, 0xa8, 0x00, 0x30, 0x91, 0x9f, 0xa1, - 0x52, 0x00, 0xf9, 0x30, 0xaa, 0x03, 0x18, 0x9c, 0x02, 0x43, 0xe0, 0x2c, 0xa1, 0x10, 0x89, 0x25, - 0x8d, 0xa3, 0x3b, 0xa3, 0x0a, 0x88, 0x07, 0x8e, 0x01, 0x10, 0xa8, 0x10, 0x19, 0xe2, 0x30, 0x99, - 0x23, 0xea, 0x41, 0x09, 0xb8, 0x15, 0x09, 0xcb, 0x52, 0x99, 0x85, 0x8b, 0x30, 0xd3, 0x2b, 0x84, - 0x8b, 0x94, 0x2a, 0xf3, 0x29, 0x99, 0x24, 0xaa, 0xa1, 0x60, 0xa9, 0x08, 0x92, 0x0d, 0x12, 0x91, - 0xdb, 0x68, 0xa1, 0x29, 0x84, 0x8e, 0x92, 0x39, 0xa0, 0x90, 0x1b, 0x37, 0xd9, 0x2a, 0x85, 0x1a, - 0x88, 0xa1, 0x98, 0x4c, 0xb4, 0x39, 0xa1, 0x0b, 0x04, 0xb9, 0x5a, 0x85, 0x8c, 0x12, 0xb0, 0x4c, - 0xa3, 0x89, 0x00, 0x9a, 0x34, 0x99, 0x68, 0xa4, 0x0c, 0x89, 0x84, 0x3b, 0xc1, 0x34, 0xca, 0x10, - 0x80, 0x98, 0x29, 0xda, 0x63, 0xa9, 0xa8, 0x44, 0xba, 0x81, 0xb1, 0x71, 0xba, 0x32, 0xeb, 0x10, - 0x50, 0xc1, 0x8a, 0x31, 0xc1, 0x18, 0x18, 0xf0, 0x10, 0x29, 0x92, 0x8a, 0x80, 0x54, 0xea, 0x20, - 0x08, 0x91, 0x0c, 0x84, 0xaa, 0x31, 0x80, 0xa8, 0xc9, 0x70, 0x95, 0x9c, 0x32, 0xa8, 0x18, 0x0a, - 0xd0, 0x51, 0x09, 0xa3, 0x0e, 0x84, 0x19, 0xa8, 0x11, 0x99, 0x23, 0x2a, 0xf2, 0x1b, 0x15, 0xaa, - 0x09, 0x05, 0x19, 0x08, 0xe1, 0x20, 0xc9, 0x42, 0x98, 0xaa, 0x28, 0x07, 0x99, 0x9c, 0x07, 0x99, - 0x08, 0x13, 0xbb, 0x21, 0x92, 0x1c, 0xb9, 0x16, 0x9a, 0x2b, 0x95, 0x89, 0x03, 0x9a, 0x88, 0x91, - 0x32, 0x5a, 0xf8, 0x8a, 0x43, 0x29, 0xf1, 0x5a, 0xb8, 0x28, 0x31, 0xd1, 0x0b, 0x33, 0xdb, 0x00, - 0x41, 0x98, 0x28, 0x82, 0xfb, 0x69, 0xa8, 0x11, 0x80, 0x98, 0x40, 0xb0, 0x1d, 0x05, 0xa8, 0x4a, - 0x93, 0xac, 0x11, 0x90, 0x20, 0xe2, 0x18, 0x9a, 0x62, 0xd1, 0x19, 0x80, 0x38, 0xd1, 0x18, 0x09, - 0x83, 0x59, 0xc8, 0x89, 0x42, 0xfa, 0x40, 0xa9, 0x08, 0x11, 0x82, 0xbb, 0x40, 0xa1, 0x2c, 0x87, - 0x9c, 0x40, 0x90, 0xa8, 0x11, 0xa9, 0x62, 0x90, 0x80, 0x8b, 0x42, 0x81, 0xca, 0x1a, 0x81, 0x70, - 0x95, 0x09, 0xa9, 0x51, 0xc9, 0x22, 0xaa, 0x19, 0x35, 0xf9, 0x49, 0x81, 0x99, 0x30, 0xe8, 0x2a, - 0x03, 0x91, 0xac, 0x10, 0x48, 0xa4, 0x0a, 0xa9, 0x38, 0x03, 0x39, 0xdf, 0x11, 0x18, 0x88, 0x94, - 0x9f, 0x43, 0xc0, 0x09, 0x09, 0x84, 0x2a, 0x01, 0xe9, 0x28, 0x12, 0xd8, 0x39, 0xa1, 0x18, 0x32, - 0xf8, 0x0c, 0x31, 0xa2, 0x8a, 0x28, 0xd1, 0x38, 0x83, 0xda, 0x09, 0x38, 0x27, 0xad, 0x31, 0x8a, - 0x96, 0x1b, 0x10, 0xa8, 0x41, 0x11, 0xe8, 0x28, 0x8a, 0x05, 0x9a, 0x1a, 0x07, 0x9a, 0x21, 0x98, - 0x2a, 0x90, 0xa3, 0x8f, 0x01, 0x82, 0x21, 0x0a, 0xb0, 0x3b, 0xc5, 0x8d, 0x03, 0x2a, 0xab, 0x27, - 0x0f, 0x82, 0x18, 0xb1, 0x8a, 0x39, 0xe2, 0x49, 0xb8, 0x08, 0x23, 0x29, 0xca, 0x07, 0x1a, 0xd9, - 0x24, 0x89, 0xaa, 0x71, 0xc2, 0x1b, 0x31, 0xc1, 0x19, 0x02, 0xac, 0x32, 0xc8, 0x12, 0x4a, 0xf9, - 0x60, 0xa9, 0x91, 0x39, 0xa1, 0x00, 0x88, 0x88, 0x10, 0xf2, 0x69, 0x88, 0xa8, 0x40, 0xb2, 0x9d, - 0x22, 0x20, 0xdb, 0x01, 0x28, 0x8a, 0x87, 0x2b, 0xb2, 0x1b, 0x30, 0xa7, 0x1e, 0x93, 0x1a, 0x92, - 0x18, 0x19, 0xc3, 0x39, 0xe9, 0x41, 0xa9, 0x23, 0x99, 0xbd, 0x60, 0xa3, 0x19, 0x09, 0xb0, 0x69, - 0xb2, 0x49, 0xc8, 0x39, 0xb0, 0x83, 0x4b, 0xb2, 0xa8, 0x72, 0x99, 0xca, 0x60, 0xa3, 0x1a, 0xb9, - 0x81, 0x80, 0x5c, 0xc2, 0x09, 0x22, 0x19, 0xa4, 0xbf, 0x33, 0xb2, 0x0e, 0x22, 0xd9, 0x50, 0x90, - 0x08, 0xa8, 0x30, 0xa8, 0x42, 0xdb, 0x23, 0x80, 0x0d, 0xa5, 0x4b, 0x91, 0x92, 0x1b, 0x01, 0x9a, - 0x03, 0x5c, 0xe8, 0x21, 0x19, 0xb4, 0x1b, 0x92, 0x19, 0x88, 0x09, 0x99, 0x67, 0x8d, 0x03, 0x8c, - 0x88, 0x33, 0xab, 0xb1, 0x50, 0x80, 0x9c, 0x84, 0x00, 0x89, 0x80, 0xa0, 0x10, 0x2c, 0x94, 0x2b, - 0x9d, 0xd2, 0x70, 0xb8, 0x03, 0x3c, 0xd2, 0x18, 0x8a, 0x85, 0x98, 0x3c, 0xc5, 0x28, 0x98, 0x80, - 0x30, 0xb0, 0x49, 0xa2, 0x8a, 0x38, 0x87, 0x8b, 0x49, 0xf4, 0x49, 0x91, 0x99, 0x42, 0xca, 0x38, - 0x92, 0x0b, 0x84, 0x18, 0x9b, 0xc2, 0x59, 0x00, 0xb1, 0x8c, 0x46, 0xeb, 0x10, 0x21, 0xca, 0x20, - 0x01, 0xdb, 0x32, 0x88, 0xb1, 0x3a, 0xd2, 0x4a, 0xa0, 0x51, 0x91, 0xba, 0x60, 0xb8, 0x29, 0x01, - 0x04, 0x9e, 0x82, 0x38, 0xb9, 0x32, 0x81, 0xaf, 0x13, 0x08, 0x9b, 0x15, 0x98, 0xa0, 0x3b, 0x85, - 0xa2, 0x2d, 0x84, 0x9c, 0x01, 0x92, 0x0a, 0x40, 0x91, 0xa1, 0x8e, 0x8a, 0x47, 0xb0, 0x99, 0x41, - 0xeb, 0x32, 0x88, 0xa9, 0x03, 0xab, 0x68, 0xa3, 0x8d, 0x32, 0xca, 0x98, 0x52, 0x9a, 0x22, 0xc8, - 0x1a, 0x11, 0x9a, 0x07, 0x1b, 0xca, 0x26, 0x0a, 0xba, 0x34, 0x9a, 0x80, 0x13, 0x0f, 0x10, 0x93, - 0x1a, 0xb8, 0x9d, 0x07, 0x29, 0xc9, 0x42, 0xa9, 0x1b, 0x16, 0x9c, 0x01, 0x12, 0x0c, 0xe2, 0x49, - 0x01, 0xb0, 0x29, 0x98, 0x03, 0x99, 0x53, 0xac, 0x91, 0x43, 0x8c, 0xa1, 0x50, 0x08, 0xe0, 0x39, - 0x98, 0x11, 0x90, 0x00, 0xaf, 0x21, 0x94, 0x1a, 0x09, 0xa3, 0x00, 0x9e, 0x12, 0xab, 0x12, 0x32, - 0xbc, 0xfb, 0x71, 0x90, 0x08, 0x1a, 0xb2, 0x1c, 0x22, 0xa1, 0xbc, 0x25, 0x00, 0xba, 0x90, 0x34, - 0x2b, 0x90, 0xc1, 0x0f, 0x15, 0x19, 0xa0, 0xc0, 0x3a, 0x33, 0xea, 0x22, 0x1c, 0x04, 0x0b, 0xb1, - 0x9a, 0x71, 0x87, 0x9a, 0x80, 0x28, 0x18, 0x92, 0x09, 0xdb, 0x55, 0xb8, 0x0a, 0x02, 0x31, 0x9e, - 0x80, 0x01, 0x0a, 0x33, 0xb2, 0xff, 0x20, 0x28, 0xc2, 0x8b, 0x33, 0xaa, 0x09, 0x95, 0x1d, 0x98, - 0x22, 0x83, 0xbf, 0x48, 0x04, 0xaa, 0x38, 0xc2, 0x1a, 0x61, 0xc0, 0x2a, 0x81, 0x99, 0x41, 0xe0, - 0x3a, 0x84, 0xa8, 0x3b, 0xa4, 0x1c, 0x04, 0xaa, 0x81, 0x30, 0xdb, 0x45, 0xc9, 0x39, 0x03, 0x9d, - 0x02, 0x18, 0x8a, 0x85, 0x0a, 0x09, 0xa2, 0x1c, 0x16, 0xab, 0x00, 0x44, 0xeb, 0x30, 0xb2, 0x0a, - 0x22, 0xc0, 0x2a, 0xc1, 0x30, 0x99, 0xe8, 0x58, 0x81, 0x99, 0x28, 0xb2, 0x0d, 0x10, 0xa4, 0x2b, - 0xb8, 0x71, 0x90, 0xb9, 0x78, 0xc1, 0x29, 0x10, 0xb0, 0x50, 0xa8, 0x11, 0xc9, 0x49, 0x02, 0xb9, - 0xbb, 0x46, 0x00, 0xbc, 0x05, 0x18, 0x9a, 0x23, 0x98, 0x89, 0x89, 0x43, 0xd0, 0x1c, 0x07, 0x89, - 0x2a, 0xc4, 0x3a, 0xa9, 0x15, 0x8c, 0x91, 0x38, 0xa4, 0x0c, 0x00, 0x98, 0x80, 0x42, 0xcb, 0x00, - 0x51, 0xd8, 0x08, 0x00, 0x89, 0x03, 0x8b, 0xb3, 0x5a, 0x10, 0x97, 0xab, 0x18, 0x33, 0xf3, 0x3a, - 0xb0, 0x32, 0x8d, 0xa5, 0x29, 0xa8, 0x2a, 0x37, 0xbc, 0x40, 0x90, 0x98, 0xa1, 0x49, 0x22, 0xd9, - 0x19, 0x11, 0x0c, 0x13, 0xe1, 0x58, 0xba, 0x14, 0x28, 0xfa, 0x20, 0x2a, 0xd3, 0x18, 0x28, 0xe1, - 0x38, 0xd0, 0x18, 0x82, 0xac, 0x34, 0xa8, 0x8c, 0x24, 0xd8, 0x29, 0x11, 0xc8, 0x48, 0xa8, 0x20, - 0x80, 0xc9, 0x52, 0xb8, 0x19, 0x84, 0x1c, 0x80, 0x22, 0xbd, 0x53, 0x98, 0xa9, 0x73, 0xb9, 0x20, - 0x10, 0xac, 0x16, 0x9c, 0x12, 0x90, 0x0c, 0x04, 0x99, 0x09, 0x85, 0x9a, 0x38, 0xa3, 0x2b, 0x90, - 0xc0, 0x79, 0xd1, 0x29, 0x23, 0xe9, 0x39, 0x91, 0xa8, 0x2a, 0x82, 0x11, 0xcb, 0x11, 0x68, 0xe0, - 0x38, 0x81, 0xc9, 0x29, 0x83, 0x0a, 0x99, 0x33, 0xa9, 0x91, 0xaf, 0x36, 0xd9, 0x19, 0x84, 0x0b, - 0xa9, 0x15, 0x10, 0xbc, 0x42, 0xa0, 0x3d, 0xb1, 0x12, 0x18, 0xba, 0x33, 0x62, 0xe9, 0x18, 0x04, - 0x9c, 0x08, 0x35, 0xcc, 0x32, 0xa8, 0x1a, 0xa3, 0x2d, 0x83, 0xb9, 0x49, 0x13, 0xfb, 0x59, 0x91, - 0x9a, 0x01, 0x29, 0xa2, 0x2a, 0x30, 0xb6, 0x9f, 0x51, 0x90, 0xaa, 0x43, 0xa9, 0x88, 0x13, 0x9d, - 0x02, 0x82, 0x1c, 0xd3, 0x18, 0x29, 0xc4, 0x1b, 0x22, 0xa2, 0x9c, 0x40, 0xd2, 0x2a, 0xa3, 0x2b, - 0x83, 0xbe, 0x46, 0xb8, 0x0a, 0x12, 0xa8, 0x29, 0xb3, 0x39, 0x16, 0xbf, 0x14, 0x8a, 0x88, 0x23, - 0x99, 0x9d, 0x14, 0x98, 0x19, 0x92, 0xaa, 0x32, 0x8c, 0x86, 0x10, 0xcb, 0x33, 0xca, 0x82, 0x62, - 0xad, 0x84, 0x0a, 0x02, 0x90, 0x58, 0xc1, 0x9b, 0x13, 0x23, 0x9f, 0x12, 0x08, 0x0e, 0x84, 0x80, - 0x39, 0xe8, 0x52, 0xaa, 0xa0, 0x41, 0x99, 0x91, 0x39, 0x90, 0x80, 0x00, 0x80, 0x9f, 0x86, 0x1a, - 0xb2, 0xaa, 0x70, 0xc2, 0x29, 0x09, 0xa4, 0x1e, 0x03, 0x9a, 0x01, 0xa8, 0x79, 0xc1, 0x28, 0x88, - 0x91, 0x38, 0x88, 0xa0, 0x5c, 0x91, 0x90, 0x1c, 0x81, 0x31, 0x92, 0xaf, 0x83, 0x1c, 0x86, 0x09, - 0x19, 0xc2, 0x31, 0x9c, 0x95, 0x0d, 0x13, 0x00, 0xca, 0x31, 0xa9, 0x30, 0xc0, 0x0c, 0x84, 0x49, - 0xb1, 0x1a, 0x8a, 0x16, 0x1b, 0xe8, 0x39, 0xa2, 0x42, 0x9a, 0xd9, 0x71, 0x98, 0x00, 0xc9, 0x42, - 0xa9, 0x98, 0x21, 0xc9, 0x31, 0x19, 0xd2, 0x0a, 0x28, 0x17, 0xab, 0x19, 0x84, 0x0b, 0x00, 0x84, - 0x09, 0x39, 0xf2, 0x38, 0x9a, 0x94, 0x72, 0xf0, 0x29, 0x82, 0xb8, 0x48, 0x82, 0xbb, 0x51, 0xa8, - 0x10, 0x00, 0x88, 0x2a, 0x98, 0xa5, 0x7a, 0x89, 0xc2, 0x38, 0xbc, 0x04, 0x38, 0xac, 0x15, 0x8a, - 0xa1, 0x58, 0xba, 0x94, 0x1c, 0x81, 0x92, 0x1e, 0x85, 0x8a, 0x98, 0x42, 0xd9, 0x40, 0x90, 0x99, - 0x20, 0x98, 0x89, 0x20, 0xd0, 0x62, 0xb9, 0x20, 0x91, 0xad, 0x63, 0xc0, 0x18, 0x19, 0xb2, 0x3a, - 0x92, 0x91, 0x19, 0xa9, 0x70, 0x97, 0x0b, 0x12, 0xd0, 0x3a, 0x00, 0x94, 0x3b, 0xd9, 0x23, 0xaa, - 0x13, 0x1f, 0x82, 0x82, 0x9d, 0x32, 0xba, 0x06, 0x0b, 0xc2, 0x28, 0x0c, 0x94, 0x38, 0xc9, 0x21, - 0x30, 0xfa, 0x48, 0x98, 0xb8, 0x60, 0xc1, 0x19, 0x80, 0x08, 0x00, 0x08, 0x91, 0x7b, 0xf8, 0x20, - 0x90, 0x39, 0xd2, 0x2a, 0x12, 0xb9, 0x19, 0x30, 0x93, 0x9f, 0x34, 0xb9, 0x80, 0x88, 0x59, 0xa2, - 0x9c, 0x63, 0xb0, 0x1d, 0x84, 0x01, 0x9d, 0x12, 0x08, 0x90, 0x28, 0xdb, 0x35, 0xab, 0x31, 0xb2, - 0x0d, 0x12, 0x89, 0xab, 0x26, 0x0a, 0xd9, 0x51, 0xd0, 0x39, 0x98, 0x01, 0x09, 0xa0, 0x68, 0xe0, - 0x28, 0x01, 0xca, 0x62, 0xc8, 0x28, 0x00, 0xa8, 0x28, 0x90, 0x82, 0x2b, 0xf2, 0x49, 0x80, 0xa8, - 0x50, 0xa2, 0x0e, 0x82, 0x00, 0x89, 0x13, 0xbc, 0x20, 0x87, 0x0a, 0x08, 0xa3, 0x48, 0xca, 0x28, - 0x23, 0xcd, 0x21, 0x83, 0x8f, 0x22, 0xb8, 0x3c, 0xa5, 0x2b, 0x90, 0x01, 0x98, 0x00, 0x90, 0x8b, - 0x44, 0xcd, 0x32, 0x80, 0x9c, 0x07, 0x9b, 0x21, 0xb0, 0x68, 0x98, 0x90, 0x19, 0x08, 0xc1, 0x70, - 0xb9, 0x32, 0x10, 0x9e, 0x04, 0x88, 0x0b, 0x93, 0x89, 0x32, 0xba, 0x43, 0xae, 0x11, 0x93, 0x2f, - 0xa2, 0x01, 0x89, 0x48, 0xd9, 0x02, 0x8a, 0x44, 0xb9, 0x1a, 0x01, 0x42, 0xdb, 0x41, 0xc8, 0x09, - 0x38, 0x95, 0x81, 0x9f, 0x24, 0xc9, 0x18, 0x22, 0xc8, 0x1b, 0x82, 0xb1, 0x7b, 0xb2, 0x28, 0x80, - 0xbb, 0x04, 0x89, 0x2e, 0x86, 0xaa, 0x50, 0xc0, 0x18, 0x30, 0xc0, 0x88, 0x2a, 0xa2, 0x91, 0x6a, - 0xb3, 0x99, 0x49, 0x04, 0xab, 0x1c, 0x16, 0xdb, 0x11, 0x21, 0xea, 0x31, 0x98, 0x89, 0x01, 0x4b, - 0xc3, 0x00, 0x0c, 0x12, 0xcb, 0x53, 0xc8, 0x28, 0x82, 0x0d, 0x82, 0x21, 0x1c, 0xe2, 0x10, 0x89, - 0x32, 0xa8, 0xa8, 0x12, 0x9f, 0x26, 0xcb, 0x22, 0x89, 0x8a, 0x07, 0x8c, 0x20, 0xa1, 0x09, 0x10, - 0xb0, 0x41, 0x98, 0xbb, 0x73, 0xe8, 0x29, 0x03, 0x99, 0x19, 0x94, 0x0b, 0x91, 0x10, 0xaa, 0x17, - 0x0e, 0xb3, 0x1a, 0x24, 0xa9, 0xa9, 0x68, 0xa2, 0x1c, 0x04, 0xab, 0x13, 0x88, 0x8c, 0x02, 0x9e, - 0x15, 0x08, 0xb8, 0x19, 0x92, 0x40, 0x40, 0xf0, 0x3b, 0x08, 0x91, 0x89, 0x42, 0x08, 0xb6, 0x2f, - 0xa1, 0x01, 0x2a, 0x90, 0xb4, 0x1f, 0x03, 0x90, 0x1b, 0x92, 0x31, 0xf0, 0x8a, 0x12, 0x92, 0x3b, - 0xa5, 0x8f, 0x21, 0x81, 0x8a, 0x18, 0xaa, 0x94, 0x70, 0xaa, 0x82, 0x38, 0xda, 0x32, 0x99, 0xd1, - 0x51, 0x8b, 0xc2, 0x7a, 0xa0, 0x20, 0x9a, 0x82, 0x3a, 0xa3, 0x9a, 0x8b, 0x33, 0xa8, 0xbd, 0x62, - 0xa0, 0x02, 0x1f, 0xa2, 0x30, 0xd0, 0x49, 0x90, 0x88, 0x40, 0xdb, 0x21, 0x18, 0x02, 0x88, 0x90, - 0x1e, 0x12, 0xa0, 0x2a, 0x47, 0xc9, 0x1b, 0x95, 0x2d, 0x91, 0x82, 0x39, 0xe0, 0x18, 0x20, 0xe8, - 0x41, 0x89, 0xb9, 0x43, 0xa0, 0x0c, 0x03, 0xb0, 0x1c, 0x03, 0x88, 0x9a, 0x16, 0x8b, 0xa8, 0x08, - 0x58, 0xd3, 0x0b, 0x05, 0x8c, 0x11, 0xa4, 0x2c, 0x90, 0x11, 0x09, 0xdb, 0x24, 0xa9, 0x90, 0x69, - 0xd8, 0x23, 0x0c, 0x94, 0x8a, 0x21, 0xa1, 0x0e, 0x12, 0x88, 0xba, 0x74, 0xc0, 0x10, 0x39, 0xd3, - 0x2a, 0xb0, 0x50, 0x88, 0xa8, 0x12, 0xeb, 0x51, 0xb0, 0x00, 0x28, 0xc8, 0x21, 0x8a, 0x82, 0x10, - 0x8c, 0x93, 0x0e, 0xa4, 0x78, 0xb8, 0x91, 0x6b, 0xd1, 0x38, 0x88, 0xa1, 0x30, 0xc9, 0x41, 0xc9, - 0x22, 0xba, 0x21, 0x9a, 0x06, 0x1a, 0x9a, 0x85, 0x3a, 0xe9, 0x42, 0x90, 0xda, 0x21, 0xb8, 0x20, - 0x00, 0xa4, 0x29, 0xca, 0x32, 0xc9, 0x04, 0x3a, 0xec, 0x13, 0x3a, 0xd0, 0x09, 0x04, 0x0b, 0x89, - 0x86, 0x2c, 0xc3, 0x19, 0x11, 0xfa, 0x31, 0x80, 0xa9, 0x38, 0xb2, 0x50, 0x9a, 0x91, 0x19, 0x0a, - 0x17, 0x9a, 0xa3, 0x1e, 0x04, 0x99, 0x00, 0x98, 0x7b, 0xd3, 0x48, 0xa8, 0x10, 0xa9, 0x90, 0x52, - 0xaa, 0x15, 0x1a, 0xcb, 0x11, 0x21, 0x91, 0x0e, 0x22, 0xe2, 0x1b, 0x83, 0x0a, 0x91, 0x21, 0xa9, - 0xb3, 0x7a, 0xf1, 0x50, 0xba, 0x23, 0x0a, 0xa1, 0x10, 0x0a, 0xb5, 0x2f, 0x94, 0x8c, 0x03, 0xa8, - 0x28, 0xa1, 0x8c, 0x38, 0x90, 0x03, 0x89, 0x4c, 0xc1, 0x91, 0x98, 0x3f, 0xa4, 0x08, 0x32, 0xbf, - 0x15, 0x98, 0x09, 0x83, 0x0e, 0x03, 0x00, 0x0c, 0x84, 0x9b, 0x12, 0x88, 0x19, 0x01, 0x88, 0xc9, - 0x16, 0x0d, 0xb4, 0x4b, 0xa9, 0x07, 0x9b, 0x22, 0x93, 0x8f, 0x01, 0x90, 0x08, 0x10, 0xc9, 0x22, - 0x3c, 0x94, 0x99, 0x0e, 0x23, 0x90, 0xbb, 0x72, 0xd0, 0x48, 0xb8, 0x20, 0x00, 0x98, 0x22, 0xda, - 0x39, 0x93, 0x9c, 0x11, 0x19, 0xb2, 0x49, 0xd3, 0x9d, 0x51, 0xa0, 0x40, 0x98, 0x99, 0x00, 0x93, - 0x2d, 0x83, 0xd2, 0x2f, 0x84, 0x0a, 0x18, 0xb1, 0x59, 0x90, 0x89, 0x94, 0x09, 0x28, 0xd1, 0x29, - 0x88, 0x10, 0xf3, 0x3a, 0x11, 0xe2, 0x4b, 0xb8, 0x15, 0x9c, 0x38, 0x94, 0x8b, 0x10, 0xb4, 0x0d, - 0x21, 0x00, 0xa0, 0x3a, 0xe2, 0x39, 0x08, 0xc2, 0x18, 0x2c, 0x82, 0xb0, 0x20, 0x30, 0xf9, 0x39, - 0x89, 0x91, 0x42, 0x0a, 0xf5, 0x2c, 0x91, 0x32, 0x89, 0xb1, 0x39, 0xa8, 0x63, 0x98, 0xd9, 0x79, - 0xb1, 0x58, 0xb0, 0x28, 0x91, 0x3a, 0x8a, 0xa4, 0x53, 0x8e, 0xa2, 0x20, 0x0b, 0x02, 0xca, 0x88, - 0x2a, 0x24, 0x8b, 0x80, 0xd1, 0x70, 0xb9, 0x18, 0x92, 0x29, 0x9a, 0x08, 0xd2, 0x2e, 0x83, 0xc3, - 0x5d, 0xc1, 0x20, 0x98, 0x10, 0xc8, 0x2b, 0x17, 0x9b, 0x31, 0xdb, 0x31, 0x81, 0x09, 0x20, 0xdb, - 0x04, 0x9b, 0x20, 0xd9, 0x23, 0x30, 0x9e, 0xa2, 0x23, 0x19, 0xea, 0x33, 0xe9, 0x69, 0xb0, 0x08, - 0x48, 0xa1, 0x29, 0xbb, 0x17, 0x1b, 0x92, 0x9a, 0x29, 0x85, 0x0c, 0x85, 0x9a, 0x39, 0x96, 0x8b, - 0x80, 0x82, 0x0d, 0x23, 0xba, 0xa3, 0x6b, 0x94, 0x8c, 0x00, 0x82, 0x09, 0x11, 0xa2, 0x2c, 0xe2, - 0x39, 0x25, 0xdd, 0x21, 0x92, 0x8a, 0x08, 0x95, 0x1b, 0x01, 0x23, 0xaf, 0x81, 0x60, 0xc0, 0x18, - 0x18, 0xd3, 0x2b, 0x92, 0x10, 0xab, 0x26, 0xa9, 0x88, 0x31, 0x9a, 0xd9, 0x22, 0x21, 0xbb, 0x99, - 0x07, 0x9d, 0x41, 0x83, 0xbc, 0x32, 0x3b, 0xf0, 0x40, 0xb8, 0x98, 0x49, 0x92, 0xa1, 0x1a, 0x19, - 0xb0, 0x10, 0x0c, 0x07, 0x0e, 0x84, 0x9a, 0x88, 0x24, 0x98, 0x19, 0x8a, 0x01, 0x01, 0x8d, 0x35, - 0xbc, 0x61, 0xa8, 0xa3, 0x2e, 0xa2, 0x11, 0xab, 0x22, 0xb8, 0x30, 0x20, 0xb8, 0x14, 0x8e, 0x17, - 0xbc, 0x21, 0x91, 0x8a, 0x54, 0xeb, 0x41, 0xa9, 0x02, 0x20, 0xda, 0x40, 0x80, 0x80, 0x99, 0x83, - 0x8e, 0x01, 0x21, 0x0b, 0x23, 0xd9, 0x1a, 0x88, 0x00, 0x86, 0x19, 0xdc, 0x10, 0x32, 0xac, 0x12, - 0x9b, 0x17, 0x8c, 0x02, 0x09, 0x1a, 0xc6, 0x3a, 0xb8, 0x12, 0x40, 0xc2, 0x1e, 0x83, 0x19, 0x9c, - 0x16, 0xab, 0x81, 0x60, 0xd1, 0x18, 0x80, 0xa9, 0x40, 0xa0, 0x38, 0x03, 0xad, 0x31, 0xc2, 0x8c, - 0x23, 0x90, 0x8b, 0x17, 0x9a, 0x09, 0xb2, 0x70, 0xa8, 0x80, 0x81, 0x20, 0x2a, 0xf3, 0x11, 0x2b, - 0xa3, 0xcb, 0x51, 0xa0, 0x0c, 0x06, 0x9b, 0x10, 0x12, 0x8a, 0xd9, 0x21, 0x10, 0xbb, 0xc3, 0x58, - 0xb3, 0x2c, 0x06, 0xdb, 0x12, 0x08, 0x98, 0xe1, 0x3a, 0xa2, 0x42, 0xb9, 0x88, 0x19, 0x83, 0xa8, - 0x5a, 0x94, 0x29, 0xa0, 0x1b, 0xa9, 0xa5, 0x08, 0x5c, 0xc2, 0x31, 0xb5, 0x8f, 0x03, 0x98, 0x2c, - 0xa3, 0x31, 0xea, 0x50, 0x90, 0x91, 0x8a, 0x39, 0x86, 0x1c, 0xa3, 0x0d, 0x10, 0x03, 0xbb, 0x60, - 0xa0, 0x89, 0x12, 0x9b, 0x41, 0x21, 0xf9, 0x18, 0x19, 0x40, 0xe3, 0x8a, 0x38, 0xe0, 0x22, 0x89, - 0xda, 0x30, 0x84, 0xa9, 0x70, 0xa0, 0x98, 0x80, 0x8a, 0x83, 0x4a, 0x81, 0x80, 0xc0, 0x3e, 0x87, - 0x8a, 0x28, 0xa0, 0x9a, 0x32, 0x11, 0x8b, 0x99, 0x07, 0x8c, 0x9b, 0x46, 0xa0, 0x28, 0xd9, 0x22, - 0x9b, 0x21, 0x82, 0xbf, 0x06, 0x19, 0xa0, 0x09, 0x03, 0x20, 0xeb, 0x01, 0x09, 0x1b, 0x27, 0xd8, - 0x29, 0x02, 0xf9, 0x29, 0x81, 0x80, 0x10, 0x80, 0xab, 0x31, 0x28, 0xb8, 0xa9, 0xc9, 0x79, 0xf2, - 0x40, 0x80, 0xa8, 0x81, 0x11, 0xbb, 0x49, 0xb6, 0x1c, 0x92, 0x3b, 0xa6, 0x2a, 0x05, 0xb9, 0x3a, - 0x93, 0x39, 0xca, 0x34, 0xbd, 0x03, 0x11, 0x8c, 0x04, 0xb8, 0x59, 0xa8, 0x09, 0x43, 0xb2, 0x8f, - 0x20, 0xb1, 0x69, 0xb8, 0x88, 0x11, 0x98, 0x21, 0xc8, 0x19, 0x05, 0x2c, 0xf1, 0x3b, 0x02, 0x10, - 0xd1, 0x1a, 0x41, 0x9b, 0x06, 0x08, 0x9b, 0x10, 0x20, 0x94, 0x09, 0x3b, 0x27, 0xad, 0x89, 0x35, - 0xcb, 0x30, 0xa2, 0x8b, 0x51, 0x84, 0xac, 0x88, 0x03, 0x0a, 0xab, 0x07, 0x1a, 0x23, 0xcb, 0x82, - 0x8e, 0x52, 0xb0, 0x0d, 0x02, 0x88, 0x09, 0x83, 0xb8, 0x1c, 0x83, 0x13, 0xcd, 0x53, 0x09, 0xf1, - 0x1a, 0x03, 0x9a, 0x10, 0x33, 0xce, 0x30, 0x02, 0xbb, 0x31, 0xa0, 0x09, 0x29, 0xe1, 0x58, 0xab, - 0x43, 0x82, 0xeb, 0x50, 0x00, 0xb0, 0x71, 0xa9, 0x08, 0x12, 0x99, 0x09, 0x80, 0x34, 0x00, 0xd8, - 0x39, 0xc2, 0x12, 0x2e, 0xc1, 0x29, 0x01, 0xc8, 0x2b, 0x07, 0x1a, 0xb0, 0x21, 0x8e, 0x94, 0x0b, - 0x12, 0xb8, 0x0c, 0x16, 0xca, 0x39, 0x14, 0xeb, 0x10, 0x11, 0xaa, 0x43, 0x8c, 0xa1, 0x20, 0x18, - 0xa3, 0x8c, 0xb0, 0x55, 0xcc, 0x41, 0x90, 0x99, 0x50, 0xc0, 0x18, 0x11, 0xca, 0x31, 0xca, 0x21, - 0x11, 0x9b, 0x28, 0xc1, 0x49, 0x32, 0xf8, 0x4a, 0xc0, 0x08, 0x31, 0xa2, 0x8b, 0x33, 0xeb, 0x19, - 0x27, 0x9a, 0x10, 0xc2, 0x1c, 0x84, 0x0a, 0x18, 0xaa, 0x01, 0x24, 0xdc, 0x49, 0x92, 0x29, 0xe0, - 0x39, 0xb2, 0x3a, 0x82, 0xa9, 0x09, 0x01, 0x83, 0xdf, 0x32, 0x83, 0xcb, 0x20, 0x20, 0x43, 0xe1, - 0x0b, 0x2a, 0x01, 0x04, 0x90, 0xbf, 0x34, 0xa2, 0x1b, 0x09, 0xb6, 0x1d, 0x05, 0x0a, 0x90, 0x12, - 0x09, 0xb9, 0x8c, 0x91, 0x57, 0xaa, 0x01, 0x0a, 0xc0, 0x71, 0xa8, 0x19, 0x20, 0xa1, 0x9d, 0x01, - 0x13, 0xbb, 0x51, 0xe8, 0x89, 0x32, 0xa8, 0x00, 0x2b, 0x05, 0x00, 0x9a, 0x88, 0xd1, 0x2c, 0xa2, - 0xcb, 0x44, 0x40, 0xe1, 0x0a, 0x01, 0xb1, 0x58, 0xaa, 0x85, 0x8b, 0x24, 0x98, 0x8a, 0x05, 0x9a, - 0x12, 0x29, 0xf2, 0x6a, 0x98, 0x98, 0x30, 0xb1, 0x7a, 0x92, 0xa9, 0x29, 0xa0, 0x58, 0xb0, 0x01, - 0x4a, 0x94, 0xa9, 0x9b, 0x24, 0x29, 0xc9, 0x25, 0xab, 0x1b, 0x64, 0xe2, 0x2c, 0x82, 0x90, 0x19, - 0xa1, 0x18, 0xba, 0x14, 0x30, 0xba, 0x20, 0x63, 0xf1, 0x1c, 0x12, 0x90, 0x88, 0x11, 0xcc, 0x21, - 0x11, 0xe0, 0x0c, 0x23, 0x91, 0x0a, 0x9a, 0x91, 0x25, 0xbc, 0x34, 0xaf, 0x13, 0x11, 0xbb, 0x09, - 0x31, 0xc1, 0x18, 0x99, 0x19, 0x1a, 0x57, 0x9b, 0x80, 0x49, 0x98, 0xd0, 0x1e, 0x13, 0x81, 0x11, - 0x9e, 0x10, 0x10, 0xa2, 0x2d, 0x83, 0x9a, 0x15, 0xf9, 0x3c, 0x84, 0xa9, 0x30, 0xb9, 0x38, 0x33, - 0x89, 0xa0, 0x1c, 0x83, 0xc8, 0x38, 0x09, 0x15, 0xb0, 0x2d, 0xa9, 0x08, 0x77, 0xa8, 0x90, 0x0a, - 0x42, 0xb1, 0x39, 0x9a, 0xa4, 0x78, 0x82, 0xcc, 0x38, 0xa1, 0x28, 0x01, 0x09, 0x9c, 0x07, 0x8d, - 0x99, 0x22, 0x80, 0x0a, 0x92, 0x8b, 0x37, 0xac, 0x18, 0x81, 0x90, 0x62, 0xfa, 0x10, 0x80, 0x89, - 0x00, 0x9a, 0x12, 0x31, 0xa6, 0x1d, 0xc0, 0x50, 0xc1, 0x1a, 0x92, 0x88, 0x00, 0x00, 0x0a, 0xc1, - 0x30, 0x84, 0x0d, 0x10, 0xd0, 0x38, 0x20, 0xd1, 0x8a, 0x42, 0x02, 0xf8, 0x1c, 0x05, 0x20, 0xba, - 0x90, 0x3b, 0x17, 0x1a, 0xb1, 0xba, 0x69, 0x02, 0xa9, 0x12, 0x2c, 0x84, 0xbb, 0x20, 0x28, 0x13, - 0xad, 0x94, 0x4e, 0xb1, 0x38, 0xcc, 0x32, 0x00, 0x01, 0xa9, 0x90, 0x2e, 0x92, 0x0a, 0xb8, 0x66, - 0xa9, 0x90, 0x18, 0xa8, 0x12, 0x6a, 0xc3, 0x19, 0x9e, 0x22, 0x99, 0x81, 0x32, 0xce, 0x21, 0x98, - 0x00, 0x32, 0xba, 0x88, 0x88, 0x80, 0x3a, 0x02, 0x77, 0xc0, 0x8a, 0x30, 0xe0, 0x39, 0x92, 0x10, - 0xcc, 0x20, 0x04, 0x00, 0x8b, 0x86, 0xc9, 0x3c, 0xa3, 0x06, 0x8c, 0x82, 0xaa, 0x40, 0x31, 0xc1, - 0x8c, 0x92, 0x28, 0x19, 0xa3, 0x32, 0xcf, 0x40, 0xa2, 0x1d, 0x81, 0x08, 0x18, 0xd3, 0x3b, 0x01, - 0x8e, 0x04, 0x00, 0xab, 0x11, 0x02, 0x0d, 0x93, 0x08, 0xad, 0x33, 0xab, 0x51, 0xa8, 0x82, 0x0e, - 0x82, 0x20, 0x99, 0xa4, 0x49, 0x8f, 0x35, 0xb9, 0x0b, 0x13, 0x00, 0x0d, 0xa3, 0x5b, 0x04, 0xba, - 0x40, 0xe9, 0x51, 0x90, 0x81, 0xba, 0x32, 0x99, 0x90, 0x18, 0x28, 0x04, 0xbb, 0x19, 0xbb, 0x04, - 0x04, 0xdf, 0x83, 0x40, 0x93, 0x8b, 0x8c, 0x03, 0x08, 0x15, 0xac, 0xa8, 0x50, 0xc2, 0x1c, 0x02, - 0xd0, 0x53, 0x9d, 0x11, 0x18, 0xaa, 0x12, 0x9b, 0x38, 0x16, 0xc9, 0x39, 0x9a, 0x42, 0xb0, 0x19, - 0x98, 0x00, 0x10, 0xbb, 0x67, 0xda, 0x00, 0x08, 0x3a, 0xa6, 0x2a, 0x93, 0x8f, 0x04, 0x19, 0xa9, - 0x61, 0xa9, 0x03, 0x19, 0x99, 0x90, 0x34, 0x98, 0x2a, 0xe8, 0x49, 0xe2, 0x28, 0x88, 0x22, 0xa9, - 0x09, 0x12, 0xcf, 0x04, 0x39, 0xd1, 0x29, 0xa8, 0x23, 0x98, 0x89, 0xb1, 0x9c, 0x09, 0x12, 0x1a, - 0xa6, 0x5a, 0xe0, 0x19, 0x21, 0xb1, 0x09, 0x19, 0xfb, 0x73, 0x90, 0x89, 0xa1, 0x3a, 0x03, 0xc0, - 0x38, 0xc8, 0x42, 0xdb, 0x11, 0x2a, 0x94, 0x31, 0xac, 0x52, 0xa1, 0x3b, 0xf3, 0x1a, 0x84, 0x9c, - 0x23, 0xaa, 0x12, 0xa4, 0x0f, 0x82, 0x20, 0x00, 0xa4, 0x8e, 0x82, 0x00, 0x9e, 0x13, 0x8b, 0x14, - 0x18, 0xcb, 0x09, 0xa0, 0x22, 0x09, 0xaf, 0x14, 0x08, 0x22, 0xe0, 0x8a, 0x93, 0x1f, 0x92, 0x21, - 0xa9, 0x3a, 0x84, 0xb9, 0x59, 0xc2, 0x4a, 0xc2, 0x29, 0x15, 0xbc, 0x38, 0x83, 0xb9, 0x4b, 0x86, - 0x8a, 0x03, 0x0c, 0x91, 0x00, 0x72, 0x83, 0xbf, 0x01, 0x09, 0x11, 0x02, 0x00, 0x88, 0x09, 0xe3, - 0x3e, 0x95, 0x0b, 0x00, 0xa1, 0x38, 0xa2, 0x09, 0x8e, 0x94, 0x39, 0xb0, 0xca, 0x70, 0xa1, 0x88, - 0x38, 0xc9, 0x81, 0x1c, 0x81, 0x21, 0xac, 0x12, 0x99, 0x9f, 0x22, 0x10, 0x39, 0x94, 0x8d, 0x08, - 0xb1, 0x8c, 0x43, 0xa8, 0x28, 0x07, 0x1c, 0xb2, 0x0a, 0x90, 0x6b, 0x13, 0xf9, 0x49, 0x81, 0x10, - 0xa0, 0x38, 0xb2, 0x9f, 0x34, 0x98, 0xaa, 0x61, 0x90, 0xca, 0x60, 0x80, 0x08, 0x11, 0x8a, 0x09, - 0xa0, 0x71, 0xb0, 0x2a, 0x33, 0xf8, 0x1a, 0x32, 0xf0, 0x2b, 0x03, 0xbc, 0x52, 0xa0, 0x09, 0x21, - 0xe8, 0x2a, 0xa3, 0x20, 0xab, 0x95, 0x1b, 0xb0, 0x30, 0x17, 0xb8, 0x40, 0xb2, 0xaf, 0x00, 0x33, - 0x9d, 0x14, 0x9a, 0xa9, 0x25, 0x89, 0x82, 0xac, 0x28, 0x87, 0x8d, 0x22, 0x98, 0x8a, 0x12, 0xc9, - 0x08, 0x21, 0x81, 0x2b, 0xeb, 0x34, 0x09, 0xb9, 0x39, 0x95, 0x1d, 0x05, 0x99, 0x9b, 0x26, 0x9a, - 0x90, 0x28, 0x30, 0xb4, 0x0b, 0x72, 0xe0, 0x28, 0x90, 0x00, 0x89, 0x90, 0x43, 0xab, 0xb3, 0x59, - 0x80, 0xc9, 0x60, 0x81, 0x09, 0xa3, 0xb8, 0x9f, 0x21, 0x22, 0xba, 0x67, 0xbb, 0x11, 0x08, 0x21, - 0xca, 0x19, 0xc0, 0x29, 0x27, 0x89, 0xba, 0x21, 0xba, 0x20, 0x80, 0x34, 0x8a, 0x06, 0xdf, 0x10, - 0x08, 0x24, 0x9a, 0x00, 0x01, 0xcb, 0x11, 0x29, 0xc0, 0x10, 0x13, 0xcc, 0x50, 0xa1, 0x9a, 0x22, - 0x1c, 0x14, 0xbb, 0x40, 0xd8, 0x38, 0xb8, 0xa9, 0x53, 0x88, 0x05, 0x99, 0xaf, 0x21, 0x21, 0x90, - 0x88, 0xad, 0x31, 0x24, 0xfb, 0x30, 0x90, 0xbb, 0x51, 0x10, 0x94, 0x0b, 0x12, 0xfb, 0x69, 0x91, - 0x00, 0x99, 0x19, 0x82, 0x8c, 0x31, 0xb1, 0x9a, 0x12, 0x35, 0xf8, 0x2d, 0x84, 0x9a, 0x28, 0x94, - 0x0c, 0x80, 0x20, 0xd2, 0x0c, 0x33, 0xb8, 0x4a, 0x93, 0x0a, 0x9b, 0x27, 0xbc, 0x12, 0x49, 0x95, - 0x09, 0xaa, 0x11, 0x31, 0xeb, 0x43, 0xd9, 0x28, 0xa8, 0x01, 0x1a, 0x06, 0x9b, 0xb1, 0x08, 0x71, - 0xa1, 0x9c, 0x82, 0x1a, 0x39, 0xe1, 0x18, 0x12, 0xaa, 0x15, 0xae, 0x11, 0x14, 0xa8, 0x39, 0xd0, - 0xa0, 0x6a, 0x90, 0x80, 0x8b, 0x34, 0xba, 0x10, 0x35, 0xdc, 0x22, 0x8a, 0x01, 0x22, 0xba, 0xa9, - 0x19, 0xc4, 0x73, 0xba, 0x34, 0xb8, 0x19, 0xbc, 0x16, 0x1a, 0x01, 0xb0, 0x0f, 0x14, 0x9a, 0x18, - 0xb2, 0x4c, 0x93, 0x1b, 0x83, 0x8e, 0x13, 0xc8, 0x1c, 0x12, 0xb2, 0x5c, 0x90, 0x92, 0x1d, 0x92, - 0x41, 0x9a, 0xb9, 0x53, 0xb8, 0x4c, 0x94, 0x19, 0x29, 0xe2, 0x2b, 0x14, 0x81, 0xbb, 0x09, 0x23, - 0x4b, 0x97, 0xac, 0x30, 0x01, 0x9a, 0x09, 0xc1, 0x79, 0xa8, 0x82, 0x2a, 0x88, 0x85, 0xaa, 0xbd, - 0x48, 0x05, 0x09, 0xb8, 0x20, 0x88, 0x00, 0x07, 0x9f, 0x12, 0x20, 0xb8, 0xab, 0x32, 0x10, 0x00, - 0x03, 0xdd, 0x70, 0x90, 0x91, 0x99, 0x99, 0x54, 0xa9, 0x8a, 0x24, 0x89, 0x13, 0xca, 0x0a, 0x51, - 0x83, 0xdc, 0x10, 0x88, 0x14, 0x00, 0xa9, 0x2b, 0x97, 0x39, 0xeb, 0x00, 0x43, 0x88, 0xb9, 0x8b, - 0x82, 0x61, 0x80, 0x8b, 0x85, 0x19, 0x89, 0xca, 0x80, 0x55, 0xb9, 0x3a, 0xd2, 0x1c, 0x84, 0x2a, - 0xc0, 0x10, 0x01, 0x9c, 0x34, 0xa9, 0x4a, 0xb3, 0x1d, 0x92, 0x08, 0x32, 0xb0, 0xaa, 0x3c, 0x27, - 0x9a, 0xa3, 0x8e, 0x98, 0x25, 0x09, 0xd2, 0x0c, 0x14, 0x98, 0x1a, 0xa0, 0x1a, 0x13, 0xcb, 0x16, - 0x1e, 0x03, 0xa8, 0x2c, 0xa0, 0x42, 0x98, 0xb3, 0x1f, 0xa3, 0x38, 0xb8, 0xba, 0x31, 0x84, 0xab, - 0x3d, 0x07, 0x0d, 0x02, 0x88, 0x9b, 0x33, 0xa9, 0x92, 0x8d, 0x20, 0xf3, 0x3b, 0x04, 0x89, 0x00, - 0xa2, 0x9f, 0x82, 0x39, 0x84, 0x09, 0x8c, 0x25, 0x98, 0x98, 0x31, 0xbd, 0x40, 0x93, 0x9e, 0x43, - 0x80, 0x88, 0x88, 0x99, 0xa8, 0x7a, 0x94, 0x2b, 0xb8, 0x40, 0xa3, 0x08, 0x2b, 0xb6, 0x8c, 0x42, - 0xe0, 0x28, 0x91, 0x01, 0x0d, 0x83, 0x83, 0x9f, 0x00, 0x91, 0x8a, 0x28, 0x92, 0x0b, 0xb0, 0x45, - 0xfa, 0x29, 0x81, 0x80, 0x0c, 0x01, 0x88, 0x22, 0xdc, 0x12, 0x8c, 0x04, 0x40, 0xd9, 0x13, 0xaa, - 0x01, 0x33, 0xd0, 0x29, 0x21, 0xb8, 0x29, 0x17, 0xcc, 0x40, 0xa0, 0x88, 0x4a, 0x95, 0x10, 0x98, - 0xaa, 0x12, 0xac, 0x71, 0x01, 0xba, 0x31, 0x11, 0x9d, 0x98, 0x27, 0xac, 0x21, 0x90, 0x89, 0x32, - 0x9a, 0xa2, 0x1e, 0x02, 0x02, 0x9f, 0x82, 0x08, 0x8f, 0x03, 0x00, 0x10, 0xe0, 0x1c, 0x93, 0x1a, - 0x14, 0xca, 0x1a, 0xb2, 0x78, 0x81, 0x08, 0xb8, 0x2d, 0x87, 0x9b, 0x22, 0x00, 0xb9, 0x48, 0x98, - 0x30, 0x83, 0x89, 0xef, 0x13, 0x38, 0x91, 0xca, 0x3b, 0xb4, 0x29, 0x05, 0xba, 0x25, 0x99, 0x90, - 0xbb, 0x3a, 0x37, 0xd8, 0x39, 0x81, 0xa0, 0x89, 0x20, 0xca, 0x24, 0x01, 0xcb, 0x42, 0x9a, 0x94, - 0x8c, 0x80, 0x8a, 0x32, 0x65, 0xe8, 0x89, 0x4a, 0x95, 0x8d, 0x12, 0x18, 0x88, 0x09, 0xd1, 0x19, - 0x14, 0x80, 0xca, 0x2a, 0x14, 0x89, 0x9b, 0x15, 0x9b, 0x41, 0x95, 0x8d, 0x11, 0xb1, 0x4a, 0x90, - 0x80, 0x33, 0xcd, 0x10, 0x03, 0x09, 0x11, 0x8e, 0xc0, 0x6a, 0x92, 0x09, 0x02, 0xbb, 0x60, 0x83, - 0x8c, 0x02, 0xdb, 0x51, 0xa9, 0x21, 0x00, 0xa1, 0x19, 0x80, 0xfc, 0x41, 0xa1, 0x1c, 0x81, 0x81, - 0x80, 0x0c, 0x09, 0x85, 0xaa, 0x68, 0xd1, 0xab, 0x73, 0xa1, 0x8a, 0x12, 0x00, 0xda, 0x11, 0x9a, - 0x84, 0x00, 0x31, 0xe0, 0x8c, 0x25, 0xb8, 0x8b, 0x35, 0xd0, 0x19, 0x01, 0x91, 0xa9, 0x30, 0x90, - 0x8a, 0x20, 0x45, 0xf2, 0x1c, 0x03, 0xb8, 0x18, 0x41, 0xe8, 0x39, 0xa1, 0x2b, 0x81, 0x00, 0x43, - 0xc8, 0x19, 0x81, 0xdb, 0x62, 0xc0, 0x18, 0x11, 0xb8, 0x1a, 0x10, 0x25, 0xac, 0x11, 0x90, 0x9f, - 0x14, 0x89, 0x88, 0xa8, 0x62, 0xc8, 0x3b, 0xb3, 0x2d, 0x94, 0x28, 0x99, 0x08, 0x24, 0xf9, 0x19, - 0x11, 0x90, 0x58, 0xaa, 0x81, 0x1b, 0x31, 0xd2, 0x59, 0x81, 0x10, 0xfb, 0x3b, 0x12, 0x9a, 0x06, - 0xbb, 0x01, 0x43, 0xaa, 0x88, 0x8b, 0x07, 0x99, 0x29, 0xd3, 0x9c, 0x32, 0x13, 0xb9, 0x0b, 0x13, - 0x3a, 0x55, 0xf9, 0x9a, 0x12, 0x99, 0xa8, 0x39, 0x47, 0xa1, 0xb8, 0x2b, 0x93, 0xcb, 0x27, 0xac, - 0x21, 0x23, 0xb9, 0xac, 0x81, 0x73, 0xb8, 0x31, 0x08, 0xeb, 0x18, 0x22, 0x11, 0x19, 0x05, 0xdb, - 0x30, 0x09, 0x05, 0x00, 0x9b, 0x89, 0x08, 0x73, 0x82, 0xcc, 0x12, 0x0b, 0x90, 0x90, 0x25, 0xaf, - 0x14, 0xaa, 0x80, 0x39, 0x98, 0x27, 0xbb, 0x43, 0xbc, 0x08, 0x03, 0x9b, 0x02, 0x3b, 0xa6, 0x09, - 0x10, 0x24, 0xcd, 0x19, 0x13, 0xba, 0x0a, 0x36, 0xdb, 0x38, 0xb8, 0x8a, 0x70, 0x95, 0x8b, 0x02, - 0x9b, 0x30, 0x23, 0xc0, 0x01, 0x1a, 0xf3, 0x1c, 0x5a, 0x93, 0x99, 0x0c, 0x35, 0x91, 0xab, 0x15, - 0xc9, 0x18, 0x11, 0x80, 0x99, 0x50, 0xc2, 0x1b, 0x40, 0xc3, 0x2a, 0xb1, 0x5d, 0xb2, 0x8c, 0x41, - 0xc8, 0x1a, 0x04, 0xaa, 0x4a, 0x84, 0x88, 0x1b, 0x88, 0x00, 0xa2, 0x0c, 0x09, 0x17, 0xad, 0x12, - 0x88, 0x30, 0xd4, 0x0a, 0x11, 0xb0, 0x0c, 0x82, 0x9a, 0x72, 0x80, 0xa3, 0x19, 0x19, 0x96, 0x9c, - 0x39, 0x92, 0x51, 0x34, 0xe0, 0x9d, 0x32, 0xb1, 0x29, 0x88, 0x32, 0x13, 0xbd, 0x42, 0xd9, 0x38, - 0x14, 0xb9, 0x9f, 0x11, 0x99, 0x28, 0x02, 0x02, 0xaf, 0x01, 0x20, 0xbb, 0x31, 0x07, 0xbd, 0x29, - 0x13, 0xbb, 0x21, 0xb8, 0x2b, 0x05, 0x59, 0xa6, 0x8e, 0x22, 0xa8, 0xaa, 0x31, 0x93, 0x4a, 0x92, - 0x8a, 0x88, 0x32, 0x61, 0xb0, 0xab, 0x39, 0x97, 0x8f, 0x32, 0xa9, 0x10, 0x23, 0xcc, 0x38, 0xa2, - 0x12, 0x8e, 0x88, 0x34, 0xb0, 0x1e, 0x80, 0x02, 0x49, 0x93, 0xce, 0x68, 0x91, 0x08, 0xba, 0x28, - 0x13, 0x88, 0x1b, 0x17, 0xe9, 0x39, 0x91, 0x2b, 0x84, 0x20, 0xcc, 0x88, 0x08, 0x42, 0xb1, 0x0c, - 0x98, 0x10, 0x2a, 0x83, 0xca, 0x0c, 0x26, 0x80, 0xca, 0x38, 0x83, 0x9b, 0xad, 0xb3, 0x7b, 0x92, - 0x88, 0x73, 0xb0, 0x08, 0x99, 0xc0, 0x4a, 0x16, 0xb9, 0x09, 0x21, 0xb0, 0x43, 0xa1, 0x9e, 0x33, - 0x99, 0x22, 0xbf, 0x02, 0x22, 0xba, 0x01, 0x2b, 0xc2, 0x27, 0x8a, 0xda, 0x38, 0x25, 0x19, 0xba, - 0x22, 0xaa, 0x13, 0x9c, 0xd1, 0x73, 0x91, 0xbb, 0x81, 0x21, 0x61, 0xfa, 0x28, 0x80, 0x32, 0xca, - 0x39, 0xf1, 0x39, 0x81, 0x98, 0x8b, 0x14, 0x10, 0x90, 0xf8, 0x4a, 0xb2, 0x39, 0xd4, 0x2c, 0x04, - 0x98, 0x09, 0xc9, 0x30, 0x81, 0xb8, 0x38, 0x52, 0xd8, 0x19, 0xa0, 0x3a, 0x00, 0x37, 0xac, 0xa8, - 0x10, 0x12, 0xa9, 0x9b, 0x37, 0x00, 0xd8, 0x20, 0xc9, 0x00, 0x71, 0xa1, 0x8e, 0x30, 0x83, 0xad, - 0x32, 0xc0, 0x18, 0x12, 0xcb, 0x31, 0x81, 0x18, 0x80, 0xec, 0x51, 0x98, 0x1a, 0x11, 0x11, 0x8b, - 0x87, 0xad, 0x21, 0x12, 0x98, 0x80, 0x9e, 0x12, 0x0a, 0x82, 0x32, 0xaf, 0x30, 0x84, 0xbd, 0x38, - 0x83, 0x0b, 0x05, 0x9c, 0x21, 0x11, 0xa2, 0x2a, 0xfc, 0x50, 0x98, 0x90, 0x28, 0xa0, 0x19, 0xb0, - 0x18, 0xa0, 0x03, 0x3e, 0x96, 0x0a, 0xb0, 0x6b, 0x82, 0x92, 0x1c, 0x00, 0xc0, 0x2a, 0x87, 0x98, - 0x50, 0xd0, 0x88, 0x11, 0x10, 0xc8, 0x89, 0x8b, 0x16, 0x08, 0x13, 0xac, 0x82, 0x9d, 0x11, 0x00, - 0x4a, 0x05, 0xa0, 0xad, 0x71, 0x90, 0xa9, 0x29, 0x80, 0x03, 0x89, 0xb8, 0x4a, 0xc0, 0x74, 0xc8, - 0x1a, 0x88, 0x93, 0x0d, 0x23, 0x10, 0x89, 0x83, 0xdc, 0x4a, 0xd3, 0x38, 0xc0, 0x18, 0x12, 0xa8, - 0x2c, 0x24, 0xac, 0x13, 0x99, 0xea, 0x30, 0x23, 0xb1, 0x1c, 0xb8, 0x30, 0x98, 0x25, 0x81, 0xcf, - 0x28, 0x06, 0x9a, 0x21, 0x98, 0x09, 0xd8, 0x69, 0x83, 0x8a, 0x82, 0xab, 0x89, 0x31, 0x07, 0x0b, - 0x99, 0x33, 0xc8, 0x09, 0xfb, 0x50, 0x83, 0x88, 0xd9, 0x2a, 0x11, 0x88, 0x21, 0x9e, 0x41, 0xc1, - 0x01, 0x9e, 0x32, 0x92, 0x0c, 0x81, 0xf0, 0x30, 0x98, 0x80, 0xa0, 0x58, 0x82, 0xdb, 0x39, 0x02, - 0x0a, 0x24, 0xdb, 0x81, 0x18, 0x93, 0xba, 0x73, 0xa9, 0xa2, 0x2b, 0xda, 0x43, 0x8b, 0x21, 0xc1, - 0x0f, 0x11, 0x81, 0x1c, 0x81, 0x21, 0xd2, 0x8d, 0x22, 0xe8, 0x58, 0xa3, 0x99, 0xa8, 0x31, 0x88, - 0x98, 0x52, 0x11, 0xfc, 0x40, 0xa1, 0x28, 0xa0, 0x09, 0x99, 0x43, 0x88, 0x49, 0x94, 0x8a, 0x08, - 0x91, 0x14, 0x8b, 0xca, 0x23, 0xa3, 0x3e, 0xe1, 0x22, 0x38, 0xd1, 0xcb, 0x89, 0x42, 0x30, 0xa3, - 0xcc, 0x61, 0xbb, 0x28, 0x05, 0x8c, 0x43, 0x98, 0xa2, 0x8c, 0x98, 0x21, 0xcb, 0x21, 0x9c, 0xa8, - 0x72, 0xb3, 0xdb, 0x73, 0xb8, 0x88, 0x08, 0x92, 0x5b, 0xc3, 0x29, 0xb1, 0x49, 0xa8, 0x84, 0x8c, - 0x38, 0x03, 0x88, 0xfb, 0x10, 0x32, 0x9d, 0x21, 0xd1, 0x49, 0x81, 0xa8, 0xa9, 0x20, 0x73, 0xd3, - 0x89, 0x20, 0x98, 0x80, 0xab, 0x65, 0x90, 0x81, 0xa9, 0x2b, 0x15, 0x88, 0x22, 0xdd, 0x32, 0x19, - 0xa1, 0x9f, 0x12, 0x48, 0xb0, 0x20, 0xaa, 0x19, 0x11, 0xd8, 0x30, 0x1b, 0xa5, 0x0c, 0x10, 0xc9, - 0x43, 0x9d, 0x43, 0xb9, 0x60, 0xc8, 0x09, 0x80, 0x00, 0x08, 0xa4, 0x1a, 0x91, 0x1c, 0x94, 0x9e, - 0x32, 0xa9, 0x82, 0x9c, 0x42, 0x10, 0xfa, 0x20, 0xb0, 0x2a, 0x88, 0xd1, 0x69, 0x91, 0x08, 0x12, - 0xad, 0x42, 0xda, 0x28, 0x13, 0x91, 0x19, 0x88, 0x12, 0x9a, 0x44, 0xa0, 0x8c, 0x07, 0x8b, 0x91, - 0x39, 0xa1, 0x23, 0x0f, 0x94, 0x0b, 0x09, 0x82, 0x00, 0xb9, 0x8f, 0x86, 0x0b, 0xa3, 0x98, 0x0c, - 0x06, 0x08, 0x08, 0x04, 0x9c, 0x09, 0xe1, 0x68, 0x98, 0x01, 0x00, 0x0a, 0x08, 0x98, 0x32, 0xa9, - 0x71, 0x9a, 0xa4, 0x3d, 0xd9, 0x44, 0x09, 0xc8, 0x48, 0xb0, 0x18, 0x19, 0x04, 0x9a, 0x21, 0x8d, - 0xa0, 0x64, 0xb0, 0x19, 0xb2, 0x1b, 0xd8, 0x19, 0x03, 0x14, 0x0f, 0x13, 0x8b, 0xc1, 0x58, 0xb0, - 0xa8, 0x39, 0x84, 0x00, 0xbd, 0x04, 0x89, 0x18, 0x18, 0x94, 0xdb, 0x4b, 0x92, 0x31, 0x9a, 0xcc, - 0x43, 0xbc, 0x25, 0x88, 0x09, 0xa8, 0x11, 0x59, 0x83, 0x02, 0xaf, 0x98, 0x3a, 0x20, 0x07, 0x0b, - 0x91, 0x88, 0x20, 0x92, 0x2d, 0x12, 0xb2, 0xaf, 0x84, 0x0a, 0x51, 0x93, 0x29, 0x80, 0x81, 0xfd, - 0x21, 0x99, 0x42, 0xa9, 0x88, 0x00, 0x09, 0x17, 0xba, 0xa1, 0x70, 0xb9, 0x31, 0x90, 0xc0, 0x49, - 0xa3, 0x08, 0x2d, 0xb5, 0x0b, 0x98, 0x20, 0x80, 0x11, 0x73, 0xfa, 0x19, 0x30, 0xc0, 0x99, 0x38, - 0xb0, 0x31, 0xa3, 0x10, 0x8f, 0x03, 0xd1, 0x8f, 0x24, 0xb0, 0x00, 0x9b, 0x23, 0x99, 0x12, 0x04, - 0x9a, 0xaf, 0x33, 0xbc, 0x26, 0x9a, 0xa3, 0x38, 0xaa, 0x22, 0x0a, 0x06, 0x1c, 0x93, 0x0f, 0x02, - 0x99, 0x38, 0x82, 0x9a, 0x42, 0xd3, 0x2a, 0xa8, 0x94, 0x60, 0xa8, 0x91, 0x91, 0x0f, 0x02, 0x81, - 0x18, 0xba, 0xab, 0x26, 0x08, 0x09, 0xfa, 0x7b, 0xa2, 0x09, 0x88, 0x80, 0x01, 0x10, 0x19, 0xa3, - 0x9e, 0x09, 0x8f, 0x07, 0x38, 0xa8, 0xb8, 0x8d, 0x02, 0x18, 0x05, 0xab, 0x12, 0x18, 0x88, 0xa8, - 0x40, 0x00, 0xf3, 0x3b, 0x09, 0xd0, 0x73, 0xa1, 0x9b, 0x00, 0x29, 0x94, 0x38, 0x0a, 0x83, 0xcf, - 0x04, 0x0c, 0x91, 0x01, 0x98, 0x0b, 0x05, 0x30, 0x92, 0x8e, 0x98, 0x03, 0xbb, 0x48, 0x53, 0xb3, - 0xc8, 0xae, 0x39, 0x84, 0x20, 0x94, 0xbe, 0x28, 0x05, 0x88, 0x98, 0x12, 0xc9, 0x28, 0xd1, 0x38, - 0x92, 0x3b, 0x94, 0x8e, 0x20, 0x06, 0xab, 0x01, 0x81, 0x28, 0xf8, 0x30, 0x88, 0x98, 0x2c, 0x94, - 0x0a, 0x40, 0xa4, 0xaf, 0x21, 0x80, 0x22, 0xa1, 0x1b, 0xb2, 0xcb, 0x7b, 0xa3, 0x99, 0x51, 0xa2, - 0xa9, 0x2a, 0x04, 0x92, 0x9b, 0xd4, 0x1e, 0x93, 0x09, 0x11, 0xa8, 0x58, 0x80, 0x28, 0xaf, 0x95, - 0x0b, 0x91, 0x21, 0x8b, 0x84, 0x89, 0x1b, 0xb9, 0x42, 0xa8, 0x73, 0xf0, 0x00, 0x89, 0xa2, 0x5b, - 0xb3, 0x3a, 0xc2, 0x2b, 0x00, 0x83, 0x37, 0x0d, 0xb0, 0x48, 0x89, 0x12, 0x18, 0x29, 0x84, 0x8d, - 0xd8, 0x19, 0x02, 0x4b, 0x87, 0x8a, 0x01, 0xaa, 0x48, 0x83, 0x0b, 0xfa, 0x28, 0x20, 0x32, 0xf3, - 0x2d, 0x93, 0x0a, 0x82, 0x88, 0x8a, 0x21, 0x19, 0xc3, 0x08, 0x79, 0x97, 0x8b, 0x92, 0x0a, 0xa0, - 0x40, 0xb0, 0x9b, 0x67, 0xb8, 0x80, 0x89, 0x00, 0x21, 0xb2, 0x2e, 0x03, 0x0c, 0x11, 0xea, 0x41, - 0x00, 0xc8, 0x2b, 0x01, 0x90, 0x49, 0xd0, 0x28, 0xb2, 0x3a, 0xd0, 0x1c, 0x43, 0x01, 0xcc, 0x19, - 0x52, 0xc9, 0x10, 0x8a, 0x22, 0x91, 0x4b, 0xe8, 0x2b, 0x24, 0x92, 0xbe, 0x40, 0x92, 0x0a, 0x10, - 0x19, 0xb9, 0x63, 0x8a, 0x93, 0x9b, 0x68, 0x90, 0x80, 0x41, 0x10, 0x09, 0x0b, 0xf0, 0x0a, 0x70, - 0xb9, 0x32, 0x1c, 0x83, 0xb2, 0x2b, 0x0c, 0xa4, 0x89, 0xcb, 0x31, 0x73, 0xc1, 0x4a, 0x00, 0x09, - 0x12, 0x03, 0xdb, 0x8f, 0x13, 0x30, 0xa2, 0x3b, 0xc6, 0x0c, 0x01, 0x10, 0x98, 0x8c, 0x15, 0x8a, - 0xaa, 0x00, 0x23, 0x8f, 0x12, 0xc0, 0x1a, 0x02, 0x92, 0x9b, 0x13, 0xd1, 0x1a, 0xaa, 0x97, 0x4c, - 0x04, 0x89, 0xcb, 0x32, 0xa9, 0x89, 0x35, 0xe9, 0x18, 0x11, 0x9b, 0x94, 0x1e, 0x81, 0x1a, 0x13, - 0xac, 0x88, 0xa0, 0x72, 0x99, 0x02, 0x13, 0x99, 0xce, 0x18, 0x33, 0xc8, 0x09, 0x04, 0x8d, 0x33, - 0x83, 0x0d, 0x98, 0x00, 0xcc, 0x43, 0xc8, 0x39, 0x92, 0x81, 0x01, 0xbb, 0x7b, 0xa7, 0x0b, 0x18, - 0x84, 0x8b, 0x12, 0xb0, 0x08, 0x09, 0x33, 0x8c, 0xc0, 0x61, 0x90, 0xc3, 0x3b, 0x88, 0xb4, 0x70, - 0xa1, 0x09, 0xa9, 0xa8, 0x1a, 0x94, 0x79, 0xb6, 0x09, 0x9a, 0x13, 0x39, 0x84, 0xcd, 0x28, 0xd0, - 0x29, 0x23, 0xf9, 0x18, 0x21, 0xd8, 0x19, 0x02, 0xaa, 0x10, 0x01, 0x1c, 0x95, 0x1b, 0xa3, 0x9e, - 0x30, 0x96, 0x0b, 0x01, 0xa2, 0x8a, 0xaa, 0x83, 0x3c, 0x23, 0xb1, 0x9c, 0x10, 0x73, 0xf3, 0x0e, - 0x02, 0x09, 0x82, 0x11, 0x8c, 0x92, 0x28, 0xc9, 0x43, 0x8a, 0xb0, 0x29, 0x1f, 0x06, 0x8b, 0x88, - 0xa2, 0x2b, 0x17, 0xca, 0x21, 0xa9, 0x32, 0xc0, 0x9b, 0x48, 0xa2, 0x8d, 0x43, 0xb0, 0x0c, 0x23, - 0x89, 0x8c, 0x42, 0x82, 0x9d, 0x80, 0x43, 0x09, 0x9a, 0x94, 0x9f, 0x11, 0x33, 0xb8, 0x09, 0xb9, - 0x9a, 0x54, 0xb1, 0x3a, 0xb3, 0x28, 0xfb, 0x08, 0x14, 0xcc, 0x88, 0x51, 0xa8, 0x98, 0x59, 0xa2, - 0xa9, 0x40, 0xa1, 0x0d, 0x93, 0x3c, 0xe0, 0x50, 0x90, 0xab, 0x22, 0xc0, 0x31, 0xd0, 0x29, 0x91, - 0x18, 0x88, 0x39, 0xb1, 0x61, 0xea, 0x29, 0x99, 0xa2, 0x1e, 0x16, 0xa9, 0x80, 0x99, 0x19, 0x04, - 0x1c, 0x82, 0x81, 0x28, 0xeb, 0x29, 0x80, 0x88, 0x64, 0x8a, 0xb1, 0x00, 0x38, 0xaa, 0x6a, 0x93, - 0x90, 0x1b, 0xdf, 0x30, 0x98, 0x02, 0xc2, 0x78, 0xc9, 0x18, 0x08, 0xa0, 0x29, 0x81, 0x10, 0x0b, - 0xb5, 0x11, 0xbc, 0x09, 0x43, 0xd9, 0x31, 0xcc, 0x21, 0x31, 0xc1, 0xbb, 0x13, 0x31, 0x90, 0xc4, - 0x1c, 0xe1, 0x39, 0x03, 0xaa, 0x21, 0x9d, 0x03, 0x9f, 0x05, 0xaa, 0x49, 0xd1, 0x28, 0x29, 0x92, - 0x1b, 0xc1, 0x19, 0xb0, 0x70, 0xc8, 0x88, 0x39, 0xd3, 0x28, 0x9b, 0x07, 0xaa, 0x3a, 0xa4, 0x80, - 0x1b, 0xa3, 0x0d, 0x98, 0x24, 0xd0, 0x0a, 0x28, 0xa1, 0x8d, 0x08, 0x03, 0xaf, 0x62, 0xa0, 0x8b, - 0x22, 0xb8, 0x39, 0xb1, 0x02, 0x8c, 0x85, 0x90, 0x19, 0xc9, 0x92, 0x4a, 0xcb, 0x21, 0x30, 0x91, - 0xad, 0x21, 0x61, 0xba, 0x29, 0xa1, 0x44, 0xba, 0x9b, 0xa9, 0x0b, 0x43, 0x93, 0xad, 0x81, 0x30, - 0xf0, 0x29, 0x10, 0x91, 0x9c, 0xb1, 0x5a, 0xa1, 0x29, 0xb0, 0x9b, 0x0b, 0x05, 0x9b, 0x18, 0x93, - 0xcb, 0x1c, 0xa3, 0x39, 0xb1, 0x20, 0xba, 0xbb, 0x30, 0xa1, 0x99, 0x11, 0xb9, 0x9a, 0x21, 0xa0, - 0x99, 0x1a, 0xb1, 0x00, 0x0b, 0x03, 0x0a, 0x99, 0x99, 0x0b, 0x91, 0x10, 0x01, 0xa9, 0x19, 0x99, - 0x99, 0x09, 0x90, 0x0a, 0x90, 0x99, 0x09, 0x79, 0x02, 0x01, 0x0f, 0x7d, 0x0b, 0x02, 0xcd, 0x06, - 0x47, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xdf, 0x08, 0x88, 0x08, - 0x08, 0x88, 0x80, 0x00, 0x08, 0x08, 0x80, 0x00, 0x00, 0x00, 0x08, 0x01, 0x01, 0x01, 0x10, 0x22, - 0x11, 0x29, 0x77, 0x24, 0x98, 0xaa, 0xac, 0x40, 0x37, 0x03, 0x00, 0x90, 0xdc, 0x9b, 0x10, 0x08, - 0x51, 0x44, 0x12, 0x90, 0xba, 0x9a, 0xfa, 0xad, 0x9a, 0x9a, 0x20, 0x47, 0x43, 0x11, 0x80, 0xb8, - 0xac, 0xaa, 0xb9, 0xbf, 0x9b, 0x51, 0x34, 0x33, 0x36, 0x33, 0x22, 0x12, 0xb0, 0xbe, 0xab, 0x09, - 0x20, 0x02, 0xfb, 0xab, 0xa9, 0xbb, 0x51, 0x24, 0x01, 0x63, 0x33, 0xb8, 0xbe, 0xcd, 0x9b, 0x18, - 0x52, 0x33, 0x81, 0xcb, 0x89, 0x21, 0x11, 0x31, 0x24, 0x31, 0x53, 0x13, 0xca, 0xcb, 0xeb, 0xbb, - 0xac, 0x18, 0x32, 0x44, 0x34, 0x24, 0xa0, 0xce, 0x9b, 0x30, 0x44, 0x12, 0xa8, 0xcc, 0xba, 0x89, - 0x80, 0x98, 0x99, 0x88, 0x73, 0x37, 0x22, 0x80, 0x98, 0x08, 0x33, 0x13, 0x01, 0xeb, 0xab, 0x89, - 0xaa, 0x48, 0x47, 0x23, 0x81, 0xb9, 0xcd, 0xac, 0x99, 0x00, 0x22, 0x82, 0xba, 0x9c, 0x10, 0x44, - 0x44, 0x12, 0xa8, 0xaa, 0x0a, 0x00, 0xfa, 0xcd, 0x9a, 0x38, 0x37, 0x24, 0x80, 0xb9, 0xbb, 0xbb, - 0x8a, 0x08, 0x01, 0x88, 0x42, 0x81, 0x9a, 0x00, 0xea, 0x8a, 0x75, 0x44, 0x12, 0x00, 0x11, 0x21, - 0xa0, 0xde, 0xbc, 0xbb, 0x99, 0x08, 0x00, 0x32, 0x65, 0x34, 0x35, 0x22, 0x81, 0xa9, 0xab, 0x99, - 0xba, 0xbd, 0xac, 0x9b, 0x89, 0x00, 0x64, 0x34, 0x23, 0x32, 0x22, 0x81, 0xdb, 0xbc, 0xab, 0xbb, - 0xbd, 0xbd, 0xaa, 0x88, 0x11, 0x22, 0x23, 0x01, 0x10, 0x65, 0x44, 0x22, 0x81, 0xca, 0xbc, 0xab, - 0x9a, 0xdb, 0xbc, 0xac, 0x18, 0x22, 0x12, 0x00, 0x00, 0x20, 0x67, 0x43, 0x12, 0x98, 0x99, 0x98, - 0xa8, 0xfb, 0xbc, 0xaa, 0x89, 0x00, 0x11, 0x41, 0x46, 0x43, 0x34, 0x23, 0x02, 0x99, 0xab, 0xbb, - 0xeb, 0xcc, 0xab, 0x18, 0x64, 0x33, 0x12, 0x80, 0x89, 0x08, 0x31, 0x12, 0x90, 0xca, 0x9a, 0x00, - 0xd9, 0xef, 0xcc, 0xba, 0x09, 0x10, 0x33, 0x23, 0x43, 0x44, 0x44, 0x22, 0x80, 0xba, 0xbe, 0xbc, - 0xba, 0xaa, 0x9a, 0x08, 0x31, 0x34, 0x23, 0x23, 0x02, 0x88, 0x41, 0x45, 0x13, 0x80, 0x08, 0x11, - 0x82, 0xba, 0xac, 0x89, 0x98, 0xfd, 0xcc, 0xbb, 0x08, 0x63, 0x54, 0x34, 0x33, 0x12, 0x01, 0x98, - 0xba, 0xbf, 0xbc, 0xab, 0x9a, 0x89, 0x00, 0x43, 0x45, 0x43, 0x32, 0x22, 0x02, 0x98, 0xcc, 0xcc, - 0xbb, 0xcc, 0xbb, 0xbb, 0x99, 0x80, 0x08, 0x42, 0x54, 0x44, 0x33, 0x32, 0x01, 0xa8, 0xcc, 0xac, - 0xaa, 0x99, 0xaa, 0x9a, 0x99, 0x99, 0xdb, 0x8a, 0x54, 0x34, 0x33, 0x43, 0x32, 0x33, 0x22, 0x98, - 0x99, 0x88, 0xd9, 0xcd, 0xcc, 0xca, 0xaa, 0x8a, 0x31, 0x55, 0x43, 0x33, 0x22, 0x22, 0x00, 0x98, - 0xcb, 0xcb, 0xcb, 0xaa, 0x09, 0x21, 0x11, 0x10, 0x51, 0x45, 0x35, 0x24, 0x01, 0x90, 0xb9, 0xbb, - 0xcd, 0xbc, 0xbe, 0xcb, 0xab, 0x9a, 0x10, 0x33, 0x35, 0x35, 0x43, 0x23, 0x11, 0x80, 0xb9, 0xbd, - 0xbc, 0xab, 0xcb, 0xcb, 0xbb, 0xaa, 0x8a, 0x31, 0x46, 0x24, 0x22, 0x12, 0x00, 0x21, 0x33, 0x24, - 0x12, 0x90, 0x99, 0x08, 0x88, 0xea, 0xde, 0xac, 0x9a, 0x30, 0x55, 0x43, 0x22, 0x80, 0x88, 0x98, - 0xaa, 0xbc, 0xbd, 0xaa, 0x09, 0x21, 0x12, 0x01, 0x41, 0x65, 0x44, 0x33, 0x33, 0x03, 0xa9, 0xce, - 0xcc, 0xcb, 0xba, 0xaa, 0xaa, 0x99, 0x09, 0x40, 0x45, 0x34, 0x24, 0x12, 0x10, 0x80, 0x90, 0xb9, - 0xbb, 0xab, 0xba, 0xdc, 0xcb, 0xbb, 0xbc, 0xab, 0x89, 0x41, 0x44, 0x43, 0x32, 0x33, 0x36, 0x34, - 0x12, 0x98, 0xcb, 0xcb, 0xaa, 0x98, 0xa9, 0xbb, 0xba, 0x38, 0x77, 0x34, 0x23, 0x11, 0x88, 0x98, - 0x98, 0xcb, 0xdc, 0xcb, 0xaa, 0x9a, 0x08, 0x20, 0x32, 0x55, 0x53, 0x43, 0x23, 0x02, 0x98, 0xba, - 0xcc, 0xdc, 0xbc, 0xac, 0xab, 0x8a, 0x00, 0x20, 0x43, 0x43, 0x34, 0x43, 0x32, 0x12, 0x00, 0xa8, - 0xa9, 0xaa, 0x99, 0xda, 0xdd, 0xbc, 0xbc, 0xab, 0x99, 0x09, 0x10, 0x53, 0x54, 0x43, 0x23, 0x23, - 0x12, 0x01, 0xa8, 0xcb, 0xbc, 0xab, 0xbb, 0xcb, 0x0a, 0x52, 0x54, 0x33, 0x33, 0x11, 0x80, 0xa9, - 0xa9, 0xba, 0xcb, 0xaa, 0x9b, 0x99, 0xca, 0xaa, 0x09, 0x72, 0x55, 0x54, 0x33, 0x23, 0x81, 0xb9, - 0xdb, 0xcc, 0xcc, 0xcc, 0xba, 0x9a, 0x89, 0x08, 0x42, 0x34, 0x35, 0x32, 0x22, 0x11, 0x01, 0x98, - 0x98, 0xaa, 0xda, 0xcc, 0xbb, 0xbc, 0xac, 0xbb, 0xbc, 0xbb, 0x89, 0x72, 0x53, 0x33, 0x43, 0x23, - 0x23, 0x02, 0x98, 0xcb, 0xab, 0x9a, 0x89, 0xba, 0xbc, 0x0a, 0x53, 0x56, 0x43, 0x13, 0x02, 0x88, - 0x8a, 0x08, 0x21, 0x80, 0xfb, 0xcc, 0xab, 0x9b, 0x08, 0x31, 0x44, 0x34, 0x44, 0x32, 0x23, 0x12, - 0xa8, 0xec, 0xcd, 0xcc, 0xbb, 0xbb, 0xbb, 0x9a, 0x18, 0x55, 0x44, 0x32, 0x22, 0x11, 0x00, 0x88, - 0x99, 0xaa, 0xaa, 0xa9, 0xaa, 0xdd, 0xcd, 0xcb, 0xbb, 0xbb, 0x99, 0x20, 0x44, 0x34, 0x44, 0x33, - 0x24, 0x33, 0x23, 0x81, 0xa9, 0xbd, 0xcb, 0xbb, 0xba, 0xbb, 0x09, 0x41, 0x54, 0x23, 0x13, 0x01, - 0x00, 0x11, 0x33, 0x22, 0xb8, 0xcf, 0xbc, 0xab, 0x9a, 0x89, 0x89, 0x00, 0x21, 0x43, 0x33, 0x03, - 0xb9, 0xde, 0xdd, 0xcd, 0xcb, 0xcb, 0xaa, 0x9a, 0x09, 0x41, 0x44, 0x24, 0x23, 0x22, 0x01, 0x01, - 0x11, 0x01, 0x01, 0x88, 0xba, 0xce, 0xce, 0xbc, 0xbc, 0xbb, 0x9a, 0x10, 0x63, 0x43, 0x33, 0x34, - 0x34, 0x33, 0x23, 0x12, 0x90, 0xbc, 0xbd, 0xbb, 0xbb, 0xab, 0x8a, 0x31, 0x46, 0x32, 0x22, 0x12, - 0x22, 0x23, 0x13, 0x80, 0x9a, 0xbb, 0xbd, 0xcd, 0xdb, 0xbb, 0xbc, 0xaa, 0xa9, 0x18, 0x32, 0x24, - 0x11, 0x23, 0x13, 0xfa, 0xff, 0xbc, 0xbc, 0xbb, 0xbb, 0x88, 0x43, 0x45, 0x43, 0x23, 0x33, 0x22, - 0x12, 0x01, 0x01, 0x98, 0xca, 0xec, 0xcc, 0xbc, 0xcb, 0xaa, 0x89, 0x18, 0x21, 0x42, 0x53, 0x53, - 0x33, 0x34, 0x43, 0x22, 0x01, 0xa8, 0xca, 0xac, 0xac, 0xba, 0xaa, 0x9a, 0x09, 0x21, 0x43, 0x33, - 0x34, 0x34, 0x22, 0x11, 0x08, 0xa8, 0xcc, 0xcc, 0xcb, 0xbc, 0xbc, 0xaa, 0x08, 0x11, 0x12, 0x90, - 0x99, 0x30, 0x36, 0x24, 0xb8, 0xef, 0xcb, 0xbc, 0xab, 0xaa, 0x08, 0x51, 0x44, 0x34, 0x33, 0x32, - 0x12, 0x11, 0x22, 0x12, 0xa8, 0xfb, 0xdc, 0xbb, 0xac, 0xbb, 0x99, 0x10, 0x21, 0x32, 0x53, 0x63, - 0x43, 0x34, 0x34, 0x24, 0x22, 0x02, 0x98, 0xbc, 0xbd, 0xba, 0xab, 0xa9, 0x99, 0x08, 0x18, 0x32, - 0x36, 0x34, 0x23, 0x22, 0x02, 0xa8, 0xcd, 0xcc, 0xbb, 0xbd, 0xac, 0x9a, 0x19, 0x10, 0x81, 0x98, - 0x9a, 0x28, 0x66, 0x43, 0x12, 0xc9, 0xcd, 0xcc, 0xba, 0xbb, 0xa9, 0x08, 0x32, 0x37, 0x34, 0x34, - 0x12, 0x12, 0x21, 0x21, 0x81, 0xc9, 0xcd, 0xcc, 0xab, 0xbb, 0x99, 0x18, 0x10, 0x22, 0x32, 0x45, - 0x34, 0x35, 0x43, 0x34, 0x23, 0x23, 0x81, 0xb9, 0xcc, 0xac, 0xbb, 0xaa, 0xab, 0x9a, 0x99, 0x10, - 0x52, 0x44, 0x34, 0x23, 0x23, 0x81, 0xc9, 0xcc, 0xdb, 0xcb, 0xab, 0xab, 0x09, 0x18, 0x00, 0x88, - 0x99, 0x28, 0x55, 0x45, 0x43, 0x01, 0xba, 0xce, 0xcc, 0xbb, 0xaa, 0x8a, 0x20, 0x44, 0x34, 0x34, - 0x23, 0x22, 0x21, 0x01, 0x01, 0xa8, 0xeb, 0xbd, 0xbc, 0xbb, 0xab, 0x89, 0x11, 0x23, 0x12, 0x00, - 0x41, 0x56, 0x45, 0x34, 0x24, 0x23, 0x12, 0x98, 0xca, 0xcb, 0xbb, 0xba, 0xba, 0xbb, 0xbc, 0xab, - 0x08, 0x44, 0x44, 0x23, 0x33, 0x14, 0x02, 0xb9, 0xdc, 0xbc, 0xac, 0xab, 0x99, 0x88, 0x98, 0xa9, - 0xaa, 0x9b, 0x20, 0x56, 0x44, 0x22, 0x90, 0xeb, 0xbd, 0xbc, 0xab, 0x9a, 0x18, 0x42, 0x44, 0x43, - 0x23, 0x23, 0x12, 0x12, 0x12, 0x11, 0xb9, 0xcf, 0xbc, 0xcb, 0x9a, 0x89, 0x10, 0x21, 0x10, 0x08, - 0x20, 0x65, 0x54, 0x34, 0x44, 0x22, 0x22, 0x00, 0xa8, 0xca, 0xcb, 0xba, 0xba, 0xba, 0xbb, 0x9a, - 0x08, 0x43, 0x45, 0x33, 0x43, 0x22, 0x02, 0x90, 0xcc, 0xcc, 0xbb, 0xac, 0x99, 0x99, 0x99, 0xcb, - 0xbc, 0xcb, 0x8a, 0x42, 0x36, 0x34, 0x13, 0xa0, 0xdc, 0xbc, 0xcb, 0x9a, 0x89, 0x00, 0x21, 0x42, - 0x42, 0x33, 0x43, 0x33, 0x34, 0x33, 0x12, 0xda, 0xbd, 0xbd, 0xaa, 0x9a, 0x88, 0x01, 0x01, 0x88, - 0x00, 0x63, 0x64, 0x44, 0x43, 0x24, 0x32, 0x11, 0x00, 0xa9, 0xca, 0xbb, 0xac, 0xbb, 0xca, 0xca, - 0xaa, 0x88, 0x21, 0x35, 0x35, 0x32, 0x22, 0x01, 0xb8, 0xcc, 0xcc, 0xbb, 0xab, 0xa9, 0xca, 0xcb, - 0xac, 0xbb, 0x9b, 0x40, 0x45, 0x34, 0x33, 0x81, 0xc9, 0xbd, 0xad, 0xab, 0x99, 0x89, 0x88, 0x10, - 0x31, 0x35, 0x43, 0x33, 0x44, 0x34, 0x43, 0x01, 0x98, 0xcb, 0xac, 0x9b, 0x99, 0x89, 0xa9, 0xbb, - 0xbb, 0x0a, 0x75, 0x55, 0x53, 0x43, 0x33, 0x32, 0x11, 0x81, 0xa8, 0xdb, 0xdb, 0xba, 0xab, 0xab, - 0xaa, 0x9a, 0x18, 0x41, 0x44, 0x24, 0x22, 0x81, 0x98, 0xba, 0xcc, 0xbd, 0xbb, 0x9b, 0x9a, 0xcb, - 0xcd, 0xcb, 0xab, 0x0a, 0x31, 0x35, 0x34, 0x22, 0x81, 0xca, 0xcc, 0xbb, 0xac, 0x99, 0xaa, 0xba, - 0xab, 0x20, 0x46, 0x44, 0x34, 0x43, 0x43, 0x12, 0x01, 0xb9, 0xcc, 0xab, 0xaa, 0x99, 0xa8, 0xa9, - 0x9a, 0x28, 0x55, 0x45, 0x44, 0x34, 0x43, 0x33, 0x22, 0x01, 0x90, 0xba, 0xbe, 0xbc, 0xab, 0xab, - 0xaa, 0xaa, 0x99, 0x20, 0x45, 0x44, 0x33, 0x22, 0x02, 0x80, 0xb9, 0xdc, 0xbc, 0xbc, 0xbb, 0xcb, - 0xcb, 0xcb, 0xbb, 0x9a, 0x20, 0x45, 0x34, 0x23, 0x12, 0x90, 0xca, 0xbc, 0xac, 0xbb, 0xcb, 0xcb, - 0xbb, 0x89, 0x31, 0x55, 0x33, 0x35, 0x43, 0x33, 0x22, 0x80, 0xca, 0xcb, 0xba, 0xaa, 0xaa, 0xaa, - 0x9b, 0x08, 0x52, 0x54, 0x45, 0x44, 0x34, 0x33, 0x33, 0x12, 0x81, 0xa9, 0xeb, 0xbc, 0xbb, 0xac, - 0xa9, 0xab, 0xbb, 0x89, 0x31, 0x47, 0x43, 0x33, 0x11, 0x80, 0x98, 0xca, 0xbc, 0xcc, 0xbb, 0xcb, - 0xba, 0xdb, 0xcb, 0xab, 0x0a, 0x30, 0x45, 0x33, 0x24, 0x12, 0x80, 0xba, 0xbc, 0xbc, 0xac, 0xcb, - 0xbc, 0xab, 0x8a, 0x31, 0x55, 0x43, 0x34, 0x24, 0x23, 0x01, 0x90, 0xaa, 0xac, 0xaa, 0xba, 0xaa, - 0xab, 0x99, 0x21, 0x64, 0x44, 0x45, 0x43, 0x34, 0x23, 0x23, 0x11, 0x80, 0xa8, 0xbc, 0xcc, 0xba, - 0xba, 0xbc, 0xcc, 0xba, 0x89, 0x31, 0x44, 0x43, 0x22, 0x11, 0x12, 0x01, 0xb9, 0xdd, 0xcc, 0xbb, - 0xba, 0xbc, 0xcb, 0xcb, 0xaa, 0x08, 0x32, 0x35, 0x34, 0x33, 0x12, 0x81, 0xba, 0xbd, 0xbd, 0xcb, - 0xbc, 0xad, 0x9b, 0x89, 0x32, 0x54, 0x34, 0x34, 0x32, 0x22, 0x01, 0xa8, 0xca, 0xba, 0xab, 0x9a, - 0x9a, 0x88, 0x08, 0x41, 0x64, 0x44, 0x35, 0x34, 0x24, 0x23, 0x23, 0x11, 0x01, 0xa9, 0xbc, 0xbd, - 0xcb, 0xbb, 0xdb, 0xbb, 0xab, 0x09, 0x42, 0x44, 0x23, 0x33, 0x23, 0x12, 0x90, 0xea, 0xcc, 0xcc, - 0xbb, 0xbc, 0xcb, 0xbb, 0xaa, 0x88, 0x21, 0x43, 0x34, 0x43, 0x33, 0x13, 0x81, 0xcb, 0xbd, 0xcc, - 0xdb, 0xcb, 0xab, 0xaa, 0x20, 0x53, 0x35, 0x43, 0x33, 0x32, 0x23, 0x01, 0xa9, 0xbc, 0xbb, 0xbb, - 0xaa, 0x9a, 0x18, 0x52, 0x44, 0x53, 0x34, 0x35, 0x43, 0x43, 0x32, 0x33, 0x12, 0x01, 0xa8, 0xcc, - 0xbc, 0xcc, 0xba, 0xac, 0xaa, 0x8a, 0x10, 0x33, 0x43, 0x32, 0x43, 0x33, 0x43, 0x12, 0xca, 0xde, - 0xcc, 0xac, 0xbb, 0xba, 0xaa, 0xaa, 0x88, 0x10, 0x44, 0x43, 0x33, 0x32, 0x12, 0x01, 0xb9, 0xce, - 0xcd, 0xcc, 0xbb, 0xab, 0x89, 0x42, 0x35, 0x43, 0x32, 0x33, 0x33, 0x14, 0x01, 0x99, 0xab, 0xcb, - 0xaa, 0xaa, 0x99, 0x21, 0x64, 0x53, 0x43, 0x32, 0x43, 0x33, 0x33, 0x35, 0x34, 0x33, 0x12, 0xa8, - 0xdd, 0xcb, 0xbb, 0xaa, 0x9b, 0xaa, 0x89, 0x08, 0x21, 0x32, 0x53, 0x42, 0x32, 0x25, 0x81, 0xeb, - 0xdd, 0xbc, 0xbc, 0xba, 0xa9, 0x9a, 0xa9, 0x99, 0x18, 0x32, 0x35, 0x34, 0x34, 0x23, 0x91, 0xeb, - 0xdd, 0xdb, 0xbb, 0x9c, 0x8a, 0x21, 0x34, 0x34, 0x33, 0x34, 0x33, 0x23, 0x01, 0x90, 0xaa, 0xbb, - 0xcb, 0xbb, 0xaa, 0x31, 0x47, 0x34, 0x33, 0x02, 0x00, 0x30, 0x55, 0x35, 0x25, 0x43, 0x33, 0x13, - 0x81, 0xca, 0xbd, 0xcb, 0xaa, 0xaa, 0xab, 0xab, 0xaa, 0x8a, 0x10, 0x43, 0x44, 0x42, 0x22, 0x12, - 0xa8, 0xde, 0xcc, 0xbb, 0xbb, 0xaa, 0xa9, 0xaa, 0xcb, 0x9a, 0x09, 0x52, 0x45, 0x23, 0x02, 0xd9, - 0xcc, 0xcc, 0xba, 0xaa, 0x8a, 0x20, 0x53, 0x34, 0x53, 0x32, 0x33, 0x12, 0x11, 0x20, 0x01, 0xb8, - 0xcd, 0xcc, 0x9a, 0x18, 0x52, 0x34, 0x24, 0x01, 0x89, 0x99, 0x08, 0x53, 0x44, 0x34, 0x53, 0x33, - 0x13, 0x80, 0xcb, 0xbc, 0xbb, 0xbb, 0xcb, 0xbb, 0xad, 0xbb, 0x99, 0x18, 0x32, 0x53, 0x32, 0x13, - 0x82, 0xc9, 0xcd, 0xcc, 0xba, 0xab, 0x9a, 0xbb, 0xdc, 0xcb, 0xaa, 0x19, 0x54, 0x53, 0x12, 0xa8, - 0xdc, 0xbb, 0xbc, 0xaa, 0x99, 0x18, 0x42, 0x34, 0x35, 0x33, 0x24, 0x32, 0x22, 0x33, 0x43, 0x01, - 0xc9, 0xcd, 0xac, 0x9a, 0x20, 0x34, 0x34, 0x22, 0x90, 0xaa, 0x9a, 0x30, 0x55, 0x44, 0x53, 0x33, - 0x24, 0x02, 0x98, 0xca, 0xab, 0xbb, 0xaa, 0xcc, 0xdb, 0xbb, 0xbb, 0x88, 0x22, 0x43, 0x22, 0x11, - 0x88, 0x89, 0xa9, 0xeb, 0xbc, 0xac, 0x9a, 0x99, 0xdb, 0xce, 0xcb, 0xaa, 0x10, 0x44, 0x33, 0x81, - 0xdc, 0xcc, 0xbb, 0xaa, 0x9a, 0x00, 0x31, 0x53, 0x34, 0x33, 0x43, 0x43, 0x32, 0x43, 0x32, 0x22, - 0x98, 0xcd, 0xbd, 0xaa, 0x08, 0x33, 0x36, 0x22, 0x81, 0xba, 0xbb, 0x09, 0x64, 0x53, 0x33, 0x35, - 0x43, 0x32, 0x11, 0xa8, 0xba, 0xbc, 0xba, 0xbc, 0xbe, 0xbd, 0xab, 0x99, 0x11, 0x33, 0x33, 0x01, - 0x98, 0xbb, 0x99, 0x00, 0x11, 0x98, 0x99, 0xba, 0xff, 0xcd, 0xcc, 0xab, 0x89, 0x31, 0x35, 0x12, - 0xb9, 0xcf, 0xcb, 0xaa, 0x99, 0x89, 0x10, 0x21, 0x34, 0x43, 0x24, 0x34, 0x34, 0x33, 0x24, 0x22, - 0x81, 0xca, 0xcd, 0x9b, 0x89, 0x21, 0x34, 0x24, 0x01, 0xb9, 0xcb, 0x8a, 0x41, 0x35, 0x44, 0x33, - 0x33, 0x25, 0x23, 0x12, 0x88, 0xba, 0xcc, 0xcb, 0xcc, 0xbc, 0xbc, 0x9a, 0x08, 0x32, 0x24, 0x01, - 0xa9, 0xcc, 0xaa, 0x88, 0x21, 0x32, 0x02, 0x90, 0xdb, 0xdc, 0xcb, 0xcb, 0x9a, 0x09, 0x43, 0x24, - 0x81, 0xec, 0xcc, 0xba, 0xaa, 0x99, 0x98, 0x08, 0x20, 0x34, 0x35, 0x45, 0x43, 0x32, 0x33, 0x22, - 0x11, 0xa8, 0xda, 0xac, 0x8a, 0x10, 0x43, 0x24, 0x12, 0x98, 0xbb, 0xac, 0x18, 0x45, 0x44, 0x33, - 0x24, 0x33, 0x53, 0x43, 0x22, 0x01, 0xa9, 0xcc, 0xcc, 0xdb, 0xab, 0xab, 0x88, 0x10, 0x33, 0x23, - 0xa8, 0xcd, 0xbc, 0x9a, 0x28, 0x42, 0x33, 0x02, 0xa8, 0xbd, 0xbd, 0xbb, 0xbb, 0x99, 0x20, 0x63, - 0x23, 0xc0, 0xde, 0xbc, 0xab, 0xab, 0xaa, 0xac, 0x9b, 0x18, 0x63, 0x44, 0x44, 0x42, 0x32, 0x12, - 0x01, 0x80, 0xa8, 0xaa, 0xab, 0x08, 0x30, 0x33, 0x01, 0xa9, 0xcc, 0xac, 0x19, 0x55, 0x45, 0x32, - 0x22, 0x12, 0x43, 0x44, 0x44, 0x12, 0x80, 0xb9, 0xbd, 0xbc, 0xbc, 0xba, 0x9a, 0x88, 0x31, 0x33, - 0x82, 0xfa, 0xcc, 0xaa, 0x89, 0x21, 0x43, 0x12, 0x80, 0xba, 0xcb, 0xab, 0x9a, 0xba, 0xab, 0x88, - 0x32, 0x83, 0xff, 0xcc, 0xbd, 0xbb, 0xbb, 0xbc, 0xad, 0x9b, 0x28, 0x64, 0x53, 0x33, 0x24, 0x23, - 0x11, 0x00, 0x98, 0x99, 0x99, 0x08, 0x00, 0x01, 0x90, 0xba, 0xcb, 0x9a, 0x30, 0x66, 0x44, 0x43, - 0x12, 0x11, 0x21, 0x54, 0x34, 0x25, 0x11, 0xa8, 0xbb, 0xcd, 0xbb, 0xbb, 0xab, 0x9a, 0x08, 0x21, - 0x12, 0xc9, 0xce, 0xac, 0x9b, 0x10, 0x23, 0x13, 0x80, 0xba, 0xbb, 0x9a, 0x89, 0xb9, 0xdd, 0xcb, - 0xab, 0x99, 0xa9, 0xec, 0xcd, 0xcc, 0xca, 0xca, 0xbb, 0xbd, 0x9b, 0x30, 0x46, 0x34, 0x33, 0x33, - 0x13, 0x02, 0x80, 0x88, 0x88, 0x80, 0x00, 0x80, 0xa8, 0xdb, 0xbb, 0x89, 0x31, 0x56, 0x44, 0x33, - 0x24, 0x11, 0x10, 0x42, 0x46, 0x34, 0x23, 0x81, 0xca, 0xbc, 0xbb, 0xab, 0xba, 0xba, 0xbb, 0x99, - 0x08, 0xb8, 0xde, 0xcc, 0xab, 0x89, 0x10, 0x11, 0x08, 0x99, 0x9a, 0x08, 0x21, 0x33, 0xb8, 0xff, - 0xbc, 0xba, 0xaa, 0x99, 0xba, 0xce, 0xcd, 0xcb, 0xbb, 0xbe, 0xac, 0x8a, 0x31, 0x46, 0x24, 0x23, - 0x22, 0x12, 0x11, 0x00, 0x80, 0x88, 0x08, 0x88, 0x98, 0xc9, 0xba, 0x89, 0x52, 0x45, 0x33, 0x24, - 0x23, 0x21, 0x20, 0x41, 0x64, 0x44, 0x33, 0x13, 0x90, 0xdb, 0xbb, 0xbb, 0xba, 0xca, 0xbb, 0xcb, - 0xa9, 0xa9, 0xca, 0xcd, 0xcb, 0xaa, 0x88, 0x80, 0x88, 0xaa, 0x8b, 0x32, 0x35, 0x34, 0x02, 0xfa, - 0xdc, 0xab, 0x9b, 0x8a, 0x90, 0xb9, 0xce, 0xbd, 0xbc, 0xcb, 0xbb, 0xbc, 0x8a, 0x72, 0x44, 0x33, - 0x33, 0x22, 0x11, 0x12, 0x01, 0x81, 0x88, 0x89, 0x89, 0x99, 0xaa, 0x8a, 0x61, 0x45, 0x34, 0x32, - 0x21, 0x33, 0x34, 0x33, 0x34, 0x36, 0x35, 0x24, 0x02, 0xb8, 0xcc, 0xbb, 0x9a, 0x9a, 0xab, 0xbc, - 0xad, 0xaa, 0xaa, 0xcb, 0xdb, 0xcb, 0xba, 0xab, 0xca, 0xba, 0x8b, 0x62, 0x34, 0x24, 0x12, 0x98, - 0xcc, 0xdb, 0xba, 0xaa, 0x9a, 0xaa, 0xcc, 0xcc, 0xcb, 0xbb, 0xad, 0xac, 0x9b, 0x18, 0x55, 0x53, - 0x33, 0x32, 0x21, 0x22, 0x12, 0x02, 0x98, 0xaa, 0xbb, 0x8a, 0x08, 0x32, 0x54, 0x44, 0x34, 0x24, - 0x23, 0x22, 0x23, 0x23, 0x33, 0x44, 0x44, 0x34, 0x33, 0x90, 0xdc, 0xcb, 0x9a, 0x98, 0x80, 0xa9, - 0xdb, 0xab, 0xab, 0xaa, 0xeb, 0xcc, 0xdb, 0xba, 0xab, 0xbb, 0xbb, 0x09, 0x63, 0x44, 0x23, 0x01, - 0x98, 0xcb, 0xbc, 0xba, 0xbb, 0xbc, 0xcb, 0xcd, 0xcb, 0xcb, 0xbb, 0xbb, 0xbb, 0x89, 0x53, 0x46, - 0x44, 0x32, 0x22, 0x22, 0x22, 0x13, 0x01, 0xa8, 0xbc, 0xac, 0x89, 0x31, 0x44, 0x34, 0x34, 0x33, - 0x33, 0x23, 0x24, 0x32, 0x32, 0x43, 0x43, 0x34, 0x33, 0x80, 0xdc, 0xbd, 0xba, 0x89, 0x10, 0x01, - 0xaa, 0xbc, 0xbb, 0xcc, 0xdb, 0xdc, 0xdb, 0xbb, 0xbb, 0xac, 0x9b, 0x09, 0x32, 0x36, 0x23, 0x13, - 0x98, 0xca, 0xac, 0xab, 0xba, 0xba, 0xcc, 0xbd, 0xcd, 0xbb, 0xbc, 0xbb, 0xba, 0x99, 0x31, 0x56, - 0x44, 0x33, 0x33, 0x32, 0x43, 0x22, 0x01, 0xa9, 0xbd, 0xac, 0x8a, 0x20, 0x44, 0x34, 0x34, 0x23, - 0x33, 0x22, 0x12, 0x21, 0x32, 0x43, 0x34, 0x33, 0x23, 0xa0, 0xdd, 0xcc, 0xbb, 0x99, 0x00, 0x01, - 0x90, 0x99, 0xba, 0xaa, 0xdc, 0xdd, 0xcc, 0xcc, 0xbb, 0xac, 0xaa, 0x99, 0x00, 0x42, 0x43, 0x23, - 0x02, 0x90, 0xa9, 0xbb, 0xbc, 0xbd, 0xcc, 0xcb, 0xcc, 0xbb, 0xcb, 0xbb, 0xab, 0x8a, 0x10, 0x54, - 0x54, 0x33, 0x25, 0x33, 0x32, 0x22, 0x01, 0xb9, 0xcd, 0xbb, 0xaa, 0x18, 0x42, 0x44, 0x34, 0x34, - 0x32, 0x33, 0x23, 0x32, 0x32, 0x23, 0x13, 0x22, 0x01, 0xd9, 0xdc, 0xbc, 0xbc, 0xbb, 0x99, 0x10, - 0x22, 0x33, 0x22, 0x11, 0xb8, 0xee, 0xdc, 0xdc, 0xbb, 0xbc, 0xab, 0xa9, 0x89, 0x00, 0x31, 0x35, - 0x33, 0x23, 0x11, 0x80, 0xba, 0xcf, 0xdb, 0xbc, 0xbc, 0xbb, 0xcb, 0xba, 0xac, 0xab, 0x8a, 0x40, - 0x64, 0x53, 0x33, 0x43, 0x23, 0x22, 0x02, 0x98, 0xdb, 0xbb, 0xbb, 0xaa, 0x18, 0x63, 0x44, 0x43, - 0x24, 0x24, 0x32, 0x22, 0x22, 0x11, 0x80, 0x80, 0x08, 0xb8, 0xcc, 0xdb, 0xbc, 0xad, 0x9a, 0x09, - 0x20, 0x23, 0x22, 0x01, 0x00, 0xa8, 0xfb, 0xed, 0xdb, 0xbb, 0xba, 0xbb, 0xba, 0xaa, 0x09, 0x62, - 0x44, 0x33, 0x23, 0x01, 0xa9, 0xcb, 0xcc, 0xbc, 0xbc, 0xcb, 0xbb, 0xbc, 0xcb, 0xbb, 0x9a, 0x08, - 0x63, 0x44, 0x34, 0x34, 0x33, 0x23, 0x22, 0x81, 0x99, 0xcb, 0xcb, 0xab, 0x9b, 0x19, 0x52, 0x44, - 0x54, 0x33, 0x34, 0x33, 0x32, 0x21, 0x12, 0x11, 0x80, 0xb9, 0xcb, 0xbc, 0xcc, 0xcc, 0xab, 0xaa, - 0x88, 0x21, 0x11, 0x00, 0x98, 0x89, 0x90, 0xfb, 0xdd, 0xbd, 0xbc, 0xac, 0xab, 0xaa, 0x89, 0x31, - 0x45, 0x34, 0x33, 0x13, 0x90, 0xb9, 0xcc, 0xbc, 0xcc, 0xcb, 0xbb, 0xcb, 0xcb, 0xcb, 0xaa, 0x89, - 0x31, 0x45, 0x35, 0x43, 0x23, 0x23, 0x21, 0x11, 0x00, 0xa9, 0xcb, 0xcb, 0xbb, 0xbb, 0x9a, 0x20, - 0x56, 0x54, 0x43, 0x33, 0x32, 0x22, 0x21, 0x21, 0x01, 0x88, 0xaa, 0xcb, 0xbc, 0xcd, 0xcb, 0xbb, - 0x8a, 0x08, 0x00, 0x00, 0x99, 0x89, 0x01, 0x98, 0xfb, 0xcf, 0xbc, 0xbc, 0xbb, 0xab, 0x89, 0x20, - 0x54, 0x34, 0x25, 0x12, 0x81, 0xa9, 0xaa, 0xba, 0xcc, 0xcc, 0xcb, 0xdb, 0xcb, 0xbb, 0xac, 0x9a, - 0x18, 0x53, 0x34, 0x35, 0x33, 0x23, 0x33, 0x32, 0x12, 0x90, 0xba, 0xcc, 0xba, 0xac, 0xbb, 0xab, - 0x19, 0x65, 0x44, 0x33, 0x43, 0x22, 0x22, 0x23, 0x33, 0x12, 0x90, 0xba, 0xbd, 0xdb, 0xdb, 0xba, - 0xcb, 0xaa, 0x9a, 0x89, 0x88, 0x00, 0x11, 0x88, 0xb9, 0xff, 0xcc, 0xbb, 0xac, 0x9a, 0x08, 0x10, - 0x52, 0x34, 0x35, 0x22, 0x82, 0x98, 0xa9, 0xa9, 0xca, 0xdb, 0xcd, 0xcc, 0xbb, 0xbc, 0xcb, 0xab, - 0x9a, 0x10, 0x44, 0x35, 0x34, 0x33, 0x33, 0x24, 0x22, 0x02, 0x98, 0xaa, 0xac, 0xbb, 0xca, 0xca, - 0x9a, 0x18, 0x43, 0x45, 0x33, 0x24, 0x22, 0x43, 0x33, 0x34, 0x23, 0x01, 0x99, 0xaa, 0xbc, 0xdb, - 0xcc, 0xbc, 0xba, 0xab, 0x99, 0x10, 0x00, 0xa9, 0xcb, 0xdd, 0xcc, 0xcb, 0xaa, 0x9a, 0x08, 0x11, - 0x53, 0x44, 0x34, 0x24, 0x11, 0x88, 0x89, 0x88, 0x89, 0xb9, 0xed, 0xdc, 0xcb, 0xbb, 0xcb, 0xbb, - 0xbb, 0x9a, 0x20, 0x45, 0x44, 0x43, 0x33, 0x24, 0x33, 0x22, 0x01, 0x98, 0xba, 0xbb, 0xac, 0xab, - 0xbb, 0x9a, 0x8a, 0x20, 0x73, 0x34, 0x43, 0x44, 0x33, 0x34, 0x34, 0x22, 0x21, 0x00, 0x88, 0xba, - 0xcd, 0xcc, 0xcb, 0xcb, 0x9a, 0x08, 0x88, 0x98, 0xba, 0xcc, 0xcc, 0xcb, 0xab, 0x8a, 0x10, 0x32, - 0x53, 0x34, 0x35, 0x34, 0x13, 0x01, 0x98, 0x98, 0x80, 0x98, 0xdc, 0xde, 0xcb, 0xcb, 0xab, 0xbb, - 0xac, 0xab, 0x8a, 0x30, 0x55, 0x43, 0x34, 0x33, 0x34, 0x23, 0x23, 0x01, 0x98, 0xaa, 0xaa, 0xcb, - 0xab, 0xac, 0xbb, 0xac, 0x8a, 0x10, 0x31, 0x44, 0x35, 0x44, 0x34, 0x24, 0x33, 0x34, 0x12, 0x00, - 0xa9, 0xcc, 0xcc, 0xcb, 0xaa, 0x8a, 0x99, 0xa9, 0xbc, 0xbc, 0xcc, 0xba, 0xab, 0x09, 0x21, 0x43, - 0x43, 0x53, 0x53, 0x33, 0x33, 0x12, 0x01, 0x88, 0x80, 0x98, 0xd9, 0xde, 0xbc, 0xcc, 0xcb, 0xbb, - 0xcb, 0xcb, 0x9b, 0x0a, 0x21, 0x45, 0x43, 0x24, 0x43, 0x32, 0x33, 0x32, 0x11, 0x88, 0x98, 0xb9, - 0xcb, 0xcb, 0xcb, 0xab, 0x9b, 0x89, 0x88, 0x00, 0x21, 0x44, 0x46, 0x44, 0x43, 0x34, 0x32, 0x11, - 0x91, 0xc9, 0xdb, 0xbb, 0xac, 0x9a, 0xa9, 0xb9, 0xdb, 0xcb, 0xca, 0xba, 0xba, 0x9a, 0x10, 0x22, - 0x33, 0x54, 0x43, 0x44, 0x33, 0x34, 0x33, 0x11, 0x00, 0x80, 0x90, 0xca, 0xde, 0xbc, 0xbe, 0xbc, - 0xcb, 0xbb, 0xac, 0xa9, 0x08, 0x32, 0x44, 0x43, 0x43, 0x34, 0x43, 0x23, 0x23, 0x12, 0x11, 0x88, - 0xb9, 0xbd, 0xbc, 0xaa, 0xaa, 0x89, 0x89, 0xa9, 0xab, 0x9a, 0x50, 0x56, 0x54, 0x43, 0x32, 0x12, - 0x01, 0x98, 0xba, 0xdb, 0xcb, 0x9a, 0x9a, 0xc9, 0xcb, 0xcb, 0xba, 0xbb, 0xbc, 0xcb, 0x09, 0x21, - 0x22, 0x31, 0x43, 0x35, 0x44, 0x42, 0x22, 0x22, 0x11, 0x21, 0x22, 0x33, 0x81, 0xfd, 0xdd, 0xcc, - 0xcb, 0xba, 0xab, 0xab, 0xaa, 0x08, 0x21, 0x53, 0x53, 0x44, 0x43, 0x24, 0x33, 0x23, 0x22, 0x02, - 0x90, 0xc9, 0xca, 0xaa, 0xab, 0xab, 0xaa, 0xba, 0xcc, 0xab, 0x8a, 0x63, 0x45, 0x35, 0x32, 0x13, - 0x01, 0x80, 0x88, 0xb9, 0xbd, 0xbc, 0xab, 0xaa, 0xca, 0xab, 0xab, 0xbc, 0xbd, 0xbd, 0xaa, 0x89, - 0x08, 0x98, 0x18, 0x62, 0x34, 0x34, 0x42, 0x33, 0x43, 0x33, 0x34, 0x43, 0x33, 0x81, 0xec, 0xdd, - 0xbc, 0xac, 0xbb, 0xba, 0xab, 0x9b, 0x99, 0x20, 0x42, 0x45, 0x44, 0x34, 0x43, 0x33, 0x32, 0x23, - 0x11, 0x90, 0xa9, 0xcb, 0xbc, 0xac, 0xaa, 0xaa, 0xaa, 0xcb, 0xab, 0x19, 0x74, 0x34, 0x34, 0x22, - 0x10, 0x08, 0x08, 0x08, 0x99, 0xbd, 0xbc, 0xac, 0xaa, 0x99, 0x88, 0xb9, 0xce, 0xcb, 0xab, 0x8a, - 0x98, 0x99, 0xbb, 0x8a, 0x31, 0x46, 0x34, 0x42, 0x43, 0x33, 0x44, 0x43, 0x43, 0x22, 0x80, 0xfb, - 0xcc, 0xbc, 0xac, 0xbb, 0xba, 0xac, 0xaa, 0x99, 0x00, 0x41, 0x45, 0x44, 0x33, 0x34, 0x33, 0x43, - 0x12, 0x01, 0x80, 0xa8, 0xcb, 0xdb, 0xaa, 0xab, 0x9a, 0xaa, 0xab, 0x0a, 0x73, 0x34, 0x25, 0x23, - 0x11, 0x88, 0x98, 0x80, 0x98, 0xda, 0xcc, 0xcb, 0xba, 0x09, 0x10, 0x01, 0xb9, 0xbe, 0xaa, 0x89, - 0x99, 0xeb, 0xbc, 0xac, 0x99, 0x99, 0x00, 0x42, 0x43, 0x34, 0x45, 0x53, 0x43, 0x33, 0x12, 0x90, - 0xcc, 0xcd, 0xbb, 0xbc, 0xcb, 0xbb, 0xcb, 0xaa, 0x9a, 0x08, 0x52, 0x44, 0x34, 0x34, 0x34, 0x24, - 0x13, 0x12, 0x01, 0x81, 0x98, 0xbc, 0xbc, 0xac, 0xaa, 0xaa, 0xaa, 0x89, 0x31, 0x35, 0x35, 0x34, - 0x12, 0x11, 0x88, 0x99, 0x89, 0xa9, 0xfb, 0xbc, 0xbd, 0xaa, 0x09, 0x10, 0x80, 0xaa, 0x8a, 0x10, - 0x13, 0xe8, 0xcd, 0xac, 0xab, 0xbc, 0xba, 0x9a, 0x18, 0x22, 0x55, 0x54, 0x44, 0x33, 0x23, 0x12, - 0x90, 0xdb, 0xcc, 0xcb, 0xac, 0xbc, 0xcb, 0xba, 0xaa, 0x8a, 0x18, 0x53, 0x44, 0x43, 0x44, 0x33, - 0x24, 0x22, 0x12, 0x11, 0x81, 0xb8, 0xcc, 0xbc, 0xac, 0xa9, 0x99, 0x08, 0x00, 0x22, 0x43, 0x34, - 0x33, 0x23, 0x01, 0xb9, 0xbb, 0xbb, 0xcc, 0xcd, 0xbd, 0xcb, 0x99, 0x08, 0x00, 0x00, 0x11, 0x32, - 0x24, 0x81, 0xca, 0xcc, 0xdb, 0xcc, 0xcb, 0xab, 0xaa, 0x98, 0x20, 0x54, 0x35, 0x44, 0x23, 0x32, - 0x11, 0x80, 0xba, 0xcc, 0xbd, 0xdb, 0xcb, 0xbc, 0xbb, 0xba, 0x99, 0x10, 0x43, 0x45, 0x34, 0x35, - 0x33, 0x34, 0x22, 0x22, 0x12, 0x90, 0xba, 0xce, 0xbb, 0xac, 0x9a, 0x88, 0x08, 0x11, 0x31, 0x43, - 0x34, 0x33, 0x13, 0x90, 0xaa, 0xbb, 0xcb, 0xcd, 0xdb, 0xbc, 0xac, 0xab, 0x89, 0x11, 0x32, 0x44, - 0x33, 0x22, 0x21, 0x02, 0xea, 0xdd, 0xdb, 0xcb, 0xaa, 0xaa, 0x89, 0x21, 0x53, 0x44, 0x24, 0x24, - 0x22, 0x02, 0x90, 0xb9, 0xcb, 0xbc, 0xbc, 0xbd, 0xbd, 0xcb, 0x9a, 0x99, 0x20, 0x42, 0x44, 0x34, - 0x43, 0x34, 0x32, 0x33, 0x23, 0x02, 0xa8, 0xdb, 0xbd, 0xcb, 0xab, 0xaa, 0x89, 0x09, 0x31, 0x43, - 0x34, 0x43, 0x32, 0x11, 0x01, 0x98, 0xba, 0xdc, 0xcc, 0xdb, 0xba, 0xba, 0x99, 0x08, 0x20, 0x43, - 0x34, 0x23, 0x32, 0x33, 0x02, 0xea, 0xde, 0xdb, 0xbb, 0xbb, 0xab, 0x09, 0x31, 0x54, 0x34, 0x44, - 0x33, 0x23, 0x11, 0x90, 0xba, 0xbc, 0xdb, 0xdb, 0xcc, 0xdb, 0xba, 0x9a, 0x89, 0x21, 0x53, 0x34, - 0x34, 0x44, 0x32, 0x34, 0x22, 0x22, 0x80, 0xa9, 0xbc, 0xbd, 0xac, 0xab, 0xaa, 0x9a, 0x08, 0x31, - 0x35, 0x34, 0x32, 0x12, 0x22, 0x21, 0x12, 0xa9, 0xde, 0xcc, 0xac, 0xbb, 0xaa, 0x99, 0x88, 0x20, - 0x22, 0x44, 0x43, 0x24, 0x12, 0x91, 0xdb, 0xbd, 0xcc, 0xcb, 0xab, 0xaa, 0x88, 0x21, 0x63, 0x44, - 0x24, 0x23, 0x22, 0x10, 0x98, 0xa9, 0xbb, 0xcd, 0xcc, 0xbc, 0xbc, 0xba, 0x99, 0x08, 0x32, 0x36, - 0x35, 0x34, 0x34, 0x43, 0x33, 0x22, 0x12, 0x80, 0xba, 0xcd, 0xbc, 0xbb, 0xbb, 0xab, 0xaa, 0x18, - 0x43, 0x35, 0x33, 0x24, 0x21, 0x33, 0x12, 0x80, 0xda, 0xdc, 0xbc, 0xcb, 0xab, 0xbb, 0xa9, 0x88, - 0x11, 0x53, 0x33, 0x34, 0x22, 0x02, 0xc9, 0xcc, 0xcc, 0xbc, 0xbc, 0xbb, 0xaa, 0x08, 0x31, 0x37, - 0x45, 0x32, 0x32, 0x12, 0x01, 0x88, 0xb8, 0xdb, 0xcc, 0xbc, 0xbd, 0xcb, 0xaa, 0x8a, 0x08, 0x42, - 0x45, 0x34, 0x43, 0x43, 0x32, 0x23, 0x13, 0x02, 0x98, 0xda, 0xbc, 0xcc, 0xba, 0xaa, 0xab, 0x99, - 0x00, 0x33, 0x35, 0x33, 0x23, 0x33, 0x24, 0x13, 0x00, 0xca, 0xcd, 0xcc, 0xbb, 0xac, 0xab, 0x9a, - 0x08, 0x21, 0x32, 0x43, 0x33, 0x21, 0x90, 0xeb, 0xbc, 0xcd, 0xbc, 0xad, 0xab, 0x9a, 0x08, 0x52, - 0x45, 0x43, 0x33, 0x22, 0x02, 0x01, 0x88, 0xba, 0xdc, 0xdb, 0xbc, 0xbc, 0xac, 0xaa, 0x99, 0x20, - 0x63, 0x44, 0x53, 0x32, 0x33, 0x24, 0x22, 0x22, 0x00, 0x98, 0xdb, 0xcc, 0xbb, 0xbc, 0xaa, 0xab, - 0x99, 0x08, 0x22, 0x34, 0x24, 0x33, 0x43, 0x32, 0x33, 0x01, 0xba, 0xcf, 0xcb, 0xcb, 0xab, 0xaa, - 0x89, 0x18, 0x20, 0x11, 0x01, 0x88, 0x99, 0xba, 0xdc, 0xcc, 0xdc, 0xdb, 0xbb, 0xaa, 0x8a, 0x32, - 0x46, 0x44, 0x33, 0x33, 0x23, 0x21, 0x00, 0x98, 0xca, 0xdc, 0xeb, 0xcb, 0xbb, 0xac, 0xaa, 0x88, - 0x31, 0x45, 0x35, 0x34, 0x24, 0x23, 0x33, 0x33, 0x23, 0x81, 0xb9, 0xdd, 0xdb, 0xbb, 0xba, 0xbb, - 0x9a, 0x9a, 0x08, 0x21, 0x32, 0x33, 0x45, 0x53, 0x33, 0x23, 0x01, 0xb9, 0xec, 0xcb, 0xba, 0xba, - 0x99, 0x09, 0x10, 0x00, 0xa9, 0xcb, 0xbb, 0xaa, 0xa9, 0xdc, 0xcd, 0xbd, 0xad, 0xbb, 0x8a, 0x30, - 0x54, 0x43, 0x34, 0x24, 0x22, 0x22, 0x21, 0x01, 0x98, 0xba, 0xcf, 0xcc, 0xdb, 0xab, 0xab, 0x99, - 0x20, 0x52, 0x34, 0x45, 0x42, 0x32, 0x32, 0x24, 0x33, 0x12, 0x00, 0xba, 0xdd, 0xbb, 0xbc, 0xab, - 0xab, 0xab, 0xa9, 0x88, 0x18, 0x10, 0x33, 0x46, 0x34, 0x34, 0x12, 0x80, 0xa9, 0xbc, 0xac, 0xab, - 0x9a, 0x9a, 0x89, 0x99, 0xca, 0xbd, 0xbc, 0xab, 0x8a, 0xa8, 0xeb, 0xcd, 0xbd, 0xbb, 0xaa, 0x18, - 0x54, 0x43, 0x43, 0x42, 0x32, 0x32, 0x22, 0x12, 0x11, 0x98, 0xdb, 0xdd, 0xcc, 0xbc, 0xab, 0x9b, - 0x09, 0x21, 0x44, 0x44, 0x53, 0x32, 0x24, 0x43, 0x32, 0x23, 0x12, 0x98, 0xcb, 0xcc, 0xbb, 0xac, - 0xbb, 0xbb, 0xbb, 0xba, 0x9a, 0x99, 0x00, 0x52, 0x55, 0x33, 0x24, 0x12, 0x90, 0xaa, 0xbb, 0xaa, - 0x99, 0xa8, 0xaa, 0xbc, 0xcd, 0xac, 0xac, 0xbb, 0xbb, 0x9a, 0xbb, 0xdc, 0xcc, 0xbc, 0xac, 0x89, - 0x41, 0x53, 0x33, 0x34, 0x24, 0x23, 0x23, 0x21, 0x12, 0x01, 0xa9, 0xcd, 0xdd, 0xcb, 0xac, 0xbb, - 0x99, 0x18, 0x31, 0x35, 0x45, 0x43, 0x43, 0x43, 0x43, 0x23, 0x13, 0x01, 0x98, 0xca, 0xcb, 0xbc, - 0xcb, 0xab, 0xac, 0xaa, 0xab, 0xba, 0xaa, 0x08, 0x63, 0x53, 0x24, 0x23, 0x12, 0x98, 0xb9, 0x9a, - 0x89, 0x88, 0x98, 0xb9, 0xdd, 0xcb, 0xcb, 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xdc, 0xcc, 0xcb, 0x9a, - 0x09, 0x32, 0x45, 0x34, 0x42, 0x22, 0x32, 0x32, 0x24, 0x23, 0x01, 0xa8, 0xdc, 0xcd, 0xbc, 0xbb, - 0xab, 0x8a, 0x10, 0x31, 0x35, 0x36, 0x35, 0x35, 0x34, 0x43, 0x23, 0x22, 0x01, 0x98, 0xcb, 0xbc, - 0xbc, 0xbb, 0xcb, 0xbb, 0xbc, 0xbc, 0xba, 0x9a, 0x10, 0x43, 0x44, 0x24, 0x23, 0x11, 0x00, 0x88, - 0x99, 0x88, 0x80, 0xa9, 0xdd, 0xdb, 0xbb, 0xac, 0x99, 0xa9, 0x99, 0xba, 0xcc, 0xcc, 0xdb, 0xba, - 0x9a, 0x18, 0x52, 0x43, 0x33, 0x33, 0x34, 0x44, 0x33, 0x33, 0x32, 0x13, 0x90, 0xed, 0xcc, 0xbb, - 0xaa, 0xaa, 0x88, 0x08, 0x10, 0x53, 0x55, 0x44, 0x34, 0x34, 0x24, 0x33, 0x22, 0x01, 0x98, 0xbc, - 0xbd, 0xbb, 0xac, 0xbb, 0xbd, 0xcb, 0xba, 0xaa, 0x08, 0x21, 0x34, 0x44, 0x32, 0x23, 0x12, 0x00, - 0x98, 0x89, 0x08, 0x98, 0xfb, 0xdc, 0xbb, 0xbb, 0x99, 0x89, 0xa9, 0xbb, 0xdc, 0xcb, 0xcb, 0xab, - 0xbb, 0x9a, 0x10, 0x34, 0x34, 0x34, 0x35, 0x34, 0x34, 0x43, 0x43, 0x43, 0x12, 0x90, 0xcc, 0xbc, - 0xab, 0xab, 0xaa, 0x9a, 0x9a, 0x09, 0x72, 0x46, 0x54, 0x43, 0x33, 0x33, 0x24, 0x22, 0x81, 0xb8, - 0xeb, 0xbb, 0xbc, 0xbb, 0xdb, 0xcb, 0xbb, 0xba, 0x99, 0x20, 0x42, 0x34, 0x24, 0x33, 0x24, 0x12, - 0x00, 0x98, 0x99, 0xba, 0xcc, 0xbd, 0xbc, 0xac, 0x9a, 0x88, 0x80, 0x08, 0x88, 0xaa, 0xbb, 0xcd, - 0xbc, 0xab, 0xab, 0x89, 0x88, 0x10, 0x53, 0x45, 0x44, 0x43, 0x34, 0x34, 0x24, 0x02, 0x98, 0xca, - 0xba, 0xbb, 0xca, 0xba, 0xba, 0xbc, 0x8b, 0x73, 0x47, 0x53, 0x43, 0x32, 0x33, 0x33, 0x23, 0x81, - 0xca, 0xcc, 0xbc, 0xbb, 0xcb, 0xbc, 0xdb, 0xaa, 0x9a, 0x08, 0x21, 0x24, 0x24, 0x33, 0x43, 0x32, - 0x12, 0x80, 0xaa, 0xca, 0xcb, 0xbc, 0xbd, 0xbb, 0xbb, 0x9a, 0x88, 0x00, 0x10, 0x80, 0x99, 0xca, - 0xcb, 0xbc, 0xbb, 0xbc, 0xbc, 0xbd, 0xaa, 0x08, 0x63, 0x54, 0x43, 0x34, 0x24, 0x33, 0x02, 0x80, - 0xa9, 0xab, 0xbc, 0xca, 0xcb, 0xcb, 0xab, 0x28, 0x65, 0x45, 0x43, 0x43, 0x33, 0x33, 0x24, 0x12, - 0x90, 0xda, 0xcb, 0xac, 0xbb, 0xdb, 0xbb, 0xbc, 0xab, 0x8a, 0x20, 0x33, 0x35, 0x34, 0x33, 0x24, - 0x23, 0x00, 0xa8, 0xbb, 0xbd, 0xbc, 0xcc, 0xbb, 0xac, 0x9a, 0x88, 0x10, 0x11, 0x11, 0x01, 0x01, - 0x88, 0xba, 0xcd, 0xcc, 0xcb, 0xbc, 0xbc, 0xab, 0x89, 0x42, 0x45, 0x34, 0x33, 0x44, 0x23, 0x13, - 0x02, 0x80, 0xaa, 0xbb, 0xbd, 0xbc, 0xaa, 0x99, 0x48, 0x65, 0x44, 0x53, 0x33, 0x43, 0x32, 0x23, - 0x11, 0x98, 0xdb, 0xdb, 0xbb, 0xcc, 0xcb, 0xbb, 0xac, 0x9a, 0x08, 0x20, 0x42, 0x43, 0x43, 0x33, - 0x23, 0x02, 0xa0, 0xba, 0xbc, 0xbc, 0xbc, 0xbd, 0xbc, 0xab, 0x99, 0x10, 0x21, 0x21, 0x21, 0x21, - 0x11, 0x90, 0xca, 0xdd, 0xcc, 0xcb, 0xbc, 0xbb, 0xab, 0x88, 0x52, 0x44, 0x43, 0x34, 0x43, 0x32, - 0x22, 0x11, 0x08, 0x98, 0xaa, 0xbb, 0xcb, 0xbc, 0x9b, 0x40, 0x47, 0x45, 0x43, 0x23, 0x43, 0x32, - 0x22, 0x81, 0xa8, 0xdb, 0xcb, 0xcc, 0xcb, 0xcb, 0xbb, 0xbb, 0x9a, 0x18, 0x31, 0x45, 0x33, 0x34, - 0x22, 0x12, 0x88, 0x98, 0xa9, 0xba, 0xce, 0xcc, 0xcb, 0xab, 0x9a, 0x00, 0x20, 0x21, 0x11, 0x00, - 0x11, 0x01, 0x00, 0xc9, 0xce, 0xbd, 0xbd, 0xac, 0xab, 0xaa, 0x08, 0x42, 0x54, 0x34, 0x34, 0x32, - 0x22, 0x12, 0x22, 0x23, 0x12, 0xa8, 0xcc, 0xcb, 0xcb, 0x8a, 0x30, 0x57, 0x43, 0x24, 0x33, 0x43, - 0x22, 0x12, 0x90, 0xb9, 0xdb, 0xbc, 0xcd, 0xca, 0xbb, 0xcb, 0xaa, 0x09, 0x20, 0x34, 0x34, 0x43, - 0x22, 0x11, 0x80, 0x80, 0x90, 0xa9, 0xdc, 0xcd, 0xcb, 0xbb, 0xab, 0x88, 0x21, 0x32, 0x12, 0x01, - 0x11, 0x32, 0x34, 0x82, 0xfa, 0xcd, 0xcc, 0xcb, 0xab, 0xab, 0x9a, 0x18, 0x62, 0x34, 0x34, 0x33, - 0x43, 0x22, 0x33, 0x34, 0x24, 0x01, 0x98, 0xca, 0xbb, 0xad, 0x9b, 0x20, 0x54, 0x34, 0x34, 0x34, - 0x43, 0x32, 0x11, 0x00, 0xa8, 0xda, 0xcc, 0xbc, 0xdb, 0xab, 0xbb, 0xaa, 0x08, 0x32, 0x53, 0x33, - 0x33, 0x22, 0x22, 0x43, 0x33, 0x02, 0xfa, 0xcd, 0xbc, 0xbc, 0xab, 0x99, 0x18, 0x20, 0x02, 0x80, - 0x08, 0x41, 0x34, 0x33, 0xa0, 0xdd, 0xcd, 0xbc, 0xcb, 0xaa, 0x9a, 0x09, 0x30, 0x45, 0x33, 0x34, - 0x23, 0x43, 0x33, 0x36, 0x33, 0x23, 0x81, 0xba, 0xcb, 0xcc, 0xaa, 0x8a, 0x28, 0x43, 0x45, 0x53, - 0x43, 0x33, 0x22, 0x11, 0x10, 0xa9, 0xcd, 0xbc, 0xbc, 0xbc, 0xac, 0x9b, 0x99, 0x10, 0x21, 0x42, - 0x22, 0x22, 0x32, 0x44, 0x44, 0x22, 0x91, 0xda, 0xcc, 0xbc, 0xbb, 0xaa, 0x99, 0x08, 0x81, 0x98, - 0x89, 0x28, 0x55, 0x24, 0x02, 0xa8, 0xec, 0xbc, 0xac, 0xab, 0xaa, 0x9a, 0x19, 0x42, 0x34, 0x53, - 0x33, 0x43, 0x34, 0x44, 0x34, 0x32, 0x11, 0x80, 0xa9, 0xcb, 0xcb, 0xba, 0x99, 0x18, 0x32, 0x56, - 0x34, 0x34, 0x33, 0x22, 0x12, 0x01, 0xca, 0xdc, 0xcb, 0xbc, 0xbb, 0xbb, 0x9a, 0x89, 0x11, 0x42, - 0x22, 0x11, 0x20, 0x45, 0x45, 0x34, 0x02, 0x98, 0xdb, 0xdb, 0xbb, 0xba, 0x9a, 0x9a, 0x98, 0xa9, - 0xbb, 0x8b, 0x52, 0x36, 0x24, 0x81, 0xc9, 0xcd, 0xcb, 0xba, 0xba, 0xba, 0x9b, 0x28, 0x34, 0x44, - 0x33, 0x34, 0x53, 0x44, 0x34, 0x33, 0x14, 0x11, 0x98, 0xba, 0xcb, 0xab, 0xab, 0xa9, 0x88, 0x41, - 0x46, 0x44, 0x33, 0x42, 0x22, 0x12, 0x81, 0xba, 0xcd, 0xdb, 0xbb, 0xbc, 0xaa, 0x99, 0x09, 0x00, - 0x11, 0x80, 0x08, 0x73, 0x45, 0x44, 0x22, 0x01, 0xa8, 0xcb, 0xbc, 0xbb, 0xab, 0xab, 0xa9, 0xca, - 0xcb, 0xaa, 0x18, 0x44, 0x24, 0x12, 0xa8, 0xcd, 0xbc, 0xcb, 0xba, 0xbb, 0xab, 0x8a, 0x21, 0x34, - 0x35, 0x43, 0x43, 0x54, 0x53, 0x43, 0x23, 0x13, 0x01, 0xb8, 0xcb, 0xcb, 0xaa, 0xa9, 0xa9, 0x99, - 0x31, 0x56, 0x34, 0x25, 0x33, 0x23, 0x12, 0x80, 0xb9, 0xcd, 0xcc, 0xcb, 0xaa, 0xaa, 0x89, 0x08, - 0x00, 0x88, 0x99, 0x28, 0x57, 0x54, 0x23, 0x13, 0x80, 0xb9, 0xbc, 0xac, 0xab, 0xab, 0xb9, 0xca, - 0xac, 0xab, 0x8a, 0x30, 0x44, 0x22, 0x02, 0xca, 0xbe, 0xbc, 0xac, 0xbb, 0xbb, 0x9a, 0x08, 0x33, - 0x43, 0x13, 0x32, 0x57, 0x45, 0x34, 0x34, 0x22, 0x12, 0x90, 0xaa, 0xac, 0xab, 0xab, 0xba, 0xba, - 0x9b, 0x41, 0x57, 0x34, 0x35, 0x22, 0x22, 0x11, 0x90, 0xca, 0xcc, 0xbc, 0xac, 0x9a, 0x99, 0x80, - 0x88, 0x98, 0x9a, 0x18, 0x73, 0x45, 0x34, 0x24, 0x02, 0x90, 0xaa, 0xbc, 0xbb, 0xbb, 0xcb, 0xba, - 0xbc, 0xbb, 0xab, 0x19, 0x41, 0x22, 0x23, 0x80, 0xea, 0xcd, 0xbc, 0xcb, 0xba, 0x9a, 0x89, 0x10, - 0x21, 0x02, 0x00, 0x73, 0x55, 0x35, 0x35, 0x43, 0x12, 0x01, 0x98, 0xaa, 0xbb, 0xcb, 0xba, 0xbb, - 0xab, 0x09, 0x73, 0x45, 0x35, 0x43, 0x32, 0x21, 0x00, 0xa9, 0xdb, 0xbc, 0xbc, 0xac, 0xa9, 0x98, - 0x08, 0x88, 0x98, 0x08, 0x31, 0x56, 0x45, 0x33, 0x23, 0x01, 0xaa, 0xbc, 0xbb, 0xbc, 0xca, 0xba, - 0xcb, 0xbb, 0xbb, 0x99, 0x10, 0x12, 0x12, 0x12, 0x81, 0xed, 0xcd, 0xcb, 0xaa, 0x9a, 0x89, 0x89, - 0x88, 0x98, 0x98, 0x31, 0x67, 0x45, 0x34, 0x34, 0x33, 0x12, 0x01, 0xa9, 0xcb, 0xbb, 0xbc, 0xcb, - 0xaa, 0x8a, 0x28, 0x54, 0x36, 0x35, 0x33, 0x23, 0x11, 0x90, 0xba, 0xcd, 0xdb, 0xba, 0xba, 0x9a, - 0x89, 0x88, 0x88, 0x88, 0x28, 0x74, 0x44, 0x34, 0x24, 0x02, 0x90, 0xa9, 0xbb, 0xcb, 0xba, 0xbc, - 0xbc, 0xcb, 0xba, 0x9a, 0x08, 0x08, 0x98, 0x89, 0x80, 0xc9, 0xce, 0xbc, 0xac, 0x9a, 0x98, 0x98, - 0x99, 0x99, 0x88, 0x10, 0x64, 0x65, 0x53, 0x34, 0x33, 0x33, 0x22, 0x00, 0xaa, 0xbc, 0xbd, 0xbb, - 0xbb, 0xab, 0x9a, 0x52, 0x46, 0x44, 0x24, 0x33, 0x12, 0x01, 0x98, 0xba, 0xcc, 0xbc, 0xbc, 0xba, - 0x9a, 0x88, 0x98, 0x88, 0x00, 0x63, 0x45, 0x35, 0x33, 0x23, 0x01, 0xb9, 0xba, 0xac, 0xbc, 0xdb, - 0xcb, 0xbb, 0xac, 0xaa, 0x89, 0x80, 0xa8, 0xaa, 0x99, 0x98, 0xcb, 0xcd, 0xbc, 0x9a, 0x98, 0x98, - 0xbb, 0xdb, 0xbb, 0x9a, 0x41, 0x56, 0x45, 0x43, 0x34, 0x33, 0x33, 0x12, 0x81, 0xb9, 0xbd, 0xad, - 0xab, 0xab, 0x9c, 0x89, 0x52, 0x45, 0x34, 0x24, 0x23, 0x12, 0x00, 0xa8, 0xaa, 0xbd, 0xcc, 0xbb, - 0xbb, 0xaa, 0x98, 0x89, 0x08, 0x53, 0x55, 0x53, 0x33, 0x33, 0x01, 0x98, 0xab, 0xbb, 0xcb, 0xcc, - 0xcb, 0xcb, 0xcb, 0xaa, 0x99, 0x88, 0x90, 0xbb, 0xac, 0xab, 0xab, 0xbc, 0xbb, 0x8a, 0x08, 0xb8, - 0xbe, 0xcc, 0xcb, 0xbb, 0x89, 0x62, 0x55, 0x34, 0x44, 0x33, 0x33, 0x13, 0x22, 0x80, 0xda, 0xbc, - 0xac, 0xba, 0xbb, 0xab, 0x28, 0x65, 0x44, 0x33, 0x24, 0x22, 0x11, 0x08, 0x89, 0xaa, 0xbc, 0xcd, - 0xbc, 0xaa, 0x9a, 0x89, 0x88, 0x31, 0x45, 0x35, 0x34, 0x24, 0x01, 0x88, 0xa9, 0x9a, 0x9a, 0xca, - 0xbc, 0xbd, 0xcb, 0xbb, 0xaa, 0x8a, 0x88, 0xca, 0xcb, 0xbb, 0x9b, 0x09, 0x88, 0xa9, 0x9a, 0xcb, - 0xcc, 0xbc, 0xbd, 0xbb, 0xab, 0x20, 0x57, 0x44, 0x34, 0x34, 0x32, 0x23, 0x22, 0x22, 0x90, 0xeb, - 0xbc, 0xbc, 0xbb, 0xba, 0x8a, 0x51, 0x45, 0x34, 0x43, 0x22, 0x22, 0x01, 0x81, 0x90, 0xa8, 0xdc, - 0xbd, 0xbc, 0xab, 0x9a, 0x88, 0x21, 0x34, 0x36, 0x25, 0x24, 0x11, 0x80, 0x99, 0xaa, 0x99, 0xaa, - 0xbc, 0xbd, 0xdb, 0xba, 0xbb, 0xaa, 0x89, 0xa9, 0xbc, 0xbd, 0xac, 0x89, 0x10, 0x21, 0x11, 0xb8, - 0xdc, 0xcb, 0xcc, 0xba, 0x9a, 0x08, 0x43, 0x46, 0x53, 0x43, 0x33, 0x33, 0x32, 0x33, 0x13, 0xc8, - 0xbe, 0xbd, 0xac, 0xaa, 0x99, 0x00, 0x44, 0x44, 0x33, 0x33, 0x33, 0x32, 0x11, 0x00, 0x88, 0xd9, - 0xdd, 0xbc, 0xac, 0xaa, 0x88, 0x10, 0x32, 0x35, 0x35, 0x34, 0x22, 0x01, 0xa8, 0xba, 0xba, 0xba, - 0xeb, 0xdb, 0xbb, 0xbb, 0xac, 0xaa, 0x9a, 0xaa, 0xcb, 0xcc, 0xcb, 0x99, 0x21, 0x43, 0x13, 0xa0, - 0xcc, 0xbc, 0xbc, 0xac, 0x9b, 0x09, 0x31, 0x54, 0x44, 0x34, 0x34, 0x23, 0x43, 0x22, 0x22, 0x91, - 0xeb, 0xcc, 0xcb, 0xaa, 0x99, 0x88, 0x21, 0x54, 0x43, 0x33, 0x24, 0x22, 0x12, 0x02, 0x01, 0x88, - 0xeb, 0xbd, 0xad, 0xbb, 0x99, 0x00, 0x22, 0x34, 0x35, 0x34, 0x33, 0x23, 0x80, 0xa9, 0xca, 0xcb, - 0xbc, 0xcc, 0xbb, 0xbb, 0xaa, 0xaa, 0xaa, 0xbb, 0xbc, 0xbc, 0xbe, 0x9a, 0x10, 0x44, 0x33, 0x81, - 0xea, 0xbc, 0xbc, 0xbb, 0x9a, 0x08, 0x20, 0x34, 0x44, 0x44, 0x44, 0x32, 0x43, 0x32, 0x23, 0x01, - 0xa8, 0xec, 0xbc, 0xbc, 0x9a, 0x8a, 0x00, 0x31, 0x44, 0x44, 0x32, 0x43, 0x32, 0x23, 0x02, 0x90, - 0xca, 0xcd, 0xcb, 0xba, 0x9a, 0x08, 0x12, 0x43, 0x43, 0x34, 0x34, 0x33, 0x22, 0x88, 0xaa, 0xcc, - 0xdb, 0xdb, 0xbb, 0xbb, 0xaa, 0x98, 0xa8, 0xca, 0xdb, 0xbc, 0xba, 0x99, 0x30, 0x44, 0x25, 0x02, - 0xa8, 0xbe, 0xac, 0xbb, 0x9a, 0x89, 0x00, 0x11, 0x32, 0x55, 0x54, 0x43, 0x43, 0x23, 0x33, 0x11, - 0x90, 0xc9, 0xcd, 0xbc, 0xba, 0x9a, 0x08, 0x10, 0x11, 0x63, 0x53, 0x34, 0x34, 0x24, 0x02, 0x80, - 0xa9, 0xbc, 0xac, 0xbb, 0x9b, 0x0a, 0x10, 0x43, 0x42, 0x43, 0x44, 0x33, 0x34, 0x11, 0x90, 0xc9, - 0xdb, 0xcc, 0xcb, 0xaa, 0x9a, 0x80, 0x80, 0xa9, 0xcc, 0xbc, 0xaa, 0x88, 0x32, 0x34, 0x33, 0x12, - 0xc8, 0xdd, 0xcb, 0xaa, 0x99, 0x88, 0x00, 0x00, 0x90, 0x10, 0x56, 0x45, 0x34, 0x24, 0x23, 0x11, - 0x00, 0xa9, 0xcb, 0xdb, 0xcb, 0xaa, 0x9a, 0x89, 0x89, 0x09, 0x73, 0x45, 0x44, 0x32, 0x22, 0x81, - 0xa8, 0xcb, 0xbb, 0xaa, 0xa9, 0x98, 0x08, 0x10, 0x33, 0x44, 0x35, 0x36, 0x43, 0x23, 0x81, 0xa8, - 0xbc, 0xcd, 0xbc, 0xac, 0x99, 0x08, 0x00, 0x99, 0xbc, 0xcd, 0x9a, 0x09, 0x11, 0x33, 0x13, 0x80, - 0xb9, 0xdc, 0xcb, 0x9a, 0x89, 0x00, 0x00, 0x99, 0xcc, 0xaa, 0x28, 0x67, 0x44, 0x43, 0x32, 0x12, - 0x00, 0x80, 0x99, 0x99, 0xca, 0xdb, 0xcb, 0xbc, 0xba, 0xab, 0x19, 0x65, 0x44, 0x24, 0x23, 0x01, - 0x98, 0xba, 0xba, 0x8a, 0x08, 0x81, 0xa8, 0xaa, 0x08, 0x54, 0x35, 0x53, 0x33, 0x43, 0x12, 0x80, - 0xca, 0xcd, 0xdb, 0xba, 0xaa, 0x88, 0x80, 0xa9, 0xcd, 0xbc, 0xbb, 0x09, 0x22, 0x34, 0x02, 0xa9, - 0xad, 0xbb, 0x99, 0x18, 0x21, 0x23, 0x11, 0xa9, 0xcc, 0xbb, 0x9c, 0x73, 0x47, 0x43, 0x33, 0x22, - 0x10, 0x00, 0x10, 0x31, 0x12, 0x01, 0xfc, 0xce, 0xbb, 0xac, 0x89, 0x30, 0x44, 0x44, 0x23, 0x12, - 0x98, 0xa9, 0x9b, 0x89, 0x11, 0x12, 0x81, 0xca, 0x9a, 0x40, 0x46, 0x34, 0x23, 0x22, 0x12, 0x81, - 0xb9, 0xfc, 0xbc, 0xbc, 0x9a, 0x89, 0x98, 0xb9, 0xce, 0xbc, 0xbb, 0x88, 0x32, 0x43, 0x81, 0xc9, - 0xdb, 0xab, 0x09, 0x31, 0x34, 0x23, 0x01, 0x01, 0x00, 0x99, 0xcb, 0x8b, 0x50, 0x56, 0x34, 0x33, - 0x12, 0x11, 0x31, 0x55, 0x43, 0x23, 0x91, 0xec, 0xcc, 0xbb, 0xab, 0x08, 0x32, 0x44, 0x23, 0x23, - 0x01, 0x98, 0x89, 0x30, 0x32, 0x22, 0x11, 0x81, 0x9a, 0x61, 0x56, 0x34, 0x33, 0x12, 0x10, 0x01, - 0x80, 0xfb, 0xbd, 0xac, 0x9b, 0x88, 0x98, 0xeb, 0xcd, 0xcb, 0xab, 0x89, 0x21, 0x33, 0x02, 0xca, - 0xcd, 0xba, 0x09, 0x20, 0x34, 0x24, 0x22, 0x22, 0x33, 0x13, 0xb0, 0xcd, 0xbb, 0x8a, 0x20, 0x43, - 0x32, 0x34, 0x44, 0x45, 0x35, 0x44, 0x11, 0xa0, 0xdb, 0xcc, 0xab, 0x9b, 0x00, 0x11, 0x01, 0x10, - 0x20, 0x21, 0x43, 0x34, 0x43, 0x12, 0x00, 0x11, 0x54, 0x33, 0x24, 0x22, 0x43, 0x32, 0x35, 0x02, - 0xb9, 0xdd, 0xac, 0x9b, 0x08, 0x12, 0x91, 0xed, 0xcc, 0xbb, 0xab, 0x8a, 0x00, 0x12, 0x02, 0xb8, - 0xcc, 0xac, 0x9b, 0x08, 0x31, 0x36, 0x46, 0x43, 0x32, 0x11, 0xa0, 0xca, 0xcb, 0x9a, 0x09, 0x00, - 0x08, 0x08, 0x20, 0x55, 0x45, 0x53, 0x32, 0x01, 0xa9, 0xcc, 0xbc, 0xba, 0xab, 0xaa, 0x99, 0x89, - 0x08, 0x32, 0x44, 0x33, 0x44, 0x33, 0x24, 0x24, 0x33, 0x35, 0x22, 0x00, 0x00, 0x52, 0x44, 0x03, - 0xc8, 0xcc, 0xcb, 0x89, 0x20, 0x33, 0x03, 0xea, 0xcd, 0xcb, 0xaa, 0x99, 0x88, 0x88, 0x80, 0x88, - 0x88, 0x99, 0xcb, 0xbc, 0x0a, 0x64, 0x55, 0x53, 0x22, 0x12, 0xa8, 0xaa, 0xbb, 0x99, 0x08, 0x80, - 0xc9, 0xcb, 0xaa, 0x20, 0x46, 0x44, 0x43, 0x12, 0x81, 0xaa, 0xcc, 0xcb, 0xcb, 0xac, 0x9b, 0x89, - 0x00, 0x00, 0x00, 0x08, 0x42, 0x54, 0x44, 0x24, 0x23, 0x11, 0x01, 0x08, 0x10, 0x42, 0x43, 0x12, - 0xb9, 0xbf, 0xad, 0x8a, 0x21, 0x43, 0x23, 0xa0, 0xdc, 0xbc, 0xac, 0x9a, 0x89, 0x98, 0x98, 0x09, - 0x00, 0xa0, 0xeb, 0xcb, 0x8a, 0x72, 0x45, 0x34, 0x33, 0x01, 0xa8, 0xbb, 0x9a, 0x88, 0x21, 0x00, - 0xfb, 0xcc, 0xab, 0x8a, 0x21, 0x53, 0x34, 0x32, 0x02, 0x98, 0xbc, 0xbd, 0xcc, 0xcb, 0xab, 0x9a, - 0x88, 0x88, 0xaa, 0xba, 0x18, 0x66, 0x44, 0x34, 0x23, 0x12, 0x08, 0x08, 0x21, 0x43, 0x34, 0x82, - 0xba, 0xcd, 0xac, 0x8a, 0x31, 0x34, 0x33, 0x91, 0xfb, 0xcb, 0xbb, 0xab, 0x89, 0x99, 0x99, 0x99, - 0x88, 0x80, 0xca, 0xcc, 0x9b, 0x72, 0x47, 0x34, 0x32, 0x81, 0xa8, 0x9a, 0x8a, 0x21, 0x32, 0x82, - 0xdd, 0xbd, 0xac, 0x99, 0x00, 0x12, 0x11, 0x11, 0x00, 0x80, 0xa8, 0xec, 0xcc, 0xbc, 0xbc, 0xaa, - 0x99, 0x98, 0xa9, 0xbb, 0x09, 0x75, 0x44, 0x43, 0x23, 0x12, 0x00, 0x10, 0x31, 0x35, 0x34, 0x81, - 0xba, 0xbe, 0xab, 0x18, 0x43, 0x24, 0x12, 0xb8, 0xdc, 0xab, 0xab, 0xba, 0xaa, 0xa9, 0x99, 0x00, - 0x80, 0x80, 0xca, 0xbf, 0x8c, 0x72, 0x36, 0x35, 0x12, 0x81, 0xaa, 0x9a, 0x08, 0x32, 0x24, 0x90, - 0xdc, 0xac, 0x9b, 0x89, 0x01, 0x80, 0xca, 0xcb, 0x9c, 0x08, 0x12, 0xc8, 0xdd, 0xbc, 0xac, 0xa9, - 0x88, 0x89, 0x98, 0x99, 0x18, 0x55, 0x44, 0x24, 0x23, 0x12, 0x22, 0x42, 0x34, 0x34, 0x12, 0x90, - 0xdb, 0xbb, 0x9c, 0x21, 0x35, 0x23, 0x81, 0xda, 0xcb, 0xab, 0x9a, 0xbb, 0xbb, 0xac, 0x08, 0x33, - 0x33, 0x24, 0x90, 0xdb, 0xab, 0x72, 0x57, 0x43, 0x12, 0x80, 0xa9, 0xa9, 0x88, 0x21, 0x32, 0x92, - 0xfb, 0xbb, 0xaa, 0x89, 0x88, 0xda, 0xbd, 0xbd, 0xaa, 0x08, 0x12, 0xb8, 0xdf, 0xbc, 0xbb, 0x9a, - 0x89, 0x98, 0x99, 0x9b, 0x28, 0x47, 0x44, 0x33, 0x32, 0x22, 0x33, 0x44, 0x34, 0x25, 0x11, 0x99, - 0xba, 0xba, 0x89, 0x43, 0x35, 0x22, 0x90, 0xdb, 0xbc, 0xab, 0xbb, 0xbd, 0xac, 0x9a, 0x20, 0x34, - 0x25, 0x22, 0x81, 0xaa, 0x9a, 0x50, 0x56, 0x34, 0x23, 0x81, 0x98, 0xba, 0x9a, 0x09, 0x21, 0x12, - 0x88, 0xba, 0xbe, 0xbd, 0xcb, 0xcc, 0xbb, 0xcb, 0x9a, 0x00, 0x01, 0xfb, 0xcd, 0xcc, 0xab, 0x8a, - 0x09, 0x88, 0x99, 0xaa, 0x19, 0x73, 0x43, 0x34, 0x33, 0x33, 0x33, 0x44, 0x34, 0x25, 0x11, 0x88, - 0xaa, 0x89, 0x18, 0x21, 0x43, 0x22, 0x80, 0xdb, 0xbd, 0xbb, 0xdc, 0xbc, 0xbc, 0x99, 0x18, 0x43, - 0x34, 0x33, 0x13, 0x98, 0x89, 0x40, 0x47, 0x35, 0x33, 0x02, 0xa0, 0xba, 0xbc, 0xab, 0x09, 0x08, - 0x10, 0x01, 0xb8, 0xdd, 0xbc, 0xbd, 0xaa, 0x89, 0x00, 0x22, 0xa1, 0xef, 0xcc, 0xcb, 0xbb, 0x99, - 0x88, 0x90, 0xa9, 0xcb, 0x9a, 0x20, 0x44, 0x35, 0x34, 0x43, 0x33, 0x42, 0x43, 0x23, 0x13, 0x81, - 0x98, 0x88, 0x00, 0x10, 0x12, 0x22, 0x12, 0x98, 0xcb, 0xdc, 0xee, 0xcc, 0xac, 0x9b, 0x89, 0x31, - 0x53, 0x43, 0x23, 0x01, 0x98, 0x20, 0x54, 0x45, 0x33, 0x12, 0x90, 0xb9, 0xbc, 0xab, 0x89, 0x00, - 0x08, 0x99, 0xeb, 0xcc, 0xbb, 0xcb, 0x8a, 0x20, 0x43, 0x43, 0x81, 0xec, 0xcc, 0xbc, 0xbb, 0x8a, - 0x09, 0x98, 0xca, 0xbc, 0x9c, 0x09, 0x21, 0x44, 0x34, 0x24, 0x33, 0x32, 0x34, 0x34, 0x22, 0x12, - 0x10, 0x10, 0x08, 0x10, 0x00, 0x01, 0x00, 0x00, 0x01, 0xd0, 0xff, 0xcd, 0xcb, 0xbb, 0x9a, 0x08, - 0x33, 0x35, 0x34, 0x22, 0x01, 0x31, 0x54, 0x35, 0x34, 0x22, 0x00, 0xa9, 0xba, 0xbb, 0xa9, 0x99, - 0xb9, 0xdd, 0xdb, 0xbc, 0xbb, 0x9a, 0x08, 0x52, 0x34, 0x43, 0x02, 0xba, 0xbf, 0xbd, 0xbb, 0x9a, - 0x88, 0x99, 0xdb, 0xbc, 0xac, 0x99, 0x08, 0x31, 0x45, 0x34, 0x32, 0x32, 0x53, 0x43, 0x22, 0x12, - 0x10, 0x11, 0x00, 0x01, 0x00, 0x00, 0x21, 0x11, 0x12, 0xa0, 0xfd, 0xde, 0xbc, 0xbd, 0xab, 0x99, - 0x10, 0x33, 0x35, 0x23, 0x21, 0x42, 0x54, 0x53, 0x33, 0x23, 0x02, 0x80, 0xa9, 0x99, 0x99, 0xba, - 0xbd, 0xbe, 0xcc, 0xbc, 0xbb, 0xab, 0x09, 0x41, 0x44, 0x34, 0x22, 0x90, 0xca, 0xbd, 0xac, 0x9a, - 0x89, 0xa9, 0xdb, 0xbd, 0xbb, 0xab, 0x99, 0x18, 0x53, 0x44, 0x32, 0x33, 0x44, 0x43, 0x23, 0x13, - 0x12, 0x12, 0x00, 0x80, 0x89, 0x89, 0x21, 0x43, 0x34, 0x03, 0xc8, 0xde, 0xcd, 0xdb, 0xbb, 0xaa, - 0x88, 0x11, 0x23, 0x33, 0x33, 0x44, 0x54, 0x53, 0x34, 0x23, 0x23, 0x11, 0x01, 0x80, 0x89, 0xba, - 0xcc, 0xbd, 0xcc, 0xbc, 0xcb, 0xab, 0x9a, 0x19, 0x43, 0x34, 0x34, 0x12, 0x88, 0xba, 0xbc, 0xab, - 0xaa, 0xeb, 0xdc, 0xbb, 0xbc, 0xbb, 0xab, 0x9b, 0x09, 0x42, 0x34, 0x35, 0x34, 0x44, 0x32, 0x33, - 0x23, 0x22, 0x02, 0x81, 0x80, 0x99, 0x08, 0x63, 0x34, 0x23, 0xa0, 0xdc, 0xcd, 0xcc, 0xbb, 0xac, - 0x9a, 0x88, 0x10, 0x21, 0x32, 0x43, 0x53, 0x54, 0x34, 0x34, 0x43, 0x22, 0x12, 0x01, 0x88, 0x99, - 0xca, 0xdb, 0xcb, 0xbc, 0xbc, 0xac, 0xbb, 0xa9, 0x00, 0x43, 0x44, 0x23, 0x12, 0x80, 0x98, 0x98, - 0xa9, 0xdc, 0xcc, 0xcb, 0xbb, 0xbc, 0xbb, 0xac, 0xaa, 0x89, 0x10, 0x63, 0x53, 0x43, 0x32, 0x23, - 0x43, 0x32, 0x22, 0x12, 0x00, 0x80, 0x00, 0x73, 0x34, 0x14, 0x01, 0xa9, 0xcc, 0xbc, 0xcd, 0xcb, - 0xaa, 0x9b, 0x99, 0x00, 0x21, 0x12, 0x33, 0x55, 0x45, 0x34, 0x34, 0x42, 0x22, 0x12, 0x00, 0x89, - 0xaa, 0xcb, 0xbc, 0xbc, 0xdb, 0xbb, 0xcb, 0xbb, 0x9b, 0x18, 0x62, 0x33, 0x24, 0x22, 0x11, 0x11, - 0x90, 0xda, 0xdc, 0xbb, 0xcb, 0xca, 0xbb, 0xcb, 0xbb, 0xab, 0x89, 0x30, 0x54, 0x34, 0x23, 0x23, - 0x43, 0x43, 0x32, 0x23, 0x11, 0x11, 0x22, 0x44, 0x36, 0x34, 0x22, 0x00, 0xa9, 0xdb, 0xcd, 0xbd, - 0xcb, 0xab, 0xaa, 0x8a, 0x10, 0x11, 0x01, 0x31, 0x47, 0x45, 0x34, 0x43, 0x23, 0x23, 0x11, 0x90, - 0xa8, 0xcb, 0xbb, 0xcc, 0xcb, 0xbb, 0xbc, 0xbc, 0xab, 0x8a, 0x10, 0x44, 0x43, 0x32, 0x32, 0x32, - 0x02, 0xb8, 0xcd, 0xcc, 0xab, 0xcb, 0xbb, 0xbc, 0xac, 0xab, 0x99, 0x08, 0x42, 0x43, 0x23, 0x22, - 0x22, 0x34, 0x34, 0x33, 0x22, 0x32, 0x53, 0x45, 0x44, 0x24, 0x23, 0x12, 0x01, 0x98, 0xdb, 0xdc, - 0xbc, 0xad, 0xbb, 0xaa, 0x89, 0x08, 0x98, 0x80, 0x42, 0x56, 0x35, 0x34, 0x43, 0x22, 0x12, 0x01, - 0x80, 0x99, 0xbb, 0xbd, 0xbd, 0xcb, 0xca, 0xaa, 0xab, 0x99, 0x08, 0x31, 0x44, 0x33, 0x34, 0x32, - 0x22, 0x81, 0xb9, 0xcd, 0xbc, 0xad, 0xac, 0xcb, 0xaa, 0xaa, 0x9a, 0x88, 0x31, 0x33, 0x23, 0x02, - 0x11, 0x44, 0x35, 0x22, 0x88, 0x89, 0x31, 0x57, 0x45, 0x34, 0x33, 0x32, 0x22, 0x11, 0x88, 0xca, - 0xcd, 0xcd, 0xcb, 0xab, 0xaa, 0xa9, 0x99, 0xa9, 0x08, 0x73, 0x45, 0x34, 0x24, 0x33, 0x22, 0x21, - 0x11, 0x00, 0x98, 0xcc, 0xcc, 0xbc, 0xbb, 0xab, 0xaa, 0x99, 0x99, 0x00, 0x43, 0x44, 0x43, 0x23, - 0x23, 0x11, 0x80, 0xbb, 0xcc, 0xbd, 0xbd, 0xbc, 0xac, 0xaa, 0x89, 0x08, 0x00, 0x21, 0x11, 0x12, - 0x31, 0x42, 0x12, 0x90, 0xbc, 0xbd, 0x09, 0x54, 0x46, 0x44, 0x33, 0x24, 0x23, 0x22, 0x01, 0x98, - 0xba, 0xdd, 0xdb, 0xbc, 0xbb, 0xac, 0xab, 0x9a, 0x8a, 0x31, 0x56, 0x34, 0x34, 0x24, 0x23, 0x32, - 0x21, 0x12, 0x81, 0xb9, 0xce, 0xbc, 0xbc, 0xbb, 0xaa, 0x89, 0x89, 0x08, 0x21, 0x53, 0x34, 0x43, - 0x32, 0x12, 0x02, 0xa8, 0xca, 0xcc, 0xbd, 0xbd, 0xcb, 0xaa, 0x9a, 0x08, 0x00, 0x11, 0x00, 0x21, - 0x42, 0x33, 0x13, 0xda, 0xbe, 0xba, 0x99, 0x20, 0x55, 0x44, 0x43, 0x34, 0x33, 0x43, 0x22, 0x81, - 0x98, 0xca, 0xbc, 0xcd, 0xcb, 0xbb, 0xcb, 0xbb, 0x9a, 0x08, 0x53, 0x45, 0x43, 0x43, 0x23, 0x33, - 0x23, 0x23, 0x12, 0xa8, 0xbd, 0xbe, 0xcb, 0xbb, 0xbb, 0xba, 0x9a, 0x99, 0x11, 0x53, 0x34, 0x34, - 0x24, 0x21, 0x11, 0x80, 0x99, 0xda, 0xcc, 0xbd, 0xbc, 0xbb, 0x9a, 0x89, 0x08, 0x80, 0x00, 0x20, - 0x43, 0x25, 0x12, 0xca, 0xbd, 0xac, 0x88, 0x10, 0x11, 0x44, 0x54, 0x53, 0x43, 0x43, 0x22, 0x12, - 0x80, 0x99, 0xaa, 0xcc, 0xdb, 0xbc, 0xbc, 0xbc, 0xaa, 0x89, 0x30, 0x63, 0x34, 0x34, 0x24, 0x43, - 0x22, 0x23, 0x11, 0x88, 0xca, 0xcb, 0xcb, 0xbb, 0xcb, 0xcb, 0xaa, 0x9b, 0x08, 0x22, 0x34, 0x34, - 0x24, 0x23, 0x22, 0x11, 0x90, 0xdb, 0xdc, 0xcc, 0xbb, 0xbb, 0xaa, 0xa9, 0xa8, 0x99, 0x89, 0x31, - 0x54, 0x24, 0x02, 0xd9, 0xcc, 0xab, 0x0a, 0x10, 0x01, 0x11, 0x53, 0x46, 0x44, 0x34, 0x23, 0x13, - 0x01, 0x90, 0x88, 0x99, 0xcc, 0xcd, 0xcc, 0xba, 0xab, 0x99, 0x18, 0x32, 0x44, 0x35, 0x53, 0x33, - 0x34, 0x23, 0x12, 0x80, 0xaa, 0xbc, 0xbb, 0xbc, 0xdb, 0xcb, 0xac, 0xab, 0x89, 0x20, 0x42, 0x32, - 0x33, 0x34, 0x34, 0x33, 0x81, 0xda, 0xdc, 0xcb, 0xab, 0xbb, 0x9a, 0x9a, 0xba, 0xbb, 0xab, 0x19, - 0x54, 0x34, 0x12, 0xb9, 0xcf, 0xbb, 0x9a, 0x10, 0x12, 0x10, 0x20, 0x64, 0x46, 0x34, 0x24, 0x13, - 0x11, 0x80, 0x01, 0x01, 0xb8, 0xdd, 0xcd, 0xbb, 0xaa, 0x8a, 0x88, 0x21, 0x32, 0x35, 0x45, 0x34, - 0x34, 0x24, 0x22, 0x80, 0x99, 0xba, 0xbb, 0xab, 0xbc, 0xcc, 0xbc, 0xbb, 0xaa, 0x18, 0x21, 0x23, - 0x32, 0x54, 0x44, 0x34, 0x02, 0xa8, 0xcd, 0xcb, 0xaa, 0xaa, 0x99, 0xa9, 0xaa, 0xbc, 0xaa, 0x19, - 0x42, 0x43, 0x02, 0xc8, 0xdc, 0xbb, 0xbb, 0x88, 0x00, 0x88, 0x08, 0x72, 0x56, 0x34, 0x34, 0x32, - 0x12, 0x12, 0x22, 0x21, 0x90, 0xdd, 0xcd, 0xcb, 0xaa, 0x89, 0x08, 0x10, 0x01, 0x31, 0x45, 0x35, - 0x35, 0x33, 0x23, 0x11, 0x98, 0xa9, 0xbb, 0xdb, 0xcb, 0xcb, 0xcb, 0xbb, 0xaa, 0x99, 0x00, 0x11, - 0x10, 0x62, 0x54, 0x44, 0x12, 0x91, 0xcb, 0xbc, 0xba, 0x9a, 0x9a, 0xba, 0xdb, 0xaa, 0x99, 0x08, - 0x32, 0x23, 0xa1, 0xdb, 0xcc, 0xbb, 0xbc, 0xaa, 0xba, 0xcc, 0x89, 0x41, 0x56, 0x53, 0x43, 0x32, - 0x33, 0x32, 0x33, 0x24, 0x01, 0xca, 0xce, 0xbc, 0xbb, 0xa9, 0x88, 0x80, 0x00, 0x20, 0x55, 0x44, - 0x43, 0x24, 0x22, 0x12, 0x01, 0x88, 0x98, 0xcb, 0xdb, 0xcb, 0xca, 0xaa, 0xaa, 0x99, 0x8a, 0x89, - 0x00, 0x32, 0x37, 0x45, 0x23, 0x02, 0xa9, 0xcd, 0xba, 0xba, 0xaa, 0xbb, 0xbc, 0xbb, 0x89, 0x21, - 0x32, 0x13, 0xd9, 0xbe, 0xab, 0x9a, 0x99, 0xcb, 0xcc, 0xbc, 0x9a, 0x20, 0x73, 0x53, 0x34, 0x34, - 0x24, 0x43, 0x32, 0x32, 0x02, 0xa0, 0xdc, 0xdb, 0xba, 0xab, 0xaa, 0x9a, 0x8a, 0x28, 0x64, 0x44, - 0x34, 0x43, 0x22, 0x22, 0x12, 0x12, 0x00, 0xa9, 0xbd, 0xbd, 0xbc, 0xbb, 0xbb, 0xbb, 0xbc, 0xaa, - 0x89, 0x31, 0x45, 0x34, 0x25, 0x23, 0x80, 0xb9, 0xdb, 0xbb, 0xbc, 0xcc, 0xbb, 0xab, 0x88, 0x11, - 0x23, 0x80, 0xeb, 0xbc, 0xac, 0x09, 0x11, 0x80, 0xda, 0xbc, 0xcb, 0x99, 0x21, 0x63, 0x53, 0x53, - 0x43, 0x53, 0x23, 0x33, 0x12, 0x00, 0xa8, 0xca, 0xcc, 0xcb, 0xcb, 0xab, 0xab, 0x89, 0x31, 0x47, - 0x43, 0x33, 0x33, 0x32, 0x43, 0x33, 0x24, 0x01, 0xa8, 0xcc, 0xcc, 0xbb, 0xbb, 0xcb, 0xdb, 0xab, - 0x9b, 0x09, 0x42, 0x33, 0x34, 0x33, 0x14, 0x12, 0x80, 0xb9, 0xed, 0xdb, 0xcb, 0xaa, 0x88, 0x00, - 0x11, 0x81, 0xba, 0xcd, 0xaa, 0x89, 0x21, 0x01, 0x98, 0xcc, 0xbc, 0xab, 0x89, 0x21, 0x44, 0x44, - 0x54, 0x44, 0x43, 0x23, 0x21, 0x10, 0x10, 0x00, 0xa8, 0xfb, 0xdb, 0xcb, 0xab, 0x9a, 0x10, 0x43, - 0x44, 0x33, 0x32, 0x33, 0x44, 0x43, 0x43, 0x12, 0x01, 0x99, 0xdb, 0xcb, 0xcb, 0xbb, 0xcc, 0xbb, - 0xbb, 0x9a, 0x00, 0x21, 0x43, 0x34, 0x34, 0x34, 0x23, 0x82, 0xda, 0xbd, 0xad, 0x9b, 0x8a, 0x88, - 0x80, 0x98, 0xca, 0xcb, 0xab, 0x8a, 0x10, 0x11, 0x01, 0xb9, 0xbc, 0xcc, 0xaa, 0x8a, 0x31, 0x43, - 0x57, 0x54, 0x34, 0x24, 0x23, 0x12, 0x32, 0x32, 0x12, 0xc9, 0xdd, 0xbc, 0xac, 0x9b, 0x08, 0x21, - 0x32, 0x23, 0x32, 0x45, 0x45, 0x53, 0x33, 0x22, 0x02, 0x80, 0xa9, 0xcb, 0xcc, 0xcb, 0xcb, 0xcb, - 0xbb, 0xba, 0xa9, 0x98, 0x10, 0x42, 0x45, 0x43, 0x33, 0x13, 0x98, 0xca, 0xbc, 0xbb, 0xba, 0xaa, - 0xcb, 0xab, 0xcb, 0xbb, 0xac, 0xab, 0x88, 0x11, 0x22, 0x01, 0xd9, 0xbc, 0xbb, 0x08, 0x63, 0x24, - 0x33, 0x55, 0x63, 0x53, 0x33, 0x34, 0x33, 0x43, 0x12, 0x98, 0xda, 0xcc, 0xcb, 0xaa, 0x89, 0x00, - 0x00, 0x90, 0x88, 0x51, 0x46, 0x44, 0x43, 0x23, 0x22, 0x01, 0x90, 0x98, 0xcb, 0xcc, 0xbc, 0xcb, - 0xbb, 0xac, 0xbb, 0xab, 0x99, 0x10, 0x44, 0x44, 0x43, 0x22, 0x01, 0x80, 0x99, 0x9a, 0xaa, 0xbc, - 0xbd, 0xbc, 0xac, 0xba, 0xaa, 0xaa, 0x9a, 0x88, 0x20, 0x23, 0x01, 0xca, 0xab, 0x30, 0x57, 0x34, - 0x22, 0x00, 0x21, 0x64, 0x45, 0x53, 0x33, 0x24, 0x22, 0x81, 0xa8, 0xdb, 0xdb, 0xaa, 0x9a, 0x89, - 0x88, 0xa9, 0xbb, 0x9b, 0x73, 0x47, 0x34, 0x34, 0x32, 0x21, 0x01, 0x90, 0xa9, 0xbc, 0xbd, 0xbc, - 0xbc, 0xcb, 0xbb, 0xcc, 0x9a, 0x89, 0x20, 0x52, 0x33, 0x34, 0x22, 0x12, 0x12, 0x01, 0x80, 0xdb, - 0xbd, 0xcc, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0x99, 0x10, 0x53, 0x12, 0x81, 0xaa, 0x29, 0x66, 0x34, - 0x33, 0x81, 0x98, 0x19, 0x73, 0x54, 0x34, 0x24, 0x22, 0x12, 0x00, 0xa9, 0xbc, 0xbc, 0xba, 0xaa, - 0x9a, 0xaa, 0xec, 0xbb, 0x8a, 0x73, 0x45, 0x34, 0x43, 0x22, 0x12, 0x00, 0xa8, 0xb9, 0xdb, 0xbb, - 0xbd, 0xcb, 0xbc, 0xbc, 0xbc, 0x9a, 0x89, 0x21, 0x53, 0x33, 0x34, 0x33, 0x24, 0x23, 0x02, 0xa0, - 0xdb, 0xcc, 0xbc, 0xbb, 0xac, 0xbb, 0xbb, 0x99, 0x18, 0x32, 0x33, 0x12, 0x80, 0x20, 0x66, 0x44, - 0x23, 0x12, 0x98, 0x9a, 0x09, 0x62, 0x45, 0x43, 0x24, 0x22, 0x12, 0x00, 0xaa, 0xca, 0xab, 0xbb, - 0xab, 0xbb, 0xdd, 0xcc, 0xbb, 0x0a, 0x63, 0x45, 0x24, 0x24, 0x22, 0x11, 0x88, 0x99, 0xa9, 0xaa, - 0xdb, 0xcc, 0xcb, 0xcc, 0xbb, 0xac, 0x8a, 0x88, 0x21, 0x33, 0x44, 0x34, 0x24, 0x33, 0x22, 0x01, - 0xa8, 0xdb, 0xbc, 0xbd, 0xbb, 0xdb, 0xba, 0x9a, 0x88, 0x11, 0x22, 0x11, 0x00, 0x31, 0x55, 0x35, - 0x34, 0x12, 0x90, 0xa9, 0xaa, 0x88, 0x42, 0x55, 0x53, 0x32, 0x33, 0x21, 0x88, 0xa9, 0xba, 0xba, - 0xac, 0xab, 0xfb, 0xdc, 0xdb, 0xaa, 0x08, 0x53, 0x44, 0x43, 0x33, 0x22, 0x10, 0x98, 0x88, 0x99, - 0xa9, 0xcd, 0xdc, 0xcb, 0xbc, 0xbc, 0x9a, 0x8a, 0x00, 0x11, 0x43, 0x44, 0x43, 0x33, 0x33, 0x13, - 0x01, 0xa9, 0xcc, 0xbd, 0xbc, 0xcb, 0xbb, 0xab, 0x8a, 0x10, 0x11, 0x01, 0x01, 0x31, 0x46, 0x45, - 0x33, 0x23, 0x81, 0xa9, 0xbb, 0xaa, 0x08, 0x63, 0x45, 0x43, 0x33, 0x23, 0x11, 0x90, 0x99, 0x99, - 0x9a, 0x99, 0xdb, 0xcf, 0xbd, 0xad, 0x9a, 0x10, 0x53, 0x34, 0x34, 0x33, 0x22, 0x01, 0x00, 0x10, - 0x80, 0xc9, 0xbf, 0xbe, 0xbc, 0xbc, 0xab, 0x9b, 0x8a, 0x08, 0x21, 0x45, 0x53, 0x24, 0x23, 0x23, - 0x21, 0x80, 0xb9, 0xbd, 0xbd, 0xdb, 0xbb, 0xbb, 0x9b, 0x88, 0x00, 0x01, 0x10, 0x41, 0x45, 0x44, - 0x43, 0x12, 0x81, 0x98, 0xaa, 0xaa, 0x99, 0x20, 0x73, 0x43, 0x34, 0x34, 0x22, 0x01, 0x00, 0x08, - 0x88, 0x80, 0xa8, 0xdf, 0xdc, 0xcb, 0xab, 0x89, 0x31, 0x63, 0x43, 0x33, 0x23, 0x12, 0x12, 0x22, - 0x22, 0xa1, 0xed, 0xcc, 0xbc, 0xbc, 0xcb, 0xaa, 0x9b, 0x89, 0x18, 0x42, 0x44, 0x34, 0x24, 0x32, - 0x22, 0x01, 0x88, 0xca, 0xbc, 0xcc, 0xcb, 0xbb, 0xab, 0x99, 0x09, 0x08, 0x00, 0x42, 0x44, 0x35, - 0x34, 0x22, 0x81, 0x98, 0xba, 0xab, 0x9a, 0x18, 0x53, 0x45, 0x53, 0x43, 0x32, 0x12, 0x02, 0x01, - 0x10, 0x10, 0x80, 0xfc, 0xcd, 0xbc, 0xbb, 0xaa, 0x08, 0x42, 0x34, 0x44, 0x22, 0x23, 0x32, 0x33, - 0x33, 0x82, 0xd9, 0xbe, 0xcd, 0xcb, 0xbb, 0xac, 0xbb, 0xaa, 0x09, 0x30, 0x54, 0x43, 0x24, 0x33, - 0x23, 0x12, 0x81, 0xa9, 0xda, 0xdb, 0xbc, 0xbc, 0xba, 0xba, 0x99, 0x99, 0x08, 0x42, 0x44, 0x44, - 0x43, 0x12, 0x81, 0x98, 0xaa, 0xaa, 0x99, 0x10, 0x42, 0x34, 0x45, 0x34, 0x33, 0x24, 0x22, 0x21, - 0x21, 0x11, 0x01, 0xfa, 0xdd, 0xbc, 0xcb, 0x9a, 0x89, 0x10, 0x42, 0x43, 0x33, 0x43, 0x33, 0x34, - 0x24, 0x11, 0x98, 0xdb, 0xcc, 0xbc, 0xbc, 0xbc, 0xbb, 0xac, 0x9a, 0x18, 0x32, 0x45, 0x43, 0x33, - 0x33, 0x22, 0x12, 0x80, 0xa8, 0xdc, 0xcc, 0xbb, 0xac, 0xbb, 0xaa, 0xaa, 0x8a, 0x30, 0x54, 0x35, - 0x34, 0x22, 0x01, 0x98, 0xaa, 0x9a, 0x8a, 0x10, 0x31, 0x53, 0x54, 0x34, 0x34, 0x43, 0x32, 0x23, - 0x32, 0x33, 0x22, 0xb0, 0xff, 0xbc, 0xcb, 0xba, 0x99, 0x09, 0x20, 0x42, 0x33, 0x34, 0x44, 0x43, - 0x33, 0x22, 0x80, 0xa8, 0xcc, 0xbd, 0xbd, 0xbc, 0xbc, 0xac, 0xaa, 0x89, 0x11, 0x42, 0x43, 0x24, - 0x33, 0x24, 0x22, 0x12, 0x81, 0xb9, 0xce, 0xcb, 0xbb, 0xbb, 0xbb, 0xbb, 0xab, 0x18, 0x73, 0x34, - 0x25, 0x23, 0x01, 0x80, 0x98, 0x89, 0x99, 0x88, 0x88, 0x21, 0x65, 0x44, 0x43, 0x33, 0x33, 0x43, - 0x32, 0x34, 0x43, 0x02, 0xea, 0xcc, 0xbc, 0xab, 0xaa, 0x9a, 0x88, 0x10, 0x33, 0x53, 0x35, 0x44, - 0x23, 0x23, 0x11, 0x00, 0x98, 0xdc, 0xcc, 0xbd, 0xbc, 0xbb, 0xab, 0x9a, 0x08, 0x20, 0x42, 0x34, - 0x35, 0x34, 0x33, 0x24, 0x01, 0xa8, 0xdb, 0xbc, 0xbb, 0xac, 0xbb, 0xba, 0xab, 0x89, 0x31, 0x45, - 0x44, 0x32, 0x22, 0x11, 0x00, 0x88, 0xa9, 0xca, 0xaa, 0x19, 0x65, 0x44, 0x24, 0x23, 0x23, 0x22, - 0x34, 0x34, 0x35, 0x13, 0xa0, 0xdd, 0xcb, 0xbb, 0xab, 0xaa, 0xa9, 0x88, 0x10, 0x42, 0x35, 0x44, - 0x33, 0x32, 0x33, 0x33, 0x13, 0xd9, 0xdd, 0xbd, 0xbc, 0xac, 0x9b, 0x9a, 0x99, 0x98, 0x00, 0x31, - 0x36, 0x45, 0x33, 0x33, 0x13, 0x98, 0xca, 0xbc, 0xbc, 0xab, 0xbb, 0xbb, 0xcb, 0x9a, 0x09, 0x31, - 0x35, 0x45, 0x33, 0x33, 0x23, 0x82, 0xa9, 0xbd, 0xbc, 0x19, 0x72, 0x53, 0x33, 0x32, 0x22, 0x22, - 0x44, 0x44, 0x34, 0x33, 0x81, 0xcb, 0xcd, 0xba, 0xbb, 0xaa, 0xaa, 0xaa, 0x89, 0x28, 0x53, 0x34, - 0x34, 0x43, 0x34, 0x24, 0x22, 0x80, 0xeb, 0xdc, 0xbb, 0xbc, 0xaa, 0xab, 0xaa, 0xbb, 0xaa, 0x19, - 0x54, 0x45, 0x34, 0x33, 0x12, 0x81, 0xaa, 0xca, 0xbb, 0xac, 0xab, 0xbb, 0xcc, 0xba, 0x9a, 0x8a, - 0x20, 0x54, 0x44, 0x24, 0x23, 0x02, 0x90, 0xba, 0xac, 0x0a, 0x42, 0x36, 0x43, 0x22, 0x22, 0x21, - 0x44, 0x35, 0x35, 0x23, 0x02, 0xb8, 0xeb, 0xbb, 0xbc, 0xba, 0xba, 0xbb, 0xbb, 0x89, 0x21, 0x34, - 0x44, 0x43, 0x44, 0x43, 0x23, 0x02, 0xa8, 0xcd, 0xcc, 0xcb, 0xba, 0xbb, 0xbb, 0xbd, 0xba, 0x89, - 0x31, 0x37, 0x35, 0x23, 0x13, 0x01, 0x98, 0xa8, 0x99, 0xbb, 0xcc, 0xdb, 0xbb, 0xbc, 0xba, 0x9a, - 0x89, 0x41, 0x54, 0x34, 0x43, 0x12, 0x81, 0x99, 0xaa, 0x88, 0x32, 0x45, 0x24, 0x23, 0x22, 0x33, - 0x55, 0x44, 0x43, 0x23, 0x02, 0x80, 0xaa, 0xbc, 0xbc, 0xcb, 0xcb, 0xbb, 0xac, 0x9a, 0x09, 0x10, - 0x10, 0x22, 0x45, 0x35, 0x35, 0x32, 0x01, 0xc9, 0xeb, 0xbb, 0xbc, 0xcb, 0xdb, 0xbb, 0xcb, 0x99, - 0x18, 0x43, 0x44, 0x32, 0x32, 0x12, 0x12, 0x02, 0x81, 0xb8, 0xdc, 0xcb, 0xac, 0xbb, 0xba, 0xbb, - 0xbb, 0x8b, 0x42, 0x47, 0x43, 0x23, 0x02, 0x80, 0x98, 0x08, 0x21, 0x33, 0x35, 0x43, 0x43, 0x43, - 0x35, 0x45, 0x33, 0x33, 0x12, 0x10, 0x08, 0xa9, 0xdc, 0xdb, 0xcb, 0xbb, 0xac, 0x9b, 0x9a, 0x98, - 0x99, 0x99, 0x42, 0x46, 0x35, 0x33, 0x22, 0x90, 0xcb, 0xdb, 0xbb, 0xbd, 0xcc, 0xbc, 0xbb, 0xaa, - 0x89, 0x20, 0x53, 0x43, 0x43, 0x33, 0x33, 0x23, 0x12, 0x90, 0xcb, 0xbc, 0xbc, 0xbb, 0xdb, 0xdb, - 0xbb, 0xbb, 0x89, 0x43, 0x36, 0x24, 0x13, 0x11, 0x08, 0x08, 0x20, 0x31, 0x34, 0x34, 0x53, 0x33, - 0x45, 0x43, 0x34, 0x32, 0x32, 0x32, 0x22, 0x81, 0xda, 0xdc, 0xcb, 0xbb, 0xac, 0xab, 0xbb, 0xca, - 0xcb, 0xba, 0x19, 0x63, 0x45, 0x23, 0x23, 0x00, 0x88, 0xa9, 0xcb, 0xbd, 0xcd, 0xcb, 0xcb, 0xba, - 0xaa, 0x89, 0x18, 0x42, 0x34, 0x35, 0x43, 0x22, 0x02, 0x81, 0x80, 0x89, 0xa9, 0xba, 0xdc, 0xdc, - 0xcb, 0xab, 0x9b, 0x08, 0x43, 0x34, 0x23, 0x13, 0x11, 0x11, 0x21, 0x44, 0x43, 0x43, 0x33, 0x24, - 0x33, 0x34, 0x34, 0x35, 0x43, 0x42, 0x22, 0x01, 0xa8, 0xdb, 0xbb, 0xac, 0xac, 0xcb, 0xbc, 0xbc, - 0xbc, 0xbb, 0x9a, 0x20, 0x46, 0x43, 0x32, 0x11, 0x00, 0x10, 0x98, 0xcb, 0xbd, 0xbe, 0xbc, 0xbc, - 0xcb, 0xab, 0x8a, 0x18, 0x52, 0x43, 0x34, 0x23, 0x22, 0x21, 0x11, 0x21, 0x12, 0x80, 0xeb, 0xcd, - 0xcc, 0xbb, 0xbb, 0x8a, 0x10, 0x42, 0x33, 0x33, 0x23, 0x22, 0x43, 0x44, 0x43, 0x34, 0x43, 0x23, - 0x13, 0x22, 0x31, 0x63, 0x53, 0x33, 0x24, 0x12, 0x98, 0xaa, 0xbb, 0xba, 0xcb, 0xec, 0xcc, 0xcc, - 0xbb, 0xbb, 0x9c, 0x89, 0x20, 0x44, 0x33, 0x23, 0x33, 0x32, 0x13, 0x90, 0xcc, 0xcd, 0xeb, 0xcb, - 0xdb, 0xba, 0xab, 0x89, 0x10, 0x43, 0x44, 0x32, 0x32, 0x22, 0x33, 0x43, 0x33, 0x13, 0xa8, 0xdd, - 0xcc, 0xbc, 0xbb, 0xab, 0x8a, 0x18, 0x32, 0x33, 0x34, 0x33, 0x43, 0x34, 0x36, 0x34, 0x43, 0x22, - 0x22, 0x01, 0x10, 0x10, 0x43, 0x35, 0x43, 0x12, 0x00, 0x99, 0x08, 0x11, 0x81, 0xfb, 0xde, 0xdb, - 0xcb, 0xbb, 0xbb, 0x9b, 0x0a, 0x31, 0x34, 0x35, 0x43, 0x33, 0x33, 0x12, 0x88, 0xca, 0xcc, 0xcd, - 0xbc, 0xbd, 0xbb, 0xab, 0x89, 0x20, 0x34, 0x34, 0x33, 0x43, 0x34, 0x34, 0x43, 0x22, 0x81, 0xb8, - 0xdc, 0xbc, 0xcc, 0xaa, 0xaa, 0x89, 0x08, 0x21, 0x21, 0x33, 0x43, 0x34, 0x45, 0x43, 0x24, 0x32, - 0x21, 0x10, 0x08, 0x00, 0x20, 0x32, 0x34, 0x23, 0x01, 0x88, 0x31, 0x55, 0x23, 0x91, 0xfb, 0xbf, - 0xcc, 0xcb, 0xbb, 0xab, 0xaa, 0x08, 0x21, 0x53, 0x53, 0x42, 0x22, 0x23, 0x12, 0x80, 0x99, 0xdc, - 0xcd, 0xdb, 0xcb, 0xaa, 0x9a, 0x09, 0x20, 0x22, 0x43, 0x43, 0x34, 0x34, 0x25, 0x23, 0x11, 0x80, - 0xba, 0xcd, 0xbc, 0xbc, 0xbb, 0xaa, 0x99, 0x00, 0x20, 0x22, 0x34, 0x44, 0x44, 0x53, 0x32, 0x33, - 0x23, 0x11, 0x10, 0x80, 0x01, 0x10, 0x10, 0x12, 0x21, 0x10, 0x63, 0x45, 0x24, 0x13, 0xa0, 0xce, - 0xcd, 0xbc, 0xcb, 0xab, 0xab, 0x8a, 0x09, 0x21, 0x43, 0x44, 0x43, 0x33, 0x14, 0x12, 0x80, 0xb9, - 0xcc, 0xcd, 0xbc, 0xbc, 0xab, 0x9a, 0x09, 0x10, 0x31, 0x53, 0x44, 0x43, 0x34, 0x33, 0x23, 0x02, - 0x98, 0xcc, 0xcc, 0xcb, 0xbb, 0xab, 0xab, 0xa9, 0x88, 0x11, 0x52, 0x53, 0x53, 0x43, 0x43, 0x32, - 0x33, 0x22, 0x12, 0x00, 0x01, 0x88, 0x99, 0x99, 0x99, 0x80, 0x32, 0x67, 0x43, 0x33, 0x02, 0xc9, - 0xdd, 0xbc, 0xbc, 0xac, 0xbb, 0xba, 0x99, 0x89, 0x10, 0x43, 0x45, 0x34, 0x33, 0x23, 0x02, 0x80, - 0xba, 0xdd, 0xcc, 0xcb, 0xcb, 0xaa, 0xaa, 0x99, 0x80, 0x31, 0x63, 0x44, 0x24, 0x24, 0x22, 0x12, - 0x01, 0xa9, 0xcc, 0xcb, 0xcb, 0xbb, 0xbb, 0xba, 0x9b, 0x89, 0x21, 0x54, 0x34, 0x35, 0x43, 0x33, - 0x34, 0x33, 0x23, 0x11, 0x01, 0x90, 0x99, 0xbb, 0xab, 0x9a, 0x08, 0x54, 0x46, 0x43, 0x22, 0x90, - 0xeb, 0xdb, 0xcb, 0xbb, 0xac, 0xbb, 0xcb, 0xaa, 0x89, 0x18, 0x44, 0x44, 0x33, 0x24, 0x12, 0x00, - 0x90, 0xa9, 0xeb, 0xdb, 0xbc, 0xbc, 0xbb, 0xba, 0xaa, 0x08, 0x31, 0x56, 0x53, 0x33, 0x33, 0x33, - 0x12, 0x90, 0xca, 0xcc, 0xcb, 0xcb, 0xbb, 0xbb, 0xbc, 0x9a, 0x08, 0x31, 0x35, 0x35, 0x34, 0x43, - 0x43, 0x24, 0x33, 0x22, 0x12, 0x80, 0xa8, 0xaa, 0xbb, 0xaa, 0x8a, 0x20, 0x46, 0x35, 0x24, 0x01, - 0xc9, 0xdb, 0xbc, 0xbb, 0xbc, 0xcb, 0xdb, 0xbb, 0xba, 0x8a, 0x30, 0x45, 0x53, 0x32, 0x32, 0x11, - 0x01, 0x80, 0xa8, 0xda, 0xdc, 0xdb, 0xcb, 0xbb, 0xbb, 0xaa, 0x08, 0x42, 0x45, 0x43, 0x24, 0x23, - 0x22, 0x01, 0x80, 0xb9, 0xbd, 0xcc, 0xcb, 0xbb, 0xac, 0xab, 0x99, 0x00, 0x32, 0x44, 0x34, 0x53, - 0x33, 0x35, 0x34, 0x24, 0x12, 0x01, 0x90, 0xa9, 0xaa, 0x9a, 0x8a, 0x09, 0x31, 0x54, 0x43, 0x13, - 0x90, 0xeb, 0xbc, 0xcb, 0xbb, 0xcb, 0xcc, 0xdb, 0xbb, 0xba, 0x09, 0x31, 0x54, 0x33, 0x23, 0x33, - 0x32, 0x22, 0x02, 0xa0, 0xdc, 0xcd, 0xcc, 0xbc, 0xba, 0xbb, 0x99, 0x18, 0x43, 0x54, 0x33, 0x34, - 0x23, 0x13, 0x12, 0x80, 0xb9, 0xcd, 0xbd, 0xbc, 0xcb, 0xab, 0x9a, 0x88, 0x18, 0x21, 0x34, 0x35, - 0x44, 0x34, 0x35, 0x24, 0x23, 0x22, 0x00, 0x99, 0xa9, 0xaa, 0x9a, 0x99, 0x10, 0x41, 0x33, 0x33, - 0x81, 0xeb, 0xcd, 0xbb, 0xac, 0xba, 0xdc, 0xbc, 0xbd, 0xbc, 0x9a, 0x08, 0x31, 0x43, 0x23, 0x33, - 0x43, 0x44, 0x22, 0x12, 0x98, 0xdb, 0xcd, 0xcb, 0xbc, 0xba, 0xba, 0x99, 0x00, 0x43, 0x35, 0x34, - 0x24, 0x23, 0x22, 0x12, 0x00, 0xb9, 0xdd, 0xbc, 0xad, 0xab, 0x9b, 0x8a, 0x89, 0x00, 0x00, 0x42, - 0x54, 0x44, 0x44, 0x33, 0x34, 0x23, 0x12, 0x80, 0x99, 0x99, 0x99, 0x89, 0x08, 0x00, 0x80, 0x01, - 0x88, 0xb9, 0xde, 0xbc, 0xac, 0xab, 0xcb, 0xec, 0xdb, 0xcb, 0xaa, 0x9a, 0x00, 0x21, 0x22, 0x21, - 0x53, 0x44, 0x34, 0x33, 0x01, 0xb8, 0xcc, 0xbd, 0xdb, 0xba, 0xbb, 0xbb, 0x99, 0x18, 0x43, 0x35, - 0x44, 0x32, 0x33, 0x23, 0x22, 0x82, 0xc9, 0xce, 0xdb, 0xab, 0xab, 0x9a, 0x99, 0x98, 0x99, 0x8a, - 0x41, 0x56, 0x44, 0x34, 0x34, 0x33, 0x32, 0x11, 0x00, 0x98, 0x89, 0x88, 0x08, 0x01, 0x88, 0xba, - 0xac, 0xcb, 0xba, 0xbd, 0xbd, 0xbb, 0xba, 0xfb, 0xcc, 0xdb, 0xbb, 0xbb, 0x99, 0x08, 0x88, 0x80, - 0x31, 0x57, 0x34, 0x34, 0x22, 0x80, 0xb9, 0xcc, 0xbb, 0xad, 0xcb, 0xbb, 0xba, 0x9a, 0x18, 0x41, - 0x53, 0x43, 0x43, 0x32, 0x33, 0x22, 0x82, 0xea, 0xcc, 0xcb, 0xba, 0xaa, 0x99, 0x98, 0x99, 0xcb, - 0x9b, 0x41, 0x47, 0x44, 0x43, 0x43, 0x32, 0x12, 0x12, 0x00, 0x08, 0x08, 0x20, 0x21, 0x02, 0xa9, - 0xdc, 0xbb, 0xbb, 0xac, 0xcb, 0xbb, 0xbb, 0xdb, 0xcc, 0xbc, 0xad, 0xab, 0xaa, 0x99, 0x99, 0xba, - 0x9b, 0x51, 0x47, 0x34, 0x24, 0x12, 0x98, 0xab, 0xbc, 0xbb, 0xbc, 0xbc, 0xcb, 0xbb, 0xab, 0x88, - 0x32, 0x44, 0x53, 0x33, 0x24, 0x23, 0x12, 0x90, 0xdb, 0xbd, 0xbc, 0xab, 0x99, 0x89, 0x90, 0xeb, - 0xac, 0x0a, 0x42, 0x46, 0x53, 0x43, 0x32, 0x32, 0x22, 0x22, 0x22, 0x11, 0x31, 0x43, 0x24, 0x01, - 0xb9, 0xcd, 0xbb, 0xac, 0xab, 0xbb, 0xab, 0xdb, 0xcc, 0xbb, 0xbd, 0xaa, 0xaa, 0x89, 0xa9, 0xdb, - 0xbb, 0x8a, 0x62, 0x55, 0x43, 0x23, 0x81, 0xa9, 0xab, 0xcb, 0xba, 0xcb, 0xbc, 0xac, 0xcb, 0xba, - 0x89, 0x10, 0x33, 0x36, 0x24, 0x23, 0x22, 0x00, 0x99, 0xcb, 0xdc, 0xac, 0x9a, 0x89, 0x88, 0xb9, - 0xbe, 0x9b, 0x31, 0x55, 0x54, 0x33, 0x34, 0x23, 0x33, 0x33, 0x25, 0x43, 0x22, 0x32, 0x23, 0x23, - 0x00, 0xc9, 0xdc, 0xcb, 0xab, 0xbb, 0xab, 0xba, 0xce, 0xcb, 0xbb, 0xac, 0x88, 0x08, 0x88, 0xb9, - 0xcc, 0xab, 0x19, 0x64, 0x35, 0x33, 0x12, 0xa9, 0xbb, 0xac, 0x9a, 0xaa, 0xcc, 0xbc, 0xbc, 0xbb, - 0x9c, 0x09, 0x10, 0x33, 0x35, 0x23, 0x02, 0x80, 0x89, 0x89, 0xfb, 0xbd, 0xbb, 0x9a, 0x88, 0x90, - 0xca, 0x9a, 0x51, 0x55, 0x63, 0x43, 0x33, 0x33, 0x32, 0x53, 0x34, 0x25, 0x33, 0x33, 0x32, 0x22, - 0x12, 0x81, 0xc9, 0xcc, 0xac, 0xba, 0xbb, 0xbb, 0xdd, 0xcc, 0xbb, 0xbb, 0x89, 0x08, 0x80, 0xa8, - 0xdc, 0xbb, 0x09, 0x52, 0x45, 0x24, 0x02, 0xa0, 0xaa, 0x9b, 0x99, 0x98, 0xcb, 0xcc, 0xcc, 0xbb, - 0xac, 0x9a, 0x00, 0x10, 0x42, 0x23, 0x01, 0x89, 0x89, 0x00, 0x91, 0xde, 0xbc, 0xab, 0x9a, 0x99, - 0x8a, 0x51, 0x45, 0x34, 0x35, 0x34, 0x33, 0x33, 0x12, 0x53, 0x44, 0x43, 0x24, 0x33, 0x22, 0x22, - 0x22, 0x12, 0x90, 0xcb, 0xaa, 0xab, 0xba, 0xbc, 0xef, 0xbc, 0xbc, 0xbb, 0x99, 0x88, 0x98, 0xb8, - 0xdc, 0xbb, 0x8a, 0x31, 0x56, 0x43, 0x02, 0x80, 0xaa, 0x8a, 0x08, 0x81, 0xb8, 0xbe, 0xcd, 0xcb, - 0xac, 0x9b, 0x99, 0x08, 0x20, 0x23, 0x12, 0x99, 0x8a, 0x40, 0x24, 0xa8, 0xbd, 0xcb, 0xbb, 0xbc, - 0x9b, 0x38, 0x57, 0x43, 0x43, 0x43, 0x24, 0x12, 0x11, 0x21, 0x35, 0x34, 0x34, 0x24, 0x22, 0x12, - 0x22, 0x12, 0x90, 0xab, 0x8a, 0x98, 0x99, 0xca, 0xdf, 0xcd, 0xcb, 0xab, 0x89, 0x08, 0x98, 0xb9, - 0xdd, 0xbb, 0x9a, 0x28, 0x45, 0x43, 0x12, 0x88, 0x99, 0x99, 0x10, 0x11, 0x80, 0xdb, 0xdd, 0xcc, - 0xac, 0xab, 0x9a, 0x99, 0x80, 0x21, 0x02, 0x98, 0x89, 0x51, 0x34, 0x12, 0x90, 0x98, 0xda, 0xbc, - 0xbd, 0x8a, 0x31, 0x35, 0x45, 0x34, 0x24, 0x23, 0x12, 0x32, 0x45, 0x44, 0x33, 0x24, 0x12, 0x01, - 0x00, 0x00, 0x98, 0x9a, 0x89, 0x80, 0x88, 0xcb, 0xdd, 0xcd, 0xcb, 0xaa, 0x89, 0x00, 0x00, 0xa8, - 0xce, 0xbd, 0xba, 0x08, 0x52, 0x24, 0x12, 0x90, 0xaa, 0x99, 0x20, 0x23, 0x33, 0x91, 0xed, 0xce, - 0xcb, 0xab, 0xaa, 0xaa, 0x89, 0x08, 0x80, 0x98, 0x09, 0x52, 0x34, 0x33, 0x33, 0x25, 0x02, 0xb9, - 0xde, 0xab, 0x89, 0x28, 0x42, 0x44, 0x33, 0x22, 0x22, 0x63, 0x36, 0x45, 0x43, 0x23, 0x22, 0x00, - 0x80, 0x80, 0x99, 0xaa, 0x9a, 0x89, 0xa9, 0xdb, 0xbe, 0xcd, 0xbb, 0xaa, 0x10, 0x32, 0x24, 0x81, - 0xec, 0xbc, 0xab, 0x0a, 0x32, 0x35, 0x12, 0xa8, 0xbb, 0x9b, 0x28, 0x43, 0x45, 0x22, 0xa0, 0xce, - 0xcc, 0xcb, 0xba, 0xba, 0xaa, 0x8a, 0x89, 0xaa, 0x8a, 0x30, 0x45, 0x53, 0x43, 0x43, 0x23, 0x02, - 0xa9, 0xbc, 0xab, 0x99, 0x19, 0x21, 0x22, 0x01, 0x08, 0x74, 0x67, 0x34, 0x35, 0x33, 0x32, 0x21, - 0x10, 0x00, 0x98, 0xaa, 0xab, 0xaa, 0xaa, 0xdc, 0xbe, 0xbd, 0xbc, 0x9a, 0x19, 0x32, 0x34, 0x22, - 0xa8, 0xbe, 0xac, 0x89, 0x21, 0x24, 0x03, 0xa9, 0xcc, 0xaa, 0x99, 0x00, 0x33, 0x34, 0x23, 0xb0, - 0xcf, 0xbd, 0xbd, 0xac, 0xab, 0xaa, 0x9a, 0xaa, 0xaa, 0x9a, 0x20, 0x54, 0x44, 0x34, 0x34, 0x33, - 0x12, 0x98, 0xa9, 0x9a, 0x88, 0x99, 0xb9, 0xdd, 0xcb, 0x8a, 0x62, 0x55, 0x53, 0x33, 0x34, 0x32, - 0x23, 0x11, 0x80, 0x98, 0x89, 0x99, 0x99, 0xdb, 0xdd, 0xcc, 0xcb, 0xab, 0x8a, 0x10, 0x32, 0x14, - 0x81, 0xb9, 0xbb, 0x0a, 0x52, 0x43, 0x13, 0x98, 0xdb, 0xbb, 0xbb, 0x9b, 0x20, 0x53, 0x43, 0x23, - 0xa1, 0xed, 0xcd, 0xcb, 0xbb, 0xab, 0xab, 0xaa, 0xbb, 0xbb, 0x9a, 0x30, 0x56, 0x54, 0x43, 0x33, - 0x32, 0x21, 0x00, 0x80, 0x88, 0x99, 0xba, 0xbe, 0xcd, 0xbb, 0x8a, 0x20, 0x56, 0x34, 0x35, 0x43, - 0x32, 0x12, 0x11, 0x01, 0x00, 0x00, 0x80, 0xa9, 0xdd, 0xdc, 0xdb, 0xab, 0xab, 0x89, 0x11, 0x21, - 0x01, 0x99, 0xaa, 0x28, 0x44, 0x35, 0x23, 0x01, 0xa9, 0xbc, 0xad, 0xab, 0x9a, 0x00, 0x42, 0x25, - 0x13, 0xa8, 0xcf, 0xbc, 0xbc, 0xaa, 0xa9, 0xba, 0xbc, 0xbc, 0xaa, 0x89, 0x31, 0x46, 0x44, 0x43, - 0x32, 0x23, 0x12, 0x11, 0x10, 0x00, 0x80, 0xba, 0xee, 0xdb, 0xbb, 0xaa, 0x18, 0x44, 0x35, 0x35, - 0x32, 0x33, 0x22, 0x23, 0x22, 0x33, 0x33, 0x02, 0xda, 0xde, 0xcc, 0xcb, 0xab, 0x9a, 0x89, 0x08, - 0x80, 0x98, 0x98, 0x10, 0x54, 0x34, 0x43, 0x12, 0x80, 0xaa, 0xbb, 0xbc, 0xbb, 0x8a, 0x21, 0x35, - 0x24, 0xa0, 0xdc, 0xbd, 0xac, 0x9b, 0xa9, 0xa9, 0xbc, 0xbd, 0xac, 0x9a, 0x00, 0x33, 0x45, 0x44, - 0x33, 0x33, 0x23, 0x32, 0x32, 0x34, 0x24, 0x81, 0xc9, 0xce, 0xcc, 0xab, 0x9b, 0x10, 0x53, 0x34, - 0x33, 0x25, 0x32, 0x33, 0x43, 0x33, 0x43, 0x22, 0x90, 0xea, 0xcc, 0xcb, 0xac, 0xab, 0x9a, 0x99, - 0x99, 0xaa, 0x9a, 0x09, 0x53, 0x44, 0x34, 0x22, 0x11, 0x98, 0xb9, 0xca, 0xaa, 0x9a, 0x30, 0x53, - 0x23, 0xa0, 0xcd, 0xbd, 0xac, 0x99, 0x88, 0x99, 0xcc, 0xbd, 0xbc, 0xaa, 0x89, 0x28, 0x52, 0x53, - 0x34, 0x23, 0x33, 0x42, 0x53, 0x33, 0x43, 0x11, 0x90, 0xda, 0xcd, 0xcb, 0xaa, 0x8a, 0x10, 0x32, - 0x34, 0x34, 0x44, 0x42, 0x32, 0x43, 0x33, 0x33, 0x12, 0x90, 0xcc, 0xcd, 0xcb, 0xab, 0xba, 0xaa, - 0xbb, 0xbc, 0xba, 0xab, 0x19, 0x52, 0x44, 0x24, 0x12, 0x01, 0x98, 0xa9, 0xa9, 0x08, 0x31, 0x45, - 0x23, 0x91, 0xdb, 0xbd, 0xab, 0xaa, 0x88, 0x98, 0xeb, 0xcd, 0xcb, 0xab, 0x9b, 0x89, 0x10, 0x34, - 0x35, 0x35, 0x42, 0x33, 0x34, 0x34, 0x24, 0x23, 0x01, 0xa8, 0xcd, 0xcc, 0xba, 0x9b, 0x99, 0x00, - 0x20, 0x43, 0x44, 0x43, 0x43, 0x34, 0x34, 0x24, 0x13, 0x02, 0x98, 0xdb, 0xcb, 0xac, 0xbb, 0xba, - 0xbc, 0xbc, 0xbb, 0xac, 0x99, 0x08, 0x31, 0x34, 0x24, 0x12, 0x01, 0x98, 0xa9, 0x09, 0x63, 0x44, - 0x24, 0x12, 0x90, 0xb9, 0xbb, 0x9c, 0x88, 0xa8, 0xdc, 0xcd, 0xcb, 0xbb, 0xcb, 0xaa, 0x9a, 0x00, - 0x52, 0x44, 0x53, 0x32, 0x43, 0x33, 0x34, 0x33, 0x12, 0x80, 0xeb, 0xbc, 0xbc, 0xbb, 0xab, 0x99, - 0x09, 0x21, 0x52, 0x53, 0x44, 0x53, 0x43, 0x33, 0x24, 0x12, 0x01, 0xa8, 0xcb, 0xbc, 0xcb, 0xbb, - 0xdb, 0xbb, 0xcb, 0xbb, 0xab, 0xab, 0x89, 0x11, 0x22, 0x32, 0x02, 0xb8, 0xcb, 0x18, 0x66, 0x44, - 0x34, 0x33, 0x23, 0x00, 0x89, 0x09, 0x08, 0xa8, 0xec, 0xcc, 0xcb, 0xcb, 0xcb, 0xcb, 0xaa, 0x8a, - 0x20, 0x53, 0x44, 0x32, 0x43, 0x33, 0x34, 0x33, 0x23, 0x81, 0xca, 0xbd, 0xbc, 0xcb, 0xba, 0xaa, - 0x98, 0x00, 0x22, 0x44, 0x63, 0x53, 0x43, 0x33, 0x43, 0x33, 0x12, 0x90, 0xba, 0xbd, 0xcb, 0xbb, - 0xbc, 0xbb, 0xcc, 0xba, 0xac, 0xbb, 0xaa, 0x99, 0x89, 0x89, 0xba, 0xbe, 0xbc, 0x8a, 0x41, 0x54, - 0x44, 0x24, 0x23, 0x13, 0x21, 0x21, 0x21, 0x81, 0xb9, 0xce, 0xbc, 0xbc, 0xbd, 0xbc, 0xbb, 0x9a, - 0x09, 0x32, 0x35, 0x35, 0x43, 0x43, 0x33, 0x33, 0x23, 0x02, 0xb8, 0xdc, 0xbc, 0xcb, 0xab, 0xaa, - 0x89, 0x08, 0x11, 0x43, 0x44, 0x35, 0x34, 0x34, 0x43, 0x33, 0x22, 0x00, 0xa9, 0xbc, 0xcc, 0xbb, - 0xbb, 0xaa, 0xba, 0xcb, 0xbd, 0xbc, 0xbb, 0x9a, 0xa8, 0xda, 0xcc, 0xcc, 0xbb, 0xaa, 0x08, 0x41, - 0x44, 0x44, 0x32, 0x24, 0x23, 0x33, 0x33, 0x02, 0x90, 0xbb, 0xdd, 0xdb, 0xdb, 0xbb, 0xac, 0xab, - 0x89, 0x00, 0x32, 0x44, 0x43, 0x43, 0x34, 0x42, 0x22, 0x11, 0x80, 0xbb, 0xbd, 0xbc, 0xbb, 0xbb, - 0xaa, 0x99, 0x28, 0x53, 0x44, 0x53, 0x43, 0x43, 0x33, 0x33, 0x13, 0x11, 0x99, 0xcc, 0xdb, 0xca, - 0x9a, 0x8a, 0x89, 0x98, 0xba, 0xbc, 0xbc, 0x9a, 0x89, 0xdb, 0xed, 0xdb, 0xbb, 0xab, 0x9a, 0x08, - 0x32, 0x54, 0x53, 0x43, 0x33, 0x34, 0x24, 0x22, 0x11, 0x88, 0xb9, 0xcc, 0xcc, 0xcb, 0xcb, 0xba, - 0xa9, 0x88, 0x11, 0x33, 0x53, 0x43, 0x44, 0x33, 0x24, 0x22, 0x80, 0xaa, 0xbc, 0xbc, 0xcb, 0xbb, - 0xba, 0xaa, 0x09, 0x31, 0x36, 0x45, 0x43, 0x33, 0x43, 0x23, 0x22, 0x11, 0x88, 0xca, 0xdb, 0xac, - 0xac, 0x99, 0x89, 0x80, 0x99, 0xaa, 0xab, 0x89, 0x88, 0xfb, 0xec, 0xcc, 0xbc, 0xbb, 0xab, 0x9b, - 0x88, 0x21, 0x44, 0x35, 0x35, 0x44, 0x33, 0x23, 0x23, 0x11, 0x88, 0xca, 0xcc, 0xbc, 0xbc, 0xac, - 0xab, 0x99, 0x00, 0x20, 0x42, 0x43, 0x44, 0x43, 0x43, 0x12, 0x01, 0x98, 0xba, 0xdb, 0xbb, 0xbc, - 0xcb, 0xba, 0x9a, 0x18, 0x43, 0x35, 0x35, 0x43, 0x43, 0x33, 0x32, 0x02, 0x80, 0xb9, 0xdb, 0xcc, - 0xbb, 0xba, 0xaa, 0x99, 0x98, 0x98, 0x08, 0x10, 0x22, 0x03, 0xfc, 0xbf, 0xcd, 0xbb, 0xcb, 0xab, - 0xab, 0x99, 0x08, 0x53, 0x36, 0x44, 0x33, 0x34, 0x33, 0x32, 0x02, 0x80, 0xcb, 0xbd, 0xcc, 0xcb, - 0xba, 0x9a, 0x8a, 0x18, 0x21, 0x44, 0x43, 0x34, 0x43, 0x23, 0x22, 0x00, 0x99, 0xdb, 0xcb, 0xdb, - 0xbb, 0xbb, 0xac, 0x99, 0x10, 0x53, 0x34, 0x35, 0x43, 0x43, 0x32, 0x22, 0x01, 0x98, 0xba, 0xcd, - 0xcb, 0xbb, 0xab, 0xaa, 0x89, 0x80, 0x11, 0x22, 0x33, 0x14, 0xb8, 0xdf, 0xdb, 0xcb, 0xcb, 0xcb, - 0xbb, 0xbb, 0xab, 0x28, 0x54, 0x35, 0x34, 0x34, 0x33, 0x43, 0x23, 0x12, 0x88, 0xcb, 0xbd, 0xcc, - 0xba, 0xab, 0xaa, 0x89, 0x18, 0x43, 0x35, 0x44, 0x32, 0x33, 0x32, 0x12, 0x81, 0xa9, 0xcc, 0xdc, - 0xcb, 0xcb, 0xaa, 0x9a, 0x08, 0x20, 0x34, 0x53, 0x34, 0x34, 0x34, 0x24, 0x11, 0x00, 0x99, 0xca, - 0xcb, 0xcb, 0xbb, 0xac, 0x99, 0x08, 0x21, 0x32, 0x22, 0x01, 0x98, 0xcb, 0xdc, 0xdb, 0xcc, 0xcb, - 0xdb, 0xab, 0xab, 0x99, 0x21, 0x44, 0x34, 0x44, 0x33, 0x43, 0x43, 0x22, 0x02, 0xa8, 0xcb, 0xbc, - 0xbc, 0xbc, 0xba, 0xba, 0x09, 0x31, 0x45, 0x34, 0x33, 0x43, 0x22, 0x22, 0x11, 0x81, 0xa9, 0xce, - 0xcc, 0xac, 0xab, 0x9a, 0x99, 0x18, 0x20, 0x43, 0x35, 0x35, 0x44, 0x33, 0x23, 0x11, 0x81, 0xa9, - 0xcb, 0xcc, 0xdb, 0xba, 0xab, 0x88, 0x20, 0x32, 0x12, 0x80, 0x80, 0xa0, 0xda, 0xdc, 0xdb, 0xbc, - 0xad, 0xbc, 0xba, 0x9a, 0x89, 0x21, 0x45, 0x34, 0x34, 0x43, 0x33, 0x43, 0x23, 0x11, 0xa8, 0xdb, - 0xbc, 0xbd, 0xbb, 0xbb, 0xaa, 0x10, 0x63, 0x43, 0x33, 0x34, 0x43, 0x12, 0x12, 0x10, 0x98, 0xca, - 0xdc, 0xdb, 0xcb, 0xaa, 0x99, 0x09, 0x10, 0x21, 0x43, 0x44, 0x44, 0x24, 0x24, 0x12, 0x01, 0x88, - 0x9a, 0xcb, 0xbb, 0xcc, 0xbb, 0xab, 0x09, 0x22, 0x33, 0x02, 0x98, 0x98, 0xb9, 0xdc, 0xdc, 0xcc, - 0xcc, 0xbb, 0xcb, 0xaa, 0x89, 0x00, 0x32, 0x53, 0x44, 0x34, 0x34, 0x33, 0x33, 0x13, 0x01, 0x98, - 0xeb, 0xdc, 0xbb, 0xbc, 0x9a, 0x89, 0x21, 0x44, 0x43, 0x32, 0x32, 0x34, 0x33, 0x12, 0x91, 0xb9, - 0xbd, 0xcd, 0xbc, 0xba, 0xbb, 0xab, 0x99, 0x20, 0x63, 0x53, 0x43, 0x53, 0x33, 0x24, 0x23, 0x01, - 0x99, 0xba, 0xbd, 0xca, 0xbb, 0xbb, 0x8b, 0x08, 0x11, 0x10, 0x20, 0x02, 0xd9, 0xdc, 0xdb, 0xbb, - 0xbe, 0xcd, 0xcb, 0xab, 0x99, 0x08, 0x20, 0x31, 0x44, 0x44, 0x33, 0x34, 0x24, 0x22, 0x12, 0x00, - 0xa9, 0xdc, 0xcb, 0xcb, 0xbb, 0x9b, 0x18, 0x52, 0x33, 0x43, 0x32, 0x44, 0x43, 0x22, 0x11, 0x80, - 0xa9, 0xdc, 0xcb, 0xab, 0xbb, 0xac, 0xab, 0x89, 0x30, 0x53, 0x44, 0x53, 0x33, 0x35, 0x23, 0x13, - 0x98, 0xca, 0xba, 0x9a, 0xba, 0xbb, 0xcb, 0x9a, 0xaa, 0x09, 0x30, 0x33, 0xc0, 0xde, 0xbc, 0xba, - 0xdb, 0xdd, 0xbc, 0xac, 0xaa, 0x89, 0x10, 0x20, 0x32, 0x44, 0x43, 0x44, 0x33, 0x33, 0x33, 0x11, - 0xa9, 0xdb, 0xbc, 0xbc, 0xbb, 0xbc, 0xaa, 0x10, 0x34, 0x34, 0x32, 0x54, 0x43, 0x34, 0x32, 0x11, - 0x80, 0xca, 0xbc, 0xac, 0xab, 0xcb, 0xba, 0xaa, 0x99, 0x08, 0x52, 0x45, 0x53, 0x34, 0x24, 0x13, - 0x01, 0xa8, 0xaa, 0x9a, 0x99, 0x98, 0xba, 0xeb, 0xbb, 0xab, 0x09, 0x12, 0x90, 0xde, 0xac, 0xaa, - 0xa9, 0xdc, 0xdd, 0xcb, 0xba, 0xa9, 0x89, 0x10, 0x11, 0x22, 0x42, 0x45, 0x44, 0x33, 0x24, 0x02, - 0x80, 0xa9, 0xba, 0xbb, 0xbc, 0xbc, 0xab, 0xab, 0x89, 0x10, 0x44, 0x45, 0x34, 0x34, 0x34, 0x33, - 0x13, 0x90, 0xca, 0xac, 0xa9, 0xbb, 0xcb, 0xcb, 0xaa, 0xac, 0xab, 0x20, 0x56, 0x44, 0x43, 0x33, - 0x11, 0x88, 0xaa, 0x99, 0x18, 0x31, 0x12, 0xc8, 0xcd, 0xbc, 0x99, 0x10, 0xa0, 0xcc, 0xcb, 0x9a, - 0x88, 0xda, 0xcd, 0xbc, 0xbb, 0xac, 0x9a, 0x08, 0x00, 0x90, 0x08, 0x51, 0x47, 0x53, 0x23, 0x12, - 0x00, 0x98, 0x9a, 0xa9, 0x9a, 0xaa, 0xcb, 0xbb, 0xcc, 0xac, 0x89, 0x31, 0x46, 0x43, 0x53, 0x43, - 0x22, 0x00, 0x98, 0x98, 0x08, 0x98, 0x98, 0xdb, 0xbc, 0xcc, 0xdb, 0x9a, 0x08, 0x53, 0x35, 0x34, - 0x13, 0x81, 0xa8, 0x8a, 0x18, 0x42, 0x24, 0x03, 0xc9, 0xcc, 0xbb, 0x88, 0x98, 0xda, 0xcb, 0x9b, - 0x89, 0x99, 0xcd, 0xdb, 0xba, 0xbb, 0xac, 0xab, 0x99, 0xaa, 0xcb, 0x0a, 0x65, 0x54, 0x33, 0x33, - 0x01, 0x88, 0x99, 0x89, 0x08, 0x98, 0x99, 0xc9, 0xdc, 0xcd, 0xba, 0x09, 0x31, 0x34, 0x44, 0x44, - 0x32, 0x22, 0x01, 0x00, 0x21, 0x23, 0x12, 0xb8, 0xec, 0xbc, 0xcd, 0xbb, 0xaa, 0x20, 0x54, 0x43, - 0x33, 0x12, 0x90, 0x98, 0x88, 0x22, 0x35, 0x24, 0x91, 0xdb, 0xbc, 0xaa, 0x98, 0xca, 0xcc, 0xba, - 0x99, 0x09, 0x99, 0xab, 0xaa, 0xea, 0xcd, 0xbc, 0xbb, 0xcb, 0xcb, 0xaa, 0x20, 0x45, 0x35, 0x23, - 0x22, 0x00, 0x00, 0x18, 0x10, 0x11, 0x80, 0x98, 0xec, 0xcd, 0xbc, 0x9b, 0x09, 0x21, 0x42, 0x35, - 0x25, 0x33, 0x32, 0x33, 0x44, 0x33, 0x33, 0x82, 0xb9, 0xce, 0xdb, 0xcb, 0xab, 0x8a, 0x20, 0x53, - 0x53, 0x22, 0x11, 0x80, 0x09, 0x10, 0x32, 0x34, 0x13, 0xa8, 0xce, 0xac, 0x9a, 0xaa, 0xcc, 0xac, - 0xab, 0x89, 0x11, 0x22, 0x22, 0xa1, 0xef, 0xbc, 0xbb, 0xbc, 0xbb, 0xbb, 0x8a, 0x31, 0x46, 0x33, - 0x43, 0x32, 0x32, 0x13, 0x22, 0x31, 0x22, 0x00, 0xda, 0xcf, 0xdb, 0xbb, 0x9b, 0x88, 0x08, 0x42, - 0x44, 0x43, 0x34, 0x35, 0x43, 0x24, 0x12, 0x02, 0x80, 0xba, 0xbc, 0xcd, 0xbb, 0xbb, 0x99, 0x10, - 0x54, 0x33, 0x23, 0x02, 0x08, 0x08, 0x31, 0x44, 0x33, 0x81, 0xd9, 0xdb, 0xba, 0xca, 0xdc, 0xbb, - 0xac, 0x89, 0x20, 0x43, 0x33, 0x02, 0xda, 0xbd, 0xbc, 0xac, 0xbb, 0xcb, 0xab, 0x8a, 0x20, 0x31, - 0x45, 0x43, 0x43, 0x32, 0x23, 0x23, 0x22, 0x12, 0x88, 0xda, 0xdd, 0xbc, 0xbb, 0xba, 0x9a, 0x19, - 0x53, 0x44, 0x53, 0x34, 0x44, 0x42, 0x22, 0x21, 0x00, 0x90, 0xaa, 0xcc, 0xcc, 0xbb, 0xab, 0x8a, - 0x32, 0x35, 0x32, 0x12, 0x80, 0x00, 0x32, 0x36, 0x24, 0x01, 0x99, 0xbb, 0xbd, 0xdc, 0xbc, 0xbc, - 0xaa, 0x89, 0x30, 0x44, 0x32, 0x23, 0xa8, 0xdc, 0xca, 0xba, 0xcb, 0xbc, 0xcb, 0x9b, 0x9a, 0x00, - 0x32, 0x34, 0x44, 0x43, 0x32, 0x43, 0x32, 0x22, 0x12, 0x80, 0xea, 0xcd, 0xbb, 0xac, 0xaa, 0x09, - 0x21, 0x43, 0x44, 0x44, 0x53, 0x33, 0x33, 0x33, 0x23, 0x80, 0xa9, 0xdc, 0xbd, 0xbc, 0xac, 0x99, - 0x20, 0x32, 0x22, 0x12, 0x11, 0x10, 0x42, 0x35, 0x34, 0x12, 0x98, 0xba, 0xcd, 0xeb, 0xcb, 0xbb, - 0x9b, 0x89, 0x32, 0x44, 0x33, 0x13, 0x90, 0xcb, 0xcb, 0xcc, 0xbc, 0xbc, 0xcc, 0xaa, 0xaa, 0x88, - 0x10, 0x32, 0x43, 0x35, 0x43, 0x43, 0x32, 0x33, 0x22, 0x02, 0xb9, 0xcf, 0xcb, 0xcb, 0xaa, 0x09, - 0x20, 0x22, 0x35, 0x35, 0x44, 0x33, 0x34, 0x34, 0x22, 0x00, 0x98, 0xda, 0xdb, 0xac, 0xab, 0x9a, - 0x18, 0x21, 0x12, 0x02, 0x01, 0x21, 0x44, 0x45, 0x33, 0x23, 0x80, 0xba, 0xdc, 0xcc, 0xbc, 0xba, - 0xaa, 0x08, 0x32, 0x34, 0x33, 0x22, 0x90, 0xba, 0xeb, 0xdb, 0xcc, 0xdb, 0xbc, 0xbb, 0xbb, 0x9a, - 0x08, 0x22, 0x43, 0x44, 0x34, 0x43, 0x24, 0x33, 0x32, 0x12, 0xa9, 0xcd, 0xcb, 0xbc, 0xab, 0x89, - 0x20, 0x42, 0x34, 0x43, 0x53, 0x34, 0x44, 0x33, 0x32, 0x01, 0x98, 0xda, 0xdb, 0xcb, 0xba, 0x9a, - 0x08, 0x11, 0x11, 0x11, 0x00, 0x20, 0x73, 0x44, 0x43, 0x22, 0x00, 0x98, 0xdb, 0xbd, 0xbc, 0xbb, - 0x9a, 0x08, 0x31, 0x23, 0x33, 0x22, 0x11, 0x00, 0x98, 0xfa, 0xce, 0xcd, 0xcb, 0xcb, 0xaa, 0x9a, - 0x89, 0x08, 0x31, 0x53, 0x34, 0x43, 0x34, 0x43, 0x32, 0x22, 0x88, 0xbb, 0xcd, 0xcb, 0xaa, 0x89, - 0x10, 0x22, 0x43, 0x32, 0x45, 0x44, 0x34, 0x25, 0x23, 0x01, 0x88, 0xba, 0xdb, 0xcb, 0xcb, 0x9a, - 0x88, 0x08, 0x80, 0x80, 0x88, 0x10, 0x54, 0x54, 0x43, 0x23, 0x02, 0x90, 0xdb, 0xdb, 0xbb, 0xac, - 0xaa, 0x09, 0x00, 0x21, 0x01, 0x08, 0x18, 0x32, 0x53, 0x02, 0xfa, 0xdd, 0xbc, 0xbc, 0xbb, 0xbb, - 0xaa, 0x99, 0x20, 0x52, 0x43, 0x44, 0x42, 0x32, 0x34, 0x33, 0x11, 0x98, 0xca, 0xbc, 0xab, 0x8a, - 0x11, 0x21, 0x11, 0x21, 0x46, 0x55, 0x34, 0x34, 0x33, 0x11, 0x80, 0xa9, 0xbb, 0xcd, 0xbb, 0xab, - 0x9a, 0x99, 0xaa, 0xba, 0xbb, 0x09, 0x73, 0x56, 0x43, 0x43, 0x12, 0x01, 0xb9, 0xbb, 0xcc, 0xba, - 0xab, 0xbb, 0xab, 0xa9, 0xba, 0xcb, 0x8a, 0x40, 0x44, 0x33, 0x90, 0xde, 0xbd, 0xbd, 0xbb, 0xbb, - 0xab, 0x8a, 0x88, 0x20, 0x42, 0x35, 0x35, 0x43, 0x43, 0x24, 0x33, 0x12, 0x88, 0xca, 0xab, 0x0a, - 0x21, 0x02, 0x88, 0x0a, 0x61, 0x46, 0x45, 0x32, 0x33, 0x22, 0x81, 0x90, 0xa9, 0xca, 0xbc, 0xac, - 0xbb, 0xbc, 0xbb, 0xbc, 0xbb, 0xaa, 0x09, 0x65, 0x35, 0x44, 0x22, 0x12, 0x01, 0x98, 0xaa, 0xcb, - 0xcb, 0xbc, 0xbb, 0xbb, 0xbc, 0xbc, 0xbb, 0x0a, 0x42, 0x44, 0x02, 0xb8, 0xdd, 0xbc, 0xac, 0xba, - 0xa9, 0x89, 0x98, 0x89, 0x09, 0x20, 0x43, 0x35, 0x36, 0x35, 0x44, 0x22, 0x12, 0x00, 0x98, 0x88, - 0x10, 0x10, 0x88, 0x80, 0x31, 0x55, 0x53, 0x43, 0x33, 0x24, 0x22, 0x22, 0x12, 0x91, 0xdb, 0xcc, - 0xcb, 0xab, 0xba, 0xbc, 0xbd, 0xac, 0x9a, 0x20, 0x44, 0x45, 0x33, 0x43, 0x21, 0x00, 0x90, 0xa9, - 0xba, 0xbd, 0xcc, 0xbb, 0xbc, 0xcb, 0xcb, 0x9a, 0x08, 0x31, 0x33, 0x81, 0xfb, 0xcd, 0xbb, 0xab, - 0x89, 0x08, 0x88, 0xb9, 0xcd, 0xba, 0x9a, 0x18, 0x55, 0x44, 0x53, 0x33, 0x33, 0x22, 0x00, 0x80, - 0x08, 0x10, 0x00, 0x80, 0x89, 0x88, 0x21, 0x44, 0x45, 0x44, 0x43, 0x32, 0x23, 0x01, 0xa9, 0xcb, - 0xbb, 0xbb, 0xeb, 0xcc, 0xcc, 0xcb, 0xab, 0x89, 0x21, 0x54, 0x34, 0x24, 0x23, 0x12, 0x11, 0x11, - 0x80, 0xa8, 0xdd, 0xcc, 0xcb, 0xbb, 0xcb, 0xab, 0x89, 0x18, 0x22, 0x22, 0xa8, 0xdd, 0xbb, 0x9b, - 0x09, 0x08, 0xb8, 0xcf, 0xcc, 0xbc, 0xab, 0x09, 0x41, 0x44, 0x34, 0x43, 0x33, 0x32, 0x11, 0x11, - 0x00, 0x10, 0x21, 0x00, 0xb8, 0xeb, 0xcb, 0x89, 0x31, 0x36, 0x34, 0x23, 0x12, 0x81, 0x98, 0x89, - 0x32, 0x22, 0xc8, 0xdf, 0xdc, 0xbc, 0xbb, 0x9b, 0x19, 0x42, 0x45, 0x33, 0x24, 0x23, 0x21, 0x21, - 0x22, 0x13, 0xa8, 0xed, 0xbd, 0xbc, 0xbc, 0xaa, 0x9a, 0x08, 0x21, 0x12, 0x01, 0xa9, 0xbb, 0x9b, - 0x08, 0x02, 0xea, 0xef, 0xcc, 0xcb, 0xba, 0x8a, 0x28, 0x43, 0x35, 0x34, 0x33, 0x23, 0x22, 0x12, - 0x32, 0x32, 0x23, 0x82, 0xb9, 0xde, 0xcb, 0xaa, 0x18, 0x32, 0x44, 0x23, 0x02, 0x88, 0x89, 0x40, - 0x45, 0x43, 0x02, 0xa8, 0xce, 0xdb, 0xcb, 0xab, 0x99, 0x10, 0x43, 0x35, 0x33, 0x24, 0x22, 0x22, - 0x33, 0x34, 0x12, 0xa0, 0xce, 0xcd, 0xbb, 0xbc, 0xaa, 0x99, 0x00, 0x11, 0x10, 0x08, 0x88, 0x01, - 0x12, 0x81, 0xda, 0xde, 0xdc, 0xdb, 0xab, 0xab, 0x89, 0x21, 0x45, 0x53, 0x32, 0x22, 0x12, 0x11, - 0x21, 0x32, 0x33, 0x33, 0x80, 0xfa, 0xdb, 0xbb, 0x99, 0x20, 0x32, 0x24, 0x12, 0x98, 0x89, 0x52, - 0x56, 0x43, 0x32, 0x81, 0xc9, 0xcc, 0xbc, 0xbc, 0xab, 0x89, 0x20, 0x63, 0x43, 0x32, 0x32, 0x23, - 0x33, 0x35, 0x43, 0x11, 0xb0, 0xed, 0xdb, 0xab, 0xbb, 0x9a, 0x89, 0x08, 0x01, 0x01, 0x00, 0x11, - 0x21, 0x01, 0xa8, 0xfb, 0xce, 0xdc, 0xcb, 0xbb, 0x9a, 0x18, 0x43, 0x35, 0x34, 0x32, 0x21, 0x10, - 0x21, 0x42, 0x33, 0x24, 0x22, 0x98, 0xcc, 0xbc, 0xab, 0x89, 0x11, 0x33, 0x33, 0x80, 0xcb, 0x8a, - 0x73, 0x47, 0x33, 0x23, 0x91, 0xda, 0xcc, 0xbc, 0xbb, 0xaa, 0x08, 0x42, 0x35, 0x33, 0x24, 0x22, - 0x21, 0x43, 0x34, 0x33, 0x02, 0xeb, 0xcd, 0xcb, 0xbb, 0xaa, 0x89, 0x88, 0x00, 0x00, 0x88, 0x00, - 0x01, 0x90, 0xaa, 0xcb, 0xec, 0xcd, 0xbd, 0xad, 0xab, 0x88, 0x31, 0x44, 0x34, 0x33, 0x22, 0x10, - 0x00, 0x21, 0x53, 0x43, 0x23, 0x12, 0xa9, 0xcc, 0xcb, 0xaa, 0x09, 0x21, 0x23, 0x02, 0xca, 0xbb, - 0x2a, 0x57, 0x35, 0x34, 0x12, 0x90, 0xcc, 0xdb, 0xbb, 0xba, 0x8a, 0x20, 0x44, 0x53, 0x32, 0x22, - 0x12, 0x32, 0x36, 0x34, 0x13, 0xa0, 0xec, 0xdb, 0xba, 0xab, 0x99, 0x88, 0x00, 0x98, 0x99, 0x8a, - 0x88, 0x90, 0xa9, 0xcb, 0xba, 0xde, 0xdd, 0xcb, 0xac, 0x9a, 0x10, 0x52, 0x43, 0x43, 0x11, 0x01, - 0x08, 0x11, 0x32, 0x44, 0x33, 0x23, 0x81, 0xba, 0xcc, 0xbb, 0xaa, 0x08, 0x32, 0x13, 0xda, 0xdc, - 0x8a, 0x31, 0x47, 0x34, 0x23, 0x02, 0xb9, 0xcd, 0xbb, 0xac, 0x9a, 0x09, 0x21, 0x35, 0x34, 0x33, - 0x22, 0x53, 0x44, 0x43, 0x33, 0x81, 0xca, 0xbe, 0xbc, 0xbb, 0xaa, 0x98, 0x80, 0x90, 0xa9, 0x9a, - 0x89, 0x08, 0xa0, 0xcb, 0xbb, 0xcd, 0xce, 0xcc, 0xac, 0x9b, 0x09, 0x31, 0x45, 0x33, 0x33, 0x01, - 0x00, 0x11, 0x44, 0x34, 0x34, 0x22, 0x01, 0xa8, 0xba, 0xbb, 0xbc, 0xaa, 0x10, 0x11, 0xd8, 0xdc, - 0xbb, 0x28, 0x65, 0x44, 0x33, 0x02, 0x90, 0xcb, 0xbc, 0xab, 0xab, 0x99, 0x08, 0x42, 0x44, 0x43, - 0x23, 0x34, 0x54, 0x43, 0x33, 0x12, 0xa9, 0xdd, 0xcb, 0xab, 0xab, 0x99, 0x89, 0x89, 0xa9, 0xba, - 0x99, 0x18, 0x13, 0x90, 0xcc, 0xcc, 0xbc, 0xbd, 0xbd, 0xac, 0x9a, 0x18, 0x43, 0x35, 0x23, 0x12, - 0x01, 0x21, 0x64, 0x53, 0x32, 0x22, 0x01, 0xa9, 0xaa, 0x8a, 0x99, 0xba, 0xaa, 0xab, 0xcb, 0xce, - 0xac, 0x0a, 0x54, 0x54, 0x33, 0x32, 0x80, 0xb9, 0xbc, 0xac, 0x99, 0x99, 0xaa, 0x89, 0x18, 0x44, - 0x35, 0x45, 0x34, 0x44, 0x32, 0x13, 0x91, 0xdb, 0xcc, 0xbb, 0xba, 0xa9, 0x9a, 0xa9, 0xaa, 0xbc, - 0xaa, 0x18, 0x42, 0x13, 0x80, 0xcc, 0xcc, 0xac, 0xcb, 0xba, 0x9a, 0x89, 0x21, 0x44, 0x43, 0x12, - 0x21, 0x41, 0x55, 0x53, 0x43, 0x12, 0x11, 0xa8, 0xa9, 0x98, 0x80, 0xa0, 0xcb, 0xcc, 0xbb, 0xbb, - 0xcb, 0x0a, 0x63, 0x55, 0x33, 0x33, 0x02, 0x98, 0xcb, 0xac, 0x89, 0x98, 0xa9, 0xcb, 0xab, 0x09, - 0x73, 0x45, 0x34, 0x44, 0x32, 0x33, 0x01, 0xb9, 0xcd, 0xac, 0xbb, 0xaa, 0xaa, 0xba, 0xbb, 0xbc, - 0xab, 0x09, 0x42, 0x24, 0x12, 0xa9, 0xcd, 0xcb, 0xaa, 0xaa, 0xa9, 0xa9, 0x9a, 0x09, 0x31, 0x42, - 0x43, 0x54, 0x46, 0x44, 0x34, 0x23, 0x12, 0x80, 0xa9, 0x9a, 0x00, 0x80, 0xda, 0xcd, 0xcb, 0xaa, - 0x9a, 0x89, 0x20, 0x45, 0x45, 0x23, 0x13, 0x80, 0xa9, 0xab, 0x9a, 0x80, 0xa8, 0xcd, 0xbc, 0xaa, - 0x30, 0x65, 0x34, 0x35, 0x33, 0x24, 0x11, 0x80, 0xbb, 0xcd, 0xca, 0xaa, 0xbb, 0xbb, 0xbc, 0xbb, - 0xaa, 0x09, 0x21, 0x53, 0x23, 0x81, 0xca, 0xcc, 0x9a, 0x9a, 0x88, 0x98, 0xdb, 0xbc, 0xbb, 0x8a, - 0x31, 0x45, 0x54, 0x44, 0x43, 0x43, 0x22, 0x02, 0x80, 0x98, 0x80, 0x00, 0xa9, 0xde, 0xdb, 0xab, - 0x9a, 0x89, 0x18, 0x41, 0x63, 0x43, 0x32, 0x12, 0x01, 0x98, 0x9a, 0x99, 0xba, 0xcd, 0xbc, 0x9c, - 0x19, 0x62, 0x44, 0x43, 0x24, 0x23, 0x22, 0x11, 0xa8, 0xcb, 0xcc, 0xbb, 0xbc, 0xbc, 0xbc, 0xbb, - 0xaa, 0x8a, 0x00, 0x31, 0x23, 0x13, 0x80, 0xaa, 0xab, 0x89, 0x00, 0xc9, 0xee, 0xcc, 0xcb, 0x9a, - 0x09, 0x31, 0x44, 0x44, 0x43, 0x53, 0x33, 0x23, 0x22, 0x00, 0x00, 0x88, 0xa8, 0xcd, 0xbe, 0xbc, - 0xab, 0x8a, 0x10, 0x11, 0x32, 0x53, 0x45, 0x33, 0x23, 0x02, 0x90, 0xba, 0xbc, 0xbd, 0xbc, 0xab, - 0x8a, 0x42, 0x46, 0x44, 0x33, 0x24, 0x22, 0x13, 0x01, 0x98, 0xdb, 0xbc, 0xbd, 0xbc, 0xbc, 0xac, - 0xaa, 0x89, 0x09, 0x08, 0x01, 0x21, 0x21, 0x33, 0x32, 0x11, 0x99, 0xdb, 0xbd, 0xbe, 0xbc, 0xbb, - 0x89, 0x31, 0x45, 0x33, 0x33, 0x45, 0x34, 0x35, 0x33, 0x23, 0x11, 0x90, 0xa8, 0xcb, 0xcd, 0xbc, - 0xcb, 0xaa, 0x88, 0x18, 0x00, 0x00, 0x53, 0x36, 0x35, 0x22, 0x01, 0x99, 0xca, 0xbb, 0xac, 0x9a, - 0x09, 0x30, 0x54, 0x35, 0x35, 0x43, 0x32, 0x32, 0x32, 0x01, 0xa9, 0xdc, 0xcc, 0xbc, 0xbc, 0xac, - 0xab, 0x99, 0x99, 0x98, 0x98, 0x00, 0x31, 0x45, 0x32, 0x12, 0x80, 0xb9, 0xbc, 0xcc, 0xcb, 0xaa, - 0x8a, 0x20, 0x63, 0x23, 0x22, 0x22, 0x44, 0x46, 0x34, 0x33, 0x22, 0x01, 0x98, 0xa9, 0xbb, 0xcc, - 0xcc, 0xcb, 0xba, 0x9a, 0x9a, 0x98, 0x10, 0x65, 0x34, 0x34, 0x12, 0x80, 0xca, 0xbb, 0xbb, 0x89, - 0x11, 0x43, 0x33, 0x45, 0x44, 0x34, 0x34, 0x32, 0x32, 0x12, 0x00, 0xca, 0xdc, 0xcc, 0xcb, 0xbb, - 0xbb, 0xac, 0xa9, 0xaa, 0x9b, 0x8a, 0x20, 0x54, 0x34, 0x23, 0x81, 0xa9, 0xcb, 0xbb, 0xab, 0x9a, - 0x88, 0x21, 0x73, 0x43, 0x32, 0x22, 0x21, 0x56, 0x44, 0x43, 0x22, 0x11, 0x08, 0x88, 0x08, 0x80, - 0xc9, 0xeb, 0xcc, 0xcb, 0xba, 0x99, 0x88, 0x31, 0x54, 0x43, 0x23, 0x81, 0xca, 0xbb, 0xac, 0x09, - 0x31, 0x34, 0x24, 0x33, 0x53, 0x35, 0x35, 0x43, 0x12, 0x11, 0x00, 0xa8, 0xca, 0xdc, 0xbc, 0xbc, - 0xcb, 0xba, 0xbb, 0xbb, 0xcb, 0xaa, 0x09, 0x53, 0x44, 0x32, 0x11, 0x98, 0xaa, 0xbb, 0x9a, 0x00, - 0x11, 0x22, 0x43, 0x45, 0x43, 0x32, 0x11, 0x21, 0x63, 0x35, 0x34, 0x33, 0x12, 0x11, 0x21, 0x34, - 0x13, 0xb0, 0xef, 0xbc, 0xad, 0xab, 0x99, 0x08, 0x21, 0x32, 0x32, 0x13, 0xb0, 0xcd, 0xac, 0x08, - 0x31, 0x44, 0x35, 0x33, 0x33, 0x35, 0x35, 0x24, 0x23, 0x12, 0x01, 0x90, 0xa9, 0xcd, 0xbd, 0xbd, - 0xca, 0xba, 0xac, 0xac, 0xbb, 0x9c, 0x8a, 0x20, 0x43, 0x34, 0x22, 0x81, 0xa9, 0xba, 0x99, 0x20, - 0x42, 0x23, 0x34, 0x35, 0x44, 0x23, 0x02, 0x88, 0x99, 0x08, 0x31, 0x45, 0x42, 0x33, 0x35, 0x34, - 0x34, 0x33, 0xb8, 0xcf, 0xbc, 0xbc, 0xab, 0x9a, 0x88, 0x90, 0xa8, 0x99, 0x18, 0x88, 0x98, 0x30, - 0x46, 0x44, 0x44, 0x43, 0x34, 0x43, 0x32, 0x32, 0x43, 0x22, 0x23, 0x81, 0xca, 0xcc, 0xbc, 0xbc, - 0xba, 0xcb, 0xeb, 0xcb, 0xcb, 0xba, 0x9a, 0x08, 0x21, 0x33, 0x24, 0x13, 0x80, 0x99, 0x99, 0x08, - 0x63, 0x63, 0x34, 0x44, 0x32, 0x11, 0x80, 0xa9, 0xba, 0xaa, 0x08, 0x01, 0x01, 0x31, 0x45, 0x55, - 0x43, 0x24, 0x13, 0xa0, 0xdc, 0xbc, 0xbc, 0xba, 0xaa, 0xbb, 0xbb, 0xac, 0x8a, 0x08, 0x01, 0x21, - 0x45, 0x45, 0x53, 0x33, 0x34, 0x43, 0x23, 0x32, 0x32, 0x43, 0x33, 0x01, 0xeb, 0xcc, 0xbb, 0xaa, - 0x88, 0x88, 0xdb, 0xce, 0xcb, 0xbb, 0x9b, 0x8a, 0x00, 0x10, 0x21, 0x22, 0x11, 0x11, 0x80, 0x09, - 0x73, 0x46, 0x44, 0x53, 0x22, 0x02, 0x88, 0xaa, 0xa9, 0x88, 0x00, 0x88, 0xdb, 0xcb, 0x8a, 0x21, - 0x54, 0x34, 0x34, 0x11, 0xa8, 0xcb, 0xcd, 0xcb, 0xcb, 0xcb, 0xab, 0x9a, 0x99, 0x88, 0x89, 0x08, - 0x42, 0x46, 0x44, 0x24, 0x32, 0x22, 0x23, 0x33, 0x43, 0x33, 0x23, 0x90, 0xeb, 0xcd, 0xab, 0x9a, - 0x00, 0x12, 0x88, 0xdc, 0xbd, 0xbc, 0xab, 0x8a, 0x88, 0x00, 0x08, 0x00, 0x10, 0x80, 0x89, 0x08, - 0x73, 0x56, 0x44, 0x34, 0x32, 0x01, 0x98, 0x99, 0x88, 0x10, 0x10, 0xa8, 0xed, 0xbc, 0xbb, 0x8a, - 0x10, 0x33, 0x35, 0x22, 0x02, 0xa8, 0xeb, 0xdb, 0xcc, 0xbc, 0xcb, 0x9a, 0x99, 0x9a, 0xa9, 0xaa, - 0x18, 0x64, 0x45, 0x43, 0x33, 0x23, 0x22, 0x42, 0x33, 0x34, 0x13, 0xa0, 0xdb, 0xcc, 0xba, 0x99, - 0x10, 0x11, 0x81, 0xda, 0xcd, 0xbb, 0xac, 0x99, 0x88, 0x00, 0x98, 0x98, 0x88, 0x80, 0x00, 0x01, - 0x51, 0x67, 0x44, 0x43, 0x22, 0x02, 0x88, 0x08, 0x10, 0x32, 0x22, 0xc0, 0xde, 0xdb, 0xba, 0x99, - 0x08, 0x00, 0x80, 0x00, 0x80, 0x11, 0x81, 0xda, 0xdd, 0xcc, 0xcb, 0x9a, 0x9a, 0xa9, 0xb9, 0xba, - 0x8b, 0x61, 0x45, 0x35, 0x33, 0x24, 0x22, 0x33, 0x44, 0x23, 0x23, 0x98, 0xdb, 0xcb, 0xaa, 0x09, - 0x21, 0x00, 0xb8, 0xec, 0xcb, 0xbb, 0x9a, 0x9a, 0x89, 0x00, 0x08, 0x00, 0x08, 0x08, 0x80, 0xcb, - 0x40, 0x77, 0x35, 0x34, 0x22, 0x00, 0x89, 0x18, 0x43, 0x34, 0x22, 0xa8, 0xce, 0xac, 0xab, 0x9a, - 0x98, 0xb8, 0xcb, 0xcb, 0xab, 0x10, 0x23, 0xb8, 0xcf, 0xcc, 0xab, 0x9a, 0x99, 0x99, 0xba, 0xbc, - 0x9a, 0x40, 0x45, 0x35, 0x34, 0x43, 0x43, 0x43, 0x24, 0x23, 0x12, 0x98, 0xbb, 0xbc, 0xaa, 0x20, - 0x23, 0x91, 0xeb, 0xcd, 0xcb, 0x9a, 0x99, 0x99, 0x99, 0x08, 0x20, 0x43, 0x32, 0x14, 0x82, 0xa8, - 0x09, 0x73, 0x47, 0x24, 0x12, 0x80, 0x99, 0x00, 0x32, 0x35, 0x24, 0x80, 0xdb, 0xbb, 0xbc, 0x9a, - 0xaa, 0xcc, 0xbc, 0xdb, 0x9a, 0x09, 0x00, 0xb8, 0xcd, 0xbd, 0xbb, 0x88, 0x08, 0x98, 0xba, 0xbc, - 0x9b, 0x42, 0x54, 0x34, 0x34, 0x34, 0x43, 0x44, 0x43, 0x23, 0x11, 0x98, 0xaa, 0xa9, 0x09, 0x31, - 0x23, 0xa8, 0xce, 0xcd, 0xbb, 0xba, 0xaa, 0xcb, 0x99, 0x08, 0x52, 0x53, 0x23, 0x22, 0x01, 0x98, - 0x08, 0x51, 0x45, 0x34, 0x23, 0x90, 0x99, 0x99, 0x10, 0x52, 0x34, 0x22, 0x88, 0xca, 0xcc, 0xcb, - 0xbb, 0xbd, 0xbc, 0xba, 0xab, 0x99, 0xa9, 0xec, 0xdc, 0xcb, 0x9b, 0x09, 0x00, 0x80, 0xa8, 0xcb, - 0x9a, 0x10, 0x44, 0x35, 0x34, 0x24, 0x43, 0x43, 0x44, 0x32, 0x12, 0x88, 0x99, 0x88, 0x00, 0x12, - 0x12, 0xa8, 0xdc, 0xdc, 0xbb, 0xbb, 0xcc, 0xac, 0xab, 0x08, 0x31, 0x44, 0x34, 0x32, 0x12, 0x00, - 0x08, 0x32, 0x47, 0x44, 0x22, 0x80, 0x98, 0xba, 0xba, 0x99, 0x21, 0x22, 0x32, 0x01, 0xfa, 0xcc, - 0xcb, 0xbc, 0xaa, 0x98, 0x98, 0x88, 0xea, 0xce, 0xbc, 0xbc, 0xab, 0x0a, 0x00, 0x80, 0xa9, 0xbc, - 0x9c, 0x09, 0x42, 0x45, 0x43, 0x33, 0x33, 0x44, 0x43, 0x24, 0x12, 0x01, 0x08, 0x08, 0x00, 0x11, - 0x00, 0x98, 0xa9, 0xcc, 0xbd, 0xdb, 0xbd, 0xcd, 0xba, 0x9a, 0x18, 0x42, 0x43, 0x34, 0x22, 0x11, - 0x00, 0x21, 0x45, 0x35, 0x33, 0x02, 0x98, 0xcb, 0xcb, 0xa9, 0x18, 0x10, 0x01, 0xa8, 0xcc, 0xbd, - 0xcb, 0xba, 0x09, 0x21, 0x33, 0x22, 0xf9, 0xce, 0xcc, 0xcb, 0xaa, 0x89, 0x88, 0x90, 0xc9, 0xcb, - 0xaa, 0x89, 0x21, 0x45, 0x34, 0x33, 0x24, 0x33, 0x44, 0x33, 0x23, 0x13, 0x12, 0x01, 0x00, 0x01, - 0x01, 0x88, 0x99, 0xbb, 0xeb, 0xec, 0xec, 0xdb, 0xcb, 0xaa, 0x8a, 0x10, 0x32, 0x35, 0x24, 0x22, - 0x21, 0x32, 0x45, 0x44, 0x32, 0x12, 0x90, 0xa9, 0xbb, 0x9b, 0x9a, 0x89, 0xba, 0xdd, 0xcc, 0xac, - 0xab, 0x8a, 0x20, 0x53, 0x34, 0x22, 0x80, 0xdc, 0xcc, 0xcb, 0xbb, 0x99, 0x89, 0x99, 0xbc, 0xbd, - 0xab, 0x9a, 0x00, 0x42, 0x45, 0x24, 0x23, 0x32, 0x53, 0x43, 0x23, 0x12, 0x12, 0x11, 0x00, 0x00, - 0x10, 0x00, 0x01, 0x00, 0x99, 0xec, 0xdc, 0xcd, 0xcc, 0xcb, 0x9a, 0x99, 0x11, 0x32, 0x53, 0x32, - 0x22, 0x53, 0x34, 0x35, 0x43, 0x22, 0x81, 0x90, 0x99, 0x98, 0x99, 0xba, 0xcc, 0xcc, 0xcc, 0xcb, - 0xba, 0x9a, 0x18, 0x43, 0x44, 0x23, 0x12, 0x98, 0xeb, 0xbc, 0xbb, 0x9b, 0x9a, 0xba, 0xdd, 0xcb, - 0xab, 0xab, 0x89, 0x28, 0x53, 0x44, 0x32, 0x33, 0x53, 0x34, 0x33, 0x23, 0x22, 0x12, 0x01, 0x88, - 0x89, 0x08, 0x21, 0x43, 0x14, 0x91, 0xec, 0xdc, 0xcc, 0xbc, 0xac, 0x9a, 0x09, 0x11, 0x22, 0x32, - 0x34, 0x53, 0x44, 0x53, 0x33, 0x24, 0x12, 0x11, 0x00, 0x90, 0x98, 0xaa, 0xcc, 0xcc, 0xdb, 0xcb, - 0xbb, 0xbb, 0x99, 0x20, 0x44, 0x43, 0x33, 0x11, 0x98, 0xbb, 0xbd, 0xab, 0xab, 0xcd, 0xcc, 0xcb, - 0xbb, 0xbb, 0xbb, 0xaa, 0x18, 0x53, 0x34, 0x34, 0x44, 0x33, 0x25, 0x33, 0x22, 0x22, 0x02, 0x00, - 0x88, 0x88, 0x18, 0x53, 0x44, 0x01, 0xa8, 0xcd, 0xcc, 0xbd, 0xcb, 0xab, 0x99, 0x89, 0x10, 0x31, - 0x33, 0x34, 0x45, 0x44, 0x34, 0x34, 0x33, 0x33, 0x22, 0x00, 0x88, 0xaa, 0xdb, 0xcc, 0xcb, 0xbc, - 0xbc, 0xac, 0xab, 0x89, 0x28, 0x43, 0x44, 0x22, 0x02, 0x80, 0x98, 0x98, 0xaa, 0xdd, 0xdb, 0xbb, - 0xbc, 0xbb, 0xbc, 0xbb, 0x9b, 0x89, 0x21, 0x45, 0x44, 0x33, 0x43, 0x33, 0x33, 0x43, 0x22, 0x12, - 0x00, 0x80, 0x20, 0x73, 0x34, 0x23, 0x80, 0xc9, 0xbd, 0xbd, 0xcd, 0xba, 0xbb, 0x9b, 0x8a, 0x00, - 0x22, 0x32, 0x53, 0x54, 0x45, 0x43, 0x24, 0x23, 0x33, 0x12, 0x80, 0x99, 0xab, 0xcc, 0xcb, 0xcb, - 0xac, 0xcb, 0xbb, 0xbb, 0xaa, 0x10, 0x44, 0x34, 0x33, 0x22, 0x21, 0x11, 0xa0, 0xdc, 0xcc, 0xcb, - 0xba, 0xcb, 0xcb, 0xbb, 0xbb, 0xab, 0x89, 0x32, 0x55, 0x43, 0x22, 0x23, 0x33, 0x34, 0x24, 0x22, - 0x10, 0x21, 0x31, 0x44, 0x45, 0x23, 0x13, 0x00, 0xb9, 0xdc, 0xdc, 0xdb, 0xab, 0xbb, 0xaa, 0x0a, - 0x10, 0x11, 0x01, 0x42, 0x56, 0x54, 0x33, 0x34, 0x23, 0x23, 0x11, 0x88, 0xb9, 0xcb, 0xcb, 0xbc, - 0xcb, 0xcb, 0xcb, 0xbb, 0xbb, 0x89, 0x30, 0x44, 0x34, 0x32, 0x33, 0x32, 0x11, 0xc9, 0xdc, 0xcb, - 0xca, 0xba, 0xcb, 0x7b, 0x02, 0x01, 0x02, 0x7d, 0x0b, 0x02, 0xf4, 0x01, 0xae, 0x0b, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0xf7, 0xff, 0xa1, 0x8f, 0xa1, 0x74, 0x62, 0xa3, 0xbd, 0x8a, 0x15, - 0x9a, 0x80, 0x18, 0x00, 0x98, 0x9b, 0xb8, 0xbf, 0xad, 0x51, 0x34, 0x80, 0x81, 0xca, 0x18, 0x0a, - 0x24, 0x12, 0x10, 0xfa, 0x8f, 0x00, 0x01, 0x31, 0x15, 0x53, 0x11, 0xa0, 0xac, 0xdb, 0x1a, 0x23, - 0x14, 0xb9, 0x19, 0x41, 0x26, 0x01, 0xa9, 0xba, 0x3b, 0x27, 0x44, 0x23, 0x91, 0xbb, 0xaa, 0xc9, - 0xbf, 0x09, 0x30, 0x45, 0x81, 0xfb, 0xbb, 0x89, 0x20, 0x23, 0xc8, 0xdc, 0xbb, 0x89, 0x11, 0x12, - 0x10, 0x42, 0x33, 0x92, 0xdd, 0xbc, 0x9b, 0x20, 0x33, 0x90, 0x89, 0x40, 0x56, 0x33, 0x82, 0xca, - 0x9b, 0x40, 0x45, 0x33, 0x11, 0x98, 0xaa, 0xca, 0xbc, 0xbd, 0x8a, 0x31, 0x34, 0x82, 0xda, 0xac, - 0x08, 0x53, 0x23, 0x98, 0xcc, 0x9a, 0x10, 0x44, 0x43, 0x32, 0x42, 0x12, 0x90, 0xdb, 0xbc, 0x9a, - 0x10, 0x11, 0xa8, 0xbb, 0x1a, 0x56, 0x23, 0x81, 0xba, 0x89, 0x73, 0x35, 0x33, 0x02, 0x98, 0xa9, - 0xcb, 0xbc, 0xac, 0x19, 0x63, 0x22, 0xa8, 0xcd, 0xbb, 0x8a, 0x10, 0x90, 0xdd, 0xbc, 0xaa, 0x88, - 0x21, 0x21, 0x32, 0x34, 0x13, 0xc8, 0xce, 0xab, 0x09, 0x31, 0x22, 0x80, 0x89, 0x72, 0x35, 0x23, - 0x90, 0xba, 0x89, 0x64, 0x24, 0x13, 0x80, 0xb9, 0xbc, 0xbd, 0xbc, 0x9b, 0x28, 0x44, 0x23, 0xa8, - 0xcc, 0x8a, 0x31, 0x44, 0x01, 0xb8, 0xcb, 0x09, 0x42, 0x44, 0x33, 0x34, 0x24, 0x11, 0xc9, 0xbc, - 0xac, 0x88, 0x11, 0x80, 0xb9, 0x99, 0x52, 0x35, 0x12, 0xa9, 0xbb, 0x48, 0x46, 0x34, 0x22, 0x81, - 0x98, 0xca, 0xdb, 0xbb, 0x8a, 0x31, 0x35, 0x82, 0xeb, 0xbc, 0x9b, 0x08, 0x81, 0xda, 0xcd, 0xab, - 0x9a, 0x18, 0x20, 0x33, 0x34, 0x24, 0x90, 0xfb, 0xbb, 0x9b, 0x10, 0x32, 0x81, 0x88, 0x51, 0x55, - 0x33, 0x02, 0xa8, 0x9a, 0x41, 0x55, 0x32, 0x11, 0x88, 0xbb, 0xcd, 0xcc, 0xaa, 0x09, 0x31, 0x43, - 0x81, 0xca, 0xaa, 0x18, 0x44, 0x22, 0xa0, 0xcb, 0x9a, 0x30, 0x46, 0x43, 0x34, 0x24, 0x13, 0xa0, - 0xdb, 0xbb, 0x9a, 0x08, 0x90, 0xa9, 0x9a, 0x41, 0x46, 0x22, 0x90, 0xaa, 0x18, 0x55, 0x35, 0x23, - 0x13, 0x81, 0xb9, 0xcd, 0xcb, 0x9b, 0x18, 0x43, 0x12, 0xc9, 0xbd, 0xbb, 0x8a, 0x88, 0xca, 0xce, - 0xcb, 0xaa, 0x89, 0x08, 0x31, 0x53, 0x33, 0x02, 0xd9, 0xcc, 0x9a, 0x09, 0x10, 0x00, 0x08, 0x51, - 0x44, 0x24, 0x12, 0x98, 0x89, 0x31, 0x46, 0x33, 0x22, 0x01, 0xa9, 0xce, 0xcc, 0xab, 0x8a, 0x20, - 0x33, 0x82, 0xba, 0x9d, 0x18, 0x43, 0x23, 0x91, 0xcb, 0x9a, 0x30, 0x45, 0x54, 0x63, 0x33, 0x14, - 0x81, 0xb9, 0xac, 0x9b, 0x88, 0x98, 0xbb, 0x9a, 0x51, 0x44, 0x22, 0x80, 0x9b, 0x28, 0x65, 0x43, - 0x33, 0x22, 0x22, 0x90, 0xeb, 0xcc, 0xab, 0x19, 0x32, 0x03, 0xd9, 0xcc, 0xaa, 0x89, 0x98, 0xdb, - 0xcd, 0xbb, 0xaa, 0x9a, 0x99, 0x18, 0x63, 0x34, 0x12, 0xa9, 0xcd, 0xaa, 0x08, 0x10, 0x98, 0x9a, - 0x40, 0x46, 0x24, 0x12, 0x98, 0x88, 0x41, 0x34, 0x24, 0x02, 0x01, 0x81, 0xc9, 0xce, 0xbc, 0x9b, - 0x28, 0x32, 0x01, 0xcb, 0xab, 0x38, 0x35, 0x14, 0xa8, 0xbc, 0x09, 0x41, 0x43, 0x32, 0x54, 0x45, - 0x33, 0x11, 0xa9, 0xbc, 0x8a, 0x08, 0x98, 0xcc, 0xab, 0x28, 0x36, 0x23, 0x91, 0xcb, 0x19, 0x54, - 0x34, 0x23, 0x12, 0x21, 0x12, 0xa8, 0xcf, 0xcb, 0x89, 0x31, 0x23, 0xc9, 0xcd, 0x9a, 0x08, 0x00, - 0xca, 0xdd, 0xab, 0x9b, 0x88, 0x98, 0x9a, 0x10, 0x45, 0x23, 0xa1, 0xcc, 0xbb, 0x19, 0x21, 0x90, - 0xcc, 0x0a, 0x64, 0x34, 0x12, 0x90, 0x9a, 0x38, 0x46, 0x33, 0x11, 0x88, 0x08, 0x90, 0xeb, 0xcd, - 0xab, 0x19, 0x32, 0x02, 0xda, 0xac, 0x19, 0x53, 0x23, 0x90, 0xbc, 0x9b, 0x40, 0x34, 0x23, 0x21, - 0x55, 0x34, 0x13, 0x90, 0xcb, 0x9b, 0x28, 0x01, 0xe9, 0xbc, 0x0b, 0x52, 0x24, 0x81, 0xb9, 0x9b, - 0x51, 0x36, 0x23, 0x81, 0x80, 0x11, 0x02, 0xd9, 0xcc, 0x9b, 0x21, 0x24, 0xa1, 0xce, 0xbb, 0x08, - 0x22, 0x90, 0xed, 0xbc, 0xaa, 0x08, 0x00, 0x98, 0x89, 0x30, 0x44, 0x01, 0xda, 0xac, 0x0a, 0x31, - 0x12, 0xda, 0xbb, 0x38, 0x57, 0x23, 0x81, 0xaa, 0x0a, 0x73, 0x43, 0x11, 0x88, 0x99, 0x80, 0x90, - 0xcc, 0xbc, 0x8b, 0x32, 0x24, 0xc8, 0xcc, 0x8b, 0x41, 0x34, 0x01, 0xca, 0xbb, 0x19, 0x63, 0x33, - 0x11, 0x21, 0x44, 0x24, 0x82, 0xc9, 0xab, 0x18, 0x42, 0x90, 0xec, 0xab, 0x10, 0x44, 0x13, 0xb8, - 0xcb, 0x18, 0x54, 0x24, 0x02, 0x88, 0x09, 0x00, 0x91, 0xda, 0xbb, 0x18, 0x35, 0x03, 0xfb, 0xbd, - 0x8a, 0x20, 0x13, 0xd8, 0xcd, 0xab, 0x89, 0x10, 0x81, 0x98, 0x09, 0x31, 0x23, 0xd8, 0xcd, 0x8b, - 0x30, 0x43, 0xa1, 0xcc, 0x8a, 0x61, 0x34, 0x02, 0xa8, 0xab, 0x40, 0x55, 0x22, 0x81, 0xa9, 0x99, - 0x88, 0xb8, 0xcc, 0xab, 0x30, 0x44, 0x91, 0xdc, 0xac, 0x18, 0x53, 0x23, 0xa8, 0xdb, 0x9a, 0x30, - 0x44, 0x22, 0x01, 0x31, 0x43, 0x13, 0xb9, 0xbd, 0x0a, 0x43, 0x14, 0xc9, 0xbd, 0x8a, 0x41, 0x34, - 0x81, 0xcb, 0x8b, 0x41, 0x36, 0x23, 0x91, 0x99, 0x89, 0x00, 0xa8, 0xbc, 0x8a, 0x54, 0x14, 0xb0, - 0xcf, 0x9b, 0x19, 0x32, 0x01, 0xec, 0xbc, 0x9a, 0x18, 0x11, 0x00, 0x99, 0x18, 0x21, 0xa0, 0xdd, - 0xac, 0x18, 0x53, 0x02, 0xb8, 0xad, 0x29, 0x44, 0x24, 0x91, 0xba, 0x0a, 0x54, 0x34, 0x12, 0x98, - 0xba, 0x99, 0x99, 0xca, 0xbb, 0x2a, 0x55, 0x03, 0xc9, 0xbe, 0x9b, 0x32, 0x36, 0x02, 0xca, 0xbb, - 0x09, 0x63, 0x33, 0x21, 0x01, 0x22, 0x33, 0x90, 0xcd, 0x9b, 0x40, 0x34, 0x81, 0xcc, 0xac, 0x18, - 0x53, 0x22, 0xa9, 0xad, 0x08, 0x54, 0x24, 0x02, 0xa8, 0x99, 0x09, 0x88, 0xa9, 0x9a, 0x52, 0x35, - 0x81, 0xec, 0xbc, 0x8a, 0x20, 0x23, 0xb0, 0xcf, 0xac, 0x89, 0x10, 0x02, 0x00, 0x88, 0x08, 0x80, - 0xdb, 0xbd, 0x89, 0x41, 0x24, 0x81, 0xca, 0x9a, 0x41, 0x35, 0x12, 0xb9, 0xbb, 0x51, 0x46, 0x23, - 0x81, 0xaa, 0xba, 0x9a, 0xa9, 0xba, 0x1a, 0x64, 0x33, 0xb1, 0xcf, 0xbb, 0x18, 0x63, 0x23, 0xa0, - 0xdb, 0xaa, 0x20, 0x44, 0x23, 0x22, 0x21, 0x11, 0x80, 0xdb, 0xac, 0x29, 0x63, 0x22, 0xa8, 0xcc, - 0x8a, 0x21, 0x25, 0x91, 0xca, 0x9b, 0x52, 0x45, 0x22, 0x00, 0x9a, 0xaa, 0x89, 0x99, 0x99, 0x31, - 0x47, 0x12, 0xc9, 0xbe, 0xac, 0x18, 0x31, 0x01, 0xeb, 0xcc, 0x9a, 0x08, 0x11, 0x02, 0x81, 0x80, - 0x98, 0xcb, 0xbe, 0x9b, 0x38, 0x44, 0x13, 0xb8, 0xbb, 0x19, 0x46, 0x33, 0x90, 0xca, 0x1a, 0x64, - 0x34, 0x12, 0x90, 0xba, 0xbb, 0xbb, 0xba, 0x89, 0x73, 0x25, 0x02, 0xea, 0xcb, 0x8b, 0x30, 0x35, - 0x02, 0xb9, 0xad, 0x0a, 0x42, 0x34, 0x33, 0x22, 0x12, 0x90, 0xca, 0xcc, 0x89, 0x41, 0x24, 0x82, - 0xc9, 0xab, 0x19, 0x44, 0x02, 0xb9, 0xbc, 0x28, 0x56, 0x34, 0x02, 0x90, 0xaa, 0xbb, 0xaa, 0x99, - 0x41, 0x45, 0x24, 0x90, 0xcd, 0xbc, 0x99, 0x20, 0x22, 0xa8, 0xce, 0xbb, 0x9b, 0x10, 0x32, 0x22, - 0x01, 0x98, 0xdc, 0xcc, 0xbb, 0x09, 0x42, 0x24, 0x01, 0xa9, 0x8a, 0x41, 0x34, 0x02, 0xc9, 0x9a, - 0x72, 0x54, 0x22, 0x82, 0xa8, 0xbb, 0xad, 0xaa, 0x89, 0x32, 0x46, 0x12, 0xb8, 0xcd, 0xab, 0x18, - 0x42, 0x33, 0x90, 0xdb, 0x9b, 0x28, 0x44, 0x34, 0x24, 0x22, 0x80, 0xb9, 0xbd, 0x9b, 0x20, 0x45, - 0x12, 0x98, 0xaa, 0x09, 0x31, 0x33, 0xb0, 0xbe, 0x8a, 0x55, 0x45, 0x22, 0x00, 0x98, 0xbb, 0xbc, - 0xab, 0x28, 0x55, 0x33, 0x03, 0xeb, 0xbc, 0x9c, 0x08, 0x20, 0x80, 0xdb, 0xbc, 0xab, 0x89, 0x11, - 0x33, 0x33, 0x82, 0xfb, 0xcd, 0xbb, 0x8a, 0x21, 0x34, 0x12, 0x98, 0x89, 0x21, 0x35, 0x12, 0xb8, - 0xbb, 0x51, 0x47, 0x34, 0x22, 0x00, 0xaa, 0xcd, 0xbb, 0x9b, 0x20, 0x55, 0x23, 0x81, 0xbc, 0xad, - 0x8a, 0x21, 0x32, 0x01, 0xc9, 0xab, 0x0a, 0x52, 0x54, 0x53, 0x32, 0x11, 0xa9, 0xcc, 0xab, 0x18, - 0x42, 0x23, 0x01, 0x99, 0x08, 0x31, 0x23, 0xb8, 0xbf, 0x8a, 0x62, 0x45, 0x33, 0x12, 0x01, 0xc9, - 0xcc, 0xbb, 0x8a, 0x52, 0x35, 0x23, 0xb8, 0xcd, 0xbb, 0x89, 0x00, 0x00, 0xca, 0xcc, 0xab, 0x9b, - 0x09, 0x30, 0x44, 0x14, 0xa1, 0xdc, 0xbd, 0x9a, 0x18, 0x22, 0x13, 0x81, 0x08, 0x32, 0x34, 0x82, - 0xca, 0x9c, 0x38, 0x47, 0x43, 0x22, 0x11, 0x98, 0xda, 0xcc, 0xbb, 0x09, 0x53, 0x25, 0x02, 0xc8, - 0xbb, 0x9b, 0x28, 0x32, 0x02, 0xb9, 0xbb, 0x8a, 0x41, 0x45, 0x45, 0x35, 0x23, 0x91, 0xdb, 0xbc, - 0x8a, 0x31, 0x43, 0x11, 0x98, 0x00, 0x32, 0x14, 0xa8, 0xcd, 0x8a, 0x31, 0x46, 0x32, 0x12, 0x11, - 0x90, 0xea, 0xcc, 0xab, 0x28, 0x54, 0x14, 0x81, 0xca, 0xbb, 0x9a, 0x00, 0x80, 0xca, 0xcc, 0xaa, - 0xa9, 0x98, 0x09, 0x42, 0x35, 0x13, 0xf9, 0xcc, 0xab, 0x0a, 0x31, 0x32, 0x00, 0x88, 0x41, 0x34, - 0x12, 0xb9, 0xae, 0x09, 0x44, 0x34, 0x22, 0x01, 0x10, 0x98, 0xec, 0xcc, 0x9a, 0x38, 0x54, 0x22, - 0x90, 0xcb, 0x9b, 0x08, 0x22, 0x81, 0xb9, 0x9c, 0x18, 0x32, 0x33, 0x54, 0x55, 0x34, 0x12, 0xb9, - 0xcd, 0x9b, 0x18, 0x33, 0x12, 0x90, 0x08, 0x53, 0x24, 0x92, 0xeb, 0xab, 0x28, 0x54, 0x23, 0x12, - 0x00, 0x10, 0xa0, 0xec, 0xbc, 0x9a, 0x42, 0x36, 0x12, 0xb9, 0xbc, 0xab, 0x08, 0x80, 0xc9, 0xbd, - 0xab, 0x89, 0x88, 0xa9, 0x09, 0x54, 0x25, 0x92, 0xec, 0xac, 0x9b, 0x10, 0x22, 0x01, 0x88, 0x20, - 0x45, 0x23, 0x90, 0xbd, 0x9b, 0x41, 0x45, 0x12, 0x01, 0x08, 0x88, 0xa8, 0xdd, 0xcb, 0x09, 0x52, - 0x24, 0x02, 0xc9, 0xba, 0x89, 0x31, 0x11, 0xc9, 0xbb, 0x09, 0x43, 0x24, 0x11, 0x52, 0x45, 0x24, - 0x81, 0xdb, 0xcb, 0x89, 0x30, 0x22, 0x81, 0x88, 0x41, 0x35, 0x13, 0xc9, 0xbd, 0x0a, 0x42, 0x25, - 0x12, 0x80, 0x08, 0x00, 0xb8, 0xce, 0xbb, 0x29, 0x55, 0x23, 0x91, 0xdb, 0xab, 0x09, 0x01, 0xa8, - 0xdd, 0xab, 0x89, 0x10, 0x80, 0x99, 0x18, 0x54, 0x23, 0xd8, 0xce, 0xab, 0x89, 0x22, 0x02, 0x80, - 0x09, 0x63, 0x34, 0x02, 0xca, 0xac, 0x19, 0x63, 0x33, 0x01, 0x98, 0x88, 0x80, 0xc9, 0xce, 0xaa, - 0x20, 0x45, 0x23, 0xa0, 0xcb, 0x9a, 0x20, 0x23, 0xb0, 0xbe, 0x9b, 0x40, 0x43, 0x13, 0x10, 0x52, - 0x44, 0x13, 0xb8, 0xdd, 0xaa, 0x18, 0x32, 0x11, 0x89, 0x28, 0x55, 0x33, 0x91, 0xeb, 0xab, 0x28, - 0x54, 0x13, 0x81, 0x98, 0x08, 0x88, 0xd9, 0xbc, 0x9b, 0x51, 0x35, 0x03, 0xb9, 0xbd, 0x8a, 0x10, - 0x80, 0xfb, 0xbc, 0x9a, 0x18, 0x12, 0x90, 0x99, 0x30, 0x35, 0x02, 0xed, 0xad, 0x9b, 0x18, 0x12, - 0x81, 0x89, 0x31, 0x47, 0x13, 0x90, 0xcc, 0x9a, 0x30, 0x35, 0x23, 0x90, 0x99, 0x89, 0x98, 0xeb, - 0xbc, 0x0a, 0x73, 0x43, 0x01, 0xb9, 0xbb, 0x18, 0x43, 0x82, 0xeb, 0xac, 0x19, 0x42, 0x24, 0x10, - 0x00, 0x43, 0x43, 0x82, 0xeb, 0xac, 0x8a, 0x11, 0x13, 0x80, 0x09, 0x63, 0x35, 0x13, 0xc8, 0xbc, - 0x8a, 0x42, 0x35, 0x02, 0x98, 0x99, 0x89, 0x90, 0xeb, 0xbb, 0x18, 0x55, 0x23, 0x90, 0xcc, 0xaa, - 0x00, 0x02, 0xc8, 0xce, 0xab, 0x89, 0x22, 0x12, 0x98, 0x09, 0x31, 0x24, 0xd9, 0xde, 0xba, 0x89, - 0x11, 0x11, 0x99, 0x18, 0x55, 0x34, 0x01, 0xc9, 0xcb, 0x19, 0x52, 0x33, 0x82, 0xa9, 0x9a, 0x89, - 0xa9, 0xcc, 0x9b, 0x50, 0x45, 0x12, 0xa0, 0xcb, 0x09, 0x32, 0x24, 0xb9, 0xbf, 0xab, 0x21, 0x45, - 0x22, 0x10, 0x20, 0x32, 0x14, 0xc8, 0xcc, 0xab, 0x18, 0x21, 0x82, 0x89, 0x40, 0x47, 0x24, 0x81, - 0xbb, 0xac, 0x18, 0x54, 0x22, 0x81, 0xa9, 0x99, 0x99, 0xa9, 0xdb, 0x8a, 0x53, 0x44, 0x01, 0xca, - 0xbb, 0x0a, 0x22, 0x91, 0xdf, 0xbc, 0xaa, 0x10, 0x22, 0x12, 0x88, 0x18, 0x11, 0xa0, 0xdf, 0xbc, - 0xaa, 0x00, 0x01, 0x98, 0x09, 0x72, 0x35, 0x33, 0x90, 0xbd, 0x9b, 0x30, 0x36, 0x23, 0x90, 0xba, - 0xaa, 0x9a, 0xcb, 0xab, 0x38, 0x47, 0x24, 0x81, 0xab, 0x9b, 0x41, 0x25, 0x81, 0xdc, 0xac, 0x09, - 0x32, 0x35, 0x22, 0x11, 0x21, 0x12, 0xa0, 0xdc, 0xac, 0x8a, 0x11, 0x81, 0x98, 0x39, 0x57, 0x34, - 0x13, 0xa8, 0xbc, 0x8b, 0x52, 0x34, 0x12, 0x90, 0xab, 0xab, 0xbb, 0xcb, 0x8a, 0x52, 0x35, 0x03, - 0xc9, 0xbd, 0x8a, 0x21, 0x12, 0xfa, 0xce, 0xba, 0x09, 0x20, 0x22, 0x11, 0x81, 0x00, 0xa8, 0xdc, - 0xbd, 0xab, 0x89, 0x00, 0xa0, 0x9a, 0x41, 0x57, 0x33, 0x02, 0xb9, 0xbc, 0x09, 0x44, 0x43, 0x01, - 0xa8, 0xbb, 0xbb, 0xbb, 0x9b, 0x48, 0x46, 0x33, 0x82, 0xca, 0x9b, 0x30, 0x37, 0x03, 0xd9, 0xcc, - 0x9a, 0x28, 0x53, 0x33, 0x23, 0x22, 0x01, 0xa0, 0xcc, 0xbb, 0x8b, 0x10, 0x80, 0xbb, 0x0b, 0x67, - 0x35, 0x24, 0x81, 0xaa, 0x9b, 0x38, 0x45, 0x23, 0x01, 0xb9, 0xcb, 0xac, 0xbb, 0x89, 0x42, 0x35, - 0x12, 0xc9, 0xcc, 0x8a, 0x10, 0x23, 0xc0, 0xcf, 0xcb, 0xaa, 0x18, 0x21, 0x23, 0x13, 0x01, 0xa9, - 0xcd, 0xad, 0x9b, 0x09, 0x08, 0xa9, 0xcb, 0x19, 0x55, 0x35, 0x22, 0x98, 0xba, 0x8a, 0x41, 0x44, - 0x12, 0x90, 0xb9, 0xbd, 0xcb, 0xaa, 0x28, 0x45, 0x33, 0x02, 0xca, 0xab, 0x30, 0x55, 0x13, 0xa0, - 0xcd, 0xab, 0x89, 0x42, 0x43, 0x34, 0x32, 0x02, 0xa8, 0xdb, 0xbb, 0x89, 0x21, 0x01, 0xdb, 0xab, - 0x40, 0x47, 0x24, 0x02, 0x98, 0x99, 0x18, 0x42, 0x24, 0x11, 0x90, 0xba, 0xbe, 0xbc, 0x9b, 0x40, - 0x44, 0x22, 0xb8, 0xbd, 0xab, 0x20, 0x33, 0x92, 0xde, 0xbd, 0xba, 0x89, 0x10, 0x32, 0x34, 0x23, - 0x90, 0xdc, 0xcc, 0x9a, 0x09, 0x11, 0x98, 0xbc, 0x9b, 0x52, 0x35, 0x24, 0x81, 0xa9, 0x89, 0x30, - 0x43, 0x13, 0x81, 0xa8, 0xcd, 0xbd, 0xbc, 0x09, 0x53, 0x35, 0x02, 0xa9, 0xac, 0x09, 0x63, 0x23, - 0x82, 0xcb, 0xbc, 0x9a, 0x10, 0x43, 0x44, 0x34, 0x22, 0x91, 0xcb, 0xbc, 0x8a, 0x21, 0x12, 0xb8, - 0xbe, 0x09, 0x73, 0x24, 0x13, 0x80, 0x99, 0x10, 0x43, 0x32, 0x01, 0x80, 0xa8, 0xec, 0xcc, 0xbb, - 0x18, 0x73, 0x23, 0x90, 0xdb, 0xbb, 0x08, 0x43, 0x12, 0xd9, 0xcc, 0xbb, 0x9a, 0x08, 0x20, 0x43, - 0x44, 0x02, 0xb8, 0xce, 0xba, 0x09, 0x21, 0x81, 0xc9, 0xac, 0x19, 0x63, 0x33, 0x02, 0xa8, 0x89, - 0x31, 0x35, 0x11, 0x98, 0x8a, 0xba, 0xde, 0xcc, 0x9a, 0x30, 0x45, 0x23, 0x90, 0xbc, 0x8b, 0x42, - 0x35, 0x12, 0xb8, 0xcc, 0x9a, 0x08, 0x21, 0x43, 0x54, 0x33, 0x03, 0xb9, 0xbf, 0x9a, 0x28, 0x22, - 0x82, 0xdb, 0xab, 0x30, 0x46, 0x23, 0x01, 0x89, 0x28, 0x53, 0x23, 0x81, 0x98, 0x89, 0xa9, 0xcf, - 0xcc, 0x8a, 0x31, 0x45, 0x02, 0xc9, 0xac, 0x8a, 0x30, 0x33, 0x90, 0xdd, 0xbb, 0x9b, 0x89, 0x00, - 0x20, 0x45, 0x24, 0x81, 0xeb, 0xbc, 0x8a, 0x28, 0x22, 0x90, 0xbd, 0x8b, 0x40, 0x44, 0x12, 0x98, - 0x99, 0x21, 0x44, 0x12, 0xa8, 0xaa, 0x99, 0xb9, 0xcf, 0xbc, 0x09, 0x63, 0x34, 0x02, 0xba, 0xad, - 0x18, 0x53, 0x33, 0x80, 0xcb, 0xab, 0x09, 0x11, 0x22, 0x63, 0x45, 0x23, 0x91, 0xeb, 0xbb, 0x8a, - 0x32, 0x14, 0xb0, 0xbc, 0x0a, 0x63, 0x24, 0x02, 0x98, 0x08, 0x53, 0x43, 0x02, 0xa8, 0x99, 0x89, - 0xc9, 0xcd, 0xac, 0x19, 0x44, 0x24, 0xa0, 0xeb, 0xaa, 0x18, 0x32, 0x03, 0xd9, 0xbc, 0xab, 0x89, - 0x80, 0x08, 0x41, 0x45, 0x13, 0xa8, 0xbf, 0xac, 0x88, 0x22, 0x12, 0xc9, 0xbb, 0x19, 0x63, 0x23, - 0x80, 0x9a, 0x29, 0x64, 0x23, 0x91, 0xba, 0xab, 0xa9, 0xca, 0xce, 0x9b, 0x30, 0x37, 0x14, 0xa0, - 0xcb, 0x8a, 0x41, 0x34, 0x12, 0xa9, 0xac, 0x8a, 0x10, 0x12, 0x21, 0x45, 0x35, 0x13, 0xc8, 0xcd, - 0x9a, 0x18, 0x23, 0x02, 0xba, 0x9d, 0x28, 0x35, 0x23, 0x80, 0x89, 0x51, 0x45, 0x22, 0x90, 0xaa, - 0x9a, 0x98, 0xda, 0xcc, 0x8b, 0x50, 0x34, 0x02, 0xd9, 0xbc, 0x8a, 0x21, 0x24, 0x90, 0xcc, 0xab, - 0x8a, 0x08, 0x08, 0x08, 0x63, 0x34, 0x02, 0xeb, 0xbd, 0x9a, 0x20, 0x22, 0x81, 0xbc, 0x9b, 0x40, - 0x34, 0x02, 0xa9, 0x8a, 0x72, 0x44, 0x11, 0x99, 0xbb, 0xaa, 0x99, 0xdb, 0xad, 0x0a, 0x54, 0x43, - 0x02, 0xba, 0xbc, 0x18, 0x44, 0x14, 0x91, 0xb9, 0x9a, 0x18, 0x21, 0x11, 0x41, 0x55, 0x33, 0x82, - 0xdc, 0xbc, 0x89, 0x21, 0x23, 0x90, 0xbc, 0x0a, 0x62, 0x33, 0x02, 0xa9, 0x38, 0x56, 0x24, 0x02, - 0xa8, 0xba, 0x99, 0xa9, 0xdc, 0xbb, 0x19, 0x55, 0x23, 0xa0, 0xdc, 0xab, 0x18, 0x32, 0x03, 0xd9, - 0xbc, 0xaa, 0x08, 0x80, 0x88, 0x21, 0x55, 0x33, 0xb0, 0xcf, 0xbb, 0x09, 0x22, 0x13, 0xb8, 0xbc, - 0x19, 0x53, 0x13, 0xa0, 0xbb, 0x58, 0x46, 0x33, 0x81, 0xcb, 0xbb, 0xaa, 0xaa, 0xcc, 0x9b, 0x50, - 0x45, 0x13, 0xa0, 0xdb, 0x99, 0x41, 0x43, 0x12, 0xa9, 0xba, 0x09, 0x31, 0x22, 0x21, 0x54, 0x35, - 0x23, 0xc8, 0xce, 0xaa, 0x08, 0x32, 0x02, 0xb8, 0xaa, 0x30, 0x36, 0x23, 0xa8, 0x0a, 0x74, 0x35, - 0x33, 0x90, 0xba, 0xbb, 0xaa, 0xcb, 0xbc, 0x9b, 0x62, 0x25, 0x02, 0xca, 0xbd, 0x99, 0x21, 0x22, - 0xa1, 0xcd, 0xab, 0x89, 0x00, 0x00, 0x08, 0x52, 0x34, 0x03, 0xfb, 0xbd, 0x9b, 0x10, 0x32, 0x81, - 0xba, 0x9b, 0x41, 0x34, 0x91, 0xcb, 0x0a, 0x65, 0x44, 0x02, 0x98, 0xcb, 0xba, 0xa9, 0xba, 0xbb, - 0x18, 0x56, 0x24, 0x01, 0xb9, 0x9c, 0x29, 0x44, 0x23, 0x80, 0xba, 0x8b, 0x21, 0x34, 0x22, 0x41, - 0x44, 0x24, 0x92, 0xdc, 0xbc, 0x9a, 0x11, 0x23, 0x80, 0x9a, 0x19, 0x54, 0x23, 0x80, 0xaa, 0x61, - 0x47, 0x33, 0x03, 0x98, 0xcb, 0xba, 0xba, 0xcb, 0xaa, 0x30, 0x55, 0x22, 0xb8, 0xdc, 0xab, 0x08, - 0x22, 0x82, 0xda, 0xbc, 0x9a, 0x00, 0x01, 0x08, 0x31, 0x44, 0x14, 0xb0, 0xcf, 0xbb, 0x8a, 0x21, - 0x11, 0x98, 0x99, 0x21, 0x44, 0x91, 0xeb, 0x9b, 0x51, 0x46, 0x23, 0x01, 0xba, 0xbc, 0xbc, 0xba, - 0xaa, 0x09, 0x62, 0x44, 0x02, 0x98, 0xab, 0x0a, 0x53, 0x34, 0x11, 0x99, 0x9b, 0x28, 0x43, 0x33, - 0x42, 0x53, 0x43, 0x02, 0xda, 0xcd, 0xaa, 0x88, 0x21, 0x00, 0x88, 0x20, 0x53, 0x24, 0x90, 0xba, - 0x28, 0x77, 0x34, 0x23, 0x00, 0xa9, 0xcb, 0xbb, 0xcb, 0x9a, 0x18, 0x34, 0x24, 0x90, 0xdc, 0xab, - 0x89, 0x20, 0x01, 0xca, 0xcc, 0x9b, 0x09, 0x01, 0x11, 0x21, 0x53, 0x23, 0xb8, 0xdf, 0xbb, 0xab, - 0x00, 0x01, 0x88, 0x09, 0x42, 0x34, 0x82, 0xec, 0xac, 0x28, 0x64, 0x34, 0x12, 0x98, 0xca, 0xdb, - 0xba, 0xba, 0x09, 0x31, 0x36, 0x22, 0x90, 0xba, 0x0a, 0x52, 0x44, 0x11, 0x98, 0x9a, 0x18, 0x53, - 0x33, 0x42, 0x33, 0x24, 0x02, 0xda, 0xcd, 0xaa, 0x89, 0x08, 0x88, 0x89, 0x31, 0x37, 0x24, 0x91, - 0xbb, 0x0c, 0x73, 0x45, 0x33, 0x12, 0x80, 0xba, 0xcc, 0xbb, 0x9c, 0x09, 0x42, 0x23, 0x81, 0xcc, - 0xbb, 0x8a, 0x10, 0x01, 0xda, 0xbd, 0xaa, 0x09, 0x20, 0x11, 0x21, 0x35, 0x23, 0xb0, 0xdf, 0xbb, - 0x9a, 0x08, 0x80, 0xaa, 0x8b, 0x54, 0x35, 0x12, 0xda, 0xbd, 0x89, 0x42, 0x45, 0x22, 0x01, 0x99, - 0xdb, 0xbc, 0xcb, 0x8a, 0x10, 0x34, 0x14, 0x91, 0xaa, 0x8a, 0x42, 0x34, 0x12, 0xa8, 0xaa, 0x28, - 0x44, 0x34, 0x32, 0x43, 0x24, 0x02, 0xd9, 0xcc, 0x9b, 0x89, 0x01, 0xa8, 0xbb, 0x2a, 0x57, 0x33, - 0x02, 0xca, 0xac, 0x20, 0x46, 0x34, 0x23, 0x01, 0x98, 0xca, 0xcc, 0xbb, 0x8a, 0x31, 0x34, 0x83, - 0xda, 0xbc, 0x8a, 0x20, 0x02, 0xc9, 0xcd, 0xaa, 0x08, 0x11, 0x12, 0x11, 0x33, 0x25, 0x90, 0xdd, - 0xac, 0x8a, 0x10, 0x01, 0xc8, 0xbb, 0x28, 0x47, 0x13, 0xa0, 0xdc, 0xaa, 0x20, 0x44, 0x33, 0x12, - 0x80, 0xba, 0xdd, 0xbc, 0xbb, 0x09, 0x53, 0x33, 0x82, 0xc9, 0xaa, 0x40, 0x34, 0x23, 0xa8, 0xcb, - 0x09, 0x43, 0x44, 0x12, 0x22, 0x43, 0x12, 0xb8, 0xde, 0xba, 0x08, 0x21, 0x91, 0xcb, 0x9c, 0x40, - 0x35, 0x14, 0x98, 0xac, 0x8a, 0x53, 0x35, 0x33, 0x11, 0x00, 0xa8, 0xcc, 0xbd, 0xab, 0x18, 0x53, - 0x22, 0xb8, 0xbd, 0xab, 0x10, 0x33, 0xa0, 0xce, 0xac, 0x89, 0x21, 0x21, 0x11, 0x31, 0x53, 0x82, - 0xea, 0xbd, 0xaa, 0x20, 0x23, 0xa1, 0xcc, 0x9b, 0x52, 0x35, 0x02, 0xca, 0xad, 0x0a, 0x32, 0x35, - 0x12, 0x81, 0x98, 0xba, 0xcf, 0xcb, 0x9a, 0x20, 0x44, 0x12, 0xa9, 0xab, 0x09, 0x54, 0x23, 0x81, - 0xca, 0x9a, 0x30, 0x35, 0x33, 0x22, 0x42, 0x33, 0x91, 0xed, 0xac, 0x8a, 0x20, 0x13, 0xb8, 0xbd, - 0x0a, 0x73, 0x43, 0x81, 0xb9, 0x9c, 0x28, 0x54, 0x33, 0x22, 0x01, 0x80, 0xa9, 0xce, 0xcb, 0x9a, - 0x41, 0x33, 0x91, 0xeb, 0xbb, 0x09, 0x32, 0x13, 0xfa, 0xdb, 0x8a, 0x18, 0x22, 0x02, 0x11, 0x32, - 0x14, 0xb0, 0xcf, 0xac, 0x08, 0x31, 0x13, 0xc9, 0xcb, 0x08, 0x54, 0x32, 0xa0, 0xcc, 0xaa, 0x28, - 0x34, 0x14, 0x01, 0x88, 0x99, 0xda, 0xdc, 0xbb, 0x09, 0x43, 0x34, 0x80, 0xcb, 0x9a, 0x31, 0x36, - 0x13, 0xb9, 0xbc, 0x09, 0x53, 0x24, 0x22, 0x21, 0x23, 0x13, 0xea, 0xcd, 0x9b, 0x19, 0x33, 0x82, - 0xda, 0x9c, 0x28, 0x54, 0x13, 0xa0, 0xcb, 0x8a, 0x52, 0x34, 0x23, 0x10, 0x00, 0x80, 0xca, 0xce, - 0xaa, 0x19, 0x43, 0x23, 0xc9, 0xbd, 0x9a, 0x20, 0x33, 0xa1, 0xde, 0xab, 0x89, 0x31, 0x23, 0x12, - 0x32, 0x43, 0x82, 0xec, 0xbd, 0x9a, 0x30, 0x43, 0x81, 0xda, 0x9a, 0x30, 0x36, 0x02, 0xc9, 0xac, - 0x8a, 0x32, 0x25, 0x02, 0x88, 0x98, 0xa9, 0xec, 0xbc, 0x9b, 0x20, 0x45, 0x02, 0xb8, 0xac, 0x19, - 0x44, 0x33, 0x91, 0xcb, 0xab, 0x30, 0x45, 0x23, 0x22, 0x23, 0x23, 0xa0, 0xcf, 0xbc, 0x8a, 0x21, - 0x14, 0x90, 0xbc, 0x8b, 0x62, 0x43, 0x02, 0xaa, 0xac, 0x28, 0x54, 0x23, 0x02, 0x00, 0x01, 0xa8, - 0xfb, 0xbc, 0x8a, 0x31, 0x34, 0x91, 0xdc, 0xac, 0x08, 0x31, 0x12, 0xca, 0xbe, 0x9b, 0x10, 0x32, - 0x33, 0x22, 0x43, 0x12, 0xc8, 0xcf, 0xab, 0x09, 0x42, 0x23, 0xa8, 0xbc, 0x09, 0x73, 0x23, 0x80, - 0xbc, 0xac, 0x10, 0x43, 0x13, 0x80, 0x98, 0x99, 0xda, 0xcd, 0xac, 0x89, 0x42, 0x24, 0x80, 0xdb, - 0x9a, 0x31, 0x45, 0x02, 0xa8, 0xbb, 0x0a, 0x52, 0x34, 0x23, 0x32, 0x33, 0x82, 0xfa, 0xbd, 0x9c, - 0x19, 0x22, 0x12, 0xba, 0xbc, 0x28, 0x55, 0x13, 0x90, 0xba, 0x0b, 0x63, 0x34, 0x23, 0x81, 0x00, - 0x80, 0xc9, 0xcd, 0xbb, 0x18, 0x63, 0x02, 0xc9, 0xcc, 0x9a, 0x20, 0x23, 0x91, 0xdd, 0xbb, 0x8a, - 0x31, 0x33, 0x24, 0x33, 0x33, 0x91, 0xde, 0xcc, 0x9a, 0x20, 0x23, 0x02, 0xc9, 0xaa, 0x31, 0x45, - 0x12, 0xb9, 0xbd, 0x89, 0x42, 0x23, 0x82, 0xa8, 0x9a, 0xca, 0xdc, 0xcc, 0x9a, 0x20, 0x25, 0x02, - 0xc9, 0xbb, 0x29, 0x55, 0x23, 0x81, 0xca, 0xab, 0x20, 0x44, 0x34, 0x32, 0x33, 0x22, 0xb8, 0xdf, - 0xbb, 0x8a, 0x30, 0x32, 0x90, 0xdb, 0x8a, 0x42, 0x35, 0x02, 0xa9, 0xaa, 0x30, 0x37, 0x24, 0x01, - 0x00, 0x00, 0x98, 0xeb, 0xac, 0x9a, 0x32, 0x24, 0xa0, 0xcf, 0xab, 0x19, 0x22, 0x03, 0xda, 0xcd, - 0x9a, 0x19, 0x22, 0x43, 0x32, 0x33, 0x03, 0xda, 0xce, 0xab, 0x09, 0x32, 0x23, 0xa0, 0xbb, 0x19, - 0x55, 0x23, 0x91, 0xdb, 0x9b, 0x20, 0x53, 0x11, 0x88, 0xaa, 0xaa, 0xdc, 0xcc, 0xbb, 0x19, 0x53, - 0x23, 0xb8, 0xcd, 0x8a, 0x51, 0x34, 0x12, 0xa8, 0xcb, 0x89, 0x42, 0x44, 0x33, 0x43, 0x23, 0x81, - 0xeb, 0xcc, 0xaa, 0x08, 0x11, 0x02, 0x99, 0xaa, 0x20, 0x45, 0x23, 0x90, 0x9a, 0x28, 0x65, 0x33, - 0x13, 0x01, 0x80, 0x90, 0xca, 0xbd, 0x9c, 0x30, 0x43, 0x91, 0xce, 0xad, 0x8a, 0x10, 0x22, 0xb0, - 0xcd, 0xac, 0x8a, 0x10, 0x42, 0x43, 0x43, 0x12, 0x90, 0xdc, 0xbc, 0x99, 0x28, 0x22, 0x02, 0x98, - 0x08, 0x41, 0x43, 0x81, 0xba, 0xac, 0x20, 0x54, 0x02, 0xa0, 0xba, 0xbc, 0xdb, 0xeb, 0xba, 0x09, - 0x42, 0x23, 0xb0, 0xce, 0x9a, 0x20, 0x45, 0x33, 0x80, 0xba, 0xaa, 0x30, 0x45, 0x35, 0x44, 0x32, - 0x02, 0xb9, 0xcd, 0xac, 0x89, 0x00, 0x11, 0x90, 0x98, 0x18, 0x42, 0x33, 0x80, 0x99, 0x40, 0x55, - 0x34, 0x02, 0x01, 0x00, 0x08, 0xa9, 0xbd, 0x9c, 0x30, 0x34, 0x92, 0xde, 0xad, 0x9b, 0x00, 0x12, - 0x90, 0xcc, 0xbc, 0xaa, 0x09, 0x22, 0x44, 0x35, 0x24, 0x81, 0xca, 0xcc, 0x9b, 0x08, 0x11, 0x02, - 0x80, 0x18, 0x42, 0x43, 0x01, 0xba, 0xac, 0x20, 0x35, 0x12, 0xb9, 0xbc, 0xcb, 0xcb, 0xcc, 0xac, - 0x0a, 0x41, 0x33, 0x90, 0xce, 0x9b, 0x18, 0x44, 0x33, 0x82, 0xa9, 0x89, 0x30, 0x54, 0x43, 0x45, - 0x43, 0x13, 0x91, 0xeb, 0xbb, 0xab, 0x08, 0x00, 0x90, 0x89, 0x21, 0x35, 0x23, 0xa0, 0xbb, 0x48, - 0x57, 0x33, 0x22, 0x08, 0x08, 0x80, 0x99, 0xcc, 0xab, 0x40, 0x36, 0x02, 0xfa, 0xbc, 0xab, 0x08, - 0x21, 0x90, 0xea, 0xbb, 0xab, 0x89, 0x00, 0x41, 0x55, 0x34, 0x23, 0xa8, 0xcd, 0xac, 0x88, 0x00, - 0x01, 0x88, 0x10, 0x53, 0x33, 0x91, 0xda, 0xab, 0x38, 0x45, 0x22, 0x98, 0xbc, 0xba, 0xbb, 0xcc, - 0xac, 0x8a, 0x51, 0x34, 0x81, 0xcc, 0xac, 0x09, 0x33, 0x25, 0x82, 0xa8, 0x89, 0x20, 0x43, 0x33, - 0x45, 0x45, 0x24, 0x02, 0xb9, 0xbd, 0xab, 0x89, 0x00, 0x98, 0x9a, 0x20, 0x45, 0x33, 0xa0, 0xbc, - 0x0a, 0x64, 0x34, 0x13, 0x80, 0x99, 0x08, 0x88, 0xca, 0xbb, 0x38, 0x57, 0x13, 0xc0, 0xbd, 0xac, - 0x09, 0x20, 0x81, 0xda, 0xcb, 0x9a, 0x08, 0x00, 0x00, 0x41, 0x46, 0x33, 0x82, 0xeb, 0xbb, 0x9a, - 0x10, 0x11, 0xa9, 0x89, 0x73, 0x34, 0x13, 0xb9, 0xbd, 0x0a, 0x62, 0x23, 0x81, 0xbb, 0xbc, 0xaa, - 0xca, 0xbc, 0xab, 0x30, 0x47, 0x12, 0xb9, 0xbe, 0x8a, 0x31, 0x34, 0x02, 0xa9, 0xab, 0x38, 0x45, - 0x23, 0x21, 0x54, 0x44, 0x22, 0x90, 0xdb, 0xbb, 0x8a, 0x00, 0x98, 0xbc, 0x89, 0x63, 0x34, 0x02, - 0xca, 0xbb, 0x30, 0x47, 0x23, 0x81, 0xa8, 0x89, 0x08, 0xa8, 0xbb, 0x0b, 0x56, 0x44, 0x81, 0xda, - 0xbc, 0x9a, 0x11, 0x12, 0xa9, 0xbe, 0xab, 0x09, 0x21, 0x00, 0x08, 0x73, 0x34, 0x14, 0xa8, 0xcc, - 0x9b, 0x08, 0x11, 0x90, 0xbb, 0x38, 0x57, 0x33, 0x90, 0xdb, 0xab, 0x30, 0x35, 0x14, 0xa8, 0xcb, - 0xab, 0x9a, 0xbb, 0xad, 0x19, 0x54, 0x33, 0x91, 0xcd, 0xbb, 0x29, 0x53, 0x23, 0x98, 0xba, 0x8a, - 0x53, 0x34, 0x12, 0x21, 0x45, 0x34, 0x02, 0xc9, 0xcc, 0x8a, 0x08, 0x80, 0xb9, 0x9c, 0x28, 0x55, - 0x22, 0xa0, 0xbc, 0x0a, 0x62, 0x34, 0x12, 0x88, 0x9a, 0x8a, 0x98, 0xb9, 0xaa, 0x62, 0x46, 0x22, - 0xb8, 0xce, 0xaa, 0x08, 0x12, 0x81, 0xdb, 0xac, 0x8a, 0x20, 0x21, 0x80, 0x10, 0x54, 0x33, 0x82, - 0xcc, 0xbc, 0x09, 0x21, 0x01, 0xcb, 0x9b, 0x63, 0x36, 0x12, 0xa9, 0xbd, 0x09, 0x42, 0x24, 0x81, - 0xba, 0xbc, 0xaa, 0xba, 0xdb, 0x9a, 0x51, 0x44, 0x12, 0xb9, 0xbe, 0x9a, 0x31, 0x34, 0x82, 0xc9, - 0x9b, 0x20, 0x35, 0x24, 0x11, 0x31, 0x44, 0x23, 0x90, 0xcd, 0xab, 0x08, 0x10, 0xa8, 0xbe, 0x8a, - 0x52, 0x34, 0x03, 0xda, 0xab, 0x28, 0x45, 0x24, 0x81, 0xa8, 0x99, 0x99, 0x98, 0xab, 0x29, 0x56, - 0x34, 0x82, 0xeb, 0xac, 0x8a, 0x10, 0x12, 0xb8, 0xbe, 0xab, 0x08, 0x22, 0x12, 0x80, 0x41, 0x44, - 0x13, 0xb8, 0xcd, 0x8b, 0x10, 0x22, 0xa8, 0xbd, 0x29, 0x56, 0x33, 0x81, 0xcc, 0xaa, 0x28, 0x35, - 0x23, 0x98, 0xcc, 0xab, 0xab, 0xbb, 0xbb, 0x28, 0x47, 0x24, 0x91, 0xeb, 0xba, 0x18, 0x42, 0x22, - 0xa0, 0xcb, 0x89, 0x52, 0x43, 0x12, 0x21, 0x32, 0x34, 0x02, 0xda, 0xbc, 0x9a, 0x11, 0x91, 0xeb, - 0xac, 0x18, 0x54, 0x23, 0xa0, 0xdb, 0x8a, 0x41, 0x35, 0x13, 0x80, 0xaa, 0xab, 0xa9, 0xba, 0x8a, - 0x73, 0x37, 0x12, 0xb0, 0xcd, 0xab, 0x08, 0x21, 0x81, 0xfb, 0xbb, 0x89, 0x20, 0x22, 0x02, 0x11, - 0x42, 0x33, 0xa1, 0xdd, 0xab, 0x18, 0x33, 0x82, 0xcd, 0x9b, 0x51, 0x36, 0x13, 0xa8, 0xbd, 0x89, - 0x42, 0x34, 0x01, 0xb9, 0xbd, 0xac, 0xba, 0xab, 0x8a, 0x62, 0x44, 0x02, 0xb8, 0xbd, 0x9a, 0x21, - 0x34, 0x82, 0xca, 0xab, 0x20, 0x36, 0x34, 0x22, 0x21, 0x23, 0x13, 0xb8, 0xce, 0x9a, 0x18, 0x11, - 0xc9, 0xcd, 0x8a, 0x40, 0x34, 0x03, 0xc9, 0xbb, 0x28, 0x46, 0x24, 0x11, 0xa8, 0xb9, 0xba, 0xba, - 0x9a, 0x30, 0x67, 0x33, 0x81, 0xdb, 0xbc, 0x8a, 0x10, 0x11, 0xc9, 0xdc, 0xaa, 0x08, 0x21, 0x23, - 0x11, 0x12, 0x23, 0x81, 0xfb, 0xbb, 0x0a, 0x52, 0x12, 0xc8, 0xcb, 0x29, 0x64, 0x33, 0x82, 0xcb, - 0xbb, 0x20, 0x46, 0x22, 0x90, 0xda, 0xcb, 0xbb, 0xbb, 0x9b, 0x31, 0x46, 0x14, 0x80, 0xcb, 0xbb, - 0x18, 0x42, 0x13, 0xb0, 0xdb, 0x89, 0x52, 0x34, 0x24, 0x32, 0x21, 0x12, 0xa8, 0xdb, 0xab, 0x19, - 0x22, 0xa0, 0xcf, 0xbb, 0x18, 0x44, 0x24, 0x90, 0xbb, 0x8b, 0x63, 0x35, 0x14, 0x81, 0x99, 0xbb, - 0xbc, 0xba, 0x19, 0x55, 0x34, 0x13, 0xb9, 0xbd, 0xac, 0x88, 0x11, 0xa8, 0xdc, 0xcb, 0x99, 0x20, - 0x22, 0x32, 0x32, 0x12, 0x91, 0xeb, 0xbc, 0x89, 0x41, 0x24, 0x90, 0xcb, 0x9a, 0x62, 0x34, 0x23, - 0xa8, 0xbc, 0x0a, 0x53, 0x34, 0x02, 0xa9, 0xcd, 0xcc, 0xbb, 0xab, 0x18, 0x53, 0x34, 0x02, 0xc9, - 0xcb, 0x89, 0x21, 0x23, 0x91, 0xdb, 0xaa, 0x20, 0x46, 0x43, 0x33, 0x24, 0x11, 0x90, 0xcb, 0xbb, - 0x08, 0x32, 0x02, 0xfb, 0xbc, 0x89, 0x31, 0x44, 0x01, 0xaa, 0x9a, 0x40, 0x46, 0x33, 0x12, 0x80, - 0xba, 0xbe, 0xad, 0x8a, 0x41, 0x44, 0x23, 0x91, 0xdb, 0xab, 0x8a, 0x18, 0x98, 0xfb, 0xcb, 0xaa, - 0x09, 0x11, 0x33, 0x44, 0x32, 0x00, 0xda, 0xcb, 0x9a, 0x31, 0x34, 0x02, 0xb9, 0xac, 0x30, 0x36, - 0x14, 0x91, 0xaa, 0x0a, 0x52, 0x34, 0x13, 0x88, 0xeb, 0xdc, 0xbc, 0xcb, 0x99, 0x31, 0x44, 0x12, - 0x98, 0xbb, 0x9b, 0x20, 0x24, 0x81, 0xca, 0xbb, 0x08, 0x64, 0x53, 0x43, 0x43, 0x22, 0x90, 0xca, - 0xbb, 0x89, 0x32, 0x24, 0xb8, 0xcd, 0x9a, 0x28, 0x33, 0x12, 0xb9, 0xaa, 0x51, 0x46, 0x33, 0x23, - 0x21, 0x90, 0xec, 0xcc, 0xab, 0x19, 0x54, 0x33, 0x02, 0xb9, 0xbc, 0x9a, 0x88, 0xa0, 0xec, 0xcb, - 0x9b, 0x8a, 0x00, 0x31, 0x63, 0x43, 0x12, 0xa9, 0xcd, 0x9b, 0x28, 0x53, 0x12, 0xa0, 0xaa, 0x29, - 0x53, 0x24, 0x80, 0xa9, 0x09, 0x42, 0x25, 0x02, 0x80, 0x99, 0xdc, 0xdd, 0xbc, 0xab, 0x19, 0x44, - 0x23, 0x80, 0xbb, 0x9b, 0x20, 0x33, 0x81, 0xcc, 0xac, 0x08, 0x42, 0x34, 0x35, 0x35, 0x25, 0x02, - 0xa9, 0xcc, 0x8a, 0x10, 0x23, 0x82, 0xcb, 0xbb, 0x18, 0x33, 0x03, 0xda, 0xab, 0x51, 0x45, 0x33, - 0x11, 0x11, 0x11, 0xb0, 0xcf, 0xbd, 0x9a, 0x51, 0x53, 0x12, 0xa8, 0xba, 0x9a, 0x18, 0x80, 0xfa, - 0xbc, 0xab, 0x9a, 0x80, 0x10, 0x31, 0x37, 0x34, 0x91, 0xeb, 0xcb, 0x09, 0x31, 0x24, 0x01, 0x9a, - 0x0a, 0x42, 0x24, 0x91, 0xba, 0x8a, 0x73, 0x43, 0x02, 0x98, 0x9a, 0xa9, 0xdc, 0xdd, 0xbb, 0x8b, - 0x41, 0x24, 0x02, 0xaa, 0xab, 0x18, 0x34, 0x03, 0xda, 0xbc, 0x89, 0x41, 0x33, 0x43, 0x44, 0x35, - 0x23, 0x91, 0xbd, 0xbc, 0x08, 0x33, 0x23, 0xb8, 0xad, 0x8a, 0x32, 0x13, 0xc9, 0xbc, 0x29, 0x46, - 0x24, 0x02, 0x88, 0x18, 0x01, 0xb8, 0xdf, 0xab, 0x19, 0x54, 0x23, 0x80, 0xca, 0x9a, 0x00, 0x12, - 0xc9, 0xce, 0xbb, 0x99, 0x00, 0x00, 0x10, 0x42, 0x45, 0x12, 0xb8, 0xce, 0x9a, 0x28, 0x43, 0x12, - 0xa0, 0x99, 0x30, 0x44, 0x02, 0xb9, 0x9c, 0x38, 0x46, 0x22, 0x98, 0xb9, 0x9a, 0xa8, 0xdd, 0xbd, - 0xac, 0x18, 0x43, 0x13, 0xa8, 0xcb, 0x09, 0x43, 0x23, 0xb0, 0xbe, 0xab, 0x20, 0x44, 0x22, 0x31, - 0x55, 0x33, 0x03, 0xc9, 0xbd, 0x9a, 0x30, 0x43, 0x81, 0xba, 0xaa, 0x31, 0x34, 0xa0, 0xce, 0x9a, - 0x42, 0x36, 0x12, 0x90, 0x99, 0x00, 0x80, 0xd9, 0xbd, 0x9b, 0x42, 0x26, 0x02, 0xb9, 0xbb, 0x19, - 0x43, 0x82, 0xdd, 0xbd, 0x9a, 0x09, 0x01, 0x00, 0x10, 0x63, 0x33, 0x82, 0xec, 0xcb, 0x09, 0x31, - 0x43, 0x81, 0x99, 0x00, 0x43, 0x23, 0xb0, 0xbe, 0x09, 0x73, 0x33, 0x02, 0xba, 0xbb, 0x9b, 0xaa, - 0xde, 0xbc, 0x89, 0x31, 0x24, 0x91, 0xcb, 0x9b, 0x51, 0x34, 0x82, 0xda, 0xac, 0x0a, 0x31, 0x24, - 0x22, 0x43, 0x44, 0x33, 0x90, 0xdc, 0xbb, 0x19, 0x42, 0x13, 0xa0, 0xaa, 0x19, 0x43, 0x03, 0xfb, - 0xac, 0x18, 0x54, 0x33, 0x81, 0xa9, 0x99, 0x08, 0x90, 0xfb, 0xab, 0x18, 0x54, 0x23, 0xa8, 0xbc, - 0x8a, 0x42, 0x23, 0xd8, 0xce, 0xbb, 0x89, 0x10, 0x11, 0x80, 0x31, 0x54, 0x12, 0xc8, 0xdc, 0x9a, - 0x18, 0x43, 0x12, 0x90, 0x09, 0x42, 0x24, 0x82, 0xda, 0xab, 0x48, 0x35, 0x24, 0x98, 0xba, 0xbb, - 0xa9, 0xca, 0xcd, 0xab, 0x28, 0x43, 0x03, 0xca, 0xbc, 0x28, 0x45, 0x13, 0xb0, 0xcd, 0x9a, 0x28, - 0x43, 0x22, 0x21, 0x53, 0x24, 0x03, 0xc8, 0xcc, 0x9a, 0x20, 0x33, 0x01, 0xaa, 0x09, 0x52, 0x14, - 0xb0, 0xce, 0x8a, 0x41, 0x44, 0x22, 0x98, 0x9a, 0x8a, 0x88, 0xa9, 0xcb, 0x0b, 0x63, 0x34, 0x91, - 0xdb, 0xab, 0x38, 0x44, 0x82, 0xfb, 0xbc, 0xab, 0x08, 0x21, 0x10, 0x10, 0x42, 0x43, 0x81, 0xdc, - 0xbc, 0x0a, 0x31, 0x24, 0x02, 0x88, 0x31, 0x36, 0x12, 0xb9, 0xbe, 0x0a, 0x54, 0x43, 0x02, 0xb9, - 0xcb, 0xaa, 0xa9, 0xba, 0xbc, 0x09, 0x42, 0x13, 0xd8, 0xcc, 0x89, 0x52, 0x24, 0x02, 0xda, 0xbb, - 0x8a, 0x32, 0x34, 0x33, 0x34, 0x34, 0x33, 0xa0, 0xdd, 0xab, 0x09, 0x32, 0x22, 0x90, 0x99, 0x42, - 0x35, 0x91, 0xec, 0xbb, 0x29, 0x55, 0x33, 0x02, 0xaa, 0xba, 0xaa, 0xa8, 0xa9, 0x9a, 0x62, 0x35, - 0x01, 0xdb, 0xbc, 0x19, 0x53, 0x23, 0xc8, 0xce, 0xab, 0x8a, 0x10, 0x11, 0x11, 0x21, 0x43, 0x11, - 0xda, 0xbd, 0xab, 0x28, 0x34, 0x22, 0x00, 0x30, 0x56, 0x23, 0x80, 0xbc, 0xac, 0x30, 0x46, 0x22, - 0x80, 0xba, 0xbc, 0xbb, 0xba, 0xbb, 0x8a, 0x32, 0x25, 0xb0, 0xcf, 0xaa, 0x21, 0x36, 0x23, 0xa8, - 0xcd, 0x9a, 0x18, 0x42, 0x33, 0x33, 0x24, 0x24, 0x81, 0xc9, 0xbc, 0x8a, 0x10, 0x23, 0x80, 0x88, - 0x51, 0x45, 0x12, 0xc9, 0xbd, 0x8b, 0x51, 0x44, 0x22, 0x80, 0xaa, 0xbb, 0xaa, 0xaa, 0x89, 0x52, - 0x44, 0x02, 0xc9, 0xbd, 0x9a, 0x41, 0x24, 0x82, 0xeb, 0xcc, 0x9a, 0x09, 0x10, 0x11, 0x21, 0x22, - 0x12, 0xc8, 0xdc, 0xab, 0x09, 0x31, 0x23, 0x11, 0x52, 0x45, 0x24, 0x02, 0xba, 0xbd, 0x09, 0x44, - 0x25, 0x02, 0x98, 0xdb, 0xab, 0xbb, 0xab, 0x09, 0x32, 0x34, 0xb0, 0xde, 0xab, 0x19, 0x63, 0x33, - 0x82, 0xca, 0xac, 0x8a, 0x20, 0x34, 0x34, 0x34, 0x23, 0x02, 0xba, 0xbd, 0x9b, 0x18, 0x22, 0x80, - 0x89, 0x62, 0x45, 0x23, 0xa0, 0xcd, 0xab, 0x29, 0x45, 0x24, 0x11, 0x98, 0xba, 0xbc, 0xbb, 0x99, - 0x42, 0x45, 0x12, 0xa9, 0xcd, 0x9a, 0x18, 0x34, 0x12, 0xc8, 0xbd, 0xbc, 0x8a, 0x08, 0x21, 0x32, - 0x33, 0x13, 0xc9, 0xdd, 0x9b, 0x09, 0x21, 0x12, 0x88, 0x30, 0x57, 0x34, 0x13, 0xa0, 0xbc, 0x8b, - 0x31, 0x46, 0x22, 0x81, 0xb9, 0xcd, 0xbb, 0xbc, 0x99, 0x31, 0x24, 0x82, 0xeb, 0xbc, 0x8a, 0x32, - 0x45, 0x11, 0xa8, 0xbb, 0x9b, 0x18, 0x43, 0x44, 0x34, 0x24, 0x11, 0xa9, 0xcb, 0x9a, 0x10, 0x12, - 0xa0, 0xbb, 0x48, 0x47, 0x34, 0x81, 0xca, 0xac, 0x09, 0x32, 0x36, 0x12, 0x01, 0xa9, 0xeb, 0xcb, - 0x9b, 0x18, 0x54, 0x23, 0x91, 0xcc, 0xac, 0x08, 0x31, 0x33, 0x90, 0xdc, 0xbb, 0xbb, 0x99, 0x00, - 0x31, 0x36, 0x23, 0x90, 0xdd, 0xab, 0x89, 0x22, 0x12, 0x98, 0x8a, 0x74, 0x35, 0x14, 0x81, 0xba, - 0x9b, 0x28, 0x35, 0x24, 0x02, 0x88, 0xdb, 0xdc, 0xbb, 0xab, 0x28, 0x44, 0x13, 0xb9, 0xce, 0x9a, - 0x18, 0x43, 0x23, 0x90, 0xba, 0xaa, 0x09, 0x11, 0x53, 0x45, 0x25, 0x13, 0x98, 0xcb, 0x9b, 0x18, - 0x33, 0x81, 0xbc, 0x8c, 0x63, 0x44, 0x12, 0xa8, 0xbc, 0x8a, 0x31, 0x34, 0x24, 0x10, 0x80, 0xc9, - 0xcd, 0xcb, 0x8a, 0x42, 0x35, 0x02, 0xc9, 0xbc, 0x8b, 0x20, 0x43, 0x01, 0xca, 0xcb, 0xaa, 0x99, - 0x98, 0x18, 0x63, 0x43, 0x01, 0xea, 0xbb, 0x9b, 0x41, 0x23, 0x80, 0xbb, 0x3a, 0x57, 0x34, 0x02, - 0xa8, 0xba, 0x19, 0x43, 0x24, 0x01, 0x80, 0xa8, 0xfb, 0xcd, 0xab, 0x8a, 0x42, 0x43, 0x81, 0xcc, - 0xcb, 0x09, 0x31, 0x24, 0x81, 0xa9, 0x9a, 0x08, 0x11, 0x11, 0x63, 0x45, 0x33, 0x82, 0xda, 0xac, - 0x09, 0x32, 0x23, 0xb9, 0xbd, 0x18, 0x46, 0x33, 0x81, 0xca, 0xab, 0x28, 0x34, 0x14, 0x01, 0x80, - 0x80, 0xeb, 0xcd, 0xab, 0x18, 0x45, 0x33, 0xa0, 0xcc, 0xac, 0x08, 0x32, 0x12, 0xa8, 0xbc, 0xab, - 0x99, 0x98, 0xa9, 0x30, 0x47, 0x23, 0xb0, 0xbf, 0x9c, 0x08, 0x33, 0x03, 0xb9, 0xab, 0x72, 0x45, - 0x22, 0x80, 0xaa, 0x8a, 0x31, 0x35, 0x02, 0x98, 0x98, 0xb9, 0xde, 0xbd, 0xab, 0x28, 0x35, 0x23, - 0xc9, 0xbd, 0x9b, 0x28, 0x34, 0x12, 0xa8, 0xaa, 0x09, 0x32, 0x12, 0x21, 0x75, 0x34, 0x13, 0xb8, - 0xcd, 0x8b, 0x20, 0x24, 0x92, 0xda, 0x8a, 0x41, 0x35, 0x22, 0xa9, 0xac, 0x09, 0x42, 0x33, 0x00, - 0x89, 0x08, 0xa0, 0xee, 0xbc, 0x9a, 0x51, 0x34, 0x03, 0xc9, 0xbd, 0x99, 0x20, 0x23, 0x91, 0xdb, - 0xaa, 0x09, 0x00, 0x99, 0x8a, 0x61, 0x34, 0x02, 0xec, 0xac, 0x8a, 0x31, 0x24, 0x91, 0xba, 0x1a, - 0x74, 0x43, 0x02, 0x99, 0x9a, 0x10, 0x34, 0x22, 0xa8, 0xa9, 0x89, 0xda, 0xed, 0xcb, 0x89, 0x31, - 0x35, 0x91, 0xdb, 0xac, 0x09, 0x31, 0x23, 0x90, 0xab, 0x8a, 0x42, 0x24, 0x00, 0x21, 0x55, 0x24, - 0x81, 0xdb, 0xac, 0x09, 0x33, 0x14, 0xb0, 0xcb, 0x19, 0x54, 0x24, 0x80, 0xb9, 0x8a, 0x40, 0x43, - 0x02, 0xa9, 0x99, 0x80, 0xb9, 0xdf, 0xbb, 0x29, 0x64, 0x23, 0x90, 0xcc, 0xab, 0x08, 0x32, 0x02, - 0xca, 0xcb, 0x99, 0x11, 0x01, 0xa9, 0x19, 0x54, 0x14, 0xb8, 0xcf, 0x9b, 0x18, 0x43, 0x12, 0xa8, - 0xab, 0x51, 0x35, 0x24, 0x91, 0x9a, 0x19, 0x53, 0x33, 0x91, 0xca, 0xaa, 0x99, 0xea, 0xdc, 0x9b, - 0x18, 0x44, 0x12, 0xb8, 0xcd, 0x9a, 0x10, 0x32, 0x82, 0xb9, 0x9c, 0x30, 0x44, 0x12, 0x01, 0x41, - 0x34, 0x23, 0xe9, 0xcc, 0x9a, 0x21, 0x43, 0x01, 0xca, 0x9a, 0x41, 0x44, 0x22, 0xa8, 0x9b, 0x18, - 0x54, 0x22, 0x98, 0xaa, 0x8a, 0x98, 0xfa, 0xbc, 0x9b, 0x52, 0x44, 0x02, 0xb9, 0xae, 0x9a, 0x11, - 0x12, 0xa8, 0xcc, 0x9a, 0x10, 0x23, 0x81, 0x99, 0x20, 0x35, 0xa2, 0xdf, 0xbc, 0x89, 0x31, 0x34, - 0x81, 0xba, 0x09, 0x55, 0x24, 0x12, 0xa8, 0x89, 0x41, 0x34, 0x12, 0xb9, 0xbc, 0x9a, 0xaa, 0xec, - 0xbc, 0x89, 0x51, 0x33, 0x91, 0xcc, 0xac, 0x89, 0x22, 0x13, 0xa9, 0xad, 0x19, 0x63, 0x23, 0x12, - 0x10, 0x42, 0x33, 0xa1, 0xde, 0xbb, 0x09, 0x53, 0x22, 0x98, 0xab, 0x19, 0x46, 0x23, 0x81, 0xaa, - 0x19, 0x54, 0x24, 0x81, 0xb9, 0xbb, 0x9a, 0xa9, 0xcd, 0xac, 0x29, 0x45, 0x23, 0xa0, 0xcd, 0xab, - 0x08, 0x22, 0x80, 0xcc, 0xac, 0x88, 0x32, 0x22, 0x81, 0x00, 0x32, 0x03, 0xfd, 0xcd, 0xaa, 0x10, - 0x42, 0x12, 0x98, 0x89, 0x41, 0x54, 0x22, 0x80, 0x89, 0x40, 0x44, 0x13, 0x90, 0xcb, 0xbb, 0xba, - 0xba, 0xbe, 0xab, 0x30, 0x45, 0x02, 0xca, 0xcc, 0x8a, 0x20, 0x22, 0xa0, 0xbc, 0x8c, 0x31, 0x27, - 0x23, 0x12, 0x22, 0x22, 0x91, 0xdd, 0xbc, 0x9a, 0x31, 0x34, 0x01, 0xaa, 0x8a, 0x62, 0x34, 0x03, - 0x98, 0x09, 0x72, 0x34, 0x12, 0xa8, 0xbc, 0xab, 0xaa, 0xbb, 0xbd, 0x0a, 0x54, 0x24, 0x81, 0xeb, - 0xab, 0x89, 0x20, 0x80, 0xeb, 0xbc, 0x8a, 0x21, 0x34, 0x13, 0x11, 0x11, 0x80, 0xfb, 0xcd, 0xac, - 0x88, 0x22, 0x23, 0x81, 0x89, 0x30, 0x46, 0x24, 0x01, 0x88, 0x28, 0x45, 0x24, 0x82, 0xb9, 0xdb, - 0xba, 0xba, 0xcb, 0x9b, 0x29, 0x44, 0x13, 0xc8, 0xbd, 0xab, 0x10, 0x23, 0x90, 0xbe, 0xac, 0x28, - 0x54, 0x24, 0x22, 0x22, 0x11, 0x81, 0xdb, 0xbd, 0xab, 0x28, 0x42, 0x12, 0x88, 0x09, 0x52, 0x44, - 0x02, 0xa0, 0x09, 0x52, 0x46, 0x22, 0x80, 0xaa, 0xbc, 0xab, 0xbb, 0xbb, 0x0a, 0x54, 0x43, 0x82, - 0xeb, 0xbb, 0x8a, 0x11, 0x01, 0xfb, 0xbc, 0xab, 0x18, 0x53, 0x32, 0x32, 0x22, 0x81, 0xda, 0xce, - 0xbb, 0x8b, 0x20, 0x33, 0x02, 0x00, 0x42, 0x36, 0x24, 0x81, 0x98, 0x20, 0x56, 0x34, 0x12, 0x98, - 0xcb, 0xbc, 0xab, 0xac, 0x9a, 0x10, 0x53, 0x12, 0xb8, 0xbe, 0x9b, 0x28, 0x32, 0x92, 0xdd, 0xbb, - 0x8a, 0x53, 0x44, 0x23, 0x43, 0x22, 0x80, 0xca, 0xbd, 0xbb, 0x08, 0x32, 0x13, 0x90, 0x08, 0x73, - 0x43, 0x12, 0x98, 0x9a, 0x62, 0x45, 0x33, 0x82, 0xb8, 0xcb, 0xbc, 0xbb, 0xac, 0x0a, 0x42, 0x25, - 0x01, 0xcb, 0xad, 0x89, 0x11, 0x02, 0xd9, 0xcd, 0xaa, 0x09, 0x22, 0x24, 0x23, 0x24, 0x02, 0xb8, - 0xce, 0xbc, 0x9a, 0x10, 0x22, 0x01, 0x98, 0x30, 0x47, 0x23, 0x01, 0xa9, 0x09, 0x73, 0x35, 0x22, - 0x91, 0xb9, 0xcb, 0xbc, 0xbc, 0xab, 0x19, 0x44, 0x23, 0xa0, 0xcd, 0xab, 0x28, 0x42, 0x01, 0xca, - 0xbd, 0x9a, 0x21, 0x44, 0x33, 0x34, 0x43, 0x02, 0xb8, 0xdd, 0xba, 0x09, 0x21, 0x11, 0x90, 0x8a, - 0x52, 0x45, 0x12, 0x98, 0xab, 0x29, 0x46, 0x34, 0x13, 0x98, 0xb9, 0xbb, 0xbe, 0xcb, 0x9a, 0x30, - 0x45, 0x12, 0xb9, 0xae, 0x8b, 0x10, 0x23, 0xa0, 0xdd, 0xbb, 0x8a, 0x10, 0x33, 0x34, 0x53, 0x33, - 0x81, 0xfb, 0xbc, 0xab, 0x19, 0x22, 0x01, 0xa8, 0x18, 0x65, 0x43, 0x01, 0xb8, 0xaa, 0x40, 0x46, - 0x23, 0x01, 0x98, 0xbb, 0xcb, 0xcc, 0xbb, 0x89, 0x42, 0x25, 0x82, 0xcb, 0xad, 0x09, 0x31, 0x14, - 0xa0, 0xcc, 0xab, 0x08, 0x42, 0x33, 0x53, 0x43, 0x23, 0x80, 0xdc, 0xcb, 0x9a, 0x11, 0x22, 0x90, - 0xa9, 0x28, 0x55, 0x33, 0x81, 0xcb, 0x9a, 0x62, 0x35, 0x23, 0x00, 0xa9, 0xab, 0xdb, 0xbc, 0xac, - 0x18, 0x53, 0x14, 0xa1, 0xeb, 0xaa, 0x08, 0x32, 0x02, 0xda, 0xbd, 0x9b, 0x08, 0x22, 0x33, 0x34, - 0x44, 0x12, 0xb0, 0xde, 0xba, 0x09, 0x21, 0x11, 0xa0, 0x9a, 0x50, 0x45, 0x22, 0x90, 0xba, 0x0a, - 0x73, 0x34, 0x22, 0x88, 0xaa, 0xba, 0xcc, 0xbc, 0x9c, 0x28, 0x44, 0x13, 0xb8, 0xbd, 0x8c, 0x28, - 0x24, 0x82, 0xca, 0xbc, 0x8a, 0x21, 0x24, 0x33, 0x53, 0x24, 0x03, 0xc8, 0xdc, 0xaa, 0x08, 0x22, - 0x01, 0xaa, 0x8b, 0x62, 0x35, 0x12, 0xa8, 0xbc, 0x18, 0x45, 0x24, 0x12, 0x98, 0x99, 0xba, 0xcc, - 0xbc, 0x9a, 0x41, 0x44, 0x02, 0xc9, 0xbc, 0x8b, 0x21, 0x24, 0x90, 0xcd, 0xab, 0x0a, 0x20, 0x22, - 0x32, 0x35, 0x34, 0x02, 0xfa, 0xbc, 0x9a, 0x18, 0x32, 0x81, 0xba, 0x09, 0x55, 0x34, 0x02, 0xba, - 0xac, 0x30, 0x46, 0x23, 0x82, 0xa8, 0xaa, 0xcb, 0xbc, 0xad, 0x0a, 0x42, 0x25, 0x81, 0xda, 0xbb, - 0x09, 0x52, 0x22, 0xa0, 0xcc, 0xaa, 0x19, 0x22, 0x43, 0x42, 0x53, 0x32, 0x91, 0xfb, 0xbb, 0x9a, - 0x11, 0x23, 0x90, 0xbb, 0x29, 0x47, 0x24, 0x91, 0xba, 0x9b, 0x52, 0x45, 0x22, 0x80, 0x98, 0xaa, - 0xba, 0xcd, 0xab, 0x19, 0x73, 0x22, 0xa1, 0xcc, 0xbb, 0x08, 0x43, 0x02, 0xd9, 0xbc, 0x9b, 0x18, - 0x22, 0x32, 0x43, 0x35, 0x23, 0xb0, 0xde, 0xab, 0x0a, 0x31, 0x12, 0xa8, 0xab, 0x40, 0x37, 0x24, - 0xa0, 0xba, 0x8a, 0x63, 0x34, 0x13, 0x90, 0xa9, 0xab, 0xcc, 0xcc, 0xaa, 0x28, 0x35, 0x14, 0xa0, - 0xbd, 0x9b, 0x20, 0x44, 0x01, 0xca, 0xcb, 0x89, 0x20, 0x32, 0x33, 0x44, 0x34, 0x12, 0xc8, 0xcd, - 0xab, 0x08, 0x22, 0x82, 0xb9, 0x8b, 0x61, 0x35, 0x13, 0xa8, 0xac, 0x19, 0x64, 0x33, 0x12, 0x98, - 0x99, 0xbb, 0xcc, 0xcc, 0x8a, 0x30, 0x35, 0x03, 0xca, 0xae, 0x9a, 0x20, 0x23, 0x91, 0xcd, 0xbb, - 0x8a, 0x20, 0x32, 0x33, 0x45, 0x34, 0x01, 0xca, 0xbe, 0xaa, 0x10, 0x22, 0x81, 0xb9, 0x1a, 0x64, - 0x34, 0x11, 0xba, 0x9c, 0x38, 0x55, 0x23, 0x01, 0x99, 0xaa, 0xcb, 0xdb, 0xac, 0x89, 0x52, 0x43, - 0x81, 0xca, 0xac, 0x09, 0x41, 0x13, 0x90, 0xcc, 0xab, 0x08, 0x31, 0x43, 0x43, 0x53, 0x23, 0x91, - 0xfb, 0xbb, 0x9b, 0x20, 0x22, 0xa0, 0xba, 0x29, 0x47, 0x24, 0x81, 0xb9, 0x9b, 0x52, 0x45, 0x22, - 0x81, 0x98, 0xaa, 0xca, 0xcc, 0xab, 0x08, 0x44, 0x23, 0xa1, 0xcd, 0xac, 0x08, 0x22, 0x02, 0xc9, - 0xbd, 0xaa, 0x08, 0x21, 0x33, 0x63, 0x43, 0x13, 0xa0, 0xcd, 0xac, 0x89, 0x21, 0x11, 0x98, 0x9a, - 0x40, 0x55, 0x22, 0x80, 0xab, 0x8a, 0x63, 0x34, 0x23, 0x80, 0xaa, 0xbb, 0xcd, 0xbc, 0xab, 0x20, - 0x36, 0x23, 0xb8, 0xcd, 0x9a, 0x28, 0x34, 0x01, 0xca, 0xbc, 0x9a, 0x20, 0x33, 0x44, 0x34, 0x24, - 0x03, 0xb9, 0xbf, 0xbb, 0x88, 0x12, 0x01, 0xaa, 0x8a, 0x72, 0x44, 0x12, 0xa0, 0x9a, 0x18, 0x55, - 0x43, 0x11, 0x80, 0xa8, 0xba, 0xbd, 0xad, 0x8a, 0x30, 0x35, 0x82, 0xda, 0xbc, 0x9a, 0x10, 0x23, - 0xa0, 0xcd, 0xbc, 0x8a, 0x00, 0x32, 0x53, 0x34, 0x24, 0x82, 0xca, 0xbd, 0x9a, 0x08, 0x12, 0x91, - 0x99, 0x18, 0x55, 0x34, 0x01, 0xb8, 0x9a, 0x40, 0x36, 0x24, 0x02, 0x98, 0xaa, 0xcc, 0xbc, 0xac, - 0x08, 0x52, 0x23, 0x81, 0xdb, 0xbb, 0x09, 0x42, 0x23, 0xa8, 0xdc, 0xab, 0x09, 0x21, 0x53, 0x44, - 0x43, 0x22, 0x90, 0xcc, 0xac, 0x8a, 0x08, 0x01, 0x99, 0x99, 0x31, 0x47, 0x32, 0x00, 0xa9, 0x19, - 0x72, 0x43, 0x23, 0x02, 0x90, 0xc9, 0xcc, 0xdb, 0x9a, 0x18, 0x43, 0x12, 0xb8, 0xcd, 0xab, 0x09, - 0x21, 0x80, 0xeb, 0xcb, 0xaa, 0x09, 0x20, 0x52, 0x44, 0x24, 0x12, 0xa8, 0xcc, 0xaa, 0x89, 0x10, - 0x80, 0x99, 0x08, 0x54, 0x35, 0x12, 0x90, 0x9a, 0x20, 0x64, 0x33, 0x12, 0x01, 0xa8, 0xcc, 0xcd, - 0xbb, 0x8b, 0x32, 0x35, 0x12, 0xca, 0xac, 0x8a, 0x31, 0x23, 0x90, 0xcd, 0xab, 0x9a, 0x18, 0x42, - 0x55, 0x34, 0x33, 0x82, 0xda, 0xbc, 0x9b, 0x09, 0x80, 0xa9, 0x9b, 0x31, 0x47, 0x33, 0x02, 0x98, - 0x10, 0x54, 0x34, 0x24, 0x12, 0x10, 0xa8, 0xeb, 0xbd, 0xbb, 0x09, 0x42, 0x13, 0xb0, 0xdd, 0xaa, - 0x89, 0x00, 0x80, 0xdb, 0xbc, 0xaa, 0x9a, 0x09, 0x30, 0x47, 0x25, 0x23, 0x80, 0xcb, 0xbb, 0x89, - 0x00, 0x90, 0xba, 0x1a, 0x74, 0x43, 0x22, 0x88, 0x8a, 0x30, 0x46, 0x23, 0x12, 0x10, 0x80, 0xca, - 0xdd, 0xbc, 0xaa, 0x20, 0x44, 0x11, 0xa9, 0xcb, 0x89, 0x21, 0x23, 0xa0, 0xdc, 0xaa, 0x89, 0x00, - 0x00, 0x62, 0x46, 0x24, 0x12, 0xa9, 0xcc, 0x9a, 0x88, 0x80, 0xba, 0xbc, 0x18, 0x45, 0x43, 0x11, - 0x89, 0x08, 0x63, 0x53, 0x12, 0x01, 0x11, 0x10, 0xa9, 0xbf, 0xbd, 0x99, 0x31, 0x32, 0xa0, 0xdd, - 0xaa, 0x89, 0x10, 0xa0, 0xcc, 0xbc, 0x9a, 0x08, 0x08, 0x09, 0x51, 0x46, 0x33, 0x02, 0xba, 0xad, - 0x89, 0x11, 0x90, 0xdb, 0x9b, 0x41, 0x45, 0x13, 0x91, 0x9a, 0x18, 0x55, 0x23, 0x01, 0x80, 0x08, - 0x00, 0xea, 0xcd, 0xab, 0x19, 0x43, 0x23, 0xb8, 0xbd, 0x8a, 0x41, 0x33, 0xa1, 0xdc, 0xab, 0x08, - 0x12, 0x01, 0x08, 0x64, 0x35, 0x33, 0x98, 0xbd, 0xac, 0x08, 0x01, 0xb9, 0xbe, 0x8a, 0x42, 0x35, - 0x02, 0xa8, 0x89, 0x52, 0x45, 0x22, 0x01, 0x88, 0x00, 0x81, 0xca, 0xbe, 0xab, 0x38, 0x34, 0x81, - 0xdd, 0xbb, 0x0a, 0x21, 0x02, 0xeb, 0xcc, 0x9a, 0x08, 0x01, 0x80, 0x08, 0x62, 0x44, 0x12, 0xa8, - 0xbb, 0x8a, 0x31, 0x04, 0xd9, 0xbc, 0x08, 0x54, 0x33, 0x91, 0xba, 0x0a, 0x73, 0x34, 0x03, 0x98, - 0x99, 0x09, 0x90, 0xdc, 0xcc, 0x89, 0x32, 0x34, 0x90, 0xbd, 0x9c, 0x30, 0x34, 0x02, 0xda, 0xcb, - 0x89, 0x21, 0x23, 0x80, 0x18, 0x45, 0x34, 0x81, 0xdb, 0xac, 0x09, 0x22, 0x80, 0xec, 0xab, 0x18, - 0x44, 0x13, 0x91, 0xab, 0x28, 0x56, 0x33, 0x02, 0x98, 0x89, 0x10, 0x90, 0xfb, 0xbb, 0x1a, 0x43, - 0x23, 0xfb, 0xbc, 0x9b, 0x20, 0x33, 0xb8, 0xdf, 0xaa, 0x09, 0x20, 0x02, 0x88, 0x10, 0x63, 0x33, - 0x91, 0xdb, 0x9b, 0x31, 0x35, 0x90, 0xdc, 0x9b, 0x31, 0x45, 0x12, 0xa9, 0xab, 0x20, 0x37, 0x24, - 0x80, 0xaa, 0x89, 0x88, 0xa8, 0xdc, 0x9b, 0x30, 0x35, 0x03, 0xfa, 0xbb, 0x19, 0x53, 0x33, 0xa8, - 0xbd, 0x9c, 0x28, 0x32, 0x03, 0x80, 0x20, 0x54, 0x12, 0xc8, 0xcc, 0x8a, 0x20, 0x23, 0xc9, 0xbe, - 0x8b, 0x41, 0x34, 0x02, 0xba, 0x8b, 0x72, 0x44, 0x13, 0x91, 0x99, 0x88, 0x08, 0xa8, 0xcc, 0x8a, - 0x41, 0x24, 0xa0, 0xde, 0xab, 0x09, 0x42, 0x01, 0xc9, 0xbd, 0x9b, 0x10, 0x22, 0x01, 0x08, 0x21, - 0x35, 0x13, 0xca, 0xad, 0x19, 0x44, 0x22, 0xb9, 0xbd, 0x0a, 0x44, 0x24, 0x90, 0xca, 0x0a, 0x52, - 0x35, 0x11, 0xa8, 0xaa, 0x9a, 0x88, 0xb9, 0xbc, 0x29, 0x46, 0x23, 0xb8, 0xbf, 0x9b, 0x31, 0x36, - 0x02, 0xca, 0xac, 0x8a, 0x31, 0x43, 0x01, 0x00, 0x21, 0x12, 0xa0, 0xcf, 0xab, 0x28, 0x43, 0x82, - 0xcc, 0xad, 0x08, 0x43, 0x23, 0x98, 0xbb, 0x29, 0x57, 0x33, 0x02, 0x98, 0xaa, 0x88, 0x88, 0xc9, - 0xaa, 0x30, 0x36, 0x83, 0xfc, 0xbc, 0x9a, 0x21, 0x33, 0xa0, 0xcf, 0xab, 0x89, 0x21, 0x23, 0x01, - 0x10, 0x31, 0x13, 0xc8, 0xcd, 0x8a, 0x53, 0x34, 0x81, 0xdb, 0x9b, 0x20, 0x45, 0x02, 0xb8, 0xbb, - 0x38, 0x56, 0x23, 0x81, 0xb9, 0xab, 0x9a, 0x99, 0xcb, 0x89, 0x73, 0x34, 0x81, 0xeb, 0xac, 0x09, - 0x53, 0x23, 0xa0, 0xeb, 0xaa, 0x18, 0x33, 0x33, 0x01, 0x10, 0x21, 0x90, 0xfc, 0xac, 0x0a, 0x32, - 0x33, 0xc8, 0xcd, 0x9a, 0x21, 0x35, 0x01, 0xba, 0x9b, 0x72, 0x44, 0x23, 0x81, 0xa9, 0xa9, 0x99, - 0x99, 0x9a, 0x29, 0x56, 0x13, 0xc8, 0xdd, 0xab, 0x09, 0x32, 0x03, 0xd9, 0xbd, 0xab, 0x08, 0x23, - 0x23, 0x12, 0x21, 0x12, 0xa0, 0xce, 0xbb, 0x30, 0x37, 0x14, 0x98, 0xbb, 0x0a, 0x63, 0x23, 0x91, - 0xcc, 0x89, 0x52, 0x35, 0x12, 0x90, 0xcb, 0xaa, 0xaa, 0x99, 0x09, 0x52, 0x35, 0x13, 0xd9, 0xcc, - 0x8b, 0x30, 0x35, 0x12, 0xb9, 0xae, 0x9a, 0x20, 0x24, 0x23, 0x12, 0x01, 0x90, 0xcc, 0xbd, 0xab, - 0x20, 0x25, 0x02, 0xca, 0xac, 0x1a, 0x42, 0x23, 0xa8, 0xac, 0x28, 0x57, 0x33, 0x13, 0x98, 0xaa, - 0xab, 0xaa, 0x99, 0x18, 0x46, 0x34, 0x90, 0xdd, 0xbc, 0x9a, 0x20, 0x32, 0xa0, 0xdd, 0xbb, 0x9a, - 0x11, 0x43, 0x32, 0x12, 0x11, 0xa8, 0xdc, 0xbb, 0x19, 0x54, 0x34, 0x01, 0xb9, 0xaa, 0x30, 0x35, - 0x03, 0xc9, 0xac, 0x30, 0x46, 0x33, 0x01, 0xb8, 0xbc, 0xbc, 0xaa, 0x8a, 0x41, 0x45, 0x33, 0xa0, - 0xdc, 0xbb, 0x08, 0x53, 0x14, 0x91, 0xca, 0xab, 0x09, 0x42, 0x43, 0x23, 0x12, 0x80, 0xdb, 0xbd, - 0xac, 0x08, 0x32, 0x23, 0xa8, 0xbd, 0x9a, 0x30, 0x34, 0x81, 0xcb, 0x8a, 0x74, 0x35, 0x33, 0x11, - 0x99, 0xbb, 0xbc, 0xab, 0x19, 0x73, 0x34, 0x12, 0xea, 0xbc, 0x9c, 0x09, 0x11, 0x02, 0xca, 0xcc, - 0xab, 0x88, 0x21, 0x43, 0x24, 0x12, 0x90, 0xda, 0xcb, 0x8a, 0x41, 0x53, 0x22, 0x88, 0x89, 0x18, - 0x32, 0x12, 0xc8, 0xbc, 0x19, 0x56, 0x43, 0x13, 0x80, 0xca, 0xbc, 0xac, 0x9b, 0x20, 0x45, 0x33, - 0x02, 0xdb, 0xbc, 0x99, 0x31, 0x34, 0x03, 0xb8, 0xbd, 0x9b, 0x10, 0x44, 0x34, 0x24, 0x02, 0xb9, - 0xce, 0xbb, 0x8a, 0x21, 0x33, 0x81, 0xb9, 0x9b, 0x18, 0x33, 0x91, 0xcd, 0x8a, 0x72, 0x46, 0x23, - 0x13, 0x81, 0xa9, 0xcc, 0xbb, 0x9a, 0x52, 0x35, 0x23, 0xa8, 0xbf, 0xac, 0x99, 0x10, 0x01, 0xa8, - 0xbd, 0xcb, 0x9a, 0x18, 0x32, 0x45, 0x33, 0x01, 0xd9, 0xbc, 0xab, 0x20, 0x44, 0x33, 0x01, 0x88, - 0x10, 0x32, 0x12, 0xb9, 0xbe, 0x09, 0x73, 0x34, 0x22, 0x02, 0x98, 0xeb, 0xbd, 0xac, 0x0a, 0x52, - 0x34, 0x13, 0xb8, 0xbc, 0x9c, 0x10, 0x32, 0x13, 0xa0, 0xcb, 0xaa, 0x09, 0x42, 0x45, 0x35, 0x33, - 0x90, 0xdd, 0xcb, 0xaa, 0x10, 0x22, 0x01, 0x98, 0x8a, 0x20, 0x22, 0xa0, 0xcd, 0x9b, 0x52, 0x45, - 0x24, 0x22, 0x11, 0x81, 0xc9, 0xcc, 0xbb, 0x19, 0x45, 0x34, 0x81, 0xda, 0xac, 0xaa, 0x08, 0x00, - 0x98, 0xcb, 0xac, 0xaa, 0x99, 0x18, 0x63, 0x35, 0x23, 0xa1, 0xcd, 0xbb, 0x0a, 0x42, 0x24, 0x12, - 0x08, 0x20, 0x43, 0x12, 0xb9, 0xbd, 0x0b, 0x52, 0x35, 0x22, 0x01, 0x88, 0xb8, 0xdd, 0xcc, 0x9b, - 0x38, 0x45, 0x23, 0x81, 0xcb, 0xab, 0x19, 0x32, 0x22, 0x90, 0xba, 0x8a, 0x88, 0x01, 0x62, 0x47, - 0x35, 0x12, 0xc9, 0xcd, 0xba, 0x09, 0x11, 0x12, 0x88, 0x99, 0x21, 0x33, 0x82, 0xdd, 0x9c, 0x29, - 0x44, 0x34, 0x12, 0x11, 0x11, 0x90, 0xfa, 0xdb, 0x8a, 0x40, 0x44, 0x12, 0xa9, 0xbc, 0xac, 0x88, - 0x00, 0x98, 0xbc, 0xab, 0x9a, 0x89, 0x99, 0x28, 0x47, 0x35, 0x12, 0xd9, 0xbc, 0xaa, 0x20, 0x34, - 0x22, 0x00, 0x10, 0x44, 0x23, 0x91, 0xcc, 0xab, 0x20, 0x45, 0x22, 0x00, 0x88, 0x88, 0xb8, 0xde, - 0xbc, 0x8a, 0x52, 0x44, 0x11, 0xa8, 0xbb, 0x8a, 0x31, 0x23, 0x90, 0xbc, 0x8a, 0x32, 0x23, 0x00, - 0x72, 0x55, 0x24, 0x81, 0xcc, 0xad, 0x8b, 0x18, 0x12, 0x80, 0x99, 0x28, 0x53, 0x22, 0xb9, 0xaf, - 0x8a, 0x41, 0x35, 0x12, 0x01, 0x18, 0x10, 0x90, 0xcd, 0xad, 0x19, 0x53, 0x34, 0x91, 0xda, 0xbb, - 0x99, 0x10, 0x98, 0xeb, 0xbb, 0x8a, 0x08, 0x80, 0x99, 0x40, 0x46, 0x24, 0x91, 0xeb, 0xbb, 0x89, - 0x42, 0x23, 0x01, 0x00, 0x43, 0x35, 0x03, 0xc9, 0xad, 0x89, 0x43, 0x43, 0x01, 0x98, 0x99, 0x88, - 0xca, 0xce, 0xab, 0x20, 0x45, 0x33, 0x80, 0xcb, 0x9b, 0x20, 0x33, 0x82, 0xbc, 0xac, 0x20, 0x34, - 0x12, 0x08, 0x62, 0x45, 0x22, 0xc8, 0xcd, 0xab, 0x0a, 0x11, 0x01, 0x99, 0x09, 0x52, 0x34, 0x81, - 0xeb, 0xbb, 0x18, 0x45, 0x33, 0x01, 0x88, 0x00, 0x10, 0xc9, 0xcd, 0xaa, 0x41, 0x35, 0x23, 0xb9, - 0xbe, 0x9a, 0x08, 0x00, 0xda, 0xbc, 0xab, 0x08, 0x12, 0x90, 0x89, 0x52, 0x36, 0x23, 0xc9, 0xbe, - 0x9b, 0x20, 0x33, 0x13, 0x80, 0x41, 0x46, 0x33, 0x91, 0xcc, 0x9b, 0x38, 0x44, 0x12, 0x90, 0x9a, - 0x99, 0x88, 0xfb, 0xbc, 0x8a, 0x52, 0x25, 0x12, 0xa9, 0xbb, 0x08, 0x53, 0x12, 0xc9, 0xac, 0x0a, - 0x33, 0x25, 0x01, 0x08, 0x43, 0x35, 0x01, 0xec, 0xbc, 0x9a, 0x00, 0x11, 0x98, 0x99, 0x48, 0x44, - 0x23, 0xc8, 0xbc, 0x9b, 0x52, 0x34, 0x13, 0x90, 0x98, 0x00, 0x81, 0xda, 0xbc, 0x1a, 0x45, 0x25, - 0x80, 0xcb, 0xab, 0x89, 0x11, 0xa8, 0xcf, 0xbb, 0x8a, 0x11, 0x12, 0x90, 0x08, 0x63, 0x34, 0x91, - 0xfb, 0xbb, 0x89, 0x32, 0x33, 0x81, 0x20, 0x56, 0x34, 0x12, 0xb9, 0xbd, 0x0a, 0x52, 0x33, 0x82, - 0xb9, 0xab, 0x9a, 0xa9, 0xce, 0xab, 0x38, 0x55, 0x33, 0x90, 0xbb, 0x8b, 0x43, 0x25, 0x90, 0xcc, - 0xab, 0x20, 0x35, 0x23, 0x00, 0x20, 0x53, 0x22, 0xc9, 0xbf, 0xbc, 0x89, 0x01, 0x80, 0xaa, 0x08, - 0x54, 0x34, 0x01, 0xdb, 0xbb, 0x29, 0x54, 0x33, 0x01, 0x99, 0x98, 0x00, 0xa8, 0xeb, 0x9a, 0x51, - 0x44, 0x12, 0xb9, 0xbd, 0x8a, 0x10, 0x80, 0xdd, 0xcc, 0x9a, 0x18, 0x21, 0x01, 0x80, 0x10, 0x43, - 0x12, 0xd9, 0xcc, 0x9b, 0x10, 0x33, 0x02, 0x18, 0x73, 0x36, 0x24, 0x91, 0xba, 0xac, 0x28, 0x34, - 0x14, 0xa0, 0xaa, 0xab, 0xa9, 0xcb, 0xbc, 0x09, 0x73, 0x24, 0x02, 0xb9, 0xaa, 0x40, 0x44, 0x82, - 0xd9, 0xcb, 0x89, 0x42, 0x43, 0x12, 0x00, 0x11, 0x22, 0x90, 0xde, 0xcb, 0xaa, 0x08, 0x80, 0xaa, - 0x8a, 0x61, 0x44, 0x13, 0xb0, 0xcc, 0x8a, 0x31, 0x36, 0x12, 0x80, 0xa9, 0x89, 0x98, 0xa9, 0xaa, - 0x41, 0x37, 0x14, 0xa0, 0xbd, 0x9b, 0x18, 0x12, 0xea, 0xce, 0xbb, 0x8a, 0x20, 0x32, 0x11, 0x00, - 0x21, 0x13, 0xc0, 0xcd, 0xac, 0x88, 0x22, 0x02, 0x00, 0x52, 0x47, 0x43, 0x12, 0xa8, 0xcb, 0x89, - 0x42, 0x33, 0x02, 0xba, 0xbd, 0xab, 0xba, 0xbb, 0x89, 0x73, 0x34, 0x03, 0xb8, 0xbb, 0x30, 0x57, - 0x22, 0xa8, 0xdc, 0xaa, 0x28, 0x53, 0x33, 0x22, 0x11, 0x01, 0x98, 0xdc, 0xbc, 0xbb, 0x99, 0x98, - 0xda, 0xaa, 0x28, 0x46, 0x34, 0x81, 0xc9, 0xab, 0x18, 0x44, 0x33, 0x02, 0x98, 0xaa, 0xaa, 0xab, - 0x9b, 0x61, 0x45, 0x23, 0xa0, 0xcc, 0xab, 0x19, 0x32, 0xc0, 0xef, 0xbb, 0xab, 0x19, 0x31, 0x32, - 0x22, 0x11, 0x00, 0xb9, 0xbf, 0xab, 0x19, 0x31, 0x01, 0xb9, 0x48, 0x77, 0x44, 0x22, 0x00, 0xaa, - 0x9a, 0x10, 0x53, 0x12, 0x88, 0xcb, 0xcb, 0xcb, 0xaa, 0x0a, 0x42, 0x44, 0x02, 0x98, 0x9c, 0x19, - 0x54, 0x33, 0x81, 0xeb, 0xbb, 0x8a, 0x42, 0x44, 0x32, 0x23, 0x01, 0xa0, 0xdb, 0xbc, 0xbb, 0x89, - 0x99, 0xeb, 0xcb, 0x09, 0x52, 0x34, 0x13, 0xa8, 0xbb, 0x8a, 0x53, 0x35, 0x12, 0x81, 0xa9, 0xdb, - 0xba, 0x9a, 0x40, 0x46, 0x32, 0x90, 0xeb, 0xaa, 0x09, 0x22, 0x02, 0xec, 0xcc, 0xbb, 0x9a, 0x18, - 0x22, 0x43, 0x23, 0x01, 0xc9, 0xdb, 0xab, 0x08, 0x22, 0x02, 0xc9, 0x8a, 0x74, 0x44, 0x24, 0x02, - 0x98, 0x99, 0x18, 0x32, 0x23, 0x81, 0xca, 0xcd, 0xbc, 0xcb, 0x8a, 0x41, 0x34, 0x22, 0xb8, 0xbc, - 0x0a, 0x73, 0x43, 0x02, 0xb8, 0xbc, 0x9b, 0x18, 0x53, 0x44, 0x33, 0x23, 0x91, 0xdb, 0xcc, 0x9a, - 0x09, 0x81, 0xb9, 0xcd, 0x9a, 0x20, 0x44, 0x23, 0x80, 0xa9, 0x89, 0x31, 0x35, 0x22, 0x01, 0x80, - 0xcb, 0xbe, 0xbc, 0x18, 0x45, 0x25, 0x81, 0xc9, 0xac, 0x09, 0x21, 0x13, 0xc8, 0xce, 0xbb, 0xab, - 0x88, 0x20, 0x42, 0x43, 0x13, 0x98, 0xcd, 0xbb, 0x09, 0x32, 0x24, 0xa8, 0xac, 0x19, 0x56, 0x34, - 0x12, 0x81, 0x89, 0x18, 0x22, 0x12, 0x88, 0xa9, 0xdb, 0xcd, 0xcc, 0xab, 0x18, 0x54, 0x23, 0x91, - 0xcb, 0xab, 0x40, 0x35, 0x23, 0xa0, 0xcb, 0xbb, 0x88, 0x32, 0x44, 0x35, 0x34, 0x12, 0xb8, 0xdd, - 0xaa, 0x89, 0x11, 0x80, 0xcc, 0xac, 0x09, 0x33, 0x25, 0x01, 0x99, 0x89, 0x41, 0x33, 0x12, 0x80, - 0x08, 0xa0, 0xdd, 0xbd, 0x9b, 0x61, 0x35, 0x13, 0xb8, 0xbd, 0xab, 0x20, 0x34, 0x81, 0xdc, 0xbc, - 0xba, 0x99, 0x88, 0x11, 0x53, 0x34, 0x02, 0xd9, 0xcc, 0x8a, 0x10, 0x33, 0x01, 0xca, 0x9a, 0x52, - 0x45, 0x22, 0x81, 0x88, 0x28, 0x42, 0x13, 0x90, 0xaa, 0xbb, 0xdb, 0xdd, 0xcb, 0x89, 0x41, 0x35, - 0x11, 0xc9, 0xbb, 0x09, 0x63, 0x24, 0x01, 0xb9, 0xba, 0x99, 0x11, 0x32, 0x44, 0x36, 0x24, 0x81, - 0xdb, 0xbc, 0x9a, 0x20, 0x12, 0xc8, 0xbc, 0xab, 0x30, 0x44, 0x12, 0x98, 0x8a, 0x41, 0x34, 0x13, - 0x98, 0xaa, 0x08, 0xb8, 0xde, 0xbc, 0x18, 0x55, 0x43, 0x91, 0xca, 0xac, 0x08, 0x31, 0x13, 0xc8, - 0xcd, 0xba, 0x99, 0x88, 0x80, 0x21, 0x35, 0x24, 0x90, 0xdd, 0xab, 0x19, 0x32, 0x24, 0x98, 0xbb, - 0x1a, 0x55, 0x24, 0x12, 0x88, 0x08, 0x43, 0x33, 0x81, 0xca, 0xab, 0x9a, 0xdb, 0xbe, 0xac, 0x18, - 0x54, 0x33, 0x90, 0xcc, 0x9a, 0x30, 0x44, 0x13, 0x98, 0xbb, 0x9a, 0x10, 0x22, 0x32, 0x46, 0x35, - 0x23, 0xb8, 0xce, 0xbb, 0x08, 0x31, 0x81, 0xdb, 0xbc, 0x09, 0x42, 0x23, 0x90, 0xaa, 0x20, 0x46, - 0x33, 0x80, 0xaa, 0x9a, 0x88, 0xd9, 0xcd, 0x9a, 0x51, 0x35, 0x23, 0xc8, 0xbc, 0x9b, 0x20, 0x24, - 0x81, 0xeb, 0xcb, 0x9a, 0x88, 0x98, 0x08, 0x42, 0x44, 0x12, 0xc9, 0xcd, 0x9a, 0x20, 0x33, 0x02, - 0xb9, 0x9b, 0x51, 0x35, 0x14, 0x80, 0x09, 0x41, 0x35, 0x13, 0xa8, 0xcb, 0xab, 0xa9, 0xeb, 0xbc, - 0x8a, 0x62, 0x43, 0x02, 0xb9, 0xad, 0x1a, 0x52, 0x33, 0x82, 0xb9, 0xab, 0x09, 0x32, 0x12, 0x53, - 0x46, 0x24, 0x82, 0xea, 0xcb, 0x9a, 0x10, 0x22, 0xa0, 0xcc, 0x9a, 0x28, 0x42, 0x01, 0xaa, 0x09, - 0x54, 0x25, 0x03, 0xa8, 0xab, 0x9a, 0x98, 0xdb, 0xbc, 0x29, 0x56, 0x33, 0x81, 0xcc, 0xbb, 0x09, - 0x33, 0x14, 0xb9, 0xbe, 0xbb, 0x89, 0x88, 0x88, 0x28, 0x64, 0x23, 0x91, 0xdd, 0xbb, 0x0a, 0x42, - 0x33, 0x80, 0xbb, 0x19, 0x45, 0x34, 0x01, 0x98, 0x20, 0x46, 0x33, 0x82, 0xca, 0xbb, 0xab, 0xba, - 0xdc, 0x9c, 0x18, 0x54, 0x23, 0x90, 0xdb, 0x9b, 0x30, 0x35, 0x13, 0xa0, 0xbb, 0x89, 0x41, 0x22, - 0x12, 0x63, 0x35, 0x14, 0xa0, 0xcd, 0xac, 0x88, 0x21, 0x01, 0xc9, 0xbb, 0x89, 0x32, 0x14, 0xa9, - 0xab, 0x61, 0x36, 0x24, 0x81, 0xba, 0xba, 0x99, 0xaa, 0xcc, 0x9a, 0x62, 0x35, 0x23, 0xb9, 0xcd, - 0x9a, 0x10, 0x23, 0x81, 0xdc, 0xbb, 0x9a, 0x09, 0x88, 0x89, 0x41, 0x45, 0x12, 0xc9, 0xbe, 0x9b, - 0x28, 0x43, 0x12, 0x98, 0x8a, 0x41, 0x44, 0x12, 0x98, 0x08, 0x64, 0x44, 0x12, 0x90, 0xbb, 0xac, - 0xaa, 0xba, 0xbc, 0x89, 0x63, 0x34, 0x02, 0xc9, 0xac, 0x09, 0x43, 0x34, 0x81, 0xa9, 0x9a, 0x10, - 0x24, 0x22, 0x32, 0x55, 0x43, 0x82, 0xea, 0xbc, 0xaa, 0x10, 0x11, 0x90, 0xcb, 0x9b, 0x10, 0x23, - 0xa8, 0xbd, 0x2a, 0x67, 0x43, 0x12, 0xa8, 0xba, 0xab, 0xaa, 0xbb, 0xab, 0x58, 0x46, 0x24, 0x80, - 0xcb, 0xbb, 0x89, 0x42, 0x02, 0xd9, 0xdb, 0x9a, 0x09, 0x08, 0x98, 0x00, 0x43, 0x24, 0xa1, 0xde, - 0xbb, 0x89, 0x31, 0x24, 0x81, 0x88, 0x30, 0x54, 0x13, 0x80, 0x99, 0x62, 0x46, 0x33, 0x01, 0xb9, - 0xbc, 0xcb, 0xaa, 0xbb, 0x9a, 0x40, 0x45, 0x22, 0xa0, 0xbc, 0x9a, 0x41, 0x34, 0x13, 0xa8, 0xaa, - 0x18, 0x44, 0x33, 0x32, 0x53, 0x44, 0x12, 0xb8, 0xce, 0xbb, 0x8a, 0x11, 0x80, 0xb9, 0xbb, 0x18, - 0x32, 0xb0, 0xdf, 0x8a, 0x62, 0x45, 0x23, 0x81, 0xa9, 0xac, 0xab, 0xab, 0xab, 0x18, 0x45, 0x35, - 0x01, 0xb9, 0xbd, 0x99, 0x20, 0x12, 0xb8, 0xce, 0xab, 0x8a, 0x08, 0x90, 0x80, 0x22, 0x35, 0x81, - 0xec, 0xcc, 0x9a, 0x18, 0x31, 0x02, 0x11, 0x42, 0x34, 0x24, 0x90, 0xaa, 0x48, 0x67, 0x43, 0x12, - 0x80, 0xba, 0xbc, 0xac, 0xba, 0x9a, 0x20, 0x63, 0x32, 0x80, 0xcb, 0x9a, 0x28, 0x44, 0x23, 0x80, - 0x9a, 0x19, 0x53, 0x34, 0x23, 0x34, 0x34, 0x23, 0xa0, 0xde, 0xbb, 0xaa, 0x08, 0x88, 0xba, 0x8a, - 0x20, 0x33, 0xd1, 0xcf, 0xab, 0x30, 0x47, 0x34, 0x02, 0x90, 0xb9, 0xbc, 0xac, 0xab, 0x09, 0x43, - 0x35, 0x12, 0xa9, 0xcc, 0x99, 0x18, 0x11, 0xb8, 0xcd, 0xbb, 0x8a, 0x08, 0x00, 0x09, 0x31, 0x24, - 0x81, 0xde, 0xcc, 0xaa, 0x08, 0x21, 0x00, 0x00, 0x63, 0x35, 0x24, 0x80, 0xba, 0x0a, 0x64, 0x45, - 0x22, 0x02, 0x99, 0xca, 0xdb, 0xba, 0xab, 0x18, 0x52, 0x23, 0x81, 0xba, 0x9c, 0x28, 0x34, 0x14, - 0x90, 0xa9, 0x08, 0x44, 0x34, 0x33, 0x43, 0x34, 0x22, 0xa0, 0xdc, 0xac, 0x9a, 0x88, 0xa8, 0xcb, - 0x9b, 0x31, 0x26, 0x92, 0xfb, 0xac, 0x09, 0x53, 0x44, 0x22, 0x01, 0x99, 0xca, 0xcb, 0xac, 0x8a, - 0x30, 0x35, 0x22, 0xa8, 0xbc, 0x9b, 0x20, 0x22, 0xb8, 0xcf, 0xab, 0x8a, 0x08, 0x01, 0x80, 0x21, - 0x24, 0x92, 0xfc, 0xbc, 0x9b, 0x08, 0x12, 0x90, 0xaa, 0x51, 0x47, 0x33, 0x01, 0xca, 0x9b, 0x31, - 0x57, 0x23, 0x13, 0x80, 0xb9, 0xdb, 0xcc, 0xba, 0x89, 0x41, 0x33, 0x01, 0xc9, 0xab, 0x29, 0x44, - 0x23, 0x90, 0xca, 0x09, 0x41, 0x25, 0x23, 0x33, 0x34, 0x24, 0x80, 0xcc, 0xbc, 0x8a, 0x10, 0x90, - 0xdb, 0xac, 0x19, 0x44, 0x12, 0xb8, 0xce, 0x9a, 0x30, 0x35, 0x24, 0x02, 0x80, 0xa8, 0xdb, 0xcc, - 0x9b, 0x19, 0x53, 0x23, 0x91, 0xcb, 0xab, 0x18, 0x33, 0x81, 0xce, 0xbc, 0x8a, 0x10, 0x11, 0x00, - 0x00, 0x42, 0x02, 0xfa, 0xdc, 0x9a, 0x19, 0x22, 0x81, 0xca, 0x8a, 0x63, 0x45, 0x12, 0x98, 0xbb, - 0x09, 0x73, 0x43, 0x22, 0x01, 0x88, 0xb9, 0xdc, 0xbc, 0x9b, 0x28, 0x53, 0x13, 0xa8, 0xbc, 0x0a, - 0x42, 0x25, 0x81, 0xb9, 0xab, 0x30, 0x45, 0x33, 0x22, 0x33, 0x35, 0x02, 0xda, 0xbd, 0x9b, 0x10, - 0x22, 0xb9, 0xbf, 0x9a, 0x41, 0x34, 0x81, 0xeb, 0xbb, 0x19, 0x53, 0x34, 0x12, 0x81, 0x90, 0xb9, - 0xdd, 0xcb, 0x8a, 0x40, 0x43, 0x02, 0xba, 0xad, 0x09, 0x31, 0x23, 0xc9, 0xcd, 0x9b, 0x19, 0x11, - 0x11, 0x00, 0x31, 0x33, 0xb0, 0xff, 0xac, 0x09, 0x20, 0x13, 0xa8, 0xbb, 0x39, 0x47, 0x24, 0x01, - 0xca, 0x9a, 0x30, 0x45, 0x33, 0x11, 0x08, 0x99, 0xca, 0xcd, 0xcb, 0x89, 0x32, 0x34, 0x91, 0xcb, - 0x9c, 0x38, 0x44, 0x12, 0xa8, 0xbb, 0x8a, 0x53, 0x34, 0x23, 0x33, 0x53, 0x22, 0xa8, 0xce, 0xac, - 0x08, 0x22, 0x01, 0xea, 0xab, 0x19, 0x53, 0x23, 0xb8, 0xcd, 0x9a, 0x30, 0x44, 0x22, 0x01, 0x08, - 0x88, 0xca, 0xbe, 0xac, 0x19, 0x43, 0x24, 0x98, 0xcc, 0x9a, 0x20, 0x43, 0x91, 0xeb, 0xbb, 0x8a, - 0x21, 0x22, 0x11, 0x20, 0x32, 0x82, 0xfd, 0xbd, 0xaa, 0x20, 0x33, 0x83, 0xdb, 0x9b, 0x51, 0x45, - 0x22, 0x98, 0xbb, 0x0a, 0x63, 0x24, 0x22, 0x00, 0x08, 0x99, 0xeb, 0xcc, 0xab, 0x10, 0x34, 0x04, - 0xb8, 0xbc, 0x0a, 0x53, 0x24, 0x81, 0xca, 0xaa, 0x10, 0x44, 0x33, 0x12, 0x33, 0x24, 0x82, 0xfb, - 0xbc, 0x9a, 0x21, 0x23, 0xa0, 0xbe, 0x9b, 0x40, 0x34, 0x02, 0xdb, 0xac, 0x09, 0x43, 0x24, 0x11, - 0x08, 0x08, 0x99, 0xdc, 0xbc, 0x9b, 0x41, 0x34, 0x02, 0xdb, 0xac, 0x09, 0x32, 0x14, 0xb8, 0xbe, - 0xbb, 0x18, 0x31, 0x22, 0x21, 0x32, 0x14, 0xd0, 0xce, 0xac, 0x0a, 0x31, 0x23, 0xa0, 0xcb, 0x1a, - 0x45, 0x25, 0x01, 0xaa, 0x9b, 0x30, 0x46, 0x22, 0x01, 0x88, 0x88, 0xb9, 0xec, 0xcb, 0x89, 0x32, - 0x34, 0xa1, 0xeb, 0x9b, 0x20, 0x35, 0x23, 0xb8, 0xbc, 0x8b, 0x42, 0x35, 0x33, 0x42, 0x32, 0x12, - 0xb9, 0xcf, 0x9c, 0x19, 0x31, 0x11, 0xc9, 0xac, 0x09, 0x42, 0x14, 0x90, 0xbc, 0x9b, 0x30, 0x45, - 0x12, 0x80, 0x08, 0x88, 0xb9, 0xce, 0xac, 0x19, 0x43, 0x23, 0xc8, 0xcc, 0x9a, 0x20, 0x24, 0x92, - 0xfb, 0xbb, 0x99, 0x21, 0x32, 0x22, 0x22, 0x33, 0xa1, 0xdf, 0xbd, 0xaa, 0x10, 0x24, 0x02, 0xb9, - 0xab, 0x41, 0x46, 0x22, 0x98, 0xaa, 0x09, 0x53, 0x34, 0x12, 0x80, 0x08, 0x98, 0xeb, 0xcc, 0xab, - 0x10, 0x44, 0x02, 0xb9, 0xae, 0x89, 0x43, 0x24, 0x82, 0xbb, 0xac, 0x18, 0x44, 0x24, 0x23, 0x23, - 0x14, 0x91, 0xfb, 0xbb, 0x9b, 0x21, 0x33, 0xa1, 0xcc, 0xab, 0x31, 0x35, 0x02, 0xda, 0xac, 0x08, - 0x43, 0x33, 0x02, 0x88, 0x88, 0xa9, 0xed, 0xcb, 0x8b, 0x31, 0x35, 0x91, 0xdc, 0xbb, 0x09, 0x43, - 0x13, 0xb8, 0xbf, 0x9c, 0x09, 0x21, 0x22, 0x33, 0x33, 0x13, 0xea, 0xce, 0xac, 0x09, 0x20, 0x23, - 0x80, 0xaa, 0x19, 0x54, 0x43, 0x01, 0xa9, 0x8a, 0x41, 0x45, 0x22, 0x00, 0x89, 0x98, 0xa9, 0xcd, - 0xcb, 0x09, 0x43, 0x23, 0xb8, 0xce, 0x9a, 0x30, 0x35, 0x23, 0xa8, 0xad, 0x9a, 0x41, 0x53, 0x43, - 0x33, 0x33, 0x01, 0xe9, 0xbc, 0x9c, 0x09, 0x22, 0x02, 0xa9, 0xbb, 0x0a, 0x63, 0x22, 0xa8, 0xbc, - 0x9a, 0x52, 0x34, 0x02, 0x80, 0x89, 0x99, 0xeb, 0xcc, 0xab, 0x10, 0x44, 0x01, 0xeb, 0xbc, 0x8a, - 0x30, 0x24, 0x91, 0xcd, 0xcb, 0x99, 0x10, 0x32, 0x43, 0x24, 0x13, 0xa8, 0xed, 0xbb, 0x9b, 0x18, - 0x33, 0x12, 0x99, 0x8a, 0x52, 0x45, 0x12, 0x90, 0x89, 0x20, 0x45, 0x23, 0x11, 0x88, 0x88, 0xa9, - 0xdc, 0xcc, 0x89, 0x31, 0x43, 0xa1, 0xcd, 0xbb, 0x18, 0x54, 0x23, 0x91, 0xba, 0x9c, 0x18, 0x44, - 0x44, 0x43, 0x33, 0x13, 0xa8, 0xcd, 0xac, 0x8a, 0x10, 0x12, 0x90, 0xa9, 0x0a, 0x31, 0x24, 0x90, - 0xbd, 0x99, 0x42, 0x44, 0x12, 0x80, 0x99, 0xa9, 0xdb, 0xdc, 0xab, 0x28, 0x53, 0x12, 0xeb, 0xcc, - 0xaa, 0x18, 0x32, 0x02, 0xda, 0xcc, 0xaa, 0x89, 0x11, 0x43, 0x35, 0x24, 0x82, 0xda, 0xcc, 0xab, - 0x09, 0x20, 0x11, 0x00, 0x18, 0x31, 0x35, 0x13, 0x90, 0x89, 0x62, 0x35, 0x24, 0x01, 0x88, 0x98, - 0xa9, 0xdb, 0xbc, 0x8a, 0x53, 0x24, 0x91, 0xcd, 0xac, 0x09, 0x32, 0x35, 0x01, 0xa9, 0xaa, 0x89, - 0x42, 0x45, 0x44, 0x34, 0x14, 0x81, 0xba, 0xbd, 0x9b, 0x08, 0x01, 0x81, 0x99, 0x08, 0x22, 0x33, - 0xc8, 0xbd, 0x0a, 0x63, 0x34, 0x02, 0xa8, 0xaa, 0x99, 0xcb, 0xcd, 0xab, 0x28, 0x45, 0x12, 0xda, - 0xcd, 0xaa, 0x08, 0x21, 0x02, 0xc9, 0xbc, 0x9c, 0x99, 0x80, 0x31, 0x55, 0x34, 0x13, 0xb8, 0xce, - 0xab, 0x8a, 0x18, 0x11, 0x80, 0x08, 0x42, 0x44, 0x02, 0x90, 0x9a, 0x41, 0x36, 0x24, 0x81, 0x89, - 0x99, 0x88, 0xba, 0xbd, 0x9b, 0x62, 0x25, 0x02, 0xdb, 0xad, 0x8a, 0x31, 0x24, 0x02, 0xa9, 0xaa, - 0x18, 0x42, 0x43, 0x44, 0x45, 0x34, 0x02, 0xa8, 0xcc, 0xab, 0x09, 0x10, 0x88, 0xa9, 0x08, 0x34, - 0x24, 0x90, 0xbd, 0xab, 0x42, 0x36, 0x12, 0x98, 0xab, 0x99, 0xaa, 0xcc, 0xbc, 0x09, 0x54, 0x14, - 0x90, 0xbe, 0xbc, 0x09, 0x11, 0x12, 0xb8, 0xbd, 0xab, 0x88, 0x08, 0x08, 0x61, 0x45, 0x24, 0x82, - 0xda, 0xbc, 0x9a, 0x08, 0x10, 0x98, 0x89, 0x42, 0x45, 0x12, 0x98, 0xbb, 0x29, 0x55, 0x34, 0x02, - 0xa8, 0xa9, 0x89, 0xa9, 0xdb, 0x9b, 0x50, 0x45, 0x12, 0xb8, 0xcd, 0x9b, 0x20, 0x43, 0x02, 0x98, - 0xab, 0x19, 0x42, 0x23, 0x33, 0x56, 0x35, 0x24, 0x80, 0xca, 0xac, 0x99, 0x10, 0x80, 0xaa, 0x8a, - 0x52, 0x34, 0x82, 0xda, 0xac, 0x18, 0x63, 0x23, 0x80, 0xaa, 0xab, 0x9a, 0xba, 0xbd, 0x9b, 0x73, - 0x34, 0x82, 0xeb, 0xad, 0x9a, 0x10, 0x22, 0x90, 0xbc, 0xac, 0x09, 0x01, 0x81, 0x18, 0x73, 0x44, - 0x22, 0xb8, 0xcd, 0x9b, 0x09, 0x10, 0x90, 0xaa, 0x19, 0x46, 0x24, 0x01, 0xba, 0x9c, 0x41, 0x44, - 0x23, 0x90, 0xaa, 0x9a, 0x99, 0xc9, 0xbb, 0x29, 0x47, 0x34, 0x81, 0xcc, 0xac, 0x19, 0x41, 0x22, - 0x88, 0xbb, 0x8a, 0x41, 0x24, 0x12, 0x22, 0x55, 0x34, 0x12, 0xb9, 0xcc, 0x9b, 0x00, 0x01, 0xb9, - 0xbc, 0x28, 0x46, 0x13, 0xa0, 0xbd, 0x8b, 0x51, 0x53, 0x02, 0xa8, 0xba, 0x9a, 0x9a, 0xcb, 0xbb, - 0x48, 0x55, 0x23, 0xb8, 0xce, 0xab, 0x08, 0x31, 0x82, 0xd9, 0xcb, 0x99, 0x20, 0x11, 0x80, 0x20, - 0x64, 0x43, 0x81, 0xda, 0xac, 0x8a, 0x10, 0x81, 0xb9, 0x9b, 0x61, 0x35, 0x14, 0xb8, 0xbb, 0x1a, - 0x64, 0x24, 0x01, 0xa8, 0xaa, 0xa9, 0x99, 0xba, 0x8b, 0x73, 0x36, 0x13, 0xb9, 0xbe, 0x9b, 0x21, - 0x34, 0x02, 0xba, 0xac, 0x18, 0x34, 0x24, 0x11, 0x32, 0x46, 0x23, 0x91, 0xeb, 0xaa, 0x09, 0x10, - 0x90, 0xbc, 0x8c, 0x51, 0x34, 0x02, 0xca, 0xbc, 0x18, 0x63, 0x23, 0x81, 0xba, 0xbb, 0xab, 0xcb, - 0xcb, 0x89, 0x54, 0x25, 0x82, 0xea, 0xcb, 0x99, 0x10, 0x22, 0x98, 0xbd, 0xab, 0x18, 0x32, 0x12, - 0x08, 0x42, 0x45, 0x22, 0xc8, 0xcc, 0xaa, 0x00, 0x11, 0xa8, 0xbd, 0x19, 0x64, 0x43, 0x81, 0xba, - 0xab, 0x40, 0x45, 0x22, 0x91, 0xb9, 0xab, 0xaa, 0xba, 0xbb, 0x40, 0x67, 0x32, 0x91, 0xda, 0xbb, - 0x09, 0x43, 0x22, 0xa0, 0xbc, 0x9a, 0x42, 0x34, 0x23, 0x21, 0x52, 0x34, 0x02, 0xc9, 0xbc, 0x8a, - 0x20, 0x01, 0xeb, 0xbb, 0x29, 0x55, 0x33, 0xa0, 0xcc, 0x9a, 0x31, 0x36, 0x12, 0xa0, 0xcb, 0xba, - 0xba, 0xbb, 0x9c, 0x50, 0x54, 0x13, 0xa8, 0xbe, 0x9c, 0x09, 0x21, 0x01, 0xca, 0xbc, 0x8a, 0x20, - 0x33, 0x02, 0x11, 0x53, 0x43, 0x91, 0xdc, 0xbb, 0x09, 0x21, 0x81, 0xdc, 0x9b, 0x41, 0x45, 0x13, - 0xa0, 0xbc, 0x0a, 0x63, 0x34, 0x02, 0x98, 0xbb, 0xcb, 0xaa, 0xaa, 0x09, 0x55, 0x35, 0x12, 0xb8, - 0xbd, 0x9b, 0x30, 0x34, 0x82, 0xca, 0xac, 0x18, 0x53, 0x33, 0x22, 0x22, 0x34, 0x22, 0xa0, 0xbe, - 0xab, 0x28, 0x22, 0xd8, 0xbd, 0x9b, 0x52, 0x35, 0x12, 0xba, 0xad, 0x09, 0x63, 0x33, 0x01, 0xb9, - 0xbc, 0xac, 0xcb, 0xaa, 0x18, 0x54, 0x43, 0x81, 0xda, 0xbc, 0x8a, 0x28, 0x11, 0xa8, 0xcd, 0x9b, - 0x19, 0x32, 0x23, 0x22, 0x22, 0x43, 0x82, 0xeb, 0xbc, 0x8b, 0x31, 0x12, 0xfa, 0xcb, 0x09, 0x54, - 0x33, 0x02, 0xca, 0xab, 0x30, 0x46, 0x23, 0x81, 0xa9, 0xbc, 0xbb, 0xbc, 0x8a, 0x41, 0x37, 0x24, - 0x81, 0xcb, 0xab, 0x09, 0x42, 0x13, 0xa8, 0xbd, 0x8a, 0x41, 0x34, 0x24, 0x22, 0x32, 0x12, 0x91, - 0xcc, 0xbb, 0x19, 0x33, 0x91, 0xde, 0xbb, 0x28, 0x54, 0x14, 0x91, 0xbb, 0x9b, 0x51, 0x44, 0x22, - 0x88, 0xca, 0xcb, 0xcb, 0xab, 0x0a, 0x51, 0x34, 0x23, 0xb9, 0xbf, 0xab, 0x09, 0x11, 0x91, 0xeb, - 0xcb, 0x8a, 0x20, 0x32, 0x43, 0x32, 0x22, 0x81, 0xda, 0xbc, 0x9b, 0x20, 0x24, 0xa0, 0xcd, 0x9b, - 0x41, 0x54, 0x12, 0x90, 0xbb, 0x09, 0x54, 0x34, 0x13, 0x90, 0xcb, 0xcc, 0xba, 0xab, 0x38, 0x55, - 0x24, 0x12, 0xa9, 0xac, 0x8a, 0x20, 0x33, 0x91, 0xeb, 0xab, 0x18, 0x63, 0x24, 0x24, 0x32, 0x11, - 0x90, 0xcb, 0xbb, 0x09, 0x43, 0x12, 0xda, 0xbd, 0x89, 0x41, 0x34, 0x12, 0xb9, 0xbb, 0x29, 0x56, - 0x23, 0x02, 0x98, 0xdc, 0xdb, 0xcb, 0x9a, 0x10, 0x34, 0x24, 0x91, 0xdb, 0xbb, 0x9a, 0x18, 0x90, - 0xea, 0xcb, 0xab, 0x18, 0x41, 0x42, 0x33, 0x33, 0x01, 0xda, 0xbc, 0x9b, 0x20, 0x34, 0x82, 0xcc, - 0xac, 0x18, 0x63, 0x23, 0x82, 0xaa, 0x8a, 0x51, 0x44, 0x22, 0x02, 0xa0, 0xcc, 0xcd, 0xab, 0x8a, - 0x52, 0x44, 0x22, 0x80, 0xba, 0x9b, 0x10, 0x32, 0x81, 0xdb, 0xac, 0x89, 0x42, 0x44, 0x34, 0x34, - 0x22, 0x81, 0xcb, 0xac, 0x8a, 0x32, 0x23, 0xa0, 0xce, 0x9a, 0x20, 0x53, 0x12, 0xa0, 0x9a, 0x18, - 0x54, 0x33, 0x23, 0x00, 0xca, 0xcf, 0xbc, 0xbc, 0x09, 0x42, 0x24, 0x02, 0xba, 0xad, 0x9b, 0x08, - 0x90, 0xd9, 0xcb, 0xbb, 0x99, 0x10, 0x43, 0x54, 0x33, 0x23, 0xb8, 0xcd, 0xab, 0x19, 0x43, 0x12, - 0xa8, 0xbc, 0x0a, 0x52, 0x33, 0x01, 0xaa, 0x09, 0x73, 0x53, 0x22, 0x01, 0x00, 0xc9, 0xdd, 0xbc, - 0xab, 0x30, 0x55, 0x23, 0x81, 0xa9, 0x9a, 0x10, 0x22, 0x82, 0xda, 0xac, 0x8a, 0x20, 0x34, 0x45, - 0x44, 0x33, 0x12, 0xc9, 0xbc, 0x9b, 0x20, 0x34, 0x82, 0xca, 0xbb, 0x19, 0x34, 0x23, 0x98, 0x9b, - 0x30, 0x47, 0x23, 0x02, 0x80, 0x80, 0xea, 0xde, 0xbc, 0xaa, 0x20, 0x44, 0x12, 0xa8, 0xac, 0x9b, - 0x08, 0x90, 0xda, 0xbd, 0xbb, 0x89, 0x00, 0x21, 0x63, 0x34, 0x25, 0x81, 0xcb, 0xbc, 0x0a, 0x41, - 0x23, 0x81, 0xcb, 0x9a, 0x21, 0x34, 0x02, 0xb9, 0x8a, 0x73, 0x43, 0x22, 0x08, 0x08, 0x00, 0xe9, - 0xce, 0xbc, 0x89, 0x52, 0x24, 0x03, 0x98, 0x9a, 0x18, 0x33, 0x12, 0xdb, 0xad, 0x8a, 0x20, 0x32, - 0x43, 0x54, 0x44, 0x23, 0x90, 0xeb, 0xab, 0x08, 0x32, 0x23, 0xa8, 0xbc, 0x0a, 0x42, 0x14, 0x90, - 0xbb, 0x29, 0x46, 0x24, 0x02, 0x99, 0x88, 0x90, 0xfb, 0xcd, 0xac, 0x09, 0x32, 0x24, 0x80, 0xdb, - 0xaa, 0x08, 0x11, 0xb9, 0xce, 0xac, 0x89, 0x08, 0x10, 0x10, 0x53, 0x35, 0x23, 0xb8, 0xbe, 0xab, - 0x28, 0x53, 0x12, 0x99, 0x9b, 0x28, 0x43, 0x03, 0xda, 0x9b, 0x30, 0x47, 0x23, 0x90, 0x99, 0x89, - 0x80, 0xeb, 0xcd, 0xab, 0x20, 0x36, 0x23, 0x80, 0xab, 0x19, 0x53, 0x14, 0xa0, 0xcc, 0xaa, 0x18, - 0x32, 0x22, 0x43, 0x55, 0x43, 0x02, 0xc9, 0xbc, 0x9a, 0x20, 0x34, 0x01, 0xba, 0x9a, 0x30, 0x34, - 0x92, 0xcc, 0x9a, 0x63, 0x35, 0x12, 0xa8, 0x9a, 0x89, 0x90, 0xfc, 0xbc, 0x9b, 0x20, 0x34, 0x02, - 0xcb, 0xbc, 0x09, 0x22, 0x92, 0xed, 0xbc, 0xaa, 0x18, 0x11, 0x00, 0x31, 0x64, 0x23, 0x82, 0xdb, - 0xad, 0x89, 0x31, 0x24, 0x81, 0xaa, 0x89, 0x42, 0x23, 0xb0, 0xbd, 0x0a, 0x64, 0x43, 0x01, 0xa9, - 0x9a, 0x08, 0x88, 0xec, 0xcb, 0x0a, 0x52, 0x43, 0x01, 0xa9, 0x89, 0x41, 0x25, 0x82, 0xda, 0xbb, - 0x0a, 0x31, 0x24, 0x21, 0x42, 0x45, 0x23, 0x91, 0xdc, 0xbb, 0x09, 0x33, 0x14, 0xa0, 0xaa, 0x18, - 0x44, 0x12, 0xca, 0xac, 0x39, 0x55, 0x33, 0x81, 0xba, 0x9a, 0x89, 0xb8, 0xcf, 0xac, 0x09, 0x32, - 0x23, 0xc8, 0xbd, 0x9a, 0x30, 0x23, 0xd8, 0xce, 0x9c, 0x89, 0x00, 0x11, 0x00, 0x31, 0x45, 0x22, - 0xb0, 0xcd, 0xaa, 0x18, 0x24, 0x03, 0xa0, 0x89, 0x31, 0x34, 0x92, 0xcd, 0x9c, 0x20, 0x36, 0x14, - 0x80, 0xba, 0x9a, 0x88, 0xa9, 0xdc, 0x9b, 0x30, 0x45, 0x13, 0x98, 0xbb, 0x30, 0x47, 0x23, 0xa8, - 0xcc, 0x9b, 0x18, 0x32, 0x23, 0x32, 0x54, 0x34, 0x12, 0xca, 0xcd, 0x8a, 0x28, 0x23, 0x82, 0x99, - 0x0a, 0x52, 0x33, 0xa0, 0xce, 0x8a, 0x51, 0x35, 0x12, 0x98, 0xab, 0xaa, 0x98, 0xca, 0xcc, 0x9b, - 0x20, 0x24, 0x90, 0xdd, 0xaa, 0x18, 0x33, 0x83, 0xed, 0xbc, 0x9b, 0x08, 0x21, 0x11, 0x20, 0x53, - 0x34, 0x81, 0xea, 0xcb, 0x89, 0x31, 0x24, 0x81, 0x89, 0x18, 0x34, 0x14, 0xc9, 0xcc, 0x09, 0x52, - 0x24, 0x02, 0xa9, 0xbb, 0x9a, 0x98, 0xca, 0xbb, 0x1a, 0x46, 0x24, 0x80, 0xbb, 0x09, 0x55, 0x25, - 0x01, 0xba, 0xad, 0x8a, 0x31, 0x23, 0x23, 0x32, 0x45, 0x23, 0x90, 0xcd, 0xac, 0x09, 0x21, 0x13, - 0x90, 0x89, 0x41, 0x35, 0x02, 0xeb, 0xbb, 0x18, 0x56, 0x23, 0x01, 0xa9, 0xbb, 0xaa, 0xaa, 0xdb, - 0xab, 0x19, 0x43, 0x92, 0xfc, 0xbb, 0x8a, 0x42, 0x23, 0xc8, 0xce, 0xac, 0x89, 0x10, 0x11, 0x11, - 0x21, 0x53, 0x12, 0xa8, 0xcd, 0xaa, 0x18, 0x43, 0x12, 0x80, 0x28, 0x63, 0x23, 0xa1, 0xdd, 0x9b, - 0x38, 0x45, 0x33, 0x80, 0xbb, 0xbc, 0xaa, 0xa9, 0xa9, 0x09, 0x44, 0x25, 0x82, 0xca, 0x9b, 0x61, - 0x35, 0x14, 0x90, 0xcb, 0xab, 0x19, 0x42, 0x32, 0x23, 0x43, 0x24, 0x01, 0xcb, 0xbd, 0x9b, 0x28, - 0x32, 0x81, 0x88, 0x41, 0x36, 0x14, 0xa8, 0xcd, 0x8a, 0x51, 0x34, 0x14, 0x90, 0xb9, 0xbb, 0xab, - 0xab, 0xab, 0x18, 0x42, 0x02, 0xfd, 0xbc, 0x9a, 0x20, 0x43, 0x82, 0xdc, 0xbd, 0xaa, 0x08, 0x20, - 0x21, 0x32, 0x33, 0x24, 0x90, 0xbd, 0xad, 0x09, 0x31, 0x23, 0x01, 0x20, 0x55, 0x34, 0x01, 0xda, - 0xac, 0x8a, 0x53, 0x34, 0x12, 0xa8, 0xdb, 0xba, 0xab, 0x9a, 0x18, 0x62, 0x33, 0x02, 0xda, 0xbb, - 0x38, 0x57, 0x33, 0x01, 0xc9, 0xbb, 0x9a, 0x30, 0x53, 0x33, 0x33, 0x24, 0x02, 0xc9, 0xbd, 0xab, - 0x08, 0x11, 0x81, 0x88, 0x51, 0x46, 0x33, 0x91, 0xcc, 0xab, 0x28, 0x55, 0x24, 0x01, 0xa0, 0xca, - 0xba, 0xac, 0xa9, 0x00, 0x32, 0x03, 0xea, 0xbe, 0xac, 0x08, 0x32, 0x22, 0xb9, 0xcf, 0xbb, 0x9a, - 0x18, 0x21, 0x42, 0x23, 0x23, 0x81, 0xdb, 0xac, 0x0a, 0x20, 0x23, 0x00, 0x20, 0x57, 0x53, 0x12, - 0xa8, 0xcc, 0x9a, 0x20, 0x44, 0x14, 0x81, 0xb8, 0xbc, 0xbc, 0xab, 0x09, 0x43, 0x35, 0x02, 0xb9, - 0xcc, 0x09, 0x52, 0x35, 0x22, 0x90, 0xbb, 0xbb, 0x09, 0x32, 0x45, 0x34, 0x33, 0x11, 0xb9, 0xbe, - 0x9b, 0x09, 0x01, 0x90, 0xba, 0x40, 0x47, 0x24, 0x12, 0xc9, 0xbb, 0x09, 0x52, 0x35, 0x23, 0x00, - 0xa9, 0xcd, 0xcb, 0xab, 0x08, 0x42, 0x23, 0xb8, 0xde, 0xbb, 0x8a, 0x21, 0x23, 0x91, 0xcd, 0xbc, - 0xba, 0x89, 0x18, 0x32, 0x45, 0x22, 0x81, 0xba, 0xad, 0x0a, 0x31, 0x13, 0x98, 0x9a, 0x74, 0x35, - 0x24, 0x81, 0xcb, 0xab, 0x19, 0x42, 0x34, 0x02, 0x80, 0xda, 0xdc, 0xbb, 0x9a, 0x30, 0x45, 0x23, - 0xa0, 0xbc, 0x9c, 0x21, 0x45, 0x23, 0x81, 0xa9, 0x9a, 0x99, 0x10, 0x41, 0x54, 0x43, 0x12, 0xa0, - 0xbc, 0xac, 0x08, 0x21, 0x90, 0xda, 0x8a, 0x63, 0x44, 0x22, 0x98, 0xbb, 0x9a, 0x41, 0x44, 0x32, - 0x02, 0x81, 0xda, 0xdc, 0xbb, 0x9b, 0x31, 0x35, 0x02, 0xdc, 0xbc, 0x9b, 0x18, 0x22, 0x02, 0xca, - 0xcc, 0xaa, 0xaa, 0x98, 0x10, 0x73, 0x33, 0x12, 0xc9, 0xbc, 0x8a, 0x31, 0x24, 0x91, 0xba, 0x29, - 0x57, 0x34, 0x11, 0xb9, 0xbb, 0x8a, 0x42, 0x33, 0x13, 0x81, 0xa8, 0xde, 0xbd, 0xbc, 0x09, 0x53, - 0x34, 0x01, 0xca, 0xbb, 0x19, 0x63, 0x33, 0x03, 0x90, 0x9a, 0x09, 0x08, 0x00, 0x63, 0x45, 0x33, - 0x81, 0xeb, 0xbb, 0x8a, 0x32, 0x12, 0xca, 0xbc, 0x28, 0x56, 0x23, 0x82, 0xb9, 0xab, 0x28, 0x35, - 0x24, 0x01, 0x11, 0x80, 0xdc, 0xcd, 0xbb, 0x08, 0x53, 0x23, 0xb0, 0xce, 0xbb, 0x89, 0x21, 0x02, - 0xa8, 0xcc, 0xaa, 0x99, 0x99, 0x9a, 0x31, 0x47, 0x23, 0x90, 0xcc, 0xab, 0x28, 0x53, 0x12, 0xb9, - 0xab, 0x71, 0x44, 0x23, 0x90, 0xba, 0x9b, 0x20, 0x33, 0x03, 0x80, 0x88, 0xc8, 0xdf, 0xbd, 0xab, - 0x30, 0x36, 0x14, 0x90, 0xbc, 0x9a, 0x30, 0x35, 0x23, 0x80, 0x99, 0x08, 0x21, 0x00, 0x18, 0x64, - 0x35, 0x23, 0xc9, 0xdc, 0x9a, 0x10, 0x32, 0x80, 0xbc, 0x9b, 0x52, 0x36, 0x12, 0xa0, 0xba, 0x08, - 0x52, 0x33, 0x01, 0x00, 0x10, 0xa8, 0xee, 0xbd, 0x9a, 0x30, 0x35, 0x02, 0xeb, 0xbc, 0x9a, 0x18, - 0x12, 0x80, 0xcb, 0xbb, 0x99, 0x90, 0xb9, 0x8a, 0x73, 0x35, 0x12, 0xca, 0xbd, 0x0a, 0x41, 0x33, - 0x81, 0xcb, 0x09, 0x45, 0x34, 0x02, 0xb8, 0xab, 0x29, 0x53, 0x12, 0xa8, 0x9a, 0x89, 0xc9, 0xdf, - 0xcb, 0x09, 0x42, 0x25, 0x82, 0xc9, 0xab, 0x09, 0x53, 0x33, 0x01, 0x99, 0x08, 0x31, 0x23, 0x80, - 0x30, 0x57, 0x33, 0x92, 0xcd, 0xad, 0x09, 0x22, 0x12, 0xb8, 0xad, 0x19, 0x73, 0x23, 0x82, 0xa9, - 0x8a, 0x40, 0x24, 0x03, 0x98, 0x09, 0x01, 0xc8, 0xcf, 0xbc, 0x09, 0x43, 0x24, 0xa8, 0xcd, 0xbb, - 0x89, 0x21, 0x81, 0xca, 0xbb, 0x9a, 0x10, 0x91, 0xba, 0x19, 0x56, 0x33, 0xb1, 0xde, 0xaa, 0x20, - 0x53, 0x12, 0xa9, 0x9b, 0x40, 0x55, 0x22, 0x80, 0xaa, 0x89, 0x31, 0x33, 0xa0, 0xcb, 0x8b, 0x98, - 0xfa, 0xce, 0xaa, 0x28, 0x45, 0x13, 0x90, 0xbc, 0x9a, 0x30, 0x35, 0x12, 0x98, 0x89, 0x41, 0x43, - 0x12, 0x88, 0x21, 0x46, 0x12, 0xc9, 0xcd, 0x9a, 0x10, 0x23, 0x82, 0xdb, 0xaa, 0x41, 0x35, 0x23, - 0x98, 0x9b, 0x28, 0x36, 0x23, 0x91, 0xaa, 0x89, 0x81, 0xfb, 0xbe, 0x9c, 0x20, 0x44, 0x01, 0xda, - 0xbc, 0xaa, 0x00, 0x11, 0xa8, 0xcc, 0x9a, 0x08, 0x11, 0x90, 0x9a, 0x30, 0x46, 0x02, 0xea, 0xbc, - 0x89, 0x32, 0x35, 0x81, 0xa9, 0x1a, 0x73, 0x43, 0x02, 0x99, 0x9a, 0x30, 0x35, 0x01, 0xc9, 0xac, - 0x99, 0x89, 0xeb, 0xbc, 0x0a, 0x62, 0x43, 0x01, 0xc9, 0xba, 0x08, 0x53, 0x23, 0x91, 0x99, 0x28, - 0x54, 0x23, 0x02, 0x10, 0x32, 0x25, 0xa1, 0xde, 0xac, 0x09, 0x31, 0x22, 0xa8, 0xbc, 0x19, 0x73, - 0x33, 0x01, 0x99, 0x09, 0x44, 0x34, 0x82, 0xb9, 0xaa, 0x09, 0x98, 0xce, 0xad, 0x09, 0x42, 0x23, - 0xb8, 0xcf, 0xbb, 0x89, 0x00, 0xa0, 0xeb, 0xab, 0x09, 0x21, 0x12, 0x90, 0x09, 0x31, 0x15, 0xd8, - 0xbe, 0x9c, 0x28, 0x44, 0x12, 0x88, 0x9a, 0x31, 0x46, 0x23, 0x80, 0xa9, 0x18, 0x44, 0x22, 0xa8, - 0xbd, 0xbb, 0x99, 0xba, 0xce, 0xaa, 0x20, 0x36, 0x14, 0xa0, 0xbb, 0x8b, 0x42, 0x34, 0x02, 0xb9, - 0x09, 0x55, 0x34, 0x23, 0x01, 0x11, 0x22, 0x82, 0xfc, 0xbc, 0x9b, 0x10, 0x33, 0x81, 0xca, 0x9a, - 0x52, 0x35, 0x13, 0x88, 0x89, 0x63, 0x44, 0x22, 0x98, 0xba, 0xab, 0x99, 0xba, 0xbe, 0xab, 0x42, - 0x25, 0x91, 0xdd, 0xac, 0x9b, 0x08, 0x88, 0xcb, 0xbd, 0x9a, 0x20, 0x22, 0x02, 0x00, 0x10, 0x21, - 0xc8, 0xcf, 0xbc, 0x09, 0x42, 0x43, 0x01, 0x08, 0x28, 0x44, 0x24, 0x01, 0x98, 0x18, 0x54, 0x43, - 0x81, 0xca, 0xbc, 0xab, 0xaa, 0xba, 0xab, 0x29, 0x55, 0x24, 0x80, 0xca, 0x8a, 0x20, 0x44, 0x12, - 0xa8, 0x9a, 0x50, 0x36, 0x25, 0x22, 0x11, 0x11, 0x80, 0xda, 0xcc, 0xab, 0x89, 0x22, 0x12, 0xa8, - 0x9a, 0x21, 0x46, 0x33, 0x00, 0x19, 0x72, 0x54, 0x22, 0x81, 0xa9, 0xbb, 0xbb, 0xba, 0xbb, 0x9b, - 0x40, 0x35, 0xa2, 0xde, 0xbc, 0xab, 0x99, 0xa8, 0xdc, 0xcc, 0xaa, 0x08, 0x31, 0x32, 0x21, 0x11, - 0x80, 0xca, 0xce, 0xac, 0x8a, 0x31, 0x43, 0x03, 0x00, 0x31, 0x54, 0x24, 0x12, 0x88, 0x18, 0x73, - 0x43, 0x02, 0xa9, 0xcc, 0xcb, 0xaa, 0xab, 0x9a, 0x18, 0x34, 0x25, 0x80, 0xba, 0x9b, 0x42, 0x35, - 0x13, 0xc9, 0xab, 0x28, 0x57, 0x43, 0x33, 0x22, 0x22, 0x80, 0xda, 0xcc, 0xab, 0x89, 0x10, 0x01, - 0x98, 0x0a, 0x41, 0x35, 0x23, 0x90, 0x8a, 0x73, 0x46, 0x33, 0x11, 0x98, 0xbb, 0xbc, 0xcb, 0xaa, - 0x0a, 0x41, 0x43, 0x81, 0xec, 0xcb, 0xaa, 0x88, 0x88, 0xdb, 0xcd, 0xaa, 0x8a, 0x10, 0x32, 0x32, - 0x23, 0x13, 0xb9, 0xdf, 0xcb, 0x8a, 0x10, 0x22, 0x12, 0x01, 0x42, 0x36, 0x24, 0x01, 0x99, 0x89, - 0x44, 0x45, 0x22, 0x90, 0xba, 0xbd, 0xbc, 0xbb, 0xaa, 0x28, 0x44, 0x23, 0x91, 0xdb, 0x9b, 0x31, - 0x45, 0x12, 0xa0, 0xac, 0x0a, 0x42, 0x36, 0x34, 0x33, 0x24, 0x02, 0xb9, 0xcd, 0xbb, 0x9a, 0x11, - 0x10, 0xa9, 0x9a, 0x41, 0x36, 0x13, 0xa0, 0xab, 0x48, 0x57, 0x33, 0x13, 0x91, 0xb9, 0xca, 0xbc, - 0xcb, 0x8a, 0x31, 0x35, 0x83, 0xea, 0xcc, 0x9a, 0x08, 0x01, 0xb9, 0xce, 0xac, 0x9a, 0x00, 0x21, - 0x21, 0x43, 0x32, 0x80, 0xdc, 0xcc, 0x9a, 0x18, 0x22, 0x02, 0x80, 0x18, 0x55, 0x43, 0x12, 0x99, - 0x9a, 0x40, 0x45, 0x33, 0x81, 0xb9, 0xcb, 0xbc, 0xcc, 0xab, 0x0a, 0x51, 0x33, 0x02, 0xca, 0xad, - 0x18, 0x53, 0x23, 0x80, 0xdb, 0x9a, 0x10, 0x44, 0x24, 0x33, 0x34, 0x23, 0x91, 0xdc, 0xbc, 0x8a, - 0x18, 0x11, 0x98, 0xab, 0x19, 0x64, 0x33, 0x81, 0xbb, 0x8c, 0x63, 0x35, 0x14, 0x01, 0x98, 0x9a, - 0xca, 0xcb, 0xab, 0x19, 0x45, 0x23, 0xa0, 0xbe, 0xac, 0x89, 0x21, 0x80, 0xfb, 0xdb, 0x9a, 0x88, - 0x10, 0x11, 0x31, 0x43, 0x13, 0xb8, 0xcf, 0xbb, 0x09, 0x31, 0x22, 0x90, 0x89, 0x62, 0x45, 0x22, - 0x90, 0xba, 0x09, 0x73, 0x34, 0x02, 0x90, 0xba, 0xcb, 0xdb, 0xcb, 0x9b, 0x20, 0x54, 0x12, 0xa0, - 0xbc, 0x8b, 0x41, 0x34, 0x03, 0xb9, 0xad, 0x89, 0x42, 0x34, 0x42, 0x43, 0x33, 0x13, 0xc9, 0xcd, - 0xab, 0x09, 0x21, 0x81, 0xba, 0x9b, 0x51, 0x45, 0x02, 0xa8, 0xac, 0x28, 0x64, 0x33, 0x02, 0x90, - 0xa8, 0xb9, 0xdb, 0xbc, 0x9b, 0x42, 0x26, 0x02, 0xca, 0xbd, 0x9a, 0x20, 0x12, 0xb8, 0xde, 0xab, - 0x8a, 0x18, 0x11, 0x11, 0x43, 0x24, 0x82, 0xeb, 0xcc, 0x9a, 0x10, 0x32, 0x01, 0xa9, 0x19, 0x55, - 0x24, 0x12, 0xb9, 0xab, 0x40, 0x45, 0x23, 0x00, 0xa9, 0xbb, 0xdb, 0xbc, 0xbc, 0x0a, 0x52, 0x24, - 0x02, 0xcb, 0xac, 0x19, 0x53, 0x33, 0x90, 0xcb, 0x9b, 0x28, 0x44, 0x33, 0x43, 0x44, 0x22, 0x81, - 0xeb, 0xcb, 0x8a, 0x10, 0x02, 0xa0, 0xbb, 0x1a, 0x45, 0x34, 0x91, 0xca, 0x8b, 0x51, 0x35, 0x23, - 0x81, 0x98, 0xa9, 0xca, 0xbc, 0xad, 0x08, 0x44, 0x33, 0xa0, 0xdd, 0xab, 0x88, 0x22, 0x01, 0xdb, - 0xcd, 0x9a, 0x09, 0x10, 0x01, 0x31, 0x43, 0x33, 0xb8, 0xcf, 0xbb, 0x89, 0x32, 0x13, 0xa0, 0x9a, - 0x61, 0x45, 0x23, 0x90, 0xbb, 0x0a, 0x73, 0x24, 0x03, 0x90, 0xaa, 0xbb, 0xcc, 0xcc, 0x9a, 0x28, - 0x63, 0x13, 0xa0, 0xcc, 0x9a, 0x31, 0x44, 0x02, 0xb8, 0xbb, 0x8a, 0x42, 0x34, 0x24, 0x34, 0x34, - 0x22, 0xb9, 0xce, 0xab, 0x88, 0x22, 0x81, 0xba, 0x9c, 0x40, 0x44, 0x13, 0xb8, 0xac, 0x19, 0x64, - 0x33, 0x12, 0x90, 0xa8, 0xa9, 0xcc, 0xbc, 0x9a, 0x41, 0x35, 0x03, 0xda, 0xcc, 0x8a, 0x18, 0x22, - 0xa8, 0xcd, 0xac, 0x8a, 0x08, 0x01, 0x21, 0x42, 0x43, 0x82, 0xda, 0xbd, 0xab, 0x10, 0x33, 0x01, - 0xaa, 0x19, 0x56, 0x34, 0x02, 0xb8, 0xab, 0x38, 0x56, 0x22, 0x01, 0x99, 0xba, 0xcb, 0xcc, 0xcb, - 0x89, 0x42, 0x24, 0x02, 0xca, 0xbc, 0x08, 0x43, 0x24, 0x81, 0xbb, 0xbb, 0x10, 0x54, 0x32, 0x34, - 0x34, 0x24, 0x81, 0xda, 0xbc, 0x9a, 0x18, 0x12, 0x98, 0xbc, 0x19, 0x73, 0x33, 0x81, 0xbb, 0x8c, - 0x41, 0x45, 0x23, 0x01, 0x98, 0x99, 0xbb, 0xcd, 0xbb, 0x19, 0x45, 0x33, 0xa0, 0xdd, 0xab, 0x89, - 0x22, 0x01, 0xea, 0xbc, 0x9c, 0x89, 0x00, 0x01, 0x22, 0x44, 0x22, 0xa8, 0xcd, 0xac, 0x8a, 0x21, - 0x22, 0x90, 0x8a, 0x51, 0x45, 0x23, 0x80, 0xba, 0x89, 0x63, 0x25, 0x13, 0x90, 0xaa, 0xbb, 0xcd, - 0xcb, 0xaa, 0x28, 0x44, 0x23, 0xa8, 0xcc, 0x9b, 0x21, 0x45, 0x02, 0x98, 0xbb, 0x8a, 0x31, 0x45, - 0x43, 0x43, 0x43, 0x12, 0xa8, 0xbd, 0xac, 0x89, 0x11, 0x80, 0xb9, 0x9b, 0x41, 0x36, 0x13, 0xa8, - 0xbb, 0x29, 0x56, 0x34, 0x12, 0x81, 0xa8, 0xb9, 0xcc, 0xbc, 0x8a, 0x31, 0x36, 0x12, 0xda, 0xcc, - 0x9a, 0x18, 0x01, 0xb0, 0xdc, 0xac, 0x9a, 0x09, 0x00, 0x31, 0x43, 0x24, 0x82, 0xea, 0xdb, 0x9a, - 0x08, 0x12, 0x81, 0x98, 0x20, 0x55, 0x34, 0x02, 0x98, 0x9a, 0x20, 0x46, 0x23, 0x02, 0xa0, 0xca, - 0xdb, 0xcc, 0xba, 0x09, 0x41, 0x24, 0x01, 0xca, 0xbb, 0x08, 0x53, 0x14, 0x81, 0xb9, 0xaa, 0x28, - 0x53, 0x44, 0x53, 0x43, 0x23, 0x80, 0xca, 0xbc, 0xaa, 0x08, 0x81, 0xa8, 0xab, 0x28, 0x46, 0x24, - 0x80, 0xa9, 0x0a, 0x62, 0x35, 0x23, 0x12, 0x80, 0xb9, 0xcc, 0xcc, 0xaa, 0x28, 0x53, 0x13, 0xb0, - 0xcd, 0xac, 0x09, 0x00, 0x90, 0xdb, 0xcc, 0xba, 0x99, 0x88, 0x11, 0x53, 0x33, 0x23, 0xc8, 0xcd, - 0xbb, 0x89, 0x10, 0x01, 0x80, 0x28, 0x64, 0x34, 0x23, 0x81, 0x99, 0x20, 0x55, 0x43, 0x21, 0x80, - 0xa9, 0xcc, 0xbc, 0xbd, 0x99, 0x20, 0x43, 0x12, 0xb9, 0xbc, 0x8a, 0x41, 0x34, 0x12, 0x99, 0xbb, - 0x09, 0x52, 0x44, 0x45, 0x44, 0x22, 0x02, 0xa8, 0xbc, 0xab, 0x89, 0x88, 0xa9, 0x9c, 0x19, 0x63, - 0x43, 0x01, 0xa8, 0x09, 0x42, 0x36, 0x34, 0x22, 0x11, 0x90, 0xdb, 0xcc, 0xac, 0x09, 0x32, 0x24, - 0x90, 0xeb, 0xbb, 0x9a, 0x88, 0xa8, 0xcd, 0xbc, 0xac, 0xaa, 0x99, 0x09, 0x41, 0x35, 0x23, 0x90, - 0xdc, 0xab, 0x9a, 0x08, 0x80, 0xa9, 0x29, 0x55, 0x35, 0x33, 0x01, 0x89, 0x20, 0x54, 0x33, 0x23, - 0x11, 0x81, 0xda, 0xce, 0xbc, 0xab, 0x19, 0x43, 0x12, 0xb0, 0xcb, 0x8a, 0x31, 0x34, 0x02, 0xa9, - 0x9a, 0x20, 0x44, 0x24, 0x55, 0x54, 0x43, 0x12, 0x90, 0xba, 0xab, 0x99, 0x98, 0xda, 0xbb, 0x09, - 0x44, 0x24, 0x02, 0xa9, 0x89, 0x63, 0x44, 0x23, 0x12, 0x11, 0x12, 0xb8, 0xde, 0xcb, 0x99, 0x31, - 0x24, 0x91, 0xdb, 0xac, 0x8a, 0x08, 0xa8, 0xdc, 0xbc, 0xab, 0xaa, 0xaa, 0xaa, 0x29, 0x55, 0x24, - 0x01, 0xca, 0xcb, 0x8a, 0x08, 0x80, 0xba, 0x9b, 0x73, 0x45, 0x22, 0x00, 0x89, 0x28, 0x54, 0x33, - 0x12, 0x80, 0x08, 0x98, 0xfb, 0xcc, 0xac, 0x88, 0x22, 0x13, 0xa8, 0xbd, 0x8a, 0x41, 0x33, 0x02, - 0xca, 0xaa, 0x30, 0x44, 0x22, 0x32, 0x56, 0x35, 0x14, 0x81, 0xb9, 0xaa, 0x09, 0x81, 0xc9, 0xbd, - 0x9b, 0x41, 0x34, 0x03, 0xa9, 0x9b, 0x51, 0x45, 0x33, 0x11, 0x08, 0x11, 0x12, 0xda, 0xbe, 0xab, - 0x38, 0x44, 0x01, 0xdb, 0xbc, 0x89, 0x10, 0x91, 0xfb, 0xbc, 0xbb, 0x89, 0x90, 0xa9, 0x9a, 0x30, - 0x37, 0x03, 0xc8, 0xcc, 0x8a, 0x10, 0x11, 0xba, 0xbe, 0x18, 0x64, 0x33, 0x01, 0x98, 0x89, 0x53, - 0x35, 0x12, 0x80, 0x89, 0x08, 0x90, 0xdd, 0xbc, 0x9b, 0x30, 0x34, 0x90, 0xdc, 0xaa, 0x20, 0x25, - 0x03, 0xb9, 0xac, 0x09, 0x53, 0x33, 0x02, 0x31, 0x46, 0x34, 0x03, 0xb8, 0xbb, 0x89, 0x32, 0xa1, - 0xdf, 0xab, 0x19, 0x34, 0x24, 0xa0, 0xbb, 0x19, 0x55, 0x34, 0x02, 0x90, 0x08, 0x10, 0x80, 0xeb, - 0xbc, 0x08, 0x43, 0x14, 0xc8, 0xbd, 0x9b, 0x10, 0x22, 0xc0, 0xdd, 0xbb, 0x9a, 0x00, 0x80, 0xaa, - 0x09, 0x42, 0x34, 0x90, 0xdd, 0xaa, 0x18, 0x32, 0xa1, 0xdc, 0x9b, 0x51, 0x44, 0x12, 0x98, 0x9a, - 0x20, 0x46, 0x33, 0x81, 0x99, 0x9a, 0x08, 0xb9, 0xce, 0xab, 0x28, 0x53, 0x02, 0xea, 0xcb, 0x09, - 0x43, 0x33, 0x90, 0xdb, 0x9b, 0x30, 0x44, 0x22, 0x10, 0x41, 0x34, 0x24, 0x98, 0xbb, 0x9b, 0x41, - 0x14, 0xb8, 0xbf, 0x9b, 0x31, 0x35, 0x82, 0xc9, 0x9b, 0x41, 0x45, 0x23, 0x91, 0x99, 0x88, 0x01, - 0x98, 0xcd, 0x8a, 0x41, 0x34, 0xa1, 0xdd, 0xbb, 0x09, 0x32, 0x03, 0xec, 0xbc, 0xab, 0x08, 0x01, - 0x91, 0xa9, 0x18, 0x33, 0x02, 0xed, 0xac, 0x0a, 0x42, 0x13, 0xb9, 0xbe, 0x09, 0x63, 0x24, 0x81, - 0xa9, 0x89, 0x53, 0x35, 0x12, 0x98, 0x9a, 0x8a, 0x88, 0xca, 0xbd, 0x89, 0x43, 0x24, 0xb8, 0xce, - 0x9b, 0x21, 0x35, 0x12, 0xc9, 0xcb, 0x09, 0x42, 0x33, 0x13, 0x11, 0x42, 0x34, 0x01, 0xda, 0x9b, - 0x28, 0x44, 0x01, 0xeb, 0xbb, 0x1a, 0x53, 0x33, 0xa8, 0xbc, 0x1a, 0x64, 0x43, 0x02, 0x98, 0x99, - 0x88, 0x80, 0xb9, 0xac, 0x30, 0x46, 0x12, 0xda, 0xcd, 0x8a, 0x10, 0x23, 0xa0, 0xdd, 0xbb, 0x8a, - 0x10, 0x11, 0x98, 0x98, 0x11, 0x02, 0xd9, 0xbe, 0x8c, 0x20, 0x24, 0x82, 0xdb, 0xab, 0x40, 0x44, - 0x13, 0xa8, 0xab, 0x48, 0x55, 0x23, 0x01, 0xa9, 0xab, 0x99, 0x99, 0xdb, 0x9a, 0x41, 0x35, 0x81, - 0xdc, 0xac, 0x1a, 0x42, 0x24, 0x91, 0xda, 0x9a, 0x18, 0x53, 0x32, 0x11, 0x21, 0x32, 0x12, 0xc8, - 0xbd, 0x89, 0x53, 0x33, 0xb0, 0xdd, 0x9a, 0x20, 0x34, 0x82, 0xca, 0x9b, 0x40, 0x46, 0x22, 0x81, - 0xa9, 0x99, 0x89, 0x98, 0xaa, 0x29, 0x65, 0x23, 0xb0, 0xde, 0xab, 0x09, 0x32, 0x12, 0xea, 0xbd, - 0xab, 0x09, 0x21, 0x11, 0x08, 0x88, 0x00, 0xc9, 0xdd, 0xab, 0x19, 0x53, 0x23, 0xa8, 0xcc, 0x89, - 0x43, 0x25, 0x01, 0xaa, 0x8a, 0x73, 0x34, 0x13, 0x90, 0xba, 0xab, 0xaa, 0xba, 0xab, 0x40, 0x46, - 0x13, 0xc9, 0xbe, 0x9c, 0x20, 0x34, 0x13, 0xb9, 0xbd, 0x8a, 0x32, 0x36, 0x32, 0x21, 0x22, 0x11, - 0xb8, 0xdc, 0xaa, 0x31, 0x36, 0x02, 0xca, 0xcb, 0x09, 0x42, 0x23, 0xa8, 0xbd, 0x19, 0x54, 0x25, - 0x12, 0x88, 0xaa, 0x9a, 0xa9, 0x99, 0x19, 0x73, 0x34, 0x02, 0xdc, 0xbc, 0x9b, 0x10, 0x33, 0xa1, - 0xed, 0xcb, 0x8a, 0x18, 0x11, 0x11, 0x00, 0x08, 0xa9, 0xcd, 0xbc, 0x9a, 0x41, 0x43, 0x82, 0xb9, - 0xab, 0x30, 0x46, 0x12, 0xa8, 0xaa, 0x48, 0x47, 0x23, 0x02, 0xa8, 0xbb, 0xac, 0xba, 0x9a, 0x20, - 0x55, 0x33, 0x90, 0xdd, 0xbb, 0x0a, 0x43, 0x24, 0x92, 0xca, 0xbb, 0x18, 0x63, 0x43, 0x32, 0x22, - 0x02, 0x98, 0xcc, 0xab, 0x19, 0x44, 0x14, 0x80, 0xbb, 0x9b, 0x30, 0x34, 0x82, 0xcc, 0x9b, 0x61, - 0x45, 0x23, 0x01, 0xa8, 0xbb, 0xbb, 0xab, 0x09, 0x73, 0x35, 0x13, 0xc8, 0xbe, 0xbb, 0x09, 0x31, - 0x02, 0xe9, 0xcc, 0xbb, 0x89, 0x20, 0x31, 0x22, 0x01, 0xb8, 0xde, 0xbc, 0x9a, 0x18, 0x53, 0x12, - 0x90, 0xa9, 0x19, 0x52, 0x33, 0x90, 0xba, 0x19, 0x57, 0x35, 0x12, 0x81, 0xb9, 0xdb, 0xbb, 0xaa, - 0x19, 0x54, 0x24, 0x02, 0xda, 0xbc, 0x9a, 0x20, 0x34, 0x03, 0xb8, 0xbc, 0x8b, 0x31, 0x46, 0x34, - 0x33, 0x22, 0x90, 0xeb, 0xbb, 0x8a, 0x42, 0x34, 0x11, 0xa9, 0xaa, 0x18, 0x32, 0x03, 0xeb, 0xbb, - 0x40, 0x56, 0x24, 0x12, 0x81, 0xa9, 0xbc, 0xbc, 0x9a, 0x31, 0x37, 0x24, 0x90, 0xdb, 0xbc, 0x8a, - 0x18, 0x12, 0xa8, 0xdc, 0xac, 0x9b, 0x88, 0x11, 0x33, 0x24, 0x91, 0xeb, 0xcd, 0xaa, 0x09, 0x21, - 0x14, 0x01, 0x98, 0x08, 0x22, 0x14, 0x81, 0xbb, 0x09, 0x65, 0x35, 0x24, 0x11, 0x88, 0xca, 0xdb, - 0xbb, 0x8a, 0x51, 0x34, 0x14, 0xa8, 0xbc, 0xac, 0x08, 0x31, 0x23, 0x91, 0xcb, 0xaa, 0x19, 0x63, - 0x44, 0x35, 0x23, 0x02, 0xca, 0xbc, 0xab, 0x20, 0x34, 0x23, 0x90, 0x99, 0x20, 0x32, 0x82, 0xfb, - 0xbb, 0x28, 0x65, 0x34, 0x22, 0x11, 0x80, 0xda, 0xcc, 0xba, 0x19, 0x73, 0x33, 0x02, 0xc9, 0xbd, - 0xaa, 0x08, 0x10, 0x98, 0xcb, 0xad, 0xbb, 0x9a, 0x88, 0x32, 0x36, 0x14, 0xb0, 0xce, 0xbc, 0x8a, - 0x20, 0x22, 0x12, 0x88, 0x18, 0x43, 0x23, 0x90, 0xbc, 0x9b, 0x73, 0x35, 0x24, 0x12, 0x00, 0x98, - 0xeb, 0xcc, 0x9b, 0x18, 0x54, 0x23, 0x81, 0xda, 0xab, 0x8a, 0x21, 0x13, 0x91, 0xb9, 0x9b, 0x08, - 0x42, 0x54, 0x55, 0x43, 0x13, 0x90, 0xcc, 0xbb, 0x09, 0x32, 0x24, 0x81, 0x88, 0x20, 0x33, 0x13, - 0xfb, 0xac, 0x09, 0x53, 0x34, 0x23, 0x11, 0x10, 0x98, 0xec, 0xbc, 0x9c, 0x21, 0x36, 0x23, 0xa0, - 0xcc, 0xbb, 0x89, 0x01, 0x90, 0xdb, 0xcb, 0xaa, 0x99, 0x9a, 0x08, 0x63, 0x44, 0x01, 0xda, 0xbd, - 0x9c, 0x08, 0x21, 0x12, 0x08, 0x08, 0x32, 0x35, 0x81, 0xcb, 0x9c, 0x28, 0x55, 0x32, 0x11, 0x80, - 0x00, 0xa8, 0xdd, 0xbc, 0x8a, 0x41, 0x35, 0x13, 0xb8, 0xcc, 0x8a, 0x10, 0x12, 0x80, 0xba, 0x9a, - 0x20, 0x33, 0x33, 0x65, 0x55, 0x33, 0x03, 0xda, 0xbc, 0x8b, 0x20, 0x33, 0x02, 0x98, 0x28, 0x45, - 0x23, 0xa8, 0xcd, 0x9b, 0x31, 0x45, 0x13, 0x01, 0x00, 0x00, 0xa8, 0xce, 0xbc, 0x09, 0x63, 0x24, - 0x82, 0xc9, 0xbb, 0x9a, 0x00, 0x80, 0xea, 0xcb, 0x9a, 0x08, 0x98, 0x99, 0x29, 0x64, 0x33, 0xa0, - 0xcf, 0xcb, 0x99, 0x11, 0x12, 0x00, 0x09, 0x31, 0x45, 0x12, 0xb8, 0xcc, 0x89, 0x52, 0x43, 0x12, - 0x08, 0x08, 0x88, 0xb9, 0xcf, 0xab, 0x29, 0x54, 0x24, 0x80, 0xba, 0xbb, 0x08, 0x23, 0x82, 0xda, - 0xbb, 0x28, 0x34, 0x23, 0x21, 0x64, 0x45, 0x23, 0x90, 0xdc, 0xab, 0x09, 0x22, 0x13, 0x80, 0x19, - 0x62, 0x34, 0x82, 0xda, 0xac, 0x19, 0x53, 0x33, 0x11, 0x98, 0x08, 0x80, 0xc9, 0xce, 0x9b, 0x38, - 0x46, 0x22, 0xa8, 0xdb, 0x9a, 0x08, 0x01, 0xc8, 0xcc, 0xaa, 0x09, 0x01, 0x88, 0x8a, 0x30, 0x36, - 0x04, 0xe9, 0xcc, 0xab, 0x08, 0x21, 0x02, 0x88, 0x18, 0x45, 0x43, 0x91, 0xcb, 0xab, 0x38, 0x55, - 0x22, 0x81, 0x89, 0x88, 0x88, 0xda, 0xcc, 0x9a, 0x51, 0x34, 0x12, 0xb8, 0xbc, 0x0a, 0x31, 0x13, - 0xd8, 0xbc, 0x8a, 0x41, 0x24, 0x12, 0x10, 0x44, 0x35, 0x02, 0xc9, 0xbd, 0x9b, 0x20, 0x23, 0x82, - 0x89, 0x40, 0x46, 0x22, 0xa0, 0xcc, 0x9a, 0x30, 0x45, 0x12, 0x90, 0x98, 0x80, 0x88, 0xea, 0xcb, - 0x89, 0x53, 0x34, 0x82, 0xda, 0xab, 0x89, 0x11, 0x90, 0xdd, 0xcb, 0x89, 0x10, 0x01, 0x90, 0x89, - 0x41, 0x43, 0x90, 0xde, 0xcb, 0x8a, 0x10, 0x11, 0x90, 0x88, 0x52, 0x35, 0x23, 0xb9, 0xbd, 0x8b, - 0x52, 0x34, 0x12, 0x98, 0x99, 0x88, 0x99, 0xcd, 0xac, 0x18, 0x54, 0x14, 0x81, 0xba, 0x9b, 0x20, - 0x33, 0xa2, 0xde, 0xaa, 0x18, 0x34, 0x33, 0x01, 0x21, 0x45, 0x33, 0x91, 0xdd, 0xbb, 0x09, 0x21, - 0x03, 0x88, 0x29, 0x65, 0x34, 0x01, 0xc9, 0xac, 0x09, 0x53, 0x33, 0x01, 0x99, 0x9a, 0x88, 0xb8, - 0xdc, 0xab, 0x30, 0x47, 0x12, 0xa8, 0xbc, 0x9b, 0x20, 0x02, 0xfa, 0xcc, 0x9b, 0x09, 0x22, 0x01, - 0x88, 0x08, 0x42, 0x12, 0xfb, 0xbd, 0xac, 0x88, 0x11, 0x81, 0x98, 0x30, 0x46, 0x24, 0x81, 0xca, - 0x9c, 0x18, 0x34, 0x24, 0x80, 0xa9, 0x99, 0x89, 0xb9, 0xcc, 0x0a, 0x52, 0x35, 0x03, 0xb9, 0xbc, - 0x18, 0x53, 0x12, 0xca, 0xbe, 0x99, 0x31, 0x35, 0x22, 0x10, 0x22, 0x43, 0x02, 0xd9, 0xbd, 0x9b, - 0x10, 0x12, 0x91, 0x89, 0x72, 0x45, 0x23, 0x90, 0xdb, 0xaa, 0x30, 0x35, 0x23, 0x90, 0xb9, 0x9a, - 0x99, 0xca, 0xac, 0x1a, 0x45, 0x24, 0x81, 0xbc, 0xac, 0x08, 0x22, 0xc0, 0xed, 0xbb, 0x9a, 0x20, - 0x23, 0x01, 0x80, 0x18, 0x12, 0xc9, 0xdf, 0xbb, 0x8a, 0x18, 0x00, 0x99, 0x19, 0x74, 0x34, 0x23, - 0xa8, 0xbd, 0x8a, 0x41, 0x34, 0x13, 0x98, 0xab, 0x9b, 0xba, 0xdb, 0x9a, 0x50, 0x35, 0x24, 0x98, - 0xca, 0x89, 0x52, 0x23, 0xb0, 0xdd, 0xab, 0x19, 0x53, 0x33, 0x23, 0x21, 0x22, 0x12, 0xc8, 0xcd, - 0xab, 0x09, 0x11, 0x80, 0x9a, 0x50, 0x47, 0x34, 0x02, 0xb9, 0xac, 0x09, 0x52, 0x24, 0x02, 0x99, - 0xaa, 0xaa, 0xab, 0xac, 0x09, 0x63, 0x34, 0x01, 0xdb, 0xbb, 0x0a, 0x32, 0x02, 0xee, 0xcc, 0xab, - 0x88, 0x21, 0x23, 0x11, 0x00, 0x00, 0xb9, 0xde, 0xbb, 0x9c, 0x09, 0x80, 0xa8, 0x8a, 0x62, 0x55, - 0x32, 0x81, 0xba, 0x9c, 0x18, 0x44, 0x23, 0x81, 0xa9, 0xbc, 0xba, 0xbb, 0x8a, 0x51, 0x45, 0x23, - 0x90, 0xbb, 0x8b, 0x62, 0x34, 0x83, 0xeb, 0xbc, 0x9b, 0x31, 0x44, 0x43, 0x22, 0x21, 0x00, 0xa8, - 0xcc, 0xaa, 0x89, 0x10, 0xa0, 0xba, 0x19, 0x67, 0x44, 0x22, 0x80, 0xba, 0x9a, 0x31, 0x36, 0x13, - 0x81, 0xb9, 0xcc, 0xab, 0xbb, 0x19, 0x53, 0x25, 0x02, 0xda, 0xbb, 0x8a, 0x31, 0x14, 0xd9, 0xbf, - 0xbc, 0x9a, 0x00, 0x32, 0x32, 0x13, 0x81, 0xb9, 0xcf, 0xbb, 0xaa, 0x08, 0x80, 0xca, 0xbb, 0x39, - 0x67, 0x33, 0x12, 0xa8, 0xba, 0x0a, 0x52, 0x34, 0x11, 0x90, 0xca, 0xcc, 0xba, 0x9b, 0x30, 0x46, - 0x23, 0x81, 0xbb, 0xab, 0x51, 0x35, 0x23, 0xb9, 0xbf, 0xab, 0x09, 0x43, 0x34, 0x34, 0x33, 0x01, - 0xb8, 0xcc, 0xab, 0x09, 0x12, 0x91, 0xeb, 0x9b, 0x52, 0x45, 0x24, 0x01, 0x98, 0x8a, 0x28, 0x43, - 0x33, 0x11, 0x98, 0xcc, 0xcc, 0xbb, 0x8b, 0x51, 0x44, 0x02, 0xb9, 0xcc, 0x8a, 0x20, 0x32, 0xa0, - 0xed, 0xbc, 0xaa, 0x89, 0x20, 0x32, 0x34, 0x13, 0xa0, 0xcd, 0xbd, 0x9a, 0x18, 0x01, 0xb8, 0xbc, - 0x8b, 0x63, 0x35, 0x23, 0x80, 0xaa, 0x09, 0x41, 0x43, 0x02, 0x00, 0xb9, 0xdc, 0xbd, 0xbb, 0x19, - 0x45, 0x25, 0x01, 0xb9, 0xbb, 0x28, 0x45, 0x23, 0x91, 0xeb, 0xab, 0x8a, 0x11, 0x53, 0x53, 0x43, - 0x12, 0x90, 0xdb, 0xab, 0x0a, 0x31, 0x12, 0xca, 0xbc, 0x19, 0x55, 0x24, 0x12, 0x90, 0x89, 0x20, - 0x43, 0x13, 0x01, 0x80, 0xa9, 0xce, 0xbd, 0xab, 0x28, 0x45, 0x14, 0xa0, 0xdb, 0x9b, 0x18, 0x33, - 0x12, 0xeb, 0xbd, 0xbb, 0x9a, 0x18, 0x20, 0x44, 0x43, 0x02, 0xca, 0xcd, 0xaa, 0x19, 0x11, 0x81, - 0xda, 0xab, 0x28, 0x45, 0x23, 0x82, 0x99, 0x09, 0x32, 0x25, 0x82, 0x98, 0x99, 0xca, 0xdd, 0xbc, - 0x9a, 0x41, 0x36, 0x13, 0xa8, 0xbc, 0x0a, 0x52, 0x34, 0x02, 0xc9, 0xbb, 0x9b, 0x00, 0x32, 0x44, - 0x45, 0x33, 0x02, 0xca, 0xbd, 0x9a, 0x10, 0xa3, 0x02, 0x01, 0x0d, 0x7d, 0x0b, 0x02, 0xe3, 0x00, - 0xe1, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0x4f, 0x77, 0x0b, 0x13, 0xa8, 0x51, - 0x82, 0x8b, 0x26, 0xb8, 0x38, 0x47, 0xc9, 0x11, 0xa0, 0x1a, 0x03, 0xbb, 0x61, 0xf8, 0x18, 0x18, - 0x06, 0xbd, 0x41, 0x13, 0xfb, 0x0a, 0x22, 0xa0, 0xad, 0xab, 0x55, 0xc9, 0x28, 0x04, 0xaa, 0x28, - 0x92, 0x28, 0x88, 0xbb, 0x76, 0xb0, 0x1b, 0x24, 0xa8, 0x9b, 0x21, 0x23, 0xbc, 0x40, 0xa2, 0xbf, - 0xbb, 0x41, 0x91, 0x18, 0x45, 0x04, 0xcb, 0x50, 0x23, 0x90, 0x08, 0xa9, 0xca, 0xce, 0x9a, 0x88, - 0xa9, 0x29, 0x54, 0x81, 0x89, 0x31, 0x12, 0x32, 0x33, 0xc8, 0xcf, 0x8a, 0x42, 0x14, 0x80, 0x20, - 0x02, 0xcb, 0x89, 0x80, 0x9a, 0x18, 0x43, 0x84, 0xcd, 0x8a, 0x21, 0x22, 0x47, 0x13, 0xb9, 0x9a, - 0x52, 0x35, 0x90, 0xaa, 0xa9, 0xfc, 0xab, 0xaa, 0x9a, 0x09, 0x20, 0x43, 0x90, 0x8b, 0x33, 0x02, - 0x73, 0x16, 0xc9, 0xbb, 0x19, 0x45, 0x12, 0x08, 0x31, 0x92, 0xaa, 0x98, 0x88, 0x20, 0x22, 0x45, - 0xa1, 0xbf, 0x18, 0x01, 0x51, 0x36, 0x82, 0xab, 0x8a, 0x64, 0x13, 0xb9, 0x8a, 0xd9, 0xbd, 0xcb, - 0xaa, 0x89, 0x08, 0x30, 0x13, 0xb8, 0x28, 0x13, 0x30, 0x77, 0x81, 0xca, 0x9b, 0x48, 0x34, 0x82, - 0x10, 0x24, 0x98, 0x99, 0xa9, 0x18, 0x23, 0x21, 0x36, 0xe9, 0x8b, 0x00, 0x19, 0x76, 0x12, 0x90, - 0xa9, 0x28, 0x45, 0x91, 0x9a, 0xa8, 0xec, 0xbb, 0xcb, 0xaa, 0x88, 0x80, 0x32, 0x83, 0x8a, 0x33, - 0xa0, 0x72, 0x27, 0xa8, 0xab, 0x9b, 0x73, 0x13, 0x80, 0x52, 0x81, 0x89, 0x80, 0xaa, 0x30, 0x83, - 0x40, 0x05, 0xbc, 0x19, 0xa1, 0x5b, 0x57, 0x81, 0x89, 0x90, 0x30, 0x34, 0xb9, 0x09, 0xd8, 0xbf, - 0x9a, 0xcb, 0x8b, 0x80, 0x18, 0x42, 0xa0, 0x18, 0x04, 0x8a, 0x74, 0x82, 0xaa, 0x99, 0x0a, 0x45, - 0x01, 0x18, 0x26, 0xa8, 0x19, 0x91, 0x8b, 0x22, 0x80, 0x61, 0xb2, 0x9d, 0x21, 0xc9, 0x78, 0x24, - 0x98, 0x08, 0x80, 0x42, 0x83, 0xbb, 0x30, 0xfa, 0xbf, 0x98, 0xbb, 0x0a, 0x90, 0x10, 0x14, 0xa9, - 0x51, 0x91, 0x1a, 0x37, 0xb1, 0xab, 0x80, 0x28, 0x26, 0x90, 0x61, 0x04, 0xaa, 0x20, 0xa1, 0x0b, - 0x13, 0x09, 0x34, 0xf8, 0x1b, 0x12, 0xac, 0x73, 0x85, 0x98, 0x18, 0x10, 0x32, 0xc1, 0x8b, 0x14, - 0xed, 0x9b, 0x98, 0xbb, 0x09, 0x80, 0x30, 0x83, 0x9b, 0x46, 0xb0, 0x49, 0x26, 0xb9, 0x8b, 0x10, - 0x40, 0x02, 0x8a, 0x75, 0x81, 0x9a, 0x11, 0xa0, 0x19, 0x01, 0x18, 0x04, 0xcc, 0x39, 0xa3, 0x8d, - 0x56, 0x91, 0x8a, 0x11, 0x21, 0x13, 0xea, 0x29, 0x93, 0xdf, 0x89, 0xa8, 0x9a, 0x08, 0x88, 0x31, - 0xa0, 0x2a, 0x17, 0xb8, 0x61, 0x03, 0xdb, 0x09, 0x11, 0x32, 0xa0, 0x2b, 0x67, 0xa0, 0x89, 0x11, - 0x98, 0x18, 0x80, 0x20, 0xa2, 0x9f, 0x30, 0xa0, 0x3b, 0x57, 0xa0, 0x0a, 0x31, 0x23, 0x92, 0xae, - 0x30, 0xc2, 0xcf, 0x88, 0xa8, 0x8a, 0x88, 0x18, 0x21, 0xb9, 0x50, 0x03, 0x9a, 0x55, 0x92, 0xad, - 0x18, 0x22, 0x13, 0xbb, 0x79, 0x25, 0xa9, 0x1a, 0x02, 0x98, 0x18, 0x08, 0x22, 0xf8, 0x0b, 0x23, - 0xb9, 0x78, 0x16, 0xa9, 0x09, 0x43, 0x23, 0xc9, 0x9b, 0x42, 0xe8, 0xad, 0x88, 0xa9, 0x99, 0x08, - 0x10, 0x81, 0x9a, 0x73, 0x81, 0x19, 0x45, 0xb8, 0xac, 0x30, 0x53, 0x91, 0xab, 0x72, 0x03, 0xaa, - 0x29, 0x02, 0x89, 0x80, 0x20, 0x83, 0xdd, 0x29, 0x03, 0x9a, 0x75, 0x82, 0xba, 0x28, 0x45, 0x02, - 0xda, 0x09, 0x12, 0xeb, 0x9c, 0x88, 0xa9, 0x89, 0x09, 0x21, 0xa8, 0x1a, 0x45, 0x90, 0x40, 0x14, - 0xea, 0x9a, 0x32, 0x25, 0xb0, 0x8b, 0x45, 0x92, 0x9a, 0x28, 0x01, 0x80, 0x98, 0x32, 0xc1, 0xae, - 0x21, 0x92, 0x39, 0x57, 0x90, 0xab, 0x40, 0x45, 0x91, 0xcb, 0x28, 0x81, 0xbd, 0xab, 0x99, 0x99, - 0xaa, 0x29, 0x03, 0xdb, 0x40, 0x04, 0x08, 0x44, 0x92, 0xbd, 0x8a, 0x54, 0x14, 0xba, 0x19, 0x25, - 0xa1, 0x99, 0x10, 0x11, 0x91, 0x89, 0x24, 0xf9, 0x8a, 0x13, 0x88, 0x71, 0x13, 0xaa, 0x9b, 0x71, - 0x26, 0xb0, 0xab, 0x21, 0xb8, 0xbd, 0xab, 0x9a, 0x90, 0xbb, 0x30, 0xa2, 0x9f, 0x52, 0x81, 0x20, - 0x25, 0xb9, 0xbc, 0x19, 0x47, 0x83, 0xbb, 0x48, 0x13, 0x98, 0x98, 0x00, 0x42, 0xa0, 0x2a, 0x04, - 0xcd, 0x29, 0x02, 0x19, 0x46, 0x91, 0xaa, 0x89, 0x74, 0x14, 0xc8, 0x8a, 0x01, 0xc9, 0xaa, 0xba, - 0x0a, 0x90, 0x9c, 0x31, 0xd8, 0x0a, 0x15, 0x80, 0x52, 0x83, 0xdb, 0x9a, 0x20, 0x47, 0x91, 0x9b, - 0x32, 0x82, 0x09, 0x88, 0x19, 0x25, 0xa8, 0x28, 0xc3, 0xaf, 0x21, 0x91, 0x58, 0x25, 0xa9, 0x9a, - 0x18, 0x56, 0x03, 0xcb, 0x1a, 0x90, 0xbb, 0xba, 0xbd, 0x18, 0xa0, 0x8c, 0x12, 0xdb, 0x28, 0x14, - 0x09, 0x46, 0xa0, 0xbb, 0x98, 0x61, 0x26, 0xa8, 0x0a, 0x22, 0x90, 0x28, 0x98, 0x3a, 0x26, 0xa9, - 0x30, 0xe8, 0x8c, 0x22, 0x98, 0x72, 0x03, 0xca, 0x88, 0x20, 0x46, 0x92, 0xac, 0x18, 0xa9, 0x9c, - 0xa8, 0xac, 0x28, 0xa8, 0x1a, 0x91, 0xae, 0x41, 0x81, 0x49, 0x26, 0xb9, 0x9c, 0x00, 0x62, 0x23, - 0xba, 0x28, 0x83, 0x99, 0x32, 0xc9, 0x58, 0x14, 0x99, 0x01, 0xfb, 0x19, 0x02, 0x1a, 0x56, 0x91, - 0xab, 0x18, 0x41, 0x35, 0xb0, 0x9c, 0x80, 0xdb, 0x0a, 0xb9, 0x9c, 0x20, 0xa8, 0x19, 0xc8, 0x8d, - 0x23, 0x90, 0x71, 0x05, 0xca, 0x89, 0x10, 0x63, 0x82, 0xa9, 0x21, 0x90, 0x0a, 0x14, 0xa9, 0x50, - 0x03, 0x09, 0xa0, 0xaf, 0x38, 0x91, 0x48, 0x37, 0xc0, 0x9a, 0x10, 0x43, 0x14, 0xb9, 0x8a, 0xb8, - 0xbf, 0x08, 0xb9, 0x8c, 0x11, 0x98, 0x80, 0xeb, 0x19, 0x13, 0x0a, 0x66, 0x91, 0xcb, 0x19, 0x31, - 0x34, 0x91, 0x0a, 0x13, 0xcb, 0x49, 0x13, 0x9b, 0x62, 0x02, 0x08, 0xda, 0x9b, 0x22, 0xa0, 0x72, - 0x27, 0xba, 0x8a, 0x22, 0x44, 0x81, 0xaa, 0x08, 0xfb, 0xab, 0x00, 0xba, 0x0b, 0x11, 0x00, 0xc9, - 0xae, 0x20, 0x92, 0x49, 0x37, 0xc0, 0x9c, 0x18, 0x33, 0x14, 0x98, 0x30, 0x91, 0x9e, 0x30, 0x83, - 0x8a, 0x42, 0x13, 0xb1, 0xce, 0x19, 0x01, 0x09, 0x57, 0x82, 0xbb, 0x0a, 0x53, 0x23, 0xa8, 0x89, - 0xa0, 0xef, 0x89, 0x80, 0x99, 0x09, 0x10, 0x81, 0xda, 0x8b, 0x12, 0x98, 0x71, 0x15, 0xc9, 0x9b, - 0x30, 0x25, 0x01, 0x09, 0x33, 0xd9, 0x9b, 0x33, 0x82, 0x09, 0x42, 0x24, 0xd8, 0xad, 0x20, 0x80, - 0x49, 0x27, 0xa1, 0xbb, 0x18, 0x45, 0x82, 0xa9, 0x10, 0xd8, 0xae, 0x09, 0x88, 0x99, 0x88, 0x31, - 0x91, 0xbf, 0x08, 0x82, 0x89, 0x55, 0x82, 0xbc, 0x9a, 0x62, 0x13, 0xa0, 0x30, 0x04, 0xdb, 0x09, - 0x22, 0x81, 0x80, 0x31, 0x25, 0xfa, 0x0b, 0x11, 0x99, 0x72, 0x13, 0xb8, 0xbb, 0x40, 0x26, 0xa1, - 0x8a, 0x12, 0xfb, 0xac, 0x08, 0x90, 0x88, 0x89, 0x42, 0xb0, 0xae, 0x20, 0x98, 0x39, 0x36, 0xb0, - 0xbc, 0x0a, 0x55, 0x02, 0x99, 0x42, 0x92, 0xad, 0x18, 0x11, 0x11, 0x88, 0x40, 0x04, 0xdc, 0x19, - 0x81, 0x09, 0x45, 0x82, 0xaa, 0x9a, 0x61, 0x14, 0xb8, 0x2a, 0x83, 0xde, 0x9a, 0x80, 0x08, 0x90, - 0x09, 0x33, 0xf8, 0x9b, 0x11, 0xb8, 0x61, 0x13, 0xba, 0xac, 0x29, 0x47, 0x91, 0x0a, 0x34, 0xb0, - 0xac, 0x10, 0x11, 0x12, 0x98, 0x71, 0xa2, 0xbc, 0x38, 0x90, 0x39, 0x47, 0x90, 0x9a, 0x89, 0x63, - 0x03, 0xcb, 0x20, 0xa2, 0xcf, 0x89, 0x08, 0x00, 0x88, 0x19, 0x14, 0xdb, 0x0a, 0x01, 0x8b, 0x73, - 0x92, 0xba, 0x9a, 0x40, 0x27, 0xa0, 0x29, 0x15, 0xc8, 0x8a, 0x10, 0x20, 0x02, 0x99, 0x44, 0xb0, - 0x9e, 0x11, 0x98, 0x60, 0x14, 0xa9, 0x89, 0x08, 0x54, 0x91, 0x9c, 0x31, 0xc8, 0xae, 0x88, 0x88, - 0x11, 0x98, 0x28, 0x84, 0xcc, 0x19, 0xa1, 0x1a, 0x36, 0xb8, 0xab, 0x89, 0x72, 0x15, 0xa9, 0x40, - 0x03, 0xca, 0x0a, 0x00, 0x31, 0x82, 0x09, 0x35, 0xe9, 0x0b, 0x11, 0x8a, 0x55, 0x83, 0xaa, 0x89, - 0x30, 0x36, 0xc8, 0x8b, 0x24, 0xfa, 0x9b, 0x89, 0x08, 0x12, 0x99, 0x31, 0xb2, 0xaf, 0x00, 0xb8, - 0x58, 0x14, 0xca, 0x8a, 0x18, 0x73, 0x02, 0x9a, 0x62, 0x92, 0xab, 0x09, 0x08, 0x43, 0x92, 0x19, - 0x05, 0xda, 0x19, 0x81, 0x3a, 0x47, 0x90, 0x9a, 0x00, 0x41, 0x23, 0xcc, 0x2a, 0x83, 0xdd, 0x9b, - 0x98, 0x28, 0x02, 0x98, 0x32, 0xd8, 0x9c, 0x81, 0xab, 0x72, 0x93, 0xbc, 0x89, 0x31, 0x36, 0x91, - 0x1b, 0x37, 0xa0, 0xab, 0x88, 0x18, 0x44, 0x80, 0x28, 0x81, 0xad, 0x10, 0xa8, 0x71, 0x16, 0xa8, - 0x89, 0x10, 0x43, 0x91, 0xbc, 0x30, 0xc1, 0xbe, 0x9b, 0x9a, 0x31, 0x03, 0x88, 0x13, 0xcc, 0x0b, - 0xc8, 0x0b, 0x37, 0xc0, 0xac, 0x00, 0x43, 0x23, 0xb8, 0x50, 0x15, 0xa8, 0x9b, 0x99, 0x30, 0x26, - 0x00, 0x00, 0xb0, 0x8a, 0x91, 0x0b, 0x77, 0x84, 0xa9, 0x19, 0x31, 0x33, 0xd9, 0x9b, 0x12, 0xf9, - 0xac, 0xaa, 0x89, 0x32, 0x12, 0x18, 0xa0, 0xac, 0x90, 0xcd, 0x38, 0x07, 0xc9, 0x9b, 0x21, 0x35, - 0x01, 0x8a, 0x63, 0x82, 0xa9, 0x99, 0x9b, 0x61, 0x23, 0x00, 0x90, 0xaa, 0x20, 0xd8, 0x59, 0x37, - 0xa1, 0xaa, 0x28, 0x44, 0x82, 0xcb, 0x09, 0x91, 0xdc, 0xab, 0xcb, 0x19, 0x32, 0x13, 0x81, 0xcb, - 0x19, 0xd8, 0x9d, 0x52, 0x91, 0xcc, 0x89, 0x42, 0x24, 0x98, 0x29, 0x25, 0x90, 0x89, 0xb9, 0x8b, - 0x63, 0x22, 0x02, 0xc9, 0x1a, 0x03, 0xbc, 0x72, 0x17, 0x99, 0x99, 0x21, 0x24, 0xa0, 0xac, 0x01, - 0xc8, 0xac, 0xb9, 0xbc, 0x10, 0x33, 0x33, 0xc1, 0x9c, 0x21, 0xfa, 0x1b, 0x43, 0xd8, 0xab, 0x19, - 0x54, 0x02, 0x99, 0x41, 0x03, 0x99, 0x00, 0xdb, 0x09, 0x33, 0x34, 0x82, 0xae, 0x38, 0x92, 0x8c, - 0x65, 0x82, 0xaa, 0x88, 0x42, 0x15, 0xc9, 0x0a, 0x81, 0xcb, 0x9a, 0xc9, 0xab, 0x21, 0x42, 0x24, - 0xd9, 0x0a, 0x03, 0xcc, 0x28, 0x84, 0xda, 0x9a, 0x20, 0x45, 0x91, 0x8a, 0x34, 0xa1, 0x09, 0x81, - 0xdb, 0x18, 0x23, 0x53, 0xa1, 0x9e, 0x41, 0xa0, 0x2a, 0x36, 0xa0, 0x9a, 0x18, 0x73, 0x83, 0xbc, - 0x29, 0xb1, 0xbd, 0x08, 0xca, 0x0b, 0x11, 0x52, 0x13, 0xeb, 0x18, 0x82, 0xad, 0x31, 0xa1, 0xbd, - 0x8a, 0x51, 0x25, 0xa8, 0x29, 0x24, 0xb8, 0x18, 0x92, 0xac, 0x10, 0x22, 0x27, 0xc0, 0x0c, 0x23, - 0xc8, 0x48, 0x15, 0xa9, 0x89, 0x20, 0x54, 0xa1, 0x9d, 0x10, 0xb8, 0x9d, 0x00, 0xba, 0x09, 0x11, - 0x63, 0x82, 0xbc, 0x31, 0xb1, 0x8e, 0x32, 0xd9, 0xab, 0x09, 0x63, 0x14, 0xaa, 0x40, 0x03, 0xab, - 0x30, 0xa1, 0x9c, 0x01, 0x42, 0x25, 0xea, 0x19, 0x13, 0xa9, 0x72, 0x02, 0xab, 0x88, 0x32, 0x27, - 0xc8, 0x8b, 0x11, 0xeb, 0x8a, 0x80, 0xaa, 0x08, 0x20, 0x45, 0xa1, 0x9c, 0x32, 0xd8, 0x1a, 0x03, - 0xfb, 0x8b, 0x28, 0x63, 0x82, 0xaa, 0x43, 0x92, 0x9b, 0x32, 0xc0, 0x8a, 0x10, 0x62, 0x84, 0xcb, - 0x38, 0x84, 0x0a, 0x45, 0xa1, 0xab, 0x10, 0x53, 0x14, 0xdb, 0x1a, 0x91, 0xbd, 0x1a, 0x90, 0x9b, - 0x08, 0x41, 0x26, 0xb0, 0x0c, 0x22, 0xca, 0x28, 0xa2, 0xcf, 0x89, 0x21, 0x34, 0x91, 0x0b, 0x35, - 0xb0, 0x0b, 0x14, 0xa8, 0x8a, 0x08, 0x45, 0x92, 0x9e, 0x31, 0x81, 0x39, 0x27, 0xb8, 0x8b, 0x30, - 0x54, 0x92, 0xbc, 0x19, 0xc0, 0xbd, 0x18, 0x90, 0x9a, 0x80, 0x62, 0x14, 0xb9, 0x2a, 0x82, 0xab, - 0x42, 0xf8, 0xad, 0x09, 0x42, 0x23, 0xa8, 0x39, 0x25, 0xba, 0x29, 0x13, 0xa9, 0xaa, 0x28, 0x47, - 0xb0, 0x8c, 0x33, 0x00, 0x72, 0x03, 0xda, 0x89, 0x42, 0x43, 0xa8, 0x9d, 0x00, 0xda, 0x9c, 0x00, - 0x90, 0x98, 0x18, 0x53, 0x03, 0xbb, 0x20, 0xa1, 0x1b, 0x05, 0xee, 0x9b, 0x18, 0x34, 0x03, 0x99, - 0x51, 0x82, 0xab, 0x20, 0x13, 0x99, 0xcb, 0x40, 0x25, 0xc9, 0x1a, 0x13, 0x41, 0x36, 0xa1, 0xbc, - 0x08, 0x45, 0x13, 0xda, 0x0a, 0xa0, 0xdc, 0x8a, 0x08, 0x00, 0x99, 0x28, 0x45, 0x91, 0x89, 0x00, - 0x99, 0x32, 0xe0, 0xbf, 0x9b, 0x31, 0x35, 0x91, 0x19, 0x43, 0xa0, 0x8b, 0x11, 0x23, 0xa0, 0xae, - 0x41, 0x83, 0xab, 0x21, 0x10, 0x67, 0x23, 0xc9, 0x9a, 0x28, 0x37, 0x91, 0xbb, 0x08, 0xda, 0xad, - 0x8a, 0x08, 0x01, 0xa8, 0x48, 0x25, 0x90, 0x18, 0xa8, 0x29, 0x16, 0xfb, 0xac, 0x89, 0x41, 0x14, - 0x98, 0x20, 0x03, 0xa9, 0x09, 0x00, 0x34, 0xb0, 0x9e, 0x23, 0xa1, 0x19, 0x92, 0x6a, 0x57, 0x81, - 0xaa, 0x89, 0x40, 0x25, 0xb0, 0x9b, 0x80, 0xec, 0x9a, 0x99, 0x18, 0x02, 0x9a, 0x51, 0x03, 0x18, - 0x02, 0xcc, 0x51, 0x93, 0xce, 0xaa, 0x09, 0x63, 0x82, 0x89, 0x32, 0x91, 0x9a, 0x81, 0x18, 0x44, - 0xb8, 0x0c, 0x13, 0xaa, 0x52, 0xb8, 0x78, 0x27, 0xa0, 0x9a, 0x08, 0x51, 0x13, 0xca, 0x09, 0xb0, - 0xbe, 0x8a, 0xaa, 0x30, 0x03, 0x9b, 0x44, 0x81, 0x30, 0xa4, 0x9e, 0x63, 0xa0, 0xbd, 0x8a, 0x18, - 0x25, 0x91, 0x19, 0x15, 0xa8, 0x09, 0x91, 0x18, 0x16, 0xb8, 0x19, 0xa1, 0x1a, 0x16, 0xc9, 0x71, - 0x05, 0xa8, 0x8a, 0x10, 0x42, 0x92, 0xbb, 0x10, 0xf9, 0xac, 0x88, 0x9a, 0x31, 0x82, 0x0a, 0x33, - 0x89, 0x55, 0xc0, 0x1b, 0x26, 0xd8, 0x9c, 0x89, 0x20, 0x14, 0x98, 0x48, 0x03, 0xba, 0x20, 0xa8, - 0x58, 0x14, 0xaa, 0x08, 0xb9, 0x58, 0x85, 0x9b, 0x75, 0x82, 0xaa, 0x88, 0x11, 0x43, 0xb0, 0x8c, - 0x11, 0xdd, 0x9a, 0x90, 0x9a, 0x33, 0x92, 0x19, 0x82, 0x29, 0x47, 0xc9, 0x39, 0x15, 0xeb, 0x8b, - 0x88, 0x41, 0x02, 0x8a, 0x52, 0x91, 0x9b, 0x12, 0xa8, 0x50, 0x04, 0xaa, 0x90, 0xba, 0x72, 0x92, - 0x0b, 0x57, 0x91, 0x9b, 0x18, 0x21, 0x14, 0xc9, 0x1a, 0x91, 0xbf, 0x8a, 0x98, 0x0a, 0x24, 0x80, - 0x10, 0x98, 0x58, 0x15, 0xbb, 0x60, 0x93, 0xcd, 0x8a, 0x00, 0x32, 0x91, 0x09, 0x36, 0xa8, 0x0b, - 0x02, 0x99, 0x62, 0x02, 0x9a, 0xc9, 0x8b, 0x45, 0xa0, 0x49, 0x27, 0xb0, 0x9a, 0x20, 0x42, 0x82, - 0xbc, 0x28, 0xd0, 0xae, 0x09, 0xa9, 0x18, 0x23, 0x01, 0x81, 0x9b, 0x73, 0x84, 0x9b, 0x53, 0xb1, - 0xaf, 0x8a, 0x21, 0x22, 0xa8, 0x38, 0x17, 0xb9, 0x19, 0x82, 0x89, 0x53, 0x82, 0xa8, 0xcc, 0x2a, - 0x25, 0xa8, 0x61, 0x15, 0xb9, 0x8a, 0x31, 0x24, 0xa0, 0x9d, 0x11, 0xfa, 0xab, 0x88, 0x99, 0x28, - 0x33, 0x12, 0xb8, 0x0b, 0x57, 0x91, 0x0a, 0x24, 0xe8, 0xac, 0x09, 0x22, 0x02, 0x9a, 0x62, 0x02, - 0xab, 0x18, 0x81, 0x08, 0x34, 0x13, 0xea, 0xbd, 0x30, 0x14, 0x09, 0x73, 0x83, 0xba, 0x0a, 0x63, - 0x12, 0xba, 0x1b, 0x91, 0xdf, 0x9a, 0x88, 0x89, 0x10, 0x43, 0x02, 0xca, 0x39, 0x35, 0x98, 0x38, - 0x03, 0xed, 0x9c, 0x29, 0x32, 0xa0, 0x1a, 0x35, 0xa1, 0x9b, 0x10, 0x81, 0x20, 0x53, 0x24, 0xfb, - 0x9d, 0x31, 0x01, 0x28, 0x25, 0x81, 0xbb, 0x19, 0x37, 0x92, 0xac, 0x18, 0xc0, 0xcd, 0x99, 0x89, - 0x08, 0x10, 0x44, 0x92, 0xbb, 0x50, 0x13, 0x08, 0x22, 0xb0, 0xcf, 0xab, 0x40, 0x13, 0xba, 0x40, - 0x15, 0x99, 0x0a, 0x08, 0x01, 0x01, 0x61, 0x04, 0xec, 0x0a, 0x12, 0x01, 0x32, 0x14, 0xa8, 0xaa, - 0x48, 0x27, 0xb0, 0x9b, 0x02, 0xfb, 0xbb, 0xa9, 0x89, 0x00, 0x20, 0x47, 0xa1, 0x8c, 0x31, 0x01, - 0x21, 0x03, 0xcc, 0xcb, 0x8c, 0x51, 0x81, 0xaa, 0x53, 0x81, 0x99, 0x88, 0x08, 0x21, 0x80, 0x72, - 0x95, 0xbd, 0x19, 0x12, 0x30, 0x25, 0x91, 0x89, 0x99, 0x61, 0x15, 0xca, 0x09, 0x92, 0xbd, 0x9b, - 0xba, 0x19, 0x81, 0x50, 0x36, 0xb8, 0x0b, 0x33, 0x10, 0x54, 0xa0, 0xbc, 0xaa, 0x0b, 0x54, 0xa0, - 0x0b, 0x26, 0xa0, 0x09, 0x90, 0x09, 0x23, 0x98, 0x75, 0xa1, 0xae, 0x10, 0x00, 0x51, 0x03, 0xa8, - 0x08, 0x88, 0x72, 0x82, 0xac, 0x28, 0xb8, 0xae, 0xa9, 0xaa, 0x28, 0x80, 0x61, 0x15, 0xb9, 0x29, - 0x02, 0x30, 0x27, 0xc8, 0x9b, 0x99, 0x19, 0x24, 0xd9, 0x28, 0x15, 0x9a, 0x18, 0xa8, 0x29, 0x14, - 0x89, 0x36, 0xd0, 0x9d, 0x01, 0x00, 0x54, 0x81, 0xa9, 0x10, 0x00, 0x43, 0xb1, 0x9e, 0x11, 0xda, - 0xab, 0xa8, 0x9c, 0x20, 0x80, 0x72, 0x03, 0xba, 0x20, 0x81, 0x72, 0x14, 0xcb, 0x9a, 0x88, 0x20, - 0x83, 0xbc, 0x61, 0x82, 0xaa, 0x11, 0xb8, 0x48, 0x83, 0x29, 0x27, 0xda, 0x8b, 0x00, 0x48, 0x37, - 0xa1, 0x8b, 0x11, 0x21, 0x23, 0xfa, 0x8a, 0x82, 0xcd, 0x8a, 0xa9, 0x8b, 0x12, 0x00, 0x74, 0x81, - 0x8a, 0x10, 0x08, 0x55, 0x93, 0xcc, 0x09, 0x08, 0x11, 0x90, 0x8c, 0x43, 0xb1, 0x8a, 0x03, 0xbb, - 0x52, 0x82, 0x38, 0x06, 0xeb, 0x89, 0x88, 0x71, 0x15, 0xa8, 0x89, 0x21, 0x21, 0x82, 0xcc, 0x19, - 0xb1, 0xaf, 0x89, 0xb9, 0x0a, 0x12, 0x20, 0x45, 0x91, 0x0a, 0x80, 0x38, 0x77, 0xa1, 0xbb, 0x08, - 0x01, 0x11, 0xba, 0x2a, 0x16, 0xb8, 0x19, 0x82, 0x8c, 0x42, 0x81, 0x40, 0x91, 0xbc, 0x9a, 0x8b, - 0x77, 0x05, 0xa9, 0x19, 0x21, 0x12, 0xa8, 0x9c, 0x10, 0xea, 0x9c, 0x98, 0xaa, 0x19, 0x12, 0x21, - 0x25, 0x91, 0x00, 0xb9, 0x71, 0x47, 0xb8, 0x9c, 0x18, 0x11, 0x91, 0xab, 0x40, 0x02, 0xbb, 0x30, - 0xa1, 0x0a, 0x34, 0x11, 0x22, 0xc8, 0xac, 0xeb, 0x3b, 0x77, 0x83, 0xaa, 0x29, 0x43, 0x01, 0xca, - 0x89, 0x91, 0xdc, 0x9a, 0x99, 0xaa, 0x10, 0x22, 0x33, 0x23, 0x31, 0xa2, 0xaf, 0x75, 0x04, 0xc9, - 0x9b, 0x21, 0x12, 0xb9, 0x8b, 0x43, 0xa0, 0x8c, 0x21, 0x98, 0x18, 0x32, 0x23, 0xb0, 0x8b, 0xa1, - 0xff, 0x5a, 0x27, 0x91, 0x9b, 0x38, 0x25, 0xa1, 0xab, 0x19, 0xc0, 0xbd, 0x9a, 0xa8, 0x9a, 0x10, - 0x43, 0x13, 0x10, 0x35, 0xc0, 0x1c, 0x56, 0x92, 0xda, 0x99, 0x32, 0x02, 0xbc, 0x29, 0x03, 0xb9, - 0x1a, 0x11, 0x08, 0x00, 0x61, 0x13, 0xdb, 0x38, 0xb2, 0xcf, 0x71, 0x13, 0xa0, 0x9b, 0x51, 0x24, - 0xb8, 0x8c, 0x00, 0xc9, 0x9c, 0x89, 0x99, 0x98, 0x18, 0x34, 0x92, 0x39, 0x27, 0xb9, 0x39, 0x37, - 0xa1, 0xbc, 0x0b, 0x44, 0xa2, 0xac, 0x30, 0x91, 0x9b, 0x10, 0x08, 0x11, 0x88, 0x71, 0x93, 0xbc, - 0x42, 0xc1, 0x8d, 0x54, 0x02, 0x99, 0x9a, 0x63, 0x04, 0xc9, 0x09, 0x91, 0xcb, 0x9a, 0xa8, 0x89, - 0x90, 0x28, 0x26, 0xa0, 0x58, 0x14, 0xba, 0x60, 0x13, 0xa9, 0xbc, 0x29, 0x45, 0xb0, 0x9c, 0x22, - 0xb0, 0x8a, 0x01, 0x08, 0x12, 0x99, 0x73, 0xc2, 0x8c, 0x33, 0xd8, 0x2b, 0x27, 0x81, 0x99, 0x09, - 0x64, 0x82, 0xcb, 0x18, 0xa0, 0xad, 0x89, 0x99, 0x08, 0x90, 0x38, 0x16, 0xa9, 0x61, 0x83, 0x9b, - 0x53, 0x82, 0xba, 0xbb, 0x58, 0x17, 0xb9, 0x0a, 0x13, 0xca, 0x19, 0x80, 0x28, 0x03, 0x8b, 0x36, - 0xe8, 0x1b, 0x24, 0xc9, 0x38, 0x25, 0x98, 0x98, 0x18, 0x57, 0x90, 0xab, 0x10, 0xd8, 0xab, 0x98, - 0x99, 0x10, 0x99, 0x61, 0x83, 0xab, 0x55, 0xa2, 0x09, 0x43, 0xa0, 0x9b, 0x9b, 0x71, 0x14, 0xdb, - 0x18, 0x82, 0xab, 0x18, 0x80, 0x20, 0x83, 0x2b, 0x26, 0xdc, 0x39, 0x04, 0xaa, 0x61, 0x02, 0x99, - 0x80, 0x40, 0x27, 0xc0, 0x9a, 0x01, 0xdb, 0x9a, 0x98, 0x8a, 0x11, 0x89, 0x62, 0x91, 0x1b, 0x46, - 0xa0, 0x28, 0x13, 0xba, 0x9a, 0x89, 0x65, 0x82, 0xad, 0x30, 0xb0, 0x9c, 0x01, 0x88, 0x32, 0x91, - 0x39, 0x85, 0xaf, 0x30, 0x83, 0x8a, 0x36, 0xa0, 0x09, 0x11, 0x73, 0x24, 0xda, 0x89, 0xa1, 0xbd, - 0x9a, 0xa8, 0x09, 0x02, 0x88, 0x35, 0xb8, 0x5a, 0x26, 0x88, 0x30, 0xa2, 0xac, 0x08, 0x10, 0x36, - 0xb1, 0x9d, 0x22, 0xea, 0x0a, 0x00, 0x08, 0x32, 0x90, 0x30, 0xd2, 0x9e, 0x32, 0x82, 0x38, 0x15, - 0xba, 0x39, 0x34, 0x45, 0x83, 0xbc, 0x09, 0xfa, 0xbc, 0x89, 0x99, 0x18, 0x01, 0x28, 0x13, 0xc9, - 0x71, 0x23, 0x10, 0x14, 0xc9, 0x8c, 0x20, 0x31, 0x15, 0xb9, 0x1a, 0x92, 0xcf, 0x09, 0x81, 0x18, - 0x23, 0x80, 0x11, 0xfa, 0x8a, 0x24, 0x11, 0x53, 0xa1, 0xad, 0x31, 0x44, 0x22, 0xb0, 0xab, 0xa8, - 0xef, 0x9b, 0x89, 0x89, 0x10, 0x01, 0x11, 0x81, 0x0a, 0x55, 0x22, 0x52, 0x92, 0xcc, 0x0a, 0x42, - 0x22, 0x91, 0x9a, 0x12, 0xf9, 0xac, 0x08, 0x80, 0x21, 0x22, 0x10, 0xb0, 0xae, 0x18, 0x23, 0x55, - 0x14, 0xd9, 0x8a, 0x51, 0x33, 0x81, 0xaa, 0x08, 0xfa, 0xbd, 0x9a, 0x99, 0x09, 0x11, 0x21, 0x02, - 0x9a, 0x50, 0x23, 0x54, 0x35, 0xb8, 0xbd, 0x28, 0x53, 0x12, 0x9a, 0x28, 0x92, 0xbe, 0x8b, 0x98, - 0x18, 0x22, 0x33, 0x12, 0xed, 0x0a, 0x11, 0x28, 0x67, 0x81, 0xbb, 0x09, 0x63, 0x23, 0xb8, 0x0a, - 0x01, 0xde, 0xaa, 0xa9, 0x99, 0x10, 0x10, 0x33, 0xa0, 0x0c, 0x34, 0x81, 0x75, 0x13, 0xca, 0xab, - 0x31, 0x35, 0x92, 0x9b, 0x42, 0xc1, 0xad, 0x88, 0x98, 0x10, 0x02, 0x22, 0xa3, 0xbf, 0x20, 0xa1, - 0x58, 0x37, 0xa0, 0xac, 0x18, 0x63, 0x12, 0xba, 0x29, 0xa2, 0xcf, 0x8a, 0x99, 0x09, 0x00, 0x11, - 0x23, 0xc9, 0x29, 0x15, 0x09, 0x66, 0x92, 0xca, 0x89, 0x21, 0x25, 0xb0, 0x0a, 0x24, 0xc9, 0x9b, - 0x90, 0x89, 0x21, 0x10, 0x52, 0xc0, 0x9d, 0x31, 0xa8, 0x70, 0x15, 0xb8, 0xab, 0x20, 0x45, 0x92, - 0xab, 0x30, 0xd1, 0xbd, 0x89, 0x99, 0x19, 0x01, 0x30, 0x14, 0xcb, 0x58, 0x82, 0x19, 0x47, 0xa1, - 0xac, 0x09, 0x42, 0x23, 0xc9, 0x29, 0x14, 0xdb, 0x89, 0x90, 0x09, 0x11, 0x00, 0x43, 0xe9, 0x0b, - 0x13, 0xaa, 0x73, 0x07, 0xaa, 0x89, 0x20, 0x34, 0xb1, 0x9c, 0x32, 0xe9, 0xab, 0x98, 0xa9, 0x10, - 0x01, 0x51, 0x92, 0x9c, 0x51, 0xa1, 0x38, 0x47, 0xb8, 0xab, 0x18, 0x63, 0x02, 0xba, 0x40, 0x93, - 0xbc, 0x09, 0xa8, 0x19, 0x02, 0x30, 0x15, 0xec, 0x19, 0x02, 0x8a, 0x56, 0x92, 0xbb, 0x89, 0x42, - 0x25, 0xb9, 0x0b, 0x23, 0xec, 0x8b, 0x98, 0x99, 0x11, 0x00, 0x43, 0xb1, 0x8c, 0x34, 0xa8, 0x70, - 0x15, 0xc9, 0x9a, 0x10, 0x44, 0x91, 0x9a, 0x32, 0xb2, 0xae, 0x08, 0x99, 0x10, 0x00, 0x31, 0x93, - 0xcf, 0x20, 0x91, 0x29, 0x47, 0xa1, 0xbb, 0x09, 0x44, 0x13, 0xda, 0x19, 0x82, 0xcd, 0x99, 0x98, - 0x88, 0x01, 0x11, 0x24, 0xb9, 0x2b, 0x15, 0x89, 0x74, 0x03, 0xbc, 0x9a, 0x41, 0x34, 0xa0, 0x0b, - 0x34, 0xc9, 0xab, 0x88, 0x99, 0x20, 0x10, 0x42, 0xd1, 0x9d, 0x30, 0x90, 0x78, 0x25, 0xb8, 0xbb, - 0x20, 0x45, 0x81, 0xbb, 0x20, 0xb0, 0xbf, 0x8a, 0x99, 0x19, 0x11, 0x41, 0x03, 0xbb, 0x49, 0x04, - 0x29, 0x57, 0x91, 0xcb, 0x0a, 0x52, 0x23, 0xa9, 0x29, 0x13, 0xea, 0x9a, 0x99, 0x88, 0x10, 0x20, - 0x23, 0xfa, 0x8c, 0x12, 0x08, 0x64, 0x04, 0xb9, 0xab, 0x41, 0x25, 0xa1, 0x9c, 0x10, 0xc9, 0xbc, - 0xa9, 0x89, 0x18, 0x21, 0x53, 0x92, 0xab, 0x32, 0x82, 0x72, 0x27, 0xa8, 0xac, 0x19, 0x63, 0x12, - 0x9a, 0x20, 0x82, 0xdb, 0x9a, 0x99, 0x08, 0x00, 0x32, 0x83, 0xce, 0x09, 0x01, 0x41, 0x37, 0x83, - 0xcb, 0x9b, 0x62, 0x14, 0xa9, 0x8a, 0x80, 0xeb, 0xab, 0x9b, 0x09, 0x00, 0x32, 0x26, 0x98, 0x0a, - 0x02, 0x20, 0x57, 0x02, 0xb9, 0xbc, 0x38, 0x37, 0x81, 0x09, 0x11, 0xa0, 0xbb, 0xad, 0x8a, 0x80, - 0x08, 0x34, 0xc0, 0xac, 0x10, 0x08, 0x75, 0x23, 0x91, 0xca, 0x8a, 0x54, 0x02, 0xaa, 0x88, 0xca, - 0xcb, 0xcb, 0xab, 0x00, 0x10, 0x62, 0x03, 0xa9, 0x11, 0x90, 0x70, 0x25, 0x91, 0xaa, 0xac, 0x61, - 0x33, 0x88, 0x20, 0x91, 0xaa, 0xba, 0xbf, 0x09, 0x80, 0x29, 0x15, 0xca, 0x1a, 0x90, 0x4a, 0x57, - 0x01, 0x88, 0xa9, 0x19, 0x35, 0xa0, 0x89, 0xa0, 0xbf, 0xa9, 0xda, 0x9a, 0x01, 0x10, 0x53, 0x91, - 0x09, 0x12, 0x9b, 0x75, 0x03, 0x99, 0xa9, 0x8a, 0x64, 0x02, 0x18, 0x22, 0xc8, 0x8a, 0xc0, 0xad, - 0x00, 0x98, 0x30, 0x93, 0xae, 0x11, 0xb8, 0x78, 0x26, 0x90, 0x88, 0x98, 0x20, 0x15, 0xaa, 0x10, - 0xe8, 0xac, 0x89, 0xdb, 0x09, 0x00, 0x20, 0x24, 0xa8, 0x38, 0xa3, 0x0d, 0x47, 0x91, 0x9a, 0x90, - 0x18, 0x35, 0x91, 0x40, 0x04, 0xcb, 0x08, 0xc0, 0xab, 0x00, 0x98, 0x32, 0xe1, 0x8b, 0x23, 0xbc, - 0x73, 0x17, 0x99, 0x80, 0x80, 0x21, 0x91, 0x8b, 0x23, 0xfc, 0x8d, 0x90, 0xaa, 0x08, 0x81, 0x31, - 0x04, 0x9a, 0x52, 0xb0, 0x3b, 0x47, 0xb0, 0x8a, 0x81, 0x21, 0x15, 0x89, 0x72, 0x92, 0xbb, 0x10, - 0xc8, 0x9b, 0x80, 0x88, 0x13, 0xfb, 0x29, 0x83, 0x9c, 0x66, 0x82, 0x9a, 0x10, 0x00, 0x12, 0xc9, - 0x2a, 0x04, 0xde, 0x0a, 0x90, 0xaa, 0x18, 0x10, 0x41, 0x92, 0x1b, 0x34, 0xd9, 0x58, 0x15, 0xaa, - 0x0a, 0x11, 0x32, 0x82, 0x1b, 0x67, 0xa0, 0x9b, 0x11, 0xc9, 0x0a, 0x88, 0x18, 0x81, 0xbd, 0x50, - 0xa1, 0x1a, 0x57, 0x91, 0x8a, 0x10, 0x12, 0x81, 0xcc, 0x30, 0xb2, 0xcf, 0x09, 0x90, 0x9a, 0x10, - 0x10, 0x33, 0xb8, 0x49, 0x15, 0xbb, 0x73, 0x84, 0xbb, 0x18, 0x32, 0x23, 0xc8, 0x48, 0x27, 0xc8, - 0x8a, 0x01, 0xb9, 0x89, 0x88, 0x10, 0xc8, 0x8d, 0x32, 0xc0, 0x68, 0x25, 0xa8, 0x8a, 0x32, 0x23, - 0xc8, 0x9e, 0x31, 0xc0, 0xae, 0x08, 0x98, 0x99, 0x10, 0x21, 0x13, 0xaa, 0x71, 0x82, 0x8b, 0x55, - 0xa1, 0xac, 0x10, 0x34, 0x01, 0xab, 0x71, 0x13, 0xca, 0x0a, 0x01, 0xba, 0x99, 0x08, 0x01, 0xdc, - 0x1a, 0x14, 0x99, 0x72, 0x15, 0xaa, 0x09, 0x53, 0x02, 0xda, 0x0a, 0x22, 0xea, 0x9c, 0x80, 0x90, - 0x89, 0x10, 0x32, 0x91, 0x0a, 0x45, 0xa0, 0x29, 0x27, 0xc8, 0xab, 0x41, 0x34, 0xa0, 0x8b, 0x54, - 0x82, 0xbb, 0x19, 0x81, 0xba, 0x9b, 0x10, 0xc0, 0xbe, 0x30, 0x83, 0x1a, 0x67, 0x01, 0xab, 0x28, - 0x45, 0x91, 0xdb, 0x19, 0x02, 0xdb, 0x9b, 0x08, 0x88, 0x89, 0x30, 0x24, 0xb8, 0x38, 0x16, 0x98, - 0x51, 0x03, 0xfb, 0x8b, 0x62, 0x23, 0xb9, 0x1a, 0x36, 0x90, 0xab, 0x08, 0x81, 0xb9, 0x8c, 0x10, - 0xe9, 0x9b, 0x32, 0x80, 0x60, 0x25, 0x90, 0x9c, 0x48, 0x35, 0xb0, 0xad, 0x20, 0x90, 0xcc, 0x9a, - 0x00, 0x08, 0x89, 0x41, 0x83, 0xaa, 0x62, 0x82, 0x08, 0x34, 0xb1, 0xce, 0x0a, 0x45, 0x03, 0xba, - 0x48, 0x14, 0x98, 0x9a, 0x88, 0x01, 0xca, 0x8a, 0x01, 0xce, 0x09, 0x12, 0x08, 0x54, 0x03, 0xa9, - 0x9b, 0x72, 0x26, 0xb9, 0x9c, 0x11, 0xb8, 0xbb, 0xab, 0x18, 0x82, 0x0a, 0x64, 0xa1, 0x0a, 0x34, - 0x90, 0x50, 0x03, 0xda, 0xbb, 0x3a, 0x77, 0x81, 0x9a, 0x21, 0x02, 0x98, 0xa9, 0x09, 0x11, 0xdb, - 0x09, 0xb1, 0xaf, 0x28, 0x81, 0x30, 0x27, 0x91, 0xa9, 0x09, 0x74, 0x13, 0xeb, 0x89, 0x81, 0xa9, - 0xaa, 0x9b, 0x20, 0x92, 0x19, 0x35, 0xc8, 0x39, 0x14, 0x88, 0x54, 0x91, 0xad, 0x9a, 0x40, 0x37, - 0xa0, 0x8a, 0x33, 0x91, 0x88, 0xb9, 0x0a, 0x04, 0xcc, 0x08, 0xd8, 0xac, 0x22, 0x88, 0x72, 0x23, - 0xa9, 0x8a, 0x18, 0x57, 0x92, 0xcb, 0x09, 0xa0, 0xaa, 0xb9, 0x9c, 0x31, 0x92, 0x39, 0x15, 0xca, - 0x41, 0x82, 0x29, 0x27, 0xc8, 0xab, 0x89, 0x72, 0x24, 0xa8, 0x19, 0x13, 0x98, 0x01, 0xca, 0x2a, - 0x83, 0xbd, 0x08, 0xfb, 0x8b, 0x12, 0x88, 0x56, 0x82, 0xaa, 0x80, 0x31, 0x46, 0xb1, 0xac, 0x08, - 0xba, 0x8b, 0xb9, 0x8e, 0x22, 0x81, 0x38, 0x93, 0x9c, 0x63, 0x90, 0x50, 0x14, 0xeb, 0x8a, 0x00, - 0x52, 0x04, 0x99, 0x20, 0x81, 0x09, 0x02, 0xcb, 0x28, 0x92, 0xad, 0x98, 0xce, 0x08, 0x82, 0x39, - 0x47, 0x90, 0x9a, 0x10, 0x41, 0x24, 0xc8, 0xab, 0xa0, 0xcc, 0x08, 0xb9, 0x8b, 0x34, 0x00, 0x30, - 0xb0, 0x2b, 0x26, 0x99, 0x65, 0x92, 0xbd, 0x09, 0x20, 0x44, 0x02, 0x8a, 0x22, 0xa8, 0x38, 0x83, - 0xbe, 0x30, 0x91, 0xac, 0xda, 0xad, 0x20, 0x88, 0x70, 0x15, 0xb8, 0x89, 0x21, 0x42, 0x03, 0xcb, - 0x9a, 0xe9, 0xab, 0x18, 0xca, 0x1a, 0x24, 0x10, 0x00, 0xa9, 0x58, 0x02, 0x2a, 0x67, 0xb0, 0xac, - 0x18, 0x31, 0x43, 0x80, 0x28, 0x82, 0xba, 0x61, 0x81, 0x9c, 0x20, 0x90, 0xba, 0xce, 0x8b, 0x01, - 0x89, 0x75, 0x03, 0xba, 0x1a, 0x42, 0x23, 0x91, 0xac, 0xa8, 0xde, 0x8a, 0x00, 0xaa, 0x18, 0x33, - 0x12, 0xa0, 0x8b, 0x44, 0x90, 0x70, 0x16, 0xc9, 0xab, 0x20, 0x43, 0x12, 0x80, 0x32, 0xa0, 0x9d, - 0x43, 0xa1, 0x9b, 0x30, 0x91, 0xfc, 0xac, 0x09, 0x80, 0x29, 0x57, 0x91, 0xaa, 0x18, 0x43, 0x03, - 0xa9, 0x89, 0xe9, 0xbd, 0x0a, 0x80, 0xa9, 0x28, 0x34, 0x03, 0xbb, 0x29, 0x15, 0x89, 0x65, 0x03, - 0xdc, 0x9a, 0x31, 0x24, 0x80, 0x20, 0x14, 0xba, 0x1b, 0x24, 0x90, 0x9b, 0x30, 0x92, 0xff, 0x9a, - 0x18, 0x89, 0x50, 0x34, 0xa8, 0xab, 0x48, 0x35, 0x91, 0x9a, 0x00, 0xfb, 0xad, 0x08, 0x80, 0x99, - 0x10, 0x34, 0x81, 0x9c, 0x30, 0x81, 0x29, 0x47, 0xa1, 0xcc, 0x0a, 0x42, 0x13, 0x89, 0x52, 0x82, - 0xbb, 0x29, 0x23, 0x90, 0xab, 0x41, 0xb3, 0xff, 0x8a, 0x80, 0x89, 0x63, 0x03, 0xb8, 0xaa, 0x52, - 0x15, 0xa8, 0x09, 0x92, 0xed, 0x9a, 0x08, 0x80, 0x88, 0x10, 0x35, 0xb0, 0x8b, 0x33, 0xa8, 0x60, - 0x25, 0xb9, 0xad, 0x1a, 0x44, 0x82, 0x89, 0x44, 0xa1, 0xab, 0x20, 0x12, 0x80, 0xba, 0x61, 0xb1, - 0xcf, 0x09, 0x80, 0x09, 0x45, 0x81, 0x9a, 0x8a, 0x63, 0x13, 0xca, 0x28, 0xa1, 0xcf, 0x89, 0x08, - 0x00, 0x88, 0x38, 0x34, 0xc9, 0x09, 0x13, 0x99, 0x73, 0x83, 0xcb, 0xab, 0x38, 0x37, 0xa0, 0x29, - 0x26, 0xb8, 0x9a, 0x21, 0x11, 0x91, 0x9b, 0x52, 0xf0, 0xac, 0x00, 0xa8, 0x30, 0x26, 0xa0, 0x99, - 0x19, 0x64, 0x82, 0x9c, 0x20, 0xc0, 0xbd, 0x89, 0x08, 0x10, 0x88, 0x50, 0x04, 0xb9, 0x39, 0x82, - 0x0a, 0x37, 0xb1, 0xcb, 0x9a, 0x50, 0x25, 0xa9, 0x40, 0x14, 0xba, 0x0a, 0x11, 0x21, 0xa2, 0x9b, - 0x34, 0xfb, 0x8f, 0x80, 0x98, 0x41, 0x03, 0xa9, 0x89, 0x38, 0x37, 0xa0, 0x9c, 0x23, 0xfa, 0xab, - 0x89, 0x08, 0x11, 0x98, 0x62, 0x83, 0xab, 0x30, 0xa1, 0x48, 0x27, 0xb9, 0xab, 0x8a, 0x73, 0x04, - 0x9a, 0x51, 0x83, 0xba, 0x09, 0x01, 0x33, 0xb1, 0x0c, 0x04, 0xdd, 0x0b, 0x90, 0x89, 0x45, 0x92, - 0x9a, 0x08, 0x41, 0x26, 0xc9, 0x1a, 0x02, 0xdc, 0xab, 0x98, 0x10, 0x12, 0x89, 0x73, 0x91, 0x8a, - 0x21, 0x99, 0x71, 0x03, 0xdb, 0x99, 0x18, 0x63, 0x81, 0x8a, 0x44, 0xa2, 0xaa, 0x08, 0x28, 0x43, - 0xb0, 0x1a, 0xa3, 0xdf, 0x89, 0x98, 0x28, 0x26, 0xa0, 0x8a, 0x10, 0x63, 0x03, 0xdb, 0x29, 0xa2, - 0xce, 0x9a, 0x89, 0x20, 0x02, 0x08, 0x34, 0xa0, 0x1a, 0x82, 0x0a, 0x67, 0xa1, 0xbb, 0x89, 0x31, - 0x26, 0xa0, 0x29, 0x37, 0x98, 0x9a, 0x88, 0x38, 0x24, 0xa8, 0x19, 0xd8, 0xbd, 0x98, 0xa9, 0x71, - 0x04, 0xa9, 0x09, 0x31, 0x44, 0xa1, 0xac, 0x11, 0xd0, 0xbd, 0xaa, 0x99, 0x32, 0x03, 0x10, 0x24, - 0x98, 0x10, 0xa8, 0x78, 0x26, 0xc8, 0xab, 0x18, 0x42, 0x13, 0xa9, 0x71, 0x23, 0xa9, 0xa9, 0x89, - 0x51, 0x14, 0x98, 0x99, 0xca, 0x9c, 0xaa, 0x0b, 0x56, 0x82, 0xbb, 0x28, 0x44, 0x13, 0xc9, 0x8a, - 0x01, 0xdc, 0xbc, 0xba, 0x0a, 0x43, 0x12, 0x20, 0x01, 0x10, 0x81, 0xab, 0x75, 0x04, 0xda, 0x9a, - 0x21, 0x43, 0x80, 0x1a, 0x44, 0x82, 0x98, 0xa9, 0x8b, 0x54, 0x12, 0x90, 0xca, 0xab, 0xa9, 0xbe, - 0x49, 0x26, 0xa8, 0x9a, 0x30, 0x36, 0x91, 0xba, 0x18, 0xb8, 0xbf, 0xbb, 0xad, 0x19, 0x33, 0x23, - 0x01, 0x09, 0x34, 0xc0, 0x1b, 0x57, 0x90, 0xcb, 0x89, 0x42, 0x13, 0xa9, 0x40, 0x24, 0x88, 0x00, - 0xba, 0x1b, 0x45, 0x22, 0xa0, 0xbe, 0x09, 0xb8, 0xae, 0x51, 0x03, 0xb9, 0x8a, 0x62, 0x24, 0xb8, - 0x8a, 0x01, 0xeb, 0x9b, 0xcb, 0xac, 0x10, 0x42, 0x22, 0xa0, 0x39, 0x25, 0xc9, 0x49, 0x15, 0xb9, - 0xbb, 0x29, 0x55, 0x91, 0x8a, 0x43, 0x82, 0x09, 0x02, 0xcb, 0x29, 0x43, 0x33, 0xd0, 0xae, 0x28, - 0xc8, 0x8c, 0x53, 0x91, 0xaa, 0x19, 0x73, 0x12, 0xca, 0x08, 0x91, 0xbc, 0x99, 0xda, 0x9b, 0x20, - 0x52, 0x13, 0xb9, 0x58, 0x13, 0xac, 0x51, 0x83, 0xcb, 0x9b, 0x40, 0x25, 0xb0, 0x1a, 0x35, 0x98, - 0x29, 0x82, 0xbb, 0x38, 0x53, 0x34, 0xf9, 0x9b, 0x11, 0xd9, 0x1a, 0x25, 0xb8, 0x9a, 0x20, 0x46, - 0x81, 0xac, 0x20, 0xc0, 0xac, 0x80, 0xca, 0x8a, 0x20, 0x43, 0x04, 0xab, 0x51, 0x93, 0x9b, 0x54, - 0x90, 0xac, 0x89, 0x51, 0x23, 0xca, 0x38, 0x15, 0x9a, 0x20, 0x92, 0xab, 0x11, 0x52, 0x24, 0xfb, - 0x8a, 0x02, 0xca, 0x38, 0x05, 0xba, 0x89, 0x31, 0x37, 0xb0, 0x9c, 0x12, 0xe9, 0x8b, 0x80, 0xcb, - 0x09, 0x20, 0x63, 0x92, 0x9b, 0x53, 0xa1, 0x1a, 0x25, 0xc8, 0xab, 0x18, 0x63, 0x83, 0xbb, 0x61, - 0x82, 0x9a, 0x32, 0xa1, 0x8b, 0x10, 0x63, 0x04, 0xcd, 0x19, 0x82, 0x9c, 0x41, 0x91, 0xbb, 0x19, - 0x63, 0x24, 0xd9, 0x0a, 0x02, 0xcc, 0x0a, 0x90, 0xab, 0x09, 0x30, 0x37, 0xa0, 0x1b, 0x34, 0xb0, - 0x48, 0x04, 0xdb, 0x8b, 0x20, 0x35, 0xa2, 0x9c, 0x63, 0xa1, 0x0a, 0x22, 0xa0, 0x09, 0x18, 0x73, - 0x92, 0xae, 0x18, 0x91, 0x0b, 0x53, 0xb8, 0x9d, 0x10, 0x44, 0x02, 0xdb, 0x29, 0xa1, 0xbd, 0x09, - 0x98, 0xab, 0x88, 0x52, 0x25, 0xb8, 0x29, 0x15, 0x98, 0x41, 0xa2, 0xcd, 0x09, 0x31, 0x25, 0xb8, - 0x1a, 0x35, 0xb8, 0x1a, 0x24, 0x98, 0x89, 0x28, 0x45, 0xc1, 0x9d, 0x10, 0xa0, 0x28, 0x13, 0xfb, - 0x8b, 0x31, 0x45, 0xa1, 0xac, 0x20, 0xc8, 0xad, 0x08, 0x98, 0x99, 0x09, 0x62, 0x13, 0xb9, 0x40, - 0x03, 0x18, 0x43, 0xe8, 0xac, 0x19, 0x53, 0x13, 0xba, 0x38, 0x15, 0xba, 0x38, 0x33, 0x88, 0xaa, - 0x68, 0x25, 0xd9, 0x8b, 0x10, 0x88, 0x41, 0xa1, 0xbe, 0x8a, 0x63, 0x24, 0xb9, 0x8b, 0x00, 0xfb, - 0xab, 0x80, 0x88, 0xa9, 0x09, 0x46, 0x82, 0x99, 0x31, 0x11, 0x42, 0x03, 0xde, 0xaa, 0x30, 0x44, - 0x92, 0x9a, 0x42, 0x81, 0x9b, 0x30, 0x33, 0x91, 0xbb, 0x72, 0x85, 0xba, 0x0b, 0x88, 0x40, 0x24, - 0xea, 0xac, 0x18, 0x54, 0x02, 0xba, 0x0a, 0xa0, 0xce, 0x8a, 0x09, 0x80, 0xa9, 0x28, 0x36, 0x80, - 0x08, 0x12, 0x41, 0x35, 0xc0, 0xbd, 0x8a, 0x51, 0x24, 0x98, 0x19, 0x22, 0xa8, 0x0a, 0x30, 0x44, - 0x91, 0x9b, 0x63, 0xa1, 0xab, 0xa8, 0x0b, 0x66, 0x92, 0xbc, 0xab, 0x30, 0x47, 0x90, 0xaa, 0x00, - 0xca, 0xac, 0x9a, 0x09, 0x01, 0xba, 0x60, 0x23, 0x08, 0x12, 0x88, 0x73, 0x17, 0xba, 0xab, 0x09, - 0x54, 0x03, 0x9a, 0x30, 0x82, 0xaa, 0x00, 0x20, 0x36, 0xa1, 0x0b, 0x24, 0xb9, 0x09, 0xf9, 0x2a, - 0x47, 0xa8, 0xac, 0x99, 0x51, 0x23, 0xc8, 0x0a, 0x90, 0xbd, 0xaa, 0xaa, 0x29, 0x83, 0xab, 0x63, - 0x02, 0x48, 0x03, 0x8b, 0x67, 0x82, 0xac, 0x9a, 0x18, 0x35, 0x92, 0x8a, 0x33, 0xc0, 0x0a, 0x82, - 0x28, 0x36, 0xa0, 0x1a, 0x82, 0x9c, 0x22, 0xfc, 0x48, 0x15, 0xc9, 0xaa, 0x08, 0x52, 0x02, 0xbb, - 0x10, 0xd8, 0xad, 0x98, 0xa9, 0x20, 0x82, 0x8a, 0x33, 0x98, 0x74, 0xa2, 0x1a, 0x47, 0xb1, 0xbb, - 0x8a, 0x31, 0x27, 0xa8, 0x28, 0x13, 0xbb, 0x39, 0x91, 0x49, 0x17, 0x98, 0x18, 0xb8, 0x19, 0x05, - 0xad, 0x71, 0x83, 0xcb, 0x8a, 0x18, 0x53, 0xa1, 0xab, 0x12, 0xfb, 0x9b, 0x98, 0x9a, 0x40, 0x81, - 0x19, 0x81, 0x19, 0x37, 0xb0, 0x5a, 0x27, 0xb9, 0xab, 0x08, 0x42, 0x04, 0x99, 0x40, 0x93, 0xac, - 0x21, 0x98, 0x30, 0x16, 0x98, 0x80, 0xca, 0x40, 0xa3, 0x9e, 0x54, 0x91, 0xac, 0x89, 0x11, 0x14, - 0xb8, 0x0b, 0x83, 0xcf, 0x0a, 0x98, 0x99, 0x32, 0x81, 0x18, 0xa8, 0x5a, 0x17, 0xa8, 0x68, 0x13, - 0xda, 0x9a, 0x10, 0x42, 0x81, 0x8a, 0x34, 0xb0, 0x9c, 0x22, 0x98, 0x60, 0x12, 0x88, 0xa8, 0x9d, - 0x52, 0xa0, 0x1b, 0x37, 0xb0, 0xad, 0x09, 0x32, 0x02, 0xdb, 0x18, 0xb2, 0xcf, 0x88, 0x90, 0x0a, - 0x22, 0x01, 0x80, 0xba, 0x70, 0x14, 0x9a, 0x72, 0x82, 0xdb, 0x89, 0x21, 0x32, 0xa8, 0x29, 0x26, - 0xc9, 0x0a, 0x12, 0x89, 0x32, 0x14, 0x80, 0xeb, 0x0a, 0x34, 0xb9, 0x59, 0x25, 0xd9, 0x9b, 0x18, - 0x33, 0xa1, 0xad, 0x21, 0xe9, 0xac, 0x88, 0x98, 0x19, 0x32, 0x12, 0xb8, 0x9d, 0x73, 0x82, 0x09, - 0x54, 0x90, 0xad, 0x09, 0x32, 0x13, 0xaa, 0x51, 0x03, 0xdb, 0x19, 0x02, 0x09, 0x43, 0x23, 0xa0, - 0xbf, 0x29, 0x15, 0xa9, 0x51, 0x13, 0xcc, 0x9b, 0x30, 0x14, 0xc9, 0x8a, 0x12, 0xec, 0x9b, 0x88, - 0x98, 0x18, 0x33, 0x14, 0xda, 0x0a, 0x44, 0x91, 0x28, 0x25, 0xc8, 0xac, 0x29, 0x34, 0x92, 0x8a, - 0x63, 0x91, 0xbb, 0x10, 0x01, 0x18, 0x53, 0x24, 0xd0, 0xac, 0x30, 0x83, 0x88, 0x45, 0x91, 0xbd, - 0x8b, 0x43, 0x82, 0xbc, 0x29, 0xa1, 0xcf, 0x8a, 0x88, 0x09, 0x18, 0x53, 0x82, 0xcb, 0x29, 0x25, - 0x08, 0x31, 0x04, 0xdb, 0x9c, 0x30, 0x25, 0xa8, 0x18, 0x25, 0xa8, 0x9b, 0x00, 0x11, 0x10, 0x72, - 0x14, 0xe9, 0x8a, 0x21, 0x81, 0x21, 0x14, 0xb8, 0xbe, 0x09, 0x34, 0xc1, 0x9c, 0x10, 0xc8, 0xad, - 0x8a, 0x89, 0x00, 0x10, 0x45, 0x91, 0xac, 0x30, 0x12, 0x21, 0x34, 0xa0, 0xcd, 0x9a, 0x72, 0x12, - 0xaa, 0x41, 0x03, 0xba, 0x99, 0x00, 0x21, 0x01, 0x73, 0x06, 0xda, 0x1a, 0x11, 0x10, 0x33, 0x92, - 0xcb, 0xbc, 0x39, 0x17, 0xc9, 0x0b, 0x01, 0xeb, 0xab, 0xa9, 0x08, 0x01, 0x38, 0x47, 0xb0, 0x9b, - 0x22, 0x02, 0x63, 0x02, 0xba, 0xbb, 0x0a, 0x57, 0x81, 0x8b, 0x53, 0x80, 0x9a, 0x88, 0x09, 0x32, - 0x08, 0x74, 0x82, 0xbd, 0x18, 0x01, 0x41, 0x14, 0xa8, 0x9b, 0xab, 0x60, 0x83, 0xcd, 0x19, 0xa1, - 0xcc, 0x99, 0xaa, 0x28, 0x81, 0x50, 0x25, 0xb9, 0x0b, 0x22, 0x20, 0x47, 0xa0, 0xaa, 0x98, 0x39, - 0x36, 0xb0, 0x2a, 0x26, 0xa8, 0x89, 0x98, 0x19, 0x24, 0x09, 0x46, 0xb1, 0xad, 0x10, 0x00, 0x54, - 0x02, 0xba, 0x8a, 0x89, 0x52, 0xb1, 0xaf, 0x10, 0xc8, 0x9c, 0x99, 0x9a, 0x20, 0x81, 0x61, 0x14, - 0xca, 0x08, 0x01, 0x40, 0x16, 0xb8, 0x8b, 0x80, 0x40, 0x14, 0xb9, 0x58, 0x13, 0xab, 0x18, 0xb9, - 0x38, 0x06, 0x18, 0x35, 0xd8, 0x9b, 0x01, 0x28, 0x57, 0x91, 0x9b, 0x88, 0x00, 0x32, 0xfa, 0x9b, - 0x01, 0xea, 0x9a, 0x99, 0x8b, 0x31, 0x00, 0x73, 0x83, 0xab, 0x18, 0x90, 0x74, 0x04, 0xca, 0x09, - 0x00, 0x32, 0x82, 0xab, 0x73, 0x92, 0x8b, 0x01, 0xba, 0x40, 0x03, 0x38, 0x17, 0xca, 0x89, 0x80, - 0x68, 0x36, 0xb8, 0x9b, 0x10, 0x11, 0x82, 0xce, 0x0a, 0x91, 0xbd, 0x8a, 0xa9, 0x0b, 0x23, 0x11, - 0x36, 0xa2, 0x9a, 0x80, 0x1a, 0x77, 0x93, 0xcb, 0x19, 0x21, 0x23, 0xa8, 0x2b, 0x36, 0xb8, 0x0a, - 0x82, 0xbb, 0x62, 0x01, 0x31, 0x83, 0xbd, 0x08, 0xba, 0x75, 0x17, 0xa9, 0x8a, 0x11, 0x11, 0xb0, - 0xae, 0x18, 0xc8, 0xac, 0x88, 0xb9, 0x19, 0x23, 0x21, 0x25, 0xa0, 0x08, 0xc8, 0x49, 0x67, 0xa0, - 0xab, 0x10, 0x32, 0x02, 0xaa, 0x58, 0x04, 0xb9, 0x28, 0x90, 0x8b, 0x42, 0x12, 0x31, 0xb0, 0x9b, - 0xd0, 0x8d, 0x77, 0x03, 0xbb, 0x09, 0x31, 0x02, 0xeb, 0x9b, 0x00, 0xcc, 0x9c, 0x90, 0xa9, 0x28, - 0x22, 0x23, 0x03, 0x18, 0x81, 0xce, 0x71, 0x15, 0xc8, 0x9a, 0x30, 0x33, 0xa0, 0x9a, 0x63, 0x91, - 0x9a, 0x20, 0x98, 0x0a, 0x32, 0x24, 0x91, 0xaa, 0x32, 0xfc, 0x4b, 0x67, 0x80, 0xaa, 0x08, 0x23, - 0x91, 0xcd, 0x09, 0x90, 0xad, 0x8a, 0x98, 0x99, 0x10, 0x33, 0x14, 0x88, 0x32, 0xc2, 0x9e, 0x73, - 0x03, 0xda, 0x8a, 0x32, 0x15, 0xa9, 0x19, 0x24, 0xa8, 0x0a, 0x01, 0x98, 0x09, 0x31, 0x25, 0xc9, - 0x19, 0x05, 0xbc, 0x70, 0x25, 0xa0, 0xab, 0x38, 0x25, 0xb8, 0xae, 0x00, 0xb9, 0xad, 0x88, 0x89, - 0x89, 0x10, 0x34, 0x02, 0x0a, 0x44, 0xc8, 0x0b, 0x37, 0x91, 0xcb, 0x0a, 0x54, 0x02, 0xba, 0x30, - 0x03, 0xba, 0x28, 0x00, 0x89, 0x88, 0x71, 0x03, 0xdb, 0x30, 0x94, 0x9d, 0x73, 0x13, 0xa9, 0xab, - 0x41, 0x15, 0xe9, 0x8a, 0x80, 0xca, 0x9a, 0x98, 0x98, 0x80, 0x20, 0x35, 0xb1, 0x29, 0x17, 0xb9, - 0x3a, 0x17, 0xa0, 0xab, 0x19, 0x37, 0x92, 0x8c, 0x31, 0x91, 0x8b, 0x10, 0x80, 0x80, 0x99, 0x73, - 0x92, 0xad, 0x52, 0xa1, 0x0b, 0x55, 0x01, 0xa9, 0x9a, 0x62, 0x83, 0xcc, 0x0a, 0xa0, 0xbc, 0x8a, - 0x89, 0x09, 0x80, 0x40, 0x25, 0xb8, 0x58, 0x13, 0xac, 0x40, 0x13, 0xca, 0xba, 0x58, 0x27, 0xa0, - 0x0a, 0x32, 0xb8, 0x0a, 0x02, 0x09, 0x82, 0x9a, 0x55, 0xc0, 0x0c, 0x43, 0xa8, 0x4a, 0x25, 0x80, - 0x9a, 0x0a, 0x55, 0xa1, 0xbd, 0x08, 0xc8, 0xac, 0x88, 0x89, 0x00, 0x80, 0x50, 0x13, 0xab, 0x72, - 0x92, 0x9a, 0x42, 0x91, 0xab, 0xaa, 0x72, 0x17, 0x99, 0x19, 0x03, 0xb9, 0x18, 0x81, 0x18, 0x92, - 0x0b, 0x36, 0xea, 0x2a, 0x24, 0xa9, 0x60, 0x13, 0x99, 0x89, 0x29, 0x37, 0xd0, 0xac, 0x80, 0xda, - 0x9a, 0x98, 0x89, 0x11, 0x88, 0x62, 0x82, 0x8b, 0x44, 0xa1, 0x1a, 0x14, 0xb9, 0x9a, 0x89, 0x76, - 0x02, 0xa9, 0x30, 0x92, 0xab, 0x20, 0x88, 0x30, 0xb1, 0x2a, 0x27, 0xdd, 0x38, 0x04, 0x89, 0x53, - 0x81, 0x8a, 0x80, 0x41, 0x25, 0xfb, 0x9a, 0x90, 0xcc, 0x8a, 0x98, 0x09, 0x02, 0x08, 0x44, 0x90, - 0x1a, 0x25, 0xa0, 0x30, 0x92, 0xbd, 0x09, 0x30, 0x57, 0x81, 0x8a, 0x32, 0xc0, 0x8a, 0x11, 0x09, - 0x22, 0xa8, 0x49, 0xb3, 0xcf, 0x41, 0x02, 0x38, 0x25, 0xb8, 0x09, 0x21, 0x63, 0x93, 0xce, 0x8a, - 0xc9, 0xbc, 0x8a, 0x99, 0x28, 0x01, 0x20, 0x25, 0xa8, 0x48, 0x24, 0x88, 0x33, 0xf8, 0xab, 0x10, - 0x52, 0x34, 0xa0, 0x29, 0x14, 0xca, 0x09, 0x01, 0x19, 0x23, 0xa9, 0x31, 0xf9, 0x8e, 0x32, 0x12, - 0x73, 0x82, 0xba, 0x20, 0x42, 0x33, 0xe0, 0xbc, 0xa9, 0xec, 0xab, 0x89, 0x99, 0x11, 0x11, 0x31, - 0x03, 0x99, 0x63, 0x13, 0x41, 0x03, 0xde, 0x0b, 0x21, 0x53, 0x02, 0x88, 0x31, 0x92, 0xad, 0x18, - 0x80, 0x30, 0x03, 0x88, 0xa1, 0xdf, 0x18, 0x22, 0x63, 0x25, 0xa0, 0x8c, 0x30, 0x34, 0x82, 0xeb, - 0x9a, 0xca, 0xbe, 0xaa, 0xa8, 0x88, 0x21, 0x21, 0x32, 0x90, 0x38, 0x25, 0x21, 0x37, 0xb1, 0xcf, - 0x08, 0x31, 0x33, 0x90, 0x38, 0x24, 0xc9, 0x8a, 0x00, 0x08, 0x32, 0x11, 0x00, 0xfb, 0x9d, 0x21, - 0x10, 0x66, 0x13, 0xba, 0x0b, 0x52, 0x24, 0xa0, 0x9d, 0x98, 0xfa, 0xbb, 0x99, 0x99, 0x18, 0x11, - 0x22, 0x03, 0x9a, 0x44, 0x81, 0x60, 0x25, 0xd9, 0xbb, 0x10, 0x44, 0x02, 0x99, 0x42, 0x82, 0xbb, - 0x18, 0x90, 0x28, 0x13, 0x21, 0xa3, 0xff, 0x19, 0x01, 0x29, 0x57, 0x81, 0xaa, 0x09, 0x43, 0x14, - 0xc9, 0x8a, 0x90, 0xce, 0xaa, 0x98, 0x8a, 0x10, 0x20, 0x42, 0xa0, 0x19, 0x34, 0x99, 0x72, 0x06, - 0xca, 0x9a, 0x20, 0x34, 0x91, 0x0a, 0x44, 0xa0, 0x8b, 0x00, 0x88, 0x20, 0x82, 0x41, 0xd1, 0xbd, - 0x21, 0xa1, 0x68, 0x27, 0x90, 0xab, 0x10, 0x44, 0x02, 0xbc, 0x19, 0xb0, 0xcf, 0x89, 0x99, 0x09, - 0x00, 0x21, 0x22, 0xb9, 0x48, 0x14, 0x8b, 0x56, 0x92, 0xad, 0x8a, 0x31, 0x25, 0x98, 0x2a, 0x25, - 0xa9, 0x8a, 0x01, 0x89, 0x21, 0x00, 0x33, 0xf9, 0x9e, 0x22, 0x99, 0x70, 0x24, 0xa9, 0x8b, 0x20, - 0x45, 0xa1, 0xac, 0x10, 0xd8, 0xac, 0x99, 0x99, 0x08, 0x10, 0x31, 0x04, 0xbb, 0x52, 0x93, 0x1a, - 0x57, 0xb0, 0xbb, 0x0a, 0x63, 0x13, 0xb9, 0x48, 0x14, 0xba, 0x19, 0x91, 0x08, 0x12, 0x18, 0x14, - 0xfc, 0x0a, 0x03, 0x99, 0x74, 0x03, 0xba, 0x0a, 0x41, 0x34, 0xd0, 0x9b, 0x11, 0xfa, 0x9b, 0x89, - 0x8a, 0x18, 0x00, 0x42, 0x92, 0x8c, 0x43, 0x90, 0x49, 0x17, 0xc8, 0x9b, 0x08, 0x34, 0x03, 0xab, - 0x62, 0x82, 0xba, 0x10, 0x88, 0x18, 0x02, 0x20, 0x84, 0xdf, 0x18, 0x82, 0x1a, 0x56, 0x81, 0xba, - 0x88, 0x43, 0x14, 0xd9, 0x0a, 0x81, 0xcc, 0x9b, 0x99, 0x99, 0x10, 0x20, 0x34, 0xb8, 0x1b, 0x36, - 0x99, 0x71, 0x13, 0xeb, 0x9a, 0x28, 0x44, 0x91, 0x8a, 0x43, 0x91, 0xab, 0x01, 0x88, 0x10, 0x01, - 0x42, 0xc1, 0xbf, 0x20, 0x81, 0x49, 0x37, 0x90, 0xab, 0x29, 0x54, 0x83, 0xdb, 0x19, 0xa0, 0xcd, - 0x99, 0x99, 0x09, 0x00, 0x21, 0x14, 0xb9, 0x38, 0x14, 0x89, 0x65, 0x92, 0xbc, 0x8b, 0x41, 0x25, - 0x98, 0x19, 0x24, 0xb0, 0x9a, 0x81, 0x08, 0x11, 0x20, 0x43, 0xfa, 0x9d, 0x21, 0x88, 0x71, 0x23, - 0xa8, 0xab, 0x48, 0x45, 0xa1, 0xbb, 0x18, 0xd9, 0xbd, 0x9a, 0x99, 0x88, 0x01, 0x42, 0x83, 0xaa, - 0x41, 0x83, 0x38, 0x57, 0xa0, 0xbc, 0x8a, 0x63, 0x03, 0xa8, 0x30, 0x14, 0xb9, 0x89, 0x08, 0x00, - 0x01, 0x32, 0x04, 0xcf, 0x8a, 0x02, 0x18, 0x56, 0x12, 0xa9, 0x9b, 0x62, 0x24, 0xb8, 0x9b, 0x88, - 0xec, 0xab, 0x9b, 0x8a, 0x88, 0x21, 0x34, 0xa1, 0x89, 0x43, 0x00, 0x54, 0x14, 0xc9, 0xbc, 0x19, - 0x45, 0x01, 0x89, 0x32, 0x82, 0x9a, 0x99, 0x09, 0x11, 0x10, 0x54, 0xb1, 0xbf, 0x08, 0x80, 0x61, - 0x35, 0x81, 0xaa, 0x0a, 0x64, 0x03, 0xba, 0x89, 0xba, 0xbf, 0xbb, 0xac, 0x09, 0x08, 0x40, 0x13, - 0xa8, 0x20, 0x02, 0x40, 0x37, 0x81, 0xdb, 0xbb, 0x30, 0x37, 0x80, 0x18, 0x23, 0x88, 0x89, 0xb9, - 0x29, 0x13, 0x28, 0x37, 0xea, 0x9b, 0x80, 0x09, 0x57, 0x13, 0x98, 0xa8, 0x18, 0x37, 0x91, 0xaa, - 0x98, 0xcd, 0xac, 0xca, 0xaa, 0x08, 0x08, 0x42, 0x82, 0x89, 0x22, 0x90, 0x72, 0x16, 0x99, 0xaa, - 0xaa, 0x62, 0x13, 0x88, 0x42, 0x92, 0x09, 0x81, 0xbb, 0x40, 0x81, 0x40, 0x85, 0xcc, 0x19, 0xa8, - 0x39, 0x77, 0x00, 0x09, 0x88, 0x20, 0x24, 0xa9, 0x89, 0xc0, 0xaf, 0x9a, 0xcb, 0x9a, 0x00, 0x19, - 0x43, 0x90, 0x29, 0x04, 0x8a, 0x65, 0x82, 0xab, 0x99, 0x09, 0x44, 0x92, 0x28, 0x26, 0xa8, 0x18, - 0x92, 0x9c, 0x31, 0x90, 0x51, 0xa1, 0x9f, 0x01, 0xb9, 0x70, 0x24, 0x98, 0x08, 0x00, 0x42, 0x83, - 0xbb, 0x20, 0xfa, 0xaf, 0x89, 0xbb, 0x8a, 0x00, 0x28, 0x14, 0xa9, 0x51, 0x91, 0x2a, 0x47, 0xa0, - 0xaa, 0x80, 0x28, 0x24, 0xa8, 0x71, 0x03, 0xaa, 0x30, 0xa1, 0x8c, 0x13, 0x88, 0x53, 0xd9, 0x0b, - 0x02, 0xbc, 0x74, 0x13, 0xaa, 0x10, 0x12, 0x43, 0xb0, 0x8c, 0x13, 0xfe, 0x9a, 0x98, 0xba, 0x09, - 0x80, 0x30, 0x83, 0x8b, 0x54, 0xb0, 0x48, 0x27, 0xb9, 0x8a, 0x00, 0x31, 0x83, 0x9b, 0x66, 0x92, - 0x9a, 0x31, 0xa8, 0x1a, 0x02, 0x18, 0x14, 0xdd, 0x18, 0xa2, 0x0c, 0x56, 0x91, 0x8a, 0x11, 0x22, - 0x03, 0xda, 0x2a, 0x93, 0xef, 0x89, 0xa8, 0x9a, 0x09, 0x80, 0x22, 0x90, 0x2a, 0x26, 0xb9, 0x71, - 0x04, 0xbb, 0x09, 0x21, 0x22, 0xb0, 0x2b, 0x77, 0x90, 0x0a, 0x11, 0x98, 0x08, 0x81, 0x20, 0xa1, - 0xae, 0x21, 0xc1, 0x3a, 0x57, 0x98, 0x0a, 0x21, 0x33, 0x91, 0xbd, 0x40, 0xc1, 0xbe, 0x89, 0xa8, - 0x9b, 0x88, 0x10, 0x22, 0xb9, 0x60, 0x04, 0x9a, 0x64, 0xa2, 0xbb, 0x29, 0x42, 0x12, 0xda, 0x48, - 0x25, 0xa9, 0x1a, 0x12, 0xa8, 0x00, 0x00, 0x22, 0xe9, 0x8c, 0x23, 0xca, 0x70, 0x14, 0xa9, 0x1a, - 0x43, 0x14, 0xb8, 0x9c, 0x32, 0xf9, 0xac, 0x88, 0xa9, 0x9a, 0x08, 0x20, 0x82, 0x9b, 0x54, 0x92, - 0x2a, 0x37, 0xc0, 0xab, 0x38, 0x25, 0x91, 0xbb, 0x72, 0x04, 0xaa, 0x28, 0x01, 0x88, 0x08, 0x10, - 0x82, 0xdc, 0x19, 0x03, 0x9b, 0x75, 0x02, 0xab, 0x29, 0x36, 0x03, 0xdb, 0x1a, 0x12, 0xfb, 0xab, - 0x88, 0x9a, 0x9a, 0x08, 0x22, 0xb8, 0x2a, 0x27, 0x90, 0x50, 0x14, 0xd9, 0x9b, 0x51, 0x23, 0xb8, - 0x8b, 0x55, 0x81, 0x9a, 0x28, 0x01, 0x90, 0x88, 0x22, 0xc1, 0xae, 0x21, 0x91, 0x29, 0x47, 0x91, - 0xbb, 0x50, 0x35, 0xa2, 0xbc, 0x28, 0x92, 0xbe, 0xab, 0x89, 0x9a, 0xaa, 0x28, 0x13, 0xbc, 0x50, - 0x14, 0x09, 0x73, 0x81, 0xcb, 0x0b, 0x73, 0x03, 0xc9, 0x19, 0x24, 0x90, 0x99, 0x10, 0x12, 0x90, - 0x1a, 0x33, 0xfa, 0x8c, 0x22, 0x98, 0x61, 0x23, 0xb9, 0x9c, 0x72, 0x25, 0xb0, 0xab, 0x30, 0xb8, - 0xbe, 0x9b, 0x8a, 0xa8, 0xaa, 0x40, 0x91, 0x9c, 0x62, 0x81, 0x20, 0x25, 0xb8, 0xbc, 0x1a, 0x47, - 0x82, 0xbb, 0x40, 0x13, 0x98, 0x89, 0x18, 0x33, 0xb8, 0x39, 0x05, 0xce, 0x18, 0x82, 0x19, 0x45, - 0x92, 0xaa, 0x8a, 0x75, 0x14, 0xc9, 0x0a, 0x01, 0xb9, 0xbb, 0xbb, 0x0a, 0xa8, 0x9c, 0x32, 0xe0, - 0x0a, 0x25, 0x88, 0x52, 0x83, 0xda, 0x9a, 0x38, 0x47, 0xa1, 0x9b, 0x32, 0x02, 0x89, 0x98, 0x28, - 0x25, 0xa9, 0x38, 0xc3, 0xaf, 0x21, 0x90, 0x40, 0x25, 0xa8, 0xaa, 0x18, 0x67, 0x02, 0xbb, 0x1a, - 0x91, 0xcb, 0xba, 0xac, 0x08, 0xb0, 0x0b, 0x23, 0xdc, 0x38, 0x13, 0x19, 0x47, 0xa1, 0xac, 0x89, - 0x51, 0x35, 0xb8, 0x0b, 0x33, 0x90, 0x18, 0xa8, 0x48, 0x15, 0xa9, 0x21, 0xe8, 0x8c, 0x22, 0x99, - 0x73, 0x03, 0xba, 0x89, 0x30, 0x77, 0x91, 0xaa, 0x08, 0xa8, 0xaa, 0xba, 0x9d, 0x10, 0xb8, 0x19, - 0x92, 0xae, 0x41, 0x81, 0x48, 0x16, 0xc8, 0x8a, 0x88, 0x53, 0x15, 0xaa, 0x29, 0x02, 0x89, 0x12, - 0xb9, 0x60, 0x03, 0x8a, 0x11, 0xec, 0x19, 0x02, 0x0a, 0x47, 0xa1, 0xaa, 0x00, 0x41, 0x26, 0xb0, - 0x9b, 0x80, 0xdb, 0x99, 0xc9, 0x9b, 0x11, 0xa9, 0x18, 0xd0, 0x8c, 0x33, 0xa0, 0x73, 0x06, 0xbb, - 0x89, 0x10, 0x45, 0x82, 0xaa, 0x21, 0x91, 0x1a, 0x04, 0xaa, 0x62, 0x82, 0x88, 0x91, 0xaf, 0x20, - 0x91, 0x49, 0x27, 0xa8, 0x9b, 0x11, 0x63, 0x23, 0xca, 0x8a, 0xa0, 0xae, 0x88, 0xc9, 0x0b, 0x11, - 0x99, 0x80, 0xda, 0x2a, 0x04, 0x09, 0x56, 0xa2, 0xbc, 0x08, 0x31, 0x35, 0x91, 0x0b, 0x22, 0xba, - 0x48, 0x84, 0x8b, 0x63, 0x81, 0x08, 0xd8, 0x9b, 0x22, 0x98, 0x72, 0x17, 0xaa, 0x0a, 0x21, 0x53, - 0x82, 0xab, 0x09, 0xfa, 0x9b, 0x80, 0xcb, 0x09, 0x02, 0x89, 0xb0, 0xad, 0x30, 0x92, 0x59, 0x37, - 0xc0, 0x9c, 0x18, 0x42, 0x13, 0x98, 0x28, 0x81, 0x9d, 0x41, 0x81, 0x0a, 0x43, 0x01, 0x90, 0xcd, - 0x1a, 0x02, 0x09, 0x57, 0x82, 0xcb, 0x19, 0x42, 0x23, 0xa0, 0x8b, 0xa8, 0xcf, 0x8a, 0x80, 0xbb, - 0x19, 0x11, 0x80, 0xfb, 0x9a, 0x22, 0x98, 0x71, 0x06, 0xb9, 0x9b, 0x31, 0x34, 0x83, 0x09, 0x32, - 0xe8, 0x8b, 0x43, 0x91, 0x09, 0x24, 0x12, 0xd8, 0xad, 0x20, 0x80, 0x49, 0x37, 0xb1, 0xac, 0x28, - 0x34, 0x03, 0xaa, 0x18, 0xf9, 0xad, 0x09, 0x90, 0xaa, 0x00, 0x21, 0xa0, 0xcd, 0x19, 0x01, 0x89, - 0x56, 0x82, 0xbc, 0x0b, 0x52, 0x23, 0x90, 0x38, 0x04, 0xeb, 0x19, 0x22, 0x90, 0x00, 0x42, 0x12, - 0xfb, 0x8b, 0x12, 0x98, 0x71, 0x15, 0xa9, 0x9b, 0x40, 0x43, 0x90, 0x8a, 0x11, 0xec, 0x9c, 0x08, - 0x90, 0x99, 0x18, 0x22, 0xd8, 0xac, 0x20, 0x90, 0x39, 0x37, 0xa0, 0xbd, 0x19, 0x44, 0x03, 0x8a, - 0x30, 0x05, 0xcb, 0x39, 0x02, 0x01, 0x09, 0x7d, 0x0b, 0x02, 0xcd, 0x08, 0x98, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x70, 0x77, 0x97, 0xbc, 0xaa, 0xab, 0x22, 0x90, 0xbb, 0xdc, 0xce, 0xcb, - 0xbc, 0x0a, 0x82, 0x09, 0x43, 0x12, 0x63, 0x12, 0x20, 0x46, 0x22, 0x45, 0x82, 0xdc, 0x9c, 0x73, - 0x24, 0x80, 0x99, 0xa9, 0x88, 0xeb, 0xcd, 0xab, 0x28, 0x65, 0x44, 0x23, 0xb8, 0xbd, 0x8b, 0x00, - 0x01, 0xa8, 0xa9, 0xb9, 0xaa, 0x99, 0x18, 0x81, 0xda, 0xcc, 0x99, 0x41, 0x23, 0x00, 0x10, 0x65, - 0x47, 0x23, 0x01, 0x99, 0x08, 0x42, 0x33, 0x01, 0x98, 0x08, 0x12, 0xc9, 0xec, 0xcd, 0xab, 0xa9, - 0xaa, 0x48, 0x47, 0x23, 0x98, 0xba, 0x89, 0x08, 0x80, 0xb9, 0x8a, 0x11, 0x01, 0x21, 0x24, 0xa0, - 0xfd, 0xcb, 0xaa, 0x89, 0x18, 0x91, 0xdb, 0x0a, 0x54, 0x25, 0x01, 0x88, 0x09, 0x52, 0x23, 0x98, - 0x9a, 0x10, 0x34, 0x03, 0xfd, 0xac, 0xaa, 0xca, 0xbd, 0x19, 0x46, 0x33, 0x81, 0xa9, 0xaa, 0xa9, - 0xa9, 0xba, 0x9a, 0x08, 0x02, 0x00, 0x81, 0xfb, 0xac, 0x99, 0x08, 0x40, 0x36, 0x03, 0xcb, 0x38, - 0x47, 0x34, 0x03, 0x80, 0x88, 0x42, 0x43, 0x02, 0xaa, 0x09, 0x43, 0x13, 0xb9, 0xcd, 0xda, 0xcd, - 0xbc, 0x89, 0x43, 0x24, 0x02, 0x00, 0x80, 0x98, 0xaa, 0xdb, 0xab, 0x09, 0x10, 0x01, 0x88, 0xdb, - 0xac, 0xbb, 0xad, 0x0a, 0x43, 0x14, 0xb9, 0x0b, 0x47, 0x34, 0x23, 0x02, 0x00, 0x31, 0x25, 0xa0, - 0xbd, 0x0a, 0x22, 0x11, 0x11, 0x82, 0xfa, 0xff, 0xbb, 0x9a, 0x11, 0x32, 0x21, 0x21, 0x23, 0x11, - 0xa8, 0xdb, 0xab, 0x19, 0x54, 0x33, 0x13, 0x01, 0xca, 0xcc, 0xab, 0x1a, 0x53, 0x82, 0xcb, 0x0a, - 0x55, 0x35, 0x33, 0x12, 0x11, 0x43, 0x13, 0xd9, 0xbd, 0x9a, 0x00, 0x88, 0x89, 0x10, 0xc8, 0xef, - 0xbc, 0xaa, 0x88, 0x20, 0x10, 0x21, 0x33, 0x22, 0x01, 0xb8, 0xbd, 0x8b, 0x51, 0x53, 0x22, 0x32, - 0x82, 0xdc, 0xac, 0x09, 0x00, 0x88, 0xcb, 0xbc, 0x48, 0x46, 0x33, 0x11, 0x31, 0x44, 0x13, 0xb0, - 0xcd, 0x9a, 0x88, 0x88, 0x28, 0x53, 0x91, 0xfb, 0xcc, 0xab, 0x9a, 0x08, 0x11, 0x22, 0x53, 0x23, - 0x02, 0x98, 0xcb, 0x9a, 0x20, 0x23, 0x54, 0x36, 0x03, 0xb9, 0xad, 0x99, 0x08, 0x01, 0xc9, 0xbd, - 0x19, 0x45, 0x23, 0x02, 0x52, 0x34, 0x24, 0x90, 0xba, 0x9a, 0xba, 0xbb, 0x29, 0x55, 0x03, 0xea, - 0xdc, 0xbb, 0xab, 0x8a, 0x88, 0x10, 0x21, 0x42, 0x12, 0xa0, 0xad, 0xab, 0xaa, 0x19, 0x65, 0x44, - 0x22, 0x90, 0xba, 0x9a, 0x10, 0x11, 0xb8, 0xbf, 0x09, 0x45, 0x23, 0x01, 0x62, 0x35, 0x32, 0x11, - 0x88, 0x98, 0xaa, 0xbc, 0x18, 0x54, 0x33, 0xa0, 0xce, 0xbc, 0xbb, 0xab, 0x89, 0x88, 0x10, 0x54, - 0x12, 0x90, 0x98, 0xba, 0xbd, 0x8b, 0x41, 0x46, 0x24, 0x01, 0x99, 0x8a, 0x21, 0x13, 0xb0, 0xcd, - 0x19, 0x44, 0x22, 0x10, 0x52, 0x45, 0x32, 0x11, 0x01, 0x90, 0xbb, 0xbd, 0x9b, 0x30, 0x25, 0x91, - 0xcd, 0xbd, 0xbd, 0xba, 0xa9, 0x9a, 0x08, 0x32, 0x22, 0x22, 0x01, 0xc9, 0xbf, 0x9c, 0x08, 0x53, - 0x44, 0x11, 0xa8, 0x8a, 0x21, 0x13, 0xc9, 0xab, 0x19, 0x44, 0x13, 0x11, 0x73, 0x35, 0x33, 0x33, - 0x33, 0x02, 0xda, 0xcc, 0x9a, 0x19, 0x43, 0x12, 0xca, 0xce, 0xcb, 0xca, 0xaa, 0x9a, 0x89, 0x21, - 0x32, 0x43, 0x32, 0x90, 0xdc, 0xbc, 0x89, 0x31, 0x46, 0x12, 0x99, 0x0a, 0x21, 0x03, 0xc9, 0xac, - 0x18, 0x22, 0x12, 0x21, 0x45, 0x36, 0x34, 0x42, 0x43, 0x02, 0xa0, 0xba, 0xac, 0x8a, 0x42, 0x23, - 0xb9, 0xbf, 0xbd, 0xbc, 0xad, 0xaa, 0x99, 0x08, 0x21, 0x43, 0x43, 0x01, 0xb8, 0xcd, 0xab, 0x28, - 0x35, 0x13, 0x98, 0x9a, 0x42, 0x03, 0xd9, 0xaa, 0x88, 0x01, 0x81, 0x20, 0x45, 0x45, 0x43, 0x43, - 0x44, 0x22, 0x81, 0x98, 0xba, 0x89, 0x41, 0x33, 0x90, 0xdb, 0xcc, 0xbd, 0xbd, 0xab, 0xaa, 0x99, - 0x20, 0x43, 0x53, 0x23, 0x90, 0xec, 0xaa, 0x19, 0x42, 0x02, 0x90, 0x08, 0x32, 0x13, 0xb9, 0xad, - 0x18, 0x00, 0xba, 0x18, 0x63, 0x53, 0x44, 0x44, 0x53, 0x33, 0x22, 0x98, 0xab, 0x8a, 0x20, 0x43, - 0x02, 0xa9, 0xdc, 0xdd, 0xbc, 0xac, 0xab, 0xaa, 0x08, 0x21, 0x44, 0x34, 0x02, 0xda, 0xac, 0x09, - 0x12, 0x02, 0x80, 0x00, 0x32, 0x04, 0xa9, 0x9b, 0x11, 0x80, 0xaa, 0x09, 0x11, 0x73, 0x46, 0x44, - 0x53, 0x35, 0x22, 0x80, 0xa9, 0x9a, 0x88, 0x10, 0x22, 0x82, 0xea, 0xcd, 0xcd, 0xcb, 0xab, 0xab, - 0x99, 0x09, 0x52, 0x35, 0x23, 0xb9, 0xbc, 0x89, 0x21, 0x01, 0x00, 0x31, 0x34, 0x22, 0x90, 0x88, - 0x00, 0x80, 0x9a, 0xba, 0x8b, 0x54, 0x53, 0x46, 0x55, 0x44, 0x23, 0x01, 0x98, 0x98, 0x99, 0x18, - 0x21, 0x12, 0x80, 0xdc, 0xed, 0xbc, 0xbb, 0xbb, 0xbc, 0x9a, 0x41, 0x45, 0x23, 0x90, 0xbb, 0x8a, - 0x01, 0x88, 0x88, 0x42, 0x33, 0x13, 0x21, 0x98, 0x09, 0x01, 0xca, 0xbc, 0x9a, 0x98, 0x00, 0x62, - 0x77, 0x37, 0x32, 0x12, 0x80, 0x99, 0x99, 0x9a, 0x11, 0x12, 0x12, 0x90, 0xff, 0xbd, 0xba, 0xcb, - 0xbc, 0xab, 0x29, 0x54, 0x23, 0x81, 0xa9, 0x99, 0x90, 0x99, 0x09, 0x31, 0x53, 0x23, 0x12, 0x11, - 0x00, 0x11, 0x92, 0xdb, 0x19, 0x92, 0xcf, 0x0a, 0x73, 0x46, 0x43, 0x22, 0x11, 0x98, 0xa8, 0x89, - 0x89, 0x20, 0x43, 0x82, 0xdd, 0xbd, 0xbb, 0xcc, 0xdc, 0xab, 0x09, 0x42, 0x23, 0x02, 0x00, 0x89, - 0x89, 0x9a, 0xaa, 0x30, 0x34, 0x33, 0x34, 0x12, 0x42, 0x33, 0x80, 0x09, 0x32, 0x83, 0xdf, 0xab, - 0x61, 0x45, 0x35, 0x24, 0x03, 0x00, 0x08, 0xa9, 0x9a, 0x18, 0x34, 0x02, 0xfb, 0xcb, 0xaa, 0xeb, - 0xcd, 0xbc, 0x89, 0x10, 0x32, 0x22, 0x01, 0x80, 0x98, 0xaa, 0xaa, 0x8a, 0x52, 0x32, 0x11, 0x43, - 0x24, 0x22, 0x80, 0x08, 0x44, 0x83, 0xfb, 0xac, 0x08, 0x52, 0x56, 0x33, 0x22, 0x12, 0x10, 0xa9, - 0xbb, 0x19, 0x34, 0x03, 0xcc, 0xac, 0x89, 0xfb, 0xce, 0xbc, 0xaa, 0x18, 0x11, 0x22, 0x22, 0x02, - 0x08, 0x98, 0xba, 0x9a, 0x32, 0x23, 0x32, 0x65, 0x43, 0x02, 0x88, 0x31, 0x34, 0x23, 0xb1, 0xcf, - 0x9b, 0x20, 0x47, 0x34, 0x42, 0x22, 0x11, 0x98, 0xbb, 0x0a, 0x53, 0x81, 0xbc, 0x8a, 0x80, 0xd9, - 0xff, 0xbb, 0x9c, 0x8a, 0x00, 0x21, 0x12, 0x12, 0x11, 0x88, 0x99, 0x9a, 0x28, 0x01, 0x18, 0x65, - 0x23, 0x11, 0x10, 0x20, 0x53, 0x34, 0x02, 0xdc, 0xac, 0x28, 0x53, 0x63, 0x33, 0x34, 0x23, 0x90, - 0xbb, 0x19, 0x33, 0x92, 0xcd, 0x8b, 0x22, 0xb0, 0xff, 0xbd, 0xbc, 0xa9, 0x88, 0x10, 0x11, 0x23, - 0x12, 0x81, 0x99, 0x09, 0x88, 0x88, 0x20, 0x54, 0x34, 0x12, 0x10, 0x10, 0x42, 0x46, 0x02, 0xb9, - 0xbd, 0x89, 0x32, 0x35, 0x46, 0x35, 0x13, 0x80, 0x99, 0x09, 0x32, 0x90, 0xcc, 0x89, 0x21, 0x82, - 0xfc, 0xce, 0xcb, 0xaa, 0x8a, 0x88, 0x10, 0x32, 0x23, 0x01, 0x08, 0x80, 0x88, 0x88, 0x21, 0x45, - 0x34, 0x33, 0x01, 0x09, 0x42, 0x45, 0x23, 0xc0, 0xbc, 0x8a, 0x88, 0x30, 0x77, 0x34, 0x14, 0x81, - 0x88, 0x08, 0x11, 0x90, 0xbb, 0x9c, 0x30, 0x13, 0xd9, 0xef, 0xcb, 0xbb, 0xab, 0xa9, 0x00, 0x32, - 0x33, 0x12, 0x21, 0x11, 0x88, 0x08, 0x22, 0x64, 0x35, 0x33, 0x12, 0x88, 0x30, 0x37, 0x12, 0xa0, - 0xca, 0xaa, 0xca, 0xac, 0x71, 0x46, 0x23, 0x01, 0x88, 0x10, 0x11, 0x91, 0xca, 0xab, 0x20, 0x35, - 0x91, 0xde, 0xcc, 0xac, 0xbb, 0xab, 0x09, 0x21, 0x22, 0x32, 0x21, 0x22, 0x01, 0x88, 0x01, 0x31, - 0x57, 0x34, 0x01, 0x88, 0x11, 0x34, 0x23, 0x80, 0x88, 0xa0, 0xef, 0xbb, 0x28, 0x57, 0x23, 0x02, - 0x00, 0x11, 0x23, 0x02, 0xc9, 0xac, 0x29, 0x53, 0x02, 0xca, 0xce, 0xcc, 0xcb, 0x9b, 0x9a, 0x08, - 0x11, 0x11, 0x22, 0x22, 0x21, 0x01, 0x90, 0x20, 0x65, 0x33, 0x03, 0x88, 0x30, 0x36, 0x01, 0x21, - 0x33, 0x91, 0xdf, 0xad, 0x0a, 0x53, 0x24, 0x22, 0x00, 0x21, 0x43, 0x12, 0xa8, 0xbc, 0x1a, 0x43, - 0x12, 0x91, 0xed, 0xcd, 0xcc, 0xba, 0x9a, 0x99, 0x08, 0x01, 0x21, 0x11, 0x23, 0x82, 0x99, 0x88, - 0x73, 0x34, 0x01, 0x00, 0x31, 0x24, 0x01, 0x31, 0x47, 0x02, 0xea, 0xbc, 0x9a, 0x31, 0x35, 0x23, - 0x12, 0x32, 0x46, 0x12, 0x98, 0x9a, 0x8a, 0x30, 0x34, 0x22, 0xb1, 0xef, 0xbd, 0xac, 0xbb, 0xaa, - 0x89, 0x00, 0x11, 0x31, 0x43, 0x03, 0x99, 0x19, 0x44, 0x24, 0x12, 0x11, 0x53, 0x23, 0x80, 0x40, - 0x46, 0x23, 0xc8, 0xbd, 0xab, 0x18, 0x53, 0x23, 0x11, 0x52, 0x34, 0x13, 0x81, 0xaa, 0xa9, 0x09, - 0x52, 0x34, 0x02, 0xea, 0xdd, 0xbc, 0xac, 0xba, 0xa9, 0x88, 0x08, 0x21, 0x24, 0x02, 0x88, 0x19, - 0x42, 0x33, 0x11, 0x63, 0x43, 0x13, 0x80, 0x30, 0x57, 0x23, 0x90, 0xdc, 0xab, 0x08, 0x21, 0x13, - 0x12, 0x44, 0x35, 0x14, 0x11, 0x88, 0xa9, 0x8a, 0x21, 0x35, 0x14, 0x91, 0xec, 0xdc, 0xbb, 0xac, - 0x9a, 0x9a, 0x89, 0x10, 0x32, 0x02, 0xa8, 0x18, 0x33, 0x03, 0x10, 0x64, 0x35, 0x12, 0x88, 0x18, - 0x74, 0x34, 0x82, 0xdb, 0xbb, 0x8a, 0x20, 0x11, 0x10, 0x54, 0x44, 0x33, 0x23, 0x81, 0xa8, 0xab, - 0x29, 0x35, 0x34, 0x22, 0xc0, 0xef, 0xbb, 0xac, 0xab, 0xbb, 0x9b, 0x18, 0x21, 0x02, 0x88, 0x10, - 0x34, 0x00, 0x18, 0x55, 0x34, 0x13, 0x88, 0x09, 0x74, 0x25, 0x12, 0xb9, 0xac, 0x8a, 0x88, 0x08, - 0x10, 0x52, 0x54, 0x43, 0x33, 0x12, 0x98, 0xaa, 0x88, 0x41, 0x44, 0x33, 0x01, 0xec, 0xbd, 0xbb, - 0xbd, 0xcb, 0xaa, 0x88, 0x01, 0x80, 0x00, 0x20, 0x22, 0x01, 0x08, 0x72, 0x35, 0x12, 0x90, 0x89, - 0x71, 0x35, 0x13, 0x98, 0xbb, 0xbb, 0x9a, 0xaa, 0x89, 0x42, 0x64, 0x54, 0x33, 0x22, 0x00, 0xa9, - 0x9b, 0x18, 0x73, 0x34, 0x02, 0xb8, 0xbe, 0xbc, 0xcc, 0xbc, 0xbb, 0x89, 0x88, 0x88, 0x00, 0x11, - 0x22, 0x91, 0x89, 0x62, 0x36, 0x14, 0x98, 0x9a, 0x41, 0x36, 0x33, 0x80, 0xaa, 0xba, 0xbb, 0xac, - 0x9a, 0x8a, 0x72, 0x54, 0x34, 0x33, 0x12, 0x90, 0xbb, 0x8a, 0x63, 0x44, 0x12, 0x90, 0xa9, 0xdb, - 0xdd, 0xcb, 0xab, 0x9a, 0x99, 0x99, 0x08, 0x11, 0x22, 0x00, 0x9a, 0x68, 0x36, 0x14, 0x90, 0x99, - 0x30, 0x36, 0x24, 0x12, 0x98, 0xaa, 0xb9, 0xbb, 0xbc, 0xac, 0x18, 0x46, 0x35, 0x34, 0x22, 0x01, - 0xaa, 0xab, 0x30, 0x37, 0x13, 0x12, 0x00, 0xb9, 0xef, 0xdb, 0xab, 0xaa, 0xaa, 0xa9, 0x89, 0x28, - 0x21, 0x90, 0xaa, 0x28, 0x67, 0x13, 0x91, 0x9a, 0x10, 0x44, 0x34, 0x22, 0x01, 0x99, 0x99, 0xba, - 0xdc, 0xab, 0x0a, 0x51, 0x45, 0x34, 0x34, 0x12, 0xa9, 0xaa, 0x18, 0x44, 0x32, 0x22, 0x24, 0x82, - 0xfb, 0xdc, 0xbb, 0xac, 0xaa, 0xaa, 0x9a, 0x10, 0x21, 0x90, 0xac, 0x19, 0x55, 0x33, 0x81, 0x99, - 0x09, 0x53, 0x44, 0x33, 0x12, 0x08, 0x08, 0xa9, 0xbd, 0xbd, 0x9b, 0x18, 0x52, 0x46, 0x34, 0x12, - 0x90, 0x9a, 0x19, 0x22, 0x23, 0x44, 0x53, 0x22, 0xa8, 0xce, 0xcc, 0xba, 0xcb, 0xba, 0xab, 0x18, - 0x11, 0x90, 0xbb, 0x09, 0x54, 0x34, 0x12, 0x98, 0x99, 0x31, 0x46, 0x33, 0x23, 0x02, 0x01, 0xa1, - 0xec, 0xab, 0xbb, 0xbb, 0x29, 0x57, 0x35, 0x23, 0x80, 0x98, 0x09, 0x18, 0x12, 0x32, 0x47, 0x24, - 0x81, 0xca, 0xcc, 0xbb, 0xcc, 0xcb, 0xaa, 0x88, 0x11, 0x90, 0xaa, 0x8a, 0x31, 0x45, 0x13, 0x80, - 0x9a, 0x10, 0x54, 0x34, 0x32, 0x32, 0x23, 0x80, 0xb9, 0xbd, 0xbc, 0xcd, 0x8b, 0x61, 0x44, 0x23, - 0x01, 0x80, 0x00, 0x08, 0x10, 0x31, 0x56, 0x43, 0x12, 0xa8, 0xcb, 0xdb, 0xcc, 0xdb, 0x9b, 0x89, - 0x80, 0x80, 0xa9, 0xaa, 0x10, 0x42, 0x24, 0x81, 0xaa, 0x19, 0x53, 0x43, 0x53, 0x23, 0x23, 0x01, - 0x98, 0x88, 0xdc, 0xcd, 0xaa, 0x28, 0x36, 0x34, 0x12, 0x02, 0x01, 0x00, 0x08, 0x28, 0x74, 0x44, - 0x12, 0x80, 0x99, 0xb9, 0xde, 0xbc, 0xcb, 0x99, 0x88, 0x90, 0xa9, 0x9a, 0x89, 0x31, 0x24, 0x01, - 0x99, 0x89, 0x52, 0x43, 0x53, 0x35, 0x22, 0x11, 0x11, 0x01, 0xb8, 0xdf, 0xbb, 0x0a, 0x52, 0x24, - 0x23, 0x22, 0x12, 0x00, 0x99, 0x0a, 0x73, 0x46, 0x12, 0x01, 0x01, 0x98, 0xdc, 0xcd, 0xbb, 0x9b, - 0x99, 0x88, 0xb9, 0xcb, 0x8a, 0x21, 0x33, 0x03, 0xa9, 0x08, 0x30, 0x63, 0x45, 0x44, 0x22, 0x02, - 0x22, 0x33, 0x92, 0xdd, 0xbc, 0x9b, 0x31, 0x44, 0x24, 0x33, 0x33, 0x03, 0xb8, 0x8a, 0x72, 0x44, - 0x23, 0x32, 0x32, 0x02, 0xfa, 0xcd, 0xac, 0xbb, 0x99, 0x98, 0xb9, 0xbc, 0x9b, 0x18, 0x21, 0x00, - 0x80, 0x98, 0x8a, 0x30, 0x66, 0x34, 0x14, 0x11, 0x22, 0x34, 0x02, 0xda, 0xbd, 0xbb, 0x0a, 0x42, - 0x32, 0x54, 0x24, 0x12, 0x98, 0x9a, 0x20, 0x44, 0x33, 0x44, 0x33, 0x24, 0x90, 0xdd, 0xbc, 0xbc, - 0xa9, 0x98, 0xa9, 0xcc, 0x9a, 0x89, 0x00, 0x00, 0x01, 0x80, 0x99, 0x19, 0x54, 0x44, 0x23, 0x21, - 0x42, 0x44, 0x22, 0xa0, 0xeb, 0xba, 0x89, 0x08, 0x31, 0x45, 0x45, 0x12, 0x80, 0x89, 0x08, 0x22, - 0x42, 0x43, 0x35, 0x34, 0x02, 0xb9, 0xcf, 0xac, 0x9a, 0x99, 0xaa, 0xbb, 0xbc, 0x8a, 0x89, 0x08, - 0x11, 0x81, 0xba, 0x8b, 0x73, 0x34, 0x24, 0x12, 0x42, 0x44, 0x34, 0x80, 0xaa, 0xbc, 0xab, 0xaa, - 0x89, 0x64, 0x35, 0x14, 0x01, 0x89, 0x00, 0x01, 0x12, 0x63, 0x53, 0x34, 0x24, 0x91, 0xdb, 0xbc, - 0xbb, 0x9a, 0xab, 0xcc, 0xba, 0xab, 0xa9, 0x88, 0x11, 0x81, 0xcb, 0x9b, 0x31, 0x46, 0x23, 0x22, - 0x52, 0x45, 0x24, 0x02, 0x98, 0xa9, 0xca, 0xcb, 0x8a, 0x30, 0x37, 0x34, 0x01, 0x00, 0x80, 0x11, - 0x11, 0x21, 0x64, 0x55, 0x33, 0x02, 0xc9, 0xcb, 0xbb, 0xab, 0xbb, 0xbc, 0xbc, 0xcb, 0xaa, 0x89, - 0x18, 0x80, 0xaa, 0xac, 0x29, 0x34, 0x24, 0x11, 0x52, 0x46, 0x34, 0x12, 0x80, 0x88, 0xba, 0xcd, - 0xab, 0x18, 0x44, 0x43, 0x12, 0x01, 0x10, 0x11, 0x11, 0x08, 0x61, 0x56, 0x34, 0x13, 0x90, 0xcb, - 0xcb, 0xba, 0xac, 0xba, 0xcb, 0xbc, 0xba, 0x9a, 0x08, 0x80, 0xb9, 0xbb, 0x1a, 0x54, 0x12, 0x80, - 0x41, 0x46, 0x35, 0x22, 0x11, 0x11, 0xa8, 0xdd, 0xab, 0x89, 0x31, 0x53, 0x23, 0x12, 0x11, 0x22, - 0x81, 0xb9, 0x39, 0x77, 0x27, 0x13, 0x01, 0x99, 0xba, 0xac, 0xbb, 0xcb, 0xca, 0xbc, 0xac, 0x9a, - 0x89, 0x88, 0xa8, 0xbb, 0x1a, 0x43, 0x12, 0x99, 0x30, 0x67, 0x43, 0x32, 0x43, 0x22, 0x81, 0xda, - 0xbc, 0x9a, 0x18, 0x42, 0x32, 0x23, 0x42, 0x33, 0x02, 0xda, 0x8b, 0x73, 0x37, 0x33, 0x22, 0x88, - 0xba, 0xcb, 0xac, 0xbb, 0xdb, 0xbc, 0xbc, 0xbb, 0x89, 0x88, 0xaa, 0xac, 0x89, 0x33, 0x81, 0xba, - 0x28, 0x47, 0x34, 0x34, 0x34, 0x34, 0x12, 0xb0, 0xcd, 0xbb, 0x89, 0x11, 0x23, 0x33, 0x35, 0x35, - 0x03, 0xb9, 0xbb, 0x60, 0x55, 0x43, 0x22, 0x02, 0x98, 0xba, 0xcb, 0xba, 0xcb, 0xbd, 0xae, 0xab, - 0x99, 0x99, 0xb9, 0xac, 0x89, 0x11, 0x91, 0xa9, 0x19, 0x53, 0x44, 0x43, 0x44, 0x34, 0x23, 0x91, - 0xda, 0xbb, 0x9a, 0x10, 0x11, 0x22, 0x55, 0x34, 0x23, 0x98, 0xab, 0x29, 0x55, 0x44, 0x34, 0x12, - 0x01, 0x99, 0xab, 0xbb, 0xca, 0xdc, 0xcc, 0xbb, 0xa9, 0xa8, 0xbb, 0xbc, 0x99, 0x10, 0x88, 0x9a, - 0x89, 0x32, 0x35, 0x53, 0x45, 0x44, 0x33, 0x12, 0xa9, 0xbc, 0x9b, 0x88, 0x80, 0x19, 0x73, 0x45, - 0x22, 0x80, 0xa9, 0x9a, 0x41, 0x45, 0x44, 0x33, 0x11, 0x80, 0xa9, 0x9a, 0xa9, 0xdc, 0xbe, 0xbb, - 0xaa, 0xa9, 0xbc, 0xbb, 0x9a, 0x88, 0x88, 0xaa, 0x8a, 0x21, 0x22, 0x42, 0x57, 0x54, 0x43, 0x12, - 0x90, 0xaa, 0x9b, 0x88, 0xb9, 0x9b, 0x50, 0x55, 0x23, 0x02, 0xa9, 0xab, 0x19, 0x55, 0x45, 0x24, - 0x23, 0x81, 0x88, 0x88, 0x98, 0xea, 0xcc, 0xbb, 0xab, 0xaa, 0xdb, 0xab, 0x9b, 0x99, 0x99, 0x9a, - 0x8a, 0x08, 0x11, 0x08, 0x72, 0x47, 0x44, 0x23, 0x00, 0x99, 0x98, 0x88, 0xa9, 0xac, 0x19, 0x54, - 0x34, 0x22, 0xa0, 0xbb, 0x9b, 0x41, 0x47, 0x35, 0x24, 0x02, 0x00, 0x00, 0x81, 0xb9, 0xbf, 0xac, - 0xab, 0xaa, 0xdb, 0xba, 0xaa, 0xa9, 0xaa, 0xa9, 0x9a, 0x88, 0x01, 0xb8, 0x8b, 0x77, 0x45, 0x23, - 0x11, 0x88, 0x88, 0x90, 0xa9, 0xbc, 0x8a, 0x52, 0x35, 0x24, 0x81, 0xa9, 0xbb, 0x0a, 0x73, 0x37, - 0x24, 0x12, 0x01, 0x21, 0x12, 0xa8, 0xcd, 0xcb, 0xab, 0xbb, 0xbc, 0xcb, 0xaa, 0xba, 0xba, 0xba, - 0xaa, 0x09, 0x01, 0xc9, 0xad, 0x61, 0x46, 0x33, 0x12, 0x11, 0x00, 0x80, 0xb9, 0xdc, 0xaa, 0x20, - 0x44, 0x33, 0x13, 0x90, 0xbd, 0xac, 0x20, 0x47, 0x24, 0x13, 0x12, 0x32, 0x24, 0x80, 0xba, 0xbd, - 0xcb, 0xcb, 0xcb, 0xbb, 0xbb, 0xab, 0xcb, 0xac, 0xaa, 0x88, 0x01, 0xb8, 0xbd, 0x29, 0x47, 0x34, - 0x23, 0x22, 0x12, 0x02, 0xa8, 0xcc, 0xbb, 0x08, 0x52, 0x53, 0x24, 0x02, 0xc9, 0xcb, 0x09, 0x62, - 0x34, 0x22, 0x22, 0x34, 0x24, 0x01, 0xa8, 0xca, 0xdb, 0xbb, 0xcc, 0xbb, 0xac, 0xaa, 0xba, 0xbc, - 0xaa, 0x09, 0x11, 0xb8, 0xbe, 0x89, 0x62, 0x34, 0x24, 0x23, 0x23, 0x22, 0x81, 0xca, 0xbb, 0xaa, - 0x18, 0x55, 0x44, 0x13, 0xb8, 0xbd, 0x9b, 0x31, 0x45, 0x32, 0x42, 0x43, 0x34, 0x22, 0x00, 0xa9, - 0xca, 0xdb, 0xdb, 0xbb, 0xac, 0xaa, 0xba, 0xbd, 0x9b, 0x09, 0x01, 0xa8, 0xcc, 0xaa, 0x28, 0x44, - 0x34, 0x34, 0x43, 0x23, 0x11, 0x98, 0xb9, 0xbb, 0xab, 0x60, 0x46, 0x23, 0x91, 0xcc, 0xaa, 0x10, - 0x33, 0x43, 0x34, 0x44, 0x34, 0x33, 0x11, 0x80, 0xa9, 0xdb, 0xcc, 0xbc, 0xbb, 0xab, 0xdb, 0xbc, - 0xab, 0x88, 0x00, 0xa0, 0xca, 0xac, 0x09, 0x31, 0x34, 0x35, 0x45, 0x32, 0x21, 0x00, 0x90, 0xca, - 0xbb, 0x09, 0x65, 0x43, 0x81, 0xb9, 0x9c, 0x09, 0x11, 0x22, 0x44, 0x44, 0x53, 0x33, 0x12, 0x01, - 0x00, 0xa8, 0xdc, 0xbc, 0xbb, 0xbb, 0xeb, 0xbc, 0xac, 0x99, 0x80, 0x88, 0xb9, 0xbb, 0x9a, 0x18, - 0x31, 0x55, 0x35, 0x24, 0x23, 0x23, 0x11, 0xb9, 0xcc, 0x8a, 0x72, 0x34, 0x02, 0xa8, 0xaa, 0x89, - 0x00, 0x20, 0x52, 0x45, 0x44, 0x33, 0x23, 0x12, 0x12, 0x81, 0xdb, 0xbd, 0xac, 0xbb, 0xdb, 0xbc, - 0xbc, 0xaa, 0x88, 0x98, 0xa9, 0xbb, 0xab, 0xaa, 0x18, 0x73, 0x44, 0x43, 0x33, 0x43, 0x33, 0xa0, - 0xdc, 0x9a, 0x21, 0x35, 0x23, 0x90, 0xba, 0x9a, 0x89, 0x89, 0x28, 0x57, 0x35, 0x25, 0x22, 0x22, - 0x22, 0x02, 0xb8, 0xcd, 0xba, 0xbb, 0xcc, 0xdc, 0xbb, 0xab, 0x99, 0x98, 0xaa, 0xaa, 0xbb, 0xac, - 0x8a, 0x38, 0x45, 0x34, 0x34, 0x45, 0x23, 0x82, 0xca, 0x9b, 0x18, 0x34, 0x24, 0x01, 0x99, 0x89, - 0x98, 0xa8, 0x8a, 0x73, 0x47, 0x33, 0x23, 0x34, 0x33, 0x23, 0x90, 0xda, 0xab, 0xab, 0xcc, 0xdd, - 0xbb, 0xac, 0x99, 0x98, 0x99, 0xa9, 0xb9, 0xdb, 0xaa, 0x08, 0x31, 0x42, 0x63, 0x54, 0x24, 0x02, - 0xa8, 0xbb, 0x0a, 0x41, 0x33, 0x02, 0x80, 0x89, 0x88, 0xcb, 0xac, 0x40, 0x46, 0x43, 0x43, 0x43, - 0x43, 0x33, 0x01, 0xb8, 0xaa, 0xa9, 0xeb, 0xcd, 0xbc, 0xac, 0x9a, 0x99, 0x99, 0x98, 0xa9, 0xcb, - 0xac, 0x09, 0x00, 0x08, 0x40, 0x47, 0x44, 0x12, 0x98, 0xaa, 0x8a, 0x21, 0x33, 0x14, 0x11, 0x11, - 0x01, 0xb9, 0xad, 0x19, 0x45, 0x43, 0x53, 0x53, 0x53, 0x43, 0x11, 0x88, 0x89, 0x89, 0xb9, 0xcd, - 0xbd, 0xbb, 0xbb, 0xab, 0x9a, 0x99, 0xa9, 0xcc, 0xac, 0x99, 0x88, 0xaa, 0x19, 0x57, 0x44, 0x23, - 0x01, 0xaa, 0x9b, 0x10, 0x22, 0x32, 0x32, 0x24, 0x02, 0xb9, 0xbe, 0x9b, 0x31, 0x34, 0x44, 0x45, - 0x36, 0x34, 0x22, 0x00, 0x89, 0x80, 0xa8, 0xdc, 0xcc, 0xbb, 0xcb, 0xba, 0x99, 0x89, 0x98, 0xcb, - 0xab, 0x9a, 0xa8, 0xcc, 0x9a, 0x62, 0x46, 0x33, 0x02, 0xa8, 0x9a, 0x18, 0x11, 0x21, 0x53, 0x33, - 0x23, 0x81, 0xcc, 0xab, 0x00, 0x11, 0x21, 0x66, 0x55, 0x43, 0x23, 0x11, 0x00, 0x00, 0xa8, 0xda, - 0xbc, 0xbc, 0xbd, 0xcb, 0x8a, 0x89, 0x88, 0xaa, 0xab, 0x89, 0xa9, 0xcd, 0xac, 0x09, 0x45, 0x25, - 0x13, 0x88, 0x99, 0x88, 0x08, 0x10, 0x32, 0x45, 0x22, 0x80, 0xb9, 0xab, 0x89, 0x90, 0xac, 0x69, - 0x57, 0x44, 0x32, 0x12, 0x11, 0x11, 0x80, 0xba, 0xdb, 0xcc, 0xbc, 0xbc, 0xaa, 0x88, 0x99, 0xab, - 0x9b, 0x89, 0x90, 0xfb, 0xbd, 0x8b, 0x51, 0x44, 0x22, 0x11, 0x88, 0x88, 0x80, 0x88, 0x30, 0x54, - 0x43, 0x01, 0x90, 0x8a, 0x08, 0xa8, 0xcc, 0x0b, 0x75, 0x34, 0x34, 0x32, 0x22, 0x22, 0x00, 0x98, - 0xbb, 0xdd, 0xdc, 0xbb, 0xaa, 0x9a, 0xa9, 0xbb, 0xab, 0x0a, 0x10, 0xfa, 0xcd, 0x9b, 0x28, 0x34, - 0x24, 0x22, 0x00, 0x00, 0x98, 0x99, 0x19, 0x73, 0x34, 0x13, 0x08, 0x88, 0x11, 0xa1, 0xdd, 0xab, - 0x51, 0x45, 0x34, 0x33, 0x43, 0x22, 0x11, 0x00, 0x88, 0xda, 0xdd, 0xcb, 0xba, 0x9a, 0x9a, 0xbb, - 0xac, 0x08, 0x10, 0xb0, 0xed, 0xab, 0x09, 0x32, 0x25, 0x33, 0x23, 0x21, 0x00, 0xa8, 0x8b, 0x73, - 0x34, 0x23, 0x80, 0x18, 0x32, 0x91, 0xdd, 0xbc, 0x28, 0x54, 0x34, 0x35, 0x43, 0x22, 0x11, 0x12, - 0x12, 0xa8, 0xec, 0xcc, 0xba, 0xaa, 0xaa, 0xcb, 0xab, 0x8a, 0x11, 0x90, 0xdc, 0xbc, 0x9b, 0x18, - 0x22, 0x34, 0x34, 0x33, 0x01, 0xa8, 0x9b, 0x51, 0x45, 0x12, 0x00, 0x20, 0x43, 0x82, 0xeb, 0xac, - 0x8a, 0x31, 0x45, 0x45, 0x33, 0x24, 0x21, 0x22, 0x33, 0x02, 0xd9, 0xcd, 0xac, 0xaa, 0xaa, 0xbc, - 0xac, 0x99, 0x01, 0x00, 0xba, 0xdc, 0xaa, 0x99, 0x00, 0x22, 0x44, 0x43, 0x12, 0x98, 0x89, 0x38, - 0x44, 0x12, 0x98, 0x31, 0x35, 0x03, 0xda, 0xbc, 0xab, 0x89, 0x72, 0x54, 0x53, 0x32, 0x22, 0x32, - 0x53, 0x12, 0x90, 0xdb, 0xbc, 0xaa, 0xcb, 0xcc, 0xab, 0x9a, 0x08, 0x81, 0xb8, 0xeb, 0xbb, 0x9a, - 0x88, 0x28, 0x63, 0x34, 0x23, 0x91, 0x89, 0x30, 0x34, 0x12, 0x89, 0x50, 0x35, 0x13, 0x90, 0xba, - 0xcd, 0xaa, 0x29, 0x55, 0x45, 0x33, 0x32, 0x33, 0x35, 0x34, 0x01, 0xba, 0xbc, 0xac, 0xcb, 0xcc, - 0xcb, 0x9a, 0x89, 0x80, 0x98, 0xbb, 0xbc, 0xaa, 0x9a, 0x89, 0x72, 0x44, 0x13, 0x81, 0x88, 0x20, - 0x32, 0x81, 0x88, 0x40, 0x45, 0x22, 0x01, 0xa8, 0xdc, 0xbc, 0x8a, 0x41, 0x64, 0x33, 0x23, 0x33, - 0x45, 0x34, 0x11, 0x98, 0xba, 0xaa, 0xcc, 0xbc, 0xae, 0xab, 0x8a, 0x88, 0x88, 0xba, 0xac, 0xba, - 0xba, 0x9c, 0x38, 0x46, 0x33, 0x81, 0x88, 0x31, 0x22, 0x81, 0x88, 0x30, 0x45, 0x24, 0x12, 0x91, - 0xdc, 0xcc, 0xbb, 0x18, 0x45, 0x34, 0x33, 0x33, 0x36, 0x35, 0x22, 0x00, 0x98, 0x99, 0xc9, 0xcc, - 0xcd, 0xba, 0x8a, 0x09, 0x89, 0xa9, 0xaa, 0xba, 0xdc, 0xab, 0x19, 0x63, 0x23, 0x02, 0x00, 0x21, - 0x22, 0x21, 0x20, 0x21, 0x52, 0x54, 0x33, 0x22, 0xa1, 0xcf, 0xbc, 0x89, 0x32, 0x35, 0x32, 0x42, - 0x36, 0x35, 0x22, 0x02, 0x80, 0x80, 0xa8, 0xdc, 0xbe, 0xac, 0x9b, 0x99, 0x89, 0x99, 0x89, 0xa9, - 0xdc, 0xab, 0x0a, 0x32, 0x25, 0x22, 0x21, 0x12, 0x22, 0x11, 0x11, 0x20, 0x53, 0x44, 0x54, 0x23, - 0x12, 0xda, 0xbd, 0x9a, 0x20, 0x23, 0x11, 0x52, 0x46, 0x44, 0x32, 0x11, 0x10, 0x00, 0x00, 0xda, - 0xbe, 0xbd, 0xaa, 0x9a, 0x9a, 0x99, 0x00, 0x80, 0xeb, 0xcb, 0x99, 0x20, 0x32, 0x43, 0x22, 0x23, - 0x23, 0x01, 0x11, 0x10, 0x22, 0x45, 0x45, 0x44, 0x23, 0xb8, 0xcd, 0x9b, 0x18, 0x11, 0x08, 0x18, - 0x65, 0x45, 0x32, 0x22, 0x11, 0x11, 0x21, 0xa8, 0xcf, 0xbc, 0xbb, 0xbb, 0xbb, 0x9b, 0x18, 0x81, - 0xeb, 0xcc, 0x9a, 0x09, 0x10, 0x22, 0x32, 0x32, 0x24, 0x12, 0x01, 0x11, 0x02, 0x08, 0x75, 0x47, - 0x23, 0x81, 0xca, 0xaa, 0x08, 0x12, 0x80, 0x8a, 0x73, 0x45, 0x24, 0x23, 0x12, 0x21, 0x14, 0x81, - 0xeb, 0xbc, 0xbc, 0xbc, 0xbb, 0x9b, 0x88, 0x81, 0xb9, 0xbd, 0xac, 0x99, 0x00, 0x11, 0x32, 0x34, - 0x34, 0x12, 0x22, 0x34, 0x81, 0xaa, 0x70, 0x47, 0x24, 0x11, 0x99, 0xaa, 0x08, 0x01, 0x90, 0x9a, - 0x38, 0x77, 0x43, 0x22, 0x12, 0x23, 0x34, 0x02, 0xb8, 0xcc, 0xcc, 0xdb, 0xab, 0xab, 0x89, 0x80, - 0xa8, 0xcb, 0xbc, 0x9a, 0x8a, 0x89, 0x10, 0x33, 0x33, 0x22, 0x54, 0x43, 0x90, 0xcc, 0x09, 0x56, - 0x34, 0x22, 0x90, 0x99, 0x88, 0x10, 0x90, 0xbc, 0x0b, 0x74, 0x34, 0x33, 0x32, 0x44, 0x24, 0x13, - 0x80, 0xa9, 0xeb, 0xdc, 0xbb, 0xbb, 0x8a, 0x89, 0x98, 0xca, 0xac, 0x9a, 0x9a, 0x99, 0x18, 0x22, - 0x01, 0x10, 0x55, 0x43, 0x90, 0xcc, 0x8b, 0x62, 0x35, 0x33, 0x02, 0x88, 0x08, 0x11, 0xa0, 0xdc, - 0x8b, 0x51, 0x44, 0x23, 0x42, 0x53, 0x33, 0x24, 0x21, 0x00, 0xa9, 0xce, 0xbc, 0xbc, 0xa9, 0x89, - 0x98, 0xaa, 0xbb, 0xba, 0xbb, 0x9b, 0x18, 0x01, 0xba, 0x9c, 0x73, 0x26, 0x81, 0xcb, 0xbb, 0x30, - 0x47, 0x24, 0x11, 0x00, 0x18, 0x11, 0x90, 0xeb, 0xab, 0x20, 0x44, 0x32, 0x34, 0x45, 0x43, 0x32, - 0x33, 0x22, 0x81, 0xea, 0xcc, 0xac, 0x9b, 0x9a, 0x99, 0xa9, 0xa9, 0xba, 0xbc, 0xbb, 0x89, 0x90, - 0xeb, 0x9b, 0x20, 0x35, 0x12, 0xea, 0xbc, 0x09, 0x62, 0x24, 0x12, 0x00, 0x20, 0x33, 0x91, 0xfb, - 0xba, 0x08, 0x32, 0x42, 0x44, 0x35, 0x25, 0x33, 0x34, 0x32, 0x22, 0xa0, 0xec, 0xbc, 0xaa, 0xab, - 0xaa, 0x99, 0xa9, 0xba, 0xbd, 0x9c, 0x88, 0x98, 0xca, 0xbb, 0x28, 0x45, 0x23, 0xa0, 0xcd, 0x9b, - 0x31, 0x26, 0x12, 0x01, 0x32, 0x25, 0x02, 0xb9, 0xac, 0x9a, 0x08, 0x11, 0x64, 0x44, 0x34, 0x34, - 0x34, 0x43, 0x33, 0x01, 0xc9, 0xbc, 0xbc, 0xab, 0xac, 0x99, 0x89, 0xaa, 0xbd, 0xaa, 0x99, 0x98, - 0xbc, 0xad, 0x0a, 0x52, 0x24, 0x91, 0xda, 0xaa, 0x28, 0x33, 0x12, 0x18, 0x54, 0x34, 0x12, 0x98, - 0xba, 0xbb, 0xbb, 0x99, 0x41, 0x67, 0x53, 0x32, 0x43, 0x44, 0x33, 0x13, 0x98, 0xcb, 0xbc, 0xcb, - 0xbb, 0x9a, 0x89, 0xb9, 0xbd, 0xbb, 0x9a, 0xb9, 0xcc, 0xcc, 0x9a, 0x31, 0x35, 0x01, 0xc9, 0xab, - 0x19, 0x32, 0x02, 0x20, 0x74, 0x43, 0x22, 0x81, 0x98, 0xba, 0xaa, 0xac, 0x0a, 0x73, 0x35, 0x34, - 0x34, 0x45, 0x43, 0x22, 0x01, 0x98, 0xca, 0xbc, 0xcb, 0xa9, 0x88, 0xa9, 0xcb, 0xbb, 0x9a, 0x99, - 0xdb, 0xdc, 0xaa, 0x10, 0x44, 0x02, 0x98, 0xab, 0x89, 0x11, 0x00, 0x11, 0x62, 0x35, 0x34, 0x01, - 0x80, 0xa8, 0xdb, 0xcb, 0x8a, 0x30, 0x36, 0x23, 0x44, 0x55, 0x43, 0x23, 0x22, 0x81, 0xb8, 0xdc, - 0xba, 0xaa, 0x99, 0x9a, 0xbc, 0xcb, 0x99, 0x89, 0xc9, 0xcd, 0xbb, 0x09, 0x43, 0x12, 0xa0, 0xaa, - 0x99, 0x00, 0x80, 0x08, 0x73, 0x44, 0x24, 0x12, 0x01, 0x81, 0xd9, 0xbc, 0xab, 0x20, 0x24, 0x23, - 0x63, 0x46, 0x34, 0x24, 0x33, 0x23, 0x90, 0xda, 0xcb, 0xaa, 0x9a, 0xaa, 0xdb, 0xcb, 0x99, 0x08, - 0xa9, 0xcd, 0xbc, 0x89, 0x21, 0x23, 0x80, 0x99, 0x09, 0x00, 0x80, 0x18, 0x51, 0x55, 0x33, 0x33, - 0x43, 0x33, 0xc9, 0xcd, 0x9a, 0x18, 0x01, 0x01, 0x31, 0x47, 0x54, 0x43, 0x34, 0x33, 0x12, 0xa9, - 0xbc, 0xcb, 0xaa, 0xb9, 0xdb, 0xbc, 0xaa, 0x00, 0xa8, 0xdc, 0xbc, 0x9a, 0x10, 0x22, 0x00, 0x88, - 0x18, 0x00, 0x00, 0x18, 0x51, 0x35, 0x43, 0x42, 0x44, 0x24, 0x81, 0xbb, 0xab, 0x98, 0x98, 0x99, - 0x19, 0x51, 0x56, 0x45, 0x44, 0x24, 0x22, 0x80, 0xa9, 0xbb, 0xaa, 0xba, 0xcd, 0xcc, 0x8a, 0x08, - 0x80, 0xca, 0xcc, 0x9a, 0x88, 0x01, 0x81, 0x88, 0x10, 0x10, 0x80, 0x08, 0x32, 0x26, 0x22, 0x63, - 0x45, 0x24, 0x01, 0x98, 0x98, 0x88, 0xa8, 0x99, 0x88, 0x09, 0x51, 0x57, 0x55, 0x43, 0x33, 0x02, - 0x98, 0xaa, 0x9a, 0xaa, 0xcd, 0xcc, 0x9a, 0x09, 0x00, 0xc9, 0xbc, 0xbb, 0x99, 0x08, 0x88, 0x88, - 0x00, 0x11, 0x99, 0x29, 0x64, 0x12, 0x88, 0x41, 0x47, 0x34, 0x11, 0x81, 0x88, 0x08, 0x98, 0x9a, - 0xaa, 0xdb, 0x9a, 0x71, 0x65, 0x44, 0x33, 0x23, 0x80, 0xa9, 0x89, 0x99, 0xec, 0xcb, 0xab, 0x89, - 0x80, 0xb8, 0xcd, 0xab, 0xaa, 0x89, 0x99, 0x09, 0x10, 0x01, 0xa8, 0x29, 0x54, 0x13, 0x99, 0x41, - 0x57, 0x43, 0x22, 0x11, 0x01, 0x80, 0x80, 0x90, 0xa9, 0xdb, 0xbc, 0x9a, 0x73, 0x57, 0x43, 0x23, - 0x01, 0x88, 0x08, 0x80, 0xda, 0xcc, 0xbb, 0x99, 0x08, 0xa9, 0xdb, 0xbb, 0xab, 0xab, 0xab, 0x09, - 0x00, 0x80, 0xbb, 0x19, 0x44, 0x02, 0xa9, 0x39, 0x77, 0x26, 0x22, 0x13, 0x11, 0x10, 0x10, 0x80, - 0x98, 0xba, 0xcf, 0xac, 0x19, 0x55, 0x45, 0x23, 0x12, 0x00, 0x10, 0x01, 0xc8, 0xcc, 0xbc, 0x9a, - 0x88, 0x99, 0xcb, 0xab, 0xbb, 0xcb, 0xbb, 0x09, 0x08, 0x98, 0x99, 0x09, 0x42, 0x91, 0xcb, 0x0a, - 0x65, 0x44, 0x34, 0x33, 0x22, 0x11, 0x11, 0x10, 0x11, 0x82, 0xfc, 0xcd, 0x9a, 0x50, 0x45, 0x24, - 0x22, 0x10, 0x21, 0x12, 0x90, 0xeb, 0xbc, 0xaa, 0x99, 0xa9, 0xcb, 0xbb, 0xcb, 0xcb, 0xab, 0x8a, - 0x99, 0xb9, 0xaa, 0x08, 0x22, 0x90, 0xba, 0xbc, 0x51, 0x47, 0x53, 0x33, 0x24, 0x12, 0x00, 0x10, - 0x31, 0x43, 0xa1, 0xee, 0xbb, 0x29, 0x65, 0x24, 0x23, 0x22, 0x22, 0x33, 0x02, 0xda, 0xbd, 0xba, - 0xaa, 0xbb, 0xbb, 0xcb, 0xbc, 0xcc, 0xba, 0x99, 0x98, 0xba, 0xab, 0x89, 0x11, 0x23, 0x81, 0xab, - 0x19, 0x65, 0x45, 0x35, 0x43, 0x12, 0x00, 0x00, 0x30, 0x35, 0x03, 0xfb, 0xbd, 0x89, 0x42, 0x35, - 0x43, 0x22, 0x32, 0x25, 0x12, 0xa8, 0xcb, 0xbb, 0xcb, 0xba, 0xaa, 0xab, 0xcc, 0xcc, 0xba, 0x99, - 0x9a, 0xbb, 0xbc, 0x8a, 0x18, 0x01, 0x88, 0xb9, 0xab, 0x28, 0x65, 0x45, 0x34, 0x33, 0x02, 0x88, - 0x30, 0x46, 0x22, 0xc9, 0xcd, 0x9a, 0x20, 0x35, 0x34, 0x32, 0x53, 0x34, 0x22, 0x80, 0xb9, 0xcb, - 0xcb, 0xbb, 0xaa, 0xa9, 0xdb, 0xbc, 0xcb, 0xaa, 0xa9, 0xba, 0xbc, 0xaa, 0x08, 0x80, 0x00, 0xa8, - 0xdb, 0x9a, 0x18, 0x74, 0x54, 0x33, 0x02, 0x90, 0x20, 0x45, 0x24, 0xa0, 0xcc, 0x9c, 0x18, 0x33, - 0x25, 0x33, 0x54, 0x43, 0x23, 0x12, 0x88, 0xb9, 0xcc, 0xab, 0xaa, 0xa9, 0xba, 0xcd, 0xba, 0xbb, - 0xba, 0xbc, 0xbc, 0xbb, 0x9a, 0x98, 0x08, 0x88, 0xa9, 0xcb, 0xab, 0x40, 0x77, 0x24, 0x12, 0x80, - 0x18, 0x44, 0x34, 0x01, 0xdb, 0xac, 0x09, 0x21, 0x33, 0x43, 0x45, 0x34, 0x24, 0x23, 0x02, 0x98, - 0xca, 0xbc, 0xaa, 0x99, 0xa9, 0xbc, 0xbc, 0xba, 0xac, 0xbb, 0xbc, 0xac, 0x9a, 0x89, 0x89, 0x88, - 0x98, 0xca, 0xbd, 0x8b, 0x73, 0x35, 0x13, 0x90, 0x08, 0x64, 0x34, 0x13, 0xc9, 0xcb, 0x8a, 0x00, - 0x21, 0x32, 0x46, 0x44, 0x33, 0x24, 0x23, 0x00, 0xb9, 0xcc, 0xaa, 0x9a, 0xba, 0xcb, 0xbc, 0xba, - 0xcb, 0xba, 0xbc, 0xbc, 0xaa, 0x89, 0x99, 0x00, 0x11, 0xc8, 0xcd, 0xaa, 0x30, 0x47, 0x13, 0x80, - 0x89, 0x73, 0x34, 0x14, 0x98, 0xba, 0xaa, 0x89, 0x08, 0x10, 0x54, 0x54, 0x43, 0x34, 0x33, 0x22, - 0x98, 0xba, 0xac, 0xaa, 0xbb, 0xcc, 0xbb, 0xcb, 0xba, 0xbb, 0xbd, 0xac, 0xab, 0xab, 0x9a, 0x09, - 0x22, 0xa1, 0xde, 0xcb, 0x08, 0x63, 0x22, 0x80, 0x8a, 0x72, 0x44, 0x33, 0x00, 0xa9, 0xaa, 0xab, - 0x99, 0x09, 0x52, 0x45, 0x44, 0x44, 0x33, 0x23, 0x00, 0x99, 0xaa, 0xba, 0xba, 0xcc, 0xcb, 0xba, - 0xba, 0xcb, 0xdb, 0xbb, 0xcb, 0xba, 0xbb, 0x99, 0x21, 0x91, 0xfb, 0xae, 0x89, 0x32, 0x24, 0x90, - 0xaa, 0x61, 0x45, 0x43, 0x11, 0x88, 0x99, 0xaa, 0xaa, 0x8a, 0x10, 0x53, 0x55, 0x44, 0x34, 0x33, - 0x12, 0x88, 0xa8, 0xa9, 0xb9, 0xdb, 0xcb, 0xab, 0xab, 0xbc, 0xbc, 0xcc, 0xba, 0xbb, 0xac, 0x9a, - 0x10, 0x12, 0xd9, 0xbd, 0x9a, 0x32, 0x25, 0x90, 0xbb, 0x28, 0x57, 0x43, 0x22, 0x01, 0x98, 0xaa, - 0xab, 0xab, 0x9a, 0x18, 0x73, 0x47, 0x44, 0x33, 0x22, 0x01, 0x88, 0x88, 0x98, 0xb9, 0xbc, 0xac, - 0xab, 0xcb, 0xbc, 0xbb, 0xcc, 0xdb, 0xba, 0x9b, 0x18, 0x23, 0xb8, 0xce, 0x9a, 0x21, 0x33, 0x90, - 0xbc, 0x0a, 0x55, 0x35, 0x33, 0x23, 0x02, 0xa9, 0xcb, 0xaa, 0xbb, 0xbc, 0x18, 0x75, 0x54, 0x33, - 0x24, 0x11, 0x00, 0x08, 0x98, 0xaa, 0xcb, 0xab, 0xbb, 0xdb, 0xcb, 0xbb, 0xbb, 0xbe, 0xbd, 0x9b, - 0x19, 0x21, 0x90, 0xcd, 0xaa, 0x20, 0x33, 0x81, 0xca, 0x9b, 0x52, 0x46, 0x43, 0x23, 0x12, 0x90, - 0xa9, 0xb9, 0xcb, 0xbc, 0xab, 0x51, 0x65, 0x34, 0x24, 0x12, 0x02, 0x01, 0x88, 0x99, 0xbb, 0xcb, - 0xab, 0xcb, 0xbc, 0xbb, 0xba, 0xdd, 0xbd, 0xab, 0x09, 0x11, 0x90, 0xcc, 0xab, 0x08, 0x33, 0x02, - 0xb9, 0xab, 0x28, 0x67, 0x34, 0x34, 0x22, 0x01, 0x89, 0xa9, 0xba, 0xcd, 0xbb, 0x09, 0x64, 0x45, - 0x33, 0x33, 0x32, 0x21, 0x00, 0x88, 0xbb, 0xcb, 0xbb, 0xcc, 0xac, 0xab, 0xa9, 0xfb, 0xdc, 0xaa, - 0x89, 0x00, 0x80, 0xcb, 0xbb, 0x0a, 0x11, 0x02, 0x90, 0xcb, 0x8a, 0x61, 0x55, 0x43, 0x22, 0x11, - 0x00, 0x80, 0x98, 0xdb, 0xbc, 0xab, 0x41, 0x56, 0x43, 0x33, 0x33, 0x23, 0x22, 0x80, 0xa8, 0xba, - 0xcb, 0xcc, 0xbc, 0x9a, 0x99, 0xda, 0xbe, 0xbc, 0x8a, 0x18, 0x80, 0xba, 0xad, 0x9a, 0x10, 0x12, - 0x01, 0xa9, 0xcb, 0x29, 0x56, 0x35, 0x23, 0x13, 0x12, 0x10, 0x88, 0xda, 0xcd, 0xbb, 0x09, 0x62, - 0x34, 0x35, 0x42, 0x22, 0x13, 0x02, 0x88, 0x88, 0xaa, 0xcd, 0xcb, 0x9a, 0x88, 0xa9, 0xde, 0xcb, - 0x99, 0x08, 0x80, 0xa8, 0xbb, 0x9c, 0x09, 0x10, 0x02, 0xa0, 0xcc, 0x8a, 0x62, 0x44, 0x43, 0x22, - 0x21, 0x21, 0x12, 0xb8, 0xdd, 0xbc, 0x9a, 0x20, 0x54, 0x53, 0x33, 0x34, 0x33, 0x12, 0x01, 0x01, - 0x98, 0xcc, 0xbd, 0xab, 0x08, 0xa8, 0xdd, 0xbc, 0xab, 0x89, 0x88, 0xa8, 0xcb, 0xbb, 0x9b, 0x08, - 0x22, 0x98, 0xcc, 0xbb, 0x28, 0x47, 0x34, 0x33, 0x33, 0x43, 0x33, 0x82, 0xea, 0xcc, 0xab, 0x09, - 0x42, 0x44, 0x44, 0x34, 0x32, 0x22, 0x11, 0x12, 0x01, 0xea, 0xdb, 0x9a, 0x09, 0x88, 0xdb, 0xbd, - 0xbb, 0x9a, 0x98, 0x99, 0xba, 0xbd, 0x9b, 0x19, 0x11, 0x81, 0xc9, 0xbc, 0x0a, 0x73, 0x25, 0x33, - 0x32, 0x24, 0x24, 0x13, 0xa0, 0xce, 0xab, 0x9a, 0x18, 0x52, 0x54, 0x34, 0x33, 0x33, 0x22, 0x43, - 0x12, 0xb0, 0xcd, 0xab, 0x09, 0x88, 0xda, 0xbd, 0xbc, 0xaa, 0x99, 0x88, 0xba, 0xdb, 0xbb, 0x89, - 0x00, 0x01, 0xb8, 0xcd, 0x9a, 0x30, 0x46, 0x42, 0x22, 0x33, 0x35, 0x33, 0x82, 0xdb, 0xbc, 0xbb, - 0x9a, 0x18, 0x55, 0x35, 0x34, 0x33, 0x32, 0x53, 0x22, 0x90, 0xdb, 0xab, 0x89, 0x90, 0xb9, 0xce, - 0xac, 0xab, 0x9a, 0x88, 0xaa, 0xdb, 0xcb, 0x99, 0x09, 0x01, 0x98, 0xbc, 0xbb, 0x29, 0x64, 0x43, - 0x32, 0x34, 0x35, 0x34, 0x02, 0x98, 0xcb, 0xac, 0xcb, 0x9a, 0x31, 0x46, 0x34, 0x33, 0x43, 0x43, - 0x24, 0x81, 0xa9, 0xba, 0x99, 0x09, 0xa9, 0xec, 0xbc, 0xcb, 0x9a, 0x99, 0x99, 0xcb, 0xcb, 0xab, - 0x8a, 0x80, 0x98, 0xbc, 0xad, 0x8a, 0x22, 0x44, 0x22, 0x34, 0x46, 0x33, 0x23, 0x81, 0xa8, 0xdb, - 0xbc, 0xac, 0x19, 0x53, 0x44, 0x22, 0x43, 0x34, 0x34, 0x12, 0x98, 0xaa, 0x9b, 0x88, 0x98, 0xda, - 0xcd, 0xbc, 0xaa, 0x9a, 0xa9, 0xca, 0xbc, 0xbb, 0x9b, 0x08, 0x80, 0xca, 0xbc, 0x9b, 0x10, 0x43, - 0x32, 0x54, 0x54, 0x34, 0x33, 0x13, 0x01, 0xa9, 0xdc, 0xbc, 0x89, 0x31, 0x35, 0x33, 0x54, 0x53, - 0x24, 0x13, 0x81, 0x99, 0x9a, 0x88, 0x80, 0xb8, 0xcd, 0xcc, 0xab, 0xaa, 0x9a, 0xbb, 0xcd, 0xbb, - 0xab, 0x09, 0x88, 0xb9, 0xbc, 0xab, 0x19, 0x21, 0x10, 0x62, 0x46, 0x35, 0x33, 0x24, 0x21, 0x01, - 0xea, 0xdb, 0x99, 0x18, 0x22, 0x22, 0x53, 0x45, 0x44, 0x22, 0x02, 0x90, 0x99, 0x98, 0x00, 0x80, - 0xda, 0xdc, 0xba, 0xaa, 0xaa, 0xaa, 0xdc, 0xcb, 0xaa, 0x89, 0x88, 0x99, 0xbb, 0xaa, 0x08, 0x01, - 0x88, 0x18, 0x67, 0x44, 0x22, 0x33, 0x35, 0x12, 0xb8, 0xbe, 0xab, 0x09, 0x11, 0x21, 0x43, 0x56, - 0x44, 0x33, 0x23, 0x01, 0x89, 0x09, 0x10, 0x11, 0xb8, 0xdd, 0xcb, 0xbb, 0xa9, 0xb9, 0xcc, 0xcc, - 0xbb, 0x99, 0x89, 0xb9, 0xcb, 0xaa, 0x88, 0x00, 0xa9, 0x09, 0x74, 0x34, 0x43, 0x43, 0x35, 0x33, - 0x90, 0xca, 0xcb, 0x99, 0x00, 0x80, 0x10, 0x64, 0x45, 0x43, 0x33, 0x11, 0x80, 0x09, 0x08, 0x10, - 0x90, 0xeb, 0xcc, 0xbb, 0xaa, 0xba, 0xdb, 0xcc, 0xbb, 0x9a, 0x89, 0xa9, 0xbc, 0xaa, 0x09, 0x98, - 0xaa, 0x8a, 0x72, 0x43, 0x32, 0x55, 0x44, 0x24, 0x01, 0xa8, 0xaa, 0x9a, 0x88, 0x89, 0x8a, 0x40, - 0x66, 0x34, 0x34, 0x22, 0x01, 0x80, 0x00, 0x11, 0x01, 0xc9, 0xdc, 0xcb, 0xaa, 0xa9, 0xca, 0xbc, - 0xbc, 0xab, 0x98, 0xa9, 0xbc, 0xab, 0x89, 0xb9, 0xbc, 0x8a, 0x22, 0x24, 0x43, 0x55, 0x46, 0x33, - 0x23, 0x90, 0xaa, 0x9a, 0xaa, 0xa9, 0xbc, 0x8b, 0x73, 0x46, 0x34, 0x23, 0x12, 0x01, 0x00, 0x21, - 0x21, 0x98, 0xcd, 0xcc, 0xaa, 0x99, 0xba, 0xcd, 0xcb, 0x9a, 0x99, 0xa9, 0xcb, 0x9a, 0x98, 0xba, - 0xac, 0x89, 0x21, 0x11, 0x10, 0x73, 0x57, 0x34, 0x23, 0x01, 0x98, 0x99, 0x89, 0xb9, 0xdb, 0xaa, - 0x18, 0x56, 0x35, 0x43, 0x12, 0x01, 0x10, 0x21, 0x22, 0x01, 0xca, 0xcd, 0xba, 0x99, 0xba, 0xdd, - 0xcb, 0xaa, 0xa9, 0xaa, 0xac, 0x9a, 0x99, 0xbb, 0xac, 0x9a, 0x10, 0x81, 0x99, 0x51, 0x57, 0x35, - 0x24, 0x12, 0x81, 0x80, 0x80, 0x98, 0xca, 0xcb, 0x8a, 0x51, 0x45, 0x34, 0x32, 0x12, 0x01, 0x22, - 0x33, 0x13, 0xa8, 0xce, 0xbb, 0x9a, 0xc9, 0xdc, 0xcb, 0xaa, 0xb9, 0xca, 0xaa, 0xaa, 0xa9, 0xcb, - 0xcb, 0x8a, 0x00, 0x88, 0xba, 0x8a, 0x74, 0x37, 0x34, 0x13, 0x02, 0x00, 0x00, 0x88, 0xba, 0xcd, - 0xbb, 0x08, 0x64, 0x53, 0x33, 0x23, 0x12, 0x32, 0x43, 0x33, 0x91, 0xdb, 0xab, 0x9a, 0xb9, 0xde, - 0xbb, 0xcb, 0xba, 0xbc, 0xba, 0xab, 0xb9, 0xdb, 0xbc, 0x9a, 0x00, 0x90, 0xca, 0xbb, 0x30, 0x77, - 0x43, 0x23, 0x12, 0x11, 0x11, 0x00, 0xa8, 0xcc, 0xcc, 0x8a, 0x20, 0x54, 0x43, 0x23, 0x12, 0x22, - 0x34, 0x34, 0x01, 0xb9, 0xaa, 0x89, 0xb9, 0xec, 0xac, 0xbb, 0xbc, 0xbc, 0xac, 0x9a, 0xaa, 0xbb, - 0xbd, 0xaa, 0x09, 0x80, 0xda, 0xcb, 0x0a, 0x62, 0x45, 0x33, 0x23, 0x13, 0x22, 0x22, 0x80, 0xeb, - 0xcc, 0xab, 0x0a, 0x42, 0x45, 0x23, 0x22, 0x22, 0x35, 0x24, 0x12, 0x98, 0x99, 0x89, 0xa9, 0xdb, - 0xbc, 0xbb, 0xcd, 0xcb, 0xbb, 0xaa, 0xa9, 0xcb, 0xbc, 0xbb, 0x09, 0x80, 0xc9, 0xcd, 0x9a, 0x28, - 0x55, 0x43, 0x23, 0x23, 0x32, 0x32, 0x03, 0xb8, 0xcf, 0xcb, 0x9a, 0x18, 0x53, 0x33, 0x23, 0x43, - 0x44, 0x34, 0x12, 0x80, 0x88, 0x88, 0x98, 0xbb, 0xdb, 0xcb, 0xdb, 0xcc, 0xbb, 0xaa, 0xaa, 0xcb, - 0xcc, 0xaa, 0x99, 0x80, 0xb8, 0xdc, 0xab, 0x09, 0x52, 0x44, 0x33, 0x33, 0x43, 0x43, 0x22, 0x00, - 0xca, 0xcd, 0xab, 0x89, 0x32, 0x34, 0x23, 0x43, 0x45, 0x34, 0x22, 0x00, 0x00, 0x00, 0x88, 0xa9, - 0x9a, 0xba, 0xcd, 0xcd, 0xac, 0xab, 0xa9, 0xca, 0xcb, 0xbb, 0x9a, 0x09, 0xa8, 0xcd, 0xbc, 0x9a, - 0x28, 0x54, 0x43, 0x23, 0x24, 0x24, 0x33, 0x22, 0xa0, 0xec, 0xbb, 0x9b, 0x20, 0x23, 0x23, 0x44, - 0x45, 0x43, 0x23, 0x02, 0x11, 0x00, 0x98, 0x99, 0x98, 0x89, 0xea, 0xdc, 0xcb, 0xab, 0x9a, 0xcb, - 0xcc, 0xab, 0xaa, 0x89, 0x88, 0xdb, 0xcc, 0xab, 0x89, 0x32, 0x35, 0x34, 0x34, 0x34, 0x43, 0x33, - 0x02, 0xda, 0xcc, 0xaa, 0x08, 0x10, 0x10, 0x31, 0x55, 0x43, 0x33, 0x23, 0x21, 0x11, 0x80, 0x98, - 0x89, 0x80, 0xb8, 0xdf, 0xcb, 0xbb, 0xaa, 0xcb, 0xdc, 0xbb, 0xab, 0x8a, 0x88, 0xb9, 0xce, 0xbb, - 0x9a, 0x10, 0x53, 0x44, 0x23, 0x34, 0x34, 0x35, 0x22, 0xa8, 0xcc, 0xaa, 0x8a, 0x88, 0x88, 0x10, - 0x63, 0x44, 0x33, 0x33, 0x23, 0x22, 0x00, 0x99, 0x89, 0x10, 0x90, 0xde, 0xbc, 0xac, 0xaa, 0xca, - 0xcc, 0xbc, 0xac, 0x8a, 0x88, 0x99, 0xbc, 0xcc, 0xaa, 0x89, 0x10, 0x34, 0x33, 0x53, 0x54, 0x44, - 0x22, 0x81, 0xb9, 0xab, 0x9b, 0x99, 0xa9, 0x0a, 0x52, 0x45, 0x34, 0x43, 0x33, 0x23, 0x12, 0x80, - 0x08, 0x20, 0x01, 0xda, 0xbd, 0xbc, 0xba, 0xca, 0xcc, 0xcd, 0xab, 0xaa, 0x88, 0x99, 0xca, 0xcc, - 0xba, 0x9b, 0x18, 0x32, 0x23, 0x32, 0x67, 0x44, 0x33, 0x12, 0x98, 0xaa, 0xaa, 0xa9, 0xbb, 0x9b, - 0x30, 0x55, 0x44, 0x43, 0x43, 0x32, 0x12, 0x81, 0x00, 0x11, 0x81, 0xa9, 0xdc, 0xbb, 0x9c, 0xa9, - 0xfb, 0xcc, 0xcb, 0x9a, 0x99, 0x88, 0xa9, 0xbc, 0xbd, 0xab, 0x89, 0x21, 0x01, 0x10, 0x73, 0x57, - 0x32, 0x13, 0x81, 0x98, 0x99, 0xa9, 0xcb, 0xaa, 0x89, 0x31, 0x63, 0x34, 0x35, 0x34, 0x22, 0x01, - 0x01, 0x11, 0x12, 0x80, 0xcb, 0xcc, 0x9a, 0x89, 0xdb, 0xce, 0xbb, 0xac, 0x99, 0x89, 0x88, 0xca, - 0xcd, 0xbb, 0x8a, 0x08, 0x80, 0x89, 0x40, 0x67, 0x43, 0x23, 0x12, 0x00, 0x98, 0xa8, 0xba, 0xac, - 0x99, 0x18, 0x21, 0x45, 0x45, 0x33, 0x33, 0x12, 0x11, 0x21, 0x32, 0x81, 0xda, 0xbc, 0xab, 0xa9, - 0xfa, 0xcc, 0xbc, 0xac, 0xab, 0x99, 0x88, 0xc9, 0xcd, 0xcb, 0x9a, 0x88, 0x88, 0x9a, 0x1a, 0x64, - 0x45, 0x23, 0x22, 0x02, 0x81, 0x90, 0xb9, 0xab, 0x9b, 0x89, 0x20, 0x64, 0x54, 0x43, 0x32, 0x12, - 0x11, 0x12, 0x23, 0x03, 0xb8, 0xad, 0xaa, 0x89, 0xca, 0xdd, 0xcc, 0xac, 0xbb, 0x9a, 0x88, 0xb9, - 0xed, 0xbb, 0xab, 0x99, 0x99, 0xbb, 0x9b, 0x72, 0x45, 0x43, 0x23, 0x23, 0x12, 0x80, 0x99, 0xba, - 0xaa, 0x9a, 0x09, 0x41, 0x56, 0x44, 0x32, 0x22, 0x12, 0x21, 0x33, 0x14, 0x90, 0xba, 0xaa, 0x9a, - 0xba, 0xec, 0xcd, 0xbd, 0xbc, 0x9a, 0x88, 0xa8, 0xdc, 0xcc, 0xaa, 0x89, 0x99, 0xaa, 0xbb, 0x18, - 0x55, 0x34, 0x34, 0x32, 0x33, 0x11, 0x88, 0x99, 0xaa, 0xaa, 0x9a, 0x18, 0x65, 0x45, 0x33, 0x33, - 0x22, 0x32, 0x34, 0x24, 0x00, 0x99, 0x98, 0x88, 0x09, 0xa9, 0xfd, 0xdc, 0xcb, 0x9a, 0x09, 0x98, - 0xdb, 0xbd, 0xbb, 0x9a, 0xa9, 0xdb, 0xbb, 0x9a, 0x31, 0x55, 0x43, 0x43, 0x23, 0x13, 0x01, 0x88, - 0x99, 0xaa, 0xbb, 0xab, 0x40, 0x47, 0x25, 0x23, 0x22, 0x22, 0x34, 0x23, 0x13, 0x80, 0x88, 0x99, - 0x18, 0x22, 0xc8, 0xff, 0xbd, 0xaa, 0x88, 0x90, 0xd9, 0xcc, 0xab, 0xaa, 0xa9, 0xbc, 0xcb, 0x9b, - 0x09, 0x41, 0x44, 0x34, 0x43, 0x23, 0x12, 0x11, 0x08, 0xa9, 0xbb, 0xbc, 0x0b, 0x73, 0x35, 0x23, - 0x23, 0x43, 0x33, 0x24, 0x23, 0x00, 0x80, 0x89, 0x08, 0x44, 0x12, 0xfc, 0xbd, 0xbb, 0x8a, 0x80, - 0xb9, 0xbf, 0xbc, 0xaa, 0xb9, 0xcb, 0xcc, 0xaa, 0x9a, 0x08, 0x42, 0x44, 0x34, 0x33, 0x33, 0x22, - 0x11, 0x80, 0xda, 0xbc, 0xab, 0x20, 0x45, 0x43, 0x32, 0x32, 0x34, 0x33, 0x24, 0x11, 0x81, 0xa9, - 0x18, 0x54, 0x24, 0xa8, 0xcf, 0xbb, 0x9a, 0x80, 0xb8, 0xcc, 0xbc, 0xab, 0xba, 0xbc, 0xcd, 0xba, - 0xab, 0x8a, 0x30, 0x63, 0x44, 0x33, 0x33, 0x32, 0x22, 0x12, 0xc8, 0xcc, 0xab, 0x89, 0x42, 0x43, - 0x33, 0x34, 0x34, 0x33, 0x43, 0x32, 0x80, 0x99, 0x09, 0x54, 0x35, 0x81, 0xdc, 0xbc, 0x99, 0x89, - 0xa8, 0xcb, 0xcc, 0xaa, 0xab, 0xbc, 0xcc, 0xbb, 0xbc, 0xaa, 0x88, 0x41, 0x53, 0x34, 0x24, 0x32, - 0x33, 0x32, 0x01, 0xca, 0xac, 0x9a, 0x10, 0x43, 0x53, 0x33, 0x34, 0x32, 0x44, 0x33, 0x02, 0x98, - 0x89, 0x63, 0x35, 0x03, 0xc9, 0xbd, 0xaa, 0x99, 0xa8, 0xcb, 0xbc, 0xbc, 0xba, 0xdb, 0xdb, 0xcb, - 0xac, 0xab, 0x9b, 0x08, 0x42, 0x44, 0x33, 0x24, 0x24, 0x33, 0x12, 0xa8, 0xcb, 0xba, 0x8a, 0x20, - 0x34, 0x35, 0x33, 0x43, 0x63, 0x33, 0x14, 0x88, 0x8a, 0x40, 0x35, 0x23, 0xa0, 0xbd, 0x9c, 0x9a, - 0x98, 0xbb, 0xbd, 0xbc, 0xbb, 0xdb, 0xdb, 0xcb, 0xbc, 0xbc, 0xab, 0x8a, 0x10, 0x43, 0x34, 0x43, - 0x34, 0x35, 0x12, 0x01, 0x99, 0xaa, 0xaa, 0x08, 0x32, 0x36, 0x22, 0x33, 0x55, 0x34, 0x23, 0x91, - 0x99, 0x30, 0x46, 0x23, 0x81, 0xca, 0xba, 0xaa, 0xaa, 0xcb, 0xbd, 0xdb, 0xaa, 0xcb, 0xbb, 0xbd, - 0xbd, 0xcc, 0xbb, 0xaa, 0x08, 0x11, 0x33, 0x44, 0x44, 0x34, 0x23, 0x22, 0x80, 0xa8, 0xba, 0x9a, - 0x20, 0x34, 0x23, 0x32, 0x56, 0x45, 0x23, 0x01, 0x89, 0x18, 0x44, 0x43, 0x11, 0x99, 0xaa, 0xab, - 0xb9, 0xda, 0xbc, 0xcb, 0xbb, 0xbc, 0xcb, 0xcc, 0xbc, 0xbd, 0xcc, 0xaa, 0x89, 0x88, 0x10, 0x31, - 0x63, 0x34, 0x43, 0x23, 0x01, 0x80, 0xaa, 0xaa, 0x08, 0x21, 0x12, 0x10, 0x75, 0x35, 0x25, 0x02, - 0x80, 0x00, 0x42, 0x24, 0x22, 0x81, 0x99, 0x9a, 0xa9, 0xcb, 0xbc, 0xbd, 0xbb, 0xbc, 0xdb, 0xbb, - 0xdc, 0xcc, 0xdb, 0xba, 0x9a, 0x99, 0x88, 0x00, 0x32, 0x36, 0x34, 0x24, 0x22, 0x81, 0xa8, 0xaa, - 0x89, 0x11, 0x01, 0x09, 0x73, 0x56, 0x33, 0x23, 0x01, 0x10, 0x42, 0x35, 0x24, 0x11, 0x00, 0x80, - 0x80, 0xa8, 0xca, 0xbc, 0xbc, 0xbc, 0xbb, 0xcb, 0xdb, 0xdc, 0xcc, 0xbb, 0xba, 0x9a, 0x9a, 0x89, - 0x21, 0x53, 0x44, 0x43, 0x23, 0x12, 0xa8, 0xaa, 0x89, 0x00, 0x80, 0xbb, 0x38, 0x77, 0x25, 0x13, - 0x11, 0x08, 0x32, 0x35, 0x34, 0x23, 0x12, 0x11, 0x00, 0x90, 0xca, 0xdb, 0xcb, 0xbc, 0xac, 0x9a, - 0xba, 0xec, 0xcc, 0xac, 0xbb, 0xab, 0xaa, 0x9a, 0x09, 0x31, 0x63, 0x44, 0x33, 0x13, 0x90, 0xaa, - 0x99, 0x01, 0x90, 0xcc, 0x8a, 0x72, 0x44, 0x33, 0x11, 0x00, 0x22, 0x55, 0x33, 0x34, 0x22, 0x22, - 0x11, 0x01, 0x88, 0xa9, 0xcc, 0xbd, 0xbb, 0x9b, 0xa9, 0xec, 0xdc, 0xcb, 0xbb, 0xac, 0xaa, 0x9a, - 0x89, 0x00, 0x42, 0x54, 0x43, 0x23, 0x80, 0x98, 0x88, 0x10, 0x98, 0xeb, 0xaa, 0x38, 0x45, 0x24, - 0x22, 0x10, 0x20, 0x63, 0x34, 0x24, 0x23, 0x23, 0x12, 0x00, 0x00, 0x99, 0xdb, 0xcc, 0xac, 0x9a, - 0x99, 0xca, 0xdd, 0xdb, 0xbb, 0xbc, 0xba, 0xaa, 0x9a, 0x88, 0x28, 0x54, 0x35, 0x24, 0x11, 0x88, - 0x08, 0x00, 0x90, 0xcc, 0xcb, 0x09, 0x41, 0x43, 0x22, 0x12, 0x20, 0x53, 0x44, 0x43, 0x33, 0x33, - 0x22, 0x12, 0x11, 0x11, 0xa9, 0xdc, 0xad, 0x9b, 0x99, 0xba, 0xce, 0xcc, 0xbc, 0xbc, 0xbb, 0xab, - 0xaa, 0xaa, 0x89, 0x52, 0x55, 0x33, 0x12, 0x00, 0x00, 0x11, 0x80, 0xdb, 0xcc, 0x9a, 0x18, 0x53, - 0x23, 0x22, 0x21, 0x32, 0x45, 0x34, 0x44, 0x32, 0x22, 0x12, 0x21, 0x12, 0x91, 0xea, 0xcb, 0xba, - 0xa9, 0xb9, 0xdd, 0xdb, 0xdb, 0xcb, 0xbb, 0xab, 0xba, 0xbb, 0xab, 0x28, 0x56, 0x34, 0x22, 0x11, - 0x21, 0x22, 0x11, 0xa8, 0xce, 0xab, 0x09, 0x31, 0x43, 0x23, 0x22, 0x32, 0x44, 0x44, 0x53, 0x43, - 0x22, 0x22, 0x32, 0x32, 0x02, 0xa9, 0xcd, 0xab, 0xaa, 0xbb, 0xbd, 0xcd, 0xeb, 0xdb, 0xba, 0xab, - 0xba, 0xbb, 0xbc, 0x89, 0x52, 0x44, 0x23, 0x12, 0x22, 0x32, 0x33, 0x92, 0xcc, 0xad, 0x9a, 0x28, - 0x32, 0x43, 0x23, 0x32, 0x42, 0x63, 0x34, 0x35, 0x32, 0x23, 0x32, 0x43, 0x12, 0xa0, 0xcb, 0xcb, - 0xbb, 0xac, 0xba, 0xbd, 0xdd, 0xdb, 0xcb, 0xaa, 0xba, 0xcb, 0xcb, 0x9a, 0x10, 0x53, 0x33, 0x22, - 0x33, 0x34, 0x25, 0x02, 0x98, 0xbc, 0xab, 0x09, 0x21, 0x43, 0x24, 0x23, 0x21, 0x44, 0x45, 0x53, - 0x23, 0x32, 0x42, 0x32, 0x23, 0x00, 0xa9, 0xcb, 0xcb, 0xcb, 0xaa, 0xca, 0xcc, 0xcd, 0xbc, 0xba, - 0xba, 0xbc, 0xbd, 0xab, 0x89, 0x22, 0x34, 0x32, 0x32, 0x54, 0x43, 0x22, 0x80, 0xb9, 0xab, 0x9b, - 0x08, 0x42, 0x34, 0x32, 0x12, 0x43, 0x46, 0x35, 0x33, 0x33, 0x43, 0x34, 0x23, 0x11, 0x88, 0xb9, - 0xdb, 0xcb, 0x9a, 0xa9, 0xfb, 0xcc, 0xcc, 0xaa, 0xba, 0xcb, 0xcc, 0xab, 0x9a, 0x10, 0x22, 0x32, - 0x32, 0x35, 0x36, 0x33, 0x12, 0x98, 0xaa, 0xab, 0x0a, 0x20, 0x35, 0x24, 0x02, 0x31, 0x55, 0x44, - 0x33, 0x33, 0x34, 0x34, 0x33, 0x23, 0x01, 0x88, 0xcb, 0xbc, 0x9b, 0x99, 0xeb, 0xce, 0xbc, 0xbb, - 0xcb, 0xcb, 0xbd, 0xbc, 0xaa, 0x89, 0x10, 0x11, 0x11, 0x43, 0x35, 0x34, 0x23, 0x81, 0xa8, 0xba, - 0xaa, 0x18, 0x53, 0x33, 0x22, 0x32, 0x47, 0x53, 0x33, 0x43, 0x43, 0x33, 0x34, 0x23, 0x23, 0x01, - 0xa8, 0xbd, 0x9a, 0x08, 0xc9, 0xdd, 0xcc, 0xbb, 0xba, 0xdb, 0xcc, 0xbc, 0xbb, 0x9a, 0x88, 0x00, - 0x01, 0x32, 0x36, 0x35, 0x32, 0x12, 0x80, 0xb9, 0xba, 0x89, 0x42, 0x32, 0x22, 0x32, 0x55, 0x35, - 0x34, 0x33, 0x35, 0x34, 0x33, 0x34, 0x33, 0x33, 0x90, 0xbb, 0x9c, 0x09, 0xa0, 0xed, 0xcc, 0xab, - 0xbb, 0xbc, 0xcd, 0xbd, 0xbb, 0xab, 0x99, 0x89, 0x88, 0x10, 0x63, 0x34, 0x43, 0x22, 0x11, 0x98, - 0xab, 0x89, 0x11, 0x23, 0x22, 0x31, 0x55, 0x44, 0x43, 0x42, 0x43, 0x33, 0x43, 0x34, 0x34, 0x23, - 0x02, 0xa8, 0x9a, 0x09, 0x80, 0xea, 0xcd, 0xcb, 0xaa, 0xba, 0xec, 0xdb, 0xcb, 0xaa, 0x9a, 0x99, - 0x99, 0x08, 0x31, 0x44, 0x34, 0x34, 0x12, 0x90, 0xa9, 0x99, 0x00, 0x11, 0x11, 0x10, 0x52, 0x44, - 0x33, 0x54, 0x33, 0x44, 0x32, 0x44, 0x53, 0x23, 0x12, 0x00, 0x89, 0x08, 0x10, 0xb8, 0xcd, 0xbc, - 0xab, 0xba, 0xdc, 0xcd, 0xbc, 0xac, 0xaa, 0x9a, 0xaa, 0x99, 0x08, 0x32, 0x36, 0x25, 0x23, 0x01, - 0x98, 0x99, 0x08, 0x00, 0x08, 0x08, 0x21, 0x53, 0x53, 0x53, 0x53, 0x33, 0x43, 0x63, 0x53, 0x33, - 0x33, 0x01, 0x80, 0x00, 0x11, 0x90, 0xdc, 0xcb, 0xaa, 0x9a, 0xdb, 0xdd, 0xbc, 0xcb, 0xbb, 0xba, - 0xac, 0x9a, 0x9a, 0x00, 0x53, 0x34, 0x34, 0x12, 0x80, 0x89, 0x09, 0x88, 0x88, 0x08, 0x28, 0x21, - 0x42, 0x55, 0x44, 0x32, 0x23, 0x44, 0x54, 0x34, 0x23, 0x12, 0x10, 0x00, 0x11, 0x81, 0xca, 0xcc, - 0xab, 0x98, 0xb9, 0xed, 0xcc, 0xcb, 0xbb, 0xcb, 0xba, 0xba, 0xaa, 0x99, 0x31, 0x55, 0x43, 0x22, - 0x01, 0x00, 0x08, 0x08, 0x89, 0x08, 0x10, 0x08, 0x11, 0x55, 0x53, 0x33, 0x22, 0x43, 0x46, 0x35, - 0x24, 0x22, 0x11, 0x10, 0x12, 0x13, 0xa8, 0xbd, 0xab, 0x89, 0x99, 0xdc, 0xdd, 0xcb, 0xbc, 0xbb, - 0xcb, 0xba, 0xbb, 0xab, 0x09, 0x63, 0x53, 0x22, 0x22, 0x10, 0x10, 0x88, 0x88, 0x88, 0x80, 0x98, - 0x08, 0x62, 0x44, 0x43, 0x11, 0x31, 0x55, 0x35, 0x35, 0x22, 0x11, 0x12, 0x32, 0x33, 0x91, 0xcb, - 0xbb, 0x9a, 0x98, 0xca, 0xde, 0xcc, 0xbc, 0xbc, 0xbb, 0xbc, 0xbb, 0xbc, 0x99, 0x20, 0x53, 0x43, - 0x32, 0x12, 0x02, 0x00, 0x88, 0x88, 0x88, 0xa9, 0x99, 0x30, 0x47, 0x33, 0x11, 0x11, 0x73, 0x47, - 0x43, 0x23, 0x21, 0x11, 0x32, 0x24, 0x01, 0xa8, 0xbb, 0xaa, 0x98, 0x99, 0xdd, 0xdc, 0xbd, 0xbc, - 0xcb, 0xbb, 0xbc, 0xbc, 0xaa, 0x88, 0x22, 0x34, 0x43, 0x33, 0x12, 0x11, 0x80, 0x88, 0x88, 0xa9, - 0xbb, 0x28, 0x56, 0x33, 0x02, 0x88, 0x41, 0x67, 0x44, 0x32, 0x21, 0x21, 0x32, 0x43, 0x12, 0x80, - 0xa9, 0x9a, 0x8a, 0x98, 0xc9, 0xce, 0xdd, 0xcb, 0xba, 0xbc, 0xcb, 0xbc, 0xab, 0x9a, 0x10, 0x31, - 0x44, 0x32, 0x33, 0x21, 0x10, 0x00, 0x81, 0xa8, 0xbb, 0x1a, 0x64, 0x43, 0x12, 0x98, 0x0a, 0x74, - 0x46, 0x32, 0x23, 0x21, 0x33, 0x34, 0x33, 0x02, 0x99, 0xaa, 0xab, 0x88, 0x99, 0xfc, 0xcd, 0xbc, - 0xbc, 0xcb, 0xbc, 0xbc, 0xbc, 0x9a, 0x89, 0x10, 0x33, 0x44, 0x32, 0x12, 0x12, 0x11, 0x02, 0x80, - 0xa9, 0x9b, 0x50, 0x36, 0x12, 0xa8, 0xaa, 0x62, 0x56, 0x33, 0x24, 0x22, 0x33, 0x34, 0x24, 0x11, - 0x80, 0x99, 0xaa, 0x88, 0x08, 0xc8, 0xde, 0xbc, 0xcb, 0xcb, 0xbc, 0xcc, 0xcb, 0xaa, 0x9a, 0x08, - 0x20, 0x43, 0x33, 0x23, 0x32, 0x22, 0x23, 0x02, 0xb9, 0xbb, 0x50, 0x55, 0x12, 0x98, 0xbb, 0x38, - 0x66, 0x34, 0x43, 0x32, 0x42, 0x33, 0x34, 0x22, 0x01, 0x98, 0xaa, 0x09, 0x10, 0x90, 0xdd, 0xbd, - 0xad, 0xcb, 0xdb, 0xbc, 0xbc, 0xac, 0xab, 0x99, 0x18, 0x31, 0x43, 0x23, 0x22, 0x32, 0x33, 0x13, - 0xa8, 0xcb, 0x19, 0x45, 0x14, 0xa0, 0xbb, 0x8b, 0x72, 0x35, 0x35, 0x32, 0x43, 0x43, 0x33, 0x33, - 0x13, 0x90, 0xaa, 0x89, 0x20, 0x02, 0xda, 0xce, 0xcb, 0xcb, 0xcc, 0xcc, 0xbb, 0xad, 0xbb, 0xab, - 0x89, 0x20, 0x33, 0x34, 0x32, 0x33, 0x34, 0x23, 0x90, 0xba, 0x8a, 0x73, 0x24, 0x81, 0xaa, 0xab, - 0x30, 0x57, 0x34, 0x33, 0x44, 0x32, 0x34, 0x24, 0x13, 0x01, 0x98, 0x88, 0x11, 0x12, 0xa1, 0xdc, - 0xcb, 0xdb, 0xbc, 0xbd, 0xbd, 0xcc, 0xba, 0xbb, 0x9b, 0x08, 0x21, 0x32, 0x33, 0x33, 0x36, 0x22, - 0x81, 0xaa, 0x9a, 0x41, 0x35, 0x12, 0xb8, 0xbb, 0x19, 0x64, 0x35, 0x44, 0x32, 0x43, 0x53, 0x33, - 0x33, 0x11, 0x90, 0x09, 0x20, 0x23, 0x01, 0xba, 0xcd, 0xbc, 0xcd, 0xcc, 0xdb, 0xbc, 0xbc, 0xbb, - 0xbb, 0x8a, 0x10, 0x21, 0x33, 0x43, 0x44, 0x32, 0x01, 0xa8, 0x99, 0x38, 0x45, 0x22, 0x90, 0xaa, - 0x99, 0x31, 0x56, 0x34, 0x34, 0x43, 0x34, 0x35, 0x33, 0x12, 0x00, 0x09, 0x00, 0x21, 0x11, 0x80, - 0xba, 0xcd, 0xbc, 0xbe, 0xcd, 0xdb, 0xdb, 0xbb, 0xbb, 0x9b, 0x09, 0x00, 0x11, 0x22, 0x35, 0x34, - 0x12, 0x88, 0x99, 0x08, 0x53, 0x32, 0x00, 0xba, 0xac, 0x1a, 0x73, 0x34, 0x34, 0x43, 0x44, 0x44, - 0x33, 0x22, 0x01, 0x08, 0x00, 0x11, 0x21, 0x01, 0x80, 0xaa, 0xcc, 0xbd, 0xcd, 0xdc, 0xdb, 0xbc, - 0xcb, 0xaa, 0x89, 0x88, 0x00, 0x10, 0x42, 0x43, 0x22, 0x00, 0x98, 0x08, 0x22, 0x43, 0x12, 0xb8, - 0xcb, 0x9a, 0x41, 0x55, 0x33, 0x24, 0x44, 0x45, 0x33, 0x33, 0x12, 0x00, 0x00, 0x11, 0x21, 0x11, - 0x02, 0xa8, 0xca, 0xbd, 0xcd, 0xeb, 0xdc, 0xdb, 0xcb, 0xba, 0xa9, 0x98, 0x88, 0x08, 0x21, 0x53, - 0x32, 0x01, 0x88, 0x89, 0x20, 0x43, 0x13, 0x80, 0xdb, 0xab, 0x19, 0x53, 0x34, 0x24, 0x54, 0x54, - 0x43, 0x33, 0x22, 0x11, 0x01, 0x21, 0x22, 0x22, 0x12, 0x01, 0xa9, 0xcb, 0xbb, 0xde, 0xdd, 0xdc, - 0xcb, 0xbb, 0xab, 0xa9, 0xa9, 0x89, 0x20, 0x53, 0x33, 0x13, 0x81, 0x08, 0x10, 0x53, 0x43, 0x02, - 0xa8, 0xbb, 0x89, 0x43, 0x24, 0x23, 0x54, 0x46, 0x35, 0x24, 0x23, 0x22, 0x11, 0x11, 0x21, 0x22, - 0x22, 0x12, 0x99, 0xcb, 0xaa, 0xcb, 0xee, 0xcd, 0xbd, 0xbc, 0xba, 0xaa, 0xab, 0xaa, 0x09, 0x30, - 0x44, 0x12, 0x01, 0x80, 0x00, 0x22, 0x35, 0x23, 0x90, 0xca, 0x8a, 0x18, 0x21, 0x00, 0x41, 0x77, - 0x34, 0x35, 0x43, 0x22, 0x21, 0x11, 0x12, 0x32, 0x32, 0x23, 0x80, 0xa9, 0x09, 0x10, 0xe8, 0xff, - 0xcc, 0xcb, 0xab, 0xbb, 0xbb, 0xbb, 0x9a, 0x18, 0x43, 0x33, 0x12, 0x81, 0x88, 0x30, 0x55, 0x23, - 0x82, 0xb9, 0x8a, 0x08, 0x01, 0x90, 0x0a, 0x74, 0x67, 0x33, 0x25, 0x33, 0x32, 0x21, 0x22, 0x22, - 0x33, 0x33, 0x02, 0xa9, 0x8b, 0x42, 0x82, 0xfe, 0xce, 0xbc, 0xcb, 0xbb, 0xcb, 0xba, 0xaa, 0x89, - 0x11, 0x23, 0x33, 0x01, 0x98, 0x10, 0x45, 0x34, 0x11, 0x90, 0x88, 0x08, 0x01, 0x98, 0x9b, 0x68, - 0x66, 0x44, 0x43, 0x24, 0x32, 0x12, 0x12, 0x22, 0x33, 0x24, 0x02, 0x98, 0x88, 0x32, 0x25, 0xa0, - 0xef, 0xcc, 0xbb, 0xbc, 0xac, 0xcb, 0xaa, 0x99, 0x08, 0x21, 0x22, 0x01, 0x88, 0x18, 0x42, 0x44, - 0x22, 0x80, 0x88, 0x00, 0x08, 0xb8, 0xdb, 0x8a, 0x72, 0x45, 0x35, 0x34, 0x43, 0x22, 0x12, 0x21, - 0x43, 0x32, 0x22, 0x88, 0x89, 0x21, 0x45, 0x02, 0xda, 0xdd, 0xcb, 0xbc, 0xcb, 0xac, 0xbb, 0xba, - 0x89, 0x18, 0x22, 0x01, 0x88, 0x08, 0x41, 0x34, 0x24, 0x01, 0x00, 0x08, 0x81, 0xa9, 0xcc, 0xbb, - 0x28, 0x57, 0x35, 0x35, 0x34, 0x23, 0x13, 0x22, 0x43, 0x33, 0x23, 0x01, 0x99, 0x20, 0x54, 0x33, - 0xa0, 0xec, 0xcc, 0xbc, 0xcc, 0xbb, 0xbc, 0xac, 0x99, 0x09, 0x11, 0x01, 0x80, 0x08, 0x11, 0x34, - 0x24, 0x11, 0x01, 0x80, 0x08, 0x98, 0xdb, 0xac, 0x8a, 0x51, 0x55, 0x44, 0x43, 0x33, 0x22, 0x22, - 0x42, 0x43, 0x23, 0x11, 0x08, 0x18, 0x34, 0x25, 0x02, 0xb8, 0xce, 0xbc, 0xbd, 0xbd, 0xdb, 0xab, - 0xab, 0x89, 0x00, 0x01, 0x80, 0x88, 0x10, 0x33, 0x34, 0x23, 0x00, 0x10, 0x20, 0x01, 0xeb, 0xac, - 0xbb, 0x09, 0x73, 0x37, 0x35, 0x24, 0x23, 0x21, 0x32, 0x44, 0x33, 0x22, 0x10, 0x20, 0x43, 0x25, - 0x23, 0x81, 0xca, 0xdc, 0xbc, 0xbd, 0xbd, 0xad, 0xab, 0x9a, 0x08, 0x00, 0x00, 0x88, 0x00, 0x22, - 0x33, 0x24, 0x11, 0x00, 0x21, 0x80, 0xaa, 0xcd, 0xcb, 0xbb, 0x1a, 0x56, 0x45, 0x43, 0x22, 0x22, - 0x31, 0x44, 0x24, 0x12, 0x11, 0x10, 0x32, 0x35, 0x33, 0x22, 0x98, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, - 0xba, 0x9b, 0x99, 0x08, 0x80, 0x88, 0x88, 0x20, 0x32, 0x33, 0x22, 0x23, 0x33, 0x22, 0x81, 0xb9, - 0xcf, 0xbd, 0x9b, 0x31, 0x57, 0x34, 0x33, 0x23, 0x32, 0x45, 0x43, 0x22, 0x12, 0x01, 0x22, 0x53, - 0x34, 0x22, 0x01, 0x99, 0xcb, 0xdc, 0xcd, 0xcc, 0xbc, 0xba, 0x9a, 0x88, 0x88, 0x88, 0x09, 0x10, - 0x22, 0x32, 0x33, 0x33, 0x33, 0x22, 0x13, 0x88, 0xfc, 0xcc, 0xbb, 0x0a, 0x73, 0x35, 0x34, 0x22, - 0x22, 0x34, 0x35, 0x23, 0x23, 0x11, 0x22, 0x43, 0x35, 0x33, 0x13, 0x80, 0x98, 0xda, 0xed, 0xcd, - 0xbc, 0xac, 0xaa, 0x99, 0x89, 0x89, 0x89, 0x08, 0x11, 0x21, 0x32, 0x33, 0x24, 0x32, 0x23, 0x12, - 0xa8, 0xfd, 0xdb, 0x9a, 0x28, 0x54, 0x33, 0x33, 0x43, 0x53, 0x43, 0x33, 0x23, 0x22, 0x21, 0x42, - 0x44, 0x33, 0x23, 0x01, 0x00, 0x90, 0xfb, 0xcf, 0xcc, 0xbc, 0xba, 0xa9, 0x99, 0x89, 0x89, 0x88, - 0x10, 0x21, 0x23, 0x33, 0x34, 0x33, 0x53, 0x12, 0x11, 0xca, 0xcf, 0xab, 0x0a, 0x32, 0x45, 0x32, - 0x32, 0x34, 0x45, 0x33, 0x33, 0x33, 0x21, 0x33, 0x46, 0x32, 0x13, 0x12, 0x11, 0x22, 0x80, 0xee, - 0xce, 0xdb, 0xba, 0xaa, 0xaa, 0x9a, 0xa9, 0x98, 0x08, 0x00, 0x21, 0x32, 0x42, 0x23, 0x33, 0x44, - 0x13, 0xa0, 0xde, 0xac, 0x8b, 0x18, 0x43, 0x33, 0x34, 0x43, 0x44, 0x43, 0x24, 0x23, 0x21, 0x31, - 0x53, 0x24, 0x23, 0x21, 0x11, 0x32, 0x23, 0xd0, 0xdf, 0xcc, 0xbb, 0xcb, 0xaa, 0xaa, 0xaa, 0x99, - 0x09, 0x08, 0x10, 0x22, 0x33, 0x33, 0x42, 0x44, 0x33, 0x02, 0xdc, 0xbd, 0x9c, 0x89, 0x21, 0x32, - 0x34, 0x42, 0x53, 0x44, 0x43, 0x22, 0x22, 0x22, 0x43, 0x44, 0x22, 0x12, 0x11, 0x32, 0x43, 0x82, - 0xfa, 0xcd, 0xbc, 0xcb, 0xab, 0xab, 0xab, 0xaa, 0x9a, 0x89, 0x88, 0x21, 0x22, 0x13, 0x32, 0x36, - 0x36, 0x12, 0xb0, 0xdc, 0xbb, 0x9b, 0x18, 0x31, 0x25, 0x21, 0x44, 0x45, 0x43, 0x33, 0x22, 0x23, - 0x43, 0x44, 0x33, 0x12, 0x11, 0x32, 0x44, 0x22, 0xb0, 0xed, 0xcc, 0xbb, 0xbc, 0xbb, 0xbb, 0xab, - 0xab, 0x9a, 0x89, 0x10, 0x21, 0x12, 0x11, 0x45, 0x45, 0x32, 0x81, 0xca, 0xcc, 0xaa, 0x8a, 0x01, - 0x12, 0x12, 0x53, 0x55, 0x53, 0x33, 0x32, 0x32, 0x43, 0x44, 0x33, 0x22, 0x11, 0x22, 0x44, 0x33, - 0x02, 0xd9, 0xdd, 0xcb, 0xcb, 0xbb, 0xbb, 0xbb, 0xba, 0xba, 0x99, 0x08, 0x10, 0x00, 0x00, 0x61, - 0x45, 0x33, 0x22, 0x98, 0xcd, 0xbb, 0x9b, 0x08, 0x00, 0x01, 0x22, 0x56, 0x54, 0x33, 0x33, 0x22, - 0x42, 0x34, 0x25, 0x22, 0x12, 0x21, 0x53, 0x43, 0x22, 0x91, 0xeb, 0xcc, 0xdb, 0xbb, 0xac, 0xab, - 0xab, 0xab, 0x9a, 0x09, 0x08, 0x80, 0x98, 0x20, 0x55, 0x34, 0x33, 0x81, 0xda, 0xbc, 0xab, 0x99, - 0x00, 0x00, 0x20, 0x73, 0x45, 0x34, 0x33, 0x32, 0x32, 0x35, 0x25, 0x33, 0x12, 0x21, 0x42, 0x44, - 0x23, 0x12, 0xa9, 0xdc, 0xbd, 0xcc, 0xbb, 0xbb, 0xcb, 0xab, 0x9b, 0x8a, 0x80, 0x88, 0x98, 0x88, - 0x52, 0x54, 0x33, 0x13, 0xa0, 0xcc, 0xab, 0x9b, 0x89, 0x98, 0x89, 0x40, 0x66, 0x53, 0x22, 0x22, - 0x23, 0x53, 0x53, 0x22, 0x22, 0x11, 0x31, 0x44, 0x43, 0x22, 0x01, 0xb9, 0xce, 0xbc, 0xad, 0xbb, - 0xbc, 0xbb, 0xba, 0x9a, 0x98, 0x88, 0x99, 0x99, 0x29, 0x55, 0x34, 0x33, 0x01, 0xba, 0xcc, 0xaa, - 0x99, 0xa9, 0xba, 0x09, 0x65, 0x44, 0x33, 0x24, 0x22, 0x43, 0x44, 0x23, 0x13, 0x12, 0x21, 0x44, - 0x43, 0x24, 0x22, 0x80, 0xca, 0xcd, 0xbc, 0xcb, 0xbb, 0xbc, 0xbb, 0xaa, 0x99, 0x99, 0x99, 0xaa, - 0x0a, 0x61, 0x44, 0x33, 0x12, 0xa0, 0xcb, 0xbb, 0xb9, 0xca, 0xdb, 0x9a, 0x21, 0x46, 0x53, 0x22, - 0x22, 0x43, 0x34, 0x25, 0x23, 0x11, 0x21, 0x33, 0x54, 0x33, 0x24, 0x22, 0xa8, 0xcc, 0xcc, 0xcb, - 0xcb, 0xcb, 0xab, 0xab, 0x9a, 0x98, 0xa8, 0xaa, 0x9b, 0x18, 0x64, 0x43, 0x23, 0x01, 0xa9, 0xab, - 0xa9, 0xcb, 0xdb, 0xab, 0x19, 0x73, 0x34, 0x33, 0x23, 0x44, 0x44, 0x34, 0x32, 0x12, 0x12, 0x22, - 0x34, 0x44, 0x34, 0x32, 0x00, 0xb9, 0xdc, 0xbc, 0xbd, 0xdb, 0xba, 0xbb, 0xaa, 0x9a, 0x99, 0xab, - 0xbb, 0x9b, 0x41, 0x55, 0x23, 0x12, 0x90, 0x98, 0x99, 0xaa, 0xcd, 0xcb, 0x99, 0x21, 0x45, 0x32, - 0x32, 0x52, 0x44, 0x53, 0x23, 0x23, 0x22, 0x12, 0x33, 0x45, 0x53, 0x32, 0x12, 0x80, 0xb9, 0xcd, - 0xbc, 0xbd, 0xbc, 0xcb, 0x9a, 0x9a, 0x99, 0xa9, 0xbb, 0xab, 0x19, 0x44, 0x34, 0x22, 0x01, 0x98, - 0x88, 0xb9, 0xdc, 0xcc, 0x9a, 0x08, 0x42, 0x33, 0x22, 0x43, 0x55, 0x53, 0x33, 0x24, 0x22, 0x12, - 0x22, 0x43, 0x35, 0x24, 0x33, 0x12, 0x88, 0xcb, 0xdc, 0xbc, 0xbd, 0xac, 0xab, 0xaa, 0x9a, 0xa9, - 0xbb, 0xac, 0x8a, 0x31, 0x44, 0x32, 0x11, 0x01, 0x01, 0x00, 0xda, 0xcd, 0xab, 0x89, 0x31, 0x24, - 0x23, 0x42, 0x45, 0x44, 0x43, 0x24, 0x23, 0x11, 0x12, 0x32, 0x44, 0x53, 0x23, 0x23, 0x01, 0x90, - 0xdb, 0xcd, 0xbc, 0xbd, 0xba, 0xbb, 0x9a, 0xaa, 0xbb, 0xbc, 0xab, 0x18, 0x43, 0x24, 0x13, 0x11, - 0x12, 0x02, 0xc8, 0xdd, 0xbb, 0x9b, 0x18, 0x21, 0x22, 0x33, 0x46, 0x45, 0x34, 0x25, 0x33, 0x22, - 0x12, 0x32, 0x53, 0x34, 0x44, 0x22, 0x12, 0x02, 0xa0, 0xeb, 0xcc, 0xdb, 0xbb, 0xbb, 0xab, 0xba, - 0xca, 0xcb, 0xab, 0x89, 0x20, 0x32, 0x33, 0x22, 0x33, 0x34, 0x91, 0xdd, 0xbc, 0xbb, 0x88, 0x00, - 0x12, 0x22, 0x53, 0x55, 0x54, 0x43, 0x33, 0x23, 0x23, 0x32, 0x43, 0x44, 0x24, 0x43, 0x22, 0x22, - 0x81, 0xa8, 0xcd, 0xcd, 0xcb, 0xab, 0xab, 0xba, 0xba, 0xbc, 0xbc, 0x9a, 0x09, 0x11, 0x12, 0x21, - 0x32, 0x43, 0x82, 0xea, 0xbd, 0xbb, 0x9a, 0x09, 0x00, 0x80, 0x00, 0x73, 0x45, 0x35, 0x34, 0x43, - 0x22, 0x22, 0x42, 0x33, 0x35, 0x43, 0x43, 0x22, 0x12, 0x01, 0xa9, 0xce, 0xcc, 0xbb, 0xbb, 0xba, - 0xca, 0xbb, 0xbd, 0xaa, 0x99, 0x00, 0x10, 0x20, 0x32, 0x53, 0x12, 0xa9, 0xce, 0xbb, 0xab, 0x99, - 0x88, 0x98, 0x99, 0x10, 0x55, 0x55, 0x34, 0x34, 0x32, 0x32, 0x33, 0x34, 0x44, 0x43, 0x24, 0x23, - 0x23, 0x23, 0x80, 0xea, 0xcc, 0xbc, 0xbb, 0xab, 0xbb, 0xcc, 0xcb, 0xab, 0xaa, 0x88, 0x08, 0x18, - 0x31, 0x44, 0x22, 0x81, 0xca, 0xcc, 0xab, 0x99, 0x89, 0x98, 0xa9, 0x9a, 0x30, 0x57, 0x45, 0x43, - 0x33, 0x32, 0x33, 0x34, 0x34, 0x44, 0x33, 0x34, 0x33, 0x43, 0x12, 0xa0, 0xeb, 0xcc, 0xba, 0xbb, - 0xba, 0xbc, 0xcc, 0xbb, 0xaa, 0x9a, 0x89, 0x89, 0x21, 0x43, 0x24, 0x03, 0xb8, 0xcd, 0xac, 0xaa, - 0x99, 0x9a, 0xa9, 0xab, 0xab, 0x52, 0x37, 0x36, 0x43, 0x33, 0x33, 0x33, 0x44, 0x43, 0x43, 0x43, - 0x42, 0x32, 0x23, 0x02, 0xb9, 0xdd, 0xbb, 0xac, 0xba, 0xcb, 0xbc, 0xbc, 0xab, 0xaa, 0xaa, 0x99, - 0x00, 0x32, 0x36, 0x22, 0x81, 0xca, 0xbc, 0xbb, 0xab, 0xaa, 0xca, 0xcb, 0xac, 0x08, 0x52, 0x45, - 0x53, 0x33, 0x33, 0x34, 0x42, 0x33, 0x34, 0x34, 0x34, 0x34, 0x24, 0x23, 0x80, 0xba, 0xcd, 0xab, - 0xba, 0xbc, 0xbd, 0xbc, 0xca, 0xaa, 0xa9, 0xaa, 0x89, 0x20, 0x43, 0x33, 0x12, 0xa9, 0xcc, 0xcb, - 0xaa, 0x9a, 0xb9, 0xdb, 0xbb, 0x9b, 0x28, 0x46, 0x45, 0x43, 0x33, 0x32, 0x24, 0x43, 0x33, 0x43, - 0x34, 0x44, 0x43, 0x33, 0x12, 0xa8, 0xcb, 0xac, 0xcb, 0xca, 0xcb, 0xac, 0xac, 0xaa, 0xab, 0xab, - 0x9b, 0x09, 0x42, 0x43, 0x12, 0x81, 0xb9, 0xbc, 0xbb, 0xaa, 0xaa, 0xdc, 0xcb, 0xba, 0x89, 0x41, - 0x46, 0x34, 0x43, 0x33, 0x24, 0x33, 0x24, 0x33, 0x53, 0x34, 0x35, 0x34, 0x22, 0x81, 0xa9, 0xbb, - 0xbc, 0xbc, 0xbd, 0xbc, 0xbc, 0xbb, 0xcb, 0xbb, 0xab, 0x9a, 0x20, 0x42, 0x24, 0x02, 0x98, 0xbb, - 0xbb, 0xab, 0xbb, 0xbc, 0xbe, 0xbc, 0xab, 0x18, 0x64, 0x44, 0x43, 0x33, 0x43, 0x23, 0x43, 0x23, - 0x33, 0x44, 0x45, 0x43, 0x33, 0x11, 0x80, 0xb9, 0xbb, 0xbc, 0xbd, 0xbd, 0xbc, 0xba, 0xac, 0xac, - 0xbb, 0xaa, 0x88, 0x31, 0x33, 0x14, 0x80, 0xba, 0xcb, 0xba, 0xaa, 0xcb, 0xdb, 0xbc, 0xcb, 0x99, - 0x21, 0x36, 0x35, 0x34, 0x43, 0x33, 0x43, 0x32, 0x32, 0x53, 0x54, 0x34, 0x24, 0x13, 0x02, 0x98, - 0x99, 0xba, 0xcc, 0xcc, 0xbb, 0xbb, 0xbc, 0xbc, 0xbc, 0xab, 0x9a, 0x10, 0x32, 0x33, 0x02, 0xa8, - 0xbc, 0xbb, 0xbb, 0xbb, 0xcc, 0xcc, 0xbc, 0xaa, 0x08, 0x62, 0x53, 0x34, 0x43, 0x33, 0x34, 0x33, - 0x32, 0x42, 0x54, 0x44, 0x24, 0x33, 0x12, 0x00, 0x88, 0x9a, 0xdb, 0xcc, 0xbb, 0xcb, 0xcb, 0xbb, - 0xbd, 0xbb, 0xab, 0x88, 0x21, 0x32, 0x13, 0x90, 0xba, 0xcb, 0xbb, 0xaa, 0xcb, 0xdc, 0xcb, 0xab, - 0x9b, 0x20, 0x54, 0x34, 0x35, 0x53, 0x43, 0x22, 0x22, 0x21, 0x63, 0x44, 0x53, 0x23, 0x23, 0x11, - 0x00, 0x90, 0xb9, 0xbd, 0xcc, 0xca, 0xba, 0xcb, 0xbc, 0xbc, 0xbb, 0x9a, 0x18, 0x11, 0x12, 0x01, - 0xa9, 0xba, 0xac, 0xab, 0xbb, 0xcc, 0xcc, 0xca, 0xaa, 0x09, 0x31, 0x44, 0x44, 0x44, 0x43, 0x23, - 0x23, 0x12, 0x42, 0x54, 0x34, 0x25, 0x23, 0x22, 0x11, 0x01, 0xa8, 0xca, 0xbc, 0xbc, 0xcb, 0xbb, - 0xcd, 0xac, 0xaa, 0xbb, 0x98, 0x08, 0x10, 0x00, 0xa0, 0xaa, 0xcb, 0xba, 0xba, 0xcb, 0xcc, 0xbc, - 0xbc, 0x9a, 0x08, 0x21, 0x63, 0x54, 0x53, 0x33, 0x23, 0x22, 0x21, 0x63, 0x45, 0x24, 0x43, 0x22, - 0x12, 0x12, 0x00, 0x99, 0xbc, 0xcb, 0xbb, 0xbc, 0xbd, 0xcd, 0xbb, 0xbb, 0x9a, 0x89, 0x01, 0x11, - 0x81, 0x98, 0xaa, 0xba, 0xbb, 0xca, 0xcc, 0xcc, 0xac, 0xaa, 0x8a, 0x88, 0x21, 0x54, 0x45, 0x34, - 0x24, 0x11, 0x01, 0x31, 0x55, 0x53, 0x33, 0x43, 0x32, 0x22, 0x11, 0x80, 0xba, 0xbc, 0xbb, 0xcc, - 0xdb, 0xbc, 0xbd, 0xac, 0xab, 0x99, 0x80, 0x01, 0x01, 0x81, 0x89, 0xa9, 0x9a, 0x99, 0xcb, 0xbe, - 0xbc, 0xac, 0xa9, 0x89, 0x88, 0x31, 0x57, 0x44, 0x33, 0x13, 0x11, 0x21, 0x44, 0x45, 0x43, 0x33, - 0x24, 0x23, 0x23, 0x01, 0x98, 0xba, 0xbb, 0xcc, 0xcb, 0xcd, 0xdb, 0xcb, 0xab, 0x9b, 0x99, 0x08, - 0x11, 0x00, 0x80, 0x99, 0x89, 0x88, 0xb9, 0xdd, 0xdb, 0xab, 0xab, 0x9a, 0xaa, 0x8a, 0x64, 0x55, - 0x33, 0x33, 0x11, 0x01, 0x32, 0x55, 0x44, 0x33, 0x34, 0x33, 0x43, 0x12, 0x00, 0x99, 0xab, 0xbb, - 0xdb, 0xdc, 0xdb, 0xbc, 0xbc, 0xab, 0x9a, 0x89, 0x00, 0x00, 0x00, 0x88, 0x08, 0x00, 0x88, 0xdb, - 0xcd, 0xcb, 0x9a, 0x9a, 0xbb, 0xaa, 0x39, 0x77, 0x33, 0x24, 0x12, 0x01, 0x11, 0x43, 0x45, 0x43, - 0x43, 0x33, 0x43, 0x23, 0x12, 0x88, 0x99, 0xaa, 0xba, 0xdc, 0xdc, 0xdb, 0xcb, 0xbb, 0xab, 0x9a, - 0x08, 0x08, 0x80, 0x88, 0x80, 0x18, 0x11, 0xb8, 0xce, 0xbc, 0xba, 0xba, 0xdb, 0xcb, 0x8a, 0x51, - 0x45, 0x33, 0x14, 0x02, 0x11, 0x32, 0x54, 0x34, 0x34, 0x34, 0x43, 0x33, 0x13, 0x01, 0x88, 0x9a, - 0xa9, 0xcb, 0xcc, 0xcd, 0xcc, 0xbb, 0xac, 0x9a, 0x99, 0x88, 0x80, 0x88, 0x88, 0x18, 0x11, 0x80, - 0xda, 0xbc, 0xaa, 0xbb, 0xfb, 0xcb, 0xaa, 0x19, 0x64, 0x43, 0x33, 0x22, 0x11, 0x42, 0x53, 0x53, - 0x33, 0x35, 0x53, 0x32, 0x23, 0x12, 0x00, 0x98, 0x98, 0xa8, 0xda, 0xcc, 0xcd, 0xbc, 0xcb, 0xab, - 0x9a, 0x89, 0x88, 0x88, 0x89, 0x18, 0x21, 0x01, 0xa8, 0xcc, 0xaa, 0xaa, 0xcc, 0xcd, 0xac, 0x9a, - 0x30, 0x45, 0x33, 0x23, 0x22, 0x32, 0x44, 0x44, 0x43, 0x53, 0x33, 0x35, 0x32, 0x23, 0x01, 0x00, - 0x89, 0x88, 0xaa, 0xeb, 0xcd, 0xbd, 0xbc, 0xac, 0xab, 0x99, 0x88, 0x99, 0x98, 0x88, 0x10, 0x01, - 0x98, 0xbb, 0xac, 0xaa, 0xea, 0xdc, 0xdb, 0xaa, 0x09, 0x42, 0x34, 0x33, 0x32, 0x33, 0x44, 0x53, - 0x33, 0x35, 0x35, 0x34, 0x34, 0x32, 0x22, 0x01, 0x00, 0x80, 0x80, 0xa9, 0xec, 0xdc, 0xdb, 0xbb, - 0xac, 0xa9, 0x89, 0x99, 0x9a, 0x88, 0x18, 0x10, 0x88, 0xb9, 0xbb, 0x99, 0xba, 0xee, 0xbd, 0xbc, - 0x9a, 0x10, 0x53, 0x33, 0x33, 0x43, 0x33, 0x35, 0x34, 0x34, 0x35, 0x35, 0x34, 0x24, 0x22, 0x12, - 0x01, 0x00, 0x00, 0x00, 0xa9, 0xde, 0xcc, 0xbc, 0xbb, 0xbb, 0xaa, 0xa9, 0xaa, 0x8a, 0x08, 0x01, - 0x80, 0xba, 0xdb, 0x8a, 0x98, 0xfb, 0xcd, 0xbc, 0xab, 0x89, 0x21, 0x34, 0x33, 0x43, 0x43, 0x33, - 0x34, 0x44, 0x53, 0x34, 0x35, 0x34, 0x32, 0x23, 0x11, 0x11, 0x11, 0x21, 0x01, 0xda, 0xce, 0xbd, - 0xbc, 0xba, 0xaa, 0xaa, 0xab, 0x9a, 0x88, 0x00, 0x81, 0xa9, 0xac, 0x9a, 0x08, 0xb8, 0xef, 0xbc, - 0xbc, 0x9a, 0x19, 0x21, 0x33, 0x43, 0x43, 0x43, 0x33, 0x34, 0x44, 0x44, 0x53, 0x34, 0x33, 0x24, - 0x12, 0x11, 0x11, 0x21, 0x32, 0x81, 0xfb, 0xbd, 0xbd, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb, 0x9a, 0x00, - 0x00, 0xa9, 0xdb, 0x9b, 0x08, 0x90, 0xfc, 0xdc, 0xcb, 0xab, 0x99, 0x18, 0x11, 0x22, 0x34, 0x43, - 0x24, 0x33, 0x34, 0x44, 0x54, 0x43, 0x34, 0x33, 0x23, 0x22, 0x21, 0x22, 0x43, 0x23, 0xb0, 0xde, - 0xbc, 0xbc, 0xbb, 0xcb, 0xab, 0xbb, 0x9b, 0x88, 0x80, 0x90, 0xaa, 0xab, 0x09, 0x22, 0xc8, 0xef, - 0xbc, 0xac, 0x9a, 0x89, 0x10, 0x21, 0x43, 0x34, 0x43, 0x32, 0x33, 0x53, 0x54, 0x63, 0x43, 0x42, - 0x12, 0x12, 0x11, 0x21, 0x32, 0x33, 0x02, 0xda, 0xbe, 0xcc, 0xab, 0xcb, 0xba, 0xac, 0xaa, 0x89, - 0x88, 0x80, 0xa9, 0xaa, 0x89, 0x22, 0x01, 0xfb, 0xbe, 0xad, 0xbb, 0x99, 0x88, 0x10, 0x31, 0x44, - 0x43, 0x33, 0x32, 0x32, 0x54, 0x45, 0x53, 0x43, 0x33, 0x23, 0x12, 0x21, 0x42, 0x43, 0x13, 0x91, - 0xdb, 0xbd, 0xcb, 0xcb, 0xbb, 0xbc, 0xbb, 0x9a, 0x88, 0x88, 0xa9, 0xaa, 0x9a, 0x21, 0x23, 0xc0, - 0xdf, 0xbc, 0xbc, 0xab, 0x9a, 0x89, 0x10, 0x32, 0x54, 0x33, 0x23, 0x23, 0x34, 0x55, 0x44, 0x34, - 0x34, 0x33, 0x12, 0x21, 0x32, 0x44, 0x33, 0x02, 0xa9, 0xcd, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0x9a, - 0x89, 0x88, 0x99, 0x9a, 0x9a, 0x18, 0x32, 0x02, 0xea, 0xbd, 0xbd, 0xcb, 0x9a, 0x99, 0x08, 0x21, - 0x34, 0x35, 0x23, 0x23, 0x22, 0x44, 0x54, 0x35, 0x35, 0x23, 0x23, 0x11, 0x31, 0x53, 0x33, 0x23, - 0x80, 0xcb, 0xbc, 0xbd, 0xbc, 0xbd, 0xbc, 0xab, 0xa9, 0x88, 0x99, 0xa9, 0xaa, 0x09, 0x31, 0x23, - 0xa0, 0xce, 0xbe, 0xbc, 0xba, 0xaa, 0x89, 0x28, 0x53, 0x34, 0x24, 0x23, 0x22, 0x21, 0x54, 0x45, - 0x44, 0x43, 0x22, 0x11, 0x11, 0x32, 0x25, 0x23, 0x01, 0xa8, 0xcb, 0xcb, 0xdb, 0xcc, 0xcb, 0xbb, - 0xaa, 0x99, 0x98, 0xa9, 0x9b, 0x8a, 0x11, 0x43, 0x02, 0xc9, 0xcd, 0xcc, 0xbb, 0xba, 0xaa, 0x89, - 0x31, 0x63, 0x34, 0x32, 0x22, 0x01, 0x52, 0x64, 0x44, 0x43, 0x33, 0x12, 0x21, 0x33, 0x44, 0x43, - 0x11, 0x81, 0x99, 0xb9, 0xdb, 0xdc, 0xbc, 0xbc, 0xba, 0xa9, 0x99, 0xa9, 0xab, 0x9b, 0x08, 0x31, - 0x23, 0x98, 0xed, 0xbc, 0xad, 0xbb, 0xbb, 0xa9, 0x08, 0x32, 0x45, 0x43, 0x22, 0x11, 0x10, 0x53, - 0x56, 0x34, 0x33, 0x23, 0x22, 0x22, 0x54, 0x33, 0x33, 0x02, 0x00, 0x98, 0xcb, 0xcd, 0xcd, 0xcb, - 0xab, 0x9b, 0x9a, 0xaa, 0xaa, 0xab, 0x9a, 0x20, 0x33, 0x13, 0xb8, 0xcf, 0xdb, 0xcb, 0xab, 0x9b, - 0x8a, 0x18, 0x53, 0x34, 0x34, 0x12, 0x00, 0x31, 0x57, 0x34, 0x25, 0x23, 0x12, 0x21, 0x42, 0x34, - 0x33, 0x22, 0x11, 0x00, 0x99, 0xfb, 0xcd, 0xbc, 0xcb, 0xaa, 0xaa, 0xaa, 0xba, 0xbb, 0xba, 0x89, - 0x11, 0x23, 0x01, 0xca, 0xcd, 0xbc, 0xcc, 0xba, 0x9a, 0x99, 0x21, 0x54, 0x43, 0x13, 0x11, 0x20, - 0x54, 0x45, 0x34, 0x33, 0x22, 0x22, 0x33, 0x26, 0x24, 0x22, 0x22, 0x11, 0x01, 0xb8, 0xed, 0xbc, - 0xcc, 0xaa, 0xaa, 0xaa, 0xba, 0xbb, 0xbb, 0x9b, 0x09, 0x22, 0x22, 0x81, 0xba, 0xdf, 0xcb, 0xbb, - 0xac, 0x9b, 0x09, 0x42, 0x35, 0x24, 0x11, 0x01, 0x41, 0x55, 0x44, 0x33, 0x23, 0x22, 0x33, 0x44, - 0x43, 0x23, 0x32, 0x32, 0x32, 0x82, 0xea, 0xcd, 0xbc, 0xbc, 0xba, 0xaa, 0xbb, 0xbc, 0xbb, 0xac, - 0x99, 0x00, 0x00, 0x01, 0x98, 0xbc, 0xbe, 0xcb, 0xac, 0xbb, 0x9a, 0x28, 0x53, 0x34, 0x22, 0x01, - 0x21, 0x65, 0x54, 0x33, 0x33, 0x23, 0x33, 0x44, 0x43, 0x32, 0x33, 0x43, 0x23, 0x23, 0x90, 0xdc, - 0xcd, 0xcb, 0xba, 0xab, 0xbb, 0xcb, 0xbb, 0xac, 0x9a, 0x89, 0x00, 0x12, 0x01, 0xba, 0xbd, 0xbd, - 0xcc, 0xbb, 0xab, 0x8a, 0x31, 0x45, 0x22, 0x01, 0x09, 0x51, 0x46, 0x34, 0x43, 0x22, 0x23, 0x43, - 0x34, 0x33, 0x34, 0x33, 0x34, 0x24, 0x02, 0xa8, 0xcd, 0xbc, 0xbc, 0xbb, 0xbb, 0xac, 0xcb, 0xab, - 0xab, 0xaa, 0x08, 0x10, 0x00, 0x98, 0xca, 0xdc, 0xcb, 0xdb, 0xba, 0xab, 0x18, 0x43, 0x24, 0x02, - 0x98, 0x10, 0x55, 0x35, 0x44, 0x22, 0x32, 0x42, 0x33, 0x34, 0x43, 0x33, 0x34, 0x34, 0x22, 0x01, - 0xca, 0xcd, 0xbb, 0xbc, 0xbb, 0xbc, 0xca, 0xba, 0xbb, 0xba, 0x99, 0x80, 0x00, 0x80, 0xa9, 0xcc, - 0xbc, 0xcc, 0xcc, 0xaa, 0x89, 0x30, 0x43, 0x12, 0x90, 0x08, 0x52, 0x46, 0x34, 0x33, 0x34, 0x33, - 0x44, 0x32, 0x24, 0x33, 0x44, 0x33, 0x34, 0x21, 0x88, 0xcb, 0xbd, 0xbc, 0xcb, 0xba, 0xbb, 0xcb, - 0xac, 0xab, 0x9a, 0x89, 0x00, 0x10, 0x80, 0xa9, 0xba, 0xce, 0xdc, 0xbb, 0xaa, 0x18, 0x42, 0x12, - 0x81, 0x99, 0x20, 0x56, 0x44, 0x33, 0x34, 0x43, 0x33, 0x34, 0x42, 0x32, 0x34, 0x34, 0x44, 0x22, - 0x01, 0x99, 0xcb, 0xcc, 0xbb, 0xac, 0xbb, 0xcb, 0xcb, 0xba, 0xab, 0x9a, 0x08, 0x08, 0x08, 0x80, - 0x98, 0xca, 0xcf, 0xbc, 0xbb, 0x8a, 0x20, 0x12, 0x81, 0xba, 0x9a, 0x62, 0x55, 0x43, 0x34, 0x33, - 0x25, 0x33, 0x43, 0x33, 0x53, 0x43, 0x34, 0x24, 0x12, 0x81, 0xa8, 0xcc, 0xcb, 0xbb, 0xcb, 0xbb, - 0xbc, 0xcb, 0xbb, 0xaa, 0x99, 0x98, 0x08, 0x08, 0x11, 0x90, 0xfb, 0xce, 0xbb, 0x9a, 0x08, 0x20, - 0x00, 0xa9, 0xa9, 0x10, 0x45, 0x36, 0x44, 0x43, 0x33, 0x34, 0x33, 0x43, 0x33, 0x44, 0x34, 0x34, - 0x23, 0x12, 0x91, 0xca, 0xcc, 0xbb, 0xbc, 0xcb, 0xbb, 0xbc, 0xac, 0xab, 0xaa, 0x99, 0x89, 0x08, - 0x20, 0x22, 0xa8, 0xdf, 0xdb, 0xaa, 0x8a, 0x00, 0x01, 0x99, 0xaa, 0x99, 0x31, 0x46, 0x45, 0x43, - 0x34, 0x33, 0x34, 0x23, 0x43, 0x53, 0x43, 0x43, 0x33, 0x33, 0x11, 0x98, 0xdb, 0xbc, 0xbc, 0xbb, - 0xbc, 0xbc, 0xbc, 0xbb, 0xab, 0xaa, 0xa9, 0x99, 0x20, 0x32, 0x13, 0xfb, 0xbe, 0xbc, 0xaa, 0x88, - 0x80, 0x98, 0xaa, 0xaa, 0x0a, 0x63, 0x45, 0x34, 0x44, 0x43, 0x23, 0x33, 0x33, 0x34, 0x44, 0x34, - 0x34, 0x33, 0x23, 0x01, 0xb9, 0xcc, 0xbc, 0xcb, 0xbb, 0xcc, 0xbb, 0xbc, 0xba, 0xaa, 0x9a, 0x9a, - 0x00, 0x33, 0x25, 0x91, 0xeb, 0xad, 0xab, 0x9a, 0x88, 0x99, 0xc9, 0xba, 0xaa, 0x18, 0x44, 0x54, - 0x44, 0x43, 0x43, 0x23, 0x23, 0x33, 0x44, 0x53, 0x43, 0x33, 0x24, 0x22, 0x80, 0xaa, 0xbc, 0xac, - 0xbc, 0xcb, 0xbc, 0xbc, 0xba, 0xab, 0xbb, 0xba, 0x89, 0x31, 0x44, 0x02, 0xc8, 0xdb, 0xac, 0xaa, - 0x89, 0x89, 0xaa, 0xbb, 0xac, 0x99, 0x30, 0x64, 0x54, 0x43, 0x43, 0x33, 0x33, 0x32, 0x34, 0x44, - 0x43, 0x44, 0x33, 0x33, 0x11, 0xa0, 0xca, 0xbb, 0xbd, 0xbc, 0xcc, 0xbb, 0xac, 0xab, 0xbb, 0xbb, - 0xaa, 0x28, 0x43, 0x33, 0x91, 0xda, 0xcc, 0xba, 0x99, 0x99, 0xa9, 0xcb, 0xcb, 0x9a, 0x89, 0x42, - 0x46, 0x44, 0x43, 0x33, 0x43, 0x22, 0x33, 0x33, 0x55, 0x43, 0x53, 0x32, 0x13, 0x01, 0xa9, 0xba, - 0xdb, 0xcb, 0xbc, 0xbc, 0xbc, 0xba, 0xbb, 0xbc, 0xbb, 0x89, 0x31, 0x43, 0x12, 0xa0, 0xcc, 0xbb, - 0xab, 0xa9, 0xaa, 0xbc, 0xbc, 0xbc, 0x9a, 0x18, 0x73, 0x54, 0x43, 0x43, 0x32, 0x33, 0x33, 0x33, - 0x44, 0x44, 0x44, 0x33, 0x24, 0x12, 0x80, 0x99, 0xab, 0xbc, 0xcd, 0xcb, 0xab, 0xcb, 0xca, 0xba, - 0xbb, 0x9b, 0x08, 0x32, 0x24, 0x81, 0xb9, 0xcc, 0xaa, 0xab, 0xaa, 0xbb, 0xcc, 0xac, 0xbb, 0x99, - 0x30, 0x37, 0x45, 0x43, 0x43, 0x32, 0x32, 0x23, 0x33, 0x45, 0x44, 0x44, 0x32, 0x22, 0x02, 0x88, - 0xa8, 0xba, 0xcd, 0xdb, 0xba, 0xbb, 0xcb, 0xbc, 0xac, 0xab, 0x89, 0x20, 0x32, 0x13, 0x90, 0xba, - 0xbd, 0xba, 0xab, 0xba, 0xdb, 0xdb, 0xbb, 0xaa, 0x09, 0x53, 0x55, 0x43, 0x34, 0x42, 0x32, 0x23, - 0x22, 0x43, 0x54, 0x44, 0x24, 0x23, 0x12, 0x81, 0x90, 0x99, 0xbc, 0xcd, 0xba, 0xac, 0xbb, 0xcc, - 0xbb, 0xac, 0xaa, 0x08, 0x21, 0x22, 0x11, 0x99, 0xbb, 0xcb, 0xab, 0xab, 0xca, 0xbc, 0xbd, 0xbb, - 0xaa, 0x20, 0x64, 0x34, 0x35, 0x53, 0x33, 0x33, 0x32, 0x32, 0x64, 0x44, 0x53, 0x32, 0x22, 0x12, - 0x00, 0x88, 0xb9, 0xcd, 0xbb, 0xbc, 0xcb, 0xcb, 0xbc, 0xbc, 0xab, 0x8a, 0x18, 0x11, 0x12, 0x80, - 0xa9, 0xbb, 0xbc, 0xba, 0xbb, 0xcc, 0xbc, 0xbc, 0xab, 0x0a, 0x41, 0x44, 0x54, 0x43, 0x34, 0x33, - 0x22, 0x22, 0x33, 0x47, 0x44, 0x33, 0x23, 0x23, 0x12, 0x01, 0xa8, 0xdb, 0xbc, 0xbc, 0xbb, 0xbd, - 0xcc, 0xbb, 0xbb, 0x6c, 0x02, 0x01, 0x39, 0x7d, 0x0a, 0x02, 0xd3, 0x06, 0x19, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x9f, 0x80, 0x88, 0x88, 0x8b, 0x32, 0x92, 0x70, 0x24, - 0x34, 0x14, 0x88, 0x89, 0x09, 0x80, 0xcc, 0xcc, 0xbc, 0xcb, 0x89, 0x31, 0xa0, 0x40, 0xda, 0x41, - 0x24, 0xf8, 0x5a, 0x04, 0x08, 0x22, 0x91, 0x10, 0x90, 0xa9, 0x50, 0xf0, 0x9d, 0x18, 0xa9, 0x18, - 0x02, 0x09, 0x32, 0x32, 0xfa, 0x49, 0x15, 0x08, 0x21, 0x31, 0x26, 0xa0, 0xaa, 0x50, 0x04, 0xdc, - 0x8a, 0xb8, 0x18, 0xa0, 0x9a, 0x31, 0x46, 0x91, 0x9b, 0x00, 0x42, 0x15, 0x98, 0x30, 0x35, 0x82, - 0xbd, 0x50, 0x91, 0x98, 0xee, 0x8a, 0x00, 0xa0, 0xaa, 0x30, 0x15, 0x90, 0x98, 0x88, 0x22, 0x02, - 0x98, 0x62, 0x36, 0xb8, 0x9a, 0x10, 0x54, 0xd8, 0xbd, 0x9a, 0x88, 0xa9, 0x9c, 0x32, 0x23, 0x01, - 0x99, 0x20, 0x34, 0x92, 0x8c, 0x76, 0x12, 0x08, 0xa9, 0x29, 0x27, 0xa0, 0xdc, 0x9a, 0x88, 0xb9, - 0x89, 0x10, 0x35, 0x22, 0x80, 0x19, 0x45, 0xa0, 0x39, 0x36, 0x21, 0x01, 0xab, 0x41, 0x55, 0xa1, - 0xbd, 0x8a, 0xb9, 0xcb, 0x9a, 0x20, 0x34, 0x24, 0xa8, 0x50, 0x04, 0x99, 0x10, 0x52, 0x33, 0x90, - 0xbb, 0x5a, 0x27, 0xa0, 0xbb, 0xbb, 0xbc, 0xcc, 0xab, 0x19, 0x53, 0x83, 0x18, 0x32, 0x02, 0x98, - 0x39, 0x36, 0x54, 0x91, 0xbc, 0x40, 0x33, 0x90, 0xbc, 0xbb, 0xce, 0xab, 0xcc, 0x19, 0x31, 0x01, - 0x22, 0x43, 0x82, 0x88, 0x00, 0x51, 0x36, 0xa1, 0x9a, 0x62, 0x34, 0x81, 0xa8, 0xca, 0xab, 0xec, - 0xcb, 0x99, 0x00, 0x88, 0x09, 0x23, 0x11, 0x12, 0x10, 0x67, 0x34, 0x12, 0x21, 0x73, 0x23, 0x01, - 0xa8, 0xbb, 0xdb, 0xdc, 0xbb, 0xab, 0x88, 0x9a, 0x18, 0x31, 0x24, 0x03, 0x30, 0x57, 0x24, 0x02, - 0x11, 0x43, 0x33, 0x02, 0xca, 0xdb, 0xdb, 0xcc, 0xcb, 0x9a, 0x88, 0x09, 0x18, 0x21, 0x24, 0x02, - 0x11, 0x55, 0x24, 0x11, 0x11, 0x32, 0x34, 0x02, 0xb9, 0xbc, 0xdc, 0xdc, 0xbb, 0xab, 0x9a, 0x98, - 0x08, 0x32, 0x44, 0x82, 0x10, 0x54, 0x43, 0x12, 0x11, 0x32, 0x34, 0x13, 0xa8, 0xaa, 0xfb, 0xce, - 0xbb, 0xbb, 0xaa, 0xaa, 0x99, 0x31, 0x26, 0x11, 0x32, 0x45, 0x24, 0x12, 0x00, 0x21, 0x44, 0x02, - 0x88, 0x80, 0xc9, 0xdd, 0xbc, 0xcb, 0xa9, 0xa9, 0x9a, 0x10, 0x23, 0x11, 0x51, 0x45, 0x34, 0x22, - 0x02, 0x31, 0x34, 0x12, 0x00, 0x81, 0xea, 0xdd, 0xbc, 0xbb, 0xaa, 0xbb, 0x9b, 0x10, 0x33, 0x22, - 0x63, 0x54, 0x34, 0x23, 0x11, 0x32, 0x43, 0x11, 0x00, 0x81, 0xb9, 0xee, 0xcc, 0xbb, 0xba, 0xac, - 0x9a, 0x18, 0x21, 0x21, 0x32, 0x65, 0x34, 0x22, 0x22, 0x32, 0x33, 0x21, 0x11, 0x00, 0x98, 0xef, - 0xcc, 0xba, 0xbb, 0xdb, 0x9a, 0x08, 0x12, 0x13, 0x22, 0x64, 0x34, 0x22, 0x21, 0x22, 0x23, 0x21, - 0x90, 0x00, 0x90, 0xfd, 0xcc, 0xba, 0xba, 0xbc, 0xab, 0x89, 0x11, 0x02, 0x18, 0x55, 0x35, 0x23, - 0x32, 0x32, 0x33, 0x12, 0x10, 0x20, 0x13, 0xfd, 0xbc, 0xcb, 0xbc, 0xcb, 0xac, 0x09, 0x00, 0x81, - 0x08, 0x63, 0x43, 0x33, 0x22, 0x32, 0x43, 0x12, 0x00, 0x41, 0x12, 0xc9, 0xcc, 0xbc, 0xcc, 0xcb, - 0xac, 0x9a, 0x80, 0x98, 0x09, 0x41, 0x44, 0x33, 0x23, 0x24, 0x34, 0x12, 0x10, 0x32, 0x23, 0xa8, - 0xdd, 0xcb, 0xdb, 0xdb, 0xbb, 0x9a, 0x08, 0x99, 0x99, 0x31, 0x46, 0x33, 0x33, 0x53, 0x34, 0x22, - 0x21, 0x33, 0x23, 0x90, 0xcd, 0xbc, 0xbc, 0xdd, 0xbb, 0xaa, 0x99, 0xa9, 0x99, 0x20, 0x45, 0x24, - 0x32, 0x44, 0x32, 0x12, 0x12, 0x32, 0x22, 0x90, 0xdc, 0xbb, 0xeb, 0xdc, 0xbb, 0xaa, 0x99, 0x99, - 0x99, 0x20, 0x45, 0x24, 0x32, 0x34, 0x24, 0x12, 0x22, 0x22, 0x33, 0x91, 0xcc, 0xab, 0xdc, 0xdc, - 0xcb, 0x9a, 0x8a, 0x99, 0x9a, 0x18, 0x43, 0x43, 0x42, 0x34, 0x33, 0x32, 0x12, 0x52, 0x23, 0x82, - 0xba, 0x9a, 0xea, 0xce, 0xcb, 0xab, 0x99, 0xa9, 0xab, 0x89, 0x33, 0x34, 0x45, 0x34, 0x43, 0x22, - 0x11, 0x32, 0x34, 0x81, 0xa9, 0x99, 0xea, 0xdc, 0xcc, 0xab, 0x99, 0xa9, 0xba, 0x09, 0x20, 0x42, - 0x35, 0x44, 0x24, 0x23, 0x21, 0x42, 0x24, 0x00, 0x88, 0x99, 0xa9, 0xdd, 0xcc, 0xab, 0xa9, 0xb9, - 0xab, 0x9a, 0x18, 0x43, 0x54, 0x43, 0x34, 0x13, 0x21, 0x42, 0x33, 0x12, 0x80, 0x08, 0xa9, 0xdf, - 0xbd, 0xac, 0xa9, 0xaa, 0xaa, 0x9a, 0x08, 0x31, 0x44, 0x54, 0x43, 0x13, 0x12, 0x43, 0x32, 0x12, - 0x80, 0x09, 0x00, 0xfb, 0xbf, 0xba, 0xbb, 0xbb, 0xcb, 0xaa, 0x88, 0x11, 0x42, 0x45, 0x34, 0x23, - 0x21, 0x33, 0x43, 0x22, 0x88, 0x20, 0x23, 0xfa, 0xbe, 0xbc, 0xbb, 0xbb, 0xcb, 0xab, 0x8a, 0x08, - 0x38, 0x56, 0x34, 0x23, 0x32, 0x43, 0x34, 0x12, 0x80, 0x20, 0x01, 0xd9, 0xbe, 0xcc, 0xba, 0xba, - 0xcb, 0xaa, 0x98, 0x08, 0x10, 0x46, 0x43, 0x23, 0x22, 0x42, 0x43, 0x12, 0x00, 0x21, 0x12, 0xb0, - 0xed, 0xbc, 0xcb, 0xba, 0xcc, 0x9a, 0xa9, 0x99, 0x08, 0x42, 0x54, 0x32, 0x21, 0x53, 0x33, 0x13, - 0x10, 0x22, 0x12, 0x91, 0xec, 0xcc, 0xab, 0xbc, 0xbc, 0xab, 0xaa, 0xab, 0x89, 0x40, 0x36, 0x33, - 0x23, 0x45, 0x43, 0x12, 0x12, 0x22, 0x22, 0x82, 0xfa, 0xcb, 0xcb, 0xcb, 0xac, 0xaa, 0xab, 0xaa, - 0x9a, 0x30, 0x46, 0x23, 0x32, 0x54, 0x23, 0x23, 0x12, 0x22, 0x33, 0x13, 0xda, 0xbd, 0xdb, 0xbc, - 0xbc, 0xab, 0xbb, 0xbb, 0xbb, 0x28, 0x46, 0x23, 0x33, 0x45, 0x33, 0x23, 0x13, 0x22, 0x34, 0x13, - 0xb8, 0xbd, 0xcc, 0xcc, 0xbb, 0xac, 0xab, 0xbb, 0xad, 0x19, 0x22, 0x33, 0x43, 0x44, 0x34, 0x33, - 0x22, 0x32, 0x36, 0x13, 0x81, 0xa8, 0xda, 0xbc, 0xbd, 0xbc, 0xaa, 0xdb, 0xbb, 0x09, 0x21, 0x22, - 0x33, 0x45, 0x34, 0x24, 0x11, 0x22, 0x44, 0x22, 0x01, 0x98, 0xba, 0xdc, 0xbc, 0xac, 0xaa, 0xcc, - 0xbb, 0x99, 0x10, 0x12, 0x33, 0x44, 0x36, 0x23, 0x12, 0x32, 0x35, 0x23, 0x12, 0x80, 0xb9, 0xec, - 0xcc, 0xaa, 0xba, 0xcc, 0xbb, 0x9a, 0x00, 0x21, 0x21, 0x63, 0x35, 0x23, 0x23, 0x42, 0x43, 0x33, - 0x12, 0x00, 0x98, 0xfb, 0xbd, 0xab, 0xba, 0xcd, 0xbb, 0x9b, 0x09, 0x11, 0x20, 0x53, 0x36, 0x33, - 0x22, 0x23, 0x35, 0x24, 0x12, 0x00, 0x91, 0xfb, 0xbc, 0xba, 0xcb, 0xcb, 0xbc, 0xab, 0x89, 0x00, - 0x10, 0x63, 0x34, 0x24, 0x22, 0x32, 0x53, 0x23, 0x22, 0x31, 0x01, 0xeb, 0xcc, 0xba, 0xbb, 0xcc, - 0xcc, 0xaa, 0x88, 0x88, 0x08, 0x31, 0x35, 0x25, 0x13, 0x32, 0x34, 0x24, 0x21, 0x33, 0x03, 0xc9, - 0xcc, 0xbb, 0xbc, 0xeb, 0xbc, 0xbb, 0x9a, 0x98, 0x88, 0x31, 0x55, 0x43, 0x22, 0x31, 0x34, 0x32, - 0x32, 0x34, 0x22, 0xa8, 0xcc, 0xac, 0xbb, 0xdc, 0xcc, 0xab, 0x9a, 0x99, 0x89, 0x00, 0x44, 0x34, - 0x22, 0x42, 0x33, 0x33, 0x34, 0x34, 0x23, 0x80, 0xda, 0xac, 0xba, 0xdc, 0xcc, 0xba, 0xaa, 0xa9, - 0x99, 0x08, 0x52, 0x34, 0x22, 0x43, 0x43, 0x22, 0x43, 0x43, 0x32, 0x01, 0xba, 0xbb, 0xbc, 0xdd, - 0xbc, 0xad, 0xab, 0xa9, 0x9a, 0x0a, 0x32, 0x35, 0x43, 0x43, 0x43, 0x22, 0x33, 0x44, 0x33, 0x02, - 0xa8, 0xaa, 0xcb, 0xdc, 0xbc, 0xbd, 0xab, 0xba, 0xba, 0x9a, 0x21, 0x24, 0x34, 0x34, 0x34, 0x33, - 0x34, 0x54, 0x23, 0x12, 0x90, 0x99, 0xa9, 0xdb, 0xcd, 0xbc, 0xab, 0xbb, 0xac, 0x9a, 0x00, 0x22, - 0x34, 0x44, 0x43, 0x22, 0x33, 0x45, 0x43, 0x12, 0x81, 0x98, 0x88, 0xb9, 0xde, 0xbb, 0xac, 0xbb, - 0xbc, 0x9a, 0x88, 0x21, 0x32, 0x35, 0x35, 0x22, 0x32, 0x45, 0x34, 0x23, 0x01, 0x88, 0x08, 0xb8, - 0xce, 0xbc, 0xcb, 0xcb, 0xbb, 0xab, 0x8a, 0x18, 0x22, 0x44, 0x25, 0x13, 0x32, 0x54, 0x43, 0x33, - 0x11, 0x80, 0x10, 0x98, 0xcd, 0xac, 0xcb, 0xcb, 0xac, 0xab, 0x9a, 0x88, 0x10, 0x52, 0x43, 0x22, - 0x31, 0x44, 0x35, 0x24, 0x02, 0x00, 0x01, 0x90, 0xdb, 0xbc, 0xcb, 0xbc, 0xbc, 0xbb, 0xaa, 0x89, - 0x08, 0x53, 0x34, 0x32, 0x22, 0x63, 0x35, 0x34, 0x12, 0x10, 0x11, 0x80, 0xca, 0xbc, 0xcc, 0xcb, - 0xbc, 0xbb, 0xaa, 0x9a, 0x09, 0x41, 0x34, 0x33, 0x22, 0x53, 0x46, 0x33, 0x12, 0x12, 0x21, 0x80, - 0xb9, 0xcd, 0xcb, 0xdb, 0xbc, 0xab, 0xbb, 0xaa, 0x8a, 0x31, 0x44, 0x24, 0x11, 0x32, 0x47, 0x33, - 0x22, 0x22, 0x22, 0x11, 0xa9, 0xbd, 0xbc, 0xcd, 0xbc, 0xbb, 0xcb, 0xba, 0x99, 0x18, 0x42, 0x24, - 0x11, 0x42, 0x35, 0x35, 0x22, 0x22, 0x22, 0x12, 0xa8, 0xbb, 0xcd, 0xcc, 0xbc, 0xbc, 0xca, 0xaa, - 0x9a, 0x09, 0x32, 0x34, 0x11, 0x42, 0x45, 0x43, 0x23, 0x22, 0x33, 0x22, 0x80, 0xaa, 0xcc, 0xdc, - 0xcb, 0xac, 0xbb, 0xac, 0xaa, 0x0a, 0x31, 0x33, 0x22, 0x53, 0x45, 0x34, 0x32, 0x43, 0x22, 0x13, - 0x00, 0x89, 0xca, 0xcc, 0xbd, 0xbc, 0xbb, 0xbc, 0xcb, 0x99, 0x21, 0x22, 0x12, 0x31, 0x46, 0x43, - 0x24, 0x32, 0x43, 0x12, 0x01, 0x80, 0x98, 0xcc, 0xcc, 0xcb, 0xcb, 0xca, 0xba, 0x9a, 0x10, 0x22, - 0x22, 0x31, 0x54, 0x44, 0x32, 0x43, 0x33, 0x23, 0x12, 0x01, 0x98, 0xda, 0xcd, 0xbc, 0xbb, 0xcc, - 0xac, 0x9b, 0x00, 0x11, 0x01, 0x21, 0x52, 0x44, 0x32, 0x34, 0x24, 0x23, 0x12, 0x11, 0x88, 0xb8, - 0xce, 0xcb, 0xbb, 0xbd, 0xbd, 0xaa, 0x08, 0x10, 0x10, 0x20, 0x52, 0x43, 0x43, 0x34, 0x43, 0x23, - 0x22, 0x11, 0x01, 0xa9, 0xdd, 0xcb, 0xbb, 0xcd, 0xcb, 0x9b, 0x89, 0x18, 0x00, 0x10, 0x33, 0x35, - 0x53, 0x34, 0x24, 0x33, 0x23, 0x12, 0x12, 0x90, 0xcd, 0xcb, 0xcb, 0xcc, 0xdb, 0xba, 0x89, 0x88, - 0x00, 0x00, 0x22, 0x43, 0x34, 0x35, 0x34, 0x34, 0x22, 0x12, 0x22, 0x81, 0xcb, 0xbc, 0xbc, 0xdc, - 0xcc, 0xba, 0x9a, 0x88, 0x88, 0x10, 0x11, 0x33, 0x35, 0x35, 0x44, 0x33, 0x33, 0x33, 0x24, 0x01, - 0xa9, 0xcb, 0xcb, 0xdc, 0xcc, 0xac, 0x9a, 0x99, 0x88, 0x80, 0x11, 0x21, 0x43, 0x34, 0x45, 0x33, - 0x23, 0x43, 0x32, 0x02, 0x98, 0xca, 0xba, 0xdc, 0xbe, 0xbc, 0xba, 0xa9, 0x98, 0x88, 0x18, 0x22, - 0x33, 0x55, 0x34, 0x34, 0x33, 0x43, 0x33, 0x22, 0x90, 0xba, 0xb9, 0xde, 0xdc, 0xcb, 0xaa, 0x9a, - 0x99, 0x88, 0x08, 0x12, 0x22, 0x63, 0x34, 0x34, 0x43, 0x33, 0x43, 0x13, 0x91, 0x98, 0x98, 0xea, - 0xcd, 0xbc, 0xac, 0xaa, 0xa9, 0x89, 0x08, 0x01, 0x12, 0x53, 0x44, 0x43, 0x33, 0x34, 0x24, 0x23, - 0x00, 0x88, 0x88, 0xc9, 0xdd, 0xcc, 0xab, 0xab, 0xaa, 0x99, 0x88, 0x01, 0x11, 0x42, 0x54, 0x43, - 0x33, 0x44, 0x24, 0x23, 0x01, 0x00, 0x00, 0x98, 0xcd, 0xcd, 0xbb, 0xcb, 0xaa, 0xa9, 0x88, 0x88, - 0x00, 0x31, 0x54, 0x24, 0x43, 0x53, 0x43, 0x22, 0x11, 0x01, 0x01, 0x80, 0xeb, 0xcc, 0xbc, 0xbb, - 0xac, 0x9a, 0x89, 0x88, 0x80, 0x20, 0x44, 0x43, 0x33, 0x54, 0x34, 0x23, 0x22, 0x10, 0x11, 0x81, - 0xd9, 0xcd, 0xbc, 0xac, 0xbb, 0xab, 0x99, 0x98, 0x88, 0x20, 0x63, 0x33, 0x34, 0x54, 0x53, 0x22, - 0x12, 0x11, 0x10, 0x11, 0xb9, 0xcd, 0xbd, 0xcc, 0xba, 0xaa, 0x99, 0x98, 0x88, 0x08, 0x43, 0x43, - 0x42, 0x53, 0x44, 0x33, 0x22, 0x11, 0x12, 0x12, 0xa0, 0xdc, 0xcc, 0xdb, 0xbb, 0xba, 0x9a, 0x89, - 0x9a, 0x08, 0x42, 0x33, 0x53, 0x44, 0x44, 0x43, 0x12, 0x12, 0x11, 0x12, 0x80, 0xbb, 0xbf, 0xbd, - 0xbc, 0xac, 0x99, 0x99, 0x99, 0x09, 0x30, 0x22, 0x43, 0x63, 0x44, 0x34, 0x32, 0x21, 0x22, 0x13, - 0x01, 0xb8, 0xce, 0xcc, 0xbc, 0xbb, 0xaa, 0xa9, 0xab, 0x8a, 0x20, 0x32, 0x23, 0x55, 0x45, 0x34, - 0x32, 0x22, 0x32, 0x22, 0x12, 0xa8, 0xeb, 0xdc, 0xbc, 0xac, 0x9b, 0xaa, 0xaa, 0x99, 0x00, 0x22, - 0x21, 0x53, 0x55, 0x34, 0x32, 0x33, 0x32, 0x33, 0x12, 0x91, 0xda, 0xcd, 0xcd, 0xab, 0xab, 0xba, - 0xba, 0x9a, 0x18, 0x11, 0x12, 0x43, 0x47, 0x53, 0x23, 0x33, 0x32, 0x33, 0x22, 0x11, 0xa8, 0xed, - 0xbd, 0xbc, 0xab, 0xab, 0xbb, 0xaa, 0x09, 0x10, 0x11, 0x32, 0x47, 0x35, 0x34, 0x32, 0x33, 0x24, - 0x22, 0x21, 0x81, 0xea, 0xcd, 0xcb, 0xaa, 0xab, 0xab, 0xab, 0x89, 0x00, 0x01, 0x20, 0x64, 0x44, - 0x34, 0x32, 0x43, 0x32, 0x22, 0x12, 0x12, 0xc8, 0xce, 0xbc, 0xcb, 0xaa, 0xbb, 0xba, 0x8a, 0x08, - 0x80, 0x18, 0x63, 0x45, 0x43, 0x33, 0x43, 0x23, 0x23, 0x23, 0x23, 0xa8, 0xde, 0xbc, 0xac, 0xab, - 0xcb, 0xaa, 0x9a, 0x08, 0x08, 0x88, 0x41, 0x36, 0x34, 0x34, 0x34, 0x32, 0x32, 0x32, 0x14, 0x81, - 0xfa, 0xcb, 0xcb, 0xba, 0xcb, 0xab, 0x9a, 0x89, 0x90, 0x88, 0x31, 0x46, 0x24, 0x34, 0x34, 0x33, - 0x32, 0x32, 0x24, 0x82, 0xd9, 0xdc, 0xab, 0xac, 0xcb, 0xba, 0x9a, 0x89, 0x98, 0x88, 0x10, 0x44, - 0x43, 0x35, 0x34, 0x24, 0x13, 0x33, 0x33, 0x23, 0xb8, 0xbf, 0xcc, 0xbb, 0xdb, 0xbb, 0xaa, 0x99, - 0x99, 0x99, 0x10, 0x53, 0x53, 0x53, 0x34, 0x33, 0x33, 0x43, 0x43, 0x12, 0x80, 0xdb, 0xcb, 0xbc, - 0xbc, 0xbc, 0xaa, 0x99, 0xa9, 0x99, 0x18, 0x31, 0x63, 0x63, 0x43, 0x33, 0x33, 0x43, 0x34, 0x23, - 0x00, 0xba, 0xbd, 0xbd, 0xcc, 0xcb, 0x9a, 0x9a, 0x99, 0x9a, 0x88, 0x01, 0x32, 0x46, 0x34, 0x34, - 0x32, 0x43, 0x43, 0x23, 0x02, 0x99, 0xdb, 0xcb, 0xbd, 0xbc, 0xbb, 0xaa, 0xaa, 0xaa, 0x98, 0x08, - 0x21, 0x55, 0x34, 0x25, 0x33, 0x43, 0x53, 0x23, 0x02, 0x90, 0xa9, 0xcc, 0xcc, 0xcb, 0xbb, 0xaa, - 0xab, 0x9a, 0x9a, 0x89, 0x20, 0x53, 0x55, 0x33, 0x43, 0x42, 0x43, 0x43, 0x12, 0x80, 0x98, 0xba, - 0xcd, 0xcc, 0xaa, 0xab, 0xab, 0xaa, 0xa9, 0x89, 0x08, 0x41, 0x45, 0x34, 0x33, 0x53, 0x34, 0x34, - 0x22, 0x01, 0x90, 0xb8, 0xdc, 0xbc, 0xbc, 0xbb, 0xba, 0xab, 0xba, 0x9a, 0x99, 0x30, 0x37, 0x35, - 0x33, 0x34, 0x45, 0x33, 0x24, 0x11, 0x00, 0x98, 0xcb, 0xbd, 0xbc, 0xac, 0xab, 0xbb, 0xaa, 0xaa, - 0x9b, 0x18, 0x54, 0x43, 0x43, 0x33, 0x45, 0x34, 0x23, 0x22, 0x02, 0x81, 0xca, 0xcc, 0xbc, 0xac, - 0xbb, 0xab, 0xab, 0xbb, 0xbb, 0x09, 0x52, 0x34, 0x34, 0x43, 0x45, 0x34, 0x23, 0x23, 0x23, 0x00, - 0xa9, 0xcd, 0xcc, 0xba, 0xac, 0xab, 0xaa, 0xb9, 0xab, 0x8a, 0x31, 0x35, 0x24, 0x43, 0x54, 0x34, - 0x33, 0x24, 0x22, 0x02, 0xa0, 0xda, 0xdb, 0xcb, 0xbb, 0xbb, 0xba, 0xca, 0xab, 0x9b, 0x18, 0x34, - 0x23, 0x43, 0x46, 0x34, 0x34, 0x24, 0x22, 0x12, 0x80, 0xa9, 0xbd, 0xcc, 0xcb, 0xba, 0xaa, 0xba, - 0xbb, 0xbb, 0x08, 0x53, 0x22, 0x41, 0x54, 0x53, 0x24, 0x33, 0x43, 0x12, 0x11, 0x99, 0xca, 0xcc, - 0xbc, 0xba, 0xbb, 0xca, 0xbb, 0xbc, 0x09, 0x12, 0x11, 0x32, 0x54, 0x35, 0x35, 0x43, 0x32, 0x33, - 0x11, 0x80, 0xc9, 0xcc, 0xbc, 0xbb, 0xac, 0xba, 0xdb, 0xab, 0x0a, 0x10, 0x10, 0x21, 0x44, 0x44, - 0x44, 0x42, 0x42, 0x12, 0x12, 0x81, 0x98, 0xbc, 0xbd, 0xcb, 0xab, 0xaa, 0xcc, 0xab, 0x9a, 0x00, - 0x10, 0x11, 0x42, 0x54, 0x34, 0x34, 0x34, 0x24, 0x21, 0x01, 0x90, 0xca, 0xcc, 0xac, 0xab, 0xaa, - 0xdb, 0xab, 0x9a, 0x88, 0x01, 0x01, 0x32, 0x55, 0x43, 0x44, 0x33, 0x24, 0x23, 0x21, 0x80, 0xb9, - 0xdd, 0xcb, 0xaa, 0xb9, 0xcb, 0xcb, 0x9a, 0x89, 0x81, 0x10, 0x21, 0x43, 0x35, 0x36, 0x25, 0x33, - 0x33, 0x22, 0x11, 0xa8, 0xdd, 0xcb, 0xaa, 0xab, 0xbc, 0xbc, 0xab, 0x89, 0x88, 0x08, 0x20, 0x32, - 0x45, 0x45, 0x34, 0x34, 0x33, 0x32, 0x12, 0x81, 0xeb, 0xbc, 0xba, 0xbb, 0xbc, 0xbd, 0xbb, 0x9a, - 0x88, 0x09, 0x11, 0x21, 0x54, 0x44, 0x35, 0x53, 0x23, 0x32, 0x22, 0x82, 0xc9, 0xbc, 0xac, 0xbb, - 0xdb, 0xdb, 0xaa, 0x9a, 0x9a, 0x88, 0x10, 0x20, 0x42, 0x45, 0x63, 0x43, 0x32, 0x23, 0x24, 0x11, - 0xa8, 0xbc, 0xcb, 0xbb, 0xdb, 0xbc, 0xba, 0xab, 0xaa, 0x89, 0x08, 0x10, 0x42, 0x44, 0x45, 0x25, - 0x33, 0x43, 0x32, 0x13, 0x88, 0xdb, 0xbb, 0xcb, 0xcb, 0xbc, 0xac, 0xab, 0x9b, 0x99, 0x88, 0x10, - 0x22, 0x52, 0x55, 0x34, 0x24, 0x43, 0x32, 0x13, 0x81, 0xc9, 0xab, 0xac, 0xbc, 0xbc, 0xac, 0xbb, - 0xbb, 0xa9, 0x09, 0x00, 0x10, 0x31, 0x57, 0x44, 0x32, 0x34, 0x24, 0x33, 0x01, 0x99, 0xbb, 0xdb, - 0xcb, 0xcb, 0xcb, 0xcb, 0xaa, 0x9a, 0x89, 0x88, 0x80, 0x28, 0x64, 0x34, 0x34, 0x34, 0x44, 0x32, - 0x11, 0x88, 0x9a, 0xbb, 0xbc, 0xbd, 0xcb, 0xac, 0xbb, 0xbb, 0x8a, 0x98, 0x99, 0x18, 0x73, 0x53, - 0x34, 0x34, 0x44, 0x33, 0x12, 0x00, 0xa8, 0xba, 0xcb, 0xcc, 0xcb, 0xbb, 0xbc, 0xbb, 0x9a, 0x99, - 0x99, 0x09, 0x51, 0x44, 0x34, 0x44, 0x34, 0x34, 0x12, 0x11, 0x98, 0xa9, 0xcb, 0xcb, 0xdb, 0xbb, - 0xbc, 0xbb, 0xaa, 0xa9, 0xa9, 0x89, 0x32, 0x55, 0x34, 0x44, 0x44, 0x33, 0x33, 0x21, 0x90, 0x99, - 0xbb, 0xbd, 0xbd, 0xcb, 0xbc, 0xab, 0xaa, 0x9a, 0x9a, 0x8a, 0x28, 0x35, 0x34, 0x55, 0x53, 0x43, - 0x32, 0x12, 0x00, 0x88, 0xaa, 0xcb, 0xbc, 0xbc, 0xbd, 0xbb, 0xab, 0xaa, 0xba, 0x9b, 0x28, 0x42, - 0x43, 0x55, 0x44, 0x34, 0x33, 0x23, 0x11, 0x80, 0xa9, 0xbb, 0xbd, 0xcd, 0xbb, 0xbc, 0xab, 0xba, - 0xba, 0xab, 0x08, 0x21, 0x42, 0x55, 0x44, 0x44, 0x33, 0x33, 0x12, 0x81, 0x98, 0xb9, 0xdb, 0xbc, - 0xbd, 0xac, 0xbb, 0xaa, 0xbb, 0xbb, 0x09, 0x10, 0x22, 0x45, 0x64, 0x44, 0x33, 0x33, 0x23, 0x02, - 0x90, 0xa9, 0xcb, 0xcc, 0xbc, 0xcc, 0xaa, 0x9a, 0xbb, 0xab, 0x89, 0x08, 0x21, 0x41, 0x64, 0x35, - 0x35, 0x33, 0x33, 0x11, 0x81, 0x98, 0xaa, 0xcc, 0xcc, 0xbc, 0xab, 0xba, 0xac, 0xab, 0x9a, 0x89, - 0x00, 0x10, 0x73, 0x36, 0x35, 0x24, 0x33, 0x21, 0x01, 0x08, 0x99, 0xca, 0xcc, 0xbc, 0xbb, 0xbb, - 0xbc, 0xac, 0x9a, 0x89, 0x88, 0x88, 0x52, 0x55, 0x34, 0x34, 0x24, 0x12, 0x02, 0x00, 0x88, 0xb8, - 0xdc, 0xbb, 0xac, 0xac, 0xbb, 0xbb, 0xab, 0x9a, 0x99, 0xa9, 0x30, 0x57, 0x35, 0x35, 0x33, 0x23, - 0x13, 0x10, 0x00, 0xa8, 0xcd, 0xcb, 0xcb, 0xbb, 0xcb, 0xbb, 0xab, 0x9a, 0x9a, 0xaa, 0x19, 0x64, - 0x45, 0x34, 0x34, 0x33, 0x22, 0x01, 0x11, 0x98, 0xbc, 0xbd, 0xbc, 0xac, 0xbb, 0xad, 0x9b, 0x9a, - 0xa9, 0x9a, 0x8a, 0x40, 0x55, 0x44, 0x53, 0x32, 0x12, 0x11, 0x12, 0x90, 0xb9, 0xbc, 0xbd, 0xca, - 0xcb, 0xbb, 0xbb, 0xaa, 0xab, 0xbb, 0xaa, 0x28, 0x65, 0x35, 0x36, 0x33, 0x23, 0x32, 0x13, 0x01, - 0xa8, 0xcc, 0xac, 0xcb, 0xbc, 0xcb, 0xba, 0xaa, 0xaa, 0xba, 0xbb, 0x89, 0x52, 0x65, 0x44, 0x33, - 0x32, 0x33, 0x22, 0x12, 0x98, 0xca, 0xbc, 0xdb, 0xbc, 0xbc, 0xba, 0xbb, 0xaa, 0xbb, 0xab, 0x9a, - 0x18, 0x66, 0x45, 0x33, 0x24, 0x32, 0x22, 0x12, 0x91, 0xb9, 0xcb, 0xdb, 0xbc, 0xbc, 0xcb, 0xaa, - 0xa9, 0xbb, 0xaa, 0xba, 0x8a, 0x72, 0x46, 0x43, 0x33, 0x33, 0x33, 0x23, 0x01, 0xa9, 0xbb, 0xbe, - 0xbd, 0xbc, 0xcb, 0xaa, 0xba, 0xba, 0xa9, 0xcb, 0x9a, 0x40, 0x46, 0x44, 0x33, 0x43, 0x32, 0x22, - 0x11, 0x88, 0xa9, 0xbc, 0xcc, 0xbc, 0xac, 0xba, 0xba, 0xab, 0xab, 0xbc, 0xab, 0x18, 0x55, 0x45, - 0x33, 0x34, 0x33, 0x33, 0x22, 0x00, 0xb9, 0xca, 0xdc, 0xcb, 0xbb, 0xcb, 0xba, 0xab, 0xbb, 0xbc, - 0xab, 0x8a, 0x62, 0x45, 0x34, 0x43, 0x33, 0x33, 0x23, 0x01, 0x98, 0xaa, 0xcd, 0xbd, 0xbb, 0xcb, - 0xbb, 0xab, 0xab, 0xbc, 0xcb, 0x9a, 0x31, 0x56, 0x43, 0x43, 0x24, 0x23, 0x23, 0x01, 0x00, 0x99, - 0xea, 0xcb, 0xbb, 0xbc, 0xac, 0xaa, 0xab, 0xba, 0xbc, 0xaa, 0x38, 0x45, 0x44, 0x44, 0x33, 0x33, - 0x33, 0x21, 0x00, 0xa0, 0xdb, 0xbc, 0xbc, 0xbc, 0xac, 0xab, 0xaa, 0xaa, 0xcc, 0x9a, 0x08, 0x41, - 0x54, 0x34, 0x34, 0x43, 0x32, 0x21, 0x10, 0x80, 0xba, 0xcc, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xcb, - 0xbc, 0xbb, 0x99, 0x31, 0x56, 0x53, 0x43, 0x43, 0x22, 0x22, 0x11, 0x00, 0xa9, 0xcb, 0xbc, 0xcc, - 0xbb, 0xbb, 0xab, 0xbb, 0xbd, 0xcb, 0x9a, 0x10, 0x53, 0x44, 0x44, 0x43, 0x32, 0x22, 0x12, 0x01, - 0x98, 0xba, 0xcd, 0xcb, 0xcb, 0xab, 0xab, 0xba, 0xcb, 0xcb, 0xaa, 0x19, 0x32, 0x46, 0x44, 0x34, - 0x33, 0x33, 0x22, 0x11, 0x80, 0xba, 0xcc, 0xbc, 0xbd, 0xac, 0x9a, 0xaa, 0xbb, 0xad, 0xab, 0x89, - 0x11, 0x73, 0x44, 0x43, 0x43, 0x22, 0x13, 0x12, 0x00, 0x99, 0xba, 0xdc, 0xbc, 0xbb, 0xbb, 0xbb, - 0xbc, 0xcc, 0xaa, 0x9a, 0x08, 0x42, 0x55, 0x43, 0x34, 0x32, 0x33, 0x22, 0x01, 0x88, 0xb9, 0xcd, - 0xbc, 0xbc, 0xba, 0xab, 0xcb, 0xbc, 0xab, 0xaa, 0x99, 0x31, 0x56, 0x34, 0x44, 0x32, 0x33, 0x23, - 0x02, 0x81, 0xa8, 0xcc, 0xbc, 0xbc, 0xac, 0xaa, 0xbb, 0xbc, 0xac, 0xaa, 0x99, 0x18, 0x44, 0x45, - 0x24, 0x24, 0x33, 0x23, 0x22, 0x01, 0x98, 0xca, 0xcc, 0xbc, 0xbb, 0xba, 0xcb, 0xac, 0xbb, 0xbb, - 0xba, 0x09, 0x62, 0x45, 0x43, 0x34, 0x33, 0x24, 0x22, 0x01, 0x80, 0xb8, 0xeb, 0xbc, 0xba, 0xbb, - 0xcb, 0xcb, 0xab, 0xcb, 0xaa, 0x9a, 0x30, 0x45, 0x44, 0x34, 0x34, 0x23, 0x33, 0x21, 0x10, 0x98, - 0xeb, 0xdb, 0xba, 0xab, 0xcb, 0xbb, 0xcb, 0xbb, 0xbc, 0x9a, 0x19, 0x43, 0x45, 0x35, 0x43, 0x33, - 0x33, 0x23, 0x11, 0x80, 0xcb, 0xcc, 0xcb, 0xbb, 0xbb, 0xcc, 0xba, 0xac, 0xbb, 0xab, 0x89, 0x30, - 0x55, 0x44, 0x34, 0x43, 0x32, 0x22, 0x22, 0x01, 0xa9, 0xcc, 0xcb, 0xbb, 0xac, 0xac, 0xbb, 0xbc, - 0xbb, 0xac, 0x89, 0x18, 0x53, 0x35, 0x35, 0x34, 0x33, 0x33, 0x23, 0x12, 0xa8, 0xdb, 0xcc, 0xba, - 0xcb, 0xbb, 0xbb, 0xcc, 0xbb, 0xba, 0xab, 0x09, 0x42, 0x55, 0x53, 0x43, 0x33, 0x33, 0x33, 0x22, - 0x80, 0xba, 0xbe, 0xbc, 0xcb, 0xbb, 0xbb, 0xad, 0xcb, 0xba, 0xab, 0x9a, 0x20, 0x54, 0x44, 0x34, - 0x43, 0x33, 0x24, 0x22, 0x10, 0xa8, 0xca, 0xcb, 0xbb, 0xbc, 0xcb, 0xcb, 0xca, 0xba, 0xbb, 0xaa, - 0x88, 0x42, 0x45, 0x44, 0x43, 0x33, 0x33, 0x33, 0x22, 0x90, 0xbb, 0xcd, 0xcb, 0xca, 0xba, 0xcb, - 0xbb, 0xbc, 0xbb, 0xab, 0x99, 0x20, 0x46, 0x44, 0x34, 0x33, 0x34, 0x24, 0x12, 0x80, 0xa8, 0xca, - 0xbb, 0xcb, 0xbc, 0xbb, 0xbc, 0xbc, 0xac, 0xba, 0xa9, 0x08, 0x53, 0x44, 0x44, 0x42, 0x42, 0x22, - 0x22, 0x01, 0x98, 0xb9, 0xcb, 0xbc, 0xbb, 0xbc, 0xbc, 0xcb, 0xcb, 0xaa, 0xaa, 0x89, 0x21, 0x36, - 0x45, 0x43, 0x33, 0x25, 0x22, 0x11, 0x80, 0xa9, 0xbb, 0xbd, 0xcb, 0xbb, 0xbc, 0xbc, 0xbb, 0xcb, - 0xab, 0xaa, 0x10, 0x44, 0x35, 0x44, 0x34, 0x33, 0x24, 0x12, 0x81, 0x98, 0xba, 0xcc, 0xbb, 0xcb, - 0xcb, 0xac, 0xbb, 0xbb, 0xbc, 0xaa, 0x09, 0x42, 0x44, 0x44, 0x34, 0x34, 0x33, 0x23, 0x02, 0x80, - 0xaa, 0xcc, 0xbb, 0xbc, 0xbc, 0xdb, 0xba, 0xcb, 0xba, 0xbb, 0x89, 0x20, 0x54, 0x34, 0x35, 0x44, - 0x32, 0x23, 0x22, 0x00, 0x99, 0xbb, 0xcc, 0xcb, 0xcb, 0xbb, 0xbc, 0xbb, 0xbc, 0xab, 0x9a, 0x19, - 0x43, 0x36, 0x35, 0x35, 0x43, 0x32, 0x22, 0x01, 0x90, 0xba, 0xdb, 0xbb, 0xbc, 0xbc, 0xbc, 0xbb, - 0xbc, 0xbb, 0xab, 0x89, 0x31, 0x46, 0x44, 0x43, 0x34, 0x33, 0x33, 0x02, 0x80, 0xa9, 0xbc, 0xbc, - 0xcc, 0xca, 0xba, 0xcb, 0xca, 0xaa, 0xaa, 0x8a, 0x10, 0x43, 0x54, 0x34, 0x35, 0x33, 0x24, 0x22, - 0x00, 0x98, 0xaa, 0xbc, 0xcc, 0xbb, 0xcb, 0xac, 0xbb, 0xac, 0xba, 0x9a, 0x19, 0x41, 0x44, 0x44, - 0x34, 0x34, 0x33, 0x22, 0x11, 0x88, 0xba, 0xbc, 0xcc, 0xbb, 0xbc, 0xcb, 0xbb, 0xbc, 0xbb, 0xaa, - 0x89, 0x21, 0x54, 0x44, 0x44, 0x33, 0x34, 0x33, 0x12, 0x80, 0xa9, 0xca, 0xcb, 0xac, 0xbc, 0xbb, - 0xac, 0xcb, 0xbb, 0xab, 0x9a, 0x00, 0x52, 0x44, 0x35, 0x44, 0x33, 0x33, 0x23, 0x00, 0x98, 0xba, - 0xbc, 0xbd, 0xbc, 0xcb, 0xab, 0xbc, 0xcb, 0xab, 0x9a, 0x88, 0x31, 0x54, 0x35, 0x44, 0x43, 0x33, - 0x22, 0x02, 0x80, 0xa9, 0xcb, 0xbc, 0xbc, 0xac, 0xcb, 0xba, 0xac, 0xbb, 0xaa, 0x89, 0x20, 0x44, - 0x45, 0x43, 0x34, 0x34, 0x32, 0x11, 0x00, 0x98, 0xba, 0xcc, 0xcb, 0xcb, 0xba, 0xcb, 0xbb, 0xac, - 0xab, 0x8a, 0x08, 0x41, 0x35, 0x45, 0x34, 0x43, 0x33, 0x22, 0x01, 0x88, 0xaa, 0xdb, 0xbc, 0xbc, - 0xba, 0xbc, 0xcb, 0xbb, 0xab, 0x9b, 0x89, 0x21, 0x55, 0x63, 0x43, 0x34, 0x33, 0x22, 0x12, 0x80, - 0x99, 0xcb, 0xcc, 0xbb, 0xbb, 0xbd, 0xcb, 0xbb, 0xab, 0xbb, 0x99, 0x18, 0x52, 0x45, 0x44, 0x34, - 0x24, 0x23, 0x12, 0x00, 0x98, 0xb9, 0xcc, 0xbb, 0xbc, 0xcb, 0xcb, 0xbb, 0xbb, 0xbb, 0x9b, 0x89, - 0x30, 0x65, 0x44, 0x34, 0x34, 0x33, 0x23, 0x11, 0x00, 0xaa, 0xbc, 0xbd, 0xcb, 0xbb, 0xbc, 0xbc, - 0xcb, 0xba, 0xa9, 0x99, 0x18, 0x52, 0x35, 0x36, 0x34, 0x43, 0x22, 0x11, 0x01, 0x98, 0xca, 0xbb, - 0xbc, 0xbc, 0xdb, 0xba, 0xac, 0xab, 0xab, 0x99, 0x09, 0x41, 0x54, 0x44, 0x34, 0x34, 0x22, 0x22, - 0x01, 0x90, 0xb9, 0xbc, 0xbc, 0xbc, 0xbb, 0xbd, 0xcb, 0xab, 0xaa, 0x9b, 0x89, 0x20, 0x54, 0x54, - 0x34, 0x34, 0x33, 0x32, 0x11, 0x91, 0xa9, 0xbc, 0xad, 0xac, 0xbb, 0xbc, 0xcb, 0xbb, 0xbb, 0xba, - 0x9a, 0x00, 0x53, 0x46, 0x44, 0x24, 0x33, 0x23, 0x22, 0x00, 0x98, 0xcb, 0xcb, 0xac, 0xbb, 0xbc, - 0xad, 0xab, 0xbb, 0xba, 0xaa, 0x89, 0x10, 0x56, 0x54, 0x33, 0x34, 0x33, 0x23, 0x12, 0x88, 0xca, - 0xbb, 0xbd, 0xca, 0xcb, 0xbb, 0xbc, 0xbb, 0xbb, 0xaa, 0x9a, 0x09, 0x54, 0x46, 0x43, 0x34, 0x42, - 0x22, 0x11, 0x81, 0x99, 0xbb, 0xbc, 0xcb, 0xbc, 0xcb, 0xbb, 0xcb, 0xbb, 0xaa, 0xaa, 0x99, 0x42, - 0x56, 0x43, 0x34, 0x24, 0x33, 0x22, 0x01, 0x98, 0xca, 0xbb, 0xdb, 0xcb, 0xcb, 0xba, 0xac, 0xbb, - 0xaa, 0xba, 0x99, 0x20, 0x46, 0x45, 0x43, 0x33, 0x34, 0x22, 0x02, 0x80, 0xaa, 0xcb, 0xcb, 0xbc, - 0xbb, 0xcc, 0xba, 0xbb, 0xbb, 0xbb, 0xab, 0x18, 0x73, 0x45, 0x34, 0x34, 0x43, 0x22, 0x12, 0x81, - 0x99, 0xba, 0xbc, 0xbc, 0xbc, 0xdb, 0xba, 0xbb, 0xbb, 0xac, 0xab, 0x89, 0x31, 0x46, 0x45, 0x43, - 0x33, 0x43, 0x22, 0x81, 0x90, 0xa9, 0xcb, 0xbc, 0xbb, 0xbd, 0xcb, 0xba, 0xbb, 0xbb, 0xac, 0x9a, - 0x19, 0x44, 0x36, 0x35, 0x34, 0x43, 0x22, 0x01, 0x00, 0xa9, 0xba, 0xbc, 0xdb, 0xbb, 0xbc, 0xbc, - 0xab, 0xac, 0xba, 0xaa, 0x89, 0x52, 0x54, 0x53, 0x43, 0x43, 0x22, 0x12, 0x00, 0x98, 0xb9, 0xcb, - 0xcb, 0xcb, 0xcb, 0xbb, 0xbb, 0xcb, 0xbb, 0xbb, 0x9a, 0x30, 0x56, 0x53, 0x34, 0x34, 0x24, 0x12, - 0x01, 0x80, 0x99, 0xbb, 0xbc, 0xbc, 0xbc, 0xbc, 0xba, 0xcb, 0xba, 0xcb, 0x9a, 0x18, 0x52, 0x44, - 0x44, 0x34, 0x33, 0x23, 0x22, 0x00, 0x99, 0xcb, 0xcb, 0xcb, 0xbc, 0xbb, 0xbc, 0xbb, 0xbb, 0xad, - 0xab, 0x09, 0x31, 0x54, 0x45, 0x34, 0x24, 0x23, 0x22, 0x01, 0x98, 0xaa, 0xcb, 0xcb, 0xbc, 0xac, - 0xbb, 0xac, 0xca, 0xba, 0xbb, 0x89, 0x18, 0x62, 0x54, 0x34, 0x34, 0x33, 0x33, 0x12, 0x80, 0xa9, - 0xcb, 0xdb, 0xcb, 0xcb, 0xab, 0xbb, 0xcb, 0xdb, 0xaa, 0x89, 0x88, 0x30, 0x55, 0x44, 0x24, 0x33, - 0x33, 0x23, 0x00, 0x89, 0xba, 0xcc, 0xdb, 0xbb, 0xcb, 0xba, 0xcb, 0xcb, 0xba, 0x9a, 0x99, 0x18, - 0x54, 0x45, 0x34, 0x43, 0x33, 0x22, 0x01, 0x80, 0xaa, 0xcb, 0xdb, 0xcb, 0xbb, 0xab, 0xbc, 0xcb, - 0xbb, 0xaa, 0x9a, 0x89, 0x63, 0x45, 0x44, 0x43, 0x32, 0x23, 0x11, 0x81, 0x99, 0xba, 0xcc, 0xbc, - 0xbb, 0xbb, 0xbc, 0xbc, 0xcb, 0xaa, 0xaa, 0x9a, 0x21, 0x56, 0x34, 0x35, 0x43, 0x23, 0x12, 0x01, - 0x98, 0xa9, 0xcb, 0xcc, 0xbb, 0xab, 0xcb, 0xcb, 0xbb, 0xbb, 0xcb, 0xaa, 0x08, 0x73, 0x63, 0x43, - 0x24, 0x33, 0x22, 0x02, 0x80, 0x98, 0xca, 0xcc, 0xba, 0xba, 0xca, 0xcb, 0xbb, 0xcb, 0xbb, 0xac, - 0x89, 0x30, 0x64, 0x44, 0x43, 0x33, 0x23, 0x22, 0x00, 0x80, 0xba, 0xbd, 0xbc, 0xbb, 0xcb, 0xcb, - 0xcb, 0xca, 0xba, 0xbb, 0xaa, 0x08, 0x44, 0x36, 0x35, 0x34, 0x33, 0x23, 0x11, 0x80, 0xa8, 0xbc, - 0xbc, 0xcb, 0xba, 0xbc, 0xac, 0xcb, 0xbb, 0xac, 0xab, 0x89, 0x31, 0x46, 0x35, 0x35, 0x33, 0x22, - 0x12, 0x01, 0x98, 0xdb, 0xbb, 0xbb, 0xcb, 0xbc, 0xcb, 0xca, 0xbb, 0xcb, 0xab, 0x9a, 0x28, 0x54, - 0x54, 0x34, 0x43, 0x22, 0x22, 0x11, 0x88, 0xba, 0xcb, 0xbb, 0xcb, 0xac, 0xcb, 0xba, 0xbc, 0xdb, - 0xba, 0x9a, 0x88, 0x41, 0x45, 0x35, 0x34, 0x32, 0x23, 0x22, 0x80, 0xa9, 0xac, 0xcb, 0xbb, 0xbc, - 0xcb, 0xba, 0xbc, 0xbc, 0xac, 0xab, 0x9a, 0x28, 0x64, 0x54, 0x33, 0x33, 0x43, 0x22, 0x01, 0xa8, - 0xaa, 0xbb, 0xbd, 0xbb, 0xbc, 0xcb, 0xbb, 0xcd, 0xab, 0xbb, 0xab, 0x0a, 0x52, 0x46, 0x34, 0x33, - 0x34, 0x32, 0x02, 0x90, 0xa9, 0xba, 0xbd, 0xbb, 0xbc, 0xca, 0xca, 0xcb, 0xac, 0xbb, 0xbb, 0xaa, - 0x20, 0x47, 0x34, 0x34, 0x34, 0x33, 0x12, 0x01, 0x99, 0xba, 0xcb, 0xac, 0xbb, 0xbb, 0xcc, 0xdb, - 0xbb, 0xcb, 0xbb, 0xab, 0x19, 0x64, 0x34, 0x44, 0x33, 0x24, 0x13, 0x11, 0x88, 0xa9, 0xba, 0xbc, - 0xcb, 0xba, 0xcb, 0xbc, 0xbc, 0xcb, 0xcb, 0xab, 0x0a, 0x41, 0x45, 0x43, 0x34, 0x24, 0x23, 0x11, - 0x80, 0x98, 0xba, 0xbc, 0xcb, 0xaa, 0xbb, 0xcc, 0xcb, 0xbb, 0xbc, 0xbc, 0x9a, 0x20, 0x44, 0x44, - 0x34, 0x25, 0x23, 0x12, 0x81, 0x80, 0xa9, 0xcb, 0xbb, 0xac, 0xba, 0xcc, 0xbb, 0xcb, 0xcb, 0xbc, - 0xaa, 0x08, 0x32, 0x46, 0x44, 0x43, 0x32, 0x22, 0x02, 0x80, 0xa8, 0xcb, 0xbb, 0xbb, 0xbc, 0xdb, - 0xbb, 0xac, 0xbc, 0xcc, 0xaa, 0x89, 0x20, 0x63, 0x34, 0x45, 0x32, 0x22, 0x12, 0x01, 0x88, 0xba, - 0xbc, 0xbb, 0xca, 0xdb, 0xba, 0xab, 0xcc, 0xbc, 0xac, 0x99, 0x08, 0x42, 0x44, 0x35, 0x34, 0x32, - 0x22, 0x11, 0x88, 0xb9, 0xcb, 0xbb, 0xbb, 0xbd, 0xac, 0xab, 0xcc, 0xdb, 0xab, 0xab, 0x09, 0x30, - 0x64, 0x44, 0x43, 0x23, 0x23, 0x12, 0x81, 0xa8, 0xbb, 0xac, 0xcb, 0xcb, 0xbb, 0xbb, 0xcc, 0xbc, - 0xbc, 0xbb, 0x99, 0x18, 0x63, 0x45, 0x43, 0x43, 0x22, 0x12, 0x11, 0x98, 0xba, 0xba, 0xdb, 0xbb, - 0xac, 0xab, 0xcb, 0xcc, 0xcb, 0xba, 0x9a, 0x89, 0x41, 0x36, 0x45, 0x33, 0x32, 0x33, 0x22, 0x88, - 0xaa, 0xbb, 0xcc, 0xcb, 0xbb, 0xba, 0xcb, 0xcc, 0xcb, 0xbb, 0xab, 0x9a, 0x38, 0x65, 0x34, 0x25, - 0x33, 0x33, 0x22, 0x81, 0x99, 0xba, 0xcb, 0xbc, 0xac, 0xab, 0xba, 0xdc, 0xcb, 0xbb, 0xac, 0xaa, - 0x09, 0x53, 0x45, 0x24, 0x24, 0x33, 0x23, 0x01, 0x88, 0xa9, 0xba, 0xbd, 0xac, 0xaa, 0xab, 0xcc, - 0xbc, 0xcb, 0xab, 0xbb, 0x9a, 0x52, 0x54, 0x43, 0x34, 0x43, 0x32, 0x11, 0x08, 0x89, 0xaa, 0xcc, - 0xba, 0xab, 0xba, 0xdb, 0xbc, 0xcb, 0xbb, 0xbc, 0x9b, 0x20, 0x45, 0x44, 0x43, 0x34, 0x32, 0x12, - 0x00, 0x90, 0xa9, 0xbc, 0xbc, 0xab, 0xaa, 0xbc, 0xcc, 0xbb, 0xdb, 0xbb, 0xab, 0x18, 0x62, 0x53, - 0x34, 0x35, 0x32, 0x22, 0x11, 0x80, 0x99, 0xbc, 0xbc, 0xba, 0xaa, 0xbb, 0xbe, 0xbb, 0xcc, 0xcb, - 0xbb, 0x89, 0x21, 0x45, 0x63, 0x43, 0x33, 0x32, 0x21, 0x10, 0x98, 0xca, 0xcb, 0xab, 0xaa, 0xca, - 0xcb, 0xcb, 0xcb, 0xbc, 0xac, 0x9a, 0x18, 0x32, 0x46, 0x44, 0x33, 0x23, 0x23, 0x12, 0x80, 0xb9, - 0xcc, 0xaa, 0xaa, 0xbb, 0xcc, 0xcb, 0xcb, 0xbc, 0xbc, 0x9b, 0x09, 0x20, 0x45, 0x54, 0x33, 0x33, - 0x33, 0x22, 0x02, 0xa9, 0xcc, 0xba, 0xaa, 0xca, 0xbb, 0xcb, 0xbc, 0xcd, 0xcb, 0xaa, 0x98, 0x00, - 0x52, 0x54, 0x33, 0x34, 0x32, 0x32, 0x11, 0x90, 0xca, 0xbb, 0xba, 0xcb, 0xac, 0xba, 0xdb, 0xcc, - 0xac, 0xab, 0x9a, 0x89, 0x41, 0x45, 0x34, 0x34, 0x32, 0x33, 0x22, 0x80, 0xba, 0xac, 0xbb, 0xbb, - 0xad, 0xba, 0xdb, 0xcc, 0xbc, 0xac, 0x9a, 0x9a, 0x28, 0x44, 0x35, 0x34, 0x43, 0x32, 0x23, 0x01, - 0xa9, 0xaa, 0xbb, 0xdb, 0xba, 0xba, 0xcb, 0xcd, 0xcc, 0xba, 0xab, 0xab, 0x09, 0x52, 0x54, 0x33, - 0x34, 0x34, 0x32, 0x02, 0x88, 0xa9, 0xaa, 0xbb, 0xbc, 0xaa, 0xda, 0xcc, 0xcc, 0xbb, 0xbb, 0xac, - 0x8a, 0x30, 0x45, 0x34, 0x34, 0x34, 0x24, 0x02, 0x81, 0x98, 0x99, 0xaa, 0xbb, 0xaa, 0xba, 0xce, - 0xcc, 0xcb, 0xbb, 0xbb, 0xab, 0x18, 0x54, 0x34, 0x34, 0x44, 0x33, 0x22, 0x01, 0x88, 0xa8, 0xb9, - 0xac, 0x9a, 0xb9, 0xdc, 0xbc, 0xbc, 0xbc, 0xac, 0xbb, 0x09, 0x41, 0x34, 0x44, 0x53, 0x33, 0x33, - 0x12, 0x00, 0x98, 0xb9, 0xac, 0x9a, 0xaa, 0xcc, 0xcc, 0xbc, 0xcb, 0xbc, 0xbb, 0x8a, 0x10, 0x53, - 0x53, 0x34, 0x35, 0x32, 0x12, 0x01, 0x80, 0xa9, 0xba, 0xaa, 0xa9, 0xcc, 0xcc, 0xbc, 0xdb, 0xcb, - 0xbb, 0xaa, 0x00, 0x31, 0x54, 0x44, 0x43, 0x33, 0x32, 0x21, 0x00, 0x99, 0xbb, 0xaa, 0xa9, 0xdb, - 0xcc, 0xbc, 0xcb, 0xcc, 0xcb, 0x9a, 0x09, 0x10, 0x41, 0x44, 0x44, 0x23, 0x23, 0x23, 0x01, 0x90, - 0xaa, 0xaa, 0x99, 0xbb, 0xce, 0xbb, 0xbd, 0xbd, 0xad, 0xab, 0x99, 0x08, 0x31, 0x54, 0x44, 0x33, - 0x24, 0x22, 0x12, 0x80, 0x99, 0x9a, 0x98, 0xba, 0xcc, 0xcb, 0xcb, 0xcd, 0xcb, 0xab, 0x9a, 0x89, - 0x18, 0x44, 0x44, 0x34, 0x33, 0x43, 0x12, 0x81, 0x98, 0x99, 0x98, 0xaa, 0xcc, 0xba, 0xcc, 0xcc, - 0xdb, 0xba, 0xaa, 0x99, 0x09, 0x42, 0x35, 0x35, 0x34, 0x33, 0x32, 0x01, 0x90, 0x99, 0x98, 0xba, - 0xbc, 0xbc, 0xdb, 0xcc, 0xcc, 0xbb, 0xab, 0xba, 0x89, 0x31, 0x55, 0x34, 0x44, 0x32, 0x23, 0x12, - 0x80, 0x98, 0x98, 0xa9, 0xcb, 0xbb, 0xdb, 0xcc, 0xcc, 0xac, 0xba, 0xaa, 0x9a, 0x10, 0x44, 0x44, - 0x43, 0x34, 0x32, 0x12, 0x00, 0x88, 0x98, 0xa9, 0xbb, 0xac, 0xbb, 0xdd, 0xbc, 0xcc, 0xba, 0xba, - 0xaa, 0x09, 0x52, 0x34, 0x45, 0x33, 0x34, 0x22, 0x10, 0x88, 0x90, 0x99, 0xbb, 0xbb, 0xba, 0xdd, - 0xcc, 0xcb, 0xcb, 0xba, 0xba, 0x89, 0x30, 0x54, 0x34, 0x35, 0x34, 0x22, 0x01, 0x81, 0x80, 0x99, - 0xba, 0xab, 0xaa, 0xcc, 0xcd, 0xcb, 0xac, 0xbb, 0xac, 0x9a, 0x10, 0x42, 0x54, 0x43, 0x34, 0x23, - 0x12, 0x00, 0x00, 0x99, 0xaa, 0xbb, 0xaa, 0xdb, 0xcd, 0xcb, 0xbc, 0xcb, 0xbb, 0x9b, 0x09, 0x31, - 0x55, 0x34, 0x35, 0x33, 0x12, 0x02, 0x01, 0x98, 0xaa, 0xab, 0xab, 0xda, 0xcc, 0xbc, 0xbc, 0xcc, - 0xbb, 0xab, 0x89, 0x10, 0x53, 0x45, 0x44, 0x32, 0x12, 0x12, 0x01, 0x80, 0xaa, 0x9a, 0xaa, 0xb9, - 0xcd, 0xbc, 0xbc, 0xcc, 0xcb, 0xba, 0x99, 0x88, 0x31, 0x46, 0x44, 0x23, 0x33, 0x22, 0x11, 0x81, - 0xa8, 0xba, 0x99, 0xba, 0xcd, 0xbc, 0xcc, 0xcb, 0xbc, 0xbb, 0xaa, 0x89, 0x28, 0x64, 0x44, 0x33, - 0x24, 0x22, 0x12, 0x01, 0x98, 0x9a, 0x9a, 0xb9, 0xdb, 0xdb, 0xbb, 0xcd, 0xbc, 0xbb, 0xbb, 0x9a, - 0x09, 0x62, 0x45, 0x43, 0x23, 0x33, 0x23, 0x02, 0x90, 0xa9, 0x99, 0xb9, 0xdb, 0xcb, 0xbc, 0xbd, - 0xbd, 0xbc, 0xba, 0xaa, 0x8a, 0x31, 0x56, 0x43, 0x33, 0x43, 0x23, 0x12, 0x80, 0x89, 0x99, 0xa9, - 0xbb, 0xbc, 0xcc, 0xcc, 0xcc, 0xbb, 0xbb, 0xbb, 0xab, 0x28, 0x55, 0x44, 0x33, 0x34, 0x42, 0x21, - 0x00, 0x88, 0x89, 0x99, 0xaa, 0xbb, 0xbc, 0xcd, 0xcc, 0xbb, 0xcb, 0xbb, 0xab, 0x09, 0x53, 0x35, - 0x35, 0x33, 0x34, 0x23, 0x11, 0x08, 0x98, 0x99, 0xaa, 0xbb, 0xdb, 0xdc, 0xbc, 0xad, 0xbb, 0xcb, - 0xbb, 0x99, 0x31, 0x45, 0x34, 0x34, 0x34, 0x23, 0x02, 0x01, 0x88, 0x99, 0xaa, 0xaa, 0xba, 0xcd, - 0xcd, 0xcb, 0xbb, 0xbc, 0xcb, 0x9a, 0x18, 0x42, 0x35, 0x34, 0x35, 0x32, 0x12, 0x11, 0x08, 0x98, - 0x9a, 0x9a, 0xa9, 0xcc, 0xcd, 0xac, 0xcb, 0xbb, 0xcc, 0x9a, 0x09, 0x21, 0x34, 0x45, 0x24, 0x33, - 0x23, 0x21, 0x00, 0x98, 0x99, 0x9a, 0xa8, 0xda, 0xbd, 0xbd, 0xbc, 0xbc, 0xbc, 0xbb, 0x8a, 0x10, - 0x53, 0x44, 0x44, 0x32, 0x23, 0x22, 0x01, 0x80, 0x99, 0x99, 0x98, 0xc9, 0xdc, 0xcb, 0xcb, 0xcb, - 0xbc, 0xac, 0x9a, 0x88, 0x31, 0x44, 0x35, 0x34, 0x23, 0x23, 0x12, 0x00, 0x99, 0x89, 0x98, 0xb9, - 0xcd, 0xbc, 0xbd, 0xdb, 0xcb, 0xac, 0x9a, 0x89, 0x28, 0x52, 0x44, 0x43, 0x23, 0x33, 0x12, 0x01, - 0x98, 0x98, 0x88, 0xa8, 0xdb, 0xcc, 0xbb, 0xcd, 0xdb, 0xbb, 0xab, 0x9a, 0x19, 0x41, 0x45, 0x34, - 0x34, 0x32, 0x13, 0x02, 0x80, 0x98, 0x88, 0x98, 0xcb, 0xbc, 0xcc, 0xcb, 0xbd, 0xbc, 0xcb, 0xa9, - 0x89, 0x21, 0x63, 0x34, 0x34, 0x24, 0x23, 0x11, 0x80, 0x88, 0x88, 0x98, 0xaa, 0xbc, 0xbc, 0xcc, - 0xbd, 0xcc, 0xba, 0xab, 0xa9, 0x18, 0x52, 0x44, 0x34, 0x43, 0x23, 0x22, 0x00, 0x88, 0x08, 0x98, - 0xb9, 0xcb, 0xbb, 0xcd, 0xcc, 0xcc, 0xba, 0xab, 0xab, 0x89, 0x32, 0x46, 0x53, 0x33, 0x24, 0x13, - 0x01, 0x80, 0x08, 0x98, 0xa9, 0xbb, 0xbb, 0xdc, 0xcc, 0xcc, 0xbb, 0xbc, 0xba, 0x8a, 0x28, 0x63, - 0x34, 0x35, 0x43, 0x22, 0x01, 0x00, 0x00, 0x88, 0x99, 0xaa, 0xab, 0xcb, 0xce, 0xdb, 0xcb, 0xbb, - 0xac, 0x9a, 0x09, 0x32, 0x45, 0x44, 0x43, 0x22, 0x12, 0x00, 0x80, 0x80, 0x99, 0xaa, 0xa9, 0xb9, - 0xdd, 0xbc, 0xbd, 0xcb, 0xac, 0x9b, 0x8a, 0x10, 0x44, 0x44, 0x43, 0x33, 0x22, 0x11, 0x00, 0x00, - 0x99, 0x9a, 0xaa, 0xb9, 0xdd, 0xdb, 0xdb, 0xbb, 0xbc, 0xac, 0x9a, 0x18, 0x41, 0x44, 0x44, 0x32, - 0x22, 0x12, 0x10, 0x80, 0x88, 0x9a, 0x9a, 0xa9, 0xdb, 0xbd, 0xcc, 0xbc, 0xcc, 0xba, 0xaa, 0x88, - 0x20, 0x54, 0x44, 0x33, 0x33, 0x22, 0x12, 0x10, 0x98, 0x9a, 0x99, 0xa9, 0xcb, 0xdc, 0xbc, 0xcd, - 0xbb, 0xbc, 0xbb, 0x9a, 0x00, 0x63, 0x54, 0x33, 0x43, 0x21, 0x21, 0x10, 0x80, 0x89, 0x89, 0x89, - 0x9a, 0xdb, 0xdc, 0xcb, 0xcc, 0xbb, 0xcb, 0x9a, 0x89, 0x31, 0x45, 0x35, 0x33, 0x23, 0x23, 0x12, - 0x00, 0x88, 0x99, 0x98, 0x99, 0xdb, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xab, 0x9b, 0x28, 0x73, 0x44, - 0x32, 0x33, 0x32, 0x22, 0x01, 0x08, 0x98, 0x88, 0x99, 0xbb, 0xcd, 0xcc, 0xdc, 0xcb, 0xbb, 0xbb, - 0xbb, 0x09, 0x62, 0x44, 0x43, 0x33, 0x32, 0x22, 0x02, 0x00, 0x88, 0x89, 0x98, 0xab, 0xbc, 0xdd, - 0xcc, 0xbc, 0xac, 0xcb, 0xaa, 0x99, 0x21, 0x45, 0x43, 0x33, 0x34, 0x22, 0x11, 0x00, 0x88, 0x90, - 0x98, 0x9a, 0xba, 0xdc, 0xdc, 0xbc, 0xbc, 0xcb, 0xab, 0x9b, 0x18, 0x44, 0x34, 0x25, 0x33, 0x33, - 0x22, 0x01, 0x08, 0x88, 0x98, 0xaa, 0xa9, 0xcc, 0xdd, 0xbc, 0xcc, 0xca, 0xba, 0xab, 0x09, 0x32, - 0x45, 0x53, 0x32, 0x33, 0x23, 0x11, 0x00, 0x00, 0x98, 0x99, 0x9a, 0xca, 0xce, 0xbc, 0xbd, 0xdb, - 0xbb, 0xac, 0x89, 0x20, 0x43, 0x44, 0x43, 0x33, 0x23, 0x21, 0x11, 0x80, 0x88, 0x99, 0x9a, 0xa9, - 0xdd, 0xcc, 0xbc, 0xbc, 0xcc, 0xab, 0x9a, 0x18, 0x42, 0x53, 0x53, 0x32, 0x23, 0x22, 0x11, 0x01, - 0x88, 0x98, 0x89, 0x90, 0xcc, 0xcd, 0xcb, 0xbc, 0xbd, 0xac, 0x9b, 0x09, 0x21, 0x53, 0x34, 0x44, - 0x22, 0x22, 0x12, 0x01, 0x00, 0x88, 0x08, 0x88, 0xca, 0xbd, 0xcc, 0xbc, 0xcd, 0xbb, 0xab, 0x9a, - 0x10, 0x43, 0x45, 0x33, 0x34, 0x23, 0x22, 0x12, 0x81, 0x88, 0x08, 0x88, 0xc9, 0xcc, 0xdb, 0xdb, - 0xcc, 0xcb, 0xba, 0x9a, 0x08, 0x32, 0x54, 0x43, 0x43, 0x22, 0x22, 0x12, 0x81, 0x88, 0x80, 0x80, - 0xa9, 0xcb, 0xcc, 0xcc, 0xcc, 0xbc, 0xcb, 0x9a, 0x89, 0x20, 0x53, 0x53, 0x43, 0x32, 0x22, 0x23, - 0x01, 0x88, 0x00, 0x80, 0xa8, 0xba, 0xbd, 0xcd, 0xbd, 0xcd, 0xba, 0xbb, 0x9a, 0x08, 0x43, 0x44, - 0x34, 0x33, 0x24, 0x23, 0x01, 0x00, 0x80, 0x00, 0x98, 0xb9, 0xcb, 0xdc, 0xdc, 0xdb, 0xcb, 0xba, - 0xaa, 0x88, 0x20, 0x44, 0x34, 0x43, 0x33, 0x24, 0x11, 0x01, 0x00, 0x00, 0x88, 0xa8, 0xaa, 0xcc, - 0xcd, 0xcc, 0xbc, 0xac, 0xab, 0x99, 0x18, 0x33, 0x45, 0x43, 0x33, 0x24, 0x12, 0x11, 0x00, 0x10, - 0x08, 0x99, 0xa9, 0xca, 0xcd, 0xcd, 0xcc, 0xba, 0xbb, 0x9b, 0x09, 0x32, 0x35, 0x35, 0x44, 0x32, - 0x22, 0x01, 0x01, 0x01, 0x08, 0x89, 0x89, 0xaa, 0xdc, 0xcd, 0xbd, 0xbc, 0xbb, 0xab, 0x8a, 0x21, - 0x34, 0x45, 0x43, 0x43, 0x12, 0x11, 0x01, 0x00, 0x80, 0x88, 0x88, 0x98, 0xb9, 0xcf, 0xcd, 0xbb, - 0xbd, 0xba, 0x99, 0x18, 0x31, 0x54, 0x43, 0x24, 0x23, 0x12, 0x12, 0x10, 0x80, 0x88, 0x88, 0x88, - 0xa8, 0xed, 0xcc, 0xcc, 0xcb, 0xab, 0xaa, 0x88, 0x11, 0x43, 0x54, 0x33, 0x24, 0x22, 0x12, 0x11, - 0x01, 0x81, 0x80, 0x00, 0x90, 0xdc, 0xcd, 0xcc, 0xdb, 0xab, 0xab, 0x89, 0x00, 0x41, 0x53, 0x34, - 0x24, 0x32, 0x21, 0x11, 0x11, 0x80, 0x88, 0x08, 0x98, 0xda, 0xdc, 0xcc, 0xcc, 0xbb, 0xbb, 0x9a, - 0x89, 0x21, 0x45, 0x34, 0x34, 0x33, 0x22, 0x12, 0x12, 0x80, 0x88, 0x08, 0x98, 0xb9, 0xce, 0xdd, - 0xdb, 0xcb, 0xab, 0x9a, 0x8a, 0x18, 0x43, 0x45, 0x33, 0x43, 0x22, 0x12, 0x12, 0x81, 0x80, 0x80, - 0x80, 0x98, 0xdb, 0xdd, 0xcc, 0xbc, 0xac, 0xaa, 0x9a, 0x09, 0x31, 0x45, 0x43, 0x24, 0x22, 0x32, - 0x21, 0x00, 0x00, 0x08, 0x88, 0x90, 0xa8, 0xdd, 0xcd, 0xbd, 0xcb, 0xaa, 0xab, 0x89, 0x20, 0x63, - 0x34, 0x24, 0x33, 0x32, 0x23, 0x11, 0x00, 0x00, 0x80, 0x98, 0xa8, 0xfb, 0xce, 0xcc, 0xbb, 0xac, - 0xab, 0x9a, 0x08, 0x43, 0x44, 0x34, 0x42, 0x32, 0x22, 0x11, 0x01, 0x80, 0x80, 0x88, 0x88, 0xc9, - 0xde, 0xcc, 0xbb, 0xbc, 0xbb, 0xab, 0x89, 0x41, 0x44, 0x34, 0x43, 0x33, 0x32, 0x12, 0x11, 0x80, - 0x90, 0x98, 0x88, 0xb9, 0xdf, 0xcc, 0xbc, 0xac, 0xbb, 0xbb, 0x99, 0x20, 0x35, 0x35, 0x34, 0x43, - 0x23, 0x12, 0x11, 0x00, 0x90, 0x88, 0x08, 0x90, 0xdc, 0xcd, 0xbc, 0xbc, 0xac, 0xcb, 0x99, 0x08, - 0x31, 0x44, 0x43, 0x43, 0x23, 0x13, 0x12, 0x11, 0x88, 0x88, 0x00, 0x81, 0xc9, 0xce, 0xbd, 0xbd, - 0xbb, 0xad, 0x9b, 0x89, 0x20, 0x53, 0x43, 0x34, 0x43, 0x22, 0x21, 0x11, 0x80, 0x88, 0x08, 0x01, - 0x98, 0xec, 0xcc, 0xbc, 0xbc, 0xad, 0xab, 0x99, 0x00, 0x42, 0x43, 0x44, 0x23, 0x23, 0x23, 0x12, - 0x00, 0x88, 0x80, 0x10, 0x90, 0xfb, 0xbd, 0xbd, 0xcc, 0xbb, 0xbc, 0xa9, 0x08, 0x31, 0x63, 0x53, - 0x32, 0x23, 0x33, 0x22, 0x01, 0x90, 0x88, 0x10, 0x01, 0xd9, 0xcd, 0xbc, 0xcd, 0xcb, 0xac, 0xaa, - 0x89, 0x10, 0x43, 0x34, 0x34, 0x43, 0x23, 0x22, 0x02, 0x80, 0x08, 0x00, 0x01, 0xb9, 0xcd, 0xcd, - 0xdb, 0xcb, 0xbc, 0xaa, 0x9a, 0x18, 0x41, 0x34, 0x34, 0x34, 0x33, 0x23, 0x13, 0x80, 0x08, 0x00, - 0x01, 0xa0, 0xcc, 0xcd, 0xbc, 0xbe, 0xbc, 0xbb, 0xab, 0x89, 0x31, 0x54, 0x43, 0x43, 0x33, 0x33, - 0x22, 0x80, 0x80, 0x08, 0x00, 0x80, 0xcb, 0xcc, 0xdc, 0xbd, 0xbc, 0xac, 0xab, 0x8a, 0x10, 0x43, - 0x34, 0x35, 0x43, 0x23, 0x13, 0x11, 0x08, 0x08, 0x00, 0x90, 0xb9, 0xcb, 0xdd, 0xcd, 0xcb, 0xbb, - 0xac, 0x9a, 0x08, 0x32, 0x44, 0x34, 0x43, 0x24, 0x22, 0x11, 0x80, 0x80, 0x00, 0x90, 0x99, 0xa9, - 0xdc, 0xcd, 0xbc, 0xbc, 0xac, 0x9b, 0x09, 0x21, 0x43, 0x44, 0x43, 0x24, 0x23, 0x11, 0x80, 0x00, - 0x00, 0x98, 0x98, 0x98, 0xfb, 0xdb, 0xbc, 0xbd, 0xbc, 0xab, 0x99, 0x10, 0x42, 0x53, 0x43, 0x34, - 0x23, 0x22, 0x00, 0x00, 0x00, 0x98, 0x88, 0x98, 0xda, 0xdc, 0xeb, 0xdb, 0xbb, 0xac, 0x9a, 0x08, - 0x21, 0x34, 0x44, 0x43, 0x24, 0x12, 0x01, 0x10, 0x00, 0x88, 0x88, 0x98, 0xaa, 0xcd, 0xcc, 0xcc, - 0xcb, 0xbb, 0xab, 0x09, 0x20, 0x43, 0x44, 0x44, 0x33, 0x23, 0x11, 0x01, 0x00, 0x88, 0x08, 0x88, - 0x99, 0xdb, 0xcd, 0xcc, 0xbd, 0xcb, 0xab, 0x89, 0x18, 0x21, 0x34, 0x36, 0x34, 0x33, 0x12, 0x12, - 0x00, 0x88, 0x88, 0x80, 0x99, 0xba, 0xdd, 0xdc, 0xcc, 0xac, 0xbb, 0x9a, 0x88, 0x11, 0x42, 0x45, - 0x43, 0x23, 0x23, 0x12, 0x00, 0x80, 0x88, 0x88, 0x88, 0x99, 0xca, 0xed, 0xcc, 0xcc, 0xab, 0x9b, - 0x99, 0x08, 0x21, 0x45, 0x34, 0x33, 0x24, 0x12, 0x01, 0x00, 0x88, 0x88, 0x08, 0x98, 0x98, 0xec, - 0xcd, 0xcc, 0xbc, 0xaa, 0x99, 0x89, 0x10, 0x53, 0x34, 0x34, 0x33, 0x23, 0x12, 0x11, 0x00, 0x18, - 0x08, 0x00, 0x81, 0xda, 0xde, 0xcd, 0xbc, 0xab, 0xaa, 0xaa, 0x08, 0x42, 0x35, 0x34, 0x34, 0x32, - 0x12, 0x11, 0x10, 0x00, 0x10, 0x10, 0x10, 0xa8, 0xfd, 0xcd, 0xbc, 0xbb, 0xbb, 0xab, 0x99, 0x41, - 0x44, 0x53, 0x33, 0x43, 0x22, 0x01, 0x01, 0x01, 0x08, 0x01, 0x11, 0x11, 0xe9, 0xde, 0xbc, 0xcb, - 0xba, 0xab, 0x9a, 0x10, 0x43, 0x35, 0x35, 0x33, 0x33, 0x21, 0x11, 0x00, 0x00, 0x08, 0x18, 0x22, - 0xc0, 0xef, 0xcc, 0xbb, 0xcb, 0xba, 0x9a, 0x09, 0x31, 0x44, 0x44, 0x33, 0x24, 0x21, 0x11, 0x01, - 0x80, 0x88, 0x18, 0x22, 0x02, 0xed, 0xbd, 0xbd, 0xcb, 0xbb, 0xba, 0x89, 0x10, 0x43, 0x45, 0x33, - 0x24, 0x22, 0x11, 0x11, 0x00, 0x88, 0x08, 0x53, 0x12, 0xc9, 0xdd, 0xdb, 0xcb, 0xbb, 0xbb, 0x9a, - 0x88, 0x22, 0x55, 0x43, 0x32, 0x32, 0x22, 0x12, 0x02, 0x80, 0x20, 0x63, 0x32, 0x90, 0xdc, 0xcc, - 0xcc, 0xbb, 0xbc, 0xaa, 0x99, 0x18, 0x43, 0x35, 0x24, 0x33, 0x22, 0x32, 0x11, 0x80, 0x10, 0x44, - 0x33, 0x01, 0xea, 0xdb, 0xcc, 0xbc, 0xbb, 0xbb, 0xab, 0x0a, 0x41, 0x44, 0x34, 0x33, 0x33, 0x24, - 0x12, 0x00, 0x00, 0x42, 0x34, 0x12, 0xa9, 0xcd, 0xcd, 0xcb, 0xac, 0xab, 0xab, 0x8a, 0x20, 0x53, - 0x34, 0x43, 0x32, 0x33, 0x22, 0x80, 0x08, 0x42, 0x44, 0x12, 0x81, 0xca, 0xcd, 0xbd, 0xcb, 0xbb, - 0xbb, 0xab, 0x08, 0x52, 0x53, 0x32, 0x24, 0x33, 0x23, 0x01, 0x80, 0x31, 0x44, 0x33, 0x11, 0xb8, - 0xce, 0xbd, 0xcc, 0xbb, 0xac, 0xab, 0x89, 0x20, 0x34, 0x34, 0x43, 0x34, 0x32, 0x01, 0x00, 0x21, - 0x34, 0x34, 0x23, 0x81, 0xeb, 0xcc, 0xcc, 0xbb, 0xbc, 0xbb, 0x9a, 0x18, 0x43, 0x43, 0x43, 0x34, - 0x23, 0x12, 0x00, 0x30, 0x43, 0x43, 0x33, 0x12, 0xb9, 0xce, 0xbd, 0xcc, 0xcb, 0xbb, 0x9b, 0x89, - 0x21, 0x42, 0x43, 0x44, 0x23, 0x02, 0x01, 0x11, 0x42, 0x43, 0x33, 0x13, 0x90, 0xfb, 0xbc, 0xcc, - 0xbc, 0xcb, 0xab, 0x89, 0x18, 0x21, 0x43, 0x44, 0x33, 0x13, 0x11, 0x11, 0x32, 0x44, 0x34, 0x32, - 0x01, 0xb9, 0xce, 0xdb, 0xcc, 0xbb, 0xbb, 0xab, 0x88, 0x10, 0x42, 0x35, 0x25, 0x22, 0x11, 0x11, - 0x32, 0x53, 0x43, 0x33, 0x22, 0x98, 0xcc, 0xcc, 0xcc, 0xcb, 0xbb, 0xaa, 0x99, 0x88, 0x21, 0x44, - 0x34, 0x32, 0x22, 0x21, 0x32, 0x44, 0x53, 0x33, 0x22, 0x91, 0xc9, 0xcc, 0xdc, 0xcb, 0xac, 0xaa, - 0x99, 0x89, 0x18, 0x42, 0x53, 0x32, 0x22, 0x22, 0x32, 0x53, 0x34, 0x34, 0x32, 0x11, 0x98, 0xcb, - 0xdd, 0xcc, 0xbb, 0xac, 0xa9, 0xa9, 0x08, 0x31, 0x34, 0x34, 0x33, 0x33, 0x33, 0x44, 0x53, 0x33, - 0x33, 0x22, 0x80, 0xca, 0xcd, 0xcd, 0xcb, 0xab, 0xab, 0xaa, 0x89, 0x20, 0x34, 0x25, 0x33, 0x23, - 0x43, 0x33, 0x44, 0x34, 0x32, 0x12, 0x01, 0x99, 0xfb, 0xcc, 0xbc, 0xac, 0xab, 0xab, 0x9a, 0x00, - 0x42, 0x43, 0x33, 0x24, 0x33, 0x43, 0x53, 0x33, 0x34, 0x13, 0x02, 0x80, 0xca, 0xce, 0xcc, 0xbb, - 0xbb, 0xbb, 0xab, 0x89, 0x31, 0x44, 0x43, 0x23, 0x33, 0x33, 0x45, 0x33, 0x35, 0x22, 0x12, 0x12, - 0xb8, 0xed, 0xdb, 0xbb, 0xbc, 0xbb, 0xba, 0x99, 0x10, 0x32, 0x35, 0x43, 0x32, 0x24, 0x43, 0x34, - 0x24, 0x23, 0x23, 0x22, 0x91, 0xfb, 0xcc, 0xcb, 0xcb, 0xbb, 0xab, 0xaa, 0x88, 0x21, 0x43, 0x43, - 0x33, 0x34, 0x34, 0x44, 0x43, 0x32, 0x22, 0x13, 0x82, 0xc9, 0xcd, 0xcc, 0xbb, 0xbc, 0xbb, 0xab, - 0x8a, 0x00, 0x42, 0x33, 0x35, 0x32, 0x34, 0x44, 0x24, 0x23, 0x32, 0x23, 0x02, 0xb8, 0xdd, 0xcc, - 0xcb, 0xbb, 0xbc, 0xaa, 0x8a, 0x08, 0x21, 0x43, 0x24, 0x33, 0x43, 0x44, 0x43, 0x32, 0x32, 0x23, - 0x13, 0x90, 0xdc, 0xcc, 0xdb, 0xbb, 0xbc, 0xba, 0x9a, 0x88, 0x10, 0x33, 0x35, 0x32, 0x43, 0x34, - 0x35, 0x32, 0x33, 0x34, 0x23, 0x81, 0xc9, 0xdc, 0xdb, 0xcb, 0xcb, 0xba, 0xaa, 0x8a, 0x08, 0x31, - 0x34, 0x32, 0x53, 0x53, 0x33, 0x34, 0x33, 0x34, 0x33, 0x02, 0x99, 0xcc, 0xcd, 0xcb, 0xcb, 0xbb, - 0xbb, 0xaa, 0x89, 0x21, 0x43, 0x32, 0x34, 0x35, 0x34, 0x34, 0x33, 0x34, 0x24, 0x12, 0x80, 0xc9, - 0xeb, 0xcb, 0xbc, 0xbb, 0xac, 0xab, 0x8a, 0x18, 0x22, 0x33, 0x44, 0x53, 0x43, 0x33, 0x34, 0x43, - 0x23, 0x13, 0x01, 0xa8, 0xbd, 0xcd, 0xbc, 0xbc, 0xba, 0xac, 0x99, 0x08, 0x11, 0x32, 0x33, 0x45, - 0x34, 0x33, 0x43, 0x34, 0x33, 0x33, 0x02, 0xa0, 0xdb, 0xcd, 0xdb, 0xbb, 0xbc, 0xbb, 0xaa, 0x89, - 0x11, 0x22, 0x43, 0x44, 0x43, 0x33, 0x34, 0x34, 0x33, 0x24, 0x12, 0x00, 0xa9, 0xdc, 0xcc, 0xcb, - 0xbb, 0xbc, 0xbb, 0x99, 0x08, 0x11, 0x22, 0x54, 0x43, 0x33, 0x34, 0x34, 0x34, 0x23, 0x23, 0x11, - 0x98, 0xeb, 0xcc, 0xcb, 0xcb, 0xac, 0xab, 0x9b, 0x89, 0x00, 0x20, 0x43, 0x34, 0x34, 0x34, 0x34, - 0x34, 0x43, 0x22, 0x21, 0x80, 0xb9, 0xdc, 0xbc, 0xbc, 0xbd, 0xbb, 0xba, 0x99, 0x88, 0x18, 0x33, - 0x45, 0x43, 0x43, 0x43, 0x43, 0x32, 0x23, 0x22, 0x02, 0xa9, 0xdc, 0xdb, 0xcb, 0xbc, 0xac, 0xab, - 0x9a, 0x89, 0x08, 0x21, 0x43, 0x34, 0x34, 0x44, 0x43, 0x33, 0x32, 0x33, 0x12, 0x90, 0xcb, 0xcd, - 0xdb, 0xdb, 0xbb, 0xbb, 0xab, 0x9a, 0x89, 0x20, 0x42, 0x44, 0x43, 0x53, 0x33, 0x34, 0x32, 0x33, - 0x13, 0x81, 0xc9, 0xdb, 0xdb, 0xcc, 0xcb, 0xab, 0xab, 0xaa, 0x89, 0x08, 0x22, 0x34, 0x44, 0x34, - 0x34, 0x34, 0x42, 0x22, 0x22, 0x02, 0xa8, 0xb9, 0xdc, 0xcc, 0xbc, 0xbb, 0xac, 0xab, 0xa9, 0x88, - 0x10, 0x32, 0x44, 0x44, 0x24, 0x24, 0x24, 0x32, 0x32, 0x11, 0x80, 0x98, 0xdb, 0xcc, 0xcc, 0xbb, - 0xac, 0xab, 0xaa, 0x8a, 0x08, 0x21, 0x53, 0x44, 0x43, 0x34, 0x33, 0x34, 0x33, 0x12, 0x01, 0x90, - 0xca, 0xdc, 0xdb, 0xac, 0xbb, 0xcb, 0xaa, 0x99, 0x89, 0x00, 0x32, 0x45, 0x53, 0x43, 0x33, 0x34, - 0x33, 0x13, 0x12, 0x80, 0xa9, 0xdc, 0xcc, 0xbc, 0xcb, 0xba, 0xbb, 0x9b, 0x9a, 0x08, 0x21, 0x44, - 0x35, 0x25, 0x24, 0x24, 0x33, 0x22, 0x12, 0x10, 0x98, 0xca, 0xcd, 0xcb, 0xbc, 0xcb, 0xab, 0xaa, - 0xaa, 0x98, 0x10, 0x42, 0x54, 0x33, 0x44, 0x43, 0x33, 0x32, 0x12, 0x02, 0x00, 0xb9, 0xce, 0xcb, - 0xbc, 0xad, 0xab, 0xab, 0xaa, 0x99, 0x09, 0x31, 0x54, 0x43, 0x34, 0x44, 0x23, 0x33, 0x12, 0x12, - 0x01, 0xa8, 0xeb, 0xdb, 0xdb, 0xbb, 0xbc, 0xbb, 0xaa, 0x9b, 0x8a, 0x28, 0x53, 0x34, 0x45, 0x33, - 0x35, 0x32, 0x23, 0x12, 0x02, 0x90, 0xba, 0xdd, 0xdb, 0xbb, 0xeb, 0xab, 0xaa, 0xaa, 0x99, 0x08, - 0x31, 0x44, 0x34, 0x35, 0x44, 0x32, 0x22, 0x22, 0x11, 0x81, 0xa9, 0xdb, 0xcc, 0xbc, 0xcc, 0xaa, - 0xab, 0xba, 0x9a, 0x89, 0x21, 0x43, 0x35, 0x35, 0x35, 0x33, 0x33, 0x33, 0x22, 0x11, 0x98, 0xbc, - 0xbe, 0xbd, 0xad, 0xbb, 0xbb, 0xac, 0xaa, 0x89, 0x18, 0x33, 0x35, 0x45, 0x34, 0x24, 0x23, 0x23, - 0x23, 0x11, 0x91, 0xb9, 0xdc, 0xcc, 0xdb, 0xba, 0xbb, 0xcb, 0xaa, 0x9a, 0x08, 0x11, 0x43, 0x45, - 0x34, 0x34, 0x33, 0x33, 0x33, 0x23, 0x00, 0x98, 0xdb, 0xdd, 0xcb, 0xbb, 0xbc, 0xbb, 0xbb, 0xab, - 0x89, 0x10, 0x42, 0x45, 0x44, 0x43, 0x33, 0x33, 0x33, 0x23, 0x11, 0x80, 0xba, 0xcf, 0xbc, 0xbc, - 0xcb, 0xab, 0xac, 0xaa, 0x99, 0x08, 0x20, 0x53, 0x35, 0x44, 0x33, 0x33, 0x24, 0x23, 0x11, 0x01, - 0x98, 0xcc, 0xcc, 0xcb, 0xcb, 0xbb, 0xcb, 0xaa, 0x9a, 0x89, 0x18, 0x43, 0x45, 0x53, 0x33, 0x43, - 0x33, 0x32, 0x22, 0x11, 0x80, 0xda, 0xcc, 0xdb, 0xbb, 0xdb, 0xba, 0xab, 0xaa, 0x99, 0x88, 0x22, - 0x46, 0x53, 0x33, 0x34, 0x24, 0x23, 0x22, 0x21, 0x81, 0xb8, 0xdc, 0xbc, 0xbc, 0xbc, 0xbc, 0xaa, - 0xab, 0x99, 0x89, 0x28, 0x54, 0x34, 0x34, 0x44, 0x32, 0x32, 0x22, 0x22, 0x01, 0x98, 0xcc, 0xcc, - 0xcb, 0xdb, 0xba, 0xab, 0xab, 0xaa, 0x9a, 0x08, 0x53, 0x44, 0x34, 0x34, 0x43, 0x32, 0x23, 0x32, - 0x12, 0x91, 0xcb, 0xbd, 0xbd, 0xcc, 0xbb, 0xcb, 0xaa, 0x9a, 0xaa, 0x88, 0x32, 0x54, 0x53, 0x43, - 0x43, 0x32, 0x32, 0x32, 0x22, 0x82, 0xb9, 0xeb, 0xcc, 0xcb, 0xbc, 0xbb, 0xab, 0xbb, 0xbb, 0x99, - 0x11, 0x44, 0x35, 0x35, 0x34, 0x43, 0x32, 0x32, 0x33, 0x12, 0x88, 0xda, 0xdb, 0xcc, 0xcb, 0xbb, - 0xba, 0xcb, 0xaa, 0x9a, 0x08, 0x31, 0x35, 0x36, 0x53, 0x23, 0x33, 0x34, 0x32, 0x12, 0x81, 0xa9, - 0xcc, 0xcc, 0xcc, 0xab, 0xbb, 0xcb, 0xaa, 0xaa, 0x89, 0x11, 0x53, 0x44, 0x53, 0x33, 0x42, 0x23, - 0x24, 0x12, 0x01, 0x98, 0xba, 0xcd, 0xbd, 0xcb, 0xab, 0xac, 0xba, 0xaa, 0x99, 0x00, 0x41, 0x63, - 0x34, 0x33, 0x34, 0x24, 0x43, 0x22, 0x01, 0x80, 0xa8, 0xeb, 0xbc, 0xbc, 0xbc, 0xba, 0xcb, 0xaa, - 0x9a, 0x88, 0x21, 0x44, 0x35, 0x34, 0x33, 0x25, 0x33, 0x33, 0x22, 0x01, 0x98, 0xeb, 0xcc, 0xcb, - 0xbb, 0xbc, 0xbb, 0xbb, 0xab, 0x99, 0x18, 0x63, 0x44, 0x43, 0x33, 0x34, 0x34, 0x33, 0x13, 0x12, - 0x81, 0xca, 0xdc, 0xdb, 0xbb, 0xcb, 0xbb, 0xac, 0x9a, 0xa9, 0x08, 0x32, 0x45, 0x34, 0x43, 0x43, - 0x33, 0x24, 0x22, 0x12, 0x81, 0xb8, 0xcc, 0xbd, 0xbc, 0xcb, 0xcb, 0xaa, 0xab, 0xaa, 0x89, 0x20, - 0x44, 0x34, 0x34, 0x34, 0x44, 0x32, 0x22, 0x22, 0x02, 0x90, 0xcb, 0xcd, 0xcb, 0xbb, 0xad, 0xab, - 0xaa, 0xab, 0x99, 0x10, 0x44, 0x34, 0x53, 0x33, 0x35, 0x33, 0x33, 0x33, 0x22, 0x81, 0xda, 0xcc, - 0xdb, 0xbb, 0xbc, 0xbb, 0xcb, 0xaa, 0xaa, 0x08, 0x32, 0x45, 0x33, 0x45, 0x33, 0x34, 0x33, 0x33, - 0x23, 0x01, 0xb8, 0xcd, 0xbc, 0xbd, 0xbc, 0xbb, 0xbb, 0xac, 0xaa, 0x0a, 0x21, 0x34, 0x44, 0x34, - 0x34, 0x34, 0x33, 0x24, 0x22, 0x12, 0x98, 0xca, 0xcc, 0xcc, 0xbb, 0xcb, 0xab, 0xcb, 0xaa, 0x9a, - 0x00, 0x22, 0x44, 0x53, 0x43, 0x24, 0x24, 0x22, 0x23, 0x22, 0x00, 0xa9, 0xcc, 0xcc, 0xcb, 0xac, - 0xbb, 0xbb, 0xcb, 0x9a, 0x08, 0x20, 0x53, 0x43, 0x44, 0x33, 0x34, 0x43, 0x23, 0x23, 0x11, 0x90, - 0xda, 0xdb, 0xdb, 0xbb, 0xbb, 0xbc, 0xac, 0x9b, 0x89, 0x18, 0x32, 0x44, 0x34, 0x35, 0x43, 0x33, - 0x24, 0x23, 0x12, 0x81, 0xb9, 0xdc, 0xbc, 0xbc, 0xac, 0xcb, 0xab, 0xab, 0x9a, 0x18, 0x11, 0x43, - 0x45, 0x43, 0x33, 0x35, 0x32, 0x24, 0x22, 0x01, 0x88, 0xcb, 0xbd, 0xbc, 0xbc, 0xbc, 0xbb, 0xcb, - 0x9a, 0x88, 0x08, 0x31, 0x44, 0x34, 0x35, 0x33, 0x25, 0x33, 0x23, 0x22, 0x00, 0xba, 0xce, 0xbb, - 0xbd, 0xcb, 0xbb, 0xac, 0x9b, 0x99, 0x09, 0x20, 0x53, 0x34, 0x35, 0x43, 0x43, 0x43, 0x22, 0x22, - 0x11, 0xa8, 0xcb, 0xcc, 0xcb, 0xac, 0xac, 0xbb, 0xaa, 0xaa, 0x89, 0x10, 0x32, 0x46, 0x43, 0x43, - 0x43, 0x33, 0x24, 0x23, 0x13, 0x80, 0xba, 0xbd, 0xbd, 0xbc, 0xcc, 0xba, 0xba, 0xaa, 0x99, 0x88, - 0x21, 0x35, 0x35, 0x34, 0x34, 0x24, 0x24, 0x23, 0x23, 0x00, 0xa8, 0xdb, 0xbc, 0xcc, 0xcb, 0xbb, - 0xbb, 0xbb, 0xaa, 0x89, 0x20, 0x63, 0x34, 0x34, 0x35, 0x33, 0x34, 0x24, 0x23, 0x11, 0x98, 0xba, - 0xbd, 0xcd, 0xcb, 0xbb, 0xcb, 0xaa, 0xaa, 0x99, 0x18, 0x32, 0x44, 0x44, 0x33, 0x34, 0x34, 0x43, - 0x23, 0x13, 0x00, 0xa9, 0xbc, 0xcd, 0xbc, 0xbc, 0xbb, 0xbb, 0xbb, 0xab, 0x08, 0x21, 0x44, 0x35, - 0x25, 0x24, 0x43, 0x42, 0x22, 0x22, 0x01, 0x88, 0xba, 0xcd, 0xdb, 0xbb, 0xad, 0xba, 0xab, 0xaa, - 0x99, 0x00, 0x42, 0x34, 0x35, 0x34, 0x53, 0x42, 0x32, 0x23, 0x11, 0x80, 0xa9, 0xcc, 0xcc, 0xac, - 0xac, 0xab, 0xbb, 0xaa, 0x9a, 0x88, 0x31, 0x54, 0x43, 0x43, 0x43, 0x43, 0x24, 0x22, 0x22, 0x10, - 0xa8, 0xba, 0xdd, 0xcb, 0xac, 0xbb, 0xac, 0xab, 0x9a, 0x89, 0x10, 0x42, 0x44, 0x43, 0x33, 0x44, - 0x24, 0x23, 0x23, 0x02, 0x80, 0xa9, 0xcd, 0xbc, 0xbc, 0xbc, 0xbb, 0xac, 0xaa, 0x99, 0x08, 0x32, - 0x44, 0x34, 0x43, 0x34, 0x34, 0x43, 0x22, 0x12, 0x01, 0x98, 0xdb, 0xbc, 0xbd, 0xdb, 0xba, 0xbb, - 0xbb, 0xaa, 0x99, 0x21, 0x35, 0x34, 0x44, 0x43, 0x43, 0x24, 0x23, 0x22, 0x11, 0x90, 0xba, 0xcd, - 0xbc, 0xbc, 0xbc, 0xbb, 0xbb, 0xbb, 0x9a, 0x10, 0x43, 0x34, 0x35, 0x44, 0x33, 0x35, 0x33, 0x32, - 0x23, 0x81, 0xa8, 0xcc, 0xcc, 0xbc, 0xbc, 0xcb, 0xba, 0xba, 0x9a, 0x08, 0x21, 0x34, 0x35, 0x34, - 0x35, 0x43, 0x33, 0x33, 0x33, 0x11, 0x98, 0xdb, 0xcc, 0xbc, 0xbc, 0xbc, 0xba, 0xbb, 0xbb, 0x88, - 0x20, 0x43, 0x44, 0x43, 0x44, 0x33, 0x34, 0x33, 0x33, 0x12, 0x81, 0xaa, 0xcd, 0xcc, 0xcb, 0xbb, - 0xbc, 0xbb, 0xbb, 0x99, 0x08, 0x22, 0x34, 0x45, 0x53, 0x33, 0x34, 0x43, 0x23, 0x22, 0x11, 0x98, - 0xc9, 0xcc, 0xbc, 0xbc, 0xbc, 0xcb, 0xab, 0xaa, 0x88, 0x00, 0x22, 0x44, 0x34, 0x35, 0x43, 0x34, - 0x23, 0x33, 0x21, 0x00, 0xa9, 0xdc, 0xbc, 0xdb, 0xbb, 0xbc, 0xac, 0xaa, 0x8a, 0x88, 0x11, 0x42, - 0x44, 0x43, 0x43, 0x43, 0x33, 0x24, 0x21, 0x01, 0x80, 0xca, 0xbc, 0xcc, 0xcb, 0xcb, 0xbb, 0xac, - 0x99, 0x89, 0x00, 0x22, 0x44, 0x53, 0x33, 0x35, 0x33, 0x24, 0x22, 0x12, 0x00, 0xaa, 0xbd, 0xbd, - 0xdb, 0xcb, 0xcb, 0xaa, 0xaa, 0x99, 0x09, 0x20, 0x53, 0x43, 0x34, 0x44, 0x33, 0x43, 0x22, 0x22, - 0x01, 0xa8, 0xca, 0xcc, 0xdb, 0xcb, 0xcb, 0xba, 0xba, 0x9a, 0x99, 0x10, 0x32, 0x35, 0x35, 0x35, - 0x34, 0x43, 0x22, 0x23, 0x11, 0x80, 0xb9, 0xbd, 0xcc, 0xdb, 0xcb, 0xbb, 0xba, 0xab, 0x8a, 0x09, - 0x21, 0x44, 0x53, 0x34, 0x34, 0x34, 0x32, 0x33, 0x23, 0x01, 0xa9, 0xcb, 0xcc, 0xdc, 0xbb, 0xbc, - 0xbb, 0xac, 0xa9, 0x89, 0x10, 0x31, 0x63, 0x44, 0x33, 0x44, 0x32, 0x33, 0x22, 0x12, 0x88, 0xaa, - 0xdb, 0xcd, 0xcb, 0xbc, 0xbb, 0xbb, 0xbb, 0xaa, 0x08, 0x21, 0x44, 0x45, 0x43, 0x43, 0x43, 0x32, - 0x23, 0x12, 0x00, 0x88, 0xcb, 0xcc, 0xcc, 0xcb, 0xca, 0xaa, 0xab, 0x99, 0x89, 0x08, 0x32, 0x45, - 0x44, 0x33, 0x34, 0x34, 0x32, 0x22, 0x01, 0x80, 0xaa, 0xdc, 0xdb, 0xbc, 0xbb, 0xbc, 0xbb, 0xaa, - 0x9a, 0x09, 0x21, 0x45, 0x34, 0x35, 0x43, 0x24, 0x33, 0x22, 0x11, 0x01, 0xa8, 0xca, 0xcd, 0xdb, - 0xca, 0xab, 0xbb, 0xab, 0xaa, 0x89, 0x00, 0x53, 0x44, 0x34, 0x53, 0x33, 0x24, 0x32, 0x21, 0x01, - 0x80, 0xba, 0xcd, 0xbc, 0xcc, 0xcb, 0xba, 0xba, 0xaa, 0x99, 0x08, 0x31, 0x54, 0x34, 0x53, 0x34, - 0x33, 0x23, 0x23, 0x21, 0x00, 0xb8, 0xcc, 0xbd, 0xcc, 0xbc, 0xbb, 0xbb, 0xab, 0xba, 0x99, 0x11, - 0x44, 0x44, 0x53, 0x43, 0x33, 0x24, 0x22, 0x12, 0x02, 0x88, 0xba, 0xcd, 0xcc, 0xbb, 0xdb, 0x6c, - 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, 0xd0, 0x08, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, - 0xf8, 0x71, 0xff, 0x4f, 0x31, 0x17, 0xb3, 0x7a, 0x06, 0xa9, 0x08, 0xcb, 0x09, 0x14, 0x32, 0xfa, - 0x1a, 0xb0, 0x2a, 0x04, 0xb0, 0xbf, 0x08, 0x08, 0x00, 0x08, 0x00, 0x10, 0x89, 0x52, 0x05, 0x49, - 0x36, 0x13, 0xb9, 0x9a, 0x29, 0x13, 0x17, 0xac, 0x31, 0xc1, 0x2a, 0xa4, 0xbd, 0xae, 0x78, 0x91, - 0x9b, 0x10, 0xa1, 0x21, 0x03, 0x19, 0x82, 0x10, 0x73, 0x83, 0x8b, 0xa8, 0x3a, 0x25, 0x00, 0x98, - 0x99, 0x89, 0xcb, 0x80, 0xff, 0x39, 0x14, 0xea, 0xab, 0x18, 0x42, 0xa2, 0x8f, 0x11, 0x9a, 0x00, - 0x88, 0x30, 0x02, 0xab, 0x31, 0x83, 0x72, 0xa7, 0x8c, 0x80, 0x28, 0x13, 0xcb, 0x39, 0x84, 0x8a, - 0x33, 0xa8, 0xba, 0x88, 0x8a, 0x47, 0x82, 0xbc, 0x31, 0xb0, 0x0a, 0x52, 0x12, 0x99, 0x21, 0x52, - 0x03, 0xed, 0x29, 0x83, 0x0b, 0x25, 0x99, 0x21, 0xa2, 0xdb, 0x0e, 0x35, 0x11, 0x8a, 0xb0, 0x0c, - 0x41, 0xb8, 0x0b, 0x33, 0xfb, 0x8c, 0x11, 0x99, 0x99, 0x10, 0x31, 0x91, 0x89, 0x58, 0x15, 0xa8, - 0x0a, 0x26, 0x80, 0xa8, 0xed, 0xcb, 0x39, 0x33, 0x92, 0xac, 0xca, 0x9b, 0x18, 0x22, 0x04, 0xad, - 0x19, 0xa1, 0x8b, 0x22, 0x42, 0x47, 0xb9, 0x39, 0x25, 0x81, 0xb9, 0x58, 0x02, 0x91, 0x8d, 0x42, - 0xc1, 0x0a, 0x30, 0x04, 0xaf, 0x41, 0x03, 0xdb, 0x18, 0x20, 0x03, 0x88, 0xb8, 0x29, 0x46, 0x08, - 0x14, 0xa9, 0x18, 0x00, 0xa9, 0xfb, 0x9a, 0x71, 0xa2, 0xbb, 0x19, 0xb8, 0x8b, 0x21, 0x20, 0x06, - 0xbc, 0x0a, 0x88, 0x52, 0x90, 0x90, 0x0c, 0x43, 0x26, 0xb8, 0x8a, 0x91, 0x10, 0x9a, 0x03, 0x9d, - 0x91, 0xba, 0xff, 0x19, 0x90, 0x08, 0xaa, 0xcb, 0x2a, 0x24, 0x00, 0x98, 0x20, 0x44, 0xa8, 0x78, - 0x04, 0x8a, 0x33, 0x33, 0x67, 0xa8, 0x09, 0x80, 0x80, 0x90, 0xac, 0xb9, 0x9a, 0x29, 0x25, 0x25, - 0xe8, 0x8a, 0x01, 0x30, 0x43, 0x02, 0x9b, 0x23, 0x58, 0x85, 0xbb, 0x2a, 0x25, 0x42, 0x90, 0x9a, - 0xac, 0x42, 0x02, 0x28, 0xf8, 0x0d, 0x08, 0xdb, 0x00, 0x1a, 0x23, 0xb8, 0x9c, 0x98, 0xaf, 0x01, - 0x10, 0xb1, 0x9c, 0x18, 0x23, 0xeb, 0x0a, 0x08, 0x24, 0x11, 0x31, 0xa1, 0x99, 0x58, 0x57, 0xb8, - 0x28, 0xb8, 0x19, 0x33, 0x31, 0x83, 0xed, 0x9c, 0x34, 0xeb, 0x1a, 0x32, 0x91, 0x0a, 0x82, 0x0b, - 0x01, 0x64, 0x01, 0x20, 0x33, 0x11, 0xb8, 0x11, 0xfa, 0x2d, 0x27, 0xb8, 0x99, 0x89, 0x98, 0x0b, - 0x04, 0xbd, 0x43, 0xa0, 0xad, 0x02, 0x2b, 0x37, 0xb9, 0x09, 0x99, 0x22, 0x52, 0x12, 0x11, 0xfb, - 0x58, 0x02, 0xb9, 0xba, 0x9d, 0x11, 0x32, 0xd8, 0xbc, 0x9a, 0x31, 0x24, 0x93, 0xad, 0xaa, 0x41, - 0x83, 0xbd, 0x41, 0xb0, 0x3a, 0x16, 0x11, 0xa8, 0x89, 0x31, 0x05, 0xbc, 0x8a, 0x31, 0xc0, 0x8a, - 0x09, 0x36, 0x82, 0x8a, 0xbc, 0x24, 0x90, 0x3a, 0x07, 0xb9, 0x0d, 0x04, 0x8a, 0x18, 0x54, 0x14, - 0xca, 0x18, 0x11, 0x01, 0xdb, 0x61, 0x11, 0xea, 0x18, 0x00, 0x92, 0x18, 0x88, 0x9a, 0xb9, 0x0d, - 0xb8, 0x08, 0x8b, 0xa1, 0x40, 0x40, 0x02, 0x08, 0xe8, 0x71, 0x96, 0x18, 0x90, 0x00, 0x88, 0x00, - 0xcb, 0xb9, 0x72, 0x86, 0xaa, 0x89, 0x21, 0xb1, 0x9e, 0x80, 0x42, 0xc8, 0x29, 0x82, 0xca, 0x18, - 0xa1, 0x48, 0xc1, 0xab, 0x8d, 0x13, 0x42, 0xb0, 0x19, 0x8a, 0x73, 0x84, 0x8b, 0x82, 0x38, 0x55, - 0x82, 0xaa, 0x21, 0xad, 0x41, 0xa4, 0x0d, 0xa0, 0x0b, 0x40, 0x13, 0x89, 0x90, 0x99, 0x19, 0x93, - 0x8d, 0x53, 0xc3, 0x2b, 0x37, 0x90, 0x20, 0x88, 0x13, 0xfd, 0x39, 0x14, 0x00, 0x89, 0x90, 0xbc, - 0xa9, 0xae, 0x98, 0x48, 0x82, 0xa9, 0x00, 0xea, 0x09, 0xbc, 0x53, 0xa9, 0x89, 0x02, 0x19, 0x17, - 0x98, 0x11, 0x34, 0x33, 0xc0, 0x0d, 0x02, 0xbd, 0x18, 0x80, 0x20, 0x22, 0x0d, 0x87, 0x8b, 0x02, - 0x42, 0xa8, 0xa9, 0x0b, 0x00, 0x51, 0x91, 0x31, 0xeb, 0xb9, 0x60, 0x02, 0xd0, 0x9d, 0x08, 0x31, - 0x14, 0xa8, 0x8c, 0x03, 0x08, 0x16, 0x89, 0x01, 0xc0, 0x78, 0x03, 0xb9, 0x2a, 0xea, 0x10, 0x88, - 0x80, 0x01, 0xb0, 0x4c, 0x84, 0xa1, 0x0e, 0x80, 0x22, 0x11, 0xfa, 0x1b, 0x02, 0x80, 0x09, 0xd1, - 0x2a, 0x02, 0x90, 0x0d, 0x93, 0x8d, 0x13, 0xc8, 0xac, 0x10, 0x15, 0x38, 0x15, 0x00, 0xfb, 0x19, - 0x98, 0x23, 0xb9, 0x19, 0xf8, 0x2a, 0x83, 0x0a, 0xec, 0x49, 0x93, 0x9d, 0x52, 0x13, 0x08, 0xd9, - 0x29, 0x80, 0x32, 0x02, 0xca, 0xc9, 0x9c, 0x42, 0x93, 0x8a, 0x12, 0xda, 0x39, 0x17, 0x9a, 0xa1, - 0x10, 0x2b, 0x17, 0x89, 0x20, 0xc0, 0x28, 0x90, 0x88, 0xb0, 0x9f, 0x32, 0x26, 0xc9, 0x00, 0x0a, - 0xb9, 0x41, 0x89, 0xa1, 0x3a, 0xdb, 0x12, 0x0b, 0x23, 0xdf, 0x33, 0x89, 0x11, 0xd9, 0x49, 0xc1, - 0x29, 0xa3, 0x8a, 0x10, 0x34, 0x82, 0xd8, 0x2a, 0xba, 0xc2, 0xac, 0x19, 0xf8, 0x1c, 0x13, 0xcb, - 0x39, 0xb2, 0x3a, 0x05, 0x9c, 0x02, 0x52, 0x00, 0x81, 0x21, 0x88, 0x74, 0x87, 0x89, 0x91, 0x28, - 0xa1, 0x19, 0xb2, 0xaf, 0xaa, 0x32, 0x90, 0x8a, 0x45, 0x12, 0x98, 0x9a, 0x30, 0x47, 0xb8, 0x91, - 0xae, 0x29, 0x14, 0x80, 0x28, 0xe8, 0x49, 0x34, 0xb0, 0xbd, 0x88, 0x8a, 0x51, 0x83, 0xaa, 0x08, - 0x90, 0xe1, 0x0e, 0x83, 0xab, 0x10, 0x21, 0x83, 0xcd, 0x19, 0x11, 0x50, 0x06, 0x08, 0x90, 0x19, - 0xc0, 0x18, 0x9c, 0x13, 0xaa, 0x39, 0x83, 0x89, 0x34, 0xca, 0xca, 0x0a, 0x67, 0x91, 0x09, 0xca, - 0xab, 0x42, 0x21, 0x15, 0xfa, 0x19, 0x90, 0x22, 0x12, 0x88, 0x82, 0xbc, 0x58, 0x14, 0x20, 0x82, - 0xab, 0x12, 0xa9, 0xe9, 0x68, 0xd1, 0x9a, 0x90, 0xab, 0x11, 0x04, 0x8c, 0x91, 0x38, 0x91, 0x62, - 0xb8, 0x1a, 0x23, 0x54, 0x91, 0xbd, 0x08, 0x1a, 0x05, 0x58, 0xd8, 0x18, 0x20, 0x91, 0xbf, 0x20, - 0x88, 0x88, 0x9a, 0x08, 0x52, 0x91, 0xac, 0x18, 0x24, 0x30, 0xa1, 0x24, 0xae, 0x14, 0x88, 0x20, - 0x02, 0x43, 0xc8, 0x2b, 0x35, 0xa8, 0xad, 0x08, 0xe1, 0x0c, 0xb0, 0x20, 0x19, 0xa8, 0x57, 0x00, - 0x09, 0xc1, 0x9d, 0x09, 0x20, 0x85, 0x8b, 0x10, 0x83, 0x1b, 0x24, 0x32, 0xa8, 0xa8, 0x0b, 0xc8, - 0x75, 0xa3, 0x0b, 0xf8, 0x39, 0xa1, 0x98, 0x0a, 0xfa, 0x51, 0xa1, 0x29, 0x02, 0xab, 0x20, 0x90, - 0x29, 0xe9, 0x51, 0x32, 0xa0, 0x80, 0x18, 0xb9, 0x48, 0x53, 0x94, 0x9a, 0xde, 0x89, 0x21, 0x99, - 0xf0, 0x3a, 0x82, 0x02, 0x0b, 0xb0, 0xad, 0x99, 0x62, 0x90, 0x43, 0xca, 0x18, 0x20, 0x82, 0x88, - 0x53, 0x91, 0x39, 0x77, 0x81, 0xaa, 0x29, 0xc2, 0x8a, 0x80, 0xa9, 0x8b, 0x83, 0x09, 0x64, 0xb1, - 0xaa, 0x41, 0xa1, 0x88, 0x1b, 0xa5, 0x38, 0x38, 0x77, 0x90, 0x9a, 0x11, 0x89, 0x12, 0x98, 0x54, - 0xd1, 0x8b, 0xb2, 0x2b, 0xf9, 0x09, 0x8a, 0x22, 0x88, 0xdb, 0x50, 0xb0, 0x8a, 0x52, 0x83, 0x32, - 0xfa, 0xa9, 0x8e, 0x23, 0x88, 0x20, 0x25, 0x08, 0xa3, 0x0c, 0x01, 0x10, 0x21, 0xb0, 0x0d, 0x04, - 0xb9, 0xbb, 0x2a, 0xf8, 0x3b, 0xda, 0x49, 0x13, 0x99, 0x18, 0x11, 0x8b, 0xd3, 0x8e, 0x63, 0x02, - 0x11, 0xec, 0x18, 0x01, 0x98, 0x99, 0x11, 0x18, 0x02, 0xaa, 0x46, 0x0a, 0x17, 0x99, 0xab, 0x91, - 0x2b, 0x27, 0x01, 0x19, 0xe8, 0x9a, 0x01, 0x18, 0xa8, 0x2a, 0x13, 0x22, 0xff, 0x89, 0x23, 0x98, - 0xa9, 0x89, 0x52, 0xc8, 0x89, 0x9c, 0x13, 0x12, 0x3a, 0x27, 0x30, 0x91, 0x89, 0x42, 0x11, 0x2a, - 0x97, 0xbe, 0x99, 0x20, 0x18, 0xa2, 0x81, 0xcf, 0x0a, 0xa0, 0x20, 0x62, 0x13, 0xdb, 0x30, 0x20, - 0x82, 0x80, 0x11, 0xbd, 0x43, 0x53, 0x82, 0xad, 0x33, 0xa9, 0x09, 0x81, 0x91, 0xcd, 0x9d, 0xc9, - 0x29, 0x32, 0x84, 0xa8, 0xdc, 0x9b, 0x33, 0x98, 0x20, 0x0a, 0x94, 0x7a, 0xb3, 0x60, 0xd0, 0x29, - 0x12, 0x02, 0x32, 0xcd, 0x21, 0x99, 0xa8, 0x2b, 0x94, 0x8a, 0x44, 0x01, 0xf9, 0x9d, 0x08, 0x02, - 0x28, 0xa1, 0x19, 0x10, 0x02, 0x3a, 0x67, 0xa9, 0x09, 0xa9, 0x34, 0x89, 0x32, 0xd9, 0x8b, 0x20, - 0x85, 0x09, 0x82, 0x22, 0xdd, 0x11, 0xda, 0x8c, 0x82, 0x9c, 0xa0, 0x0b, 0x22, 0xa0, 0x63, 0x19, - 0x37, 0x19, 0x82, 0xac, 0x40, 0x14, 0x42, 0xb0, 0x0a, 0x1a, 0x35, 0x90, 0xba, 0x19, 0xf8, 0x8c, - 0x88, 0xa8, 0xbc, 0x9a, 0x20, 0x32, 0x90, 0x32, 0x98, 0x0a, 0x44, 0x57, 0xd9, 0x29, 0x24, 0x90, - 0x8a, 0x20, 0x14, 0x88, 0x9b, 0x28, 0xa6, 0xaf, 0x88, 0x00, 0x01, 0xdb, 0x28, 0x80, 0x13, 0x89, - 0xa0, 0x9b, 0x23, 0x72, 0xa0, 0xfa, 0x39, 0xa8, 0x74, 0x22, 0x90, 0x09, 0x90, 0x63, 0xb8, 0x9a, - 0x49, 0x03, 0xa0, 0xab, 0x9b, 0xb1, 0x9e, 0x82, 0x9f, 0x00, 0xa9, 0x19, 0xa0, 0x1a, 0x37, 0xca, - 0x58, 0x82, 0x4a, 0x16, 0x20, 0x81, 0xb9, 0x2a, 0x24, 0xc1, 0x8c, 0x89, 0xb0, 0x5b, 0x81, 0x90, - 0xcb, 0x8b, 0x00, 0xd1, 0x1b, 0x34, 0xf9, 0x09, 0x90, 0x89, 0x11, 0xda, 0x3a, 0x13, 0x76, 0x23, - 0xc9, 0x0b, 0x22, 0x18, 0x90, 0xa8, 0x9e, 0x00, 0x80, 0x64, 0x91, 0x2b, 0xf9, 0x09, 0x10, 0x11, - 0x12, 0xaa, 0x88, 0x8a, 0xad, 0x33, 0x82, 0x2d, 0x47, 0x08, 0x91, 0xba, 0x38, 0x82, 0x0a, 0xd8, - 0x8b, 0x70, 0xb3, 0x9c, 0x9a, 0x01, 0x29, 0x17, 0xa9, 0x99, 0xca, 0x48, 0x82, 0xae, 0x88, 0x41, - 0x24, 0x80, 0xb8, 0x0a, 0x00, 0x88, 0x73, 0x03, 0xaa, 0x41, 0x98, 0x08, 0x17, 0x88, 0xeb, 0x08, - 0x02, 0xba, 0x89, 0x12, 0x1e, 0x27, 0x9a, 0xbb, 0x18, 0x22, 0x02, 0x28, 0xf0, 0x3a, 0x22, 0x26, - 0xba, 0x09, 0x90, 0x22, 0xcb, 0x33, 0xce, 0x38, 0x04, 0xbe, 0x00, 0x22, 0xb9, 0x30, 0xc2, 0x8c, - 0x90, 0x58, 0xc1, 0x51, 0x12, 0x81, 0x89, 0x98, 0x09, 0x24, 0x80, 0x08, 0x01, 0xdc, 0x99, 0x1c, - 0x24, 0xa0, 0x8f, 0xb8, 0x42, 0xc8, 0x38, 0xa3, 0x2c, 0x85, 0x9a, 0x09, 0xc8, 0x9a, 0x8b, 0x85, - 0x9d, 0x12, 0x0a, 0x82, 0xd9, 0xad, 0x88, 0x72, 0x82, 0x8c, 0x33, 0x21, 0x24, 0x32, 0xd1, 0x4b, - 0xa4, 0x39, 0x01, 0x01, 0xbb, 0x30, 0x03, 0x88, 0xc0, 0xff, 0x99, 0x80, 0x21, 0x13, 0xee, 0x99, - 0x18, 0x12, 0x01, 0x81, 0xad, 0x48, 0x24, 0x00, 0x98, 0xc9, 0x19, 0x13, 0x00, 0x25, 0x98, 0xbf, - 0x42, 0x80, 0x99, 0x9c, 0xb8, 0x8b, 0x91, 0x53, 0x08, 0xe2, 0x3b, 0xb1, 0x28, 0x12, 0xca, 0x72, - 0x07, 0x18, 0xa8, 0x20, 0x99, 0x80, 0x80, 0xc9, 0x29, 0x17, 0x99, 0x89, 0x53, 0xc0, 0xab, 0x28, - 0x06, 0xa9, 0x09, 0x00, 0x81, 0xcd, 0xa9, 0x10, 0x82, 0x90, 0x28, 0xf9, 0x29, 0x73, 0x04, 0xaa, - 0x31, 0x32, 0x03, 0x81, 0xaf, 0x10, 0x90, 0x73, 0xb0, 0x10, 0x21, 0xc9, 0x08, 0xcc, 0x98, 0xda, - 0x8a, 0x88, 0x40, 0x84, 0xbb, 0x8a, 0x22, 0x53, 0x92, 0xbc, 0x22, 0x71, 0xa3, 0x0c, 0x10, 0xb8, - 0x61, 0x32, 0x03, 0xca, 0x0c, 0x23, 0xba, 0x28, 0xbf, 0xb0, 0x19, 0x88, 0xd0, 0x2b, 0x24, 0x9a, - 0x05, 0x1b, 0x55, 0xa1, 0x8b, 0x03, 0x88, 0x11, 0x00, 0x36, 0x92, 0x0a, 0x11, 0xa9, 0xb8, 0x4b, - 0x97, 0x9e, 0xa9, 0x9b, 0xca, 0x0c, 0x14, 0x11, 0xfa, 0x10, 0xba, 0x41, 0x14, 0x98, 0x30, 0x90, - 0x64, 0x01, 0x00, 0x08, 0x41, 0xf8, 0x19, 0xba, 0x10, 0x81, 0xca, 0x19, 0x98, 0x72, 0x22, 0x98, - 0x00, 0xac, 0x33, 0xac, 0xa8, 0x8c, 0xd8, 0x40, 0x83, 0x9c, 0xa0, 0x3a, 0x35, 0x93, 0xad, 0x98, - 0xd9, 0x0b, 0x04, 0x51, 0x32, 0xa2, 0x8a, 0x28, 0xa2, 0x29, 0x98, 0xb9, 0x2c, 0xe8, 0x11, 0x0c, - 0x67, 0x91, 0x8a, 0xa8, 0x0b, 0x00, 0x37, 0x88, 0xa9, 0x27, 0xa9, 0x88, 0x98, 0xbc, 0x19, 0x82, - 0x48, 0xc3, 0x8c, 0x81, 0x2b, 0xc3, 0x18, 0x90, 0x79, 0x95, 0x19, 0x98, 0x21, 0x89, 0x80, 0xad, - 0x45, 0xb8, 0x48, 0x05, 0xba, 0x18, 0x03, 0x8e, 0x88, 0x82, 0xcb, 0x40, 0x99, 0x14, 0x29, 0xb0, - 0x28, 0xa1, 0x0b, 0x20, 0x94, 0xaa, 0x2b, 0xc6, 0x8f, 0x91, 0x50, 0x03, 0x31, 0xc8, 0x99, 0x8b, - 0x30, 0x37, 0xf9, 0x0b, 0x80, 0x08, 0x14, 0xaa, 0xa0, 0x1c, 0xa1, 0x2b, 0x07, 0x08, 0x90, 0x10, - 0xaa, 0x18, 0xb3, 0x79, 0x77, 0x81, 0x8a, 0x10, 0x90, 0x41, 0x80, 0xc0, 0x1a, 0xb8, 0x9b, 0xc8, - 0x8d, 0x82, 0x89, 0x11, 0x98, 0xac, 0x36, 0x99, 0xb0, 0x9e, 0x99, 0x42, 0x12, 0x89, 0x10, 0x98, - 0xba, 0x70, 0x37, 0x98, 0x90, 0x08, 0x14, 0x00, 0x00, 0xa0, 0x60, 0xc8, 0x9b, 0x11, 0xcb, 0xb9, - 0x1b, 0xc1, 0x48, 0xe2, 0x8d, 0x01, 0x35, 0x11, 0xb0, 0x0d, 0x23, 0x1a, 0x05, 0x2a, 0x12, 0x34, - 0xea, 0x99, 0x9b, 0x32, 0x01, 0x18, 0xa2, 0x19, 0xff, 0x9b, 0x28, 0x80, 0x90, 0x29, 0x12, 0xf9, - 0x0e, 0x12, 0xa9, 0x20, 0x91, 0x51, 0xc0, 0x08, 0x41, 0x03, 0x63, 0x22, 0x81, 0x8c, 0x43, 0xb9, - 0x18, 0xbd, 0x08, 0x9a, 0xa1, 0xdc, 0x0b, 0xc0, 0xaa, 0xab, 0xc8, 0x4a, 0x04, 0x18, 0x01, 0xb9, - 0x68, 0x37, 0x12, 0x88, 0xa9, 0x59, 0x05, 0x9a, 0x11, 0x33, 0x99, 0x11, 0xeb, 0xaa, 0x8d, 0x44, - 0xa8, 0xaa, 0x18, 0xa8, 0x19, 0x23, 0xce, 0xa9, 0x0c, 0x15, 0x28, 0x24, 0x08, 0x82, 0x8d, 0x12, - 0x08, 0x45, 0xb0, 0x8c, 0x33, 0xc1, 0x1a, 0xc9, 0xb9, 0x9e, 0x08, 0x41, 0xb1, 0x8b, 0x23, 0x23, - 0xd8, 0x89, 0xbe, 0x61, 0x01, 0x99, 0x28, 0x93, 0xaa, 0xa9, 0x3b, 0x57, 0x8a, 0x13, 0x09, 0x04, - 0x9a, 0x18, 0x75, 0x92, 0xbd, 0x08, 0x80, 0x21, 0x01, 0x88, 0xa0, 0x72, 0x01, 0xe9, 0x8a, 0x01, - 0xaa, 0xa8, 0xac, 0x28, 0x27, 0x89, 0x01, 0xca, 0x8b, 0x44, 0x21, 0x04, 0x99, 0x9a, 0x62, 0xa1, - 0x9b, 0x81, 0x8a, 0xb9, 0x73, 0x94, 0xba, 0xac, 0x09, 0x91, 0x31, 0x57, 0x83, 0x89, 0xfb, 0x1a, - 0x33, 0x98, 0x01, 0xa9, 0x72, 0xb2, 0x39, 0xb1, 0xbd, 0x28, 0x84, 0x31, 0x13, 0xfa, 0x09, 0x80, - 0x9b, 0xa9, 0x81, 0x2c, 0x84, 0xbb, 0x40, 0x93, 0x0c, 0x93, 0x39, 0x47, 0x01, 0x99, 0x91, 0x0d, - 0x12, 0x81, 0x0a, 0xb1, 0x41, 0xee, 0xab, 0x30, 0x14, 0xa0, 0xcb, 0x09, 0xa0, 0x8b, 0x0c, 0x07, - 0x40, 0x81, 0x98, 0x89, 0x60, 0x84, 0x29, 0x15, 0x08, 0x92, 0x8d, 0xb0, 0x19, 0xd9, 0xaa, 0x3a, - 0x05, 0x40, 0x81, 0x21, 0xbd, 0xcb, 0x41, 0x34, 0x90, 0x10, 0x89, 0x9b, 0x27, 0x89, 0xb9, 0x1a, - 0x15, 0xae, 0x80, 0x99, 0x08, 0x82, 0xbd, 0x10, 0x72, 0x85, 0x18, 0x88, 0x12, 0x08, 0x02, 0xaa, - 0x89, 0xfa, 0x99, 0x3b, 0xa5, 0xae, 0x98, 0x39, 0x07, 0x9a, 0x09, 0xb0, 0x1b, 0x54, 0x14, 0x9a, - 0xaa, 0x88, 0x39, 0x16, 0x81, 0x38, 0x02, 0x20, 0x24, 0xb9, 0x10, 0x29, 0x87, 0x0b, 0xc9, 0xa8, - 0xaf, 0x9a, 0x10, 0xb8, 0xab, 0xbd, 0x35, 0xbb, 0x61, 0x25, 0x99, 0xa8, 0x00, 0x09, 0x33, 0x04, - 0x99, 0x42, 0x15, 0x99, 0x11, 0xca, 0x51, 0xe8, 0x8c, 0x11, 0x00, 0x80, 0x09, 0x80, 0x21, 0xa0, - 0xae, 0xa8, 0x50, 0x23, 0x02, 0xfa, 0x8b, 0x42, 0xd0, 0x28, 0x00, 0x20, 0x37, 0x08, 0x81, 0x89, - 0xfb, 0x29, 0x91, 0x91, 0xcf, 0x19, 0x92, 0x9a, 0x08, 0x80, 0x88, 0x46, 0x90, 0xb9, 0x19, 0x90, - 0x60, 0x13, 0x88, 0x31, 0xca, 0x12, 0x30, 0xb8, 0x52, 0x74, 0x02, 0xb9, 0xbf, 0x20, 0x22, 0xa8, - 0xe8, 0x1c, 0x03, 0x9a, 0x08, 0x89, 0x73, 0x03, 0xa8, 0xcc, 0x18, 0x02, 0x11, 0x89, 0x93, 0x1c, - 0x46, 0xa1, 0x09, 0x89, 0x43, 0x02, 0xbb, 0xd9, 0x9f, 0x82, 0xa9, 0x9b, 0x18, 0x12, 0x98, 0x4a, - 0x17, 0x8a, 0x21, 0x27, 0x99, 0x88, 0x30, 0xe2, 0x39, 0x81, 0x08, 0xa9, 0x9c, 0xb9, 0x63, 0xc8, - 0xba, 0x9a, 0x18, 0xf2, 0x1d, 0x03, 0x00, 0x89, 0x11, 0x10, 0x33, 0x45, 0x91, 0x9e, 0x31, 0x23, - 0x00, 0x08, 0x81, 0xda, 0x5a, 0x04, 0x80, 0x38, 0xdb, 0x43, 0x99, 0xb9, 0xbf, 0x99, 0xaa, 0xa9, - 0x30, 0x00, 0x80, 0x47, 0xa8, 0xb0, 0x0f, 0x34, 0x89, 0x15, 0x20, 0xa0, 0x8a, 0x09, 0x23, 0x28, - 0x85, 0xab, 0xac, 0x91, 0x7a, 0x83, 0x9a, 0xda, 0x8c, 0x81, 0x88, 0x1b, 0xd1, 0x9c, 0x19, 0x46, - 0xa8, 0x9b, 0x31, 0x11, 0x22, 0x14, 0xcb, 0x60, 0x13, 0x12, 0x00, 0xd8, 0x1b, 0x95, 0x3c, 0xe2, - 0x8b, 0x23, 0x80, 0xc9, 0x0a, 0xc8, 0x8a, 0x35, 0x91, 0x9a, 0x00, 0xcd, 0x11, 0x9b, 0x13, 0x08, - 0x61, 0xa3, 0x9c, 0x08, 0x47, 0x81, 0xc0, 0x1a, 0x31, 0x16, 0x00, 0xaa, 0x09, 0x45, 0xa0, 0x8a, - 0xca, 0xac, 0x30, 0x01, 0x32, 0xd0, 0x0b, 0xc1, 0x09, 0x89, 0x18, 0x17, 0x8b, 0xa2, 0xaf, 0x32, - 0x81, 0xbc, 0x30, 0xa1, 0x28, 0x44, 0x99, 0x20, 0x65, 0x14, 0xa9, 0xb9, 0x9f, 0x02, 0x08, 0xb8, - 0x8e, 0x82, 0x19, 0x22, 0xb8, 0xbb, 0x50, 0x47, 0x91, 0x99, 0x80, 0x21, 0x90, 0x09, 0x26, 0xb9, - 0x29, 0x23, 0xea, 0xac, 0x10, 0xa9, 0x32, 0x93, 0x80, 0x20, 0xfa, 0x9c, 0xb9, 0x20, 0x11, 0x61, - 0x05, 0x58, 0x92, 0xae, 0x08, 0xa0, 0x39, 0x15, 0x9a, 0xa0, 0x28, 0x81, 0x64, 0x80, 0xdb, 0x0a, - 0x12, 0x22, 0x33, 0xf9, 0x8c, 0x98, 0x28, 0x02, 0xab, 0xa9, 0x0b, 0x90, 0x73, 0x07, 0x98, 0x29, - 0x92, 0x30, 0xa0, 0xa8, 0x70, 0xc2, 0xaa, 0x50, 0x82, 0xb9, 0x19, 0x93, 0x9c, 0x02, 0xbe, 0x98, - 0x60, 0x98, 0x25, 0x9a, 0xa9, 0x28, 0x75, 0x13, 0x98, 0x09, 0xb8, 0xac, 0x20, 0x12, 0xfb, 0x89, - 0x00, 0xb8, 0x1c, 0x16, 0x09, 0x22, 0x08, 0xb2, 0x0d, 0x25, 0x9a, 0x12, 0xab, 0xac, 0x81, 0x4a, - 0x94, 0x9c, 0xcb, 0x30, 0x33, 0x92, 0xbe, 0x40, 0x33, 0x82, 0x92, 0xbf, 0x41, 0x92, 0xca, 0x0b, - 0x81, 0x20, 0xc0, 0xfc, 0x29, 0x15, 0x88, 0x80, 0x10, 0xeb, 0x11, 0x0a, 0x24, 0xa0, 0xbb, 0x89, - 0x65, 0x02, 0x89, 0x18, 0x02, 0x61, 0x80, 0x01, 0xbe, 0x18, 0x43, 0x81, 0x00, 0xcc, 0xb9, 0x8a, - 0x89, 0x81, 0xaa, 0x52, 0x51, 0xe0, 0x89, 0x09, 0x82, 0x9c, 0x33, 0x41, 0x02, 0xb8, 0x1e, 0x03, - 0x73, 0x10, 0x92, 0xcb, 0x9a, 0x99, 0x82, 0x9d, 0x82, 0x18, 0xa3, 0xff, 0x28, 0xb0, 0x38, 0x91, - 0x99, 0x62, 0x01, 0xb0, 0x28, 0x01, 0x19, 0x47, 0x99, 0x32, 0xdb, 0x20, 0x81, 0xb8, 0x49, 0xd8, - 0x29, 0xc0, 0x10, 0x88, 0x22, 0xec, 0x88, 0x38, 0x34, 0xa2, 0x1a, 0x05, 0xab, 0x60, 0xa3, 0x9b, - 0x9a, 0x80, 0x88, 0x54, 0x01, 0xa1, 0xae, 0x21, 0x62, 0x82, 0xbb, 0x39, 0xf9, 0x89, 0x28, 0xa1, - 0xb1, 0x9f, 0x13, 0x00, 0x08, 0x32, 0xd2, 0xcc, 0x8c, 0x54, 0x02, 0x09, 0xa0, 0x0a, 0xcd, 0x28, - 0x00, 0x81, 0x51, 0xd8, 0x89, 0x19, 0x14, 0x88, 0xa9, 0xac, 0x42, 0xa0, 0x33, 0x00, 0x02, 0x72, - 0x03, 0x99, 0xaa, 0x71, 0x95, 0x8a, 0xfb, 0xab, 0x21, 0x21, 0x91, 0x51, 0x90, 0x31, 0x35, 0xda, - 0x00, 0x09, 0x80, 0x82, 0x8a, 0x1a, 0xa5, 0x7a, 0xd0, 0x09, 0x18, 0xa2, 0x39, 0xf9, 0x0b, 0x41, - 0x93, 0x28, 0xd9, 0x9b, 0x42, 0x00, 0x12, 0xb9, 0x71, 0xa2, 0x01, 0x19, 0x88, 0x13, 0xbb, 0xef, - 0xaa, 0x19, 0x01, 0x02, 0xb8, 0xbc, 0xbb, 0x73, 0x22, 0xe8, 0x0c, 0x21, 0x35, 0x12, 0x80, 0x98, - 0x80, 0x8d, 0x04, 0x09, 0x08, 0x8a, 0x92, 0x3a, 0xfd, 0xa9, 0x28, 0x33, 0x82, 0xad, 0x32, 0xdb, - 0x20, 0x81, 0x0a, 0x67, 0xa0, 0x09, 0x42, 0x02, 0x99, 0xba, 0x0a, 0x91, 0xcd, 0x51, 0xc8, 0x19, - 0xa0, 0xdb, 0x18, 0x00, 0x08, 0x08, 0x92, 0xac, 0x41, 0x14, 0x0a, 0x56, 0x13, 0xa9, 0x10, 0x98, - 0xba, 0x40, 0x13, 0x45, 0xb8, 0x9a, 0x8a, 0xcc, 0x62, 0xb8, 0x9b, 0xa8, 0xbb, 0x62, 0xb1, 0x0c, - 0x20, 0x24, 0x33, 0xba, 0x26, 0xb9, 0x71, 0xa0, 0x8c, 0x32, 0x02, 0x00, 0xa9, 0x9c, 0x09, 0x44, - 0x12, 0xa8, 0xcb, 0x9a, 0x8a, 0xf9, 0x2d, 0xa1, 0x19, 0x9a, 0x53, 0xb0, 0x0e, 0x42, 0x83, 0x8a, - 0x33, 0xb1, 0x8b, 0xb1, 0x9d, 0x76, 0x90, 0x99, 0x0a, 0xb9, 0x63, 0x21, 0x01, 0xa2, 0xac, 0x9b, - 0x91, 0xbc, 0x38, 0x07, 0xdb, 0x8b, 0x12, 0xcc, 0x41, 0x00, 0x00, 0x01, 0x91, 0x60, 0x01, 0xa1, - 0xaf, 0x21, 0x81, 0x21, 0x35, 0x81, 0x10, 0x00, 0xe9, 0x0b, 0x89, 0x01, 0x09, 0x98, 0xff, 0x0a, - 0x90, 0x10, 0xb9, 0x68, 0x25, 0xa8, 0x88, 0x99, 0x32, 0x32, 0x11, 0x00, 0x02, 0x11, 0x5a, 0x86, - 0x3b, 0xb0, 0xe9, 0x3b, 0x92, 0x2a, 0xc1, 0xbf, 0xbb, 0x2a, 0xc2, 0x9e, 0xc9, 0x9b, 0x42, 0x43, - 0xa0, 0x01, 0x40, 0x24, 0x23, 0x91, 0x9c, 0x64, 0x92, 0x1a, 0x81, 0x91, 0x9e, 0x99, 0x09, 0x53, - 0xc0, 0x9a, 0x08, 0xe8, 0x9d, 0x00, 0x42, 0xb0, 0xbb, 0x28, 0x13, 0x43, 0x90, 0x68, 0x14, 0x11, - 0x01, 0x01, 0xe9, 0x3a, 0x34, 0x92, 0xa9, 0xcd, 0x28, 0x32, 0x92, 0xaa, 0xee, 0x8a, 0x21, 0x11, - 0xb9, 0x99, 0x9a, 0x11, 0xa2, 0x79, 0x91, 0xfa, 0x8d, 0x22, 0x44, 0x82, 0x09, 0x41, 0xa9, 0x01, - 0xac, 0xa1, 0x0b, 0xa1, 0xa9, 0xca, 0x1f, 0x14, 0x31, 0xc8, 0xba, 0x10, 0x01, 0xc8, 0x89, 0xba, - 0x49, 0xa3, 0x9f, 0x43, 0x11, 0x33, 0x98, 0xd9, 0x08, 0x39, 0x47, 0x80, 0x31, 0xb3, 0x9f, 0x81, - 0xcb, 0x29, 0x13, 0x35, 0xd9, 0x08, 0x80, 0xa9, 0x99, 0xbd, 0x10, 0x10, 0x82, 0x6a, 0xc3, 0x49, - 0x00, 0x26, 0xa9, 0x99, 0x28, 0x37, 0x02, 0x82, 0xcc, 0x8a, 0x01, 0x00, 0x90, 0xaa, 0xab, 0x01, - 0x0c, 0x95, 0xdf, 0x09, 0x00, 0x00, 0xea, 0x28, 0x20, 0x33, 0x03, 0x0b, 0x15, 0x18, 0x23, 0x32, - 0x82, 0xdf, 0x08, 0x28, 0xc0, 0x0b, 0xc9, 0x10, 0xdb, 0xbb, 0x29, 0x14, 0x00, 0x33, 0xa8, 0x3a, - 0x47, 0x23, 0xa9, 0x18, 0x21, 0xf9, 0xac, 0x31, 0x02, 0x20, 0xd1, 0x8b, 0xa2, 0x6b, 0x24, 0x14, - 0xba, 0xaa, 0x8c, 0x13, 0x19, 0x05, 0xfa, 0x39, 0x15, 0xc9, 0x9a, 0x43, 0x01, 0xa0, 0xae, 0x28, - 0x14, 0x09, 0x88, 0x99, 0x82, 0x78, 0x91, 0xba, 0xaf, 0x11, 0x20, 0x02, 0xa1, 0x9c, 0xba, 0x62, - 0x21, 0xa1, 0x1a, 0x12, 0xb9, 0x71, 0x84, 0xdd, 0x28, 0xa1, 0x8a, 0x10, 0x80, 0x36, 0x80, 0xa8, - 0x88, 0x49, 0xa4, 0xcd, 0x29, 0x34, 0x32, 0xb8, 0xdc, 0x8c, 0x21, 0x42, 0xa8, 0x09, 0x98, 0x11, - 0xa0, 0x72, 0x03, 0xfa, 0x0c, 0x21, 0xa8, 0x89, 0xcb, 0x31, 0x80, 0x80, 0x18, 0x08, 0x25, 0xa9, - 0x80, 0x8d, 0x17, 0x53, 0x02, 0x00, 0x32, 0xb8, 0xcc, 0x89, 0xea, 0x8a, 0x32, 0x14, 0xfb, 0x8d, - 0x00, 0x08, 0x21, 0x23, 0x99, 0x01, 0x08, 0x17, 0x00, 0xc9, 0x09, 0x2a, 0x84, 0x61, 0x13, 0xc9, - 0x0a, 0xa8, 0x08, 0xeb, 0x08, 0x12, 0xcd, 0x0a, 0x11, 0x89, 0xc0, 0x9f, 0x12, 0x32, 0x80, 0x20, - 0x12, 0x1a, 0x84, 0x19, 0x15, 0x11, 0x90, 0xbe, 0x02, 0x9e, 0x01, 0xb9, 0x48, 0x90, 0x84, 0x4a, - 0xc2, 0x9d, 0x9a, 0x12, 0x10, 0x03, 0x80, 0x4c, 0x27, 0x8c, 0x11, 0xa0, 0x2b, 0x12, 0x00, 0x11, - 0xa9, 0xee, 0x0a, 0x80, 0x22, 0x20, 0x12, 0x23, 0xa0, 0xcf, 0x71, 0x13, 0x83, 0xae, 0x20, 0x00, - 0xd9, 0x0b, 0x92, 0x8a, 0x22, 0x02, 0xb8, 0x6a, 0x92, 0xba, 0x0c, 0x88, 0x27, 0x08, 0xb9, 0x81, - 0x8a, 0x54, 0xf8, 0x19, 0x88, 0x88, 0x61, 0x83, 0x9b, 0xb8, 0x58, 0xb2, 0x9e, 0x01, 0x89, 0xc0, - 0x1c, 0x22, 0x81, 0x08, 0x8b, 0xa1, 0x70, 0x25, 0xb1, 0x9d, 0x10, 0x05, 0x9a, 0x34, 0x91, 0x09, - 0x93, 0x8c, 0x81, 0xa9, 0x73, 0x00, 0xf0, 0x9b, 0x31, 0xa3, 0x89, 0xdb, 0x65, 0x01, 0x89, 0x88, - 0xba, 0x29, 0x24, 0xc8, 0x9a, 0x18, 0xa1, 0x1b, 0x36, 0xa2, 0x8e, 0x90, 0x38, 0x93, 0xac, 0x08, - 0x88, 0x00, 0x30, 0x10, 0x16, 0xc9, 0x0e, 0x25, 0x22, 0xa9, 0xb8, 0x89, 0x48, 0x35, 0x80, 0xbd, - 0x28, 0xea, 0x99, 0xbb, 0x54, 0xa8, 0xbb, 0x8a, 0x20, 0x81, 0x31, 0x33, 0x16, 0x1a, 0x26, 0x13, - 0x09, 0xb1, 0x39, 0x02, 0x08, 0x43, 0x34, 0xc9, 0xf0, 0xaf, 0xa9, 0x10, 0x73, 0xa1, 0x99, 0xa8, - 0x31, 0xca, 0x41, 0x12, 0xa8, 0x51, 0x91, 0x02, 0xae, 0x89, 0x34, 0x20, 0x84, 0x98, 0x32, 0xe0, - 0x8b, 0x09, 0x53, 0x82, 0x0a, 0xfa, 0xaa, 0xba, 0x19, 0xb8, 0x19, 0x31, 0x54, 0x93, 0x70, 0xc2, - 0x0a, 0x91, 0xbb, 0x52, 0x21, 0x43, 0x02, 0x20, 0xfb, 0xae, 0x89, 0x01, 0x98, 0x91, 0x4a, 0x84, - 0x09, 0xba, 0x08, 0xba, 0x74, 0xa8, 0x20, 0x43, 0x01, 0x8a, 0xc1, 0xae, 0x21, 0x82, 0xcc, 0x30, - 0x53, 0x14, 0x00, 0xaa, 0x08, 0x10, 0x21, 0xb3, 0xcf, 0x20, 0x81, 0x18, 0xda, 0xbb, 0x31, 0x08, - 0x15, 0xa8, 0xae, 0x91, 0x0b, 0x55, 0x82, 0x80, 0x08, 0x42, 0x03, 0x1a, 0x37, 0xe9, 0x0a, 0xb0, - 0x39, 0x04, 0x18, 0xa1, 0xbd, 0x0b, 0x80, 0x32, 0xfc, 0x8c, 0x99, 0x32, 0xa8, 0x09, 0x02, 0xbb, - 0x19, 0x03, 0x10, 0x73, 0x16, 0x28, 0x01, 0x04, 0x20, 0x40, 0x17, 0x90, 0xb9, 0x29, 0x82, 0x35, - 0xc9, 0xcd, 0xaa, 0x9a, 0xb8, 0x10, 0xaa, 0x08, 0x82, 0x62, 0x82, 0x8b, 0x77, 0x05, 0x89, 0x90, - 0x09, 0x11, 0x30, 0x92, 0x9a, 0x89, 0x83, 0x52, 0xde, 0x28, 0xa9, 0x0a, 0x11, 0x23, 0xc9, 0xbe, - 0x3a, 0x27, 0x99, 0x89, 0x20, 0x33, 0xf9, 0x0a, 0x90, 0x08, 0x55, 0x83, 0xba, 0x8b, 0x02, 0x08, - 0xb8, 0x32, 0x33, 0xfc, 0x41, 0x90, 0xa9, 0xaa, 0x09, 0x02, 0xc1, 0xcf, 0x40, 0x91, 0x0b, 0x83, - 0x0a, 0x34, 0x98, 0xb8, 0x9d, 0x41, 0x33, 0xb5, 0x9f, 0x23, 0xc0, 0x19, 0x01, 0x20, 0xc0, 0x8a, - 0x23, 0x09, 0x14, 0xea, 0x38, 0xa1, 0x48, 0x81, 0x99, 0xa9, 0x1d, 0x05, 0xaa, 0x60, 0x33, 0x17, - 0xaa, 0x80, 0x89, 0x90, 0x0d, 0x92, 0x1c, 0x12, 0x80, 0x28, 0xea, 0x18, 0x92, 0xbd, 0x42, 0x34, - 0xed, 0x09, 0x18, 0x23, 0xd9, 0x19, 0x90, 0x98, 0x88, 0x30, 0x82, 0xa0, 0x9c, 0x75, 0x91, 0x21, - 0x00, 0x01, 0x00, 0xb9, 0xb9, 0xbf, 0x12, 0x9b, 0xcb, 0x08, 0x35, 0xfa, 0x28, 0xb8, 0x0c, 0x17, - 0xaa, 0x32, 0x92, 0x0b, 0x01, 0x41, 0x04, 0xbc, 0x30, 0x12, 0x12, 0xac, 0xbc, 0x41, 0x04, 0x1a, - 0xb1, 0x2a, 0xea, 0x30, 0x90, 0x42, 0xaa, 0x16, 0xcf, 0x10, 0x80, 0x31, 0x04, 0x88, 0xdc, 0x28, - 0x03, 0x31, 0xb0, 0x9c, 0x31, 0x83, 0x2c, 0x95, 0xae, 0x30, 0xa8, 0x48, 0xb0, 0x9b, 0xac, 0x31, - 0x32, 0x92, 0xde, 0x0b, 0x82, 0x8a, 0x81, 0xd8, 0x48, 0xa8, 0x28, 0x16, 0x1a, 0x16, 0x88, 0x11, - 0x88, 0xb9, 0x1b, 0x65, 0x94, 0x0b, 0x81, 0x9c, 0x91, 0x0d, 0xb8, 0x89, 0x00, 0x33, 0xbc, 0x42, - 0x90, 0x71, 0x16, 0xb8, 0x29, 0xb8, 0x3a, 0x27, 0xa0, 0x99, 0x31, 0x91, 0xd9, 0x89, 0xba, 0x40, - 0x24, 0x62, 0x83, 0xda, 0x0a, 0xa8, 0x40, 0xa0, 0x08, 0xc9, 0x39, 0x53, 0xa2, 0x8c, 0xba, 0x52, - 0x91, 0x08, 0xc9, 0x0a, 0xe9, 0x30, 0x81, 0x22, 0x42, 0x88, 0xd2, 0x8e, 0x12, 0x31, 0x00, 0x80, - 0x99, 0xab, 0xdf, 0xa9, 0x1a, 0x98, 0x58, 0xb2, 0x1a, 0x38, 0x07, 0xad, 0x28, 0x11, 0x22, 0x43, - 0xe0, 0x9c, 0x18, 0x83, 0x0d, 0x16, 0x08, 0x01, 0x20, 0x03, 0xa8, 0xbe, 0xcb, 0x30, 0x13, 0x32, - 0xf9, 0x1b, 0x91, 0x1b, 0x12, 0xb1, 0x8e, 0x54, 0x01, 0xba, 0x09, 0x32, 0x22, 0xa8, 0x30, 0xe8, - 0x29, 0xa3, 0xaf, 0x08, 0x62, 0xa0, 0x30, 0xb8, 0x0b, 0x11, 0xd8, 0xad, 0xba, 0xaa, 0x19, 0x55, - 0x22, 0xc0, 0x8b, 0x40, 0x84, 0x48, 0x01, 0x00, 0x22, 0x49, 0xa5, 0x9e, 0xa9, 0xaa, 0x51, 0x05, - 0x20, 0x91, 0xdd, 0x09, 0x00, 0xa8, 0x09, 0x10, 0xd0, 0x9d, 0x32, 0x34, 0x22, 0xd9, 0x08, 0x99, - 0x10, 0x21, 0x92, 0x8c, 0xb8, 0x50, 0x02, 0x10, 0x05, 0xce, 0x29, 0x03, 0x92, 0xbe, 0x38, 0x00, - 0x20, 0x33, 0x9a, 0xfc, 0x3a, 0x14, 0x88, 0x19, 0x12, 0x21, 0x64, 0xa1, 0x29, 0xfb, 0x8b, 0x80, - 0x41, 0x01, 0x18, 0x02, 0x30, 0xb1, 0x2a, 0xa7, 0xbf, 0x90, 0x10, 0xea, 0x09, 0xa9, 0x38, 0x84, - 0xbc, 0x0b, 0x34, 0x02, 0x98, 0x42, 0x90, 0xbe, 0x42, 0x12, 0x18, 0x22, 0x47, 0x81, 0xa9, 0x21, - 0x11, 0xd8, 0x0a, 0x98, 0xef, 0x19, 0x80, 0x80, 0x9a, 0x80, 0x08, 0xa0, 0x9a, 0x49, 0x37, 0x91, - 0x29, 0x93, 0x9d, 0x42, 0x53, 0xa1, 0x19, 0x91, 0x01, 0xaf, 0x08, 0x18, 0x03, 0x39, 0x07, 0x9b, - 0xa9, 0x0b, 0x12, 0xfa, 0x4b, 0x83, 0x31, 0x82, 0xaf, 0x09, 0x61, 0x03, 0x18, 0xb0, 0x8c, 0x08, - 0x12, 0x91, 0x4a, 0xb2, 0x40, 0x00, 0x55, 0xe2, 0x8c, 0x81, 0xb9, 0x9f, 0x89, 0x30, 0x04, 0x90, - 0x18, 0x91, 0xab, 0x10, 0x08, 0xe0, 0x1a, 0x43, 0x03, 0xa9, 0x19, 0x34, 0xb2, 0xcf, 0x08, 0x00, - 0xb0, 0xac, 0x62, 0x92, 0x0c, 0x12, 0x80, 0x31, 0xb8, 0x50, 0x43, 0xb0, 0x78, 0x83, 0x11, 0xda, - 0x08, 0x8a, 0x13, 0x70, 0x85, 0xcb, 0x08, 0x01, 0x18, 0x12, 0x20, 0x22, 0xfe, 0x9a, 0x19, 0x01, - 0x10, 0x23, 0x41, 0xe8, 0xbb, 0x10, 0x88, 0x10, 0x41, 0x16, 0x08, 0x81, 0xce, 0x9a, 0x00, 0x23, - 0xc8, 0x0a, 0x43, 0x80, 0x22, 0x98, 0xdc, 0x8b, 0x10, 0x33, 0xf8, 0x9b, 0x01, 0x3b, 0x84, 0xed, - 0x19, 0x18, 0x33, 0x53, 0xb9, 0x88, 0x58, 0x92, 0x9b, 0x80, 0x8a, 0x03, 0xcd, 0x48, 0x02, 0x10, - 0xa3, 0x6b, 0x11, 0x87, 0x9b, 0x00, 0x88, 0xba, 0x73, 0x12, 0x08, 0x02, 0x10, 0xea, 0xac, 0x42, - 0x24, 0x12, 0x11, 0xba, 0x28, 0xca, 0x52, 0xea, 0xbb, 0x09, 0x8a, 0x81, 0x10, 0x01, 0xbc, 0xbc, - 0x12, 0x72, 0xe2, 0x0a, 0x31, 0x91, 0x1a, 0xb3, 0x4b, 0x82, 0xb9, 0x78, 0x34, 0xe8, 0x8b, 0x10, - 0x21, 0xb1, 0x9d, 0x41, 0x80, 0x92, 0xaf, 0x18, 0x98, 0x89, 0x10, 0x0a, 0xe0, 0x58, 0x33, 0xa8, - 0x88, 0x1a, 0x53, 0x14, 0x89, 0x99, 0xb1, 0xcf, 0x20, 0x53, 0x03, 0x21, 0xd8, 0x9c, 0x20, 0x02, - 0x11, 0xfc, 0x0b, 0x99, 0x11, 0x18, 0x90, 0x62, 0x21, 0xa0, 0x9a, 0x59, 0x37, 0x10, 0xa0, 0x1a, - 0xc8, 0x20, 0x21, 0x13, 0x28, 0xf3, 0x8f, 0x98, 0xa9, 0x39, 0x84, 0x98, 0x28, 0xa8, 0xcb, 0x0d, - 0x44, 0x82, 0xba, 0xba, 0x99, 0x28, 0xc1, 0x0c, 0x81, 0x03, 0x8d, 0x81, 0xa1, 0xbf, 0x10, 0x40, - 0x37, 0xa8, 0x8b, 0x22, 0x93, 0xbd, 0xac, 0x11, 0x10, 0x35, 0x11, 0x88, 0x88, 0xc9, 0x19, 0x34, - 0xe9, 0x38, 0x21, 0x06, 0x9a, 0x10, 0x81, 0x8c, 0x44, 0x90, 0x2a, 0x47, 0x81, 0x19, 0x11, 0xc8, - 0x4a, 0xc8, 0xb9, 0x8d, 0x12, 0x31, 0xc8, 0xba, 0x4b, 0x16, 0x01, 0xba, 0x9a, 0x32, 0xa0, 0x41, - 0x91, 0x82, 0xaf, 0x82, 0xaa, 0x8b, 0x80, 0x42, 0x90, 0x72, 0xf8, 0x8f, 0x01, 0x88, 0x88, 0x21, - 0x82, 0xca, 0x9b, 0x31, 0x13, 0x80, 0xb8, 0xbe, 0x01, 0x09, 0xf9, 0x2b, 0x25, 0x22, 0x81, 0x33, - 0xa9, 0xdc, 0x4a, 0x06, 0x90, 0xa8, 0xac, 0x51, 0x03, 0x10, 0x10, 0x81, 0x88, 0x33, 0x50, 0x85, - 0xab, 0xb9, 0x89, 0x73, 0x17, 0x98, 0x99, 0x28, 0xb0, 0x3a, 0x03, 0xdd, 0x89, 0x29, 0xd2, 0x9f, - 0x08, 0x28, 0x12, 0x88, 0x09, 0x90, 0x68, 0xb0, 0x89, 0x1a, 0x18, 0xf3, 0x3b, 0x81, 0x31, 0x16, - 0x0b, 0x94, 0x9c, 0x11, 0x80, 0x99, 0xba, 0xaf, 0x18, 0x03, 0x8c, 0xf9, 0x39, 0x91, 0xab, 0x34, - 0x41, 0x81, 0x48, 0x27, 0xa8, 0x00, 0x01, 0x38, 0x95, 0x1a, 0xa2, 0xaa, 0x9b, 0x52, 0xf8, 0x8e, - 0x12, 0xa1, 0xad, 0x08, 0x23, 0x98, 0x31, 0x80, 0x18, 0xb0, 0x0d, 0x02, 0x03, 0x79, 0x47, 0xb9, - 0x19, 0x83, 0x88, 0x00, 0x51, 0xc2, 0x8c, 0x88, 0x52, 0xc1, 0xad, 0x20, 0xa9, 0x1c, 0x43, 0x83, - 0xbd, 0x19, 0x03, 0x99, 0xa8, 0x1a, 0x34, 0xc2, 0x2b, 0xc9, 0x39, 0x35, 0x12, 0x12, 0xca, 0x08, - 0xbe, 0x98, 0x49, 0x82, 0x70, 0x35, 0xb8, 0xac, 0xba, 0x8a, 0x22, 0xb8, 0x3b, 0x82, 0x73, 0x05, - 0x00, 0xac, 0x41, 0x23, 0xb8, 0x31, 0x99, 0x34, 0xc2, 0xae, 0x89, 0xa0, 0x2b, 0x11, 0x12, 0x94, - 0x1a, 0x44, 0x81, 0x23, 0xcc, 0xac, 0x98, 0xbc, 0x32, 0x90, 0x9f, 0x81, 0xba, 0x63, 0x32, 0x22, - 0x37, 0xa9, 0x28, 0x02, 0xfa, 0x0a, 0x43, 0x01, 0xf9, 0x9b, 0x11, 0x88, 0x31, 0x33, 0xba, 0xfa, - 0xac, 0x09, 0xb1, 0x38, 0x15, 0xa8, 0x30, 0xc0, 0x28, 0xce, 0x41, 0x12, 0xa1, 0xeb, 0x2a, 0x14, - 0x00, 0x19, 0x14, 0xeb, 0x28, 0x13, 0x99, 0x30, 0xd9, 0x39, 0x24, 0xb9, 0xcd, 0x99, 0x20, 0x24, - 0xd8, 0x0a, 0x35, 0x12, 0x08, 0xd0, 0x0b, 0x90, 0xb9, 0x9b, 0x19, 0x27, 0x61, 0x92, 0x09, 0x9a, - 0x01, 0x30, 0x44, 0x22, 0xdb, 0xba, 0x18, 0xe9, 0x9a, 0xbd, 0x51, 0x02, 0x30, 0x92, 0x0a, 0x53, - 0xd9, 0xdb, 0x39, 0x91, 0x28, 0x03, 0x0b, 0xd2, 0x9e, 0x90, 0x00, 0x62, 0x02, 0x18, 0x81, 0x89, - 0x63, 0xb8, 0x8c, 0xaa, 0x11, 0x31, 0x14, 0xb0, 0x0a, 0x92, 0xdf, 0x09, 0xb8, 0x8b, 0x54, 0xa0, - 0x9a, 0xbb, 0x33, 0x20, 0x67, 0x81, 0x8a, 0x20, 0x90, 0x30, 0x11, 0xd0, 0x5a, 0x14, 0x88, 0x0a, - 0x43, 0xe9, 0x18, 0xca, 0x8a, 0x80, 0x20, 0x10, 0xc2, 0x8d, 0xb9, 0x10, 0x32, 0xf8, 0x5b, 0x14, - 0x10, 0x21, 0x91, 0x48, 0x83, 0x8b, 0xa0, 0x30, 0x08, 0xfa, 0x8f, 0x08, 0x81, 0xda, 0x9d, 0x10, - 0x11, 0xa8, 0x18, 0xba, 0x00, 0x63, 0x80, 0x13, 0x09, 0x99, 0x55, 0xd9, 0x31, 0x21, 0x03, 0x58, - 0x92, 0x19, 0xc8, 0xaf, 0xa9, 0x0b, 0x91, 0x0a, 0x81, 0x98, 0x3a, 0x37, 0x8a, 0x83, 0xf9, 0x2d, - 0x17, 0x98, 0x80, 0x9a, 0x30, 0x14, 0x91, 0xfb, 0x8a, 0x12, 0x18, 0x82, 0x73, 0x01, 0x18, 0x91, - 0xac, 0x28, 0xa1, 0x8b, 0x34, 0x05, 0xad, 0x31, 0x98, 0xa9, 0x9d, 0x29, 0xa3, 0x40, 0xf9, 0x9b, - 0x20, 0x14, 0x98, 0xbb, 0x60, 0x83, 0x18, 0xa9, 0x42, 0x34, 0x00, 0xd8, 0xac, 0x09, 0xa8, 0x70, - 0x14, 0xcc, 0x88, 0x98, 0x10, 0x81, 0x9b, 0xb9, 0xda, 0xaa, 0x9e, 0x62, 0x02, 0x32, 0x90, 0x01, - 0x89, 0xbc, 0x55, 0x31, 0x24, 0x02, 0xdb, 0x09, 0x88, 0x88, 0xcb, 0x99, 0x30, 0x90, 0x18, 0xbc, - 0x92, 0x74, 0xc3, 0x9a, 0x40, 0xa2, 0x21, 0xab, 0x35, 0x32, 0xf9, 0x0b, 0xda, 0x38, 0x13, 0x18, - 0x01, 0xb9, 0x0c, 0x27, 0xd8, 0xab, 0x51, 0x01, 0x00, 0x11, 0xba, 0x00, 0x99, 0x21, 0xb8, 0x6a, - 0x84, 0x1a, 0x32, 0xd0, 0xeb, 0x8d, 0x81, 0x8a, 0x91, 0x9a, 0x89, 0x41, 0x84, 0xad, 0x42, 0x84, - 0xbd, 0x20, 0xa8, 0x98, 0x20, 0x63, 0x83, 0x9c, 0x45, 0x81, 0xba, 0x9a, 0x01, 0x39, 0x15, 0xa0, - 0x88, 0x19, 0x26, 0xc8, 0x1b, 0x06, 0x0b, 0x33, 0x04, 0xca, 0x28, 0x98, 0x90, 0x99, 0x78, 0x16, - 0xba, 0x89, 0x00, 0x08, 0xc2, 0x9e, 0x00, 0x20, 0x01, 0x42, 0xb8, 0x0c, 0x84, 0x19, 0x08, 0xd8, - 0x40, 0xf0, 0x8c, 0x43, 0x90, 0x10, 0x23, 0xa9, 0x88, 0x0b, 0xb0, 0xcc, 0x18, 0xda, 0x12, 0x39, - 0xc3, 0xbe, 0x9b, 0x98, 0xbd, 0x0a, 0x43, 0xa8, 0x10, 0x21, 0x73, 0x57, 0x82, 0xaa, 0x10, 0x02, - 0x09, 0x81, 0x12, 0xcd, 0x20, 0x08, 0x90, 0xc9, 0x9c, 0xda, 0x1a, 0x34, 0xd9, 0x9c, 0x81, 0x52, - 0x00, 0x91, 0x18, 0xcb, 0x73, 0x02, 0x08, 0x32, 0x14, 0x18, 0x82, 0xab, 0x00, 0x42, 0xe8, 0x39, - 0x93, 0xbe, 0x30, 0x28, 0xd3, 0x9f, 0x89, 0x88, 0x98, 0xcc, 0xab, 0x51, 0x82, 0x98, 0x0a, 0x11, - 0x00, 0x88, 0x40, 0x06, 0xbc, 0x40, 0x03, 0xa8, 0x09, 0x31, 0x57, 0x82, 0x98, 0xba, 0x20, 0xa1, - 0x88, 0xeb, 0xaa, 0x19, 0x01, 0xa8, 0xbe, 0xbd, 0x39, 0x47, 0x23, 0x10, 0xfa, 0x8b, 0x01, 0x11, - 0x33, 0x83, 0xba, 0x1b, 0x44, 0x34, 0x90, 0xcb, 0x63, 0x00, 0x90, 0x9d, 0xaa, 0x20, 0x01, 0x00, - 0x99, 0xcf, 0x88, 0x89, 0x08, 0xb9, 0xbc, 0x71, 0x13, 0x80, 0x31, 0x33, 0xa1, 0x18, 0x24, 0x09, - 0x57, 0xa8, 0x88, 0xcb, 0x89, 0xb9, 0x88, 0xad, 0x19, 0x36, 0xc9, 0x9a, 0xbc, 0xbb, 0x50, 0x13, - 0x98, 0x32, 0xc9, 0x2a, 0x16, 0xaa, 0x30, 0x54, 0x25, 0xa0, 0xac, 0x20, 0x99, 0x01, 0x8b, 0x15, - 0x8d, 0x22, 0xa8, 0x1a, 0x47, 0xa0, 0x1a, 0xa1, 0x41, 0xc9, 0x00, 0xaa, 0x32, 0x80, 0x80, 0xbb, - 0x80, 0x9e, 0x35, 0x47, 0xd9, 0x99, 0x10, 0x88, 0x42, 0x82, 0x00, 0x98, 0xc8, 0x1b, 0xb1, 0x74, - 0x92, 0xcb, 0x9a, 0x89, 0x08, 0x82, 0x8d, 0x42, 0xb0, 0x0a, 0x23, 0x10, 0x50, 0x37, 0x80, 0x9a, - 0x91, 0x0d, 0xa1, 0x9c, 0x89, 0x80, 0x51, 0xea, 0x8a, 0x08, 0x72, 0x23, 0x00, 0xcc, 0xa9, 0x18, - 0xca, 0x18, 0x00, 0x31, 0x12, 0xe0, 0x3a, 0x93, 0x81, 0x98, 0x0b, 0x67, 0x10, 0x03, 0x9a, 0xbc, - 0x80, 0x72, 0x90, 0x12, 0xdb, 0x20, 0x32, 0xb2, 0xbe, 0x9a, 0x28, 0x45, 0xa1, 0x18, 0xda, 0x20, - 0x73, 0x12, 0x90, 0xab, 0x10, 0x42, 0x83, 0xcb, 0xaa, 0xaa, 0xad, 0x98, 0x51, 0xd9, 0x8a, 0xca, - 0x29, 0x04, 0x80, 0x18, 0xe2, 0x9e, 0x31, 0x25, 0x90, 0x9a, 0x00, 0x12, 0x40, 0x15, 0x11, 0xab, - 0x89, 0x74, 0xb0, 0xab, 0xab, 0x81, 0xae, 0x20, 0x12, 0x99, 0xea, 0x0a, 0x81, 0x88, 0x12, 0x58, - 0x16, 0x22, 0x98, 0x00, 0x01, 0x73, 0x07, 0x9a, 0x01, 0x11, 0xba, 0x9a, 0xdb, 0x0b, 0x92, 0x8c, - 0x28, 0xc3, 0x8f, 0x32, 0xa9, 0x23, 0x9d, 0x13, 0x22, 0xb9, 0x42, 0x08, 0x57, 0x01, 0xb9, 0x8a, - 0x01, 0xdb, 0x10, 0x99, 0x90, 0x10, 0xa0, 0x8a, 0x19, 0xa3, 0xbc, 0x0d, 0x27, 0xb8, 0x19, 0x81, - 0x88, 0x09, 0xf0, 0x0e, 0x12, 0x22, 0x13, 0xfc, 0x09, 0x44, 0xa1, 0x18, 0x91, 0x09, 0x01, 0x9b, - 0x67, 0x88, 0xc0, 0x8b, 0x00, 0x82, 0x21, 0x00, 0xd9, 0x9b, 0x89, 0xc8, 0x9e, 0x42, 0x81, 0x20, - 0x91, 0x49, 0xf2, 0x1a, 0x23, 0x91, 0x89, 0x41, 0x03, 0x32, 0xb0, 0x39, 0x07, 0xcd, 0x9a, 0x80, - 0x9a, 0x22, 0x8a, 0xd0, 0xec, 0x9c, 0x00, 0x81, 0x08, 0x32, 0x11, 0x90, 0x52, 0x88, 0x21, 0x50, - 0x57, 0x11, 0xb9, 0x19, 0x01, 0x73, 0x92, 0xa9, 0xaa, 0x88, 0x99, 0x00, 0xea, 0xbb, 0xbd, 0xaa, - 0x60, 0x14, 0xa9, 0x9a, 0x00, 0xb0, 0x8b, 0x56, 0x02, 0x21, 0x32, 0x83, 0x11, 0x30, 0x27, 0x80, - 0xa8, 0xcb, 0xdf, 0x19, 0x32, 0x80, 0xc9, 0x8c, 0x82, 0x19, 0x83, 0x18, 0x20, 0xb9, 0xd0, 0x9f, - 0x81, 0x60, 0x02, 0x28, 0xa1, 0xdb, 0x0b, 0x42, 0x82, 0x99, 0x80, 0xab, 0x15, 0xae, 0x63, 0x03, - 0xbc, 0xa8, 0x0a, 0x22, 0x21, 0x27, 0xb8, 0xdc, 0x1a, 0x01, 0x80, 0x89, 0x83, 0x8d, 0x91, 0x30, - 0xc0, 0x60, 0x22, 0x03, 0x10, 0xd9, 0x0a, 0x63, 0x03, 0xac, 0x20, 0x24, 0xa9, 0xab, 0xd8, 0x2a, - 0x02, 0xa8, 0xbb, 0xaf, 0x63, 0x81, 0x28, 0xe8, 0x09, 0x11, 0x10, 0x34, 0x91, 0xdc, 0x30, 0x10, - 0x43, 0xb0, 0xae, 0x18, 0x21, 0x8a, 0x64, 0x81, 0xcb, 0x9b, 0x88, 0x18, 0xf9, 0x8b, 0x22, 0xa1, - 0x8d, 0xa8, 0x52, 0x32, 0xb0, 0x8a, 0x43, 0x90, 0x32, 0x26, 0xaa, 0xdb, 0x38, 0x83, 0x42, 0x22, - 0xf0, 0x9d, 0x00, 0x99, 0x98, 0x8c, 0x42, 0x24, 0x01, 0x98, 0x8b, 0xc8, 0x51, 0xc9, 0x59, 0x14, - 0x11, 0xa8, 0xaa, 0x39, 0x26, 0x12, 0x9a, 0x9a, 0xc0, 0x9b, 0xaa, 0xd8, 0x8b, 0x80, 0xde, 0x28, - 0x43, 0x20, 0x94, 0x1b, 0x14, 0x08, 0xc8, 0x29, 0x82, 0xba, 0x4a, 0x37, 0x90, 0xb9, 0x9e, 0x99, - 0x20, 0x13, 0xe9, 0x09, 0xbc, 0xa9, 0x49, 0xa1, 0x20, 0xba, 0x08, 0x55, 0x33, 0xb1, 0x0b, 0x09, - 0x41, 0x06, 0x09, 0x25, 0x00, 0x99, 0xcb, 0x40, 0x81, 0x08, 0x56, 0x90, 0xaa, 0xbb, 0xcc, 0x0a, - 0x42, 0x34, 0x92, 0x8b, 0x01, 0x2a, 0x27, 0xba, 0x99, 0xc0, 0x1a, 0x12, 0x15, 0xbd, 0x30, 0x24, - 0x20, 0xa8, 0xa0, 0xbc, 0x1a, 0x37, 0x12, 0x10, 0xd1, 0xae, 0x99, 0x01, 0xab, 0xa9, 0x08, 0x70, - 0xd1, 0x0a, 0xa1, 0x28, 0x02, 0x28, 0x77, 0x84, 0x90, 0x9b, 0x98, 0x31, 0x22, 0x90, 0xaa, 0x55, - 0x81, 0xdd, 0x09, 0x10, 0x10, 0x90, 0xda, 0x8d, 0x11, 0x80, 0x0b, 0xa0, 0x2b, 0x27, 0x23, 0x90, - 0xbb, 0x01, 0x10, 0x30, 0x24, 0x13, 0x70, 0x04, 0x88, 0xbb, 0x18, 0x3a, 0xd3, 0x8c, 0xec, 0x09, - 0x21, 0xa0, 0xcc, 0x09, 0xb8, 0x18, 0x34, 0xfb, 0x0a, 0x40, 0x82, 0x20, 0x51, 0x27, 0x82, 0xb9, - 0x18, 0x43, 0x90, 0x0a, 0xd0, 0x8c, 0x20, 0xb0, 0x28, 0xb8, 0xac, 0xb9, 0x8d, 0x00, 0xc9, 0x9a, - 0x8a, 0x90, 0x41, 0x21, 0x34, 0x77, 0x98, 0x98, 0x29, 0x24, 0x23, 0x34, 0x90, 0xab, 0x90, 0x1b, - 0xf0, 0xaf, 0x00, 0x01, 0x31, 0x94, 0xbc, 0xac, 0x18, 0x23, 0x98, 0xca, 0x8a, 0x0a, 0x37, 0xc9, - 0x2a, 0x26, 0x02, 0x00, 0xba, 0x10, 0xb9, 0xa9, 0xd8, 0x8c, 0x21, 0x81, 0x2b, 0x67, 0x81, 0x18, - 0x98, 0x21, 0x00, 0xa9, 0xec, 0x29, 0xb2, 0xbf, 0x08, 0x42, 0x12, 0x90, 0x89, 0x63, 0x02, 0x43, - 0x80, 0xcb, 0x09, 0xc0, 0x1b, 0x91, 0x89, 0xbd, 0x28, 0x74, 0xa2, 0x9a, 0x9a, 0x34, 0x21, 0xb9, - 0x19, 0xcc, 0x63, 0xb0, 0x9f, 0x10, 0x80, 0x09, 0x11, 0x00, 0xba, 0x72, 0xa1, 0x18, 0x42, 0x91, - 0xb9, 0x9e, 0x13, 0x89, 0xa8, 0x58, 0x14, 0x90, 0xdf, 0x01, 0x00, 0x00, 0x91, 0xae, 0x08, 0x20, - 0x12, 0x00, 0x51, 0x14, 0xc8, 0x39, 0x24, 0xc9, 0xae, 0x99, 0x19, 0x11, 0x31, 0x02, 0x98, 0x79, - 0xa2, 0x09, 0xa9, 0x99, 0x08, 0x53, 0x73, 0x04, 0x98, 0xae, 0x31, 0x01, 0xc9, 0x40, 0x92, 0xa8, - 0x19, 0x90, 0x20, 0x22, 0x26, 0x88, 0xba, 0x8c, 0xe1, 0x0b, 0x54, 0xa2, 0x8d, 0x08, 0x81, 0x29, - 0x08, 0xf9, 0xbc, 0x18, 0x98, 0x73, 0x02, 0xba, 0xba, 0x20, 0x90, 0xba, 0x10, 0x41, 0x05, 0x63, - 0x91, 0x29, 0x24, 0x90, 0x8a, 0x34, 0xf8, 0x0b, 0x92, 0xba, 0x1a, 0x91, 0x12, 0x5b, 0xb4, 0x9d, - 0x8b, 0x13, 0x29, 0x16, 0x88, 0xeb, 0x29, 0x64, 0x02, 0x80, 0xaa, 0x98, 0x11, 0x72, 0x04, 0x99, - 0x08, 0x09, 0x01, 0xeb, 0x88, 0x0a, 0x04, 0xab, 0x89, 0xb8, 0x38, 0x03, 0xf9, 0x1c, 0x82, 0x73, - 0x12, 0xcb, 0xaa, 0x88, 0x51, 0xc1, 0x0a, 0x32, 0xb8, 0xa9, 0x0e, 0x36, 0x03, 0x10, 0x91, 0xa9, - 0x09, 0xfb, 0xcb, 0xab, 0x18, 0x88, 0x31, 0x22, 0x53, 0xfa, 0x9f, 0x10, 0x12, 0x81, 0x00, 0x20, - 0x35, 0x12, 0x80, 0xbb, 0x58, 0x83, 0x89, 0xad, 0x08, 0x91, 0xbf, 0x11, 0x11, 0xb8, 0xaa, 0x52, - 0x02, 0xd9, 0x9b, 0x53, 0xd8, 0x58, 0x15, 0x98, 0x89, 0x98, 0x29, 0x93, 0x0a, 0x32, 0xf9, 0x3b, - 0x17, 0xa1, 0x89, 0x11, 0xa0, 0xcf, 0x20, 0x43, 0x91, 0xea, 0x9b, 0x01, 0x11, 0x82, 0xb9, 0x9c, - 0x88, 0x41, 0xc0, 0x49, 0x02, 0x13, 0x73, 0x02, 0x00, 0xa8, 0x29, 0xfa, 0x0c, 0x30, 0x81, 0x90, - 0xce, 0x19, 0x01, 0x18, 0x98, 0xa8, 0xae, 0x09, 0x98, 0x30, 0x40, 0x15, 0x18, 0xa1, 0x50, 0x25, - 0x80, 0xa8, 0x72, 0xb0, 0xcb, 0x1a, 0x35, 0xa0, 0x42, 0xc9, 0x8a, 0x89, 0x51, 0x14, 0x80, 0xcc, - 0x88, 0x21, 0x00, 0xca, 0x28, 0x12, 0x23, 0x30, 0x37, 0xca, 0x9a, 0x20, 0xb0, 0x30, 0x90, 0xba, - 0xaa, 0xcf, 0xad, 0x80, 0x2b, 0x05, 0xca, 0x29, 0xd0, 0xab, 0x0a, 0x01, 0x19, 0x92, 0x73, 0x17, - 0x00, 0xab, 0x31, 0x42, 0x26, 0x90, 0x89, 0x00, 0x32, 0x00, 0xc8, 0xbb, 0x0a, 0x98, 0xf9, 0x8e, - 0x11, 0xa9, 0x89, 0x91, 0x09, 0xb8, 0xfb, 0x1b, 0x37, 0x23, 0xc8, 0x09, 0x41, 0x82, 0x80, 0x22, - 0x31, 0x15, 0x21, 0xd0, 0x9e, 0x01, 0xcb, 0x89, 0xaa, 0x52, 0x16, 0xc9, 0x9a, 0xcb, 0x19, 0x02, - 0x11, 0x24, 0x90, 0x29, 0xb0, 0x89, 0x72, 0x84, 0x22, 0x72, 0x82, 0xa9, 0xab, 0x9b, 0x01, 0xdb, - 0x08, 0x00, 0x24, 0xca, 0xad, 0xba, 0x51, 0xdb, 0x20, 0x11, 0x44, 0xc0, 0x19, 0x02, 0x31, 0x23, - 0xd0, 0x9d, 0x50, 0x13, 0xca, 0x18, 0xa8, 0x29, 0xa3, 0xad, 0x9a, 0x10, 0x20, 0x02, 0x37, 0xbb, - 0x22, 0xa8, 0x90, 0x9f, 0x00, 0x38, 0x77, 0x82, 0x9a, 0xa9, 0x30, 0x92, 0x9b, 0x13, 0xeb, 0xac, - 0x9a, 0x53, 0x80, 0x20, 0xc9, 0x8a, 0x31, 0x24, 0x42, 0x02, 0xb9, 0xaf, 0x80, 0x39, 0x13, 0xd9, - 0xbd, 0xbb, 0x99, 0x73, 0x15, 0x08, 0x00, 0x02, 0x98, 0x88, 0x0a, 0x27, 0xb8, 0x6a, 0x04, 0x09, - 0xa1, 0x0a, 0x33, 0xb1, 0xaf, 0xaa, 0xcb, 0x28, 0x03, 0xfa, 0xaa, 0xbb, 0x31, 0x32, 0x27, 0x00, - 0xa0, 0x9b, 0x70, 0x24, 0x02, 0x90, 0xbb, 0x11, 0x48, 0x83, 0x9a, 0x62, 0xd8, 0xbd, 0x8a, 0x14, - 0xb0, 0x9b, 0x22, 0x81, 0xb0, 0x20, 0xbd, 0x54, 0x10, 0x23, 0x32, 0x81, 0x53, 0x21, 0xda, 0x48, - 0x27, 0xa8, 0x89, 0xa8, 0xbe, 0x89, 0x18, 0xa1, 0xad, 0x42, 0x02, 0xa9, 0xb9, 0xac, 0xb8, 0x79, - 0x92, 0xb9, 0x48, 0x25, 0x20, 0xc0, 0x0b, 0x61, 0x15, 0x81, 0x08, 0x80, 0xaa, 0x8b, 0x11, 0x03, - 0xcf, 0x08, 0x81, 0xa8, 0xbc, 0x8a, 0xd8, 0x8a, 0xaa, 0x29, 0x47, 0x12, 0xb0, 0xac, 0x0b, 0x46, - 0x81, 0x18, 0x12, 0x31, 0xa0, 0x1a, 0x17, 0xca, 0x18, 0x41, 0x14, 0xbb, 0xac, 0x98, 0xaf, 0x12, - 0xba, 0x08, 0x42, 0x02, 0x00, 0xec, 0x29, 0x02, 0x08, 0x21, 0x33, 0x52, 0x13, 0x24, 0xcc, 0x89, - 0x51, 0x33, 0x91, 0x0b, 0x26, 0x90, 0xba, 0xbf, 0x00, 0x88, 0x89, 0x88, 0xbd, 0xac, 0xb9, 0x8c, - 0x93, 0x8c, 0x82, 0xbb, 0x61, 0x82, 0xbc, 0x1a, 0x66, 0x24, 0x00, 0x01, 0x99, 0x31, 0xa2, 0x0b, - 0x12, 0xb9, 0x88, 0xbd, 0x08, 0xb1, 0x0b, 0x81, 0xff, 0xaa, 0x99, 0x9b, 0xa8, 0xbc, 0x0b, 0x45, - 0x45, 0x12, 0x11, 0x10, 0x12, 0x12, 0x79, 0x34, 0x82, 0x8a, 0xea, 0xac, 0x08, 0x9a, 0x30, 0x82, - 0xa9, 0xab, 0xb8, 0xbf, 0x11, 0xe9, 0x89, 0x9a, 0x31, 0x36, 0x33, 0x32, 0x02, 0x80, 0x2a, 0x04, - 0x19, 0x23, 0xef, 0x89, 0x38, 0x23, 0x31, 0xfc, 0x1e, 0x12, 0x80, 0xa9, 0xca, 0x9b, 0x21, 0xb1, - 0x9e, 0x98, 0x41, 0x14, 0x99, 0xa9, 0x9b, 0x71, 0x17, 0xa8, 0x99, 0x90, 0x30, 0x04, 0x00, 0x19, - 0x04, 0x08, 0xa8, 0x88, 0x80, 0x51, 0xc8, 0x89, 0xdb, 0x2a, 0x17, 0xd9, 0x8b, 0x81, 0x18, 0x21, - 0x02, 0xa0, 0x8c, 0x03, 0x2a, 0x37, 0x00, 0x55, 0x33, 0x01, 0xca, 0x8a, 0x00, 0x12, 0xae, 0x88, - 0x19, 0x81, 0xf8, 0x0d, 0xa9, 0xba, 0x40, 0x02, 0xb8, 0x8d, 0x80, 0xa9, 0x28, 0x12, 0x45, 0x02, - 0xa9, 0x81, 0x1e, 0x47, 0x13, 0x18, 0x91, 0xba, 0xae, 0x8a, 0x21, 0xa8, 0xbe, 0xb9, 0x28, 0x04, - 0x99, 0x31, 0xb8, 0x0c, 0x35, 0x21, 0x14, 0x90, 0xac, 0x91, 0x0c, 0x61, 0x04, 0x8a, 0x12, 0xbc, - 0x20, 0x63, 0x13, 0xba, 0xab, 0x2b, 0x27, 0xab, 0x99, 0xc9, 0x20, 0x1a, 0x47, 0x42, 0xa0, 0x99, - 0x8a, 0x21, 0xa1, 0x1b, 0x04, 0x89, 0x35, 0xda, 0x09, 0x13, 0x0b, 0xf9, 0x2c, 0x13, 0x29, 0x02, - 0x00, 0x9b, 0xc8, 0x4b, 0xc2, 0x9b, 0x60, 0x93, 0xfa, 0x9f, 0x00, 0x31, 0x02, 0xbb, 0xcb, 0x9b, - 0x18, 0x33, 0xca, 0x00, 0x29, 0xf1, 0x3a, 0x15, 0xca, 0x0a, 0x80, 0x73, 0x85, 0x18, 0x22, 0x90, - 0x00, 0x10, 0x23, 0xcd, 0xa9, 0x9d, 0x41, 0x02, 0xe9, 0x8b, 0x11, 0x99, 0x80, 0x9a, 0x08, 0x64, - 0x23, 0xc9, 0x48, 0x33, 0x02, 0x32, 0x14, 0xab, 0x18, 0x27, 0xda, 0xac, 0xb0, 0x2a, 0x93, 0x28, - 0x14, 0x10, 0xb0, 0xcd, 0x99, 0xbb, 0x40, 0x13, 0x08, 0x01, 0x80, 0x30, 0xfb, 0xff, 0x09, 0x88, - 0x21, 0x43, 0x90, 0x20, 0x13, 0xd8, 0x2b, 0x83, 0xdc, 0x29, 0x12, 0x32, 0xa1, 0x8e, 0x90, 0x9b, - 0x01, 0xec, 0xbc, 0x89, 0x00, 0x21, 0xb9, 0x70, 0x25, 0x01, 0x80, 0x18, 0x43, 0x08, 0x82, 0x39, - 0x33, 0x25, 0x08, 0x00, 0xa8, 0xbb, 0x39, 0xa3, 0x9f, 0x93, 0xcf, 0xbb, 0x08, 0xbb, 0xa0, 0x3a, - 0xf2, 0x9a, 0x1a, 0x83, 0x70, 0x36, 0x10, 0x90, 0x89, 0x73, 0x12, 0xb1, 0x8b, 0xea, 0x08, 0x98, - 0x29, 0xb2, 0xed, 0x2a, 0x02, 0x41, 0x02, 0xa9, 0x99, 0xcf, 0x8a, 0x91, 0x20, 0x00, 0xc9, 0x38, - 0x32, 0x37, 0xa0, 0x59, 0x24, 0x91, 0x9a, 0x99, 0xbb, 0xac, 0xbd, 0x98, 0x98, 0x8b, 0x24, 0x15, - 0xbb, 0x11, 0x61, 0x23, 0x11, 0x10, 0x92, 0x4a, 0x22, 0x47, 0x18, 0x99, 0x45, 0x91, 0x40, 0x13, - 0xdb, 0xad, 0x9a, 0x40, 0x80, 0x88, 0x48, 0x02, 0x88, 0xc9, 0xac, 0x10, 0x98, 0x33, 0x74, 0x82, - 0xb9, 0x5a, 0x83, 0xb9, 0xad, 0xcc, 0x18, 0x12, 0x80, 0xcf, 0x89, 0x08, 0x11, 0x82, 0x0b, 0x34, - 0x91, 0xca, 0x9b, 0x35, 0x33, 0x81, 0x90, 0xbd, 0x19, 0x25, 0xa2, 0x0d, 0x24, 0x28, 0x93, 0xcd, - 0x1a, 0x10, 0x20, 0x46, 0x01, 0x32, 0x05, 0xbc, 0x99, 0x33, 0x11, 0xd0, 0xac, 0x8c, 0x24, 0xa0, - 0xbc, 0x19, 0xa0, 0x8c, 0x23, 0xa8, 0x1a, 0x47, 0x00, 0x42, 0xd0, 0x8b, 0x53, 0x10, 0x02, 0xb0, - 0x9d, 0x90, 0x18, 0x01, 0xea, 0xaa, 0x88, 0xc9, 0x8c, 0x43, 0xd8, 0x9a, 0x22, 0x81, 0x19, 0x36, - 0x00, 0x12, 0x82, 0x1a, 0xa1, 0x32, 0xfc, 0x8f, 0x01, 0x00, 0x08, 0x88, 0x82, 0x8b, 0x9a, 0x91, - 0xff, 0x1a, 0x83, 0x89, 0x30, 0x82, 0x61, 0x34, 0xa0, 0xbc, 0x70, 0x82, 0x08, 0x02, 0x09, 0x83, - 0x9d, 0x30, 0x92, 0x3a, 0x90, 0x9a, 0x32, 0xfb, 0x5b, 0x83, 0x9b, 0x62, 0xa1, 0x1b, 0x03, 0xcf, - 0x8b, 0x31, 0x11, 0x81, 0xcc, 0x2b, 0x95, 0x9b, 0x33, 0x23, 0x83, 0xaf, 0x00, 0xcd, 0x9b, 0x30, - 0x02, 0x81, 0x19, 0x22, 0xfc, 0x3a, 0x15, 0xa1, 0xab, 0xbb, 0x18, 0x00, 0x75, 0x82, 0x31, 0xa9, - 0x28, 0x27, 0xb8, 0xab, 0x89, 0x88, 0x80, 0x22, 0x99, 0x38, 0x37, 0xc8, 0x18, 0x14, 0x08, 0xff, - 0x19, 0x32, 0x90, 0x31, 0xa1, 0x0a, 0xfa, 0x9a, 0x11, 0x30, 0x27, 0x80, 0xb8, 0xae, 0x08, 0x22, - 0x99, 0x31, 0x13, 0x50, 0x13, 0x91, 0xb9, 0x9d, 0x25, 0xb8, 0x9d, 0xba, 0x38, 0x02, 0x22, 0x45, - 0xd1, 0xae, 0x9a, 0x08, 0x00, 0x42, 0x02, 0x10, 0xa0, 0x9d, 0x91, 0x18, 0x98, 0x21, 0xf8, 0xbc, - 0x1b, 0xb9, 0x11, 0xad, 0x99, 0x63, 0x81, 0x63, 0x81, 0x19, 0x16, 0x08, 0xb8, 0x61, 0x01, 0x01, - 0x11, 0x11, 0x02, 0xfa, 0xaa, 0xbb, 0x53, 0x81, 0x9a, 0xaa, 0x89, 0x9b, 0x30, 0x16, 0x51, 0x02, - 0x52, 0x22, 0x01, 0x24, 0xbb, 0x10, 0x40, 0x13, 0x38, 0xb2, 0xff, 0x39, 0xa3, 0xac, 0xeb, 0x09, - 0x02, 0xb9, 0xab, 0xc9, 0x0b, 0x14, 0xdf, 0x09, 0x80, 0x30, 0x82, 0x10, 0xb8, 0xac, 0x72, 0x37, - 0x02, 0x99, 0x00, 0x98, 0x20, 0xa1, 0xbd, 0xbb, 0x1a, 0x23, 0x01, 0xcf, 0xb9, 0x0b, 0xeb, 0x39, - 0x26, 0xb8, 0xbb, 0x09, 0x28, 0x35, 0x51, 0x13, 0x08, 0x31, 0x81, 0x22, 0x51, 0x02, 0xb8, 0x39, - 0xda, 0xa9, 0xac, 0x74, 0x81, 0x30, 0x81, 0x19, 0xf0, 0x1a, 0x18, 0x23, 0xb8, 0xdc, 0x2a, 0x23, - 0xb2, 0x4a, 0x01, 0x67, 0x80, 0xa9, 0x9b, 0x09, 0x24, 0x08, 0x91, 0xbe, 0x0a, 0x80, 0xaa, 0xb8, - 0xcf, 0x20, 0x01, 0xd9, 0xcb, 0x1a, 0x33, 0x20, 0xa2, 0xae, 0x8a, 0x44, 0x81, 0x89, 0xd9, 0x1a, - 0x33, 0x45, 0x00, 0x18, 0xc8, 0x18, 0x01, 0x02, 0xeb, 0xab, 0x39, 0x37, 0x21, 0xa1, 0x9c, 0xab, - 0x38, 0x92, 0x78, 0xa2, 0xaa, 0x0a, 0xe0, 0x0a, 0x21, 0x22, 0x43, 0x33, 0x15, 0x60, 0x14, 0x18, - 0x22, 0x12, 0x11, 0xcb, 0xbc, 0x39, 0x92, 0xdc, 0xaa, 0x9a, 0x02, 0xdc, 0x8c, 0x41, 0x01, 0x11, - 0x81, 0xac, 0xa9, 0x70, 0x22, 0x24, 0x01, 0xfb, 0x9b, 0xa8, 0x19, 0x42, 0xc0, 0xac, 0xaa, 0xac, - 0x08, 0x34, 0xb8, 0x2a, 0x33, 0xd1, 0xae, 0x11, 0x11, 0x01, 0x00, 0xfc, 0x9c, 0x10, 0xa9, 0x9a, - 0x63, 0x14, 0x88, 0x31, 0x93, 0x0c, 0x81, 0x41, 0x11, 0x82, 0x41, 0x28, 0x95, 0xac, 0xbb, 0x72, - 0x15, 0x88, 0x08, 0x12, 0xc8, 0x89, 0x39, 0x37, 0x00, 0x80, 0x81, 0x40, 0x02, 0x93, 0xcf, 0x88, - 0x98, 0x9a, 0x9b, 0x13, 0x8a, 0xf0, 0x9c, 0x99, 0x9a, 0x09, 0x44, 0x33, 0xc0, 0xbd, 0x28, 0x43, - 0x32, 0x26, 0x80, 0xda, 0xa9, 0x09, 0x23, 0xda, 0xbb, 0xbb, 0x2a, 0x37, 0x00, 0xb9, 0x1c, 0x03, - 0xd9, 0xad, 0x00, 0x21, 0x89, 0x13, 0x48, 0x15, 0x98, 0x09, 0x36, 0xb0, 0x19, 0x43, 0x08, 0x27, - 0x98, 0xdb, 0x09, 0x18, 0x02, 0xa9, 0x99, 0x60, 0xb2, 0x8d, 0x31, 0xa1, 0x30, 0x99, 0xb9, 0x73, - 0x26, 0x01, 0x20, 0xc1, 0xad, 0x21, 0x25, 0x12, 0x21, 0xa8, 0x8a, 0x08, 0xfa, 0x9d, 0x99, 0xab, - 0x80, 0x9b, 0xa1, 0xbf, 0x9b, 0x32, 0xdb, 0x38, 0x81, 0x22, 0x38, 0xa3, 0xad, 0x49, 0x47, 0x11, - 0xba, 0x73, 0x14, 0x00, 0x88, 0xbb, 0x81, 0xbc, 0x28, 0x82, 0xb9, 0x1b, 0x96, 0x98, 0xbe, 0x91, - 0xbc, 0x00, 0x11, 0x88, 0x91, 0x2b, 0x35, 0x27, 0xa9, 0x22, 0x25, 0x01, 0x22, 0x91, 0x00, 0x1a, - 0xd3, 0x0e, 0x42, 0xa1, 0x0c, 0xb2, 0xac, 0xac, 0xa9, 0x09, 0x03, 0xdd, 0x1a, 0x63, 0x83, 0xa9, - 0x0b, 0x24, 0x24, 0x10, 0x88, 0x19, 0x14, 0x29, 0x57, 0x12, 0xdd, 0x09, 0x31, 0x12, 0x08, 0xa8, - 0x9b, 0x33, 0xfb, 0x88, 0x88, 0xcb, 0x39, 0xd1, 0xbd, 0x8d, 0x11, 0x21, 0xca, 0x8c, 0x32, 0x23, - 0x20, 0x47, 0x81, 0xaa, 0x08, 0x20, 0x83, 0x1b, 0x34, 0xe9, 0xaa, 0xdb, 0x19, 0x10, 0xa3, 0xbf, - 0x9a, 0x53, 0x23, 0xa8, 0xca, 0x0b, 0x02, 0x20, 0x10, 0x27, 0xba, 0x48, 0x24, 0x90, 0xad, 0x10, - 0x41, 0x02, 0x54, 0x12, 0xb9, 0x19, 0xa8, 0xed, 0x9b, 0x30, 0x24, 0x00, 0x99, 0xc9, 0x99, 0x88, - 0x01, 0xdb, 0x30, 0x30, 0x47, 0x81, 0x41, 0x33, 0x02, 0x00, 0x81, 0xaa, 0xef, 0x0a, 0xa0, 0x8b, - 0x08, 0xc8, 0x8c, 0x99, 0xda, 0x4b, 0x24, 0xa0, 0x89, 0x11, 0x32, 0xc1, 0x9b, 0x89, 0x61, 0xa3, - 0xaf, 0x12, 0x10, 0x23, 0x44, 0xb8, 0xbc, 0x09, 0xb9, 0x64, 0x01, 0xa9, 0x58, 0xd0, 0x9a, 0x19, - 0x02, 0x31, 0x02, 0x90, 0x1b, 0x27, 0x23, 0x99, 0xa9, 0x4b, 0x47, 0x80, 0xaa, 0x29, 0x04, 0xcd, - 0x0b, 0x22, 0x10, 0xb9, 0x3a, 0x16, 0x02, 0x31, 0xd0, 0x8b, 0xb8, 0x89, 0xfb, 0x0a, 0x83, 0x8b, - 0xf8, 0x3a, 0x83, 0x70, 0x01, 0xa0, 0xad, 0x8a, 0x12, 0x8a, 0x47, 0x82, 0x89, 0x10, 0x53, 0x82, - 0xbd, 0x8a, 0x01, 0x18, 0x21, 0x02, 0xfa, 0x8f, 0x81, 0x99, 0xa9, 0x2a, 0x14, 0x88, 0x88, 0x9a, - 0x43, 0x91, 0x59, 0x16, 0xb9, 0x19, 0x53, 0x15, 0x99, 0x91, 0xcd, 0x38, 0x01, 0xa8, 0x30, 0x25, - 0x90, 0xba, 0xbb, 0x50, 0x02, 0xdc, 0x8c, 0x10, 0x01, 0xa9, 0x21, 0x23, 0x21, 0xa8, 0x73, 0x06, - 0x09, 0x13, 0x19, 0x25, 0x36, 0x01, 0xca, 0xaa, 0x09, 0x10, 0xeb, 0x08, 0xa8, 0xce, 0x8a, 0xaa, - 0x80, 0x28, 0x80, 0xb8, 0x8d, 0x13, 0x9b, 0x47, 0xa1, 0x09, 0x84, 0x1b, 0x26, 0x90, 0x18, 0x01, - 0x33, 0x82, 0x6b, 0x07, 0x99, 0x89, 0xb9, 0x8a, 0x20, 0xa0, 0xdf, 0x9c, 0x21, 0x03, 0x0a, 0xb1, - 0x8a, 0x09, 0x53, 0x04, 0x19, 0x24, 0x23, 0xfb, 0x19, 0x81, 0xa9, 0x72, 0x15, 0x01, 0xa0, 0xaa, - 0x39, 0x27, 0x90, 0xab, 0x08, 0x00, 0xdb, 0x08, 0x12, 0xa8, 0xea, 0x0a, 0x98, 0xa8, 0xce, 0xaa, - 0x20, 0x35, 0xa2, 0x19, 0x55, 0xb0, 0x48, 0x03, 0x10, 0x91, 0x9b, 0x54, 0x21, 0x06, 0xab, 0xbb, - 0x9c, 0x01, 0xac, 0x88, 0x99, 0x19, 0xe0, 0xae, 0x8a, 0x43, 0xa1, 0x18, 0x35, 0xc8, 0x9b, 0x10, - 0x10, 0x44, 0x32, 0x92, 0x19, 0xb0, 0x1b, 0x81, 0xcc, 0x21, 0xac, 0x74, 0x13, 0x9a, 0xb9, 0x4a, - 0x26, 0xa0, 0xab, 0x1a, 0x47, 0x80, 0xa8, 0xbc, 0xab, 0x30, 0x43, 0x81, 0xfb, 0x8a, 0x21, 0x11, - 0x02, 0xba, 0x0a, 0x33, 0x77, 0x04, 0x88, 0x80, 0x99, 0x8a, 0x02, 0x61, 0x13, 0xe9, 0x8a, 0x98, - 0x80, 0xa9, 0xbb, 0xa8, 0xbd, 0x0a, 0x75, 0x83, 0x89, 0x88, 0x82, 0xbc, 0xdc, 0x39, 0x34, 0x23, - 0x08, 0xb0, 0x1c, 0xd8, 0x28, 0x12, 0x91, 0x19, 0x51, 0x15, 0xa9, 0x19, 0xf9, 0x0b, 0x12, 0x91, - 0x9e, 0x10, 0xa0, 0xbe, 0x1a, 0x01, 0x11, 0x98, 0xc8, 0x48, 0x13, 0x73, 0x81, 0xca, 0x19, 0x33, - 0x10, 0x35, 0xb9, 0x38, 0x03, 0x10, 0x37, 0x92, 0xce, 0x09, 0x12, 0x88, 0x88, 0x99, 0x0b, 0x27, - 0x99, 0xd0, 0xad, 0x09, 0xb0, 0x18, 0x83, 0xcf, 0x28, 0x32, 0x12, 0x91, 0xab, 0x29, 0x77, 0x04, - 0xa8, 0x09, 0x11, 0x32, 0xa1, 0x1b, 0xc1, 0x9a, 0x8a, 0x14, 0xde, 0x99, 0xa8, 0xa9, 0x08, 0xd9, - 0x9c, 0x21, 0x82, 0x9a, 0x65, 0x12, 0x81, 0xba, 0x08, 0x11, 0x54, 0x24, 0x81, 0x80, 0x29, 0x37, - 0x98, 0xaa, 0x0a, 0x88, 0xfa, 0x9d, 0x99, 0x9b, 0x30, 0xb1, 0xbd, 0x09, 0x30, 0x26, 0x81, 0x89, - 0x20, 0x11, 0x55, 0x13, 0x10, 0xc8, 0x72, 0x84, 0x8a, 0xb9, 0x09, 0x31, 0x27, 0xba, 0x89, 0xba, - 0x89, 0x99, 0x90, 0xb9, 0xab, 0xbc, 0x76, 0x82, 0x99, 0x00, 0x89, 0x43, 0x01, 0x9a, 0x24, 0x38, - 0x36, 0x05, 0x9a, 0x02, 0xba, 0x99, 0x58, 0x14, 0x89, 0xea, 0xac, 0x28, 0x91, 0x08, 0x91, 0xae, - 0x8a, 0xbb, 0x0a, 0x91, 0xcf, 0xbc, 0x38, 0x24, 0x11, 0x01, 0x98, 0x30, 0x25, 0x53, 0x34, 0x90, - 0x11, 0xfc, 0x18, 0xb0, 0x9d, 0x18, 0x98, 0x11, 0x9b, 0x88, 0xaa, 0xdb, 0x0b, 0x37, 0x01, 0x28, - 0x33, 0x28, 0x33, 0x64, 0x03, 0x18, 0x43, 0x35, 0x03, 0xbe, 0x28, 0x45, 0xb1, 0x8a, 0x19, 0xc8, - 0x0b, 0x82, 0x9a, 0xf9, 0x9e, 0x01, 0xa8, 0x09, 0x11, 0x04, 0x89, 0x11, 0x41, 0x82, 0x48, 0x35, - 0x83, 0xad, 0xbb, 0x31, 0x02, 0x8b, 0x27, 0x01, 0x98, 0xb9, 0xdf, 0x9a, 0xaa, 0xcb, 0xdb, 0x89, - 0x30, 0x15, 0x98, 0x88, 0xa0, 0x68, 0x25, 0x81, 0x08, 0xa9, 0x51, 0x23, 0x12, 0xaa, 0xc9, 0x9c, - 0x41, 0x25, 0xc9, 0x0a, 0x23, 0xc9, 0x9b, 0x29, 0x82, 0xaa, 0x10, 0x09, 0x64, 0x16, 0xda, 0x18, - 0x24, 0x80, 0x08, 0x10, 0x42, 0x23, 0xa9, 0x00, 0xab, 0xa0, 0xdc, 0x8e, 0x24, 0x10, 0xb2, 0xbf, - 0x1a, 0x02, 0x08, 0xb9, 0x9d, 0x01, 0xb8, 0xae, 0x72, 0xa0, 0x0a, 0x01, 0x99, 0x08, 0x21, 0x41, - 0x93, 0xd9, 0x1b, 0x47, 0xb0, 0x9c, 0x11, 0x21, 0x23, 0xda, 0x88, 0xbd, 0x48, 0x14, 0x12, 0xda, - 0x9a, 0x99, 0x28, 0xa8, 0x33, 0xc9, 0x48, 0x92, 0x2b, 0x16, 0x53, 0x82, 0xda, 0x8a, 0x31, 0xa1, - 0x49, 0x15, 0x9a, 0x10, 0x13, 0x11, 0x09, 0xd1, 0x79, 0x14, 0x11, 0xc9, 0xbb, 0x9c, 0x64, 0x92, - 0xbb, 0x18, 0x01, 0xd9, 0x8b, 0x98, 0x29, 0x37, 0x32, 0x25, 0x99, 0xbc, 0x8a, 0x20, 0x16, 0xba, - 0x9a, 0xbc, 0x0b, 0x01, 0x18, 0xf0, 0xad, 0x89, 0x10, 0x12, 0x41, 0xd1, 0x9c, 0x31, 0x45, 0x12, - 0xba, 0xb9, 0x19, 0x11, 0x12, 0x91, 0x8d, 0xc9, 0x38, 0xb0, 0xcb, 0x60, 0x84, 0x0a, 0x80, 0x30, - 0x42, 0x12, 0x33, 0x92, 0x59, 0x27, 0x20, 0x12, 0x89, 0x00, 0x11, 0xa0, 0xed, 0x0a, 0x20, 0x65, - 0x12, 0xcb, 0xbb, 0x20, 0x21, 0x03, 0xcd, 0x89, 0x89, 0x89, 0x91, 0x9c, 0xc9, 0x38, 0x05, 0x0b, - 0x16, 0x90, 0x1b, 0x47, 0x02, 0xeb, 0x99, 0x99, 0x99, 0x09, 0x42, 0xd8, 0x9b, 0x98, 0x1a, 0x23, - 0x54, 0x92, 0x30, 0x13, 0xac, 0x11, 0xdb, 0xcb, 0x19, 0xaa, 0x18, 0x33, 0xb9, 0xfb, 0x1a, 0x02, - 0xbb, 0xac, 0x73, 0x15, 0x80, 0x22, 0x00, 0x31, 0x36, 0x01, 0x62, 0x02, 0x10, 0x90, 0xad, 0x10, - 0x61, 0x26, 0x88, 0x99, 0x08, 0x80, 0xb0, 0xbb, 0xde, 0x0a, 0x43, 0x02, 0x89, 0x90, 0x09, 0x02, - 0x01, 0xea, 0x09, 0x9a, 0x34, 0xf9, 0x9d, 0x00, 0x22, 0xb9, 0x39, 0x94, 0xad, 0x20, 0x12, 0xf8, - 0x9b, 0xbc, 0x9c, 0x18, 0x10, 0x11, 0x00, 0x99, 0x43, 0x82, 0x1a, 0x77, 0x03, 0x99, 0xa9, 0x38, - 0xa4, 0x2b, 0x26, 0x98, 0xaa, 0x89, 0x31, 0x02, 0xfd, 0x8a, 0x32, 0x23, 0x00, 0xc9, 0x29, 0x35, - 0xb2, 0x30, 0x15, 0xc9, 0x9b, 0x00, 0xbb, 0x30, 0x65, 0xc1, 0x9c, 0x89, 0x30, 0x45, 0x92, 0xaa, - 0xba, 0xbb, 0x74, 0x14, 0x11, 0x99, 0x19, 0x98, 0x01, 0x99, 0xc9, 0x28, 0xa3, 0xaf, 0x80, 0x9d, - 0x01, 0x9a, 0x89, 0xa9, 0x22, 0xf9, 0x0b, 0x23, 0x00, 0x3a, 0xb5, 0x0f, 0x45, 0x92, 0x9b, 0x28, - 0x35, 0xb8, 0x19, 0x90, 0xec, 0xaa, 0xaa, 0x08, 0x10, 0x31, 0x35, 0xb8, 0x0c, 0x10, 0x92, 0x8d, - 0x22, 0x98, 0x22, 0xbc, 0xb9, 0x72, 0x23, 0x34, 0x02, 0x51, 0x92, 0x40, 0xf8, 0xcb, 0x2a, 0x35, - 0xb8, 0xac, 0x08, 0x43, 0x43, 0x11, 0x02, 0x89, 0x01, 0x0a, 0x54, 0x83, 0xcf, 0xbb, 0x09, 0x28, - 0x05, 0x89, 0x12, 0xb9, 0x2a, 0x15, 0xba, 0x89, 0xba, 0x21, 0x64, 0x11, 0x22, 0x09, 0x44, 0x33, - 0x90, 0xc8, 0x9e, 0x09, 0x12, 0x98, 0xed, 0xbc, 0xaa, 0x9a, 0x10, 0x32, 0x80, 0x53, 0x12, 0x92, - 0x2b, 0x23, 0x77, 0xa2, 0x89, 0xaa, 0xd9, 0x38, 0xc8, 0x9a, 0x19, 0x62, 0x82, 0x89, 0xd9, 0x2a, - 0x82, 0x73, 0x82, 0xa9, 0x2b, 0x47, 0x81, 0x99, 0x09, 0xa8, 0x9b, 0x39, 0x26, 0x12, 0x90, 0xda, - 0x9a, 0x98, 0x61, 0x04, 0xa9, 0x10, 0xa8, 0x8b, 0x51, 0x35, 0x90, 0xcb, 0x30, 0x80, 0xc0, 0x0b, - 0xc9, 0x21, 0x92, 0xa9, 0x2a, 0xb5, 0xbf, 0x09, 0x98, 0x73, 0x04, 0x89, 0xa9, 0x8b, 0x90, 0x0b, - 0x65, 0x34, 0x02, 0x9a, 0x10, 0x32, 0xb8, 0xce, 0x09, 0x81, 0x11, 0xfa, 0xab, 0xbb, 0x29, 0x43, - 0xc9, 0x68, 0xa1, 0xbc, 0x1a, 0x53, 0x14, 0xca, 0x9a, 0x89, 0x20, 0x21, 0x36, 0x81, 0xb0, 0x9d, - 0x99, 0x88, 0x12, 0x54, 0x82, 0x9a, 0x99, 0x98, 0x9a, 0x66, 0x03, 0xca, 0x9b, 0x20, 0x12, 0x73, - 0x04, 0x10, 0x92, 0x8c, 0x53, 0x81, 0x89, 0xb0, 0x2a, 0x82, 0x98, 0x1a, 0x12, 0x94, 0xef, 0xab, - 0x99, 0x99, 0x00, 0x99, 0x51, 0xb0, 0x50, 0x13, 0x33, 0x81, 0x9a, 0xfb, 0x5a, 0x81, 0x00, 0x9a, - 0xfb, 0x8c, 0x10, 0x01, 0x19, 0x15, 0xab, 0x08, 0xca, 0x8b, 0x12, 0xcb, 0xbc, 0x29, 0x25, 0xbd, - 0x11, 0x89, 0x30, 0x04, 0x73, 0xa3, 0x9d, 0x52, 0x33, 0x03, 0x89, 0x21, 0xd8, 0x9b, 0x0a, 0x32, - 0x21, 0xa0, 0xfd, 0x9b, 0xa8, 0xbc, 0x40, 0x81, 0x10, 0x18, 0x44, 0x11, 0x21, 0xda, 0x8b, 0x72, - 0x24, 0x21, 0x01, 0x53, 0x02, 0x10, 0xa8, 0xbb, 0xcd, 0x28, 0x35, 0x81, 0xba, 0xbf, 0x89, 0xb9, - 0xab, 0x88, 0x10, 0xc9, 0x99, 0xbb, 0xcf, 0x0a, 0x19, 0x11, 0x32, 0x55, 0x12, 0xfb, 0x8b, 0x21, - 0x22, 0x14, 0x81, 0xc9, 0x28, 0x63, 0x82, 0x08, 0xba, 0xad, 0x88, 0x9a, 0x31, 0xc2, 0xbd, 0x8a, - 0x41, 0x33, 0x82, 0x0b, 0x44, 0x02, 0x53, 0x92, 0x0c, 0xa1, 0x8c, 0x21, 0x55, 0x23, 0x08, 0x81, - 0x9a, 0xc9, 0xbb, 0x20, 0xee, 0xaa, 0xba, 0xac, 0x80, 0x09, 0x34, 0x08, 0x01, 0x39, 0x57, 0x11, - 0x80, 0x18, 0x22, 0x22, 0x01, 0xbe, 0x51, 0x34, 0x12, 0xd8, 0x9c, 0x08, 0x12, 0x32, 0xc0, 0xcf, - 0x8a, 0x22, 0x90, 0x20, 0x10, 0x91, 0xab, 0xdb, 0x0b, 0xa1, 0x28, 0x40, 0x37, 0x11, 0xa9, 0x82, - 0xaf, 0x21, 0x32, 0x34, 0x91, 0xef, 0x89, 0x81, 0x88, 0x99, 0x89, 0x21, 0x92, 0xbb, 0xae, 0x09, - 0x31, 0xa8, 0x52, 0x32, 0x12, 0xd9, 0xbe, 0x31, 0xb1, 0x0b, 0x37, 0x32, 0x13, 0x33, 0x45, 0x14, - 0x01, 0xea, 0x9a, 0xab, 0x19, 0x21, 0x32, 0xf8, 0xac, 0x89, 0x10, 0x13, 0xcb, 0x28, 0x13, 0x31, - 0x02, 0x40, 0x14, 0x88, 0x35, 0xc9, 0x1a, 0xf8, 0x8a, 0x21, 0x99, 0x73, 0x03, 0xd9, 0x9a, 0x80, - 0x10, 0x32, 0x13, 0xed, 0xbb, 0x08, 0x11, 0xea, 0x19, 0x90, 0x89, 0xa0, 0xae, 0x31, 0x81, 0xaa, - 0x72, 0x05, 0x08, 0x81, 0x89, 0x10, 0x32, 0xb4, 0xbf, 0x09, 0x42, 0x83, 0xab, 0x88, 0xa9, 0x0b, - 0x73, 0x34, 0x93, 0x0a, 0x73, 0x12, 0x21, 0xc8, 0xcd, 0x08, 0x98, 0x09, 0x32, 0x90, 0xcc, 0x70, - 0x13, 0x80, 0x8a, 0x18, 0x14, 0x98, 0x81, 0xc9, 0x9c, 0x81, 0xb9, 0xbd, 0x72, 0x92, 0xab, 0xb9, - 0x09, 0x24, 0xaa, 0x11, 0xca, 0x1b, 0x36, 0xa9, 0x41, 0xc9, 0x50, 0x12, 0x01, 0xaa, 0xca, 0x0a, - 0x31, 0x02, 0xb9, 0x2d, 0x77, 0x01, 0x81, 0x0a, 0x22, 0x89, 0xab, 0xda, 0xbe, 0x0a, 0x14, 0x00, - 0xd8, 0xbd, 0x28, 0x33, 0xb1, 0x8b, 0x88, 0x02, 0x98, 0xcb, 0x40, 0x37, 0x00, 0x33, 0x04, 0xcb, - 0x19, 0x73, 0x23, 0xa8, 0xbb, 0x19, 0x90, 0xaa, 0x00, 0x41, 0xc9, 0x21, 0xdf, 0x29, 0x36, 0x02, - 0xba, 0x99, 0x00, 0x30, 0x03, 0x0b, 0x36, 0xa1, 0x9c, 0x01, 0xaa, 0xbd, 0x8b, 0x99, 0xb9, 0xbf, - 0x89, 0x22, 0xfb, 0x08, 0x18, 0x26, 0x91, 0xab, 0xf9, 0x8b, 0x38, 0x26, 0x11, 0x00, 0x10, 0xa9, - 0xbb, 0xab, 0x22, 0xcb, 0x75, 0x13, 0x89, 0x89, 0x08, 0xa9, 0xb0, 0xae, 0x11, 0x51, 0x27, 0x01, - 0xcb, 0xaa, 0x38, 0x33, 0xb0, 0x0b, 0x43, 0x12, 0x52, 0xa2, 0xcb, 0x08, 0x22, 0x37, 0x92, 0x98, - 0x81, 0xac, 0xb8, 0xad, 0xbb, 0xb9, 0x91, 0xcd, 0xbc, 0x18, 0x01, 0x8a, 0x99, 0x9b, 0x73, 0xa1, - 0x40, 0x25, 0xa8, 0x00, 0x21, 0x11, 0x55, 0x82, 0x99, 0x19, 0xa8, 0x19, 0xcc, 0xbb, 0x01, 0x0b, - 0x04, 0x9d, 0x90, 0xda, 0x9a, 0xa9, 0x00, 0x32, 0x1a, 0x24, 0x31, 0xba, 0x19, 0x45, 0x01, 0x99, - 0x2a, 0x17, 0x19, 0x11, 0x21, 0x34, 0xb8, 0x9b, 0xdb, 0x09, 0x11, 0x33, 0x13, 0xa9, 0xcb, 0xcc, - 0x0b, 0x14, 0x18, 0xc8, 0x0a, 0x00, 0xda, 0xad, 0x89, 0x31, 0x22, 0x53, 0x33, 0x23, 0x52, 0x13, - 0xa9, 0x09, 0xac, 0x20, 0xa1, 0xbb, 0xb1, 0xcb, 0xbc, 0x8a, 0xba, 0x0a, 0x01, 0x51, 0x02, 0x89, - 0x10, 0x99, 0xbb, 0x29, 0x24, 0x32, 0x03, 0x09, 0x11, 0x31, 0x33, 0x01, 0x99, 0xa9, 0x19, 0x90, - 0x9a, 0x00, 0xbb, 0x3a, 0x33, 0x11, 0xba, 0x9a, 0x19, 0x99, 0x20, 0x01, 0x99, 0xab, 0x99, 0x31, - 0x12, 0x31, 0x13, 0x90, 0xa9, 0x19, 0x21, 0x90, 0x00, 0x01, 0x90, 0xa0, 0x99, 0x00, 0x00, 0x19, - 0x90, 0x99, 0x00, 0x09, 0x10, 0x11, 0x11, 0x90, 0x09, 0x10, 0x00, 0x09, 0x90, 0x00, 0x00, 0x70, - 0x02, 0x01, 0x0b, 0x7d, 0x0b, 0x02, 0x88, 0x05, 0xc9, 0x02, 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, - 0x77, 0xf8, 0x95, 0x2d, 0x80, 0xe4, 0x49, 0x48, 0xf2, 0x3b, 0x91, 0x43, 0xad, 0x91, 0x38, 0xb1, - 0x10, 0x93, 0x1e, 0x99, 0x87, 0x29, 0x9c, 0x04, 0x30, 0x9d, 0xb2, 0x29, 0x11, 0xc1, 0x5a, 0xa0, - 0x91, 0x3d, 0xa4, 0x11, 0x2b, 0xe8, 0x02, 0x0a, 0x0a, 0xa3, 0x33, 0x8f, 0xc3, 0x22, 0x2c, 0xb3, - 0x5a, 0x99, 0xc1, 0x5a, 0xc0, 0x11, 0x49, 0xbb, 0x86, 0x18, 0x8a, 0x97, 0x18, 0x89, 0xa9, 0x04, - 0x0a, 0xa8, 0x14, 0x0a, 0xb1, 0x59, 0x80, 0x93, 0x7a, 0x9a, 0xd3, 0x29, 0x1a, 0xb5, 0x39, 0x0a, - 0xb2, 0x21, 0x09, 0x68, 0xa2, 0x0a, 0x8a, 0x88, 0x8b, 0xe5, 0x68, 0x89, 0xc1, 0x51, 0x09, 0xb8, - 0x15, 0x5a, 0xd9, 0x00, 0x1a, 0x00, 0x00, 0x90, 0x2a, 0xa0, 0x52, 0x80, 0x80, 0x7a, 0xc1, 0x98, - 0x3a, 0xcc, 0x05, 0x39, 0x9b, 0x94, 0x10, 0x2b, 0x86, 0x19, 0x80, 0xc8, 0x1b, 0xb1, 0x18, 0x58, - 0xb9, 0x96, 0x58, 0x8b, 0x97, 0x20, 0x8a, 0xc2, 0x19, 0x8a, 0x90, 0x10, 0x11, 0xd8, 0x61, 0x99, - 0x04, 0x48, 0xba, 0xa6, 0x8a, 0x29, 0xe2, 0x20, 0x2b, 0xe2, 0x22, 0x8a, 0x11, 0x21, 0xa9, 0x81, - 0x9b, 0x8f, 0xc3, 0x48, 0x0b, 0xb6, 0x49, 0x19, 0xb2, 0x32, 0x3b, 0xd9, 0x93, 0x0f, 0x90, 0x11, - 0x8b, 0x94, 0x29, 0x19, 0xa6, 0x50, 0x19, 0xe0, 0x82, 0x1c, 0xb1, 0x81, 0x3b, 0xa2, 0xa0, 0x60, - 0x90, 0x14, 0x1a, 0xe3, 0x20, 0x9d, 0xb1, 0x22, 0x1d, 0xb0, 0x04, 0x5b, 0x98, 0x81, 0x51, 0x89, - 0x93, 0x2a, 0xfb, 0x8b, 0xa1, 0x70, 0x02, 0x2a, 0xc0, 0x89, 0x22, 0x3a, 0x87, 0x29, 0xdb, 0xaa, - 0x83, 0x7c, 0x91, 0x10, 0x09, 0xc9, 0x22, 0x3a, 0x85, 0x29, 0xb1, 0xcf, 0x91, 0x2d, 0x85, 0x11, - 0x11, 0xec, 0x82, 0x1c, 0x03, 0x10, 0x20, 0xdd, 0x01, 0x0c, 0x03, 0x20, 0x10, 0xf9, 0x10, 0x8c, - 0x13, 0x10, 0x10, 0xf9, 0x18, 0x8c, 0x12, 0x01, 0x30, 0xf8, 0x28, 0xab, 0x04, 0x11, 0x10, 0xf0, - 0x29, 0xbb, 0x14, 0x10, 0x20, 0xe1, 0x2a, 0xc9, 0x32, 0x00, 0x11, 0xe1, 0x1b, 0xe8, 0x30, 0x01, - 0x20, 0xb1, 0x1e, 0xc0, 0x20, 0x11, 0x20, 0xb2, 0x8f, 0xc0, 0x29, 0x03, 0x30, 0x83, 0x9f, 0xb1, - 0x4b, 0x83, 0x21, 0x82, 0xaf, 0xa1, 0x1c, 0x13, 0x30, 0x83, 0xbd, 0xa2, 0x0d, 0x05, 0x10, 0x02, - 0xcc, 0x81, 0x8d, 0x03, 0x28, 0x23, 0xea, 0x11, 0xad, 0x23, 0x1a, 0x14, 0xc9, 0x28, 0xbd, 0x32, - 0x1a, 0x24, 0xc0, 0x28, 0xfa, 0x30, 0x89, 0x23, 0xb8, 0x19, 0xfa, 0x59, 0x98, 0x22, 0xa1, 0x2a, - 0xf8, 0x49, 0x90, 0x21, 0xa0, 0x1a, 0xf1, 0x3b, 0xb2, 0x43, 0x80, 0x9b, 0xa4, 0x2f, 0xb2, 0x31, - 0x91, 0xaa, 0x91, 0x8f, 0x95, 0x28, 0x01, 0x99, 0x01, 0x8f, 0x83, 0x39, 0x82, 0xca, 0x21, 0xaf, - 0x84, 0x18, 0x02, 0xb8, 0x30, 0xbe, 0x05, 0x19, 0x01, 0xb0, 0x39, 0xfc, 0x12, 0x19, 0x02, 0xa0, - 0x49, 0xea, 0x21, 0x88, 0x21, 0xb0, 0x3c, 0xf8, 0x10, 0x08, 0x21, 0xa2, 0x3d, 0xf0, 0x10, 0x80, - 0x01, 0x81, 0x1d, 0xd1, 0x39, 0x90, 0x11, 0x12, 0x0e, 0xb2, 0x2b, 0x83, 0x28, 0x03, 0x9f, 0xc3, - 0x1c, 0x02, 0x18, 0x24, 0xad, 0x94, 0x1b, 0x01, 0x08, 0x43, 0xad, 0x93, 0x0f, 0x11, 0x88, 0x31, - 0xe8, 0x12, 0x9c, 0x02, 0x80, 0x32, 0xfa, 0x11, 0x9c, 0x11, 0x90, 0x61, 0xc0, 0x20, 0x9b, 0x11, - 0x90, 0x50, 0xf1, 0x20, 0xba, 0x20, 0x81, 0x59, 0xd2, 0x38, 0xb9, 0x28, 0x91, 0x69, 0xc2, 0x2a, - 0xb8, 0x29, 0x93, 0x5a, 0xa5, 0x3a, 0xd8, 0x08, 0x83, 0x2a, 0x96, 0x1c, 0xb1, 0x0a, 0x22, 0x2b, - 0x07, 0x1c, 0xb2, 0x0b, 0x13, 0x0b, 0x07, 0x0c, 0xa1, 0x8a, 0x22, 0x9a, 0x37, 0x8c, 0x92, 0x8b, - 0x31, 0xb9, 0x36, 0x9d, 0x93, 0x8c, 0x30, 0xc0, 0x53, 0xaa, 0x03, 0x8c, 0x39, 0xc1, 0x62, 0xaa, - 0x82, 0x8b, 0x39, 0xe3, 0x60, 0xa8, 0x01, 0x8a, 0x29, 0xc4, 0x68, 0xa8, 0x10, 0x8a, 0x0b, 0x96, - 0x49, 0xb1, 0x10, 0x0a, 0x89, 0xa4, 0x7b, 0xb2, 0x08, 0x89, 0x8b, 0x87, 0x2a, 0x92, 0x10, 0xa9, - 0xba, 0x17, 0x2b, 0x93, 0x0c, 0x91, 0xca, 0x23, 0x3b, 0x87, 0x09, 0xa0, 0xaa, 0x34, 0x8c, 0x15, - 0xaa, 0x91, 0xab, 0x51, 0x09, 0x15, 0x8a, 0x92, 0xac, 0x40, 0xb0, 0x44, 0xc9, 0x81, 0xab, 0x30, - 0x90, 0x74, 0xa8, 0x10, 0x9b, 0x29, 0xb3, 0x70, 0xb1, 0x08, 0x9d, 0x18, 0x93, 0x78, 0xb2, 0x28, - 0xba, 0x1a, 0x04, 0x49, 0xc3, 0x3b, 0xda, 0x09, 0x12, 0x48, 0x86, 0x0b, 0xb0, 0x09, 0x21, 0x09, - 0x27, 0x8d, 0xb0, 0x0b, 0x42, 0x91, 0x34, 0x8d, 0xb2, 0x0b, 0x10, 0x83, 0x55, 0xad, 0x92, 0x8a, - 0x18, 0x94, 0x71, 0xa9, 0xa2, 0x1b, 0x01, 0xa3, 0x79, 0xd0, 0x01, 0x0c, 0x88, 0x85, 0x38, 0xd0, - 0x01, 0x0b, 0x80, 0x03, 0x6c, 0xc1, 0x08, 0x0a, 0xa0, 0x14, 0x4a, 0xe3, 0x10, 0xaa, 0x81, 0x23, - 0x2d, 0xc4, 0x19, 0xa9, 0x91, 0x51, 0x1a, 0xa6, 0x2a, 0xb8, 0x81, 0x50, 0x8a, 0x96, 0x0a, 0xa8, - 0x00, 0x59, 0x98, 0x06, 0x8b, 0xa1, 0x08, 0x58, 0xa8, 0x14, 0x0d, 0xa0, 0x19, 0x49, 0xa1, 0x43, - 0x9d, 0xa3, 0x2a, 0x2a, 0xb4, 0x62, 0xcb, 0x82, 0x2c, 0x08, 0xa3, 0x70, 0xa9, 0x01, 0x1d, 0x80, - 0x94, 0x38, 0xd9, 0x11, 0x0d, 0x90, 0x04, 0x49, 0xc8, 0x20, 0x0c, 0x91, 0x02, 0x5a, 0xd1, 0x28, - 0x9b, 0x82, 0x21, 0x3a, 0xf3, 0x38, 0xbb, 0x83, 0x31, 0x2a, 0xd5, 0x3a, 0xca, 0x82, 0x20, 0x20, - 0xb5, 0x3d, 0xd8, 0x01, 0x20, 0x88, 0x94, 0x1d, 0xd0, 0x20, 0x08, 0x01, 0x93, 0x1e, 0xc1, 0x39, - 0x18, 0x01, 0x11, 0x8f, 0xb1, 0x3a, 0x81, 0x22, 0x13, 0xbf, 0xa4, 0x3b, 0x92, 0x21, 0x31, 0xbf, - 0xb3, 0x2e, 0x82, 0x20, 0x20, 0xeb, 0x83, 0x0e, 0x82, 0x30, 0x18, 0xea, 0x11, 0x0d, 0x82, 0x28, - 0x11, 0xe8, 0x10, 0x8c, 0x04, 0x19, 0x01, 0xd0, 0x28, 0x9d, 0x22, 0x29, 0x82, 0xd0, 0x38, 0xeb, - 0x22, 0x2a, 0x03, 0xd0, 0x3b, 0xea, 0x32, 0x0a, 0x13, 0xa0, 0x2d, 0xf8, 0x40, 0x98, 0x02, 0x88, - 0x1b, 0xf0, 0x48, 0x98, 0x13, 0x98, 0x1b, 0xe2, 0x49, 0xa0, 0x13, 0x88, 0x8c, 0xd2, 0x5a, 0xa1, - 0x21, 0x08, 0x9b, 0xb3, 0x3f, 0xa2, 0x50, 0x88, 0xaa, 0xb3, 0x2e, 0xa3, 0x40, 0x80, 0xb9, 0x82, - 0x0f, 0x94, 0x38, 0x91, 0xaa, 0x81, 0x0f, 0x84, 0x3a, 0x82, 0xb9, 0x10, 0x8f, 0x04, 0x3a, 0x91, - 0xa8, 0x18, 0xae, 0x33, 0x3b, 0x85, 0xa9, 0x29, 0xbc, 0x34, 0x1b, 0x07, 0xa9, 0x19, 0xcb, 0x52, - 0x98, 0x13, 0x99, 0x2a, 0xfb, 0x40, 0x80, 0x13, 0xba, 0x09, 0xf8, 0x48, 0x90, 0x32, 0xa8, 0x8b, - 0xc8, 0x69, 0x91, 0x41, 0xb0, 0x89, 0xca, 0x39, 0x04, 0x40, 0xb1, 0x9a, 0xc8, 0x3b, 0x15, 0x50, - 0xb2, 0xab, 0xa9, 0x1d, 0x14, 0x30, 0x94, 0xbb, 0x8a, 0x8c, 0x35, 0x20, 0x95, 0xab, 0x9b, 0xab, - 0x65, 0x80, 0x03, 0xaa, 0x8c, 0xa9, 0x72, 0x01, 0x02, 0xba, 0x8c, 0xb9, 0x60, 0x83, 0x23, 0xca, - 0x9c, 0x90, 0x69, 0x83, 0x21, 0xb8, 0xae, 0xa0, 0x59, 0x84, 0x20, 0x98, 0xac, 0x80, 0x2c, 0x07, - 0x10, 0x98, 0xbb, 0x81, 0x0b, 0x27, 0x29, 0x92, 0xbd, 0x00, 0x0a, 0x27, 0x09, 0x01, 0xdb, 0x18, - 0xab, 0x27, 0x88, 0x01, 0xca, 0x29, 0xb9, 0x45, 0x08, 0x01, 0xda, 0x2a, 0xc8, 0x53, 0x88, 0x11, - 0xc9, 0x2b, 0xc0, 0x71, 0x80, 0x00, 0xb8, 0x1b, 0xd1, 0x50, 0x81, 0x18, 0xb0, 0x0e, 0xb2, 0x68, - 0x81, 0x18, 0xa0, 0x8d, 0xb3, 0x5a, 0x82, 0x18, 0xa1, 0x9e, 0x93, 0x4a, 0x03, 0x09, 0x92, 0xaf, - 0x93, 0x3c, 0x13, 0x89, 0x02, 0xbf, 0x03, 0x1c, 0x14, 0x88, 0x11, 0xbe, 0x12, 0x0c, 0x23, 0x98, - 0x22, 0xdd, 0x11, 0x0b, 0x24, 0xa0, 0x21, 0xfb, 0x38, 0x8c, 0x32, 0x90, 0x30, 0xfb, 0x39, 0xa9, - 0x43, 0x91, 0x38, 0xf8, 0x2a, 0xa9, 0x42, 0x91, 0x28, 0xf1, 0x3b, 0xb0, 0x41, 0x82, 0x19, 0xf3, - 0x2c, 0xa0, 0x20, 0x83, 0x1a, 0xc4, 0x1d, 0xa1, 0x20, 0x13, 0x8a, 0xa5, 0x0f, 0xa1, 0x28, 0x12, - 0x99, 0x95, 0x0e, 0x91, 0x29, 0x22, 0xa8, 0x04, 0x9f, 0x92, 0x19, 0x22, 0xa8, 0x22, 0xaf, 0x82, - 0x1a, 0x33, 0xa0, 0x51, 0xbe, 0x82, 0x89, 0x42, 0x90, 0x40, 0xcc, 0x01, 0x89, 0x42, 0x91, 0x48, - 0xfa, 0x00, 0x89, 0x21, 0x82, 0x39, 0xf9, 0x19, 0x98, 0x41, 0x02, 0x2a, 0xf1, 0x1a, 0x98, 0x30, - 0x12, 0x1a, 0xf3, 0x1c, 0x90, 0x38, 0x14, 0x89, 0xc3, 0x0e, 0x90, 0x28, 0x23, 0x99, 0xa4, 0x8f, - 0x81, 0x19, 0x43, 0x98, 0x01, 0xaf, 0x81, 0x19, 0x33, 0xb0, 0x22, 0xcf, 0x11, 0x0a, 0x43, 0xa1, - 0x20, 0xcd, 0x18, 0x89, 0x43, 0x91, 0x39, 0xfb, 0x29, 0x98, 0x52, 0x92, 0x29, 0xf9, 0x19, 0x98, - 0x31, 0x83, 0x1a, 0xf2, 0x1c, 0x91, 0x30, 0x04, 0x0a, 0xd2, 0x1d, 0x90, 0x38, 0x13, 0x9a, 0xb3, - 0x9f, 0xa3, 0x48, 0x23, 0x9a, 0xa3, 0xbf, 0x93, 0x29, 0x24, 0xb8, 0x03, 0xcf, 0x83, 0x29, 0x32, - 0xc0, 0x21, 0xbf, 0x83, 0x1a, 0x23, 0xb1, 0x48, 0xdd, 0x12, 0x0a, 0x32, 0xa2, 0x4a, 0xfa, 0x28, - 0x8a, 0x32, 0xa1, 0x49, 0xf8, 0x39, 0x8a, 0x32, 0x93, 0x2c, 0xf2, 0x2a, 0x99, 0x22, 0x82, 0x2b, - 0xf4, 0x3a, 0xa8, 0x31, 0x12, 0x8b, 0xc5, 0x2d, 0xa8, 0x21, 0x02, 0x8a, 0xa5, 0x1f, 0xa1, 0x20, - 0x11, 0xa8, 0x83, 0x8f, 0xa1, 0x28, 0x12, 0xa8, 0x14, 0x9f, 0x92, 0x29, 0x22, 0xa0, 0x31, 0xcf, - 0x92, 0x2a, 0x13, 0xa0, 0x51, 0xbd, 0x02, 0x1a, 0x23, 0xa2, 0x58, 0xdc, 0x01, 0x0b, 0x13, 0x92, - 0x69, 0xe9, 0x10, 0x89, 0x12, 0x01, 0x39, 0xf8, 0x19, 0xaa, 0x33, 0x00, 0x39, 0xf4, 0x2a, 0xb8, - 0x32, 0x12, 0x19, 0xf2, 0x1b, 0xd8, 0x21, 0x11, 0x00, 0xb3, 0x8f, 0xa1, 0x48, 0x11, 0x80, 0x82, - 0x9f, 0xb0, 0x49, 0x11, 0x81, 0x21, 0xae, 0xa2, 0x3b, 0x23, 0x04, 0x39, 0xce, 0xa1, 0x2b, 0x02, - 0x33, 0x58, 0xf9, 0x08, 0x0a, 0x02, 0x33, 0x3a, 0xf1, 0x0b, 0x8d, 0x02, 0x32, 0x28, 0xf4, 0x09, - 0x99, 0x02, 0x42, 0x88, 0xd3, 0x0b, 0xbb, 0x13, 0x71, 0x80, 0xa4, 0x0c, 0xa8, 0x01, 0x70, 0x90, - 0x83, 0x8e, 0xa8, 0x10, 0x30, 0x91, 0x15, 0x9d, 0xa0, 0x18, 0x68, 0xa2, 0x21, 0xad, 0xb1, 0x09, - 0x40, 0x94, 0x42, 0xbc, 0x90, 0x08, 0x38, 0x96, 0x41, 0xda, 0x88, 0x0a, 0x38, 0x85, 0x48, 0xc8, - 0x88, 0x8a, 0x28, 0x07, 0x28, 0xc8, 0x89, 0x8a, 0x18, 0x06, 0x30, 0xd1, 0x0a, 0x9a, 0x28, 0x16, - 0x29, 0xb2, 0x8d, 0xaa, 0x18, 0x16, 0x20, 0xa2, 0x8e, 0x98, 0x09, 0x24, 0x20, 0xa3, 0x9f, 0xa8, - 0x09, 0x24, 0x30, 0x84, 0x9e, 0xa0, 0x0a, 0x43, 0x20, 0x02, 0xae, 0xb8, 0x8a, 0x44, 0x20, 0x13, - 0xcc, 0x98, 0x9b, 0x63, 0x20, 0x12, 0xbc, 0xa9, 0xac, 0x53, 0x21, 0x33, 0xfb, 0x89, 0x9a, 0x41, - 0x11, 0x33, 0xea, 0xa9, 0xbb, 0x62, 0x11, 0x23, 0xd8, 0x99, 0xca, 0x48, 0x12, 0x24, 0xc9, 0x9a, - 0xca, 0x30, 0x13, 0x35, 0xb0, 0x9c, 0xdb, 0x38, 0x04, 0x42, 0xb0, 0x9b, 0xeb, 0x29, 0x14, 0x42, - 0x90, 0x9c, 0xb9, 0x2a, 0x05, 0x52, 0x91, 0xbb, 0xd9, 0x2a, 0x04, 0x42, 0x92, 0xab, 0xd9, 0x0b, - 0x24, 0x51, 0x81, 0xab, 0xba, 0x0e, 0x23, 0x51, 0x02, 0xbb, 0xb9, 0x8e, 0x23, 0x50, 0x02, 0xba, - 0xba, 0x9e, 0x33, 0x50, 0x13, 0xca, 0xa9, 0xac, 0x33, 0x40, 0x05, 0xa9, 0xaa, 0xad, 0x32, 0x31, - 0x16, 0xb8, 0x9a, 0xcc, 0x31, 0x30, 0x25, 0xc8, 0xa9, 0xcb, 0x40, 0x11, 0x34, 0xa8, 0xba, 0xdc, - 0x38, 0x21, 0x25, 0xb0, 0xaa, 0xeb, 0x39, 0x21, 0x35, 0xb1, 0xab, 0xea, 0x29, 0x02, 0x44, 0x91, - 0x9b, 0xeb, 0x2a, 0x03, 0x34, 0x92, 0x9c, 0xd9, 0x1b, 0x12, 0x44, 0x92, 0xab, 0xd9, 0x0b, 0x13, - 0x44, 0x03, 0xbb, 0xda, 0x8c, 0x13, 0x43, 0x12, 0xbb, 0xca, 0x8f, 0x02, 0x33, 0x22, 0xca, 0xaa, - 0x9e, 0x02, 0x42, 0x23, 0xc9, 0xaa, 0xad, 0x22, 0x42, 0x32, 0xd0, 0x9a, 0xbc, 0x11, 0x43, 0x33, - 0xc0, 0xab, 0xcd, 0x11, 0x42, 0x22, 0xb2, 0xac, 0xeb, 0x18, 0x32, 0x33, 0xa2, 0x9e, 0xda, 0x08, - 0x32, 0x24, 0x82, 0xad, 0xba, 0x1a, 0x52, 0x32, 0x03, 0xbd, 0xd9, 0x0a, 0x42, 0x23, 0x02, 0xdb, - 0xb9, 0x8c, 0x31, 0x25, 0x22, 0xdb, 0xaa, 0x8b, 0x42, 0x33, 0x24, 0xd9, 0xab, 0x9d, 0x31, 0x24, - 0x21, 0xc8, 0xab, 0xac, 0x30, 0x26, 0x22, 0xb8, 0x9e, 0x9a, 0x28, 0x24, 0x32, 0xc2, 0x9d, 0xba, - 0x38, 0x25, 0x12, 0x92, 0xae, 0xaa, 0x1a, 0x35, 0x22, 0x92, 0xae, 0xa9, 0x0a, 0x35, 0x12, 0x03, - 0xbe, 0xa9, 0x0b, 0x44, 0x12, 0x12, 0xdc, 0x99, 0x8a, 0x53, 0x12, 0x11, 0xfa, 0x89, 0x9a, 0x42, - 0x12, 0x21, 0xe9, 0x8a, 0xaa, 0x61, 0x12, 0x20, 0xd8, 0x8b, 0xb9, 0x50, 0x22, 0x22, 0xe0, 0x8b, - 0xb9, 0x40, 0x14, 0x11, 0xb1, 0x9f, 0xa8, 0x49, 0x13, 0x11, 0xa2, 0x9f, 0xa0, 0x2a, 0x24, 0x21, - 0x91, 0xaf, 0xa0, 0x2a, 0x24, 0x11, 0x12, 0xaf, 0x98, 0x1b, 0x25, 0x01, 0x01, 0xcc, 0x88, 0x8c, - 0x24, 0x11, 0x21, 0xfb, 0x88, 0x8a, 0x33, 0x11, 0x22, 0xfa, 0x0b, 0xab, 0x44, 0x01, 0x21, 0xe8, - 0x0a, 0xb9, 0x52, 0x11, 0x11, 0xe0, 0x0b, 0xc8, 0x31, 0x12, 0x21, 0xd2, 0x8d, 0xc0, 0x30, 0x12, - 0x01, 0xb2, 0x9f, 0xb0, 0x49, 0x13, 0x11, 0x92, 0xaf, 0x90, 0x3a, 0x14, 0x10, 0x01, 0xaf, 0xa0, - 0x2a, 0x15, 0x01, 0x01, 0xcc, 0x80, 0x0b, 0x24, 0x12, 0x01, 0xdd, 0x08, 0x0b, 0x33, 0x12, 0x32, - 0xfb, 0x0b, 0x9b, 0x35, 0x01, 0x20, 0xf9, 0x0a, 0xaa, 0x43, 0x12, 0x21, 0xf8, 0x0a, 0xb8, 0x41, - 0x11, 0x21, 0xd0, 0x8d, 0xa8, 0x50, 0x11, 0x10, 0xa1, 0x8e, 0xb0, 0x38, 0x13, 0x02, 0xa1, 0xbf, - 0xa1, 0x3a, 0x15, 0x12, 0x82, 0xaf, 0x90, 0x3b, 0x23, 0x11, 0x01, 0xde, 0x80, 0x0b, 0x15, 0x11, - 0x11, 0xeb, 0x08, 0x8b, 0x14, 0x11, 0x10, 0xf9, 0x1a, 0x9a, 0x33, 0x22, 0x12, 0xf1, 0x1c, 0xc9, - 0x22, 0x20, 0x10, 0xd1, 0x0d, 0xb0, 0x31, 0x21, 0x12, 0xb3, 0x9f, 0xd0, 0x38, 0x11, 0x00, 0x01, - 0x9f, 0xb1, 0x3a, 0x33, 0x12, 0x12, 0xcf, 0xa2, 0x1b, 0x12, 0x02, 0x42, 0xce, 0x91, 0x1a, 0x23, - 0x11, 0x41, 0xfa, 0x00, 0x9c, 0x22, 0x01, 0x38, 0xf9, 0x18, 0x9b, 0x22, 0x32, 0x40, 0xf2, 0x1a, - 0xba, 0x21, 0x02, 0x20, 0xd5, 0x2b, 0xca, 0x21, 0x23, 0x10, 0xb5, 0x1d, 0xc8, 0x29, 0x21, 0x08, - 0x85, 0x0f, 0xa0, 0x18, 0x12, 0x00, 0x05, 0x9c, 0xb1, 0x0b, 0x32, 0x80, 0x25, 0x9e, 0x91, 0x0c, - 0x22, 0x01, 0x34, 0xbc, 0x90, 0x9d, 0x22, 0x91, 0x62, 0xc9, 0x80, 0x9b, 0x32, 0x03, 0x72, 0xc8, - 0x08, 0xbb, 0x20, 0x02, 0x71, 0xc1, 0x09, 0xaa, 0x48, 0x02, 0x60, 0xa1, 0x0a, 0xea, 0x19, 0x12, - 0x48, 0xb2, 0x0b, 0xd8, 0x2a, 0x23, 0x61, 0xa3, 0xab, 0xc8, 0x0c, 0x22, 0x38, 0x86, 0x9a, 0xa9, - 0x0d, 0x33, 0x30, 0x06, 0xaa, 0xa9, 0x9e, 0x21, 0x10, 0x06, 0x99, 0x99, 0xab, 0x52, 0x10, 0x16, - 0xa8, 0x8a, 0xcc, 0x20, 0x01, 0x24, 0x98, 0x8b, 0xeb, 0x38, 0x12, 0x26, 0x88, 0xab, 0xea, 0x29, - 0x01, 0x43, 0x00, 0xbb, 0xd9, 0x2a, 0x04, 0x34, 0x01, 0xdb, 0xb9, 0x0c, 0x11, 0x63, 0x10, 0xc9, - 0x98, 0x0c, 0x12, 0x62, 0x10, 0xd0, 0x99, 0xab, 0x12, 0x52, 0x11, 0xd1, 0x89, 0xab, 0x22, 0x72, - 0x11, 0xc1, 0x8b, 0xcb, 0x11, 0x40, 0x02, 0xa4, 0x0c, 0xca, 0x20, 0x41, 0x02, 0x94, 0x8d, 0xc9, - 0x09, 0x31, 0x03, 0x05, 0x8d, 0xa8, 0x1a, 0x31, 0x05, 0x13, 0x9e, 0xb8, 0x0c, 0x21, 0x03, 0x43, - 0xac, 0xa0, 0x8c, 0x21, 0x06, 0x41, 0xbb, 0x98, 0x9d, 0x20, 0x03, 0x72, 0xb8, 0x90, 0xab, 0x21, - 0x05, 0x61, 0xb8, 0x89, 0xac, 0x18, 0x23, 0x71, 0xa0, 0x89, 0xba, 0x18, 0x15, 0x60, 0xb1, 0x99, - 0xca, 0x09, 0x33, 0x68, 0x92, 0x99, 0xca, 0x89, 0x34, 0x48, 0x95, 0x8b, 0xba, 0x8c, 0x32, 0x40, - 0x86, 0x89, 0xb9, 0x9a, 0x42, 0x20, 0x07, 0x9a, 0xb8, 0xac, 0x31, 0x21, 0x17, 0x99, 0xa8, 0xab, - 0x50, 0x01, 0x16, 0xa9, 0xb8, 0xac, 0x38, 0x02, 0x37, 0x99, 0x98, 0xac, 0x28, 0x02, 0x55, 0xa8, - 0xa8, 0xcb, 0x29, 0x02, 0x73, 0x91, 0x98, 0xbb, 0x1a, 0x04, 0x72, 0xa1, 0x88, 0xac, 0x0b, 0x03, - 0x72, 0xa3, 0x08, 0xcb, 0x8a, 0x13, 0x70, 0xa3, 0x88, 0xdb, 0x8a, 0x12, 0x60, 0x83, 0x09, 0xd9, - 0x9a, 0x21, 0x58, 0x85, 0x89, 0xb9, 0xab, 0x30, 0x58, 0x07, 0x19, 0xb8, 0x9b, 0x10, 0x10, 0x27, - 0x89, 0xc0, 0xbb, 0x10, 0x11, 0x37, 0x09, 0xb0, 0x9d, 0x19, 0x01, 0x45, 0x89, 0xa0, 0xad, 0x08, - 0x01, 0x45, 0x88, 0x91, 0x9d, 0x09, 0x00, 0x73, 0x90, 0x80, 0xac, 0x09, 0x00, 0x73, 0x91, 0x81, - 0xcb, 0x89, 0x81, 0x72, 0x91, 0x00, 0xcb, 0x89, 0x08, 0x72, 0x82, 0x18, 0xda, 0x89, 0x80, 0x51, - 0x82, 0x18, 0xea, 0x8a, 0x00, 0x50, 0x03, 0x18, 0xf8, 0x8a, 0x80, 0x30, 0x05, 0x08, 0xc8, 0x8c, - 0x80, 0x30, 0x25, 0x09, 0xc1, 0x8d, 0x08, 0x28, 0x24, 0x88, 0xb1, 0x9f, 0x08, 0x28, 0x25, 0x88, - 0x91, 0xae, 0x80, 0x18, 0x34, 0x90, 0x81, 0xaf, 0x08, 0x18, 0x53, 0x80, 0x00, 0xbd, 0x08, 0x19, - 0x63, 0x91, 0x00, 0xfb, 0x08, 0x08, 0x42, 0x81, 0x18, 0xfa, 0x09, 0x08, 0x41, 0x82, 0x08, 0xf9, - 0x09, 0x88, 0x32, 0x04, 0x19, 0xe8, 0x0b, 0x90, 0x41, 0x13, 0x09, 0xe0, 0x0c, 0x90, 0x31, 0x14, - 0x88, 0xc1, 0x8e, 0x80, 0x38, 0x33, 0x98, 0xb1, 0xbf, 0x81, 0x38, 0x25, 0x90, 0x91, 0xaf, 0x80, - 0x28, 0x43, 0x80, 0x80, 0xbf, 0x81, 0x18, 0x34, 0x91, 0x18, 0xce, 0x80, 0x18, 0x42, 0x92, 0x18, - 0xec, 0x08, 0x08, 0x42, 0x82, 0x19, 0xfa, 0x09, 0x08, 0x41, 0x02, 0x09, 0xf8, 0x0a, 0x00, 0x40, - 0x12, 0x89, 0xd8, 0x0c, 0x80, 0x40, 0x13, 0x89, 0xd1, 0x8d, 0x81, 0x20, 0x24, 0x89, 0xb0, 0x9f, - 0x00, 0x10, 0x15, 0x90, 0x90, 0x9e, 0x00, 0x18, 0x34, 0x98, 0x88, 0xbe, 0x10, 0x18, 0x25, 0x91, - 0x08, 0xbe, 0x00, 0x00, 0x34, 0xa2, 0x09, 0xfc, 0x08, 0x80, 0x43, 0x81, 0x08, 0xeb, 0x09, 0x00, - 0x42, 0x83, 0x8a, 0xea, 0x0b, 0x01, 0x62, 0x02, 0x89, 0xd8, 0x8b, 0x82, 0x51, 0x03, 0x99, 0xc9, - 0x9d, 0x01, 0x41, 0x14, 0x98, 0xb8, 0xad, 0x11, 0x38, 0x26, 0x99, 0xa9, 0xbd, 0x21, 0x20, 0x26, - 0x90, 0x89, 0xbd, 0x28, 0x10, 0x35, 0xa0, 0x9a, 0xdc, 0x29, 0x11, 0x25, 0x92, 0x9a, 0xfa, 0x19, - 0x01, 0x42, 0x81, 0x9b, 0xea, 0x1a, 0x83, 0x53, 0x02, 0x9a, 0xe8, 0x0b, 0x02, 0x41, 0x03, 0xac, - 0xc0, 0x8c, 0x03, 0x51, 0x13, 0xaa, 0xa8, 0x9f, 0x02, 0x20, 0x23, 0xca, 0xa8, 0x9f, 0x22, 0x20, - 0x43, 0xb9, 0x88, 0xbe, 0x22, 0x18, 0x43, 0xd8, 0x09, 0xdb, 0x31, 0x10, 0x53, 0xb0, 0x19, 0xfb, - 0x38, 0x88, 0x32, 0xc1, 0x1b, 0xf9, 0x28, 0x01, 0x32, 0xb3, 0x1b, 0xf8, 0x2b, 0x81, 0x40, 0xb3, - 0x8c, 0xd1, 0x3b, 0x83, 0x51, 0x84, 0x8b, 0xb0, 0x1f, 0x01, 0x19, 0x84, 0x9b, 0xa1, 0x0e, 0x13, - 0x28, 0x15, 0x9b, 0x92, 0x9f, 0x02, 0x88, 0x23, 0xcb, 0x01, 0x9e, 0x23, 0x08, 0x44, 0xb9, 0x01, - 0xbd, 0x22, 0x99, 0x52, 0xc9, 0x10, 0xcb, 0x32, 0x81, 0x72, 0xb0, 0x28, 0xea, 0x10, 0x90, 0x48, - 0xb0, 0x3a, 0xf8, 0x20, 0x81, 0x40, 0xa2, 0x2a, 0xf8, 0x29, 0x90, 0x29, 0xb3, 0x2c, 0xd1, 0x29, - 0x12, 0x48, 0x85, 0x0b, 0xe2, 0x09, 0x80, 0x19, 0x84, 0x0d, 0xb2, 0x2a, 0x13, 0x18, 0x17, 0x8b, - 0xc3, 0x0c, 0x81, 0x99, 0x33, 0x9e, 0x93, 0x1c, 0x12, 0x10, 0x44, 0xba, 0x83, 0x9f, 0x81, 0x98, - 0x41, 0xd9, 0x11, 0x8b, 0x13, 0x01, 0x73, 0xc0, 0x11, 0x9d, 0x80, 0x90, 0x38, 0xe1, 0x20, 0x9b, - 0x22, 0x11, 0x61, 0xc2, 0x39, 0xcb, 0x80, 0x98, 0x29, 0xc5, 0x4a, 0xb8, 0x21, 0x21, 0x30, 0x97, - 0x3b, 0xe8, 0x88, 0x88, 0x88, 0x94, 0x2c, 0xc1, 0x20, 0x11, 0x02, 0x07, 0x0b, 0xd1, 0x09, 0x89, - 0xa0, 0x23, 0x0f, 0xa2, 0x29, 0x21, 0x83, 0x45, 0x8c, 0xb2, 0x8c, 0x98, 0xa1, 0x50, 0xab, 0x84, - 0x2a, 0x11, 0x05, 0x61, 0xb8, 0x92, 0x8e, 0x98, 0x80, 0x39, 0xc0, 0x12, 0x0c, 0x03, 0x24, 0x58, - 0xc1, 0x10, 0xad, 0xa0, 0x28, 0x2b, 0xe3, 0x28, 0x89, 0x13, 0x71, 0x18, 0xa4, 0x2a, 0xdb, 0x90, - 0x19, 0x9a, 0xa5, 0x39, 0xa8, 0x43, 0x68, 0x81, 0x94, 0x1a, 0xe9, 0x88, 0x0a, 0xa0, 0x83, 0x1c, - 0xb2, 0x62, 0x30, 0x93, 0x05, 0x8b, 0xf8, 0x19, 0x9a, 0xa1, 0x11, 0x0d, 0x82, 0x79, 0x01, 0x83, - 0x21, 0xac, 0xa0, 0x1d, 0xb8, 0x80, 0x2a, 0xab, 0x14, 0x7a, 0x85, 0x12, 0x18, 0xb9, 0xa0, 0x8e, - 0xb2, 0x09, 0x0a, 0xd9, 0x31, 0x29, 0x37, 0x31, 0x00, 0xe8, 0x09, 0xac, 0x83, 0x0b, 0x89, 0xda, - 0x38, 0x81, 0x67, 0x00, 0x81, 0xa8, 0x0a, 0xca, 0x21, 0xaa, 0xa0, 0xd9, 0x3a, 0x84, 0x65, 0x00, - 0x01, 0xa8, 0x8b, 0xd8, 0x38, 0xc8, 0x08, 0xa9, 0x0c, 0x04, 0x72, 0x83, 0x11, 0xa9, 0x9c, 0xa0, - 0x4b, 0xb1, 0x89, 0xca, 0x9b, 0x16, 0x61, 0x04, 0x28, 0xa8, 0xbb, 0x80, 0x1d, 0xa3, 0x8b, 0xa9, - 0xac, 0x63, 0x30, 0x27, 0x18, 0x98, 0xca, 0x08, 0xaa, 0x85, 0x0b, 0xa8, 0xbb, 0x70, 0x11, 0x27, - 0x08, 0x80, 0xba, 0x0a, 0xb9, 0x24, 0x9c, 0x98, 0xcb, 0x58, 0x02, 0x37, 0x08, 0x81, 0xca, 0x0a, - 0xb8, 0x41, 0xba, 0x90, 0xcb, 0x39, 0x06, 0x64, 0x00, 0x80, 0xb8, 0x8b, 0xb0, 0x59, 0xb8, 0x98, - 0xb9, 0x2b, 0x27, 0x71, 0x82, 0x81, 0xb8, 0x9c, 0x91, 0x2a, 0xb1, 0x9a, 0xd9, 0x0b, 0x26, 0x62, - 0x03, 0x00, 0xb8, 0xad, 0x00, 0x0b, 0x93, 0xac, 0xa8, 0x9c, 0x45, 0x31, 0x16, 0x08, 0x98, 0xcb, - 0x18, 0x9b, 0x83, 0xbb, 0x99, 0xbd, 0x73, 0x22, 0x17, 0x80, 0x88, 0xca, 0x19, 0xa9, 0x12, 0xba, - 0x8a, 0xdb, 0x70, 0x03, 0x25, 0x00, 0x09, 0xda, 0x1a, 0xb8, 0x11, 0xc8, 0x8a, 0xc8, 0x79, 0x02, - 0x43, 0x02, 0x0a, 0xd9, 0x0b, 0xb1, 0x19, 0xa0, 0x8e, 0xa0, 0x4a, 0x06, 0x42, 0x02, 0x89, 0xc0, - 0x8c, 0xa1, 0x1a, 0x80, 0xad, 0x81, 0x1c, 0x17, 0x30, 0x22, 0x99, 0x90, 0x9f, 0x91, 0x8a, 0x00, - 0xbb, 0x01, 0x8c, 0x37, 0x30, 0x43, 0xa8, 0x00, 0xbe, 0x00, 0x9b, 0x10, 0xdb, 0x28, 0xc9, 0x45, - 0x10, 0x33, 0xa1, 0x29, 0xfc, 0x18, 0xaa, 0x18, 0xc0, 0x29, 0xc0, 0x61, 0x11, 0x31, 0xa3, 0x19, - 0xf0, 0x1b, 0xb9, 0x09, 0xb1, 0x2c, 0xd3, 0x68, 0x82, 0x31, 0x84, 0x09, 0xd1, 0x0c, 0xb0, 0x8a, - 0x92, 0x1c, 0xa4, 0x4b, 0x05, 0x20, 0x14, 0x8a, 0xb3, 0x9f, 0x90, 0x8b, 0x02, 0x9b, 0x05, 0x1d, - 0x14, 0x18, 0x24, 0x99, 0x02, 0xaf, 0x80, 0xab, 0x22, 0xba, 0x34, 0x9d, 0x24, 0x08, 0x44, 0x98, - 0x11, 0xcd, 0x80, 0xaa, 0x30, 0xb8, 0x61, 0xba, 0x33, 0x80, 0x74, 0x91, 0x38, 0xfb, 0x08, 0xa9, - 0x28, 0xa1, 0x58, 0xb8, 0x30, 0x91, 0x72, 0x93, 0x39, 0xf9, 0x89, 0xb8, 0x28, 0xa2, 0x49, 0xd2, - 0x28, 0x81, 0x50, 0x04, 0x3a, 0xf1, 0x8a, 0xa8, 0x09, 0x03, 0x3b, 0xb5, 0x2a, 0x82, 0x58, 0x16, - 0x1a, 0xc2, 0x8c, 0xa8, 0x8a, 0x23, 0x0b, 0x97, 0x0a, 0x02, 0x28, 0x27, 0x89, 0x93, 0x9f, 0x88, - 0x9a, 0x22, 0x99, 0x05, 0x8b, 0x03, 0x18, 0x55, 0xa0, 0x03, 0xaf, 0x90, 0x8a, 0x30, 0xb0, 0x34, - 0x9c, 0x11, 0x18, 0x64, 0x90, 0x21, 0xbd, 0x89, 0xaa, 0x48, 0xa1, 0x52, 0xba, 0x22, 0x08, 0x72, - 0xa3, 0x30, 0xfb, 0x89, 0xaa, 0x28, 0xa3, 0x68, 0xb0, 0x20, 0x08, 0x52, 0x85, 0x29, 0xe8, 0x99, - 0xa9, 0x08, 0x83, 0x59, 0xb1, 0x28, 0x80, 0x52, 0x06, 0x29, 0xd0, 0x8b, 0xba, 0x88, 0x23, 0x4a, - 0xa4, 0x2a, 0x80, 0x51, 0x35, 0x09, 0xc2, 0x9e, 0xb9, 0x88, 0x22, 0x29, 0x95, 0x1a, 0x91, 0x31, - 0x37, 0x80, 0xa2, 0xaf, 0xb9, 0x0a, 0x30, 0x00, 0x06, 0x8a, 0x92, 0x48, 0x63, 0x81, 0x81, 0xbd, - 0xd9, 0x0a, 0x10, 0x01, 0x14, 0x9a, 0x92, 0x48, 0x43, 0x04, 0x11, 0xbe, 0xca, 0x8b, 0x10, 0x12, - 0x52, 0xa9, 0x81, 0x3a, 0x35, 0x25, 0x00, 0xfb, 0xb9, 0x8c, 0x00, 0x21, 0x41, 0xa0, 0x88, 0x1a, - 0x25, 0x34, 0x11, 0xf9, 0xab, 0x9d, 0x80, 0x31, 0x31, 0xa1, 0x09, 0x8b, 0x26, 0x63, 0x01, 0xc0, - 0xac, 0xac, 0x88, 0x41, 0x11, 0x83, 0x8a, 0xaa, 0x34, 0x73, 0x83, 0xa0, 0xae, 0xcb, 0x88, 0x30, - 0x04, 0x12, 0x9a, 0xa9, 0x32, 0x74, 0x03, 0x88, 0xbd, 0xdb, 0x09, 0x28, 0x14, 0x21, 0xa9, 0xa9, - 0x31, 0x73, 0x14, 0x08, 0xcc, 0xbb, 0x8a, 0x28, 0x16, 0x11, 0x98, 0xa9, 0x38, 0x53, 0x25, 0x80, - 0xea, 0xbb, 0x8b, 0x18, 0x44, 0x11, 0x90, 0xb9, 0x39, 0x53, 0x45, 0x08, 0xd9, 0xbb, 0x8c, 0x08, - 0x53, 0x01, 0x91, 0x99, 0x1a, 0x33, 0x56, 0x80, 0xb8, 0xbd, 0x8c, 0x08, 0x41, 0x12, 0x81, 0x9a, - 0x8a, 0x24, 0x54, 0x82, 0xa8, 0xbe, 0xac, 0x80, 0x41, 0x03, 0x01, 0xa9, 0x8a, 0x42, 0x72, 0x83, - 0x98, 0xdc, 0xab, 0x09, 0x30, 0x16, 0x10, 0xa8, 0x8a, 0x21, 0x52, 0x15, 0x89, 0xdb, 0xbc, 0x88, - 0x10, 0x25, 0x10, 0x90, 0x9b, 0x21, 0x42, 0x17, 0x88, 0xd9, 0xac, 0x89, 0x18, 0x34, 0x01, 0x91, - 0xba, 0x20, 0x32, 0x57, 0x90, 0xb9, 0xcd, 0x89, 0x08, 0x43, 0x02, 0x81, 0xba, 0x18, 0x22, 0x47, - 0x91, 0xa9, 0xbe, 0x9a, 0x08, 0x52, 0x12, 0x10, 0xaa, 0x1a, 0x12, 0x46, 0x02, 0xaa, 0xce, 0x9b, - 0x08, 0x32, 0x24, 0x10, 0xc8, 0x0a, 0x12, 0x63, 0x13, 0xaa, 0xdd, 0xab, 0x09, 0x41, 0x33, 0x01, - 0xc0, 0x9a, 0x21, 0x44, 0x24, 0xa9, 0xdc, 0xac, 0x89, 0x22, 0x53, 0x81, 0x90, 0xaa, 0x20, 0x34, - 0x72, 0xa0, 0xca, 0xbc, 0x8a, 0x31, 0x62, 0x82, 0x80, 0xaa, 0x19, 0x34, 0x61, 0xa2, 0xca, 0xad, - 0xaa, 0x22, 0x60, 0x83, 0x80, 0x9a, 0x8a, 0x44, 0x30, 0x84, 0xcb, 0xbc, 0xbb, 0x31, 0x51, 0x06, - 0x88, 0x98, 0x8a, 0x51, 0x20, 0x04, 0xba, 0xcc, 0xab, 0x38, 0x31, 0x27, 0x88, 0xa8, 0xa9, 0x50, - 0x02, 0x15, 0xb9, 0xcb, 0xbc, 0x39, 0x11, 0x27, 0x80, 0x98, 0xaa, 0x48, 0x03, 0x44, 0xa9, 0xcb, - 0xbc, 0x1a, 0x03, 0x55, 0x91, 0x88, 0xaa, 0x29, 0x05, 0x52, 0xa0, 0xbb, 0xcc, 0x89, 0x03, 0x73, - 0x81, 0x88, 0xa9, 0x1a, 0x14, 0x51, 0xa2, 0xbb, 0xbd, 0x8b, 0x22, 0x72, 0x03, 0x89, 0xb9, 0x8b, - 0x25, 0x41, 0x94, 0xab, 0xcc, 0x9b, 0x22, 0x51, 0x14, 0x89, 0xb9, 0x9a, 0x43, 0x41, 0x85, 0xaa, - 0xdb, 0xab, 0x21, 0x32, 0x27, 0x89, 0xb8, 0x9a, 0x31, 0x33, 0x27, 0xbb, 0xda, 0xac, 0x20, 0x21, - 0x26, 0x98, 0xa0, 0xab, 0x31, 0x33, 0x27, 0xc9, 0xb9, 0x9e, 0x08, 0x22, 0x63, 0x98, 0x90, 0xab, - 0x20, 0x32, 0x45, 0xb8, 0xba, 0xaf, 0x08, 0x21, 0x44, 0x90, 0x88, 0xac, 0x00, 0x32, 0x44, 0xc1, - 0x9a, 0xbd, 0x88, 0x22, 0x44, 0x92, 0x89, 0xbc, 0x18, 0x32, 0x44, 0xa2, 0x9c, 0xcd, 0x09, 0x20, - 0x43, 0x94, 0x09, 0xda, 0x08, 0x21, 0x33, 0x94, 0x9c, 0xdc, 0x09, 0x10, 0x33, 0x05, 0x0a, 0xda, - 0x09, 0x11, 0x43, 0x03, 0xac, 0xfa, 0x0a, 0x00, 0x33, 0x14, 0x8a, 0xd8, 0x0b, 0x11, 0x34, 0x13, - 0xcb, 0xea, 0x8c, 0x10, 0x32, 0x24, 0x99, 0xc8, 0x8c, 0x10, 0x43, 0x23, 0xc9, 0xda, 0x9c, 0x00, - 0x42, 0x33, 0xa8, 0xb8, 0x9f, 0x10, 0x32, 0x24, 0xb8, 0xbb, 0xbf, 0x00, 0x42, 0x42, 0x90, 0x99, - 0x9e, 0x00, 0x32, 0x33, 0xc1, 0xab, 0xbf, 0x00, 0x31, 0x34, 0x91, 0x9a, 0xae, 0x18, 0x41, 0x33, - 0xa1, 0xac, 0xbe, 0x08, 0x31, 0x34, 0x93, 0x9b, 0xec, 0x08, 0x31, 0x43, 0x92, 0xbb, 0xdd, 0x09, - 0x21, 0x33, 0x04, 0xaa, 0xeb, 0x09, 0x21, 0x34, 0x03, 0xac, 0xcc, 0x0b, 0x21, 0x34, 0x23, 0xca, - 0xca, 0x0c, 0x21, 0x34, 0x13, 0xda, 0xda, 0x8b, 0x21, 0x43, 0x23, 0xb9, 0xcb, 0x9d, 0x12, 0x34, - 0x23, 0xd9, 0xca, 0x9c, 0x11, 0x42, 0x23, 0xc0, 0xaa, 0xac, 0x21, 0x63, 0x22, 0xb8, 0xac, 0xad, - 0x10, 0x42, 0x33, 0xa0, 0xac, 0xdb, 0x20, 0x42, 0x23, 0xa1, 0xae, 0xda, 0x18, 0x32, 0x33, 0x91, - 0xad, 0xca, 0x29, 0x43, 0x33, 0x92, 0xaf, 0xc9, 0x19, 0x22, 0x43, 0x82, 0xbc, 0xc9, 0x1a, 0x43, - 0x43, 0x81, 0xdb, 0xc9, 0x0a, 0x32, 0x43, 0x02, 0xdb, 0xb9, 0x1c, 0x32, 0x34, 0x03, 0xfb, 0xa9, - 0x0c, 0x21, 0x33, 0x22, 0xea, 0xaa, 0x8b, 0x33, 0x35, 0x13, 0xea, 0xaa, 0x9c, 0x22, 0x43, 0x22, - 0xd9, 0xaa, 0x9c, 0x32, 0x53, 0x12, 0xc8, 0xab, 0xad, 0x31, 0x42, 0x22, 0xc0, 0x9c, 0xbb, 0x51, - 0x32, 0x23, 0xc0, 0x9d, 0xbb, 0x30, 0x43, 0x33, 0xc1, 0xad, 0xba, 0x30, 0x34, 0x34, 0xb1, 0xae, - 0xba, 0x28, 0x24, 0x33, 0xa2, 0xaf, 0xb9, 0x39, 0x24, 0x24, 0x81, 0xad, 0xba, 0x2b, 0x24, 0x24, - 0x82, 0xbd, 0xba, 0x2a, 0x34, 0x44, 0x01, 0xac, 0xbb, 0x0b, 0x34, 0x43, 0x02, 0xeb, 0xaa, 0x0b, - 0x43, 0x53, 0x02, 0xca, 0xba, 0x9b, 0x43, 0x43, 0x03, 0xea, 0xaa, 0x8b, 0x52, 0x32, 0x14, 0xba, - 0xac, 0xab, 0x41, 0x43, 0x13, 0xca, 0xac, 0x9b, 0x50, 0x33, 0x24, 0xc8, 0xbb, 0xba, 0x30, 0x26, - 0x23, 0xb9, 0xcd, 0x9a, 0x38, 0x25, 0x33, 0xa0, 0xbd, 0xaa, 0x2a, 0x26, 0x22, 0xb0, 0xcc, 0xaa, - 0x18, 0x35, 0x43, 0x90, 0xda, 0x9a, 0x0a, 0x34, 0x32, 0xa1, 0xdc, 0x9b, 0x1a, 0x44, 0x32, 0x82, - 0xda, 0xab, 0x9a, 0x44, 0x22, 0x92, 0xea, 0xab, 0x99, 0x44, 0x32, 0x03, 0xd9, 0x9c, 0x99, 0x41, - 0x22, 0x02, 0xda, 0x9d, 0x89, 0x41, 0x23, 0x13, 0xc8, 0x9d, 0x99, 0x48, 0x22, 0x12, 0xca, 0xad, - 0x99, 0x40, 0x24, 0x22, 0xb0, 0xad, 0xa9, 0x28, 0x15, 0x22, 0xc8, 0xbc, 0xaa, 0x48, 0x25, 0x32, - 0xa1, 0xbc, 0xaa, 0x1a, 0x26, 0x21, 0xa0, 0xbe, 0x9a, 0x19, 0x36, 0x31, 0x82, 0xbc, 0xaa, 0x8a, - 0x35, 0x21, 0xa2, 0xaf, 0xaa, 0x09, 0x35, 0x32, 0x04, 0xbb, 0xab, 0xab, 0x44, 0x12, 0x84, 0xae, - 0xaa, 0x89, 0x63, 0x22, 0x23, 0xbb, 0xbb, 0xbb, 0x71, 0x11, 0x22, 0xbd, 0xba, 0xab, 0x73, 0x22, - 0x43, 0xb8, 0xb9, 0xba, 0x49, 0x12, 0x52, 0xda, 0xa9, 0xbb, 0x60, 0x13, 0x53, 0x90, 0xa9, 0xbb, - 0x19, 0x13, 0x72, 0xc8, 0xa9, 0xbb, 0x38, 0x17, 0x42, 0x92, 0x99, 0xbb, 0x8a, 0x12, 0x70, 0xb1, - 0xaa, 0xcb, 0x2a, 0x34, 0x73, 0x02, 0x98, 0xba, 0x9b, 0x00, 0x50, 0xa3, 0x9b, 0xdc, 0x8a, 0x42, - 0x62, 0x13, 0x80, 0xca, 0x9b, 0x89, 0x30, 0x05, 0x8a, 0xfa, 0x8a, 0x20, 0x52, 0x24, 0x00, 0xc8, - 0x9b, 0x9a, 0x10, 0x15, 0x89, 0xe8, 0x8b, 0x08, 0x53, 0x25, 0x01, 0xa0, 0x9d, 0xa9, 0x09, 0x33, - 0x80, 0xc0, 0x8f, 0x89, 0x31, 0x45, 0x11, 0x91, 0x9d, 0xb9, 0x89, 0x32, 0x01, 0x91, 0xbf, 0x98, - 0x38, 0x46, 0x22, 0x81, 0xac, 0xc9, 0x8b, 0x31, 0x11, 0x01, 0xcd, 0xa8, 0x19, 0x46, 0x22, 0x12, - 0xcb, 0xba, 0x9d, 0x20, 0x21, 0x11, 0xda, 0x9a, 0x8b, 0x46, 0x32, 0x14, 0xb9, 0xbb, 0xae, 0x00, - 0x22, 0x11, 0xc8, 0x8b, 0xac, 0x44, 0x53, 0x12, 0xb1, 0x9c, 0xbd, 0x00, 0x20, 0x03, 0xa1, 0x8d, - 0xcb, 0x32, 0x54, 0x23, 0x91, 0xac, 0xcc, 0x09, 0x28, 0x14, 0x80, 0x9b, 0xdb, 0x20, 0x63, 0x24, - 0x00, 0xba, 0xcc, 0x8a, 0x10, 0x14, 0x01, 0xaa, 0xdb, 0x29, 0x53, 0x25, 0x11, 0xb9, 0xcc, 0x8b, - 0x08, 0x43, 0x01, 0xa8, 0xcb, 0x0b, 0x53, 0x36, 0x02, 0xa0, 0xbd, 0x9c, 0x08, 0x32, 0x12, 0x90, - 0xbd, 0x8b, 0x32, 0x57, 0x02, 0x80, 0xbc, 0xbb, 0x09, 0x42, 0x13, 0x00, 0xcc, 0xaa, 0x30, 0x65, - 0x12, 0x00, 0xda, 0xbb, 0x89, 0x31, 0x14, 0x01, 0xd9, 0xab, 0x28, 0x54, 0x24, 0x01, 0xca, 0xbc, - 0x9a, 0x30, 0x24, 0x01, 0xd0, 0xab, 0x19, 0x53, 0x26, 0x01, 0xb8, 0xae, 0x9a, 0x10, 0x33, 0x11, - 0xc1, 0xac, 0x99, 0x43, 0x45, 0x11, 0xb0, 0xad, 0xab, 0x19, 0x43, 0x12, 0x81, 0x9f, 0x99, 0x21, - 0x44, 0x03, 0x91, 0xbd, 0xcb, 0x09, 0x32, 0x04, 0x02, 0xad, 0xa9, 0x38, 0x54, 0x23, 0x00, 0xbd, - 0xcb, 0x0a, 0x31, 0x33, 0x11, 0xfb, 0xa9, 0x18, 0x63, 0x33, 0x01, 0xeb, 0xab, 0x9b, 0x21, 0x34, - 0x21, 0xd9, 0xaa, 0x1a, 0x53, 0x35, 0x02, 0xca, 0xbc, 0x9b, 0x28, 0x53, 0x12, 0xa8, 0xac, 0x8a, - 0x43, 0x45, 0x12, 0xa9, 0xbd, 0x9c, 0x08, 0x42, 0x12, 0x90, 0xca, 0x9a, 0x32, 0x55, 0x13, 0xa8, - 0xcc, 0xbb, 0x08, 0x41, 0x33, 0x90, 0xc9, 0x9c, 0x30, 0x63, 0x24, 0xa0, 0xca, 0xad, 0x09, 0x20, - 0x24, 0x91, 0x98, 0xad, 0x20, 0x42, 0x25, 0x91, 0xba, 0xbe, 0x89, 0x18, 0x44, 0x91, 0x80, 0xac, - 0x18, 0x22, 0x46, 0x91, 0x99, 0xbd, 0x8a, 0x08, 0x53, 0x82, 0x18, 0xdb, 0x19, 0x21, 0x54, 0x82, - 0x89, 0xec, 0x89, 0x88, 0x31, 0x04, 0x09, 0xc8, 0x0a, 0x21, 0x53, 0x05, 0x8a, 0xe9, 0x9a, 0x88, - 0x21, 0x24, 0x09, 0xb0, 0x0d, 0x01, 0x42, 0x25, 0x9a, 0xd0, 0x9c, 0x98, 0x10, 0x34, 0x88, 0x91, - 0x9d, 0x11, 0x21, 0x36, 0xa8, 0xb0, 0xbf, 0x88, 0x18, 0x52, 0x80, 0x00, 0xbb, 0x21, 0x21, 0x56, - 0x90, 0x89, 0xcd, 0x88, 0x88, 0x32, 0x93, 0x20, 0xea, 0x18, 0x11, 0x63, 0x92, 0x89, 0xfb, 0x8b, - 0x90, 0x31, 0x04, 0x18, 0xc1, 0x1b, 0x02, 0x72, 0x83, 0x99, 0xf8, 0x9b, 0x90, 0x20, 0x24, 0x08, - 0xa2, 0x8d, 0x02, 0x40, 0x15, 0x99, 0xa8, 0xbf, 0x80, 0x19, 0x33, 0x01, 0x11, 0xbc, 0x12, 0x48, - 0x35, 0xb1, 0x99, 0xef, 0x88, 0x08, 0x31, 0x01, 0x30, 0xda, 0x10, 0x00, 0x34, 0x92, 0x8b, 0xfb, - 0x8e, 0x88, 0x21, 0x13, 0x18, 0xd2, 0x19, 0x00, 0x41, 0x13, 0x9c, 0xf0, 0x8c, 0x88, 0x28, 0x33, - 0x18, 0x93, 0x8d, 0x01, 0x30, 0x25, 0xb9, 0xc0, 0xbf, 0x98, 0x00, 0x63, 0x00, 0x12, 0x9c, 0x00, - 0x10, 0x52, 0xb0, 0x08, 0xcf, 0x88, 0x88, 0x41, 0x02, 0x31, 0xca, 0x00, 0x08, 0x61, 0xa2, 0x09, - 0xfc, 0x89, 0x88, 0x30, 0x04, 0x30, 0xb0, 0x0a, 0x00, 0x58, 0x85, 0x0a, 0xf8, 0x9b, 0x88, 0x28, - 0x16, 0x20, 0x91, 0x8b, 0x00, 0x29, 0x17, 0x8a, 0xc0, 0xad, 0x09, 0x19, 0x35, 0x10, 0x83, 0xab, - 0x00, 0x0a, 0x36, 0x98, 0xb0, 0xdf, 0x89, 0x88, 0x53, 0x11, 0x12, 0xaa, 0x09, 0x99, 0x73, 0x91, - 0x88, 0xec, 0x8a, 0x88, 0x41, 0x13, 0x32, 0xc8, 0x0a, 0x98, 0x50, 0x83, 0x09, 0xec, 0x9c, 0x90, - 0x48, 0x14, 0x21, 0x90, 0x9b, 0xa1, 0x49, 0x14, 0x98, 0xd9, 0xae, 0x88, 0x29, 0x35, 0x21, 0x01, - 0xcb, 0x80, 0x1b, 0x25, 0x80, 0xb9, 0xcf, 0x09, 0x09, 0x34, 0x23, 0x02, 0xe8, 0x09, 0x8a, 0x33, - 0x02, 0xaa, 0xfd, 0x0b, 0x89, 0x43, 0x24, 0x11, 0xb8, 0x0b, 0xaa, 0x61, 0x12, 0xa9, 0xfa, 0x9c, - 0x88, 0x31, 0x35, 0x02, 0xa1, 0xab, 0xb9, 0x40, 0x24, 0x98, 0xea, 0xad, 0x89, 0x20, 0x36, 0x12, - 0x81, 0xac, 0xa8, 0x18, 0x43, 0x91, 0xc9, 0xbe, 0x9a, 0x38, 0x45, 0x23, 0x00, 0xba, 0xab, 0x1a, - 0x63, 0x82, 0xa9, 0xed, 0x9a, 0x18, 0x53, 0x33, 0x01, 0xb9, 0xbb, 0x8a, 0x42, 0x15, 0x98, 0xcd, - 0xbb, 0x09, 0x63, 0x34, 0x11, 0xa8, 0xcb, 0x99, 0x21, 0x24, 0x90, 0xcc, 0xbc, 0x0a, 0x42, 0x45, - 0x02, 0x88, 0xbb, 0x9a, 0x10, 0x53, 0x81, 0xda, 0xbc, 0x8b, 0x31, 0x46, 0x13, 0x80, 0xba, 0xac, - 0x00, 0x42, 0x03, 0xbb, 0xce, 0x9b, 0x30, 0x44, 0x15, 0x80, 0xb8, 0xab, 0x08, 0x41, 0x23, 0xca, - 0xeb, 0xab, 0x28, 0x44, 0x34, 0x81, 0xa9, 0xcb, 0x1a, 0x11, 0x34, 0xc8, 0xca, 0xad, 0x19, 0x43, - 0x44, 0x01, 0x98, 0xcb, 0x0a, 0x01, 0x43, 0xb1, 0xda, 0xcb, 0x0a, 0x43, 0x44, 0x12, 0x98, 0xcb, - 0x9a, 0x20, 0x41, 0x93, 0xbc, 0xcc, 0x8b, 0x52, 0x52, 0x22, 0x98, 0xc9, 0xaa, 0x10, 0x31, 0x13, - 0xeb, 0xcb, 0xab, 0x41, 0x44, 0x33, 0x90, 0xc9, 0xbb, 0x29, 0x22, 0x33, 0xf9, 0xcb, 0xab, 0x38, - 0x36, 0x34, 0x81, 0xaa, 0xbc, 0x0a, 0x23, 0x32, 0xd1, 0xbd, 0xbb, 0x29, 0x46, 0x42, 0x01, 0xa9, - 0xba, 0x9b, 0x32, 0x32, 0xa3, 0xcf, 0xbb, 0x0a, 0x45, 0x33, 0x14, 0xa9, 0xcb, 0xaa, 0x31, 0x12, - 0x13, 0xce, 0xbb, 0x9a, 0x73, 0x23, 0x24, 0xa8, 0xba, 0xbb, 0x49, 0x13, 0x31, 0xfb, 0xac, 0x99, - 0x40, 0x25, 0x32, 0xa0, 0xba, 0xcb, 0x19, 0x14, 0x21, 0xf0, 0xba, 0x9a, 0x38, 0x37, 0x31, 0x92, - 0xab, 0xcb, 0x8a, 0x24, 0x20, 0xc2, 0xae, 0x9a, 0x19, 0x36, 0x32, 0x84, 0xab, 0xb9, 0x9c, 0x33, - 0x01, 0x93, 0xcf, 0xa9, 0x09, 0x54, 0x12, 0x13, 0xba, 0xb9, 0xac, 0x41, 0x01, 0x02, 0xdd, 0xa9, - 0x89, 0x63, 0x22, 0x33, 0xc9, 0xa9, 0xcb, 0x30, 0x02, 0x21, 0xfb, 0x9b, 0x9b, 0x62, 0x24, 0x22, - 0xc1, 0x8a, 0xcb, 0x18, 0x13, 0x20, 0xf9, 0x8b, 0xba, 0x51, 0x34, 0x31, 0xa2, 0x9c, 0xca, 0x19, - 0x12, 0x01, 0xd1, 0x8e, 0xb9, 0x30, 0x44, 0x22, 0x84, 0xab, 0xc9, 0x0a, 0x11, 0x02, 0xa2, 0xbf, - 0xb8, 0x3a, 0x45, 0x23, 0x23, 0xbc, 0xb8, 0x8d, 0x11, 0x11, 0x80, 0xce, 0x90, 0x0b, 0x25, 0x33, - 0x33, 0xd9, 0x89, 0x9d, 0x00, 0x11, 0x18, 0xfb, 0x09, 0x9b, 0x34, 0x43, 0x23, 0xc1, 0x8a, 0xcc, - 0x10, 0x28, 0x00, 0xe9, 0x0a, 0xca, 0x52, 0x32, 0x22, 0xa2, 0x0c, 0xfa, 0x18, 0x08, 0x81, 0xa8, - 0x0d, 0xc8, 0x40, 0x22, 0x14, 0x82, 0x8b, 0xe8, 0x1a, 0x88, 0x01, 0x98, 0x9e, 0xa0, 0x5a, 0x23, - 0x24, 0x12, 0xba, 0xd0, 0x8c, 0x81, 0x18, 0x08, 0xcd, 0x80, 0x1b, 0x26, 0x23, 0x23, 0xb9, 0xa9, - 0xaf, 0x81, 0x08, 0x00, 0xeb, 0x08, 0x8b, 0x45, 0x22, 0x32, 0xb1, 0x8b, 0xcd, 0x18, 0x99, 0x01, - 0xe8, 0x0a, 0xb8, 0x72, 0x13, 0x33, 0x91, 0x8b, 0xfb, 0x1a, 0x98, 0x18, 0xa0, 0x8e, 0xa0, 0x58, - 0x24, 0x32, 0x83, 0xab, 0xf8, 0x8b, 0x91, 0x19, 0x91, 0xac, 0x90, 0x4b, 0x27, 0x41, 0x12, 0xb8, - 0xa8, 0x9f, 0x80, 0x1a, 0x01, 0xba, 0x08, 0x8b, 0x47, 0x31, 0x15, 0x98, 0x99, 0xcc, 0x19, 0x8a, - 0x12, 0xb8, 0x1a, 0xca, 0x72, 0x32, 0x25, 0x91, 0x99, 0xfb, 0x0a, 0x98, 0x11, 0x80, 0x8a, 0xc8, - 0x68, 0x12, 0x35, 0x01, 0xa9, 0xe9, 0x8c, 0x98, 0x11, 0x01, 0xa8, 0xa8, 0x3c, 0x24, 0x46, 0x11, - 0x98, 0xba, 0x9f, 0x98, 0x20, 0x10, 0xa0, 0x99, 0x0c, 0x15, 0x63, 0x12, 0x91, 0xbb, 0xae, 0x99, - 0x20, 0x01, 0x93, 0x9b, 0xac, 0x14, 0x74, 0x12, 0x82, 0xba, 0xcc, 0xa9, 0x18, 0x12, 0x03, 0x9c, - 0xb9, 0x20, 0x74, 0x24, 0x12, 0xbb, 0xeb, 0xaa, 0x29, 0x02, 0x32, 0xca, 0xa8, 0x09, 0x72, 0x16, - 0x22, 0xb9, 0xca, 0xbb, 0x1a, 0x03, 0x61, 0xc0, 0x88, 0x89, 0x40, 0x26, 0x31, 0xc0, 0xaa, 0xbc, - 0x0a, 0x22, 0x48, 0xc3, 0x8a, 0xa8, 0x38, 0x57, 0x20, 0xb3, 0x9c, 0xc9, 0x8b, 0x22, 0x29, 0x85, - 0x8c, 0x90, 0x19, 0x36, 0x11, 0x85, 0xbb, 0xb9, 0x9d, 0x30, 0x88, 0x16, 0x9b, 0x91, 0x8a, 0x64, - 0x01, 0x23, 0xcb, 0xa9, 0xad, 0x28, 0x91, 0x34, 0xc9, 0x00, 0x8b, 0x73, 0x82, 0x52, 0xb9, 0x99, - 0xbc, 0x18, 0x92, 0x70, 0xb0, 0x18, 0x99, 0x50, 0x03, 0x60, 0xc1, 0x89, 0xba, 0x0a, 0x82, 0x58, - 0xb3, 0x2a, 0xc8, 0x30, 0x16, 0x48, 0xa3, 0x0d, 0xca, 0x0a, 0x10, 0x29, 0x86, 0x0a, 0xb1, 0x29, - 0x34, 0x20, 0x07, 0x8c, 0xb8, 0x8c, 0x00, 0x08, 0x15, 0x9a, 0x92, 0x1a, 0x52, 0x01, 0x25, 0xbb, - 0xb0, 0xaf, 0x18, 0x90, 0x53, 0x99, 0x82, 0x9a, 0x41, 0x03, 0x73, 0xb8, 0x98, 0xbd, 0x09, 0x91, - 0x70, 0xa1, 0x01, 0x99, 0x28, 0x14, 0x60, 0xa1, 0x89, 0xdc, 0x89, 0x00, 0x49, 0x93, 0x10, 0xb8, - 0x88, 0x44, 0x38, 0x87, 0x0a, 0xda, 0x9a, 0x29, 0x19, 0x07, 0x08, 0x90, 0x89, 0x40, 0x10, 0x06, - 0x89, 0xc9, 0xbb, 0x2a, 0x80, 0x27, 0x08, 0xa1, 0x9a, 0x38, 0x84, 0x36, 0x98, 0xc9, 0xbc, 0x0b, - 0x81, 0x54, 0x01, 0x90, 0xaa, 0x19, 0x14, 0x73, 0x91, 0xa8, 0xbd, 0x9b, 0x01, 0x62, 0x02, 0x80, - 0xaa, 0x8b, 0x24, 0x73, 0x82, 0x99, 0xdc, 0xaa, 0x01, 0x31, 0x24, 0x00, 0xca, 0x9a, 0x31, 0x63, - 0x04, 0x98, 0xfb, 0xaa, 0x18, 0x20, 0x25, 0x00, 0xb9, 0x9b, 0x28, 0x44, 0x34, 0x88, 0xdc, 0xbb, - 0x09, 0x21, 0x35, 0x02, 0xc8, 0xab, 0x19, 0x53, 0x34, 0x81, 0xea, 0xac, 0x8a, 0x21, 0x43, 0x13, - 0xb8, 0xad, 0x0a, 0x52, 0x33, 0x03, 0xe9, 0xad, 0x9a, 0x20, 0x42, 0x23, 0xa0, 0xad, 0x99, 0x31, - 0x35, 0x23, 0xb9, 0xcf, 0x9a, 0x18, 0x32, 0x24, 0x91, 0xcb, 0xaa, 0x30, 0x35, 0x34, 0xa8, 0xbe, - 0xbb, 0x19, 0x43, 0x53, 0x81, 0xca, 0xa9, 0x29, 0x34, 0x34, 0x80, 0xcd, 0xba, 0x8a, 0x42, 0x43, - 0x02, 0xca, 0xaa, 0x89, 0x44, 0x43, 0x01, 0xeb, 0xba, 0x9a, 0x41, 0x42, 0x12, 0xb9, 0xbb, 0xaa, - 0x73, 0x43, 0x11, 0xd9, 0xab, 0xbb, 0x30, 0x35, 0x23, 0xc0, 0xab, 0xbb, 0x60, 0x24, 0x13, 0xc0, - 0xbc, 0xcb, 0x28, 0x33, 0x34, 0xa1, 0xbc, 0xba, 0x49, 0x35, 0x33, 0xa0, 0xbe, 0xac, 0x1a, 0x42, - 0x33, 0x82, 0xdb, 0xba, 0x2a, 0x45, 0x23, 0x81, 0xdc, 0xba, 0x8a, 0x42, 0x43, 0x02, 0xca, 0xba, - 0x0b, 0x54, 0x23, 0x02, 0xea, 0xbb, 0x9b, 0x32, 0x26, 0x12, 0xb9, 0xac, 0x9b, 0x62, 0x33, 0x13, - 0xd9, 0xbc, 0xab, 0x30, 0x35, 0x13, 0xb0, 0xbd, 0xaa, 0x40, 0x35, 0x13, 0xb8, 0xcd, 0xab, 0x10, - 0x34, 0x14, 0x90, 0xbc, 0xaa, 0x28, 0x46, 0x12, 0x90, 0xcc, 0xba, 0x08, 0x34, 0x14, 0x81, 0xdb, - 0xaa, 0x18, 0x63, 0x23, 0x90, 0xeb, 0xaa, 0x89, 0x43, 0x33, 0x81, 0xea, 0xab, 0x19, 0x62, 0x33, - 0x81, 0xea, 0xbb, 0x89, 0x41, 0x34, 0x01, 0xd9, 0xab, 0x89, 0x52, 0x34, 0x81, 0xd8, 0xbb, 0x9a, - 0x31, 0x36, 0x01, 0xb8, 0xae, 0x89, 0x31, 0x45, 0x81, 0xa8, 0xcc, 0x99, 0x20, 0x53, 0x02, 0x98, - 0xbd, 0x89, 0x20, 0x45, 0x82, 0x90, 0xbd, 0x9a, 0x18, 0x44, 0x12, 0x90, 0xcc, 0x8a, 0x18, 0x54, - 0x02, 0x80, 0xcc, 0x9a, 0x08, 0x43, 0x04, 0x80, 0xda, 0x9a, 0x00, 0x62, 0x13, 0x88, 0xda, 0x9b, - 0x09, 0x51, 0x14, 0x80, 0xc9, 0xab, 0x08, 0x62, 0x14, 0x80, 0xc9, 0xab, 0x89, 0x41, 0x25, 0x80, - 0xc8, 0xbb, 0x08, 0x51, 0x34, 0x00, 0xc9, 0xbc, 0x88, 0x20, 0x36, 0x80, 0xa8, 0xad, 0x09, 0x20, - 0x36, 0x01, 0xa9, 0xbd, 0x89, 0x18, 0x45, 0x01, 0xa8, 0xdb, 0x89, 0x11, 0x54, 0x01, 0x98, 0xdb, - 0x8a, 0x00, 0x63, 0x01, 0x88, 0xcb, 0x8a, 0x10, 0x73, 0x02, 0x88, 0xda, 0x8b, 0x08, 0x62, 0x02, - 0x88, 0xd9, 0x9a, 0x10, 0x52, 0x13, 0x90, 0xda, 0x9c, 0x08, 0x41, 0x14, 0x88, 0xb9, 0x9d, 0x18, - 0x41, 0x15, 0x90, 0xb8, 0xad, 0x08, 0x30, 0x25, 0x80, 0xb9, 0xad, 0x19, 0x41, 0x25, 0x80, 0xb8, - 0xbd, 0x09, 0x30, 0x35, 0x81, 0xa9, 0xcd, 0x09, 0x21, 0x35, 0x82, 0xa9, 0xbd, 0x8a, 0x20, 0x45, - 0x01, 0x99, 0xcc, 0x89, 0x11, 0x54, 0x01, 0x98, 0xcb, 0x9b, 0x10, 0x44, 0x03, 0x99, 0xea, 0x9a, - 0x20, 0x63, 0x12, 0x98, 0xcb, 0x9c, 0x00, 0x52, 0x13, 0x89, 0xda, 0xab, 0x20, 0x62, 0x23, 0x98, - 0xd9, 0xbb, 0x08, 0x52, 0x24, 0x98, 0xb9, 0xad, 0x18, 0x41, 0x25, 0x80, 0xb9, 0xbd, 0x08, 0x31, - 0x35, 0x88, 0xa9, 0xae, 0x09, 0x22, 0x36, 0x80, 0xb8, 0xcc, 0x89, 0x21, 0x44, 0x80, 0x98, 0xbd, - 0x89, 0x22, 0x45, 0x01, 0x99, 0xbc, 0x8b, 0x20, 0x54, 0x82, 0x98, 0xbc, 0x9b, 0x31, 0x45, 0x03, - 0x98, 0xcc, 0x9b, 0x10, 0x63, 0x03, 0x98, 0xdb, 0x9b, 0x20, 0x63, 0x13, 0x90, 0xdb, 0xab, 0x18, - 0x52, 0x14, 0x88, 0xca, 0xbb, 0x28, 0x63, 0x14, 0x80, 0xba, 0xad, 0x19, 0x31, 0x35, 0x80, 0xda, - 0xab, 0x09, 0x43, 0x35, 0x00, 0xc9, 0xbc, 0x89, 0x32, 0x44, 0x81, 0xb9, 0xbd, 0x89, 0x42, 0x44, - 0x81, 0xb8, 0xbc, 0x9a, 0x32, 0x54, 0x01, 0xb8, 0xcc, 0x99, 0x31, 0x54, 0x01, 0xa0, 0xbc, 0xaa, - 0x30, 0x44, 0x03, 0xa8, 0xbd, 0x9b, 0x30, 0x45, 0x13, 0x98, 0xdc, 0x9a, 0x28, 0x43, 0x13, 0x98, - 0xdc, 0xaa, 0x20, 0x53, 0x23, 0x90, 0xcc, 0xab, 0x29, 0x53, 0x23, 0x80, 0xdc, 0xaa, 0x29, 0x53, - 0x33, 0x80, 0xeb, 0xab, 0x09, 0x43, 0x24, 0x81, 0xdb, 0xab, 0x1a, 0x53, 0x24, 0x01, 0xca, 0xac, - 0x0a, 0x32, 0x25, 0x82, 0xca, 0xbc, 0x89, 0x52, 0x43, 0x01, 0xb9, 0xbd, 0x8a, 0x32, 0x35, 0x01, - 0xc8, 0xad, 0x8a, 0x41, 0x43, 0x02, 0xa9, 0xbd, 0x9a, 0x31, 0x44, 0x02, 0xa8, 0xae, 0x8b, 0x21, - 0x35, 0x12, 0xa8, 0xbd, 0xab, 0x30, 0x45, 0x12, 0x99, 0xcc, 0x9b, 0x30, 0x44, 0x22, 0x98, 0xcc, - 0x9b, 0x28, 0x34, 0x14, 0x98, 0xeb, 0xaa, 0x10, 0x53, 0x23, 0x90, 0xdb, 0xbb, 0x18, 0x63, 0x23, - 0x98, 0xcb, 0xad, 0x18, 0x43, 0x24, 0x80, 0xbb, 0xbd, 0x18, 0x42, 0x33, 0x91, 0xeb, 0xcb, 0x08, - 0x33, 0x35, 0x81, 0xca, 0xbc, 0x09, 0x42, 0x24, 0x81, 0xca, 0xcb, 0x0a, 0x33, 0x45, 0x01, 0xaa, - 0xcc, 0x89, 0x22, 0x34, 0x02, 0xcb, 0xdb, 0x8a, 0x32, 0x44, 0x83, 0xa9, 0xcc, 0x9a, 0x22, 0x44, - 0x02, 0xb9, 0xcc, 0x8b, 0x31, 0x44, 0x13, 0xa9, 0xcc, 0x9b, 0x31, 0x53, 0x13, 0xb9, 0xcc, 0xab, - 0x31, 0x44, 0x14, 0xa8, 0xbb, 0xad, 0x21, 0x42, 0x14, 0xb0, 0xcb, 0xac, 0x20, 0x43, 0x15, 0x90, - 0xab, 0xad, 0x28, 0x42, 0x33, 0xa8, 0xbc, 0xbd, 0x28, 0x43, 0x34, 0x90, 0xca, 0xbc, 0x18, 0x33, - 0x35, 0x91, 0xbc, 0xad, 0x19, 0x33, 0x35, 0x81, 0xcb, 0xcb, 0x1a, 0x33, 0x35, 0x92, 0xdb, 0xcb, - 0x1a, 0x32, 0x35, 0x02, 0xca, 0xcb, 0x8a, 0x33, 0x44, 0x02, 0xcb, 0xac, 0x8b, 0x33, 0x54, 0x02, - 0xa9, 0xbc, 0x9b, 0x43, 0x43, 0x03, 0xca, 0xbc, 0xab, 0x52, 0x42, 0x13, 0xb8, 0xad, 0x9b, 0x31, - 0x34, 0x15, 0xb9, 0xbc, 0xbb, 0x51, 0x42, 0x13, 0x98, 0xcc, 0xaa, 0x30, 0x43, 0x24, 0xa9, 0xbd, - 0xaa, 0x49, 0x33, 0x25, 0x90, 0xdb, 0xaa, 0x39, 0x24, 0x24, 0xa0, 0xcc, 0xab, 0x29, 0x34, 0x34, - 0x91, 0xdb, 0xab, 0x19, 0x25, 0x33, 0xa1, 0xfb, 0xab, 0x09, 0x34, 0x43, 0x81, 0xd9, 0xab, 0x89, - 0x34, 0x43, 0x91, 0xda, 0xac, 0x89, 0x43, 0x33, 0x83, 0xc9, 0xad, 0x8a, 0x42, 0x33, 0x83, 0xcb, - 0xaf, 0x89, 0x31, 0x43, 0x03, 0xa9, 0xbd, 0x8a, 0x41, 0x43, 0x02, 0xaa, 0xbf, 0x89, 0x30, 0x34, - 0x13, 0x99, 0xcd, 0x8a, 0x20, 0x34, 0x13, 0xaa, 0xce, 0x9a, 0x20, 0x34, 0x33, 0x99, 0xfb, 0x9a, - 0x10, 0x43, 0x23, 0xa9, 0xec, 0x9a, 0x00, 0x43, 0x24, 0x98, 0xc9, 0x8c, 0x08, 0x33, 0x34, 0xa9, - 0xea, 0x9c, 0x00, 0x32, 0x34, 0x80, 0xc9, 0x9d, 0x08, 0x41, 0x23, 0xa1, 0xda, 0xad, 0x08, 0x41, - 0x33, 0x92, 0xa9, 0xaf, 0x08, 0x30, 0x34, 0x91, 0xba, 0xbf, 0x08, 0x30, 0x44, 0x82, 0x99, 0xcc, - 0x09, 0x21, 0x34, 0x81, 0xaa, 0xce, 0x09, 0x10, 0x44, 0x01, 0x98, 0xda, 0x0a, 0x10, 0x34, 0x83, - 0xaa, 0xec, 0x8a, 0x10, 0x34, 0x13, 0x98, 0xfa, 0x8a, 0x10, 0x52, 0x02, 0x99, 0xdb, 0x8c, 0x10, - 0x42, 0x23, 0x98, 0xd9, 0x8c, 0x00, 0x42, 0x13, 0xb8, 0xda, 0x9d, 0x00, 0x42, 0x23, 0x90, 0xb9, - 0x9f, 0x00, 0x31, 0x24, 0xa8, 0xba, 0xaf, 0x00, 0x30, 0x26, 0x80, 0x99, 0xbc, 0x00, 0x21, 0x26, - 0x90, 0xaa, 0xcd, 0x18, 0x20, 0x34, 0x01, 0x9a, 0xcc, 0x19, 0x20, 0x35, 0x80, 0xab, 0xec, 0x19, - 0x10, 0x53, 0x01, 0x89, 0xda, 0x09, 0x00, 0x34, 0x82, 0xaa, 0xfb, 0x0b, 0x10, 0x63, 0x02, 0x98, - 0xc8, 0x0c, 0x00, 0x42, 0x12, 0xaa, 0xea, 0x8c, 0x01, 0x51, 0x22, 0x98, 0xb9, 0x9c, 0x01, 0x51, - 0x13, 0xb8, 0xda, 0x9d, 0x00, 0x41, 0x14, 0x91, 0x99, 0x9d, 0x00, 0x30, 0x24, 0xb0, 0xba, 0xbf, - 0x00, 0x40, 0x24, 0x92, 0x98, 0xbd, 0x18, 0x38, 0x25, 0xa1, 0xaa, 0xdd, 0x08, 0x20, 0x34, 0x83, - 0x99, 0xeb, 0x09, 0x18, 0x25, 0x92, 0x9a, 0xdc, 0x0a, 0x10, 0x44, 0x12, 0x89, 0xd9, 0x0b, 0x00, - 0x43, 0x03, 0xaa, 0xfb, 0x8c, 0x10, 0x42, 0x23, 0x98, 0xc8, 0x9d, 0x81, 0x32, 0x14, 0xa9, 0xd9, - 0x9d, 0x00, 0x42, 0x33, 0x88, 0xb8, 0xaf, 0x00, 0x21, 0x24, 0xa8, 0xb9, 0xaf, 0x18, 0x30, 0x35, - 0x80, 0x98, 0xbd, 0x08, 0x11, 0x44, 0x90, 0xa9, 0xcd, 0x19, 0x20, 0x44, 0x82, 0x88, 0xcc, 0x09, - 0x10, 0x43, 0x92, 0x9a, 0xcd, 0x0a, 0x20, 0x44, 0x83, 0x80, 0xdb, 0x0b, 0x00, 0x62, 0x82, 0x8a, - 0xea, 0x8b, 0x11, 0x53, 0x13, 0x88, 0xd9, 0x9b, 0x10, 0x41, 0x04, 0x99, 0xe9, 0xab, 0x11, 0x42, - 0x25, 0x88, 0xa8, 0xad, 0x00, 0x20, 0x15, 0x98, 0xb9, 0xae, 0x28, 0x21, 0x26, 0x00, 0x98, 0xbd, - 0x18, 0x10, 0x34, 0x98, 0xa9, 0xbf, 0x29, 0x11, 0x45, 0x81, 0x88, 0xdb, 0x09, 0x00, 0x43, 0x81, - 0x9a, 0xcd, 0x0a, 0x12, 0x54, 0x82, 0x88, 0xda, 0x8a, 0x01, 0x42, 0x02, 0x9a, 0xdc, 0x0b, 0x21, - 0x62, 0x13, 0x89, 0xd9, 0x9b, 0x01, 0x42, 0x03, 0x9a, 0xeb, 0x9c, 0x21, 0x42, 0x24, 0x98, 0xc8, - 0xac, 0x01, 0x21, 0x15, 0x99, 0xc9, 0x9d, 0x10, 0x32, 0x35, 0x90, 0xa9, 0xae, 0x18, 0x20, 0x43, - 0xa8, 0xb9, 0xbe, 0x28, 0x32, 0x36, 0x91, 0xa8, 0xbd, 0x19, 0x11, 0x63, 0xa0, 0x99, 0xcc, 0x19, - 0x32, 0x63, 0x82, 0x99, 0xdb, 0x0a, 0x11, 0x52, 0xa2, 0x9a, 0xeb, 0x0a, 0x23, 0x53, 0x03, 0xa9, - 0xea, 0x8b, 0x12, 0x41, 0x84, 0xaa, 0xda, 0x8b, 0x33, 0x43, 0x15, 0x99, 0xba, 0x9d, 0x30, 0x11, - 0x06, 0x9a, 0xba, 0xac, 0x42, 0x23, 0x35, 0xa9, 0xc9, 0xac, 0x30, 0x11, 0x34, 0xc9, 0xaa, 0xad, - 0x48, 0x13, 0x44, 0xa0, 0xa9, 0xbc, 0x28, 0x12, 0x63, 0xb0, 0xaa, 0xdb, 0x29, 0x15, 0x52, 0x91, - 0x9a, 0xca, 0x1a, 0x03, 0x61, 0x91, 0x9b, 0xcb, 0x1a, 0x25, 0x42, 0x93, 0xaa, 0xdb, 0x8b, 0x14, - 0x30, 0x85, 0xab, 0xba, 0x8c, 0x34, 0x42, 0x05, 0x9a, 0xba, 0x9c, 0x31, 0x21, 0x16, 0xab, 0xc9, - 0xaa, 0x52, 0x22, 0x25, 0xaa, 0xb9, 0xad, 0x30, 0x21, 0x34, 0xca, 0xa9, 0xad, 0x40, 0x23, 0x34, - 0xb9, 0xb9, 0xbe, 0x38, 0x12, 0x44, 0xb8, 0xa9, 0xad, 0x38, 0x24, 0x53, 0xa0, 0xaa, 0xcc, 0x29, - 0x22, 0x52, 0xb1, 0xaa, 0xcc, 0x28, 0x33, 0x44, 0xa2, 0xab, 0xcc, 0x0a, 0x33, 0x42, 0x93, 0x9d, - 0xda, 0x19, 0x42, 0x32, 0x83, 0x9d, 0xda, 0x0a, 0x31, 0x23, 0x84, 0xbb, 0xeb, 0x0a, 0x43, 0x33, - 0x13, 0xad, 0xdb, 0x8a, 0x31, 0x24, 0x22, 0xcb, 0xda, 0x0b, 0x42, 0x33, 0x23, 0xeb, 0xc9, 0x8b, - 0x21, 0x25, 0x21, 0xca, 0xc9, 0x8b, 0x32, 0x26, 0x21, 0xc9, 0xba, 0x9d, 0x21, 0x24, 0x12, 0xc8, - 0xba, 0x9d, 0x22, 0x34, 0x22, 0xc8, 0xbc, 0x9c, 0x11, 0x44, 0x11, 0xb0, 0xbb, 0xad, 0x31, 0x54, - 0x11, 0xa8, 0xac, 0xcb, 0x21, 0x52, 0x12, 0xa0, 0xac, 0xbb, 0x40, 0x63, 0x02, 0x90, 0xbc, 0xcb, - 0x20, 0x52, 0x13, 0x90, 0xcb, 0xcb, 0x38, 0x43, 0x14, 0x90, 0xbc, 0xbc, 0x28, 0x43, 0x15, 0x80, - 0xca, 0xba, 0x29, 0x53, 0x14, 0x80, 0xdb, 0xba, 0x1a, 0x34, 0x34, 0x80, 0xd9, 0xba, 0x1a, 0x43, - 0x25, 0x90, 0xc9, 0xac, 0x8a, 0x24, 0x34, 0x00, 0xb9, 0xbc, 0x8b, 0x34, 0x44, 0x80, 0xb9, 0xbd, - 0x8b, 0x43, 0x53, 0x82, 0xa0, 0xad, 0x9a, 0x32, 0x34, 0x82, 0xb9, 0xaf, 0xab, 0x32, 0x44, 0x03, - 0x90, 0xbc, 0xbb, 0x50, 0x42, 0x02, 0x99, 0xbe, 0xb9, 0x40, 0x33, 0x24, 0x88, 0xdb, 0xba, 0x38, - 0x24, 0x14, 0x89, 0xcd, 0xaa, 0x38, 0x24, 0x24, 0x00, 0xda, 0xaa, 0x2a, 0x33, 0x24, 0x98, 0xfb, - 0xab, 0x09, 0x35, 0x33, 0x01, 0xd9, 0xbb, 0x8a, 0x34, 0x33, 0x91, 0xfb, 0x9d, 0x89, 0x52, 0x32, - 0x01, 0xb8, 0xad, 0x8a, 0x41, 0x22, 0x82, 0xe9, 0xac, 0x99, 0x42, 0x24, 0x03, 0xa0, 0xad, 0xaa, - 0x40, 0x22, 0x83, 0xc8, 0xae, 0x9a, 0x40, 0x34, 0x22, 0x88, 0xad, 0xab, 0x39, 0x15, 0x12, 0xa8, - 0xbe, 0xaa, 0x38, 0x27, 0x13, 0x81, 0xdb, 0x9a, 0x0a, 0x34, 0x21, 0x98, 0xcd, 0x9b, 0x29, 0x45, - 0x22, 0x82, 0xda, 0xaa, 0x8a, 0x34, 0x12, 0x80, 0xec, 0x9a, 0x09, 0x63, 0x13, 0x02, 0xc9, 0xab, - 0xaa, 0x52, 0x12, 0x01, 0xeb, 0xab, 0x99, 0x73, 0x14, 0x11, 0xb8, 0xac, 0x99, 0x30, 0x14, 0x01, - 0xda, 0xac, 0x89, 0x61, 0x23, 0x22, 0xb8, 0xbd, 0x99, 0x28, 0x25, 0x00, 0xc8, 0xad, 0x89, 0x40, - 0x35, 0x11, 0xa0, 0xbc, 0x9a, 0x19, 0x35, 0x00, 0xb0, 0xaf, 0x89, 0x28, 0x36, 0x12, 0x91, 0xdb, - 0x9a, 0x09, 0x52, 0x81, 0x90, 0xcc, 0x8a, 0x10, 0x74, 0x11, 0x00, 0xba, 0xab, 0x98, 0x61, 0x82, - 0x80, 0xdb, 0x8b, 0x00, 0x72, 0x14, 0x00, 0xa9, 0xac, 0x88, 0x38, 0x04, 0x80, 0xd9, 0x9c, 0x00, - 0x51, 0x15, 0x00, 0xa0, 0xbc, 0x88, 0x29, 0x15, 0x88, 0xb8, 0xbd, 0x10, 0x40, 0x27, 0x00, 0x90, - 0xbc, 0x98, 0x08, 0x24, 0x88, 0x90, 0xbe, 0x18, 0x10, 0x37, 0x01, 0x00, 0xcc, 0x89, 0x89, 0x42, - 0x80, 0x80, 0xdc, 0x09, 0x01, 0x64, 0x01, 0x00, 0xd9, 0x8a, 0x98, 0x31, 0x82, 0x19, 0xfa, 0x8a, - 0x02, 0x62, 0x13, 0x18, 0xd8, 0x9c, 0x90, 0x38, 0x83, 0x19, 0xf0, 0x8b, 0x01, 0x51, 0x15, 0x08, - 0xb1, 0x9d, 0x98, 0x18, 0x23, 0x8a, 0xc2, 0x9f, 0x01, 0x21, 0x26, 0x80, 0x80, 0xae, 0x90, 0x08, - 0x32, 0xa9, 0x82, 0xaf, 0x10, 0x11, 0x45, 0x80, 0x00, 0xcc, 0x88, 0x89, 0x32, 0xa0, 0x20, 0xce, - 0x28, 0x10, 0x73, 0x92, 0x10, 0xdb, 0x89, 0x98, 0x30, 0xb3, 0x28, 0xfa, 0x2a, 0x10, 0x73, 0x02, - 0x19, 0xe8, 0x8a, 0x98, 0x20, 0x93, 0x1a, 0xf1, 0x1a, 0x11, 0x41, 0x15, 0x09, 0xd1, 0x8b, 0xa8, - 0x18, 0x13, 0x0c, 0xb3, 0x8e, 0x12, 0x30, 0x27, 0x88, 0xa1, 0xad, 0x98, 0x89, 0x33, 0x9a, 0x83, - 0x9f, 0x21, 0x20, 0x46, 0x88, 0x81, 0xbc, 0x99, 0x9a, 0x42, 0xb8, 0x32, 0xcc, 0x21, 0x01, 0x56, - 0x91, 0x10, 0xdb, 0x89, 0xaa, 0x30, 0xb1, 0x40, 0xd0, 0x28, 0x01, 0x72, 0x83, 0x28, 0xd9, 0x9b, - 0xb9, 0x19, 0x82, 0x49, 0xb3, 0x2c, 0x84, 0x61, 0x04, 0x08, 0xb1, 0x9e, 0xb8, 0x8a, 0x02, 0x08, - 0x05, 0x8a, 0x14, 0x28, 0x26, 0x80, 0x82, 0xaf, 0xa9, 0x9b, 0x11, 0x80, 0x25, 0x99, 0x13, 0x29, - 0x46, 0x81, 0x20, 0xec, 0x99, 0xab, 0x18, 0x01, 0x62, 0xa0, 0x21, 0x08, 0x42, 0x04, 0x38, 0xf8, - 0x9b, 0xbc, 0x08, 0x01, 0x50, 0x83, 0x29, 0x91, 0x30, 0x17, 0x00, 0xc2, 0xad, 0xca, 0x8a, 0x21, - 0x20, 0x07, 0x09, 0x81, 0x00, 0x43, 0x00, 0x83, 0xcf, 0xb9, 0xaa, 0x20, 0x12, 0x27, 0x88, 0x00, - 0x89, 0x42, 0x82, 0x23, 0xce, 0xba, 0x9d, 0x18, 0x02, 0x44, 0x91, 0x00, 0x99, 0x30, 0x15, 0x40, - 0xe9, 0xaa, 0xbc, 0x19, 0x22, 0x72, 0x92, 0x18, 0xa9, 0x28, 0x14, 0x21, 0xe2, 0xac, 0xda, 0x89, - 0x21, 0x42, 0x04, 0x09, 0x98, 0x1a, 0x32, 0x42, 0xa3, 0xcf, 0xba, 0x8c, 0x30, 0x42, 0x24, 0x98, - 0xa0, 0x8b, 0x42, 0x23, 0x13, 0xcf, 0xba, 0x9d, 0x10, 0x33, 0x44, 0x90, 0x89, 0x9b, 0x21, 0x34, - 0x32, 0xfb, 0xac, 0xac, 0x18, 0x33, 0x44, 0x81, 0x89, 0xbb, 0x20, 0x53, 0x32, 0xd8, 0xad, 0xbc, - 0x19, 0x42, 0x43, 0x02, 0x99, 0xca, 0x19, 0x43, 0x32, 0xb1, 0xbf, 0xbc, 0x8a, 0x52, 0x33, 0x13, - 0xa9, 0xd9, 0x0a, 0x42, 0x23, 0x82, 0xbf, 0xcb, 0x8b, 0x31, 0x26, 0x22, 0xa0, 0xaa, 0x8c, 0x31, - 0x34, 0x02, 0xfb, 0xac, 0x9b, 0x20, 0x35, 0x33, 0xa0, 0xaa, 0xad, 0x21, 0x34, 0x22, 0xfa, 0xbb, - 0xac, 0x10, 0x44, 0x23, 0x91, 0xaa, 0xbb, 0x28, 0x36, 0x22, 0xc8, 0xbe, 0xbb, 0x29, 0x63, 0x33, - 0x82, 0xaa, 0xcb, 0x19, 0x53, 0x23, 0xa0, 0xbf, 0xcb, 0x09, 0x42, 0x34, 0x02, 0xb9, 0xba, 0x0b, - 0x53, 0x24, 0x91, 0xdc, 0xcb, 0x89, 0x31, 0x35, 0x13, 0xa9, 0xca, 0x9a, 0x32, 0x35, 0x81, 0xeb, - 0xac, 0x9b, 0x31, 0x45, 0x22, 0x98, 0xba, 0xab, 0x31, 0x35, 0x12, 0xe9, 0xad, 0x9b, 0x20, 0x63, - 0x23, 0x80, 0xba, 0xbb, 0x28, 0x54, 0x12, 0xb9, 0xbe, 0xac, 0x10, 0x53, 0x33, 0x01, 0xbb, 0xcb, - 0x19, 0x53, 0x13, 0x98, 0xce, 0xbb, 0x29, 0x52, 0x34, 0x01, 0xa9, 0xcb, 0x09, 0x32, 0x24, 0x80, - 0xdd, 0xbb, 0x1a, 0x42, 0x44, 0x12, 0xa8, 0xcb, 0x0a, 0x21, 0x34, 0x91, 0xeb, 0xbc, 0x8a, 0x32, - 0x45, 0x22, 0x98, 0xbb, 0x8c, 0x20, 0x43, 0x02, 0xda, 0xbd, 0x9b, 0x31, 0x45, 0x22, 0x91, 0xbb, - 0x9c, 0x10, 0x52, 0x12, 0xc9, 0xcc, 0x9b, 0x38, 0x63, 0x23, 0x81, 0xba, 0xcb, 0x18, 0x32, 0x25, - 0xb8, 0xbe, 0xcb, 0x18, 0x34, 0x34, 0x82, 0xb9, 0xbc, 0x09, 0x42, 0x23, 0xa1, 0xce, 0xcb, 0x19, - 0x42, 0x34, 0x02, 0xa9, 0xcb, 0x8a, 0x22, 0x24, 0x93, 0xcd, 0xac, 0x8a, 0x42, 0x34, 0x23, 0xa8, - 0xbc, 0x9b, 0x30, 0x34, 0x03, 0xdc, 0xbc, 0x9b, 0x42, 0x44, 0x13, 0x90, 0xbb, 0xac, 0x20, 0x33, - 0x33, 0xfb, 0xbc, 0xab, 0x40, 0x44, 0x32, 0x90, 0xb9, 0xad, 0x18, 0x23, 0x32, 0xd8, 0xad, 0x9c, - 0x18, 0x34, 0x34, 0x92, 0xaa, 0xbc, 0x09, 0x42, 0x22, 0xb1, 0xaf, 0xac, 0x08, 0x53, 0x33, 0x03, - 0xaa, 0xcc, 0x8a, 0x32, 0x32, 0x92, 0xbf, 0xcb, 0x89, 0x53, 0x43, 0x12, 0x99, 0xcb, 0x9a, 0x31, - 0x22, 0x03, 0xed, 0xba, 0x8a, 0x51, 0x24, 0x14, 0x98, 0xaa, 0xbb, 0x20, 0x14, 0x13, 0xfa, 0xbb, - 0xaa, 0x41, 0x35, 0x43, 0xa0, 0xaa, 0xbb, 0x29, 0x33, 0x33, 0xf9, 0xad, 0xab, 0x30, 0x45, 0x42, - 0x91, 0x9a, 0xca, 0x09, 0x22, 0x21, 0xc1, 0xbd, 0xbb, 0x28, 0x45, 0x24, 0x03, 0x9b, 0xcb, 0x8b, - 0x22, 0x22, 0xa3, 0xcf, 0xb9, 0x1a, 0x63, 0x33, 0x23, 0xba, 0xda, 0x9b, 0x20, 0x23, 0x11, 0xce, - 0xba, 0x8b, 0x44, 0x34, 0x33, 0xb8, 0xca, 0xac, 0x00, 0x22, 0x21, 0xfa, 0x9b, 0x9c, 0x22, 0x45, - 0x32, 0xa1, 0xaa, 0xbc, 0x09, 0x31, 0x12, 0xe0, 0x9c, 0xcb, 0x21, 0x54, 0x22, 0x93, 0x9a, 0xcc, - 0x09, 0x20, 0x01, 0xa1, 0xae, 0xc9, 0x28, 0x53, 0x24, 0x12, 0xaa, 0xe9, 0x0a, 0x18, 0x01, 0x01, - 0xad, 0xc9, 0x1a, 0x53, 0x24, 0x23, 0xa9, 0xd9, 0x9b, 0x08, 0x11, 0x21, 0xfb, 0xa9, 0x0c, 0x42, - 0x43, 0x33, 0xb1, 0xba, 0x9f, 0x88, 0x10, 0x20, 0xd8, 0x8a, 0x9c, 0x32, 0x44, 0x43, 0x92, 0xaa, - 0xcc, 0x88, 0x08, 0x21, 0xb1, 0x9d, 0xca, 0x30, 0x44, 0x34, 0x83, 0xaa, 0xeb, 0x8a, 0x08, 0x11, - 0x82, 0x9e, 0xc8, 0x29, 0x43, 0x34, 0x14, 0xa9, 0xd9, 0x9b, 0x88, 0x11, 0x22, 0xbc, 0xb9, 0x0c, - 0x34, 0x55, 0x23, 0xa8, 0xb9, 0xae, 0x98, 0x10, 0x22, 0xc8, 0x99, 0xbb, 0x43, 0x55, 0x33, 0x91, - 0xaa, 0xce, 0x98, 0x00, 0x12, 0xa2, 0x8b, 0xbc, 0x30, 0x64, 0x24, 0x82, 0x99, 0xdc, 0x8a, 0x08, - 0x12, 0x02, 0xab, 0xe9, 0x29, 0x51, 0x34, 0x13, 0xaa, 0xfa, 0x9b, 0x88, 0x22, 0x22, 0xaa, 0xd9, - 0x0b, 0x42, 0x36, 0x33, 0xb8, 0xda, 0x9e, 0x88, 0x11, 0x21, 0xa0, 0xa9, 0x8d, 0x11, 0x36, 0x43, - 0x90, 0xba, 0xae, 0x8a, 0x11, 0x32, 0xa2, 0xaa, 0x9e, 0x00, 0x64, 0x22, 0x93, 0xaa, 0xbe, 0xa9, - 0x20, 0x31, 0x84, 0x9a, 0xcb, 0x88, 0x64, 0x23, 0x13, 0xbb, 0xdc, 0x9b, 0x18, 0x22, 0x14, 0xaa, - 0xc9, 0x8a, 0x72, 0x33, 0x14, 0xa9, 0xdb, 0xbb, 0x19, 0x13, 0x53, 0xb8, 0xa9, 0xab, 0x71, 0x24, - 0x43, 0xb8, 0xba, 0xbd, 0x0a, 0x13, 0x52, 0xb1, 0x99, 0xbb, 0x58, 0x26, 0x41, 0xa1, 0xaa, 0xcc, - 0x8a, 0x12, 0x40, 0x93, 0x8b, 0xbb, 0x3a, 0x47, 0x41, 0x92, 0xaa, 0xeb, 0x9a, 0x11, 0x30, 0x85, - 0x8a, 0xa9, 0x0b, 0x45, 0x22, 0x05, 0xaa, 0xca, 0xac, 0x20, 0x10, 0x15, 0x99, 0xa8, 0x8c, 0x53, - 0x12, 0x25, 0xba, 0xb9, 0xae, 0x18, 0x01, 0x43, 0xa8, 0x98, 0x9c, 0x51, 0x22, 0x63, 0xb8, 0x99, - 0xbd, 0x19, 0x01, 0x61, 0x90, 0x09, 0xba, 0x40, 0x23, 0x73, 0xa1, 0x9a, 0xcc, 0x89, 0x11, 0x40, - 0xa3, 0x1a, 0xca, 0x29, 0x25, 0x51, 0x93, 0x8c, 0xda, 0x8a, 0x00, 0x30, 0x05, 0x8a, 0xb0, 0x0a, - 0x34, 0x42, 0x05, 0x9b, 0xe9, 0x9b, 0x00, 0x01, 0x25, 0x8a, 0xa1, 0x8c, 0x32, 0x14, 0x35, 0xba, - 0xd8, 0xac, 0x88, 0x01, 0x34, 0xa0, 0x91, 0x9d, 0x21, 0x24, 0x62, 0xa0, 0xa9, 0xae, 0x89, 0x01, - 0x51, 0x91, 0x00, 0xbb, 0x10, 0x34, 0x72, 0xa2, 0x99, 0xdc, 0x99, 0x10, 0x30, 0x84, 0x00, 0xba, - 0x89, 0x63, 0x31, 0x86, 0x89, 0xeb, 0x9a, 0x18, 0x10, 0x06, 0x00, 0xa9, 0x8a, 0x40, 0x22, 0x16, - 0x89, 0xda, 0xab, 0x1a, 0x01, 0x26, 0x00, 0xa8, 0x9b, 0x28, 0x15, 0x26, 0x88, 0xc9, 0xbc, 0x8a, - 0x02, 0x44, 0x01, 0xa0, 0xbb, 0x19, 0x34, 0x45, 0x81, 0xb9, 0xbf, 0x99, 0x01, 0x52, 0x02, 0x80, - 0xac, 0x89, 0x32, 0x44, 0x03, 0xa9, 0xbf, 0xab, 0x10, 0x42, 0x14, 0x00, 0xcb, 0x8a, 0x30, 0x63, - 0x23, 0xa8, 0xec, 0x9b, 0x19, 0x31, 0x34, 0x81, 0xd9, 0xaa, 0x28, 0x34, 0x25, 0x90, 0xfa, 0xaa, - 0x0a, 0x22, 0x43, 0x02, 0xc9, 0xab, 0x19, 0x63, 0x33, 0x82, 0xfb, 0xbb, 0x8a, 0x21, 0x44, 0x12, - 0xb8, 0xac, 0x0a, 0x42, 0x34, 0x13, 0xe9, 0xbc, 0x9a, 0x20, 0x43, 0x33, 0xa8, 0xbd, 0x99, 0x40, - 0x25, 0x13, 0xb8, 0xaf, 0x9b, 0x18, 0x33, 0x34, 0x91, 0xad, 0xaa, 0x20, 0x26, 0x23, 0xa0, 0xcd, - 0xab, 0x1a, 0x33, 0x35, 0x01, 0xbc, 0xaa, 0x19, 0x36, 0x33, 0x81, 0xce, 0xaa, 0x8a, 0x32, 0x34, - 0x13, 0xdb, 0xaa, 0x8a, 0x54, 0x32, 0x02, 0xeb, 0xab, 0xab, 0x41, 0x43, 0x22, 0xc9, 0xaa, 0x9b, - 0x62, 0x33, 0x13, 0xe9, 0xbb, 0xac, 0x20, 0x34, 0x23, 0xb0, 0xbc, 0xbb, 0x60, 0x24, 0x23, 0xb8, - 0xbe, 0xca, 0x18, 0x33, 0x24, 0x91, 0xbc, 0xba, 0x49, 0x44, 0x23, 0xa1, 0xad, 0xac, 0x8b, 0x73, - 0x02, 0x01, 0x07, 0x7d, 0x0b, 0x02, 0x70, 0x02, 0x42, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x7f, 0x77, 0x92, 0x98, 0xb9, 0xce, 0x19, 0x62, 0x24, 0x81, 0xea, 0xac, 0x19, 0x24, 0x12, - 0xa9, 0xb8, 0xad, 0x9c, 0x20, 0x75, 0x23, 0x81, 0xeb, 0xaa, 0x18, 0x35, 0x01, 0x88, 0xc8, 0xbb, - 0x9b, 0x10, 0x74, 0x24, 0x80, 0xcd, 0x9a, 0x21, 0x12, 0x91, 0x98, 0xda, 0xbc, 0x09, 0x32, 0x57, - 0x23, 0xa1, 0xcc, 0x99, 0x31, 0x24, 0x88, 0x90, 0xcb, 0xbc, 0x19, 0x11, 0x55, 0x22, 0xc8, 0xbd, - 0x19, 0x42, 0x01, 0x89, 0xa9, 0xcc, 0x9a, 0x08, 0x52, 0x36, 0x23, 0xb8, 0x9f, 0x19, 0x22, 0x02, - 0x90, 0x98, 0xcc, 0xaa, 0x10, 0x21, 0x44, 0x14, 0xea, 0xab, 0x28, 0x24, 0x80, 0x98, 0xaa, 0xbd, - 0x99, 0x08, 0x64, 0x34, 0x02, 0xd9, 0x9a, 0x28, 0x24, 0x11, 0x80, 0xca, 0xbc, 0x8b, 0x80, 0x31, - 0x37, 0x82, 0xdc, 0x8a, 0x21, 0x04, 0x88, 0xa8, 0xa9, 0xbd, 0x89, 0x18, 0x55, 0x34, 0x81, 0xda, - 0x8a, 0x42, 0x02, 0x02, 0x98, 0xcb, 0xbc, 0x99, 0x18, 0x21, 0x36, 0x82, 0xbe, 0x19, 0x42, 0x81, - 0x80, 0xbb, 0xcb, 0x9d, 0xa9, 0x30, 0x47, 0x13, 0x80, 0xcb, 0x09, 0x44, 0x01, 0x11, 0x99, 0xdb, - 0x9b, 0x9a, 0x08, 0x40, 0x16, 0xa8, 0xab, 0x21, 0x35, 0x90, 0xa8, 0xac, 0xca, 0xad, 0x99, 0x51, - 0x54, 0x02, 0x98, 0xba, 0x38, 0x35, 0x01, 0x81, 0x9a, 0xfa, 0x9a, 0x9a, 0x81, 0x50, 0x03, 0xa8, - 0xab, 0x43, 0x26, 0xb8, 0xcb, 0x19, 0xd8, 0xbc, 0x0a, 0x35, 0x53, 0x01, 0xa0, 0x9b, 0x40, 0x44, - 0x00, 0x88, 0x88, 0xbd, 0xcb, 0x1b, 0x02, 0x43, 0x00, 0xc1, 0x0b, 0x45, 0x82, 0xaa, 0xaa, 0x80, - 0xed, 0xbb, 0x39, 0x26, 0x23, 0x82, 0xc8, 0x0a, 0x42, 0x13, 0x10, 0x00, 0xc0, 0xbf, 0xbb, 0x18, - 0x22, 0x24, 0x10, 0xc9, 0x19, 0x36, 0xc8, 0x9a, 0x08, 0xb0, 0xcf, 0x9a, 0x41, 0x33, 0x24, 0x00, - 0xca, 0x09, 0x32, 0x12, 0x32, 0x21, 0xf8, 0xaf, 0x9b, 0x11, 0x22, 0x02, 0x81, 0xbc, 0x28, 0x16, - 0xa9, 0x89, 0x08, 0xf8, 0xbe, 0x1a, 0x53, 0x22, 0x22, 0xa0, 0x9d, 0x18, 0x21, 0x31, 0x23, 0x02, - 0xee, 0xba, 0x0b, 0x32, 0x13, 0x11, 0xd0, 0x9c, 0x31, 0x02, 0x09, 0x98, 0x81, 0xff, 0xad, 0x28, - 0x33, 0x22, 0x24, 0xb9, 0x9c, 0x20, 0x22, 0x32, 0x22, 0x91, 0xff, 0x9b, 0x18, 0x12, 0x12, 0x02, - 0xda, 0x0a, 0x31, 0x90, 0x00, 0x98, 0xe1, 0xef, 0x8a, 0x31, 0x13, 0x22, 0x13, 0xdb, 0x09, 0x20, - 0x21, 0x43, 0x12, 0xd8, 0xbf, 0x0b, 0x21, 0x22, 0x20, 0x91, 0xdc, 0x19, 0x21, 0x80, 0x09, 0x08, - 0xf9, 0xcf, 0x19, 0x32, 0x12, 0x32, 0x93, 0xad, 0x09, 0x32, 0x03, 0x21, 0x00, 0xf0, 0xcf, 0x09, - 0x22, 0x01, 0x10, 0xa1, 0xac, 0x28, 0x14, 0x88, 0xb9, 0x28, 0xfb, 0xbf, 0x38, 0x14, 0x01, 0x22, - 0xa0, 0xab, 0x38, 0x15, 0x00, 0x81, 0x68, 0xf0, 0xac, 0x18, 0x22, 0x02, 0x00, 0xb9, 0x9b, 0x72, - 0x91, 0x89, 0x99, 0x20, 0xdf, 0x9b, 0x51, 0x12, 0x00, 0x22, 0xb9, 0x89, 0x42, 0x81, 0x08, 0x18, - 0x37, 0xec, 0x9b, 0x28, 0x23, 0x00, 0x81, 0xbb, 0x1a, 0x16, 0xa9, 0x99, 0x2a, 0x96, 0xcf, 0x89, - 0x42, 0x02, 0x00, 0x03, 0x99, 0x08, 0x03, 0xaa, 0x88, 0x70, 0x07, 0xbc, 0x9b, 0x41, 0x12, 0x00, - 0x81, 0xab, 0x19, 0x92, 0xae, 0x08, 0x60, 0xd0, 0xac, 0x1a, 0x35, 0x81, 0x20, 0x81, 0x08, 0x00, - 0xa9, 0xbb, 0x38, 0x77, 0xa3, 0xbd, 0x0b, 0x33, 0x02, 0x11, 0xb1, 0x9b, 0x09, 0xc9, 0x8c, 0x10, - 0x53, 0xfc, 0xba, 0x48, 0x24, 0x80, 0x21, 0x90, 0x10, 0xa9, 0xaa, 0x0c, 0x72, 0x26, 0xb8, 0xbd, - 0x19, 0x23, 0x02, 0x20, 0xb9, 0x9b, 0x99, 0xcc, 0x38, 0x11, 0x86, 0xbe, 0xaa, 0x61, 0x22, 0x01, - 0x01, 0x80, 0x00, 0xda, 0xbb, 0x48, 0x54, 0x04, 0xda, 0xac, 0x21, 0x22, 0x82, 0x80, 0xaa, 0x99, - 0x99, 0xab, 0x34, 0x50, 0xe1, 0xbd, 0x89, 0x34, 0x22, 0x11, 0x00, 0x89, 0xa0, 0xad, 0xaa, 0x63, - 0x45, 0x82, 0xdd, 0x8a, 0x32, 0x22, 0x80, 0x99, 0xbb, 0x89, 0x99, 0x2a, 0x15, 0x31, 0xfa, 0xad, - 0x09, 0x34, 0x22, 0x01, 0x81, 0x8a, 0xb8, 0xbd, 0x0a, 0x46, 0x35, 0xb0, 0xaf, 0x1a, 0x23, 0x22, - 0x88, 0xba, 0x8d, 0x91, 0x9a, 0x21, 0x31, 0x03, 0xcf, 0xaa, 0x39, 0x25, 0x22, 0x81, 0x91, 0x1a, - 0xe8, 0xac, 0x28, 0x55, 0x23, 0xf9, 0xab, 0x20, 0x13, 0x22, 0x98, 0xcc, 0x18, 0xa8, 0x00, 0x18, - 0x22, 0x82, 0xcf, 0xa9, 0x31, 0x12, 0x25, 0x08, 0xa8, 0x10, 0xcc, 0xac, 0x40, 0x46, 0x03, 0xbd, - 0x9b, 0x31, 0x32, 0x23, 0xea, 0xaa, 0x81, 0x89, 0x81, 0x08, 0x30, 0x85, 0xbb, 0xac, 0x40, 0x31, - 0x06, 0x08, 0x90, 0x80, 0xeb, 0x9c, 0x51, 0x44, 0x92, 0xbd, 0x8a, 0x32, 0x32, 0x83, 0xcd, 0x89, - 0x80, 0x28, 0xa8, 0x8a, 0x72, 0x83, 0xab, 0xbb, 0x21, 0x71, 0x02, 0x08, 0x08, 0xa2, 0xce, 0x8b, - 0x63, 0x35, 0xb0, 0xbc, 0x0a, 0x32, 0x43, 0xb2, 0xae, 0x08, 0x80, 0x81, 0xaa, 0x19, 0x56, 0x81, - 0x9a, 0xab, 0x18, 0x52, 0x91, 0x18, 0x20, 0xb0, 0xdf, 0x09, 0x62, 0x14, 0xb8, 0xab, 0x08, 0x23, - 0x25, 0xe8, 0x8a, 0x00, 0x00, 0xa8, 0xab, 0x50, 0x26, 0xa0, 0xa9, 0xab, 0x11, 0x53, 0x88, 0x10, - 0x02, 0xfb, 0xbb, 0x28, 0x57, 0x02, 0xba, 0xaa, 0x18, 0x34, 0x03, 0xbd, 0x09, 0x00, 0x80, 0xcb, - 0x8c, 0x73, 0x14, 0xa8, 0xca, 0x89, 0x21, 0x12, 0x08, 0x22, 0xb8, 0xce, 0x9b, 0x52, 0x35, 0x81, - 0xca, 0xab, 0x30, 0x34, 0xa1, 0xac, 0x10, 0x90, 0xb9, 0xbd, 0x39, 0x57, 0x03, 0xba, 0xbc, 0x19, - 0x33, 0x12, 0x19, 0x83, 0xcd, 0xac, 0x18, 0x44, 0x32, 0x92, 0xbd, 0x9b, 0x50, 0x33, 0xa8, 0x8b, - 0x02, 0xcb, 0xbc, 0x9a, 0x72, 0x44, 0x92, 0xbc, 0xab, 0x20, 0x34, 0x01, 0x20, 0xd1, 0xbc, 0x8a, - 0x30, 0x35, 0x33, 0xc1, 0xbd, 0x9a, 0x63, 0x02, 0x99, 0x10, 0xb8, 0xac, 0x9a, 0x09, 0x65, 0x33, - 0xb8, 0xae, 0x9b, 0x41, 0x23, 0x00, 0x02, 0xfb, 0xaa, 0x18, 0x31, 0x43, 0x23, 0xd9, 0xac, 0x0b, - 0x45, 0x00, 0x88, 0x00, 0xca, 0xab, 0x98, 0x30, 0x47, 0x12, 0xd9, 0xab, 0x8b, 0x63, 0x12, 0x00, - 0x91, 0xbd, 0x8a, 0x00, 0x31, 0x34, 0x13, 0xda, 0xbc, 0x2a, 0x26, 0x00, 0x00, 0x91, 0xbd, 0x9a, - 0x89, 0x72, 0x23, 0x01, 0xcc, 0xbb, 0x0a, 0x27, 0x11, 0x10, 0xc9, 0xab, 0x08, 0x00, 0x42, 0x23, - 0x83, 0xcc, 0xad, 0x38, 0x25, 0x00, 0x00, 0xc8, 0xac, 0x89, 0x18, 0x46, 0x01, 0x90, 0xad, 0xbb, - 0x40, 0x25, 0x01, 0x90, 0xda, 0x8a, 0x08, 0x10, 0x43, 0x11, 0x91, 0xeb, 0x9c, 0x40, 0x23, 0x11, - 0x80, 0xdc, 0x9a, 0x98, 0x30, 0x27, 0x10, 0xb8, 0xbc, 0x9c, 0x61, 0x13, 0x00, 0x98, 0xad, 0x08, - 0x98, 0x10, 0x32, 0x42, 0x93, 0xdd, 0x9a, 0x51, 0x23, 0x00, 0xb8, 0xad, 0x89, 0x98, 0x61, 0x03, - 0x80, 0xc9, 0xac, 0x8a, 0x55, 0x12, 0x88, 0xc9, 0x9a, 0x81, 0x98, 0x30, 0x33, 0x34, 0xc2, 0xbe, - 0x9a, 0x54, 0x03, 0x80, 0xda, 0x99, 0x88, 0x88, 0x53, 0x02, 0x88, 0xdb, 0xab, 0x38, 0x57, 0x00, - 0x98, 0xbb, 0x08, 0x81, 0x9b, 0x31, 0x53, 0x15, 0xb9, 0xbc, 0x19, 0x47, 0x00, 0xa0, 0x9b, 0x88, - 0xa8, 0x09, 0x25, 0x02, 0xc9, 0xac, 0x89, 0x51, 0x26, 0x88, 0xa8, 0xaa, 0x10, 0xe9, 0x0a, 0x21, - 0x44, 0x03, 0xba, 0xac, 0x2a, 0x47, 0x80, 0x98, 0x89, 0x99, 0xb9, 0x29, 0x33, 0x80, 0xb8, 0x9b, - 0xa1, 0x7a, 0x37, 0x8a, 0xa0, 0x99, 0x11, 0xdd, 0xab, 0x41, 0x45, 0x01, 0xa9, 0xaa, 0x39, 0x17, - 0x00, 0xa8, 0x99, 0x08, 0xca, 0x0a, 0x80, 0x38, 0x84, 0x38, 0xa5, 0x2c, 0x94, 0x40, 0xc9, 0x09, - 0x80, 0xcf, 0x9a, 0x62, 0x33, 0x91, 0x9a, 0xca, 0x59, 0x03, 0x12, 0xa9, 0x8a, 0xa1, 0xbf, 0x89, - 0x88, 0x62, 0x82, 0x32, 0xfa, 0x1a, 0x10, 0x13, 0x9a, 0x10, 0xe8, 0xbe, 0x19, 0x53, 0x23, 0x80, - 0x81, 0xdd, 0x20, 0x01, 0x02, 0x9a, 0x11, 0xe8, 0x9c, 0x89, 0x00, 0x34, 0x32, 0x93, 0xdf, 0x08, - 0x22, 0x92, 0x09, 0x90, 0xdc, 0xac, 0x21, 0x44, 0x03, 0x10, 0xd8, 0x9d, 0x21, 0x21, 0x80, 0x08, - 0xa1, 0xdc, 0x9b, 0x88, 0x32, 0x37, 0x12, 0xe8, 0xac, 0x20, 0x32, 0x98, 0x10, 0xa8, 0xce, 0x8a, - 0x21, 0x44, 0x12, 0x82, 0xdc, 0x8a, 0x21, 0x23, 0x88, 0x10, 0xc9, 0xbd, 0x9a, 0x10, 0x54, 0x34, - 0x90, 0xdc, 0x8b, 0x41, 0x03, 0x89, 0x91, 0xda, 0xab, 0x08, 0x63, 0x32, 0x14, 0xb8, 0xbe, 0x09, - 0x43, 0x02, 0x00, 0x90, 0xeb, 0xab, 0x8a, 0x42, 0x45, 0x03, 0xba, 0xdc, 0x1a, 0x33, 0x02, 0x08, - 0xa8, 0xbd, 0x9b, 0x28, 0x44, 0x44, 0x02, 0xcb, 0xcb, 0x18, 0x24, 0x02, 0x00, 0xc8, 0xac, 0x9b, - 0x09, 0x54, 0x25, 0x90, 0xba, 0xbc, 0x49, 0x24, 0x80, 0x88, 0xba, 0xaa, 0x99, 0x31, 0x46, 0x25, - 0xa0, 0xcb, 0x9c, 0x30, 0x34, 0x01, 0xa0, 0xbc, 0xac, 0x99, 0x31, 0x47, 0x03, 0xb9, 0xdb, 0x9b, - 0x52, 0x03, 0x80, 0xa8, 0xab, 0x9a, 0x88, 0x51, 0x64, 0x13, 0xb8, 0xcc, 0x9a, 0x51, 0x22, 0x01, - 0xc9, 0xba, 0x9a, 0x88, 0x52, 0x36, 0x82, 0xcb, 0xbb, 0x1b, 0x45, 0x01, 0x98, 0xaa, 0x89, 0x98, - 0x88, 0x42, 0x47, 0x02, 0xba, 0xcc, 0x09, 0x34, 0x13, 0xa0, 0xbc, 0xab, 0x89, 0x18, 0x74, 0x24, - 0xa0, 0xbb, 0xbc, 0x28, 0x26, 0x81, 0x9a, 0x9a, 0x08, 0x98, 0x89, 0x73, 0x36, 0x90, 0xba, 0xad, - 0x28, 0x35, 0x01, 0xa9, 0xac, 0x9a, 0x08, 0x20, 0x55, 0x23, 0xc9, 0xcb, 0x9a, 0x40, 0x15, 0x98, - 0x8a, 0x89, 0x80, 0x99, 0x18, 0x65, 0x33, 0xb8, 0xcc, 0x9b, 0x61, 0x23, 0x90, 0xca, 0xaa, 0x09, - 0x00, 0x41, 0x44, 0x02, 0xdb, 0xba, 0x8a, 0x73, 0x82, 0x99, 0x99, 0x08, 0x88, 0x88, 0x58, 0x45, - 0x03, 0xca, 0xdb, 0x1a, 0x63, 0x02, 0xa8, 0xba, 0x9a, 0x00, 0x10, 0x53, 0x43, 0xa2, 0xbd, 0xbb, - 0x2a, 0x36, 0x91, 0x99, 0x9a, 0x08, 0x90, 0x89, 0x55, 0x54, 0x92, 0xcb, 0xac, 0x39, 0x26, 0x81, - 0xa9, 0xab, 0x88, 0x00, 0x21, 0x43, 0x44, 0xb8, 0xbc, 0xcb, 0x38, 0x15, 0x90, 0x99, 0x89, 0x00, - 0xa8, 0x30, 0x46, 0x36, 0xa0, 0xbd, 0x9c, 0x51, 0x23, 0x98, 0xba, 0x9b, 0x08, 0x10, 0x23, 0x73, - 0x13, 0xca, 0xdb, 0x9c, 0x31, 0x13, 0x80, 0x98, 0x8b, 0x98, 0x1a, 0x21, 0x77, 0x24, 0xb9, 0xcc, - 0x0a, 0x52, 0x12, 0xa8, 0xb9, 0x8a, 0x00, 0x10, 0x18, 0x55, 0x12, 0xba, 0xcd, 0x8b, 0x22, 0x12, - 0x00, 0xb9, 0x08, 0x10, 0x00, 0x4a, 0x77, 0x03, 0xda, 0xbb, 0x39, 0x34, 0x03, 0xa9, 0xcc, 0x09, - 0x11, 0x81, 0x48, 0x34, 0x82, 0xcd, 0xbc, 0x19, 0x12, 0x33, 0x90, 0xab, 0x00, 0x00, 0xb8, 0x73, - 0x57, 0x81, 0xcb, 0xab, 0x30, 0x33, 0x03, 0xca, 0xbb, 0x28, 0x02, 0x9b, 0x44, 0x45, 0xa2, 0xbd, - 0x9d, 0x08, 0x20, 0x14, 0x99, 0x88, 0x21, 0x80, 0x9b, 0x64, 0x53, 0xb0, 0xbc, 0x9b, 0x32, 0x44, - 0x91, 0xca, 0x8a, 0x21, 0x91, 0x19, 0x34, 0x35, 0xd8, 0xbd, 0xab, 0x10, 0x53, 0x82, 0xa9, 0x18, - 0x12, 0x98, 0x38, 0x37, 0x25, 0xe9, 0xbb, 0x0a, 0x32, 0x25, 0xa0, 0xaa, 0x0a, 0x12, 0x89, 0x52, - 0x32, 0x17, 0xdb, 0xbc, 0x8b, 0x21, 0x44, 0x90, 0x88, 0x28, 0x90, 0x0a, 0x51, 0x34, 0x05, 0xda, - 0xac, 0x19, 0x31, 0x23, 0xb8, 0xaa, 0x28, 0xa0, 0x18, 0x33, 0x75, 0x84, 0xdb, 0xcc, 0x09, 0x11, - 0x33, 0x89, 0x10, 0x11, 0x9a, 0x00, 0x31, 0x66, 0x93, 0xcc, 0xac, 0x20, 0x21, 0x14, 0xa9, 0x9a, - 0x02, 0x08, 0x01, 0x11, 0x65, 0xa1, 0xce, 0xac, 0x01, 0x11, 0x13, 0x18, 0x11, 0x90, 0x0a, 0x22, - 0x73, 0x33, 0xf8, 0xcc, 0x0a, 0x22, 0x21, 0x03, 0xab, 0x19, 0xa8, 0x20, 0x14, 0x32, 0x26, 0xfa, - 0xbf, 0x09, 0x01, 0x30, 0x03, 0x00, 0x02, 0xba, 0x28, 0x21, 0x37, 0x14, 0xfb, 0xac, 0x18, 0x02, - 0x31, 0x93, 0x9a, 0x90, 0x9a, 0x31, 0x43, 0x53, 0x13, 0xff, 0xbb, 0x18, 0x00, 0x51, 0x02, 0x11, - 0x98, 0x9b, 0x08, 0x52, 0x34, 0x92, 0xcf, 0x9a, 0x11, 0x80, 0x53, 0x91, 0x08, 0x89, 0x9a, 0x10, - 0x42, 0x53, 0xa1, 0xef, 0x8a, 0x00, 0x09, 0x42, 0x11, 0x02, 0xa9, 0x9a, 0x28, 0x44, 0x33, 0xf8, - 0xbc, 0x19, 0x01, 0x20, 0x24, 0x90, 0x88, 0x98, 0x9b, 0x52, 0x33, 0x24, 0xfa, 0xbf, 0x89, 0x00, - 0x20, 0x24, 0x11, 0x90, 0x9a, 0x8b, 0x63, 0x33, 0x02, 0xed, 0xab, 0x28, 0x01, 0x41, 0x13, 0x98, - 0x89, 0xca, 0x09, 0x45, 0x22, 0x81, 0xdf, 0xab, 0x08, 0x08, 0x33, 0x25, 0x82, 0xa9, 0xba, 0x39, - 0x27, 0x12, 0x91, 0xcf, 0x9a, 0x11, 0x11, 0x32, 0x13, 0x99, 0xc9, 0xab, 0x48, 0x25, 0x22, 0xb1, - 0xff, 0x9a, 0x08, 0x20, 0x21, 0x24, 0x80, 0xba, 0xaa, 0x51, 0x24, 0x11, 0xc8, 0xbe, 0x0a, 0x21, - 0x12, 0x42, 0x82, 0x89, 0xba, 0x9b, 0x52, 0x43, 0x22, 0xf8, 0xbf, 0x99, 0x10, 0x21, 0x42, 0x12, - 0xa8, 0xbb, 0x1a, 0x54, 0x22, 0x81, 0xfa, 0xac, 0x18, 0x12, 0x12, 0x32, 0x91, 0xa9, 0xbb, 0x09, - 0x53, 0x22, 0x34, 0xfd, 0x9f, 0x88, 0x10, 0x01, 0x32, 0x03, 0xaa, 0xab, 0x30, 0x25, 0x02, 0xa0, - 0xdf, 0x8a, 0x21, 0x12, 0x21, 0x13, 0xa1, 0xaa, 0x89, 0xa9, 0x20, 0x45, 0x93, 0xff, 0x8d, 0x08, - 0x01, 0x11, 0x33, 0x91, 0xbb, 0x08, 0x21, 0x34, 0x81, 0xea, 0xbf, 0x29, 0x32, 0x21, 0x12, 0x31, - 0xb9, 0x19, 0x90, 0xbd, 0x18, 0x44, 0xf1, 0xbf, 0x88, 0x00, 0x12, 0x12, 0x25, 0xa9, 0x99, 0x10, - 0x20, 0x14, 0xa8, 0xfc, 0x8c, 0x20, 0x23, 0x22, 0x88, 0x02, 0x8b, 0x23, 0xda, 0x9b, 0x31, 0x23, - 0xff, 0x9d, 0x80, 0x00, 0x12, 0x21, 0x04, 0xaa, 0x00, 0x10, 0x40, 0x84, 0xcb, 0xbe, 0x1a, 0x24, - 0x33, 0x02, 0x0a, 0xa1, 0x59, 0x84, 0xcb, 0x8a, 0x21, 0xa1, 0xef, 0x89, 0x88, 0x21, 0x12, 0x31, - 0x92, 0x8c, 0x01, 0x88, 0x63, 0xb1, 0xcd, 0x9c, 0x20, 0x25, 0x32, 0x90, 0x0a, 0x81, 0x62, 0xb0, - 0xad, 0x19, 0x11, 0xc0, 0xad, 0x99, 0x89, 0x32, 0x25, 0x31, 0xc1, 0x19, 0x98, 0x19, 0x25, 0xea, - 0xad, 0x09, 0x62, 0x13, 0x02, 0xa9, 0x29, 0x13, 0x14, 0xdc, 0x9b, 0x08, 0x02, 0xaa, 0xdb, 0x89, - 0xaa, 0x72, 0x12, 0x42, 0xa8, 0x88, 0x9b, 0x42, 0x92, 0xdf, 0x89, 0x18, 0x36, 0x01, 0x81, 0xab, - 0x51, 0x22, 0xb1, 0xbd, 0x9a, 0x18, 0x00, 0x90, 0x9c, 0xb8, 0x8e, 0x43, 0x10, 0x33, 0xb9, 0x99, - 0x39, 0x16, 0xfb, 0xac, 0x08, 0x71, 0x23, 0x10, 0xa8, 0x8c, 0x43, 0x11, 0xba, 0xab, 0xab, 0x18, - 0x10, 0xc0, 0x1a, 0xfc, 0x2a, 0x23, 0x30, 0x83, 0xaf, 0x18, 0x23, 0x91, 0xdd, 0x9c, 0x10, 0x56, - 0x01, 0x80, 0xb9, 0x18, 0x24, 0x98, 0x9a, 0xca, 0x8a, 0x11, 0x20, 0x98, 0xa2, 0xff, 0x10, 0x11, - 0x10, 0xb0, 0x9c, 0x31, 0x02, 0xa9, 0xec, 0x8b, 0x62, 0x17, 0x00, 0x98, 0x99, 0x38, 0x03, 0xaa, - 0x99, 0xbd, 0x28, 0x81, 0x28, 0x41, 0xf1, 0x8c, 0x20, 0x12, 0x98, 0xdc, 0x19, 0x33, 0x90, 0xa0, - 0xcf, 0x08, 0x64, 0x12, 0x88, 0x98, 0x98, 0x40, 0xb0, 0x89, 0xa9, 0xab, 0x33, 0x9a, 0x53, 0x14, - 0xdd, 0x89, 0x42, 0x91, 0xba, 0xad, 0x31, 0x03, 0x28, 0xf0, 0xac, 0x40, 0x26, 0x81, 0x80, 0x98, - 0x89, 0x12, 0xc9, 0x99, 0xaa, 0x4a, 0x94, 0x09, 0x53, 0xb1, 0xbd, 0x28, 0x24, 0xb9, 0xcc, 0x8a, - 0x33, 0x81, 0x32, 0xfc, 0x8b, 0x54, 0x23, 0x80, 0x80, 0xa9, 0x18, 0x80, 0xdb, 0x9a, 0x9a, 0x52, - 0x98, 0x71, 0x12, 0xca, 0xab, 0x32, 0x82, 0xfb, 0xab, 0x19, 0x32, 0x11, 0xa2, 0xcf, 0x48, 0x44, - 0x02, 0x80, 0x98, 0x99, 0x08, 0x80, 0xbc, 0x99, 0x08, 0x00, 0x39, 0x77, 0x81, 0xca, 0x09, 0x21, - 0xa8, 0xce, 0x89, 0x20, 0x13, 0x80, 0xd9, 0x0a, 0x63, 0x34, 0x11, 0x80, 0xa9, 0x99, 0x99, 0xb0, - 0x9f, 0x01, 0x90, 0x08, 0x44, 0x23, 0xc0, 0x9e, 0x10, 0x01, 0xeb, 0xac, 0x08, 0x30, 0x04, 0xa9, - 0x99, 0x11, 0x74, 0x05, 0x10, 0x88, 0x99, 0x98, 0x89, 0xb8, 0x2b, 0x93, 0x9c, 0x42, 0x15, 0x33, - 0xea, 0x8a, 0x00, 0xb0, 0xcf, 0x9b, 0x08, 0x63, 0x91, 0x9a, 0x20, 0x11, 0x56, 0x01, 0x00, 0x88, - 0x99, 0xa9, 0x9b, 0xba, 0x62, 0xb0, 0x29, 0x25, 0x11, 0x83, 0xae, 0x88, 0x11, 0xfb, 0xcc, 0x9a, - 0x30, 0x15, 0xa9, 0x28, 0x11, 0x51, 0x16, 0x80, 0x90, 0x88, 0x00, 0xc9, 0x9c, 0x19, 0x02, 0x9a, - 0x73, 0x02, 0x30, 0xd1, 0x8b, 0x09, 0x90, 0xfb, 0xcc, 0x8a, 0x42, 0x82, 0x8b, 0x32, 0x02, 0x74, - 0x83, 0x88, 0x98, 0x18, 0x01, 0xfc, 0x89, 0x01, 0x80, 0x19, 0x24, 0x01, 0x32, 0xea, 0x89, 0x89, - 0xa0, 0xdd, 0xbd, 0x29, 0x24, 0xa8, 0x19, 0x23, 0x32, 0x47, 0x90, 0x88, 0x88, 0x20, 0x91, 0xdf, - 0x00, 0x01, 0x89, 0x11, 0x02, 0x30, 0x04, 0xac, 0x98, 0x19, 0xe8, 0xcd, 0x9d, 0x31, 0x82, 0x8a, - 0x11, 0x32, 0x72, 0x04, 0x99, 0x88, 0x10, 0x12, 0xf8, 0x8e, 0x11, 0x90, 0x10, 0x11, 0x08, 0x28, - 0xa3, 0x8e, 0x08, 0x11, 0xea, 0xce, 0x8a, 0x14, 0x90, 0x00, 0x11, 0x02, 0x62, 0x82, 0x9b, 0x10, - 0x22, 0x83, 0xdf, 0x0b, 0x03, 0x08, 0x32, 0x81, 0x98, 0x40, 0xd8, 0x1a, 0x20, 0x83, 0xdf, 0xcd, - 0x18, 0x12, 0x09, 0x11, 0x12, 0x00, 0x54, 0xb8, 0x09, 0x31, 0x33, 0xe1, 0xcd, 0x29, 0x01, 0x28, - 0x13, 0x90, 0x9a, 0x22, 0xbd, 0x21, 0x42, 0xd1, 0xcf, 0xbb, 0x41, 0x81, 0x10, 0x11, 0x11, 0x38, - 0x07, 0xba, 0x11, 0x22, 0x12, 0xfa, 0x9d, 0x10, 0x01, 0x22, 0x02, 0xc9, 0x09, 0xa2, 0x1c, 0x15, - 0x01, 0xfa, 0xbd, 0x8b, 0x23, 0x00, 0x21, 0x11, 0x91, 0x72, 0x94, 0x8a, 0x11, 0x21, 0x81, 0xcd, - 0x9c, 0x22, 0x21, 0x32, 0xa1, 0xbd, 0x28, 0xa8, 0x72, 0x83, 0xa8, 0xde, 0xcb, 0x09, 0x13, 0x01, - 0x22, 0x00, 0x09, 0x45, 0xa0, 0x28, 0x02, 0x20, 0xa2, 0xef, 0x89, 0x22, 0x21, 0x04, 0xb9, 0x9d, - 0x01, 0x18, 0x26, 0xa0, 0xba, 0xcd, 0xac, 0x18, 0x13, 0x20, 0x04, 0x98, 0x38, 0x16, 0x98, 0x12, - 0x99, 0x31, 0xb2, 0xdf, 0x19, 0x23, 0x42, 0xa2, 0xcc, 0x09, 0x00, 0x52, 0x03, 0xca, 0xac, 0xdb, - 0x8c, 0x20, 0x02, 0x32, 0x80, 0x98, 0x63, 0x02, 0x10, 0x98, 0x9a, 0x73, 0xc0, 0xac, 0x38, 0x25, - 0x12, 0xb8, 0xbd, 0x18, 0x30, 0x35, 0x91, 0xbd, 0xab, 0xbe, 0x0a, 0x21, 0x22, 0x13, 0x10, 0x18, - 0x34, 0x43, 0xa2, 0xba, 0x3b, 0x47, 0xda, 0xab, 0x50, 0x24, 0x00, 0xaa, 0xac, 0x10, 0x44, 0x02, - 0xb8, 0xae, 0xb9, 0xad, 0x88, 0x41, 0x11, 0x11, 0x00, 0x01, 0x42, 0x33, 0xc9, 0xaa, 0x61, 0x93, - 0xdb, 0x9c, 0x54, 0x01, 0x80, 0xaa, 0x9b, 0x41, 0x34, 0x01, 0xeb, 0xab, 0xcb, 0x9b, 0x19, 0x34, - 0x01, 0x12, 0x01, 0x30, 0x36, 0x14, 0xcb, 0x08, 0x22, 0xb8, 0xce, 0x29, 0x36, 0x01, 0x98, 0xdb, - 0x1a, 0x52, 0x13, 0x98, 0xda, 0xbc, 0xab, 0xaa, 0x31, 0x34, 0x11, 0x12, 0xb8, 0x73, 0x42, 0x91, - 0x8c, 0x11, 0x88, 0xa8, 0xad, 0x41, 0x37, 0x88, 0xa9, 0xbc, 0x20, 0x54, 0x81, 0x90, 0xdb, 0xac, - 0x9a, 0x88, 0x20, 0x34, 0x81, 0x80, 0x2b, 0x26, 0x43, 0xb8, 0x29, 0xa8, 0xa9, 0x88, 0x89, 0x71, - 0x57, 0x98, 0xb9, 0x8b, 0x42, 0x23, 0x08, 0xb1, 0xdf, 0x9b, 0x09, 0x80, 0x38, 0x16, 0x88, 0x99, - 0x40, 0x23, 0x01, 0x8a, 0x92, 0xac, 0x0a, 0x32, 0xb0, 0x74, 0x17, 0xaa, 0xaa, 0x28, 0x13, 0x13, - 0x11, 0xf9, 0xbf, 0x8a, 0x08, 0x80, 0x52, 0x02, 0xaa, 0x0a, 0x45, 0x01, 0x00, 0x09, 0xc8, 0x99, - 0x28, 0x15, 0x09, 0x65, 0xa1, 0xab, 0x8b, 0x32, 0x01, 0x24, 0x91, 0xcf, 0xac, 0x09, 0x80, 0x10, - 0x35, 0xb0, 0x9b, 0x58, 0x15, 0x08, 0x01, 0x98, 0xac, 0x88, 0x41, 0x02, 0x39, 0x37, 0xca, 0xaa, - 0x30, 0x92, 0x59, 0x13, 0xca, 0xce, 0x9a, 0x18, 0x80, 0x48, 0x05, 0xba, 0x09, 0x63, 0x81, 0x21, - 0x91, 0xcb, 0x8a, 0x28, 0x34, 0x82, 0x50, 0x93, 0xae, 0x0a, 0x31, 0xa8, 0x64, 0x91, 0xdb, 0xbb, - 0x8b, 0x11, 0x08, 0x44, 0xa2, 0xad, 0x20, 0x34, 0x11, 0x33, 0xe9, 0x9c, 0x08, 0x30, 0x24, 0x00, - 0x11, 0xc0, 0xad, 0x18, 0x12, 0x2a, 0x47, 0xb9, 0xbc, 0xbb, 0x18, 0x80, 0x28, 0x35, 0xd8, 0x8b, - 0x31, 0x36, 0x31, 0x93, 0xaf, 0x9a, 0x11, 0x33, 0x23, 0x90, 0x00, 0xe9, 0x9b, 0x29, 0x04, 0x70, - 0x93, 0xad, 0xcb, 0x0a, 0x80, 0x88, 0x30, 0x05, 0xba, 0x8a, 0x72, 0x24, 0x23, 0xd9, 0xab, 0x0a, - 0x43, 0x22, 0x12, 0x88, 0x89, 0xca, 0xbb, 0x71, 0x02, 0x42, 0xd9, 0xcb, 0xab, 0x88, 0x89, 0x88, - 0x35, 0x92, 0xdb, 0x09, 0x74, 0x23, 0x81, 0xdb, 0x9a, 0x20, 0x23, 0x22, 0x12, 0xb0, 0x9b, 0xea, - 0x8c, 0x44, 0x01, 0x81, 0xdb, 0xac, 0x8a, 0x9a, 0x89, 0x41, 0x23, 0xb8, 0xbe, 0x38, 0x67, 0x02, - 0x98, 0xba, 0x09, 0x22, 0x22, 0x33, 0x02, 0xfa, 0x0a, 0xca, 0x49, 0x24, 0x90, 0x98, 0xbc, 0xaa, - 0xcb, 0xaa, 0x31, 0x32, 0x92, 0xd9, 0x9e, 0x73, 0x24, 0x91, 0xa9, 0xaa, 0x20, 0x22, 0x63, 0x23, - 0xa9, 0xbd, 0x80, 0xab, 0x55, 0x82, 0xaa, 0x9a, 0x89, 0xda, 0xac, 0x10, 0x03, 0xb9, 0x0a, 0x92, - 0x2e, 0x77, 0x81, 0x98, 0x88, 0x08, 0x08, 0x42, 0x23, 0xa8, 0xca, 0x8c, 0x91, 0x3a, 0x47, 0xa8, - 0x9b, 0x01, 0xb9, 0xbc, 0x0a, 0x11, 0xc9, 0x9a, 0x40, 0x91, 0x71, 0x27, 0x98, 0x09, 0x80, 0x00, - 0x29, 0x36, 0x82, 0xbb, 0xbb, 0x0b, 0x91, 0x74, 0x86, 0xba, 0x19, 0x81, 0xba, 0x9c, 0x00, 0x90, - 0xbc, 0x89, 0x40, 0x22, 0x77, 0x91, 0x99, 0x10, 0x00, 0x90, 0x41, 0x24, 0xb8, 0x9c, 0xb8, 0x1a, - 0x31, 0x37, 0xc8, 0xab, 0x41, 0xa0, 0xcb, 0x0a, 0x88, 0xca, 0x8a, 0x88, 0x62, 0x53, 0x15, 0xb9, - 0x89, 0x32, 0x82, 0x18, 0x45, 0x01, 0xbd, 0x08, 0xba, 0x20, 0x73, 0x83, 0xcc, 0x0a, 0x13, 0xc8, - 0x9b, 0x80, 0xa9, 0xcb, 0x81, 0x0b, 0x56, 0x43, 0x92, 0xbc, 0x28, 0x24, 0x00, 0x30, 0x13, 0xd0, - 0x8d, 0x90, 0xab, 0x51, 0x24, 0xc1, 0xac, 0x28, 0x83, 0xbc, 0x89, 0xa8, 0x99, 0x0a, 0xd0, 0x2b, - 0x67, 0x22, 0xc8, 0x8a, 0x31, 0x22, 0x18, 0x21, 0x00, 0xcc, 0x20, 0xea, 0x8b, 0x63, 0x03, 0xdb, - 0x0a, 0x12, 0xa0, 0x9c, 0x99, 0x99, 0x09, 0x12, 0xde, 0x38, 0x37, 0x81, 0xbb, 0x18, 0x43, 0x12, - 0x00, 0x00, 0x98, 0x0c, 0x83, 0xcf, 0x2a, 0x35, 0xb0, 0x9d, 0x10, 0x10, 0xb9, 0x9a, 0xa9, 0x09, - 0x30, 0xf2, 0xaf, 0x62, 0x13, 0xa9, 0x8a, 0x11, 0x43, 0x01, 0x08, 0x90, 0x89, 0x21, 0xf9, 0xac, - 0x51, 0x13, 0xdb, 0x09, 0x00, 0x81, 0xac, 0x9a, 0x08, 0x11, 0x82, 0xfd, 0x1b, 0x55, 0x01, 0xaa, - 0x08, 0x20, 0x24, 0x00, 0x80, 0x88, 0x08, 0x90, 0xdd, 0x0a, 0x54, 0x91, 0x9c, 0x88, 0x01, 0xa9, - 0xac, 0x09, 0x13, 0x01, 0xd9, 0xaf, 0x48, 0x44, 0x91, 0x8a, 0x08, 0x31, 0x13, 0x88, 0x10, 0x90, - 0x08, 0xd9, 0xad, 0x18, 0x45, 0xc0, 0x8b, 0x00, 0xb8, 0xcb, 0xac, 0x52, 0x81, 0x90, 0xea, 0x9b, - 0x53, 0x35, 0x98, 0x0a, 0x00, 0x41, 0x02, 0x18, 0x81, 0x99, 0x89, 0xb9, 0x9d, 0x28, 0x47, 0xda, - 0x08, 0xa0, 0x9c, 0xba, 0x39, 0x25, 0x80, 0xbb, 0xdb, 0x1b, 0x65, 0x14, 0x99, 0x81, 0x99, 0x32, - 0x11, 0x22, 0xb8, 0x99, 0x09, 0xc1, 0xbc, 0x5a, 0x07, 0x8b, 0x81, 0xdc, 0x9b, 0x8a, 0x42, 0x13, - 0xb0, 0x8c, 0xda, 0x19, 0x55, 0x03, 0x80, 0xa8, 0x8a, 0x43, 0x23, 0x80, 0x8a, 0xab, 0x54, 0xc0, - 0xab, 0x49, 0x04, 0x88, 0xf9, 0xbc, 0x0a, 0x00, 0x43, 0x82, 0xba, 0x81, 0xae, 0x28, 0x55, 0x04, - 0x90, 0xba, 0x1a, 0x34, 0x02, 0x88, 0xa9, 0x4a, 0x06, 0xaa, 0xbb, 0x71, 0x02, 0xaa, 0xeb, 0xab, - 0x00, 0x30, 0x25, 0xa8, 0x1a, 0xa0, 0xac, 0x40, 0x57, 0x81, 0x99, 0xab, 0x48, 0x13, 0x80, 0x90, - 0x8a, 0x63, 0xa2, 0xdb, 0x09, 0x34, 0xa0, 0xbc, 0xbd, 0x09, 0x00, 0x53, 0x81, 0x99, 0x11, 0xe9, - 0x9a, 0x73, 0x24, 0xa0, 0xba, 0x9a, 0x53, 0x01, 0x81, 0x99, 0x48, 0x15, 0xc9, 0x9b, 0x31, 0x14, - 0xcb, 0xac, 0xbb, 0x09, 0x51, 0x13, 0x80, 0x18, 0xa2, 0xce, 0x28, 0x46, 0x02, 0xb9, 0xbb, 0x08, - 0x34, 0x12, 0xa9, 0x29, 0x46, 0xa2, 0xbc, 0x18, 0x22, 0xa0, 0xcf, 0x99, 0xab, 0x28, 0x25, 0x01, - 0x00, 0x11, 0xda, 0x8c, 0x52, 0x24, 0x80, 0xcb, 0x9a, 0x18, 0x44, 0x91, 0x89, 0x52, 0x23, 0xda, - 0x8a, 0x11, 0x00, 0xeb, 0x9b, 0xcb, 0x8c, 0x43, 0x02, 0x11, 0x11, 0xa0, 0xbe, 0x20, 0x34, 0x13, - 0xa8, 0xbd, 0xab, 0x61, 0x05, 0x99, 0x30, 0x25, 0x90, 0xab, 0x01, 0x89, 0xd9, 0xab, 0xda, 0xbd, - 0x28, 0x24, 0x10, 0x42, 0x81, 0xba, 0x0b, 0x22, 0x45, 0x80, 0x90, 0xbf, 0x0a, 0x73, 0x81, 0x0a, - 0x53, 0x82, 0x99, 0x08, 0xa8, 0xba, 0x9d, 0xa0, 0xbe, 0x9c, 0x42, 0x02, 0x30, 0x14, 0xa9, 0x98, - 0x80, 0x00, 0x03, 0x73, 0xe0, 0x9c, 0x28, 0x24, 0xa9, 0x50, 0x24, 0x88, 0x08, 0x90, 0xcc, 0x9a, - 0x18, 0xe9, 0xbb, 0x19, 0x24, 0x11, 0x53, 0x91, 0x0a, 0x81, 0x9a, 0x99, 0x61, 0x15, 0xeb, 0x8a, - 0x41, 0x82, 0x0a, 0x44, 0x02, 0x20, 0x90, 0xfa, 0x9c, 0x08, 0x80, 0xdb, 0x8a, 0x20, 0x22, 0x33, - 0x23, 0xa9, 0x63, 0xc8, 0xcb, 0x18, 0x34, 0xa2, 0xbf, 0x28, 0x13, 0x80, 0x40, 0x34, 0x22, 0x12, - 0xd9, 0xbf, 0x0a, 0x80, 0xa8, 0xbd, 0x18, 0x10, 0x44, 0x02, 0x00, 0x20, 0x03, 0xce, 0x9b, 0x42, - 0x12, 0xc8, 0x8d, 0x12, 0x10, 0x00, 0x32, 0x35, 0x24, 0x91, 0xed, 0x9b, 0x00, 0x88, 0xc9, 0x8b, - 0x00, 0x60, 0x23, 0x80, 0x10, 0x32, 0xe0, 0xbd, 0x28, 0x23, 0x91, 0xdb, 0x18, 0x11, 0x21, 0x21, - 0x44, 0x44, 0x13, 0xe8, 0xcc, 0x09, 0x00, 0xa9, 0xaa, 0x9a, 0x10, 0x65, 0x11, 0x80, 0x28, 0x02, - 0xdc, 0x9b, 0x41, 0x03, 0xb9, 0x89, 0x18, 0x22, 0x21, 0x52, 0x34, 0x36, 0x83, 0xfc, 0xab, 0x11, - 0xa8, 0xaa, 0xb9, 0x8a, 0x52, 0x36, 0x01, 0x9a, 0x32, 0xb1, 0xbf, 0x1a, 0x25, 0x98, 0x99, 0x80, - 0x29, 0x11, 0x34, 0x12, 0x72, 0x25, 0xa0, 0xbf, 0x19, 0x81, 0xba, 0x8a, 0xb9, 0x1a, 0x55, 0x15, - 0x98, 0x09, 0x13, 0xd9, 0x9c, 0x40, 0x01, 0xa9, 0x28, 0x98, 0x18, 0x42, 0x04, 0x18, 0x54, 0x23, - 0xfa, 0xab, 0x20, 0xb8, 0xac, 0x88, 0xba, 0x50, 0x45, 0x92, 0x99, 0x20, 0x02, 0xbe, 0x0a, 0x33, - 0xa0, 0x9b, 0x23, 0xaa, 0x62, 0x23, 0xb0, 0x61, 0x45, 0x93, 0xcd, 0x89, 0x82, 0xba, 0x8b, 0x98, - 0x0c, 0x54, 0x23, 0xa9, 0x09, 0x52, 0xc1, 0x9d, 0x28, 0x02, 0x99, 0x08, 0x81, 0x3a, 0x16, 0x90, - 0x8b, 0x56, 0x23, 0xb8, 0xae, 0x28, 0xa0, 0xac, 0x89, 0xa9, 0x60, 0x23, 0x81, 0x8b, 0x32, 0x23, - 0xfd, 0x8a, 0x31, 0x90, 0x88, 0x09, 0x11, 0x62, 0xa0, 0xab, 0x71, 0x26, 0x01, 0xca, 0x9a, 0x11, - 0xca, 0x9a, 0x9a, 0x20, 0x34, 0x91, 0x88, 0x51, 0x23, 0xb1, 0xcf, 0x09, 0x23, 0x89, 0xa9, 0x39, - 0x25, 0x02, 0xbf, 0x29, 0x46, 0x13, 0xa0, 0xac, 0x89, 0x01, 0xbc, 0xab, 0x28, 0x33, 0x92, 0x9e, - 0x43, 0x33, 0x81, 0xeb, 0xab, 0x20, 0x14, 0xa9, 0x8b, 0x54, 0x02, 0xea, 0x9c, 0x43, 0x44, 0x01, - 0xa9, 0xaa, 0x09, 0xa1, 0xae, 0x0a, 0x23, 0xa1, 0xda, 0x3a, 0x26, 0x13, 0xa9, 0x9c, 0x89, 0x30, - 0x93, 0xad, 0x31, 0x26, 0xc8, 0xcc, 0x39, 0x44, 0x23, 0x90, 0x99, 0xac, 0x18, 0xc9, 0x9b, 0x31, - 0x84, 0xbd, 0x9b, 0x73, 0x23, 0x91, 0xba, 0x89, 0x8a, 0x53, 0xb8, 0x8a, 0x54, 0x82, 0xbd, 0xbb, - 0x73, 0x33, 0x13, 0x89, 0xc9, 0x9c, 0x81, 0xab, 0x29, 0x33, 0xf8, 0x9e, 0x18, 0x53, 0x11, 0xa9, - 0x8a, 0x90, 0x28, 0x84, 0xaa, 0x39, 0x26, 0xd8, 0xba, 0x0b, 0x37, 0x23, 0x01, 0x80, 0xfb, 0x89, - 0x80, 0x99, 0x31, 0xa1, 0xcf, 0x89, 0x31, 0x26, 0x80, 0xaa, 0x09, 0x88, 0x40, 0x91, 0xab, 0x51, - 0x82, 0xcb, 0xcb, 0x59, 0x25, 0x22, 0x01, 0xa8, 0xbd, 0x88, 0x88, 0x08, 0x23, 0xfc, 0x9c, 0x18, - 0x53, 0x03, 0x99, 0xaa, 0x00, 0x88, 0x34, 0xc8, 0x8d, 0x42, 0x80, 0xbb, 0xab, 0x72, 0x24, 0x31, - 0x01, 0xca, 0x9d, 0x00, 0x98, 0x28, 0xa3, 0xcf, 0x0a, 0x21, 0x34, 0x91, 0xa9, 0x8a, 0x80, 0x51, - 0x84, 0xfb, 0x19, 0x23, 0xa8, 0xaa, 0x8b, 0x64, 0x22, 0x24, 0xa8, 0xcb, 0x09, 0x90, 0xa9, 0x61, - 0xd0, 0xac, 0x10, 0x32, 0x23, 0x98, 0xaa, 0xac, 0x31, 0x36, 0xd0, 0xad, 0x41, 0x81, 0x98, 0xa9, - 0x19, 0x44, 0x53, 0x02, 0xbb, 0x8b, 0x80, 0xba, 0x2c, 0x17, 0xcc, 0x89, 0x21, 0x22, 0x82, 0x88, - 0xca, 0x1b, 0x35, 0x82, 0xde, 0x09, 0x24, 0x98, 0x89, 0x99, 0x38, 0x45, 0x24, 0xb0, 0xab, 0x08, - 0xa9, 0xac, 0x72, 0xb1, 0xad, 0x28, 0x32, 0x10, 0x11, 0xb8, 0xad, 0x30, 0x24, 0xea, 0x9c, 0x31, - 0x04, 0x8a, 0x89, 0x9a, 0x71, 0x44, 0x01, 0xaa, 0x99, 0x98, 0xbb, 0x38, 0x26, 0xfb, 0x8a, 0x31, - 0x02, 0x20, 0x81, 0xdb, 0x09, 0x22, 0xb1, 0xbf, 0x18, 0x34, 0x90, 0x99, 0xa8, 0x8b, 0x77, 0x13, - 0x90, 0xb9, 0x8a, 0xb9, 0x09, 0x44, 0xa1, 0xbf, 0x19, 0x33, 0x11, 0x12, 0xc9, 0x9b, 0x01, 0x09, - 0xea, 0x8a, 0x40, 0x25, 0x99, 0x09, 0xba, 0x70, 0x27, 0x01, 0x98, 0xcb, 0x8a, 0x80, 0x31, 0x02, - 0xfb, 0x9d, 0x31, 0x22, 0x20, 0x80, 0xbb, 0x0a, 0xd9, 0x19, 0x99, 0x80, 0x50, 0x05, 0x89, 0x90, - 0x0a, 0x76, 0x23, 0x80, 0xca, 0xad, 0x10, 0x01, 0x12, 0xb9, 0xce, 0x09, 0x43, 0x13, 0x00, 0x99, - 0xab, 0x99, 0xaf, 0x22, 0x88, 0xa8, 0x51, 0x01, 0x00, 0x00, 0x38, 0x67, 0x12, 0xa8, 0xfb, 0x0c, - 0x12, 0x01, 0x90, 0xbb, 0x9c, 0x30, 0x35, 0x12, 0x98, 0xa9, 0xba, 0xcd, 0x2b, 0x04, 0x98, 0x99, - 0x63, 0x02, 0x11, 0x99, 0x42, 0x45, 0x81, 0xea, 0xac, 0x38, 0x13, 0x00, 0xdb, 0x9b, 0x09, 0x35, - 0x24, 0x90, 0x98, 0xba, 0xad, 0xcb, 0x50, 0x92, 0x99, 0x09, 0x35, 0x22, 0x91, 0x19, 0x33, 0x35, - 0xd8, 0xcd, 0x9a, 0x53, 0x01, 0xb8, 0xac, 0x88, 0x41, 0x43, 0x02, 0xa9, 0xa9, 0xdb, 0xbb, 0x9a, - 0x54, 0x98, 0xba, 0x71, 0x33, 0x02, 0x99, 0x11, 0x18, 0x83, 0xdd, 0xbb, 0x19, 0x37, 0x90, 0xcb, - 0x8a, 0x11, 0x34, 0x33, 0xa1, 0xad, 0xb9, 0xbb, 0xcc, 0x2a, 0x15, 0xba, 0x19, 0x56, 0x23, 0x88, - 0x08, 0x80, 0x09, 0x90, 0xbc, 0xad, 0x58, 0x14, 0xb9, 0xac, 0x20, 0x32, 0x44, 0x12, 0xe9, 0xab, - 0x88, 0xa9, 0xbc, 0x30, 0x92, 0xab, 0x71, 0x37, 0x02, 0x09, 0x80, 0xaa, 0x09, 0x81, 0xca, 0x9c, - 0x52, 0x02, 0xcc, 0x09, 0x22, 0x43, 0x24, 0x90, 0xce, 0x8a, 0x00, 0xb9, 0xab, 0x21, 0x90, 0x29, - 0x77, 0x23, 0x80, 0x08, 0xa9, 0xbb, 0x30, 0x82, 0xcc, 0x0a, 0x23, 0xa2, 0xae, 0x31, 0x32, 0x47, - 0x01, 0xea, 0xab, 0x18, 0xa0, 0xbb, 0x9b, 0x20, 0x12, 0x74, 0x35, 0x12, 0x00, 0xa9, 0xbc, 0x8b, - 0x33, 0x98, 0xdb, 0x1a, 0x32, 0xa2, 0x8a, 0x33, 0x76, 0x15, 0xb8, 0xbc, 0x8b, 0x01, 0xba, 0xdb, - 0x0b, 0x30, 0x25, 0x63, 0x24, 0x01, 0x80, 0xdb, 0x9a, 0x08, 0x13, 0xa8, 0xdb, 0x18, 0x42, 0x91, - 0x88, 0x31, 0x67, 0x91, 0xca, 0xaa, 0x0a, 0x80, 0xba, 0xad, 0x09, 0x73, 0x13, 0x42, 0x13, 0x01, - 0xda, 0xab, 0x99, 0x20, 0x14, 0xa8, 0x9e, 0x18, 0x34, 0x98, 0x19, 0x73, 0x12, 0xc9, 0xbb, 0xbb, - 0x09, 0xa0, 0xeb, 0xac, 0x38, 0x47, 0x10, 0x32, 0x21, 0xb8, 0xbc, 0xa9, 0x9a, 0x52, 0x12, 0xd9, - 0x9b, 0x42, 0x23, 0xb9, 0x41, 0x34, 0xa0, 0xca, 0xdc, 0xaa, 0x00, 0x99, 0xfb, 0x0a, 0x63, 0x13, - 0x20, 0x23, 0x82, 0xbd, 0x99, 0xaa, 0x0a, 0x45, 0x81, 0xeb, 0x28, 0x22, 0x82, 0x8c, 0x33, 0x03, - 0x9a, 0xf9, 0xbc, 0x9a, 0x00, 0xb8, 0xbf, 0x41, 0x43, 0x02, 0x22, 0x33, 0xc9, 0x9c, 0xa9, 0xab, - 0x38, 0x37, 0xc0, 0x8c, 0x32, 0x12, 0xb0, 0x2a, 0x14, 0x08, 0x00, 0xde, 0x9c, 0x89, 0x01, 0xdb, - 0x0b, 0x35, 0x23, 0x12, 0x32, 0x93, 0xcb, 0xcb, 0xba, 0xaa, 0x72, 0x07, 0xaa, 0x29, 0x13, 0x11, - 0xbb, 0x31, 0x10, 0x11, 0xe8, 0xbf, 0x9a, 0x39, 0xa1, 0xcd, 0x38, 0x25, 0x12, 0x11, 0x22, 0x91, - 0xcc, 0xab, 0xaa, 0x2a, 0x57, 0x81, 0xab, 0x31, 0x12, 0xa0, 0x8c, 0x12, 0x22, 0x80, 0xed, 0xbc, - 0x8a, 0x32, 0xd8, 0x9c, 0x43, 0x22, 0x11, 0x21, 0x25, 0xb8, 0xbd, 0x9a, 0xab, 0x72, 0x24, 0xb8, - 0x1a, 0x33, 0x91, 0xdb, 0x29, 0x23, 0x82, 0xa9, 0xee, 0xbb, 0x10, 0x03, 0xeb, 0x3a, 0x25, 0x00, - 0x18, 0x52, 0x03, 0xdb, 0xaa, 0xa9, 0x2a, 0x46, 0x02, 0xbb, 0x40, 0x13, 0xc9, 0x9b, 0x22, 0x03, - 0x88, 0xc0, 0xdf, 0x89, 0x21, 0xa0, 0xbb, 0x73, 0x82, 0x98, 0x31, 0x26, 0xb0, 0xbb, 0xa9, 0xab, - 0x73, 0x24, 0xb0, 0x8a, 0x25, 0x80, 0xbc, 0x28, 0x12, 0x90, 0x18, 0xf9, 0xbc, 0x28, 0x82, 0xd9, - 0x29, 0x25, 0x98, 0x0a, 0x37, 0x01, 0xca, 0x9a, 0xa9, 0x28, 0x27, 0x02, 0xba, 0x30, 0x04, 0xc9, - 0x8b, 0x22, 0x80, 0x88, 0x91, 0xcf, 0x8a, 0x21, 0xa8, 0x9c, 0x52, 0x93, 0xbb, 0x71, 0x17, 0x98, - 0x9a, 0x8a, 0x89, 0x52, 0x23, 0xa8, 0x0a, 0x43, 0xb0, 0xac, 0x28, 0x92, 0x88, 0x18, 0xe8, 0xac, - 0x08, 0xa1, 0xab, 0x38, 0x37, 0xdb, 0x19, 0x66, 0x81, 0xa9, 0xaa, 0x98, 0x30, 0x26, 0x82, 0x99, - 0x10, 0x03, 0xbc, 0x8a, 0x21, 0xaa, 0x10, 0x02, 0xbc, 0xdb, 0xaa, 0xbc, 0x28, 0x63, 0xc1, 0x9d, - 0x52, 0x26, 0xa0, 0xaa, 0x9b, 0x10, 0x43, 0x24, 0x80, 0x89, 0x31, 0xd1, 0x8b, 0x98, 0xa9, 0x0a, - 0x42, 0x03, 0xa0, 0xdf, 0xbb, 0x29, 0x12, 0x81, 0xcc, 0x3a, 0x47, 0x13, 0xba, 0xcb, 0x29, 0x23, - 0x43, 0x22, 0xa1, 0x99, 0x41, 0xca, 0x00, 0xdc, 0x9b, 0x32, 0x23, 0x24, 0xfa, 0xad, 0x89, 0x21, - 0x90, 0x9a, 0x99, 0x63, 0x24, 0x82, 0xda, 0x8b, 0x33, 0x12, 0x43, 0x15, 0xa8, 0x8c, 0x22, 0x89, - 0xd9, 0xbe, 0x20, 0x33, 0x33, 0xb1, 0xdf, 0xaa, 0x11, 0x80, 0x8a, 0x80, 0x00, 0x32, 0x53, 0x03, - 0xdb, 0x48, 0x02, 0x18, 0x55, 0x81, 0xcb, 0x38, 0x13, 0xa0, 0xef, 0x0b, 0x33, 0x42, 0x01, 0xda, - 0xbb, 0x0a, 0x12, 0xa8, 0x29, 0x81, 0x80, 0x99, 0x72, 0x05, 0x09, 0x22, 0x88, 0x32, 0x24, 0xfa, - 0x9a, 0x73, 0x01, 0xc9, 0xbd, 0x39, 0x25, 0x22, 0xa0, 0xbd, 0xaa, 0x18, 0x01, 0xa8, 0x32, 0x80, - 0xda, 0x09, 0x54, 0x02, 0x28, 0x81, 0x18, 0x20, 0xb2, 0xae, 0x2a, 0x67, 0x90, 0xeb, 0x9a, 0x42, - 0x14, 0x82, 0xaa, 0xbc, 0x9a, 0x20, 0x82, 0x1a, 0x05, 0xb8, 0xac, 0x21, 0x45, 0x01, 0x08, 0x01, - 0x98, 0x08, 0xab, 0xb8, 0x78, 0x47, 0xc9, 0xab, 0x09, 0x45, 0x22, 0x98, 0xca, 0xbc, 0x09, 0x32, - 0x90, 0x30, 0x93, 0xcd, 0x19, 0x11, 0x35, 0x90, 0x21, 0x90, 0xab, 0x89, 0x90, 0x9c, 0x77, 0x93, - 0xbc, 0x9a, 0x28, 0x47, 0x01, 0xa8, 0xcb, 0xab, 0x38, 0x12, 0x00, 0x33, 0xe9, 0x9b, 0x81, 0x31, - 0x16, 0x10, 0x82, 0xaa, 0xba, 0x00, 0xda, 0x70, 0x17, 0xa9, 0x9b, 0x98, 0x50, 0x25, 0x01, 0xda, - 0xbb, 0x89, 0x21, 0x11, 0x31, 0x92, 0xae, 0x19, 0x80, 0x50, 0x23, 0x21, 0xba, 0xaa, 0x8b, 0xa0, - 0x0d, 0x77, 0x81, 0xaa, 0x9a, 0x89, 0x64, 0x24, 0xa8, 0xcc, 0x9a, 0x00, 0x11, 0x11, 0x14, 0xaa, - 0x9a, 0x81, 0x8a, 0x73, 0x14, 0xa0, 0x9a, 0x90, 0x9a, 0x99, 0x71, 0x17, 0x98, 0xa9, 0x99, 0x1a, - 0x66, 0x02, 0xca, 0xaa, 0x89, 0x18, 0x21, 0x32, 0x92, 0xac, 0x18, 0xb9, 0x1a, 0x77, 0x81, 0x9a, - 0x18, 0x98, 0xaa, 0x28, 0x55, 0x02, 0xa9, 0xa9, 0xac, 0x60, 0x35, 0xa0, 0xad, 0x9a, 0x88, 0x10, - 0x22, 0x43, 0xa8, 0x0b, 0xa1, 0xac, 0x60, 0x25, 0xa9, 0x8a, 0x21, 0xba, 0x8c, 0x31, 0x37, 0x82, - 0x9a, 0xdb, 0x1b, 0x45, 0x04, 0xca, 0xab, 0x88, 0x89, 0x22, 0x32, 0x24, 0xa9, 0x09, 0xeb, 0x19, - 0x44, 0x82, 0xac, 0x28, 0x92, 0xbc, 0x19, 0x62, 0x26, 0x90, 0xb9, 0xbb, 0x61, 0x23, 0xa1, 0xaf, - 0x89, 0x99, 0x10, 0x12, 0x31, 0x04, 0x88, 0xaa, 0x9d, 0x31, 0x22, 0xc0, 0x8b, 0x33, 0xe9, 0xab, - 0x18, 0x76, 0x14, 0xa8, 0xaa, 0x0a, 0x24, 0x01, 0xca, 0x9d, 0x99, 0x88, 0x21, 0x12, 0x62, 0x03, - 0xa9, 0xbb, 0x19, 0x12, 0x8a, 0x98, 0x30, 0x80, 0xeb, 0xad, 0x30, 0x77, 0x07, 0xa9, 0x89, 0x18, - 0x02, 0x89, 0xba, 0xab, 0x8a, 0x20, 0x43, 0x00, 0x65, 0x01, 0xb9, 0x99, 0x08, 0xc0, 0x2b, 0x12, - 0x88, 0x08, 0xa9, 0xbb, 0x7b, 0x77, 0x85, 0x9a, 0x88, 0x10, 0x98, 0x89, 0xba, 0x9c, 0x00, 0x32, - 0x83, 0x39, 0x47, 0x00, 0xaa, 0x89, 0xa9, 0xdc, 0x30, 0x92, 0x00, 0x10, 0x90, 0xbc, 0x75, 0x27, - 0x98, 0x9a, 0x88, 0x80, 0x99, 0x88, 0xcc, 0x09, 0x21, 0x23, 0xa0, 0x40, 0x44, 0x93, 0xab, 0xc9, - 0xac, 0xab, 0x34, 0x00, 0x81, 0x23, 0xea, 0x09, 0x77, 0x22, 0xa8, 0x9b, 0x98, 0x99, 0x99, 0xb8, - 0xad, 0x10, 0x34, 0x22, 0xb9, 0x59, 0x36, 0xa1, 0xaa, 0xda, 0xaa, 0x0a, 0x33, 0x11, 0x41, 0xa1, - 0xaa, 0x3b, 0x77, 0x17, 0xa8, 0x99, 0x98, 0x89, 0x89, 0xb8, 0x8a, 0x42, 0x33, 0x82, 0xbd, 0x72, - 0x13, 0xa0, 0xab, 0xcb, 0xba, 0x2b, 0x16, 0x31, 0x83, 0x9a, 0xb9, 0x78, 0x57, 0x81, 0xaa, 0x99, - 0x98, 0xa9, 0x09, 0xb9, 0x39, 0x45, 0x12, 0xa9, 0x0b, 0x45, 0x02, 0xa8, 0xbb, 0xdc, 0xab, 0x30, - 0x43, 0x34, 0xb0, 0xaa, 0x1a, 0x67, 0x14, 0x98, 0xba, 0x98, 0xba, 0x9a, 0x08, 0x99, 0x62, 0x24, - 0x80, 0xb8, 0x29, 0x25, 0x11, 0xa8, 0xec, 0xbc, 0x0a, 0x31, 0x54, 0x03, 0xca, 0x89, 0x31, 0x45, - 0x02, 0x99, 0xbb, 0xba, 0xac, 0xa9, 0x08, 0x18, 0x47, 0x81, 0x01, 0x9a, 0x88, 0x33, 0x34, 0xc0, - 0xcf, 0x9b, 0x89, 0x52, 0x34, 0xa1, 0x9d, 0x01, 0x32, 0x23, 0x02, 0xda, 0xba, 0xcb, 0x9a, 0x1a, - 0x11, 0x20, 0x30, 0x57, 0xa2, 0xac, 0x19, 0x43, 0x12, 0xca, 0xbe, 0x8a, 0x20, 0x45, 0x03, 0xcb, - 0x18, 0x00, 0x31, 0x23, 0x13, 0xea, 0xbc, 0xba, 0x99, 0x00, 0x03, 0x89, 0x75, 0x14, 0xba, 0xab, - 0x58, 0x23, 0x81, 0xeb, 0xcb, 0x08, 0x41, 0x24, 0x90, 0x9b, 0x80, 0x38, 0x24, 0x42, 0x81, 0xda, - 0xbc, 0x8a, 0x99, 0x18, 0x01, 0x30, 0x77, 0x91, 0xab, 0x9b, 0x44, 0x11, 0x91, 0xbc, 0xbb, 0x18, - 0x54, 0x14, 0xa8, 0x8a, 0x9a, 0x41, 0x33, 0x03, 0x08, 0xfa, 0x9b, 0x9a, 0xaa, 0x1a, 0x04, 0x73, - 0x14, 0xc9, 0xab, 0x29, 0x25, 0x22, 0xb8, 0xae, 0x9a, 0x11, 0x54, 0x02, 0xa9, 0xbb, 0x0a, 0x64, - 0x02, 0x80, 0x00, 0xba, 0xab, 0xab, 0xcc, 0x38, 0x43, 0x25, 0xa9, 0xab, 0x10, 0x18, 0x46, 0x02, - 0xca, 0xad, 0x18, 0x01, 0x64, 0x81, 0xda, 0x9b, 0x40, 0x16, 0x98, 0x18, 0x08, 0xa8, 0x8a, 0xb8, - 0xbd, 0x41, 0x24, 0x90, 0x9a, 0x29, 0xb1, 0x49, 0x35, 0x81, 0xeb, 0x8a, 0x81, 0x19, 0x37, 0xa0, - 0xcd, 0x08, 0x53, 0x92, 0x8a, 0x11, 0x01, 0xc9, 0x89, 0xcc, 0x8b, 0x73, 0x01, 0x8a, 0x08, 0x11, - 0xba, 0x52, 0x22, 0xa0, 0xac, 0x18, 0xb8, 0x78, 0x23, 0xfa, 0x8b, 0x21, 0x34, 0xaa, 0x29, 0x24, - 0x81, 0xcb, 0xba, 0xce, 0x19, 0x25, 0xa0, 0x00, 0x01, 0xa0, 0x8c, 0x44, 0x02, 0xa9, 0x8b, 0x12, - 0xac, 0x50, 0x92, 0xaf, 0x10, 0x31, 0x93, 0x9c, 0x52, 0x13, 0xa1, 0xbc, 0xda, 0xbc, 0x59, 0x13, - 0x19, 0x81, 0x08, 0xd0, 0x3a, 0x26, 0x80, 0xa9, 0x19, 0xa2, 0xad, 0x31, 0xd8, 0x29, 0x02, 0x42, - 0xfa, 0x29, 0x24, 0x12, 0xa8, 0xac, 0xdc, 0x9b, 0x41, 0x22, 0x02, 0x99, 0x00, 0xcc, 0x62, 0x02, - 0xa0, 0x89, 0x21, 0xe9, 0x9a, 0x18, 0x20, 0x12, 0x18, 0xc1, 0x9f, 0x53, 0x22, 0x01, 0xba, 0xcc, - 0xbd, 0x8a, 0x61, 0x23, 0x91, 0x99, 0xb8, 0x2a, 0x27, 0x81, 0x8a, 0x18, 0x82, 0xdc, 0xba, 0x40, - 0x23, 0x00, 0x98, 0xcc, 0x39, 0x36, 0x11, 0x81, 0xcb, 0xdc, 0xab, 0x1b, 0x55, 0x03, 0x98, 0x99, - 0x9a, 0x41, 0x14, 0xa8, 0x08, 0x12, 0xc9, 0xbd, 0x8b, 0x55, 0x81, 0x80, 0x9a, 0x9a, 0x42, 0x14, - 0x11, 0x90, 0xfb, 0xac, 0xab, 0x48, 0x36, 0x01, 0xb9, 0x8a, 0x18, 0x32, 0x02, 0x8a, 0x31, 0x92, - 0xcf, 0xcb, 0x3a, 0x27, 0x00, 0xb9, 0x89, 0x18, 0x32, 0x23, 0x43, 0xe8, 0xbd, 0xbb, 0x9a, 0x72, - 0x16, 0x80, 0xaa, 0x08, 0x10, 0x11, 0x00, 0x18, 0x00, 0xb9, 0xbd, 0xad, 0x71, 0x13, 0xa8, 0xab, - 0x81, 0x00, 0x41, 0x24, 0x13, 0xed, 0xab, 0x8a, 0x19, 0x65, 0x03, 0xb9, 0x9a, 0x10, 0x10, 0x11, - 0x21, 0x80, 0xaa, 0xac, 0xda, 0x0c, 0x56, 0x91, 0xa9, 0x09, 0x80, 0x09, 0x63, 0x23, 0xc8, 0xbd, - 0x9a, 0x99, 0x50, 0x36, 0x80, 0xab, 0x09, 0x00, 0x11, 0x21, 0x03, 0xcb, 0x89, 0x90, 0xbe, 0x51, - 0x24, 0xb8, 0xac, 0x10, 0x98, 0x39, 0x67, 0x00, 0xca, 0x8b, 0x99, 0x19, 0x54, 0x22, 0xa8, 0x8c, - 0x88, 0x00, 0x21, 0x33, 0xc9, 0x8b, 0x20, 0xe9, 0x3a, 0x24, 0x01, 0xeb, 0x0b, 0x01, 0x88, 0x71, - 0x15, 0xa9, 0xbc, 0x99, 0x9a, 0x72, 0x13, 0x02, 0xca, 0x89, 0x08, 0x12, 0x31, 0xa3, 0xae, 0x28, - 0x82, 0x8d, 0x43, 0x90, 0xa0, 0xae, 0x18, 0x81, 0x08, 0x56, 0x91, 0xca, 0x9a, 0xba, 0x39, 0x37, - 0x02, 0x90, 0xaa, 0x88, 0x28, 0x13, 0x12, 0xfb, 0x0a, 0x43, 0xa0, 0x48, 0x02, 0xca, 0xca, 0x9d, - 0x32, 0x81, 0x28, 0x07, 0x9a, 0xba, 0xbb, 0x8e, 0x53, 0x34, 0xa1, 0x98, 0x9a, 0x08, 0x31, 0x91, - 0xda, 0x8b, 0x72, 0x03, 0x19, 0x12, 0xb2, 0xcf, 0xa9, 0x19, 0x15, 0x80, 0x98, 0x88, 0x80, 0xca, - 0xbf, 0x30, 0x54, 0x03, 0x9a, 0x81, 0x0a, 0x00, 0x01, 0xdd, 0x09, 0x18, 0x45, 0x00, 0x11, 0x00, - 0xfa, 0x9b, 0xa8, 0x41, 0x12, 0xb9, 0x9c, 0x21, 0x02, 0xfa, 0x0c, 0x33, 0x44, 0xb0, 0x2a, 0x90, - 0x19, 0x80, 0xf8, 0x8c, 0x10, 0x41, 0x14, 0x11, 0x01, 0xc9, 0xcc, 0x89, 0x9a, 0x44, 0x91, 0xbc, - 0x2a, 0x33, 0x91, 0xbd, 0x58, 0x33, 0x22, 0xda, 0x20, 0xb9, 0x01, 0xb8, 0xbf, 0x29, 0x04, 0x52, - 0x22, 0x32, 0xc0, 0xbb, 0xbe, 0xa9, 0x4a, 0x15, 0xb9, 0x9c, 0x50, 0x01, 0xa8, 0x89, 0x34, 0x22, - 0x03, 0x9e, 0x90, 0x1a, 0xb1, 0xad, 0x00, 0x42, 0x98, 0x63, 0x33, 0x05, 0x99, 0xdb, 0xbb, 0xac, - 0x52, 0x80, 0xaa, 0x18, 0x34, 0xa8, 0xab, 0x62, 0x33, 0x23, 0xb8, 0x9c, 0xb9, 0x9a, 0xcc, 0x38, - 0x32, 0xa3, 0x8f, 0x55, 0x33, 0x82, 0xca, 0xbc, 0xbc, 0x0a, 0x33, 0x88, 0x88, 0x30, 0xa4, 0xad, - 0x48, 0x35, 0x32, 0x81, 0xdb, 0xaa, 0x9a, 0x88, 0x2a, 0x27, 0x91, 0xeb, 0x2a, 0x47, 0x11, 0x90, - 0xb9, 0xdb, 0xab, 0x28, 0x13, 0x21, 0x88, 0x88, 0xdc, 0x29, 0x44, 0x33, 0x81, 0x91, 0xcc, 0xbb, - 0x1a, 0x00, 0x54, 0x02, 0xcb, 0xad, 0x71, 0x33, 0x02, 0xaa, 0xcb, 0xcc, 0x9a, 0x32, 0x33, 0x81, - 0xba, 0xbb, 0x9d, 0x54, 0x34, 0x81, 0x88, 0xa9, 0xea, 0x8b, 0x21, 0x31, 0x32, 0xd8, 0xbd, 0x0b, - 0x57, 0x12, 0x90, 0xa9, 0xca, 0xcb, 0x2a, 0x34, 0x12, 0xa8, 0xcb, 0x9a, 0x49, 0x36, 0x12, 0x98, - 0x98, 0xaa, 0xdc, 0x29, 0x13, 0x22, 0x80, 0xdc, 0xac, 0x61, 0x24, 0x02, 0xa9, 0xba, 0xbc, 0xac, - 0x51, 0x23, 0x81, 0xbb, 0xac, 0x0a, 0x55, 0x22, 0x81, 0x99, 0xa9, 0xb9, 0xad, 0x52, 0x02, 0x81, - 0xb8, 0xcd, 0x29, 0x45, 0x22, 0x91, 0xaa, 0xcb, 0xad, 0x0b, 0x36, 0x01, 0xa8, 0xba, 0x9c, 0x42, - 0x34, 0x12, 0xa8, 0x9a, 0xaa, 0xda, 0x2a, 0x26, 0x00, 0x99, 0xca, 0x8c, 0x53, 0x24, 0x12, 0xa9, - 0xbb, 0xdc, 0xab, 0x58, 0x24, 0x91, 0xaa, 0xac, 0x29, 0x44, 0x23, 0x81, 0xaa, 0x9a, 0xaa, 0xac, - 0x60, 0x13, 0x88, 0xba, 0xac, 0x49, 0x36, 0x14, 0x80, 0xaa, 0xc9, 0xae, 0x8a, 0x62, 0x02, 0x98, - 0xab, 0x8b, 0x51, 0x24, 0x13, 0xa8, 0x99, 0xaa, 0xbb, 0x8a, 0x55, 0x81, 0x99, 0xab, 0x8a, 0x73, - 0x26, 0x01, 0x89, 0x99, 0xdc, 0x9b, 0x19, 0x45, 0x91, 0xa9, 0xab, 0x19, 0x45, 0x23, 0x00, 0x99, - 0xa9, 0xbb, 0x9a, 0x1a, 0x36, 0x91, 0xab, 0xa9, 0x39, 0x77, 0x03, 0x88, 0x01, 0xda, 0xbd, 0x8a, - 0x20, 0x26, 0x98, 0xaa, 0x9a, 0x40, 0x44, 0x11, 0x00, 0x88, 0xbb, 0xab, 0xab, 0x48, 0x25, 0xa8, - 0x99, 0x89, 0x60, 0x36, 0x80, 0x21, 0xa1, 0xcf, 0xbb, 0x89, 0x52, 0x13, 0xa9, 0xbb, 0x09, 0x63, - 0x14, 0x22, 0x81, 0xb8, 0xbd, 0xaa, 0x99, 0x51, 0x04, 0x99, 0x89, 0x08, 0x62, 0x23, 0x21, 0x24, - 0xf9, 0xbd, 0x9b, 0x19, 0x54, 0x81, 0x9a, 0x9a, 0x18, 0x43, 0x43, 0x23, 0x98, 0xcb, 0xdb, 0x9a, - 0x09, 0x44, 0x91, 0x98, 0x08, 0x08, 0x72, 0x22, 0x32, 0x91, 0xee, 0xcb, 0x89, 0x31, 0x14, 0xa0, - 0xa9, 0x9a, 0x21, 0x35, 0x44, 0x02, 0xba, 0xba, 0xad, 0x99, 0x40, 0x13, 0x88, 0x98, 0x88, 0x19, - 0x56, 0x24, 0x02, 0xc0, 0xbf, 0xab, 0x08, 0x34, 0x01, 0xa8, 0xba, 0x19, 0x43, 0x45, 0x24, 0xb0, - 0x9b, 0xca, 0x9b, 0x09, 0x24, 0x11, 0x98, 0x99, 0x11, 0x3a, 0x77, 0x04, 0x08, 0xc9, 0xbd, 0x8a, - 0x20, 0x14, 0x00, 0xb9, 0x8a, 0x12, 0x61, 0x35, 0x82, 0xba, 0xa9, 0xbc, 0x89, 0x18, 0x03, 0x12, - 0xca, 0x30, 0xb2, 0x71, 0x57, 0x80, 0x08, 0xeb, 0xab, 0x08, 0x31, 0x82, 0x80, 0xba, 0x20, 0x81, - 0x67, 0x12, 0x90, 0x9a, 0xb9, 0x9c, 0x98, 0x30, 0x81, 0x80, 0x29, 0x84, 0x2a, 0x77, 0x82, 0x00, - 0xb1, 0xcf, 0x8a, 0x08, 0x32, 0x98, 0x80, 0x19, 0x01, 0x50, 0x26, 0x01, 0x90, 0x9a, 0xbc, 0x9b, - 0x89, 0x04, 0x8a, 0x12, 0x32, 0xa9, 0x75, 0x33, 0x08, 0x43, 0xfa, 0xaf, 0x88, 0x28, 0x82, 0x09, - 0x01, 0x00, 0x19, 0x34, 0x21, 0x23, 0xa0, 0xdb, 0xae, 0x9a, 0x18, 0xb1, 0x3a, 0x25, 0x01, 0x39, - 0x23, 0x36, 0x52, 0x84, 0xee, 0xaa, 0x08, 0x20, 0x91, 0x29, 0x13, 0x91, 0x18, 0x10, 0x55, 0x13, - 0xa8, 0xeb, 0xab, 0x99, 0x11, 0xaa, 0x71, 0x12, 0xa0, 0x00, 0x49, 0x25, 0x34, 0xd0, 0xbe, 0x9a, - 0x80, 0x22, 0xa8, 0x52, 0x12, 0x99, 0x89, 0x38, 0x47, 0x82, 0xba, 0xca, 0x8a, 0x09, 0x81, 0x8b, - 0x54, 0x02, 0xa9, 0x80, 0x72, 0x24, 0x02, 0xfb, 0xac, 0x89, 0x10, 0x82, 0x08, 0x43, 0x92, 0x9a, - 0xa9, 0x73, 0x26, 0xa8, 0x9a, 0xab, 0x08, 0x00, 0xa8, 0x28, 0x35, 0xb1, 0x9a, 0x38, 0x77, 0x12, - 0x98, 0xbd, 0x9c, 0x80, 0x10, 0x01, 0x10, 0x42, 0x90, 0xaa, 0x3a, 0x57, 0x02, 0xa9, 0xac, 0x19, - 0x98, 0x88, 0x88, 0x88, 0x35, 0xb8, 0x19, 0x73, 0x35, 0x10, 0xe9, 0xac, 0x09, 0x98, 0x11, 0x02, - 0x8b, 0x27, 0x88, 0x99, 0x38, 0x27, 0x80, 0xd9, 0x1a, 0x82, 0xab, 0x01, 0xba, 0x1d, 0x25, 0x09, - 0x11, 0x31, 0x14, 0x13, 0xef, 0x88, 0x90, 0x8a, 0x12, 0xb8, 0x4b, 0x26, 0x08, 0xa9, 0x38, 0x34, - 0xa1, 0xae, 0x42, 0xc8, 0x0a, 0xa0, 0xbc, 0x40, 0x14, 0x01, 0x99, 0x30, 0x24, 0xc0, 0x0c, 0x92, - 0xcc, 0x2a, 0x91, 0xbb, 0x71, 0x06, 0x90, 0x9a, 0x20, 0x23, 0xa0, 0x49, 0xa3, 0xbf, 0x18, 0xcb, - 0x8a, 0x73, 0x12, 0xa8, 0x89, 0x40, 0x02, 0x90, 0x10, 0xe9, 0xcb, 0x00, 0x98, 0x8a, 0x57, 0x01, - 0xaa, 0x9a, 0x31, 0x24, 0x01, 0x21, 0xfb, 0x9c, 0x98, 0x9a, 0x20, 0x46, 0x91, 0x9a, 0x89, 0x33, - 0x33, 0x10, 0xa1, 0xdf, 0x9a, 0x08, 0x88, 0x39, 0x47, 0x90, 0xaa, 0x9a, 0x52, 0x24, 0x81, 0xa0, - 0xcd, 0x89, 0x98, 0x89, 0x51, 0x15, 0xa9, 0x8a, 0x18, 0x35, 0x12, 0x90, 0xda, 0xbb, 0x0b, 0x02, - 0x90, 0x70, 0x14, 0xa9, 0xbb, 0x2b, 0x57, 0x22, 0x98, 0xca, 0xac, 0x00, 0x88, 0x80, 0x52, 0x92, - 0xab, 0x89, 0x72, 0x24, 0x01, 0xa9, 0xad, 0xaa, 0x30, 0x92, 0xa9, 0x51, 0x04, 0xba, 0xac, 0x51, - 0x36, 0x82, 0xba, 0xbc, 0x9a, 0x11, 0x91, 0x19, 0x23, 0xc0, 0x9b, 0x32, 0x77, 0x13, 0xa0, 0xbc, - 0x99, 0x89, 0x33, 0xc8, 0x9b, 0x63, 0x92, 0xb9, 0x9a, 0x73, 0x37, 0xa8, 0xab, 0xa9, 0x19, 0x11, - 0xa9, 0x09, 0x01, 0x98, 0x41, 0x63, 0x37, 0x02, 0xcc, 0x99, 0x90, 0x28, 0x92, 0xcc, 0x19, 0x43, - 0x82, 0xba, 0x1b, 0x77, 0x82, 0xaa, 0x8a, 0x89, 0x18, 0x80, 0xbb, 0x80, 0x30, 0x13, 0x43, 0x74, - 0x25, 0xc9, 0x9a, 0x00, 0x88, 0x10, 0xca, 0x9e, 0x20, 0x34, 0x98, 0xa9, 0x58, 0x17, 0xa8, 0x8a, - 0x88, 0x89, 0x88, 0xa8, 0x9c, 0x08, 0x52, 0x21, 0x34, 0x44, 0xa1, 0xad, 0x29, 0x81, 0x99, 0xa9, - 0xdd, 0x1a, 0x43, 0x14, 0x99, 0x8a, 0x53, 0x83, 0xaa, 0x88, 0xab, 0xbc, 0x88, 0xeb, 0x89, 0x30, - 0x25, 0x53, 0x33, 0x02, 0xfb, 0x09, 0x12, 0xa0, 0x9d, 0xba, 0x9d, 0x30, 0x35, 0x02, 0xa8, 0x09, - 0x42, 0x00, 0x11, 0xdc, 0xbb, 0x0c, 0x98, 0x9b, 0x10, 0x30, 0x57, 0x33, 0x03, 0xb9, 0x9c, 0x23, - 0x01, 0xde, 0x9a, 0xaa, 0x19, 0x35, 0x23, 0x03, 0xba, 0x8a, 0x33, 0x56, 0xb0, 0xbc, 0xad, 0x08, - 0x99, 0x10, 0x91, 0x50, 0x36, 0x23, 0x98, 0xaa, 0x30, 0x81, 0xf1, 0x9f, 0x98, 0x89, 0x21, 0x14, - 0x22, 0x82, 0xbc, 0x89, 0x64, 0x83, 0xca, 0xcb, 0x0b, 0x81, 0x09, 0x12, 0x99, 0x64, 0x34, 0x81, - 0x9a, 0x20, 0xa2, 0x89, 0xff, 0x09, 0x88, 0x00, 0x12, 0x22, 0x32, 0xc0, 0xac, 0x38, 0x47, 0xa8, - 0xbb, 0x9d, 0x10, 0x90, 0x10, 0x91, 0x18, 0x45, 0x24, 0x90, 0x1a, 0x13, 0xac, 0xfa, 0x8c, 0x01, - 0x09, 0x10, 0x22, 0x23, 0x22, 0xfa, 0x8a, 0x73, 0x93, 0xbb, 0xbd, 0x09, 0x02, 0x88, 0x11, 0x08, - 0x11, 0x47, 0x13, 0xa8, 0x42, 0xc8, 0xbb, 0xbe, 0x38, 0x81, 0x89, 0x31, 0x34, 0x10, 0x02, 0xaf, - 0x30, 0x27, 0xa9, 0xbd, 0x8b, 0x21, 0x90, 0x08, 0x22, 0x80, 0x48, 0x47, 0x01, 0x18, 0x92, 0xcc, - 0xac, 0x8a, 0x32, 0x98, 0x09, 0x53, 0x12, 0x20, 0xb1, 0x8d, 0x73, 0x92, 0xeb, 0x9c, 0x18, 0x01, - 0x88, 0x08, 0x13, 0x98, 0x72, 0x24, 0x10, 0x10, 0xd9, 0xbd, 0x99, 0x28, 0x12, 0xa8, 0x2a, 0x26, - 0x12, 0x10, 0xa8, 0x39, 0x14, 0xfb, 0xbe, 0x89, 0x11, 0x82, 0x99, 0x40, 0x83, 0x19, 0x56, 0x12, - 0x01, 0xb8, 0xcd, 0xab, 0x88, 0x30, 0x03, 0xca, 0x60, 0x13, 0x11, 0x08, 0x88, 0x81, 0xac, 0xdd, - 0xab, 0x09, 0x33, 0xa0, 0x8a, 0x64, 0x81, 0x21, 0x36, 0x23, 0xb0, 0xad, 0xcd, 0x09, 0x88, 0x31, - 0x91, 0x8c, 0x54, 0x12, 0x90, 0x08, 0x00, 0xdb, 0x99, 0xbc, 0xa9, 0x18, 0x16, 0x9a, 0x18, 0x35, - 0x01, 0x31, 0x36, 0x82, 0xcc, 0xba, 0x9c, 0x80, 0x09, 0x25, 0xba, 0x38, 0x47, 0x01, 0x98, 0x18, - 0xb9, 0x9c, 0xa8, 0x9b, 0xca, 0x48, 0x93, 0x0a, 0x42, 0x37, 0x80, 0x40, 0x23, 0xe9, 0x9a, 0xb9, - 0x8a, 0xa8, 0x4a, 0x84, 0x0a, 0x73, 0x26, 0x98, 0x89, 0x90, 0xac, 0x88, 0x89, 0xa0, 0xab, 0x40, - 0x91, 0x11, 0x72, 0x27, 0x99, 0x21, 0x92, 0x9c, 0xb9, 0x89, 0xa8, 0xeb, 0x48, 0x81, 0x20, 0x57, - 0x82, 0x9a, 0x88, 0xaa, 0x8a, 0x98, 0x00, 0xda, 0x9c, 0x21, 0x22, 0x32, 0x77, 0x90, 0x09, 0x01, - 0xb8, 0x99, 0x89, 0x92, 0xbc, 0x9e, 0x32, 0x11, 0x71, 0x25, 0x98, 0x99, 0xba, 0x9a, 0x88, 0x20, - 0x92, 0xde, 0x8b, 0x43, 0x12, 0x42, 0x14, 0xba, 0x18, 0x81, 0xdb, 0x09, 0x21, 0xd9, 0xeb, 0x0b, - 0x25, 0x11, 0x53, 0x12, 0xc9, 0x9a, 0xba, 0x89, 0x20, 0x22, 0xf9, 0xbd, 0x29, 0x26, 0x01, 0x12, - 0x80, 0x9c, 0x00, 0x98, 0x89, 0x32, 0xa0, 0xcf, 0xdb, 0x40, 0x23, 0x21, 0x23, 0x90, 0xad, 0xb9, - 0x9c, 0x18, 0x23, 0x91, 0xdf, 0x9b, 0x62, 0x13, 0x10, 0x80, 0xa8, 0x8a, 0xa8, 0x88, 0x51, 0x83, - 0xda, 0xcd, 0x8b, 0x54, 0x02, 0x21, 0x81, 0xa9, 0x9a, 0xeb, 0x09, 0x32, 0x81, 0xd9, 0xbd, 0x29, - 0x36, 0x02, 0x01, 0xa9, 0x9a, 0x98, 0x8a, 0x22, 0x27, 0xb8, 0xbd, 0xbc, 0x48, 0x35, 0x21, 0x01, - 0x99, 0xa9, 0xca, 0xab, 0x38, 0x27, 0xb9, 0xdb, 0x9b, 0x62, 0x24, 0x82, 0xa8, 0xaa, 0x80, 0x9a, - 0x20, 0x54, 0x82, 0xcd, 0x9a, 0x8a, 0x52, 0x34, 0x82, 0x90, 0x9a, 0xb9, 0xaa, 0x9b, 0x76, 0xa1, - 0xaa, 0xbb, 0x29, 0x55, 0x14, 0x88, 0xaa, 0x89, 0xa0, 0x08, 0x51, 0x33, 0xea, 0xac, 0x08, 0x08, - 0x52, 0x15, 0x80, 0xa8, 0x89, 0x99, 0xa9, 0x48, 0x17, 0xca, 0x9a, 0x09, 0x30, 0x55, 0x82, 0xa9, - 0xaa, 0x88, 0x00, 0x10, 0x54, 0x91, 0xcd, 0x0a, 0x81, 0x08, 0x64, 0x01, 0x88, 0x99, 0x99, 0x90, - 0x09, 0x55, 0xa0, 0xae, 0x88, 0x00, 0x51, 0x33, 0xb0, 0xba, 0xba, 0x28, 0x02, 0x61, 0x04, 0xe9, - 0xab, 0x20, 0x90, 0x30, 0x27, 0x80, 0x98, 0xb9, 0x18, 0xa8, 0x63, 0x13, 0xfb, 0x8d, 0x80, 0x18, - 0x44, 0x82, 0xa9, 0x9a, 0xaa, 0x41, 0x11, 0x33, 0xb8, 0xcf, 0x0a, 0x02, 0x09, 0x52, 0x22, 0x90, - 0xa9, 0xac, 0x02, 0x49, 0x06, 0x91, 0xbe, 0x0a, 0x80, 0x61, 0x14, 0x90, 0xb9, 0xb9, 0x8a, 0x35, - 0x31, 0x91, 0xdb, 0xad, 0x20, 0x91, 0x20, 0x22, 0x14, 0x88, 0xda, 0x0b, 0x13, 0x54, 0x80, 0xd0, - 0xae, 0x18, 0x08, 0x54, 0x01, 0xa8, 0xaa, 0xba, 0x38, 0x27, 0x82, 0xa9, 0xda, 0x0a, 0x21, 0x08, - 0x10, 0x40, 0x12, 0x98, 0xbe, 0x19, 0x45, 0x02, 0x08, 0xfa, 0x8c, 0x00, 0x38, 0x34, 0x90, 0xa9, - 0xdb, 0x9a, 0x71, 0x23, 0x98, 0xaa, 0xbc, 0x38, 0x01, 0x88, 0x00, 0x53, 0x13, 0xc9, 0xcc, 0x58, - 0x24, 0x98, 0x80, 0xbd, 0x08, 0x88, 0x61, 0x13, 0x99, 0xc9, 0xbb, 0x09, 0x67, 0x81, 0x99, 0xb9, - 0x1a, 0x21, 0x80, 0x99, 0x20, 0x53, 0x91, 0xba, 0x9d, 0x56, 0x81, 0x89, 0xa8, 0x89, 0x99, 0x8a, - 0x55, 0x82, 0x89, 0xcb, 0x9b, 0x78, 0x16, 0xa0, 0xaa, 0x99, 0x20, 0x02, 0xaa, 0x88, 0x40, 0x14, - 0x89, 0xba, 0x79, 0x25, 0xa8, 0x0a, 0x01, 0x98, 0xcc, 0x2a, 0x26, 0x88, 0xaa, 0xab, 0x09, 0x67, - 0x82, 0xba, 0x99, 0x08, 0x12, 0xb0, 0x8a, 0xa9, 0x73, 0x12, 0x98, 0x0b, 0x44, 0x13, 0xae, 0x31, - 0x82, 0xda, 0xac, 0x32, 0x83, 0xba, 0x88, 0xbb, 0x70, 0x37, 0xb0, 0xac, 0x08, 0x00, 0x02, 0xa8, - 0xc9, 0x8b, 0x73, 0x83, 0x99, 0x50, 0x01, 0xb0, 0x2d, 0x16, 0x98, 0xaa, 0x0a, 0x12, 0xb8, 0x0c, - 0x91, 0x1c, 0x57, 0x80, 0xb9, 0x0a, 0x80, 0x10, 0x02, 0xca, 0xbd, 0x2a, 0x37, 0xa1, 0x19, 0x05, - 0x8a, 0xb9, 0x72, 0x83, 0x99, 0xa9, 0x8a, 0x80, 0xba, 0x58, 0xb2, 0x71, 0x85, 0x9b, 0x99, 0x18, - 0x00, 0x42, 0xc1, 0xcc, 0x8b, 0x40, 0x24, 0x88, 0x53, 0xc8, 0x8a, 0x08, 0x27, 0x90, 0x88, 0xba, - 0x89, 0x88, 0xa9, 0x43, 0x31, 0x37, 0xeb, 0x89, 0x00, 0x81, 0x28, 0x84, 0xdb, 0xac, 0x08, 0x43, - 0x03, 0x51, 0x92, 0xaf, 0x18, 0x40, 0x03, 0x08, 0xb8, 0xbc, 0x89, 0x98, 0x29, 0x45, 0x53, 0xc0, - 0xac, 0x18, 0x21, 0x90, 0x32, 0xc0, 0xbe, 0x8a, 0x20, 0x43, 0x23, 0x15, 0xea, 0x8b, 0x28, 0x34, - 0x02, 0x80, 0xea, 0xab, 0x08, 0x80, 0x40, 0x35, 0x82, 0xcd, 0xaa, 0x31, 0x03, 0x18, 0x03, 0xed, - 0x9b, 0x08, 0x32, 0x43, 0x33, 0xb2, 0xcf, 0x89, 0x41, 0x23, 0x10, 0xb0, 0xcd, 0x8a, 0x80, 0x10, - 0x73, 0x12, 0xa9, 0xbd, 0x0a, 0x34, 0x80, 0x11, 0xc1, 0xbd, 0x89, 0x28, 0x33, 0x44, 0x03, 0xd9, - 0xbc, 0x18, 0x34, 0x23, 0x01, 0xfa, 0xab, 0x89, 0x10, 0x31, 0x36, 0x80, 0xda, 0xac, 0x38, 0x14, - 0x00, 0x81, 0xeb, 0x9b, 0x08, 0x31, 0x43, 0x43, 0x81, 0xdc, 0x9b, 0x30, 0x44, 0x13, 0xb0, 0xbd, - 0xaa, 0x18, 0x21, 0x62, 0x04, 0xa8, 0xcc, 0x9a, 0x52, 0x02, 0x00, 0xb8, 0xbc, 0x8a, 0x28, 0x33, - 0x63, 0x33, 0xb0, 0xbf, 0x9a, 0x52, 0x24, 0x82, 0xca, 0xab, 0x89, 0x10, 0x22, 0x54, 0x82, 0xdb, - 0xbb, 0x1a, 0x45, 0x11, 0xa8, 0xbb, 0xba, 0x88, 0x41, 0x33, 0x64, 0x03, 0xda, 0xbb, 0x09, 0x55, - 0x13, 0xb0, 0xbb, 0xab, 0x08, 0x12, 0x43, 0x36, 0xb0, 0xae, 0xaa, 0x20, 0x35, 0x92, 0xbb, 0xab, - 0x8b, 0x08, 0x52, 0x43, 0x45, 0xa1, 0xcb, 0xab, 0x39, 0x57, 0x81, 0x99, 0xaa, 0x99, 0x10, 0x20, - 0x52, 0x14, 0xda, 0xaa, 0x89, 0x30, 0x17, 0xa8, 0x9a, 0x99, 0x98, 0x00, 0x42, 0x53, 0x15, 0xb8, - 0xcb, 0x9b, 0x71, 0x15, 0x98, 0x99, 0x9a, 0x09, 0x01, 0x30, 0x53, 0xa3, 0xbd, 0xa9, 0x89, 0x72, - 0x93, 0xaa, 0xa9, 0x99, 0x08, 0x11, 0x45, 0x53, 0x93, 0xbb, 0xbd, 0x0a, 0x66, 0x01, 0x89, 0xaa, - 0x99, 0x10, 0x08, 0x33, 0x34, 0xe0, 0x9b, 0x9a, 0x1a, 0x36, 0xb0, 0xa9, 0x9a, 0x99, 0x00, 0x50, - 0x35, 0x44, 0xa0, 0xcb, 0xbb, 0x58, 0x26, 0x81, 0xb9, 0xaa, 0x08, 0x80, 0x30, 0x43, 0x14, 0xeb, - 0x99, 0xa9, 0x29, 0x15, 0xa8, 0xb9, 0x9a, 0x89, 0x10, 0x56, 0x33, 0x24, 0xca, 0xac, 0x9b, 0x72, - 0x14, 0x90, 0xba, 0x99, 0x00, 0x18, 0x22, 0x53, 0x92, 0xbc, 0xba, 0xae, 0x21, 0x04, 0x88, 0xb9, - 0xab, 0x89, 0x61, 0x24, 0x35, 0x02, 0xdb, 0xbb, 0x1b, 0x46, 0x13, 0xa9, 0xca, 0x89, 0x81, 0x00, - 0x31, 0x16, 0x90, 0xaa, 0xdc, 0x8b, 0x11, 0x12, 0x80, 0xdb, 0x0a, 0x28, 0x34, 0x54, 0x23, 0xa2, - 0xbe, 0xac, 0x30, 0x35, 0x03, 0xba, 0xbc, 0x18, 0x10, 0x88, 0x54, 0x02, 0xa0, 0xcc, 0xbc, 0x89, - 0x21, 0x24, 0xb0, 0xac, 0x08, 0x21, 0x43, 0x26, 0x23, 0xb1, 0xcf, 0x8a, 0x31, 0x53, 0x82, 0xba, - 0x9c, 0x11, 0x90, 0x29, 0x16, 0x11, 0xc0, 0xbc, 0xac, 0x89, 0x31, 0x06, 0xb9, 0x09, 0x12, 0x00, - 0x43, 0x25, 0x12, 0xf8, 0xac, 0x08, 0x31, 0x35, 0x90, 0xcb, 0x09, 0x02, 0xa9, 0x61, 0x12, 0x00, - 0xe9, 0xbb, 0xcb, 0x19, 0x53, 0x92, 0x9b, 0x20, 0x82, 0x39, 0x46, 0x02, 0x21, 0xec, 0x9b, 0x08, - 0x43, 0x34, 0xb9, 0xab, 0x28, 0xa1, 0x2a, 0x47, 0x80, 0x80, 0xcc, 0xca, 0xab, 0x20, 0x35, 0xa8, - 0x19, 0x22, 0xb9, 0x60, 0x43, 0x10, 0x93, 0xbe, 0x9c, 0x39, 0x34, 0x13, 0xba, 0x9b, 0x21, 0xba, - 0x71, 0x04, 0x88, 0x80, 0xbd, 0xbe, 0x0b, 0x21, 0x23, 0x99, 0x53, 0x81, 0x8c, 0x53, 0x02, 0x20, - 0xb2, 0xcf, 0x8b, 0x32, 0x14, 0x02, 0xba, 0x89, 0x02, 0x09, 0x45, 0x90, 0x09, 0xa0, 0xef, 0x9c, - 0x18, 0x18, 0x12, 0x20, 0x23, 0xc9, 0x2a, 0x26, 0x10, 0x12, 0xd9, 0xce, 0x19, 0x14, 0x01, 0x81, - 0xa9, 0x10, 0xa0, 0x30, 0x05, 0x99, 0x18, 0xe8, 0xcf, 0x89, 0x81, 0x39, 0x23, 0x22, 0x92, 0xbd, - 0x40, 0x12, 0x33, 0x11, 0xfd, 0x9c, 0x20, 0x03, 0x20, 0x92, 0x0b, 0x01, 0xa9, 0x41, 0x01, 0x88, - 0x31, 0xff, 0x9e, 0x08, 0x98, 0x40, 0x22, 0x22, 0xb9, 0x9c, 0x21, 0x33, 0x24, 0xb2, 0xff, 0x09, - 0x11, 0x81, 0x21, 0x90, 0x18, 0x91, 0xaa, 0x11, 0x11, 0x21, 0xc4, 0xff, 0x8a, 0x90, 0x89, 0x53, - 0x22, 0x82, 0xba, 0x9b, 0x42, 0x34, 0x12, 0xfa, 0xac, 0x18, 0x12, 0x10, 0x13, 0x88, 0x12, 0xc0, - 0x9c, 0x31, 0x02, 0x22, 0xfa, 0xdf, 0x89, 0xa0, 0x28, 0x25, 0x13, 0xa0, 0xbb, 0x1b, 0x45, 0x22, - 0x80, 0xcd, 0x9b, 0x30, 0x02, 0x31, 0x02, 0x10, 0x02, 0xdd, 0x0a, 0x33, 0x11, 0x82, 0xef, 0xbb, - 0x89, 0x88, 0x52, 0x44, 0x01, 0xa9, 0xac, 0x38, 0x25, 0x11, 0xa8, 0xcd, 0x8a, 0x31, 0x11, 0x12, - 0x12, 0x11, 0xd0, 0xac, 0x39, 0x23, 0x21, 0xc1, 0xff, 0x9a, 0x88, 0x01, 0x32, 0x35, 0x91, 0xdb, - 0x8a, 0x42, 0x13, 0x01, 0xd9, 0xbc, 0x1a, 0x33, 0x12, 0x20, 0x23, 0x11, 0xdc, 0x9b, 0x21, 0x23, - 0x22, 0xf8, 0xef, 0x89, 0x00, 0x01, 0x32, 0x14, 0xa8, 0xad, 0x18, 0x33, 0x13, 0x90, 0xfb, 0xac, - 0x20, 0x23, 0x01, 0x30, 0x12, 0xa0, 0xad, 0x8a, 0x31, 0x21, 0x23, 0xff, 0x9e, 0x08, 0x00, 0x01, - 0x43, 0x03, 0xda, 0x8a, 0x20, 0x33, 0x82, 0xa9, 0xcf, 0x8a, 0x42, 0x12, 0x18, 0x21, 0x01, 0xaa, - 0x99, 0xab, 0x21, 0x32, 0xb4, 0xff, 0x8f, 0x00, 0x00, 0x10, 0x33, 0x91, 0xbc, 0x08, 0x22, 0x33, - 0x90, 0xfa, 0xae, 0x28, 0x33, 0x01, 0x01, 0x41, 0x98, 0x08, 0xa9, 0x9c, 0x18, 0x22, 0xf8, 0xdf, - 0x08, 0x00, 0x10, 0x21, 0x24, 0xc8, 0x8a, 0x10, 0x11, 0x14, 0xa9, 0xdd, 0x8a, 0x41, 0x13, 0x11, - 0x08, 0x12, 0x89, 0x02, 0xdc, 0x8a, 0x01, 0x82, 0xef, 0x8a, 0x08, 0x00, 0x22, 0x41, 0x04, 0xab, - 0x09, 0x01, 0x52, 0x82, 0xcc, 0xbd, 0x18, 0x44, 0x12, 0x81, 0x19, 0x81, 0x38, 0xb3, 0xce, 0x09, - 0x08, 0xc1, 0xbd, 0x89, 0x80, 0x30, 0x25, 0x31, 0x92, 0x8d, 0x08, 0x08, 0x44, 0xb8, 0xce, 0x8a, - 0x31, 0x26, 0x21, 0x90, 0x09, 0x11, 0x42, 0xd9, 0xac, 0x88, 0x00, 0xb9, 0xbb, 0x9b, 0x98, 0x73, - 0x15, 0x21, 0xb0, 0x09, 0xa8, 0x48, 0x04, 0xfb, 0x9d, 0x00, 0x62, 0x12, 0x01, 0xb8, 0x28, 0x32, - 0x83, 0xde, 0x89, 0x89, 0x88, 0x89, 0xb8, 0x0a, 0xaa, 0x66, 0x81, 0x21, 0xa8, 0x98, 0x9b, 0x44, - 0xa1, 0xcf, 0x19, 0x10, 0x35, 0x11, 0x82, 0xac, 0x41, 0x23, 0xd8, 0xab, 0x99, 0x8a, 0x88, 0x12, - 0xbb, 0xc8, 0x1e, 0x16, 0x80, 0x12, 0x99, 0xaa, 0x49, 0x04, 0xfb, 0x9b, 0x10, 0x62, 0x15, 0x10, - 0xa8, 0x8b, 0x53, 0x81, 0xba, 0x9a, 0xba, 0x8a, 0x28, 0x93, 0x1b, 0xfc, 0x58, 0x82, 0x18, 0x82, - 0xbc, 0x09, 0x34, 0xa0, 0xbf, 0x0b, 0x21, 0x57, 0x02, 0x00, 0xab, 0x19, 0x16, 0xa8, 0x8a, 0xb8, - 0xab, 0x00, 0x31, 0x91, 0x90, 0xbf, 0x33, 0x11, 0x21, 0xf8, 0x9d, 0x21, 0x82, 0xa9, 0xeb, 0x0a, - 0x72, 0x35, 0x00, 0x98, 0xaa, 0x40, 0x93, 0xab, 0x98, 0xdc, 0x08, 0x80, 0x20, 0x21, 0xd1, 0x8a, - 0x30, 0x04, 0x99, 0xde, 0x19, 0x23, 0x98, 0x98, 0xbf, 0x18, 0x56, 0x03, 0x80, 0x99, 0x98, 0x31, - 0xc0, 0x8a, 0xa8, 0x9d, 0x01, 0x8a, 0x33, 0x15, 0xda, 0x8a, 0x34, 0x90, 0xdb, 0x9d, 0x31, 0x81, - 0x28, 0xe0, 0xac, 0x50, 0x35, 0x01, 0x98, 0x98, 0x89, 0x13, 0xcb, 0x99, 0xb9, 0x3a, 0xc3, 0x2b, - 0x27, 0x92, 0xcb, 0x39, 0x05, 0xb9, 0xbd, 0x0a, 0x33, 0x80, 0x32, 0xfd, 0x8a, 0x63, 0x24, 0x80, - 0x88, 0x99, 0x19, 0x91, 0xba, 0xaa, 0x99, 0x32, 0xdb, 0x72, 0x13, 0xb0, 0xad, 0x32, 0x91, 0xdc, - 0x9c, 0x08, 0x22, 0x10, 0xa2, 0xaf, 0x38, 0x56, 0x02, 0x08, 0xa8, 0x89, 0x88, 0x80, 0xca, 0x88, - 0x08, 0x98, 0x3a, 0x37, 0x13, 0xfa, 0x1a, 0x11, 0xb8, 0xbf, 0x89, 0x20, 0x13, 0x81, 0xca, 0x0b, - 0x72, 0x36, 0x01, 0x80, 0xa9, 0x99, 0x88, 0xb0, 0x9d, 0x11, 0x98, 0x09, 0x53, 0x32, 0x94, 0x9f, - 0x01, 0x01, 0xec, 0x9b, 0x98, 0x41, 0x12, 0xa9, 0x89, 0x80, 0x73, 0x27, 0x10, 0x98, 0x99, 0x89, - 0x89, 0xb8, 0x2a, 0x93, 0x9c, 0x32, 0x13, 0x46, 0xc0, 0x0a, 0x10, 0xd9, 0xbe, 0x9b, 0x09, 0x54, - 0xa1, 0x89, 0x11, 0x09, 0x57, 0x11, 0x00, 0x99, 0x99, 0x98, 0x9a, 0xaa, 0x42, 0xa8, 0x39, 0x15, - 0x18, 0x06, 0x9b, 0x08, 0x01, 0xed, 0xbc, 0x9b, 0x40, 0x14, 0xa9, 0x20, 0x92, 0x60, 0x16, 0x10, - 0x88, 0x99, 0x08, 0xb8, 0x9d, 0x19, 0x83, 0x8a, 0x44, 0x92, 0x40, 0xb1, 0x0b, 0x89, 0xa0, 0xef, - 0xdb, 0x0a, 0x42, 0x91, 0x89, 0x23, 0x88, 0x65, 0x02, 0x80, 0x98, 0x09, 0x01, 0xec, 0x89, 0x11, - 0x88, 0x28, 0x24, 0x88, 0x23, 0xca, 0x08, 0x9a, 0xd0, 0xce, 0xae, 0x29, 0x14, 0xa8, 0x10, 0x02, - 0x30, 0x37, 0x90, 0x80, 0x89, 0x20, 0xb2, 0xdf, 0x18, 0x81, 0x88, 0x22, 0x00, 0x30, 0x84, 0x9b, - 0xa0, 0x1a, 0xf9, 0xcf, 0x9c, 0x41, 0x81, 0x89, 0x11, 0x11, 0x51, 0x14, 0x99, 0x88, 0x28, 0x12, - 0xf9, 0x8f, 0x11, 0x88, 0x20, 0x01, 0x88, 0x18, 0x92, 0x8c, 0x00, 0x21, 0xfc, 0xcd, 0x0a, 0x23, - 0x90, 0x10, 0x02, 0x02, 0x73, 0x93, 0x8b, 0x10, 0x32, 0x82, 0xff, 0x1a, 0x01, 0x18, 0x12, 0x81, - 0x99, 0x20, 0xd0, 0x19, 0x21, 0x93, 0xff, 0xcb, 0x28, 0x02, 0x08, 0x21, 0x11, 0x80, 0x45, 0xb8, - 0x19, 0x21, 0x34, 0xe0, 0xad, 0x29, 0x01, 0x20, 0x13, 0xa0, 0x9b, 0x13, 0x9e, 0x21, 0x32, 0xf1, - 0xce, 0x9c, 0x31, 0x80, 0x20, 0x11, 0x01, 0x38, 0x07, 0xab, 0x21, 0x21, 0x03, 0xfb, 0x9d, 0x20, - 0x10, 0x22, 0x82, 0xba, 0x1a, 0xb2, 0x2c, 0x17, 0x81, 0xfa, 0xbd, 0x0a, 0x22, 0x00, 0x21, 0x01, - 0x80, 0x72, 0xa3, 0x8a, 0x22, 0x21, 0x91, 0xde, 0x9a, 0x22, 0x12, 0x43, 0xa0, 0xad, 0x10, 0xa8, - 0x73, 0x01, 0xa8, 0xce, 0xcb, 0x19, 0x22, 0x10, 0x12, 0x01, 0x89, 0x36, 0xa8, 0x38, 0x02, 0x21, - 0xb2, 0xff, 0x09, 0x21, 0x21, 0x13, 0xda, 0x9b, 0x01, 0x28, 0x27, 0x98, 0xca, 0xdb, 0x9d, 0x28, - 0x02, 0x20, 0x12, 0x98, 0x48, 0x14, 0x89, 0x03, 0xa8, 0x41, 0xc2, 0xbe, 0x19, 0x34, 0x42, 0xa1, - 0xcc, 0x09, 0x00, 0xc2, 0x02, 0x00, 0x00, 0x7d, 0x0b, 0x02, 0x01, 0x00, 0x28, 0x08, 0x00, 0x00, - 0x00, 0x00, 0x18, 0x00, 0x78, 0x77, 0x77, 0x37, 0xc9, 0x8b, 0xa4, 0x8e, 0x61, 0xc3, 0x8e, 0x20, - 0x98, 0x88, 0x43, 0x9a, 0xd1, 0x48, 0x80, 0x10, 0x11, 0x81, 0x89, 0xa0, 0x88, 0x8a, 0xa1, 0x62, - 0xfa, 0xab, 0x2a, 0xa1, 0x0e, 0x02, 0x62, 0x02, 0x12, 0x30, 0x01, 0x00, 0xc0, 0x0b, 0xc0, 0xbc, - 0xdb, 0x68, 0x84, 0xbc, 0x19, 0x00, 0x80, 0x30, 0xb2, 0x1b, 0x84, 0xaa, 0x18, 0x14, 0x71, 0xb1, - 0x2c, 0x16, 0xa9, 0x89, 0x00, 0x88, 0x9a, 0x88, 0xab, 0x0d, 0x34, 0xf9, 0x2a, 0x17, 0xcb, 0x18, - 0xb8, 0x40, 0x91, 0x49, 0x24, 0x90, 0x19, 0x03, 0xba, 0xcb, 0x30, 0x24, 0x98, 0x08, 0x81, 0x40, - 0xb3, 0xbe, 0xa9, 0x19, 0x80, 0x90, 0x51, 0xb9, 0xff, 0x0c, 0x23, 0x11, 0x18, 0x35, 0x03, 0xa9, - 0x08, 0x90, 0x20, 0xfb, 0xa9, 0x2b, 0x95, 0x3b, 0x15, 0xeb, 0x9a, 0x88, 0x80, 0x8a, 0x12, 0x50, - 0x93, 0x1d, 0x15, 0x88, 0x98, 0x28, 0x82, 0x30, 0x18, 0xf2, 0x9f, 0x20, 0x81, 0xbc, 0x1b, 0x12, - 0x00, 0x29, 0x77, 0xa1, 0xad, 0x19, 0x01, 0x00, 0x90, 0x1a, 0x37, 0x80, 0x20, 0x92, 0x9b, 0xea, - 0x9b, 0x41, 0x82, 0x00, 0x01, 0x18, 0x03, 0xee, 0x09, 0x01, 0x99, 0x52, 0x88, 0x21, 0x80, 0x99, - 0x90, 0xac, 0x29, 0x47, 0x90, 0x31, 0x34, 0xb8, 0xae, 0xba, 0x2a, 0xb1, 0x9d, 0x53, 0x01, 0x00, - 0xd9, 0x0a, 0x02, 0x01, 0x19, 0xb1, 0x1d, 0x17, 0x98, 0xba, 0x3a, 0x25, 0xb2, 0x9f, 0x32, 0xb8, - 0xcb, 0x29, 0x04, 0x8b, 0x21, 0x13, 0x40, 0x37, 0x01, 0xda, 0x9c, 0x21, 0xa0, 0xdb, 0xab, 0x28, - 0x13, 0x61, 0x26, 0x98, 0x88, 0x00, 0xb8, 0xaa, 0xac, 0x20, 0x81, 0x58, 0x27, 0xc9, 0x28, 0x93, - 0xbc, 0x18, 0x21, 0x01, 0x62, 0x83, 0x40, 0x82, 0xca, 0x0b, 0x13, 0xfb, 0x0a, 0x08, 0x91, 0xbf, - 0x10, 0x80, 0x91, 0x1a, 0x36, 0x81, 0x18, 0x22, 0x21, 0xa0, 0xed, 0xac, 0x22, 0xb1, 0x2a, 0x35, - 0xb8, 0xbd, 0xaa, 0x00, 0xaa, 0x02, 0x8b, 0x42, 0x67, 0x01, 0x90, 0x9a, 0x10, 0x46, 0x03, 0x10, - 0x98, 0xbb, 0xad, 0xa9, 0xae, 0x09, 0xa0, 0xac, 0x73, 0x93, 0x89, 0x32, 0x90, 0x89, 0x34, 0x91, - 0x89, 0x24, 0xfc, 0x0c, 0x32, 0x03, 0xb9, 0x20, 0x25, 0xa1, 0x10, 0xa0, 0xac, 0x9a, 0x9c, 0x28, - 0x22, 0x25, 0xb9, 0x99, 0xdc, 0xac, 0x51, 0xb0, 0x8c, 0x08, 0x71, 0x23, 0x82, 0x00, 0xc0, 0x8c, - 0x08, 0xb8, 0x1a, 0xa0, 0x61, 0x91, 0x09, 0x91, 0xdc, 0xab, 0x63, 0x02, 0xd9, 0x8a, 0x02, 0xab, - 0x38, 0x36, 0x81, 0x0a, 0x54, 0x01, 0x20, 0x94, 0x0a, 0x26, 0xfb, 0x8b, 0x98, 0x99, 0x21, 0x01, - 0x81, 0xda, 0xbc, 0x19, 0x34, 0x02, 0x11, 0x52, 0x13, 0x98, 0x51, 0x34, 0xe1, 0xae, 0x31, 0x82, - 0x0a, 0x43, 0xa9, 0x9a, 0x9a, 0x08, 0x10, 0xea, 0x9c, 0x8a, 0x44, 0x43, 0x23, 0xb9, 0x9d, 0x80, - 0x9a, 0x21, 0x90, 0xad, 0x18, 0x32, 0x15, 0x98, 0xaa, 0x41, 0xfb, 0x8c, 0x90, 0x89, 0x53, 0x33, - 0x81, 0xab, 0x12, 0xeb, 0xca, 0x1a, 0x12, 0x12, 0xea, 0x8a, 0x72, 0x92, 0x8a, 0x44, 0x22, 0x20, - 0xd8, 0xac, 0xbb, 0x9a, 0x73, 0x92, 0x18, 0x02, 0x81, 0xcb, 0xa9, 0xaa, 0x09, 0x51, 0x12, 0xb0, - 0x78, 0x06, 0x08, 0x00, 0x90, 0x18, 0x03, 0x42, 0x91, 0x60, 0x24, 0x81, 0xdc, 0x9b, 0x21, 0xc9, - 0x99, 0x88, 0xd9, 0x09, 0x11, 0x40, 0x15, 0xd9, 0xbb, 0x18, 0x81, 0x51, 0x03, 0xbc, 0x38, 0x23, - 0x01, 0xa2, 0xbf, 0x19, 0xa0, 0xbd, 0xac, 0x71, 0x13, 0x89, 0x31, 0x33, 0x33, 0x12, 0xf9, 0xbe, - 0xaa, 0xbb, 0x1b, 0x53, 0x53, 0x13, 0x91, 0xab, 0x22, 0xa9, 0x9a, 0x98, 0x78, 0x46, 0x01, 0x9a, - 0x8a, 0xcc, 0x8b, 0x09, 0x80, 0x89, 0x80, 0x90, 0x58, 0x16, 0x42, 0x83, 0x18, 0x45, 0x03, 0x98, - 0x20, 0x20, 0xc3, 0x9d, 0x11, 0x88, 0xcc, 0xca, 0x9a, 0xa8, 0xcc, 0xac, 0x99, 0x89, 0x10, 0x25, - 0x12, 0x62, 0x24, 0x90, 0x09, 0x22, 0xb8, 0xbd, 0x10, 0x11, 0x08, 0x91, 0x18, 0xc0, 0xcf, 0x09, - 0x20, 0x53, 0x13, 0x08, 0xd8, 0x9c, 0x88, 0x20, 0xfa, 0xbc, 0x8a, 0x90, 0x40, 0x45, 0x34, 0x88, - 0x08, 0x01, 0x00, 0x8a, 0xa8, 0xab, 0xfc, 0x8c, 0x31, 0x03, 0x09, 0xa1, 0xad, 0x88, 0x21, 0x11, - 0x03, 0x1a, 0x77, 0x22, 0x02, 0x89, 0x99, 0xa9, 0x08, 0x44, 0x12, 0xc9, 0x38, 0x31, 0xd1, 0xbe, - 0x8a, 0xda, 0x99, 0xb9, 0xaf, 0x8a, 0x21, 0x32, 0x35, 0xa1, 0x9c, 0x19, 0x91, 0x51, 0x36, 0x91, - 0xaa, 0x38, 0x36, 0xc8, 0xad, 0x38, 0x22, 0x23, 0xb8, 0xcc, 0x9c, 0x98, 0xab, 0x89, 0x20, 0x53, - 0x11, 0x81, 0x80, 0xba, 0x60, 0x13, 0xba, 0x2a, 0x77, 0x12, 0x88, 0xab, 0xca, 0x19, 0x22, 0x22, - 0xb8, 0xcc, 0x58, 0x14, 0x99, 0x0a, 0x90, 0x9a, 0x88, 0xac, 0x18, 0x36, 0x33, 0x44, 0x54, 0x34, - 0x01, 0xa9, 0xbc, 0xab, 0xe9, 0x8a, 0x22, 0x81, 0xab, 0xa0, 0xcc, 0x09, 0x90, 0x1a, 0x83, 0xef, - 0xab, 0x20, 0x15, 0x10, 0x21, 0x02, 0x11, 0x62, 0x14, 0xb9, 0x8c, 0x63, 0x02, 0xa8, 0x8a, 0x31, - 0xe9, 0xbb, 0xbb, 0xcd, 0x09, 0x52, 0x02, 0xa9, 0xa9, 0x28, 0x35, 0x01, 0xca, 0x8b, 0x45, 0x03, - 0xb9, 0x1a, 0x81, 0x32, 0x08, 0x66, 0x12, 0xb8, 0x8b, 0xb0, 0xad, 0x19, 0x01, 0xea, 0x08, 0x98, - 0x31, 0x21, 0x14, 0x43, 0x11, 0x84, 0x9c, 0x61, 0x37, 0x12, 0x91, 0xeb, 0xcc, 0x8a, 0x99, 0x88, - 0x52, 0x03, 0x11, 0x90, 0x09, 0x02, 0xfd, 0x9a, 0x08, 0x99, 0x28, 0x36, 0x02, 0x99, 0xaa, 0x28, - 0x27, 0x81, 0x08, 0x81, 0xba, 0x51, 0x84, 0x89, 0x01, 0xda, 0x9b, 0x08, 0xfa, 0x9a, 0x81, 0xac, - 0x40, 0x83, 0xdc, 0x89, 0x10, 0x11, 0x45, 0x12, 0x88, 0x80, 0x21, 0x36, 0x81, 0xab, 0x08, 0x00, - 0xa0, 0x00, 0xfb, 0xbf, 0x2a, 0x24, 0x81, 0x98, 0x9b, 0x30, 0x47, 0xa0, 0xaa, 0x9a, 0x00, 0x32, - 0x12, 0x55, 0x02, 0xca, 0x8a, 0xa0, 0xbd, 0x30, 0x05, 0xaa, 0x99, 0x08, 0x21, 0x04, 0xce, 0x8a, - 0xa9, 0x8b, 0x18, 0x34, 0x53, 0x25, 0x12, 0x00, 0x11, 0x24, 0xdb, 0x8a, 0x98, 0xa9, 0x19, 0xf8, - 0xad, 0x28, 0x53, 0x22, 0x98, 0x89, 0x99, 0xf8, 0xae, 0x98, 0x08, 0x81, 0x11, 0x28, 0x35, 0x98, - 0x00, 0x32, 0x83, 0x8b, 0x77, 0x14, 0x10, 0x10, 0x90, 0x9a, 0xc8, 0x8b, 0xb9, 0xca, 0x9b, 0x01, - 0x89, 0x80, 0xec, 0xbc, 0x09, 0x55, 0x22, 0x90, 0x58, 0x24, 0x08, 0xb8, 0xab, 0xaa, 0x31, 0xa9, - 0xfa, 0xad, 0x88, 0x30, 0x12, 0x00, 0x9b, 0x21, 0x55, 0x12, 0xa0, 0xcf, 0x89, 0x10, 0x81, 0x42, - 0x34, 0x82, 0x08, 0x02, 0xba, 0xee, 0xab, 0x08, 0x88, 0x73, 0x24, 0x02, 0x89, 0xba, 0x9c, 0xba, - 0x8c, 0x98, 0xcc, 0x0a, 0x10, 0x01, 0x53, 0x44, 0x12, 0x00, 0x90, 0x09, 0x36, 0x90, 0x30, 0x33, - 0x81, 0xcb, 0x30, 0xc9, 0x29, 0x25, 0xd1, 0x9d, 0x99, 0x89, 0xa8, 0xaa, 0xdc, 0xbc, 0x89, 0x00, - 0x41, 0x55, 0x92, 0x0a, 0x42, 0x33, 0x91, 0x9b, 0xab, 0x81, 0xb9, 0x8b, 0xf9, 0x9d, 0x41, 0x35, - 0xa0, 0xab, 0x88, 0xec, 0xac, 0x10, 0x22, 0xa0, 0x40, 0x45, 0x23, 0x00, 0x10, 0xc1, 0xbf, 0x8a, - 0x11, 0x81, 0x8a, 0x43, 0xb2, 0xdf, 0x89, 0x08, 0x11, 0x33, 0x25, 0x98, 0xa0, 0x8a, 0xb8, 0xbc, - 0x18, 0x33, 0x54, 0x24, 0x00, 0xca, 0x8b, 0x41, 0x25, 0x92, 0x39, 0x27, 0x80, 0x20, 0xc0, 0xbf, - 0x9b, 0x08, 0x98, 0x89, 0xaa, 0x3a, 0x37, 0x81, 0xb9, 0x0b, 0xa1, 0x2a, 0x43, 0x25, 0x32, 0x33, - 0x92, 0x19, 0x14, 0x00, 0xd8, 0xce, 0x9a, 0x10, 0x90, 0x0a, 0x37, 0xf8, 0x8a, 0x21, 0xa9, 0x8a, - 0x99, 0x33, 0xa9, 0x71, 0x25, 0x12, 0x90, 0xaa, 0x41, 0xa1, 0xbf, 0xa9, 0xab, 0x20, 0x34, 0xa8, - 0x60, 0x91, 0x99, 0xcd, 0x19, 0x12, 0x80, 0x99, 0x73, 0x27, 0xa8, 0x19, 0x33, 0x90, 0x9c, 0x88, - 0x12, 0xb9, 0x8a, 0x54, 0x33, 0x45, 0x82, 0xeb, 0xac, 0x8b, 0x12, 0x98, 0x88, 0x9a, 0x89, 0x00, - 0x20, 0x05, 0xbd, 0x9a, 0x98, 0x48, 0x57, 0x11, 0x99, 0x20, 0x53, 0x33, 0x03, 0xda, 0xcb, 0x89, - 0xca, 0x08, 0x90, 0xac, 0x08, 0x01, 0x12, 0xc9, 0x9c, 0x18, 0x08, 0x65, 0x25, 0x90, 0x09, 0x90, - 0xab, 0x40, 0x92, 0x8b, 0xfb, 0x9c, 0x89, 0x22, 0x42, 0x03, 0x89, 0xcb, 0x18, 0x08, 0x23, 0x12, - 0xa8, 0x75, 0x17, 0x00, 0x10, 0x98, 0xbb, 0xc9, 0x9b, 0x0a, 0x73, 0x12, 0x54, 0x81, 0xa9, 0x89, - 0x89, 0xa0, 0x9b, 0xd9, 0x1a, 0xb1, 0xbf, 0xaa, 0x19, 0x90, 0x09, 0x74, 0x82, 0x09, 0x10, 0x88, - 0x21, 0x73, 0x46, 0x12, 0x90, 0xab, 0x08, 0xb9, 0xad, 0xaa, 0x10, 0x08, 0x51, 0x14, 0xcb, 0x08, - 0xa8, 0x89, 0x42, 0xfc, 0x9c, 0x08, 0xa8, 0x09, 0x42, 0x23, 0x63, 0x34, 0x82, 0x9a, 0x90, 0x08, - 0xcb, 0xa0, 0xef, 0x88, 0x08, 0x98, 0x41, 0x25, 0x01, 0x98, 0x89, 0x20, 0x92, 0x3a, 0x33, 0x46, - 0x32, 0x81, 0xab, 0xd9, 0xbf, 0x0a, 0x83, 0xbb, 0x8a, 0x32, 0x82, 0xab, 0x18, 0x98, 0xbf, 0xbd, - 0x40, 0x25, 0x11, 0x11, 0x90, 0x8a, 0xb8, 0xde, 0x0a, 0x42, 0x84, 0xaa, 0x73, 0x23, 0x80, 0x28, - 0x90, 0x88, 0xfb, 0x9c, 0x18, 0x98, 0x49, 0x05, 0xba, 0x0a, 0xc9, 0x9a, 0x00, 0xda, 0xaa, 0x30, - 0xa1, 0x71, 0x37, 0x22, 0x80, 0x99, 0x88, 0xa0, 0x9b, 0xaa, 0xdb, 0xbe, 0x19, 0x53, 0x35, 0x23, - 0x00, 0xb9, 0x0a, 0x14, 0xeb, 0xaa, 0x10, 0xa0, 0x09, 0x53, 0x13, 0x30, 0x27, 0xc9, 0xac, 0x31, - 0x82, 0xeb, 0x89, 0x00, 0xb9, 0x9c, 0x08, 0x01, 0x99, 0x80, 0x0b, 0x56, 0x43, 0x91, 0x88, 0x21, - 0x12, 0xda, 0x2a, 0x33, 0xd0, 0x59, 0x24, 0xa9, 0xcb, 0x38, 0x82, 0xce, 0x89, 0x19, 0x81, 0xbc, - 0x58, 0x15, 0x99, 0x00, 0xb8, 0x9a, 0x9a, 0xde, 0xab, 0x10, 0x32, 0x22, 0x32, 0x37, 0x22, 0x42, - 0xa8, 0x3a, 0x25, 0xa8, 0xac, 0x38, 0x47, 0x91, 0x89, 0x89, 0x08, 0xfb, 0xbc, 0x18, 0x81, 0x18, - 0x14, 0x98, 0x51, 0x35, 0x14, 0x01, 0xd9, 0xaa, 0xba, 0xcd, 0x8a, 0x22, 0x01, 0x89, 0x81, 0x09, - 0x33, 0x92, 0x1c, 0x25, 0x92, 0x08, 0x80, 0x8b, 0x43, 0xa8, 0x29, 0x02, 0x66, 0x34, 0xc0, 0x9b, - 0x18, 0x82, 0x30, 0x05, 0xba, 0xbf, 0x63, 0x80, 0xcc, 0x8a, 0x00, 0x10, 0x12, 0xca, 0xbd, 0xbc, - 0x2a, 0x23, 0x02, 0x10, 0x43, 0x44, 0x44, 0x22, 0x32, 0xa3, 0xce, 0xba, 0x18, 0x00, 0x44, 0x80, - 0x00, 0x20, 0xa2, 0xac, 0xcb, 0xdb, 0x8a, 0xa8, 0x30, 0x36, 0x12, 0x42, 0xd0, 0xbe, 0x08, 0x20, - 0x81, 0xaa, 0x50, 0x81, 0x08, 0x52, 0x02, 0x9a, 0x10, 0xcc, 0x9b, 0xc8, 0x8c, 0x99, 0xc8, 0x48, - 0x24, 0x11, 0x54, 0x23, 0x01, 0x80, 0x31, 0x26, 0xc9, 0xbd, 0xab, 0x08, 0xa0, 0xbc, 0x50, 0x24, - 0xa0, 0xcb, 0xab, 0x28, 0x35, 0x81, 0x19, 0x13, 0x99, 0x29, 0x57, 0xfa, 0xbb, 0x18, 0x31, 0x43, - 0x04, 0xa8, 0x19, 0x22, 0x13, 0x01, 0x52, 0xb0, 0xae, 0x18, 0x23, 0x01, 0xd8, 0xcd, 0x9a, 0x00, - 0x00, 0xb8, 0xbd, 0x8a, 0x18, 0x57, 0x13, 0xa8, 0x8a, 0xa9, 0x18, 0x44, 0x23, 0x81, 0xca, 0xbc, - 0xab, 0x19, 0x34, 0xc8, 0xac, 0x51, 0x23, 0xa0, 0xac, 0x28, 0x45, 0x32, 0x81, 0x9a, 0x8a, 0x91, - 0xee, 0xab, 0x10, 0x11, 0x20, 0x46, 0x22, 0x00, 0xb9, 0xbf, 0xab, 0x29, 0x01, 0xda, 0xab, 0x28, - 0x55, 0x22, 0x88, 0x80, 0x88, 0x21, 0x31, 0x14, 0xc8, 0xaf, 0x28, 0x24, 0x32, 0x82, 0xeb, 0xaa, - 0x38, 0x25, 0x90, 0x9a, 0xbb, 0xcc, 0x28, 0x32, 0x16, 0xa8, 0xba, 0x09, 0xca, 0x09, 0xa9, 0x8c, - 0x64, 0x02, 0x99, 0x19, 0x34, 0x12, 0xfb, 0x1a, 0x43, 0x81, 0x00, 0xda, 0x8a, 0x08, 0x81, 0x9a, - 0x88, 0xcb, 0x1b, 0x67, 0x81, 0x00, 0x80, 0x21, 0x73, 0x81, 0xbb, 0x9d, 0x10, 0x01, 0x00, 0x98, - 0xcd, 0xbb, 0x89, 0xda, 0xac, 0x40, 0x02, 0x40, 0x44, 0x23, 0x40, 0x82, 0xcc, 0x19, 0x13, 0x81, - 0x90, 0xbf, 0xbb, 0x28, 0x22, 0x23, 0x00, 0x64, 0x24, 0x01, 0x80, 0x88, 0xe9, 0xbc, 0x9b, 0x10, - 0xa9, 0xbb, 0x88, 0x8b, 0x37, 0x08, 0x00, 0x43, 0xb9, 0x18, 0xab, 0x52, 0x44, 0xc0, 0xbd, 0x29, - 0x15, 0x08, 0x10, 0x21, 0x23, 0xb8, 0xae, 0x19, 0xb9, 0x9d, 0x44, 0x08, 0x31, 0x72, 0x13, 0x99, - 0xfa, 0x9a, 0x89, 0xa9, 0x89, 0x22, 0x92, 0xec, 0x9a, 0x62, 0x25, 0x82, 0x18, 0xa0, 0xab, 0xac, - 0x88, 0xaa, 0x0a, 0x41, 0x36, 0x23, 0xa9, 0x71, 0x81, 0x01, 0x01, 0xeb, 0x0b, 0x32, 0x25, 0x00, - 0x81, 0x20, 0xe8, 0xcd, 0xbb, 0x9a, 0x9a, 0x22, 0x45, 0x22, 0x11, 0x98, 0x11, 0x98, 0xa8, 0x39, - 0xfc, 0x9b, 0x99, 0x22, 0xa9, 0xf9, 0x8c, 0x08, 0x38, 0x27, 0x31, 0x12, 0x10, 0x34, 0x82, 0xaa, - 0xda, 0xed, 0x9b, 0x09, 0x21, 0x24, 0x91, 0x09, 0x01, 0xa9, 0x99, 0x08, 0xa0, 0xdb, 0xbd, 0x70, - 0x27, 0x01, 0x98, 0xaa, 0x28, 0xa3, 0xae, 0x9a, 0x20, 0x82, 0xca, 0x28, 0x45, 0x33, 0x13, 0x11, - 0x83, 0xeb, 0x0a, 0x12, 0xfa, 0xbc, 0x99, 0x10, 0x01, 0x28, 0x67, 0x81, 0x98, 0x99, 0x99, 0xaa, - 0x99, 0x01, 0x30, 0xc2, 0x9b, 0x41, 0x43, 0xb8, 0xcc, 0x8a, 0x28, 0x36, 0x10, 0x12, 0x31, 0x46, - 0x02, 0xcc, 0xbb, 0x89, 0x89, 0xc8, 0x0c, 0x13, 0x44, 0x00, 0x63, 0x82, 0x99, 0x89, 0xaa, 0x21, - 0xe9, 0x8c, 0x23, 0xb0, 0x9b, 0xd9, 0xbf, 0x19, 0x83, 0x08, 0x52, 0x35, 0x12, 0x80, 0x90, 0x10, - 0x20, 0xd8, 0xbb, 0xbe, 0x08, 0x81, 0x99, 0x50, 0x35, 0x01, 0x18, 0xa8, 0x0a, 0x55, 0xe0, 0x8b, - 0x00, 0x32, 0x11, 0x24, 0x01, 0xcf, 0xaa, 0xaa, 0xaa, 0x8a, 0x82, 0x99, 0x60, 0x24, 0x53, 0x35, - 0x01, 0x88, 0x08, 0xa9, 0xbd, 0xdc, 0x8b, 0x01, 0x18, 0x20, 0x14, 0x81, 0x0b, 0x26, 0x91, 0x88, - 0x22, 0x03, 0x20, 0x31, 0xb0, 0xf0, 0xbf, 0xeb, 0x89, 0x89, 0x10, 0x43, 0x23, 0x11, 0x33, 0x43, - 0x23, 0xed, 0x9b, 0x99, 0xdb, 0x30, 0x42, 0x23, 0xa8, 0x08, 0xa8, 0xec, 0x99, 0x1a, 0x33, 0x33, - 0x73, 0x35, 0x12, 0xa8, 0xbe, 0x8b, 0x10, 0xd8, 0x8a, 0x32, 0x02, 0xca, 0xaa, 0x52, 0x91, 0x10, - 0x01, 0xb8, 0xab, 0x09, 0x77, 0x83, 0xa8, 0x9a, 0xeb, 0xac, 0x19, 0x35, 0x12, 0x80, 0x88, 0x88, - 0x11, 0xa8, 0x8a, 0x48, 0x34, 0x44, 0xa8, 0xbc, 0xbe, 0xbd, 0xad, 0x20, 0x32, 0x32, 0x35, 0x34, - 0x11, 0x90, 0x99, 0xea, 0xad, 0x08, 0x32, 0x92, 0xda, 0x9b, 0x80, 0xb9, 0x1b, 0x36, 0xb8, 0x8d, - 0x54, 0x33, 0x02, 0x88, 0x88, 0x88, 0x11, 0xf9, 0xbe, 0xaa, 0x88, 0x20, 0x33, 0x45, 0x23, 0x01, - 0x12, 0xc9, 0xab, 0xd9, 0xbc, 0x9a, 0x00, 0x33, 0x24, 0x88, 0xf9, 0x0b, 0x43, 0x81, 0x8a, 0x20, - 0xd0, 0x19, 0x11, 0xb0, 0xad, 0x28, 0x63, 0x14, 0x88, 0x98, 0x0a, 0x34, 0xe1, 0xbe, 0x8a, 0x99, - 0x18, 0x34, 0x23, 0x21, 0x26, 0x21, 0xa2, 0xbb, 0x9b, 0x18, 0xdc, 0x20, 0x00, 0xf9, 0x0a, 0x90, - 0x50, 0x03, 0x41, 0x23, 0x91, 0xbd, 0xbc, 0x20, 0xc9, 0xbc, 0x8a, 0x08, 0x44, 0x81, 0x01, 0x48, - 0x24, 0x12, 0xa0, 0x0d, 0x24, 0x20, 0x57, 0x82, 0xa8, 0xdb, 0xac, 0x8a, 0x80, 0xba, 0x9b, 0x52, - 0x34, 0x22, 0x33, 0x33, 0x34, 0xb0, 0xcf, 0xaa, 0xb9, 0xac, 0x8a, 0x32, 0xb8, 0x3a, 0x62, 0x35, - 0x32, 0x33, 0xb1, 0xbd, 0x39, 0x05, 0x9a, 0xa8, 0xac, 0xaa, 0xeb, 0x19, 0x12, 0xa8, 0x0b, 0x33, - 0x22, 0x65, 0x14, 0x41, 0x82, 0x10, 0x80, 0x81, 0x9a, 0x30, 0x67, 0xc9, 0xbd, 0xba, 0x99, 0x01, - 0xa8, 0x8b, 0x31, 0x44, 0x55, 0x02, 0x00, 0x31, 0xa0, 0x89, 0x99, 0x98, 0xdd, 0xab, 0x20, 0x88, - 0x46, 0x31, 0x13, 0x81, 0xba, 0xdb, 0x1a, 0x83, 0xee, 0x9b, 0x08, 0x88, 0x08, 0x80, 0xa9, 0x9a, - 0x51, 0x27, 0x22, 0x32, 0x81, 0xa9, 0x29, 0x44, 0xb0, 0xad, 0x08, 0xfa, 0x8a, 0x81, 0xba, 0x8c, - 0x22, 0x80, 0x72, 0x26, 0x81, 0x21, 0xa8, 0xdc, 0x89, 0x32, 0x00, 0x88, 0x12, 0x98, 0xcc, 0x0a, - 0x32, 0x12, 0xa8, 0x28, 0xe2, 0xae, 0x30, 0x45, 0xa0, 0xaa, 0xa8, 0xbe, 0xa9, 0x9a, 0x10, 0x01, - 0xa8, 0x74, 0x17, 0x88, 0x11, 0x31, 0x33, 0x02, 0x20, 0x10, 0x91, 0xbe, 0x99, 0x9b, 0xf9, 0xcf, - 0xba, 0xa9, 0xa9, 0x09, 0x42, 0x34, 0x24, 0x42, 0x34, 0x80, 0x89, 0xb9, 0xbd, 0xa9, 0xa9, 0xac, - 0x08, 0x18, 0x13, 0x66, 0x23, 0x02, 0x99, 0x81, 0x89, 0x89, 0x33, 0xe9, 0xbb, 0xca, 0xab, 0xca, - 0xcb, 0xaa, 0x51, 0x47, 0x13, 0x02, 0x10, 0x81, 0xa9, 0x09, 0x91, 0xbc, 0xac, 0xea, 0xcb, 0xaa, - 0x88, 0x08, 0x53, 0x24, 0x43, 0x01, 0xa9, 0xba, 0xcc, 0x20, 0x34, 0x01, 0x21, 0x90, 0x49, 0x46, - 0x03, 0x00, 0xcd, 0x9a, 0x21, 0x03, 0x98, 0x09, 0xe9, 0xac, 0x89, 0x01, 0xda, 0xcd, 0x9a, 0x88, - 0x28, 0x54, 0x82, 0xab, 0x89, 0x10, 0x66, 0x13, 0x01, 0x18, 0x34, 0x00, 0xb0, 0x9c, 0xb9, 0xba, - 0xcf, 0xa9, 0xab, 0x39, 0x14, 0x80, 0x22, 0x32, 0x46, 0x33, 0x42, 0x03, 0xa9, 0xdb, 0xdb, 0xaa, - 0xaa, 0x21, 0x80, 0xcb, 0x89, 0xa8, 0x71, 0x17, 0x00, 0x20, 0x21, 0x04, 0xb8, 0xbb, 0xcc, 0xbc, - 0xaa, 0xaa, 0x09, 0x33, 0x52, 0x43, 0x46, 0x23, 0x11, 0x20, 0x12, 0x90, 0xcb, 0xbd, 0xcc, 0xbb, - 0x19, 0x00, 0xdb, 0x28, 0x84, 0x99, 0x9c, 0x03, 0xbb, 0xcb, 0x09, 0x73, 0x14, 0x08, 0x43, 0x44, - 0x82, 0xa8, 0x09, 0xb8, 0xac, 0xb9, 0x28, 0x35, 0x14, 0x30, 0xc1, 0x9b, 0xaa, 0x73, 0x43, 0xa1, - 0xcd, 0xbb, 0x09, 0xa9, 0x19, 0x82, 0x10, 0x71, 0x36, 0x53, 0x00, 0x88, 0x10, 0xc9, 0xaa, 0xab, - 0x88, 0xf9, 0x9c, 0x89, 0x80, 0x11, 0xa9, 0x70, 0x14, 0x88, 0x11, 0x12, 0x43, 0x12, 0xa0, 0x19, - 0xa8, 0xc9, 0xaf, 0xba, 0x99, 0xd9, 0x19, 0x73, 0x14, 0x90, 0x09, 0x33, 0x83, 0xcb, 0xbe, 0x9b, - 0xbb, 0xbc, 0xcb, 0xaa, 0x20, 0x73, 0x25, 0x12, 0x22, 0x33, 0x02, 0x89, 0x19, 0x03, 0x98, 0x99, - 0xb0, 0xff, 0x8a, 0x20, 0x92, 0xcb, 0xac, 0x20, 0x98, 0x08, 0x80, 0xda, 0x29, 0x46, 0x33, 0x23, - 0x12, 0x32, 0xb0, 0xbe, 0xdb, 0xad, 0x08, 0xa9, 0xad, 0xa8, 0x38, 0x34, 0x23, 0x10, 0x24, 0x21, - 0x54, 0x23, 0x90, 0xfa, 0xae, 0xaa, 0x8b, 0x32, 0x81, 0x41, 0x45, 0x11, 0x23, 0x22, 0x99, 0xf9, - 0x8b, 0x99, 0xeb, 0x8a, 0x21, 0xc9, 0xbb, 0x8a, 0x11, 0x91, 0x00, 0x54, 0x11, 0x41, 0x45, 0x02, - 0x32, 0xb9, 0xcd, 0x09, 0xc8, 0x29, 0x02, 0x21, 0x62, 0x33, 0x43, 0x02, 0x20, 0xa1, 0xdb, 0x9e, - 0x89, 0x00, 0xeb, 0xbb, 0xdb, 0xbb, 0x19, 0x01, 0x63, 0x34, 0x12, 0x10, 0x35, 0x91, 0xac, 0x18, - 0xa0, 0xcc, 0x38, 0x91, 0xaa, 0x69, 0xa1, 0x9a, 0x10, 0xaa, 0x0b, 0xd3, 0x8f, 0x32, 0x25, 0x31, - 0x03, 0x08, 0x22, 0x12, 0xd8, 0xce, 0x0a, 0xa0, 0xba, 0x9b, 0x28, 0x15, 0x19, 0x00, 0x44, 0x90, - 0x8a, 0x99, 0xb8, 0x9d, 0xcf, 0x98, 0xaa, 0xbc, 0x08, 0x18, 0x57, 0x22, 0x42, 0x35, 0x03, 0x80, - 0x00, 0xa8, 0x9b, 0x0a, 0x81, 0xce, 0xab, 0xca, 0xab, 0xba, 0xbc, 0x9b, 0x39, 0x47, 0x34, 0x12, - 0x90, 0xb8, 0x9d, 0x9a, 0x89, 0x10, 0x18, 0x21, 0x53, 0x24, 0x32, 0x25, 0xa0, 0x1c, 0x03, 0xfb, - 0x9a, 0xa9, 0x8b, 0x33, 0x33, 0xe0, 0x9c, 0x81, 0x98, 0x08, 0x30, 0x13, 0x62, 0x47, 0x04, 0xa8, - 0xab, 0x99, 0x89, 0x02, 0x18, 0x42, 0xe0, 0xbe, 0x99, 0xaa, 0x8a, 0x12, 0x98, 0x99, 0x73, 0x15, - 0x20, 0x33, 0x43, 0x33, 0x02, 0x60, 0x83, 0xda, 0x99, 0x9b, 0x99, 0x33, 0x91, 0xad, 0x99, 0x21, - 0x29, 0x67, 0x01, 0xac, 0x89, 0xcb, 0xbd, 0xad, 0x9b, 0x08, 0x00, 0x20, 0x18, 0x46, 0x33, 0x24, - 0x22, 0x22, 0x42, 0x32, 0x81, 0x99, 0xdc, 0xbd, 0xbb, 0xbc, 0x99, 0x00, 0x11, 0x64, 0x23, 0x01, - 0x00, 0x98, 0xa9, 0xaa, 0xdd, 0x9a, 0x09, 0xc8, 0x9b, 0x63, 0x03, 0x80, 0x20, 0x45, 0x01, 0x00, - 0xb8, 0x9c, 0xa8, 0xcc, 0x9b, 0x22, 0x00, 0x32, 0xfd, 0x9b, 0x30, 0x36, 0x34, 0x01, 0x10, 0x92, - 0xa9, 0x6a, 0x25, 0x81, 0x38, 0x04, 0x98, 0x0a, 0xd9, 0xbe, 0xbc, 0x9b, 0xdb, 0x9b, 0x10, 0x08, - 0x00, 0x38, 0x45, 0x12, 0x80, 0x38, 0xd8, 0x48, 0x55, 0x02, 0x08, 0xa8, 0x9b, 0x9a, 0x22, 0x64, - 0x01, 0x31, 0x23, 0xc8, 0xaa, 0x9b, 0xfb, 0xab, 0xba, 0x9a, 0xca, 0xac, 0xa9, 0xbc, 0x8a, 0x43, - 0x67, 0x23, 0x32, 0x13, 0x01, 0x99, 0xa0, 0xbe, 0xcb, 0xaa, 0x89, 0xa9, 0x8b, 0x21, 0x14, 0x09, - 0x44, 0x33, 0x34, 0x23, 0x21, 0x44, 0x90, 0x10, 0xb1, 0xcf, 0x30, 0x13, 0xb8, 0x28, 0xc0, 0x30, - 0x23, 0xfc, 0x9e, 0x98, 0xca, 0x9c, 0x01, 0xad, 0x19, 0x91, 0x89, 0x32, 0x03, 0x40, 0x03, 0x08, - 0x52, 0x24, 0x09, 0x45, 0x34, 0x03, 0x52, 0x24, 0x82, 0xa9, 0xeb, 0xcc, 0xaa, 0x9b, 0x80, 0x08, - 0x11, 0x9a, 0x22, 0xb1, 0xdf, 0x31, 0x23, 0x81, 0x11, 0x11, 0x12, 0xba, 0xcd, 0xcb, 0x8b, 0x62, - 0x12, 0x18, 0x44, 0x13, 0x32, 0x16, 0x00, 0xb9, 0xab, 0xcc, 0xab, 0x9c, 0xa8, 0x38, 0xd0, 0xac, - 0x22, 0x32, 0x55, 0x12, 0x73, 0x82, 0x99, 0x00, 0xc9, 0xac, 0x98, 0xaa, 0xbb, 0x09, 0x43, 0x92, - 0xab, 0xb9, 0xcf, 0x18, 0x90, 0x08, 0x42, 0x45, 0x03, 0x99, 0x08, 0x42, 0x22, 0x90, 0x79, 0x45, - 0x12, 0x12, 0xa0, 0xbc, 0x89, 0xa1, 0xad, 0xac, 0x08, 0xc9, 0xac, 0x09, 0x91, 0xbe, 0x9b, 0x22, - 0x89, 0x10, 0x23, 0x88, 0x76, 0x23, 0x43, 0x43, 0x23, 0x14, 0xa9, 0x89, 0x80, 0xbe, 0x08, 0xb8, - 0xbe, 0x9a, 0x0a, 0x91, 0xdb, 0x8d, 0x44, 0x02, 0x89, 0x31, 0x42, 0x83, 0x9c, 0x89, 0xb0, 0x8a, - 0xc9, 0xad, 0x63, 0x11, 0x33, 0x83, 0xa9, 0xb9, 0xcf, 0x89, 0xb9, 0xae, 0x89, 0x08, 0xa9, 0x19, - 0x72, 0x25, 0x01, 0x81, 0x31, 0x34, 0x34, 0x21, 0x21, 0x90, 0xca, 0xbb, 0xbf, 0x99, 0x10, 0xe8, - 0xbb, 0x9a, 0x99, 0xbc, 0x8a, 0x88, 0xa8, 0x61, 0x45, 0x04, 0x99, 0x01, 0x91, 0x9d, 0x40, 0x05, - 0x18, 0x36, 0x82, 0xa9, 0x28, 0xc9, 0xba, 0x2a, 0x01, 0x81, 0x9b, 0x73, 0xa4, 0x9c, 0x98, 0xdb, - 0xdb, 0x8a, 0x8a, 0x11, 0x53, 0x35, 0x33, 0x01, 0x12, 0x01, 0x90, 0xb9, 0x09, 0x90, 0xcf, 0x9a, - 0xc9, 0xdd, 0xab, 0x09, 0x12, 0x98, 0x51, 0x26, 0x81, 0x01, 0x11, 0x33, 0x81, 0x99, 0x89, 0xba, - 0x9a, 0xce, 0x80, 0x9a, 0x71, 0x25, 0x00, 0x18, 0x32, 0xc0, 0xcd, 0x9b, 0xb8, 0xbf, 0x9b, 0x81, - 0x09, 0xa9, 0x08, 0x35, 0x21, 0x64, 0x33, 0x22, 0x21, 0x24, 0x01, 0x89, 0x53, 0xa1, 0x29, 0xa0, - 0xdd, 0x99, 0xca, 0xbb, 0xca, 0xbb, 0xba, 0xab, 0x68, 0x34, 0x12, 0x80, 0x32, 0x83, 0x9c, 0x73, - 0x14, 0x88, 0x43, 0x80, 0x38, 0xa2, 0xbf, 0xcb, 0xcc, 0x19, 0x11, 0x22, 0x34, 0x90, 0xab, 0xa9, - 0xaa, 0x2a, 0xf0, 0x8b, 0x52, 0x12, 0x40, 0x26, 0x90, 0xca, 0x19, 0x22, 0x34, 0x33, 0x34, 0xb1, - 0xcf, 0x8a, 0xaa, 0xbc, 0xbb, 0x99, 0x18, 0x80, 0x61, 0x14, 0x02, 0x19, 0x25, 0xa8, 0x41, 0x12, - 0x90, 0x80, 0x00, 0x13, 0x30, 0x57, 0x12, 0x10, 0x18, 0x26, 0x12, 0xa8, 0xfb, 0xbd, 0xbb, 0xca, - 0x8a, 0xcb, 0x9a, 0x09, 0x00, 0x54, 0x02, 0x32, 0x34, 0x04, 0x00, 0x08, 0x34, 0x22, 0x22, 0x03, - 0xa9, 0x10, 0xfd, 0x9d, 0xa9, 0x9a, 0x99, 0xa9, 0x8c, 0xba, 0x10, 0x73, 0x92, 0x8b, 0x65, 0x82, - 0x30, 0x24, 0x02, 0xa9, 0x08, 0x80, 0xeb, 0xab, 0x8a, 0x20, 0x91, 0x89, 0x09, 0x14, 0x9d, 0xe8, - 0xaf, 0x09, 0x80, 0x0a, 0x10, 0x90, 0x28, 0x08, 0x16, 0xb9, 0x70, 0x37, 0x02, 0x20, 0x33, 0x33, - 0x34, 0x14, 0xc9, 0xcd, 0xac, 0x98, 0xa9, 0xaa, 0x08, 0xc9, 0x9a, 0x18, 0x22, 0xb8, 0x8a, 0x64, - 0x83, 0x1a, 0x64, 0x23, 0x12, 0x98, 0x11, 0x41, 0x34, 0x34, 0x00, 0x90, 0xcd, 0xbc, 0x98, 0xbc, - 0x8a, 0xb9, 0x9a, 0xdd, 0x9a, 0x33, 0x10, 0x33, 0x10, 0x80, 0x74, 0x43, 0x03, 0x52, 0x03, 0x01, - 0xa9, 0x09, 0x99, 0xfb, 0xbe, 0xaa, 0x8a, 0x41, 0xa1, 0x9b, 0x12, 0xd9, 0x29, 0xd0, 0xac, 0x39, - 0x17, 0x11, 0x11, 0x26, 0x81, 0x98, 0x18, 0x34, 0x90, 0x09, 0x42, 0xb9, 0xca, 0xbc, 0x9a, 0x09, - 0x81, 0xc8, 0xcd, 0xcb, 0xbb, 0xab, 0xa9, 0x0b, 0x02, 0x8b, 0x76, 0x35, 0x13, 0x32, 0x53, 0x82, - 0x80, 0x63, 0x02, 0xb9, 0x9c, 0xba, 0x88, 0xbc, 0xb9, 0xba, 0xdf, 0x09, 0x90, 0x10, 0x22, 0xb9, - 0x52, 0x01, 0x20, 0x32, 0xa0, 0x54, 0x91, 0x49, 0x37, 0x82, 0x9a, 0x0a, 0x80, 0xb9, 0xbd, 0x9a, - 0x88, 0x81, 0xbc, 0xa0, 0xdf, 0x9a, 0x28, 0x81, 0xa8, 0x68, 0x14, 0x01, 0x99, 0x52, 0x36, 0x80, - 0x31, 0x23, 0x80, 0x12, 0xca, 0x9c, 0x90, 0xaf, 0xa8, 0xa9, 0xac, 0xaa, 0xfb, 0xbc, 0x99, 0x9a, - 0x62, 0x33, 0x10, 0x35, 0x13, 0x11, 0x98, 0x10, 0x63, 0x13, 0x88, 0x32, 0xd8, 0xab, 0x80, 0xb9, - 0xdf, 0x9a, 0xa9, 0x0b, 0x82, 0xaa, 0x38, 0x83, 0xda, 0xbc, 0x29, 0x94, 0xdb, 0x3a, 0x67, 0x11, - 0x22, 0x11, 0x80, 0x01, 0xc9, 0x09, 0x32, 0xa0, 0xb9, 0x9f, 0xb9, 0xbd, 0xca, 0x9a, 0x19, 0x10, - 0x44, 0x10, 0x90, 0x50, 0x02, 0xa8, 0x9c, 0x53, 0x43, 0x43, 0x33, 0x01, 0x89, 0x88, 0xc8, 0xbf, - 0x09, 0xc1, 0xab, 0x09, 0xa8, 0x8c, 0x81, 0xd8, 0xbf, 0x99, 0x18, 0x41, 0x16, 0x80, 0x01, 0x28, - 0x03, 0x43, 0x52, 0xa3, 0x09, 0x40, 0x12, 0x61, 0x03, 0x99, 0xa8, 0xfb, 0xac, 0xca, 0xad, 0xaa, - 0x98, 0xaa, 0x98, 0x61, 0x23, 0x12, 0x23, 0x98, 0x28, 0x27, 0x11, 0x42, 0x14, 0x44, 0x43, 0xa1, - 0xba, 0xac, 0xb9, 0xce, 0x8a, 0x01, 0x08, 0x88, 0x90, 0x18, 0xd8, 0xac, 0x10, 0xaa, 0x31, 0x54, - 0x35, 0x23, 0x52, 0x23, 0x80, 0x29, 0x15, 0xc9, 0x9b, 0xa0, 0xea, 0x9d, 0x08, 0xb0, 0x9a, 0xb9, - 0x0b, 0x11, 0x99, 0x74, 0x95, 0xac, 0x10, 0x32, 0x00, 0x12, 0x74, 0x23, 0x00, 0x08, 0x88, 0x89, - 0xdb, 0x89, 0x00, 0xb8, 0x9c, 0x9a, 0xb8, 0xff, 0x9d, 0x18, 0x80, 0x88, 0x88, 0x21, 0x32, 0x11, - 0x46, 0x80, 0x18, 0x81, 0x28, 0x37, 0x82, 0x19, 0x32, 0xb0, 0x1a, 0xa1, 0xcb, 0xde, 0xac, 0xaa, - 0xba, 0xaa, 0x18, 0x21, 0x21, 0x38, 0x16, 0x60, 0x33, 0x11, 0x53, 0x25, 0x90, 0x09, 0x53, 0x92, - 0xac, 0x21, 0xc8, 0xca, 0xbc, 0xbb, 0x18, 0xb1, 0x0c, 0x22, 0x24, 0xa0, 0x9a, 0xb1, 0xaf, 0xdb, - 0x41, 0x33, 0x32, 0x25, 0x12, 0x73, 0x82, 0x18, 0x81, 0xcd, 0x89, 0x98, 0x9a, 0x99, 0xcd, 0x8a, - 0x00, 0x10, 0x90, 0x10, 0xfa, 0x9f, 0x18, 0x80, 0x18, 0x45, 0x22, 0x12, 0x88, 0x22, 0x11, 0x43, - 0x02, 0xc9, 0x9b, 0x19, 0x20, 0x27, 0xb9, 0xbf, 0x9b, 0xca, 0xad, 0x20, 0x80, 0x8a, 0x53, 0x13, - 0x80, 0x09, 0xa1, 0xce, 0x0a, 0x43, 0x21, 0x44, 0x33, 0x00, 0x81, 0x08, 0x43, 0xb0, 0xbf, 0xaa, - 0xbc, 0xbb, 0xac, 0x10, 0xc0, 0xaa, 0x89, 0x72, 0x25, 0x00, 0x51, 0x13, 0xa8, 0x19, 0x13, 0x02, - 0xaa, 0x98, 0xba, 0x8b, 0x54, 0xe8, 0xbc, 0xa9, 0x9b, 0x52, 0x33, 0xc8, 0x99, 0xca, 0xcd, 0x99, - 0x00, 0xca, 0x89, 0x62, 0x34, 0x23, 0x21, 0x10, 0x13, 0x10, 0x54, 0x53, 0x33, 0x90, 0xbb, 0xac, - 0x99, 0xde, 0x9b, 0xa8, 0xcc, 0x89, 0x9a, 0x88, 0x32, 0xba, 0x31, 0x25, 0x11, 0x37, 0x90, 0x52, - 0x12, 0x12, 0x42, 0x23, 0x24, 0x01, 0x8a, 0x90, 0xfb, 0xcd, 0xab, 0xab, 0x8a, 0x38, 0x25, 0xa8, - 0x00, 0x9a, 0xb8, 0x9d, 0x10, 0x90, 0x2a, 0x56, 0x15, 0x21, 0x34, 0x23, 0x12, 0x91, 0xbd, 0x98, - 0xb9, 0xcf, 0x9a, 0xa8, 0xdb, 0x99, 0xba, 0x08, 0x10, 0xa8, 0x61, 0x11, 0x31, 0x56, 0x33, 0x24, - 0x01, 0x31, 0x02, 0x88, 0x01, 0xbe, 0x11, 0xb8, 0xbc, 0x19, 0x90, 0xc1, 0xff, 0x9a, 0x99, 0xbb, - 0x08, 0x99, 0x99, 0x10, 0x11, 0x47, 0x01, 0x22, 0x33, 0x46, 0x35, 0x21, 0x10, 0x10, 0xa0, 0xba, - 0x09, 0xd8, 0xae, 0x9a, 0xca, 0xbd, 0xaa, 0x89, 0x21, 0xa0, 0x8a, 0x31, 0x32, 0x66, 0x25, 0x80, - 0x20, 0x22, 0x23, 0x03, 0x10, 0x08, 0xfb, 0xbf, 0x98, 0x89, 0x89, 0xb8, 0xae, 0x08, 0x11, 0x89, - 0x44, 0x91, 0x8a, 0x31, 0x03, 0xa8, 0x70, 0x22, 0x91, 0x49, 0x35, 0x32, 0x34, 0x14, 0xba, 0xdb, - 0x2a, 0x03, 0xf9, 0x9c, 0x90, 0xda, 0xac, 0x98, 0xab, 0xcb, 0x48, 0x12, 0x21, 0x42, 0x23, 0x64, - 0x12, 0x02, 0x11, 0x02, 0x88, 0x88, 0x82, 0x9a, 0xa9, 0x34, 0xdb, 0x9a, 0x00, 0xe3, 0xae, 0xbb, - 0xc9, 0x9b, 0x9a, 0xc0, 0xbc, 0x19, 0x10, 0x10, 0x22, 0x67, 0x23, 0x33, 0x12, 0x08, 0x24, 0xda, - 0x2a, 0x13, 0xdd, 0x19, 0xa0, 0x9a, 0xd9, 0xab, 0x88, 0xad, 0x01, 0x98, 0x40, 0x03, 0x40, 0x13, - 0xcc, 0x72, 0x35, 0x12, 0x22, 0xa0, 0xaa, 0xa9, 0xec, 0x89, 0x00, 0x91, 0xce, 0x19, 0x22, 0x88, - 0xa0, 0x9d, 0xa8, 0xaa, 0x38, 0x04, 0xaa, 0x01, 0x8b, 0x43, 0x37, 0x18, 0x33, 0x45, 0x31, 0x36, - 0x33, 0x12, 0x42, 0x93, 0x99, 0xc9, 0xcc, 0xad, 0xcc, 0xac, 0xaa, 0xab, 0x9a, 0x18, 0x63, 0x33, - 0x12, 0x33, 0x32, 0x24, 0xa2, 0x8e, 0x32, 0x91, 0x09, 0x61, 0x93, 0xcb, 0x0a, 0x32, 0x91, 0x9c, - 0xb9, 0xcc, 0xba, 0xce, 0xaa, 0x09, 0x10, 0x34, 0x11, 0x43, 0x23, 0x42, 0x33, 0x32, 0x34, 0x11, - 0x22, 0x12, 0xbc, 0x91, 0xdf, 0xcc, 0x9a, 0x99, 0xda, 0xad, 0x11, 0x01, 0xea, 0x09, 0x11, 0x98, - 0x41, 0x44, 0x33, 0x01, 0x00, 0x72, 0x23, 0x01, 0x11, 0xb8, 0x9a, 0xbb, 0x49, 0xc3, 0xbf, 0x98, - 0xc9, 0x9d, 0x88, 0x98, 0x99, 0x89, 0x11, 0x22, 0xbc, 0xa8, 0xad, 0xc9, 0x69, 0x14, 0x22, 0x41, - 0x25, 0x21, 0x41, 0x25, 0x01, 0x00, 0x89, 0xdb, 0xcb, 0xcd, 0xab, 0x9a, 0xab, 0x18, 0x31, 0x24, - 0x11, 0x33, 0x46, 0x13, 0x80, 0x28, 0x44, 0x02, 0x89, 0xca, 0xbc, 0xac, 0x89, 0x89, 0x01, 0x02, - 0xec, 0x0a, 0x01, 0x11, 0x34, 0x81, 0x32, 0x92, 0xbe, 0x32, 0xba, 0x81, 0x9c, 0x39, 0x14, 0x11, - 0x77, 0x04, 0x20, 0x13, 0x08, 0x00, 0x98, 0x21, 0xfb, 0xaf, 0x89, 0x89, 0xb9, 0xcb, 0x89, 0xea, - 0x9b, 0x21, 0xb8, 0x28, 0x46, 0x03, 0x22, 0x44, 0x33, 0x91, 0x88, 0x90, 0x9a, 0x08, 0xc9, 0x8b, - 0xc9, 0x9d, 0x98, 0x38, 0x26, 0xa8, 0x1a, 0x02, 0xdc, 0xcc, 0xbd, 0x8a, 0x00, 0x90, 0x40, 0x23, - 0x12, 0x55, 0x24, 0x32, 0x12, 0x11, 0x22, 0x03, 0xce, 0xba, 0xaa, 0xdc, 0xac, 0x99, 0x98, 0x89, - 0x89, 0x21, 0x04, 0x31, 0x65, 0x24, 0x22, 0x21, 0x01, 0x90, 0x88, 0xaa, 0x08, 0xb8, 0x0c, 0x80, - 0xfd, 0xab, 0x89, 0x99, 0x99, 0xe8, 0x9e, 0x00, 0xba, 0x8b, 0x12, 0xa8, 0x0b, 0x03, 0x01, 0x77, - 0x06, 0x90, 0x20, 0x23, 0x11, 0x01, 0x81, 0x48, 0x53, 0x12, 0x88, 0x91, 0xcf, 0xbb, 0xb9, 0xbd, - 0xdb, 0xab, 0x89, 0x11, 0x33, 0x03, 0x1a, 0x56, 0x24, 0x28, 0x34, 0x82, 0x88, 0x02, 0xba, 0x9d, - 0x10, 0xb9, 0xae, 0x18, 0x80, 0x00, 0x88, 0x88, 0x61, 0xc1, 0x09, 0x18, 0xf8, 0x9d, 0x99, 0x30, - 0x11, 0x44, 0x32, 0x43, 0x33, 0x23, 0x33, 0x83, 0xcd, 0x09, 0xb9, 0xdb, 0xce, 0xbd, 0x9a, 0xac, - 0x8a, 0x09, 0x11, 0x44, 0x33, 0x24, 0x11, 0xa8, 0x08, 0x99, 0x55, 0x33, 0xc8, 0x8a, 0x21, 0x33, - 0x80, 0x98, 0x9b, 0x10, 0xb8, 0x9c, 0x90, 0xcd, 0x19, 0x82, 0xbf, 0xbc, 0xdc, 0x9d, 0x00, 0xa9, - 0x00, 0x00, 0x21, 0x23, 0x57, 0x23, 0x23, 0x24, 0x99, 0x30, 0x34, 0x43, 0x92, 0xbd, 0xba, 0xcd, - 0xab, 0x90, 0xeb, 0xab, 0x18, 0x98, 0x00, 0x50, 0x36, 0x33, 0x23, 0x10, 0x33, 0x24, 0x9a, 0xe9, - 0xcc, 0xab, 0xb8, 0xaa, 0x10, 0x82, 0xab, 0x08, 0x71, 0x17, 0x80, 0x19, 0x90, 0xac, 0xb9, 0xad, - 0x09, 0x22, 0x91, 0x8b, 0x66, 0x23, 0x22, 0x33, 0x23, 0x21, 0x45, 0x81, 0xb9, 0xcd, 0xb9, 0xbb, - 0xbd, 0xba, 0x9d, 0x08, 0x09, 0x88, 0x32, 0x23, 0x00, 0x82, 0x69, 0x37, 0x13, 0x08, 0x52, 0x12, - 0x00, 0x22, 0xfa, 0x9b, 0x12, 0x89, 0x62, 0x13, 0xa0, 0xac, 0xa0, 0xbc, 0x8a, 0xdb, 0x8c, 0x13, - 0xa9, 0xbd, 0x10, 0x88, 0x09, 0x44, 0x11, 0x54, 0x12, 0x33, 0x37, 0x12, 0x90, 0x99, 0xc8, 0xaf, - 0xb9, 0x99, 0xa9, 0xdc, 0x9c, 0x99, 0x99, 0x32, 0x23, 0x64, 0x34, 0x33, 0x23, 0x13, 0x81, 0xea, - 0x8b, 0xc9, 0xbb, 0xaa, 0x98, 0xab, 0x21, 0x51, 0x02, 0x40, 0x43, 0x35, 0xb0, 0xaa, 0x9a, 0xfc, - 0x9c, 0xa9, 0xdb, 0x8a, 0x12, 0x80, 0x61, 0x34, 0x12, 0x21, 0x44, 0x24, 0x81, 0x98, 0x08, 0x10, - 0xea, 0xab, 0x88, 0x8a, 0xfb, 0xab, 0x08, 0x00, 0x88, 0xbc, 0xbc, 0x19, 0x45, 0x43, 0x01, 0x00, - 0x22, 0x22, 0x32, 0x93, 0xfb, 0xbf, 0x08, 0x10, 0x00, 0x33, 0xb0, 0x18, 0xcb, 0xac, 0x30, 0xd8, - 0xcb, 0x29, 0x23, 0x80, 0xb8, 0xdf, 0x18, 0x22, 0x21, 0x10, 0x72, 0x15, 0x88, 0x00, 0x22, 0xa8, - 0x2a, 0x26, 0xa0, 0xcd, 0xdb, 0xab, 0xbc, 0xab, 0x19, 0x23, 0x28, 0x37, 0x63, 0x22, 0x01, 0x10, - 0x00, 0xa9, 0x9c, 0x00, 0x00, 0xb8, 0x1a, 0x09, 0x47, 0x13, 0x00, 0x18, 0xa1, 0x0a, 0xa0, 0xbe, - 0xbd, 0xce, 0x9a, 0x89, 0xb8, 0xbc, 0xad, 0x30, 0x25, 0x22, 0x22, 0x35, 0x13, 0x42, 0x33, 0x24, - 0xc8, 0xbd, 0x9a, 0x0a, 0x90, 0xda, 0x9c, 0xa9, 0xba, 0x19, 0x22, 0x33, 0x43, 0x13, 0x74, 0x23, - 0x01, 0xfb, 0x0a, 0x00, 0x99, 0x89, 0x90, 0x30, 0x08, 0x47, 0xa0, 0x8a, 0x21, 0xa9, 0xba, 0x68, - 0x93, 0x9d, 0x30, 0x92, 0xae, 0x18, 0x13, 0xa9, 0xcc, 0xcb, 0x2a, 0x25, 0x42, 0x46, 0x22, 0x22, - 0x13, 0x00, 0xb9, 0xad, 0x88, 0xdc, 0xbc, 0xaa, 0xca, 0x8a, 0x08, 0x22, 0x44, 0x33, 0x14, 0xb9, - 0x00, 0xaa, 0xbb, 0xab, 0x9b, 0x42, 0x74, 0x25, 0x89, 0x09, 0x10, 0x92, 0x1a, 0x45, 0x25, 0x00, - 0xa8, 0x08, 0xf9, 0xbb, 0xce, 0xab, 0x00, 0x90, 0x89, 0x30, 0x23, 0x21, 0x54, 0x34, 0x13, 0x22, - 0x13, 0x33, 0x92, 0x9a, 0x39, 0x95, 0xff, 0xab, 0xa9, 0xba, 0xaa, 0x40, 0x24, 0x00, 0x02, 0x42, - 0x24, 0xba, 0x49, 0x26, 0xa8, 0x09, 0x01, 0xb8, 0x8b, 0x21, 0x00, 0x98, 0x24, 0x98, 0xc9, 0x79, - 0x23, 0x12, 0xc8, 0xaa, 0xce, 0x09, 0xfa, 0xbb, 0xb9, 0xae, 0x10, 0x32, 0x22, 0x33, 0x24, 0x32, - 0x35, 0x34, 0x35, 0x13, 0x80, 0xb8, 0xaf, 0xb9, 0xbc, 0xbc, 0xaa, 0x8a, 0x21, 0x12, 0xc9, 0x40, - 0x33, 0xa2, 0xae, 0x00, 0x34, 0x12, 0x03, 0x20, 0x93, 0xda, 0xaf, 0x13, 0x99, 0x8a, 0x67, 0x12, - 0x02, 0x09, 0x81, 0xb8, 0xcd, 0xaa, 0xaa, 0x9b, 0x81, 0xcd, 0x28, 0x26, 0x11, 0x98, 0x08, 0x31, - 0x54, 0x23, 0x12, 0x22, 0x01, 0x13, 0xca, 0xce, 0xbc, 0x9b, 0xb9, 0x0b, 0x04, 0x09, 0x10, 0x22, - 0x25, 0xb0, 0x8a, 0x9b, 0x22, 0x82, 0xbf, 0xab, 0xbc, 0xc9, 0x2b, 0x12, 0x57, 0x00, 0x18, 0x34, - 0x34, 0x25, 0x80, 0xa0, 0x19, 0xca, 0xc0, 0xbe, 0xce, 0xaa, 0x88, 0x9a, 0x08, 0x23, 0x31, 0x64, - 0x15, 0x21, 0x23, 0x81, 0x08, 0x01, 0x08, 0xc0, 0xac, 0xaa, 0x80, 0x48, 0x92, 0xbe, 0xab, 0xaa, - 0xac, 0x10, 0x52, 0x83, 0x8c, 0x73, 0x82, 0xaa, 0x09, 0x21, 0x04, 0x80, 0xaa, 0x89, 0x45, 0x03, - 0x51, 0x35, 0x02, 0x99, 0x10, 0xf8, 0xad, 0x99, 0x98, 0xa9, 0xb9, 0x3a, 0x06, 0xbe, 0x9b, 0x98, - 0x8a, 0x64, 0x12, 0x21, 0x53, 0x33, 0x02, 0x09, 0x02, 0xed, 0xab, 0xaa, 0x19, 0x34, 0x90, 0xba, - 0xa9, 0xbe, 0x28, 0x23, 0x82, 0x0a, 0x11, 0x08, 0x45, 0xb0, 0x9f, 0x09, 0x08, 0x9a, 0x46, 0x32, - 0x34, 0x33, 0x53, 0x82, 0x09, 0x22, 0xba, 0xcd, 0xcc, 0xbc, 0xba, 0xaa, 0x98, 0xba, 0x18, 0x47, - 0x32, 0x14, 0x21, 0x11, 0x22, 0x90, 0xa9, 0x69, 0x15, 0x08, 0x98, 0xd9, 0x8c, 0x90, 0xda, 0xab, - 0xaa, 0xac, 0x21, 0x53, 0x01, 0x01, 0x31, 0x23, 0x90, 0xfa, 0x9d, 0x9a, 0x80, 0x88, 0x18, 0x33, - 0x83, 0x59, 0x67, 0x12, 0x11, 0x12, 0xca, 0x19, 0x80, 0xdb, 0xaa, 0xac, 0x98, 0xba, 0xdb, 0xab, - 0xa9, 0x9a, 0x1a, 0x57, 0x45, 0x22, 0x01, 0x10, 0x33, 0x02, 0xda, 0x9c, 0x10, 0xa0, 0x0a, 0x02, - 0xdb, 0xac, 0x8b, 0x99, 0x88, 0xa9, 0x0a, 0x72, 0x37, 0x00, 0x21, 0xb1, 0xdf, 0x9a, 0x18, 0x21, - 0x22, 0x88, 0x36, 0x12, 0x22, 0x25, 0xb8, 0xcc, 0x99, 0xca, 0x8c, 0x80, 0xa0, 0xac, 0x20, 0x22, - 0x90, 0xba, 0xcc, 0x9a, 0x50, 0x35, 0x13, 0x89, 0x32, 0x23, 0x01, 0x81, 0x68, 0x25, 0xcb, 0x8a, - 0x42, 0xd0, 0xbb, 0x9c, 0x10, 0x08, 0x11, 0x62, 0x83, 0x99, 0x8b, 0xc1, 0x9e, 0x08, 0xeb, 0xaa, - 0x32, 0x22, 0x81, 0x73, 0x27, 0x20, 0x32, 0x13, 0x10, 0xa1, 0xad, 0xca, 0xab, 0xcc, 0xcc, 0xab, - 0x08, 0x98, 0x8a, 0x11, 0x81, 0x71, 0x36, 0x32, 0x01, 0x10, 0x99, 0x30, 0x32, 0x92, 0xac, 0x09, - 0xba, 0xde, 0x8b, 0xa1, 0xcd, 0x89, 0x33, 0x91, 0x89, 0x11, 0xba, 0xbe, 0xed, 0x8a, 0x21, 0x04, - 0x89, 0x18, 0x34, 0x54, 0x23, 0x13, 0x88, 0x08, 0x30, 0xc2, 0x9b, 0x00, 0xfc, 0xbc, 0x98, 0xaa, - 0x89, 0x80, 0x89, 0xba, 0x52, 0x23, 0x99, 0x61, 0x27, 0x98, 0x31, 0x25, 0x02, 0x20, 0x33, 0x25, - 0xd9, 0x09, 0xda, 0xbc, 0xa9, 0x8a, 0x38, 0x81, 0x38, 0x36, 0x81, 0xda, 0x9d, 0xa9, 0x99, 0x28, - 0x81, 0x31, 0x15, 0x10, 0x62, 0x23, 0x01, 0x21, 0x21, 0x37, 0x02, 0x00, 0x02, 0xfb, 0xcd, 0xcc, - 0xaa, 0x99, 0x9a, 0x9a, 0x21, 0x01, 0x18, 0x35, 0x43, 0x63, 0x23, 0x42, 0x03, 0x20, 0xa1, 0x8a, - 0xb8, 0xce, 0x0a, 0x91, 0xac, 0x73, 0x83, 0x99, 0x10, 0x01, 0x80, 0xb8, 0xcf, 0xcb, 0x8a, 0x00, - 0x22, 0x43, 0x34, 0x21, 0x21, 0x83, 0xab, 0xeb, 0x89, 0x51, 0x03, 0x20, 0x46, 0x91, 0xcb, 0xab, - 0x99, 0x9a, 0xec, 0x9a, 0x80, 0x00, 0x90, 0x80, 0x8b, 0xa0, 0x1a, 0x55, 0x46, 0x23, 0x02, 0x31, - 0x23, 0xa8, 0x18, 0xc0, 0xec, 0xbc, 0x8b, 0x89, 0x00, 0x01, 0xd9, 0x9c, 0xba, 0xbe, 0x9b, 0x00, - 0x00, 0x63, 0x00, 0x43, 0x63, 0x12, 0x23, 0x90, 0x29, 0x47, 0x13, 0x20, 0x02, 0xfb, 0x0a, 0x00, - 0xb8, 0xbc, 0xca, 0xcd, 0x9a, 0x00, 0x18, 0x34, 0x22, 0x10, 0x43, 0x24, 0x11, 0x01, 0xa9, 0xda, - 0xaf, 0x18, 0x22, 0xa0, 0x8a, 0x09, 0x44, 0x36, 0x82, 0xcb, 0xbb, 0x99, 0x9a, 0xba, 0xbc, 0x19, - 0x12, 0x29, 0x25, 0x12, 0xdc, 0x19, 0x54, 0x14, 0xb0, 0x8a, 0x32, 0x25, 0xa8, 0x29, 0x02, 0xca, - 0xcb, 0x9b, 0x00, 0x10, 0xfb, 0xdf, 0x88, 0xa9, 0xab, 0x20, 0x81, 0x40, 0x13, 0x73, 0x45, 0x13, - 0x18, 0x01, 0x11, 0x80, 0x08, 0x21, 0x00, 0x91, 0xcf, 0x88, 0xea, 0xbc, 0xa9, 0xba, 0x18, 0x01, - 0xdb, 0x19, 0x53, 0x33, 0x12, 0x08, 0x21, 0x32, 0x24, 0xa0, 0x9b, 0x40, 0x57, 0x22, 0x43, 0x23, - 0xf9, 0xac, 0xbb, 0x9a, 0xbb, 0x1a, 0x32, 0x90, 0x88, 0x20, 0x55, 0x34, 0xa1, 0x89, 0xa9, 0x0b, - 0xb8, 0x0a, 0x45, 0x12, 0x41, 0x14, 0x88, 0x61, 0x14, 0xa9, 0xb9, 0xaa, 0xed, 0xbb, 0xbc, 0xba, - 0x8a, 0x09, 0x65, 0x32, 0x34, 0x12, 0xb9, 0x38, 0x24, 0x22, 0x32, 0x43, 0x13, 0xd9, 0x1a, 0x63, - 0xa1, 0xbd, 0xbb, 0xaa, 0x9a, 0xca, 0x9b, 0xfd, 0xbb, 0x19, 0x02, 0x20, 0x35, 0x21, 0x00, 0x32, - 0x33, 0x54, 0x13, 0xd8, 0x0b, 0x21, 0x41, 0x34, 0x82, 0x99, 0xbd, 0xac, 0xea, 0xbc, 0x29, 0x12, - 0x19, 0x43, 0x03, 0x9a, 0xa8, 0xb9, 0xbf, 0x30, 0xb1, 0xab, 0xad, 0x41, 0x37, 0x81, 0x10, 0x52, - 0x22, 0x12, 0xca, 0xbd, 0xdb, 0xbb, 0x19, 0x33, 0x03, 0x10, 0x41, 0x02, 0x01, 0xba, 0xdf, 0x29, - 0x23, 0x88, 0x10, 0x54, 0x33, 0x84, 0x08, 0x21, 0x81, 0x41, 0x82, 0xca, 0xbf, 0x99, 0xba, 0xdc, - 0xab, 0xa9, 0x98, 0x9a, 0x09, 0x99, 0xda, 0x70, 0x25, 0x11, 0x32, 0x24, 0x34, 0x80, 0x08, 0x90, - 0x8b, 0x60, 0x25, 0x82, 0xaa, 0x38, 0xd2, 0xbe, 0xac, 0xca, 0xab, 0xab, 0x31, 0x04, 0xaa, 0x21, - 0xb2, 0x79, 0x25, 0x80, 0x09, 0x28, 0x64, 0x22, 0x12, 0x80, 0xcb, 0xbb, 0xba, 0x9b, 0xa9, 0x89, - 0x72, 0x34, 0x23, 0xd8, 0xbb, 0xca, 0xcc, 0x9b, 0x89, 0x41, 0x43, 0x34, 0x43, 0x22, 0x31, 0x23, - 0x31, 0x01, 0xd9, 0xbb, 0xa8, 0xdd, 0xbc, 0xbc, 0x9b, 0x89, 0x99, 0x98, 0x9b, 0x88, 0x9b, 0x73, - 0x27, 0x08, 0x32, 0x33, 0x43, 0x45, 0x22, 0x98, 0x18, 0x13, 0x88, 0x52, 0x92, 0xce, 0xab, 0xb9, - 0xbd, 0xbc, 0xba, 0xaa, 0x9a, 0x00, 0x18, 0x64, 0x13, 0x21, 0x22, 0x44, 0x12, 0x91, 0x39, 0x35, - 0x90, 0x38, 0x14, 0x18, 0x15, 0xb9, 0x1a, 0xe8, 0xbd, 0x9a, 0x89, 0xc8, 0x9d, 0x90, 0xba, 0x0b, - 0x43, 0x21, 0x45, 0x22, 0x22, 0x44, 0x34, 0x22, 0x00, 0xb9, 0x0a, 0x99, 0xf9, 0xdf, 0x98, 0x99, - 0x00, 0x30, 0x24, 0x80, 0xaa, 0xcc, 0xbc, 0xba, 0x8a, 0x53, 0x43, 0x43, 0x23, 0x23, 0x34, 0x33, - 0x11, 0x01, 0xca, 0x8b, 0xa0, 0xae, 0xbb, 0xbe, 0x9c, 0x88, 0xa0, 0xbc, 0x89, 0xc9, 0xac, 0x10, - 0x20, 0xd0, 0x2a, 0x12, 0xcb, 0x70, 0x27, 0x12, 0x01, 0x10, 0x00, 0x09, 0x20, 0x24, 0xb9, 0x1a, - 0xc1, 0x8c, 0x81, 0xd9, 0xbe, 0xba, 0x9d, 0x08, 0x20, 0x34, 0x13, 0x08, 0x53, 0x92, 0xac, 0x18, - 0xa9, 0x9a, 0x71, 0x02, 0x28, 0x36, 0x03, 0xcb, 0x09, 0x88, 0x51, 0x24, 0xea, 0xbc, 0xb9, 0xaa, - 0xac, 0x19, 0x82, 0x89, 0x75, 0x23, 0x21, 0x02, 0x98, 0x18, 0x33, 0x32, 0x00, 0x22, 0x02, 0xbb, - 0xd8, 0xaf, 0x88, 0xb8, 0xdf, 0xcb, 0xcc, 0x9a, 0x99, 0xba, 0x9a, 0x52, 0x34, 0x45, 0x32, 0x13, - 0x88, 0x88, 0x88, 0x10, 0xa8, 0x38, 0x27, 0x91, 0x18, 0x91, 0xdc, 0xad, 0x09, 0x18, 0x01, 0x08, - 0x98, 0xdd, 0xbc, 0xaa, 0x88, 0x08, 0x10, 0x45, 0x23, 0x12, 0x44, 0x54, 0x12, 0x80, 0x98, 0xa8, - 0xbb, 0x18, 0xb9, 0x1b, 0xf8, 0xdf, 0x88, 0x89, 0x08, 0x80, 0x08, 0x53, 0x12, 0x00, 0x28, 0x12, - 0xb0, 0xad, 0x52, 0x53, 0x33, 0x01, 0x08, 0x91, 0xcd, 0x88, 0x88, 0x11, 0xfa, 0x9f, 0x88, 0x9a, - 0xca, 0x9a, 0x8b, 0x32, 0x34, 0x32, 0x34, 0x13, 0x11, 0x31, 0x24, 0x42, 0x13, 0xba, 0x5a, 0x57, - 0x81, 0x00, 0x98, 0x99, 0xb9, 0xca, 0xba, 0xdf, 0xab, 0x9a, 0x99, 0x10, 0x81, 0x39, 0x32, 0x35, - 0x44, 0x35, 0x23, 0x00, 0x21, 0x81, 0x18, 0x90, 0xdf, 0x19, 0xa8, 0x09, 0x01, 0xca, 0x09, 0xca, - 0x0a, 0x41, 0x92, 0xac, 0xfa, 0x8a, 0x89, 0x00, 0x54, 0x12, 0x63, 0x33, 0x32, 0x80, 0xbb, 0x0b, - 0x12, 0xa8, 0xdc, 0x9d, 0x08, 0xcc, 0xbb, 0xcd, 0xba, 0x8a, 0x00, 0x41, 0x14, 0x01, 0x53, 0x12, - 0x92, 0x0a, 0x63, 0x03, 0x21, 0x23, 0x22, 0x02, 0x18, 0x36, 0xe9, 0x9b, 0x22, 0xfa, 0xaa, 0xa8, - 0xab, 0xc9, 0xbb, 0x8b, 0xaa, 0x88, 0x41, 0x77, 0x03, 0x99, 0x09, 0x91, 0x30, 0x03, 0x00, 0x54, - 0x91, 0x71, 0x17, 0x88, 0x08, 0xa0, 0xbc, 0x88, 0xa8, 0xc9, 0xbd, 0x8a, 0x80, 0x28, 0x03, 0x20, - 0x53, 0x23, 0x73, 0x13, 0x00, 0x88, 0x00, 0x08, 0xd8, 0x8b, 0x12, 0xc0, 0xae, 0x98, 0x9d, 0x00, - 0x91, 0xdc, 0xbb, 0x8a, 0x10, 0x11, 0x90, 0x28, 0x46, 0x23, 0x22, 0x11, 0x46, 0x43, 0x34, 0x12, - 0x80, 0x08, 0x80, 0x43, 0xc8, 0xbc, 0xab, 0xcd, 0xab, 0x99, 0xca, 0xbc, 0x9b, 0x09, 0x22, 0x21, - 0xfa, 0x8d, 0x32, 0x10, 0x45, 0x22, 0x33, 0x33, 0xa1, 0x2b, 0x47, 0x80, 0x99, 0x11, 0xc9, 0xcc, - 0x9c, 0xa8, 0x8b, 0xa0, 0xcb, 0x20, 0x34, 0x43, 0x82, 0x9a, 0x00, 0x98, 0x09, 0x01, 0xcb, 0x88, - 0x30, 0x75, 0x15, 0x20, 0x45, 0x92, 0x9a, 0xb8, 0xdf, 0xcb, 0x09, 0x02, 0xa9, 0x08, 0x20, 0x53, - 0x02, 0x21, 0x23, 0x00, 0x10, 0x24, 0x51, 0x25, 0x90, 0x28, 0xc0, 0x8c, 0x20, 0x80, 0x88, 0xba, - 0x19, 0xb2, 0xff, 0xad, 0x99, 0xba, 0x99, 0x08, 0x90, 0x29, 0x34, 0x33, 0x55, 0x25, 0x01, 0x10, - 0x11, 0x40, 0x05, 0x08, 0x10, 0x90, 0x20, 0xa1, 0xff, 0x8a, 0x98, 0xa9, 0x20, 0x82, 0xa9, 0xbd, - 0x29, 0x12, 0x20, 0x82, 0xbe, 0x19, 0x34, 0x12, 0x20, 0xa8, 0x31, 0x72, 0x27, 0x01, 0xa8, 0x8a, - 0xfc, 0x9b, 0x88, 0x80, 0x38, 0x26, 0x01, 0x08, 0x90, 0xcb, 0x18, 0x91, 0x8d, 0x11, 0xc9, 0xac, - 0x39, 0x77, 0x22, 0x10, 0x12, 0x00, 0x12, 0x81, 0xfd, 0xac, 0x8a, 0x98, 0x89, 0x09, 0x01, 0x21, - 0xa0, 0x9a, 0x9a, 0x52, 0x42, 0xb3, 0xae, 0x31, 0x26, 0x20, 0x34, 0x11, 0x08, 0x21, 0x34, 0x01, - 0x99, 0x0a, 0xa3, 0xcf, 0xcd, 0x89, 0x9a, 0x98, 0x8d, 0x11, 0x01, 0x89, 0xa9, 0xbc, 0xcb, 0x0a, - 0x64, 0x12, 0x34, 0x33, 0x12, 0x31, 0x16, 0xb9, 0xaf, 0x0a, 0x01, 0xa9, 0x40, 0x82, 0xb9, 0x8a, - 0xa0, 0xdb, 0xbd, 0x98, 0x8a, 0x40, 0x37, 0x23, 0x01, 0x98, 0x19, 0x26, 0x22, 0x91, 0xa9, 0x68, - 0x93, 0xdf, 0xaa, 0x9b, 0x00, 0x10, 0x52, 0x12, 0x90, 0xa9, 0xcb, 0xcd, 0xab, 0x18, 0x31, 0x27, - 0x12, 0x01, 0x30, 0x54, 0x33, 0x31, 0x23, 0x82, 0xcb, 0x88, 0xca, 0xcf, 0xac, 0x19, 0x91, 0x09, - 0x88, 0x00, 0xeb, 0x9a, 0x89, 0x09, 0x02, 0x88, 0x30, 0x57, 0x01, 0x32, 0x02, 0x20, 0x22, 0x80, - 0x73, 0x23, 0xcb, 0x9b, 0x9a, 0x80, 0xfb, 0x9b, 0xdb, 0x9b, 0x18, 0x11, 0x02, 0x80, 0x71, 0x13, - 0x20, 0x84, 0xbc, 0x70, 0x24, 0x12, 0x11, 0xa9, 0xcb, 0xcc, 0x89, 0xa9, 0xa9, 0x29, 0x92, 0x38, - 0x93, 0xdd, 0xbd, 0x9d, 0x01, 0x51, 0x23, 0x02, 0x00, 0x31, 0x73, 0x35, 0x12, 0x21, 0x81, 0x9b, - 0xca, 0xdb, 0xbd, 0x8a, 0x98, 0xbd, 0x19, 0x32, 0x12, 0x43, 0xd8, 0x9a, 0xeb, 0xac, 0x0a, 0x11, - 0x44, 0x12, 0x32, 0x33, 0x14, 0xa8, 0x9b, 0x89, 0x98, 0x20, 0x37, 0xa1, 0xbd, 0x18, 0x41, 0x92, - 0xac, 0x08, 0x02, 0xdc, 0x09, 0x12, 0xc9, 0xba, 0xad, 0x40, 0x84, 0x08, 0x44, 0x21, 0x01, 0x98, - 0xbc, 0xec, 0xac, 0x9a, 0x38, 0x36, 0x01, 0x80, 0x11, 0x22, 0xc1, 0xad, 0x8a, 0x90, 0x09, 0x31, - 0x12, 0x23, 0x12, 0x72, 0x16, 0x32, 0x82, 0xde, 0x89, 0x00, 0x01, 0x99, 0x01, 0x89, 0x52, 0x24, - 0x02, 0xeb, 0xcb, 0xba, 0x9a, 0xa0, 0xad, 0x9a, 0x31, 0x24, 0x64, 0x13, 0xa0, 0xcb, 0x09, 0x11, - 0x21, 0x20, 0x34, 0x55, 0x35, 0x02, 0x08, 0x11, 0xc8, 0xae, 0x08, 0xb8, 0xbc, 0xcb, 0xbb, 0x9c, - 0x18, 0x81, 0x19, 0x14, 0x51, 0x44, 0x23, 0x08, 0x81, 0x98, 0xac, 0x33, 0xb9, 0xbb, 0x58, 0x24, - 0x81, 0x89, 0xfb, 0xab, 0xba, 0x49, 0x25, 0xb0, 0x9e, 0x00, 0x00, 0x88, 0x61, 0x13, 0x02, 0x41, - 0x16, 0x12, 0x90, 0x9c, 0x00, 0xd9, 0xad, 0x80, 0x88, 0x10, 0x22, 0xb0, 0xff, 0xaa, 0x09, 0x22, - 0x21, 0x00, 0x24, 0xb8, 0xaa, 0x40, 0x13, 0x45, 0x12, 0x10, 0x45, 0x01, 0x89, 0x30, 0x34, 0xc8, - 0x9b, 0xe9, 0xbe, 0x9b, 0xaa, 0xbb, 0xab, 0xaa, 0x71, 0x25, 0x00, 0x22, 0x33, 0x90, 0xaa, 0x18, - 0x32, 0xb2, 0xbf, 0x58, 0x12, 0x00, 0x42, 0xb1, 0xae, 0x89, 0x18, 0x22, 0xc8, 0x8c, 0x30, 0x25, - 0x90, 0xaa, 0x53, 0x82, 0xac, 0x18, 0x56, 0x23, 0x88, 0x80, 0xda, 0xbb, 0xba, 0x18, 0x12, 0xfc, - 0xab, 0x28, 0x81, 0x88, 0x11, 0x83, 0xa9, 0x38, 0x27, 0x90, 0x30, 0x90, 0x49, 0x14, 0x42, 0x55, - 0x04, 0x08, 0xb8, 0xae, 0x08, 0xc8, 0xac, 0x21, 0x33, 0x12, 0x32, 0x83, 0xfe, 0x9c, 0x10, 0xaa, - 0x89, 0x42, 0x32, 0x13, 0xa9, 0xb9, 0x9a, 0xad, 0x09, 0x20, 0xa3, 0x79, 0x14, 0x22, 0x44, 0x14, - 0xa8, 0x98, 0x88, 0xbc, 0x0a, 0x25, 0xea, 0x8b, 0x53, 0x12, 0x88, 0x80, 0x52, 0x03, 0xca, 0xaa, - 0x21, 0xb1, 0xcf, 0x19, 0x91, 0xeb, 0x9c, 0x08, 0x32, 0x82, 0x8a, 0x13, 0x32, 0x11, 0x42, 0x67, - 0x80, 0x9a, 0x99, 0x01, 0x08, 0xc9, 0x98, 0x9b, 0xe9, 0x1b, 0x24, 0x92, 0xbf, 0x08, 0x22, 0x44, - 0x53, 0x82, 0xba, 0x10, 0x00, 0x01, 0xaa, 0x18, 0xfb, 0xbf, 0x18, 0xa1, 0xbc, 0x8a, 0x32, 0x33, - 0x13, 0x38, 0x43, 0xb8, 0xff, 0x28, 0x11, 0x31, 0x37, 0x81, 0x00, 0x98, 0xaa, 0x18, 0x80, 0xbc, - 0x40, 0x02, 0x18, 0x12, 0xb8, 0xcf, 0xaa, 0xcb, 0xbc, 0x9b, 0x18, 0x32, 0x43, 0x37, 0x03, 0x10, - 0x01, 0x08, 0xb9, 0xbd, 0xcd, 0xaa, 0x00, 0x20, 0x43, 0x23, 0x51, 0x15, 0x80, 0xa9, 0xdc, 0xbb, - 0x9b, 0xb8, 0x9b, 0x42, 0x02, 0x31, 0x55, 0x22, 0x20, 0x43, 0x34, 0x34, 0xd8, 0xab, 0x99, 0xdc, - 0x0a, 0x82, 0xcb, 0xbb, 0x99, 0x28, 0x06, 0x88, 0x08, 0x24, 0x32, 0x37, 0x24, 0x80, 0x31, 0x81, - 0x18, 0x24, 0xb9, 0xaa, 0x9a, 0xda, 0x9a, 0x9a, 0xab, 0xcf, 0xac, 0x9a, 0x89, 0x31, 0x24, 0x22, - 0x92, 0x20, 0xc9, 0x60, 0x34, 0x12, 0x33, 0x03, 0xfb, 0x8d, 0x98, 0xdc, 0xaa, 0xbc, 0x8c, 0x80, - 0x38, 0x46, 0x24, 0x12, 0x02, 0x80, 0xe9, 0x9b, 0x89, 0x00, 0x09, 0xba, 0x18, 0x31, 0x22, 0x31, - 0x92, 0x64, 0xfa, 0x8d, 0x20, 0xa0, 0x8c, 0x20, 0x13, 0xaa, 0x8a, 0x73, 0x34, 0x91, 0x19, 0x22, - 0x80, 0x10, 0xc8, 0xcc, 0x89, 0x91, 0xed, 0x89, 0x21, 0x44, 0x33, 0x23, 0xc8, 0xbc, 0x38, 0x02, - 0xa9, 0xd9, 0x8c, 0x00, 0x08, 0x88, 0x10, 0x91, 0xfc, 0x29, 0x37, 0xa1, 0xaa, 0xba, 0x9a, 0xca, - 0x9c, 0x31, 0x24, 0x34, 0xb8, 0x2a, 0x92, 0xdf, 0x09, 0x10, 0x62, 0x24, 0x00, 0x89, 0x22, 0x83, - 0xcd, 0xab, 0x98, 0x9a, 0xab, 0x41, 0x33, 0xc8, 0x9b, 0x48, 0x33, 0xeb, 0x8a, 0xd9, 0xcd, 0x28, - 0x35, 0x23, 0x12, 0x01, 0x89, 0x41, 0x24, 0x98, 0xda, 0xbd, 0x8a, 0x98, 0x9a, 0x0a, 0x43, 0x23, - 0x42, 0x36, 0x14, 0x80, 0x90, 0x19, 0xb1, 0xad, 0x9a, 0x99, 0x32, 0xf0, 0x1a, 0x25, 0xa1, 0x9a, - 0x89, 0xaa, 0x08, 0x10, 0xfb, 0xbb, 0xce, 0x9b, 0x89, 0x11, 0x29, 0x25, 0x08, 0x74, 0x15, 0x99, - 0x08, 0x80, 0x98, 0x8a, 0xca, 0x8c, 0x31, 0x35, 0x83, 0xbc, 0x09, 0x23, 0xc0, 0xbd, 0x09, 0x92, - 0xae, 0x30, 0x02, 0xaa, 0x9a, 0x18, 0x35, 0x44, 0x02, 0x09, 0x82, 0x72, 0x57, 0x02, 0x99, 0xba, - 0xdb, 0x9a, 0x01, 0x00, 0x01, 0x20, 0x12, 0x82, 0x61, 0x13, 0x90, 0xcb, 0x9a, 0x51, 0x35, 0x11, - 0x80, 0xb9, 0x10, 0x18, 0x57, 0x03, 0xdc, 0xac, 0xab, 0x9a, 0x08, 0x98, 0x32, 0x12, 0x21, 0x31, - 0x54, 0x02, 0xbc, 0x61, 0x22, 0x90, 0x0b, 0xb9, 0x09, 0xec, 0x89, 0x00, 0xd9, 0xbb, 0x30, 0x15, - 0x22, 0x41, 0x26, 0x11, 0x92, 0xdd, 0xbb, 0xbb, 0xab, 0x42, 0x24, 0x12, 0x18, 0x13, 0x20, 0x91, - 0xbf, 0x59, 0x45, 0x03, 0x8a, 0x98, 0xaa, 0xcb, 0x9a, 0x99, 0x38, 0x47, 0x12, 0x28, 0x43, 0x02, - 0xba, 0xbc, 0xcb, 0xab, 0x53, 0x82, 0xca, 0x28, 0x43, 0x02, 0x40, 0x45, 0xa1, 0xac, 0xb9, 0xac, - 0xab, 0x89, 0x31, 0x32, 0x73, 0x81, 0x89, 0x10, 0x02, 0x32, 0x90, 0xfe, 0xcc, 0x9a, 0x80, 0x81, - 0x08, 0x20, 0x04, 0x88, 0x72, 0x16, 0xa0, 0x0a, 0x10, 0x00, 0x10, 0x98, 0xaa, 0xcf, 0x89, 0x99, - 0x28, 0x14, 0x98, 0x19, 0x22, 0x20, 0x46, 0x82, 0xba, 0x9a, 0xa9, 0x8b, 0x56, 0x82, 0xab, 0x54, - 0x02, 0x31, 0x35, 0x23, 0x91, 0xac, 0x89, 0xf9, 0x9b, 0x08, 0x82, 0xeb, 0xbb, 0x18, 0x32, 0x54, - 0x81, 0xca, 0x29, 0x23, 0xa8, 0x18, 0x08, 0x02, 0x80, 0xa0, 0x0f, 0x34, 0x32, 0xb9, 0xde, 0x8b, - 0x90, 0xae, 0x9b, 0x89, 0x88, 0x99, 0x00, 0xaf, 0x62, 0x81, 0x18, 0x36, 0x02, 0x80, 0x53, 0x91, - 0xaa, 0xb9, 0xbe, 0x8b, 0x21, 0x01, 0x54, 0x83, 0xaa, 0x00, 0xd9, 0xac, 0x80, 0x30, 0x14, 0xcd, - 0x0a, 0x02, 0x40, 0x14, 0x21, 0x53, 0x33, 0x35, 0x12, 0xb8, 0xdc, 0xcb, 0xbb, 0xab, 0x09, 0x21, - 0x32, 0x55, 0x01, 0x20, 0x24, 0xa1, 0xb9, 0xbb, 0xcb, 0xdf, 0x8a, 0x21, 0x81, 0x00, 0x43, 0x35, - 0x82, 0x90, 0xba, 0xbc, 0xbc, 0x0a, 0x42, 0x93, 0x9a, 0x12, 0xc9, 0x19, 0xa9, 0xba, 0xee, 0x1b, - 0x34, 0x81, 0x10, 0xa8, 0x3a, 0x57, 0xa8, 0x88, 0x99, 0xbb, 0x71, 0x25, 0x81, 0x98, 0x00, 0x32, - 0x02, 0xa0, 0xbf, 0x89, 0xca, 0x29, 0x02, 0xcb, 0x9a, 0xaa, 0x9b, 0x61, 0x55, 0x23, 0x32, 0x32, - 0x91, 0xaa, 0xdb, 0xbb, 0x9b, 0xab, 0xaa, 0x70, 0x26, 0x31, 0x23, 0xc8, 0xbd, 0xba, 0xda, 0x9e, - 0x89, 0x00, 0x00, 0x31, 0x24, 0x53, 0x44, 0x22, 0x80, 0x99, 0xba, 0xad, 0xa9, 0xbc, 0xaa, 0xaa, - 0x39, 0x25, 0x43, 0x21, 0x25, 0x22, 0xb1, 0xcf, 0xbb, 0xbd, 0x9a, 0x20, 0x44, 0x12, 0x20, 0x23, - 0x02, 0x08, 0xa0, 0x89, 0x29, 0x73, 0x37, 0x11, 0xb9, 0xdb, 0xab, 0x08, 0xc9, 0x9a, 0x18, 0x01, - 0x41, 0x33, 0x23, 0xa0, 0xaa, 0xb9, 0xac, 0x55, 0x33, 0xe9, 0x09, 0x33, 0x84, 0xaa, 0x58, 0x36, - 0xa0, 0x19, 0xc8, 0xcd, 0x9a, 0x89, 0x12, 0x22, 0xb0, 0xaf, 0x00, 0x20, 0x41, 0x43, 0x12, 0x11, - 0x91, 0x9a, 0x02, 0xda, 0xde, 0x9b, 0x21, 0x90, 0x2a, 0x36, 0x12, 0x91, 0x18, 0x83, 0xff, 0xab, - 0xcb, 0xbb, 0x29, 0x33, 0x31, 0x45, 0x34, 0x82, 0x98, 0x10, 0x43, 0xa0, 0x9c, 0x10, 0x12, 0x40, - 0x03, 0xb9, 0x4a, 0x15, 0xba, 0x19, 0x91, 0xed, 0xab, 0x98, 0xab, 0xbb, 0x0a, 0x52, 0x03, 0xca, - 0xbb, 0x2b, 0x77, 0x22, 0x23, 0x23, 0x12, 0x11, 0x92, 0xca, 0xdd, 0xbd, 0xbc, 0x1a, 0x43, 0x03, - 0xa9, 0x08, 0x10, 0x22, 0x25, 0xb9, 0xda, 0x8b, 0x73, 0x03, 0x80, 0x99, 0x09, 0x11, 0x33, 0xcb, - 0x8a, 0x01, 0xfd, 0xab, 0xbb, 0x80, 0xcb, 0x99, 0x11, 0x22, 0x22, 0x34, 0xb1, 0xef, 0xba, 0x42, - 0x32, 0x32, 0x23, 0x44, 0x01, 0x31, 0x35, 0x11, 0x90, 0x48, 0x44, 0x83, 0x99, 0xca, 0xce, 0xbb, - 0xbc, 0x9c, 0x00, 0x10, 0x01, 0xca, 0x38, 0x33, 0x44, 0x23, 0x62, 0x33, 0x81, 0x10, 0xa1, 0x0b, - 0xd1, 0xcf, 0x9a, 0x00, 0x21, 0x01, 0xba, 0x89, 0x89, 0x30, 0x25, 0xfb, 0x89, 0x21, 0x33, 0x08, - 0x12, 0xfc, 0x9b, 0x43, 0xb1, 0x0c, 0x52, 0x34, 0x34, 0xc8, 0xad, 0x88, 0xba, 0xbc, 0x99, 0x90, - 0x8a, 0x30, 0x36, 0x02, 0x31, 0x04, 0x98, 0xab, 0x41, 0x45, 0x12, 0x42, 0x83, 0x10, 0x31, 0x45, - 0xa2, 0xcd, 0x0a, 0xa0, 0xab, 0x88, 0xda, 0xa9, 0xbb, 0x1a, 0x24, 0x33, 0x73, 0xc1, 0xab, 0x19, - 0x11, 0xeb, 0xab, 0x30, 0xb8, 0x73, 0x27, 0x21, 0x22, 0x01, 0x28, 0x13, 0xcd, 0xab, 0x99, 0x11, - 0xdd, 0xac, 0x88, 0x00, 0x11, 0x01, 0x18, 0x44, 0x33, 0x82, 0xbc, 0x0c, 0x21, 0x52, 0x84, 0xaa, - 0xa9, 0xeb, 0xbb, 0x99, 0xaa, 0x30, 0x24, 0x02, 0x42, 0xb0, 0xa9, 0xdb, 0xab, 0x20, 0x09, 0x57, - 0x24, 0x82, 0xab, 0x20, 0x20, 0x67, 0x43, 0x12, 0x80, 0x99, 0xb9, 0xbe, 0x99, 0x00, 0xc8, 0x0a, - 0x24, 0x13, 0xd9, 0xbe, 0x8a, 0xba, 0xac, 0x00, 0x51, 0x13, 0x21, 0x37, 0x01, 0xaa, 0x89, 0x08, - 0x73, 0x12, 0x11, 0x11, 0x90, 0xb9, 0xbe, 0x89, 0xaa, 0x8b, 0x53, 0x10, 0xc8, 0x9b, 0x01, 0x99, - 0x99, 0xdd, 0xab, 0x21, 0xb0, 0xaa, 0x0b, 0xec, 0x59, 0x34, 0x32, 0x44, 0x24, 0x01, 0xa9, 0xbc, - 0xcb, 0xcb, 0xcb, 0xab, 0x20, 0x53, 0x12, 0x31, 0x24, 0x22, 0x82, 0x38, 0x36, 0x13, 0x98, 0x19, - 0x36, 0x90, 0xab, 0xdb, 0x9a, 0xc9, 0x8b, 0x81, 0xfa, 0xbb, 0xb0, 0xbe, 0x09, 0x01, 0xcb, 0x39, - 0x52, 0x13, 0x19, 0x13, 0xa9, 0xa0, 0x58, 0x37, 0x46, 0x12, 0x00, 0x08, 0x11, 0x11, 0x99, 0x73, - 0x91, 0xea, 0xcb, 0xbb, 0x9b, 0xac, 0x89, 0x9a, 0x28, 0x47, 0x83, 0x08, 0x11, 0xa8, 0xac, 0x31, - 0x02, 0x99, 0x41, 0x24, 0x23, 0x33, 0xfc, 0x9a, 0x99, 0xa9, 0x09, 0xa8, 0x51, 0x63, 0x25, 0x10, - 0x00, 0xa9, 0x0a, 0xa1, 0xbf, 0x99, 0xa0, 0xab, 0x54, 0x42, 0x25, 0x00, 0x30, 0x16, 0xa0, 0x89, - 0xfb, 0xba, 0xba, 0xbc, 0x89, 0x00, 0x10, 0x32, 0x37, 0x80, 0x21, 0x02, 0xda, 0x1a, 0x52, 0x34, - 0x14, 0x81, 0x10, 0x81, 0x9b, 0xda, 0xae, 0x19, 0x90, 0x18, 0x14, 0xba, 0xab, 0x02, 0xcc, 0x89, - 0x88, 0xba, 0x1b, 0x52, 0x05, 0xcc, 0x9a, 0x89, 0x62, 0x32, 0x23, 0xca, 0x0a, 0x13, 0x19, 0x77, - 0x12, 0x80, 0x88, 0x10, 0x00, 0xba, 0xdc, 0xbb, 0xca, 0xab, 0x00, 0x00, 0x42, 0x45, 0x14, 0x00, - 0xa9, 0x38, 0x37, 0x92, 0x08, 0x01, 0xa0, 0xbd, 0xab, 0xb9, 0xcf, 0x99, 0x09, 0x41, 0x12, 0x31, - 0x02, 0xba, 0xbd, 0x11, 0xa8, 0xcd, 0x18, 0x10, 0x23, 0x73, 0x24, 0x22, 0x12, 0x23, 0x20, 0x33, - 0xa1, 0xce, 0xbb, 0xcc, 0xcd, 0x9b, 0x98, 0x00, 0xb9, 0x8b, 0x90, 0xdb, 0x50, 0x24, 0x21, 0x12, - 0x90, 0x3a, 0x37, 0x88, 0x11, 0x82, 0x99, 0xa9, 0x50, 0x57, 0x12, 0x81, 0x88, 0x98, 0xda, 0xab, - 0x00, 0xba, 0x8b, 0xda, 0x9b, 0x30, 0x13, 0x10, 0xa1, 0x53, 0x45, 0x01, 0x20, 0x12, 0x99, 0xcb, - 0xaa, 0x0a, 0x32, 0x45, 0x23, 0xa9, 0xdd, 0xdb, 0xcb, 0xaa, 0xaa, 0x9a, 0x52, 0x24, 0x11, 0x31, - 0x33, 0x52, 0x34, 0x12, 0x54, 0x23, 0x90, 0x19, 0xda, 0xdb, 0xcc, 0xba, 0x9a, 0x09, 0x00, 0x10, - 0x11, 0x90, 0x19, 0xb1, 0x9c, 0x12, 0x44, 0x55, 0x23, 0xa0, 0x99, 0x09, 0x44, 0x12, 0x00, 0x42, - 0x01, 0x20, 0x43, 0x92, 0x9c, 0xb8, 0xcf, 0xbb, 0x9a, 0x09, 0x19, 0x11, 0x32, 0x91, 0x1b, 0x30, - 0x17, 0xbb, 0x41, 0x23, 0x13, 0x90, 0xbb, 0xb9, 0x99, 0xdb, 0xeb, 0x8a, 0x32, 0x34, 0x81, 0xcb, - 0xba, 0xbe, 0x8b, 0x53, 0x82, 0x90, 0x09, 0x63, 0x11, 0xa0, 0x30, 0x25, 0x90, 0x0a, 0x56, 0x13, - 0x80, 0x88, 0xeb, 0xbc, 0x8a, 0x21, 0xa8, 0xba, 0xca, 0xdb, 0xab, 0xa8, 0x9b, 0x33, 0x26, 0x42, - 0x44, 0x25, 0x22, 0x11, 0x90, 0x99, 0x09, 0x91, 0xca, 0xcd, 0x9a, 0x89, 0x99, 0x3a, 0x37, 0x21, - 0x20, 0x22, 0xb9, 0x0b, 0xfb, 0xbc, 0x9c, 0x88, 0x18, 0x43, 0x81, 0x31, 0x02, 0x00, 0x12, 0x33, - 0x14, 0x10, 0x21, 0x33, 0x03, 0xcf, 0xaa, 0xaa, 0xab, 0x0a, 0x12, 0x41, 0x35, 0x90, 0xaa, 0xa1, - 0xbb, 0x31, 0x51, 0x13, 0x89, 0x55, 0x13, 0x80, 0x19, 0x22, 0xe9, 0xab, 0x88, 0xa8, 0xdc, 0xab, - 0xb9, 0x09, 0xa0, 0xcb, 0x28, 0x73, 0x02, 0x01, 0x11, 0x24, 0x99, 0x40, 0x25, 0x01, 0x00, 0x20, - 0x91, 0x99, 0x9a, 0x09, 0x42, 0x92, 0x10, 0x43, 0xb0, 0xbe, 0xb9, 0xbd, 0xdb, 0xab, 0x11, 0x00, - 0x28, 0x55, 0x22, 0x11, 0x10, 0x32, 0x34, 0x02, 0xcb, 0x9b, 0xb9, 0xaf, 0x9a, 0xa9, 0xcb, 0x09, - 0x23, 0x33, 0x13, 0x21, 0x23, 0x21, 0x11, 0xb0, 0x9b, 0x39, 0x13, 0xab, 0x00, 0x00, 0x20, 0x33, - 0x33, 0x21, 0x01, 0x99, 0x19, 0x93, 0xbd, 0xcb, 0x99, 0xcb, 0x89, 0x41, 0x24, 0x81, 0xa8, 0x9a, - 0x9a, 0x09, 0x30, 0x53, 0x01, 0x30, 0x35, 0x14, 0x10, 0x33, 0xa1, 0xbb, 0xbb, 0x9a, 0xb9, 0xab, - 0xbb, 0x0a, 0xbb, 0xac, 0x10, 0xba, 0xbb, 0xbb, 0x32, 0x43, 0x33, 0x33, 0x12, 0x12, 0x99, 0x9a, - 0x10, 0xd9, 0xab, 0x20, 0x12, 0x31, 0x01, 0x01, 0xb9, 0x9a, 0x09, 0x21, 0xb0, 0xae, 0x10, 0x90, - 0xa9, 0x20, 0x53, 0x13, 0x00, 0x19, 0x35, 0x83, 0x99, 0x0b, 0x21, 0xb9, 0xbc, 0xba, 0xdb, 0x89, - 0x09, 0x21, 0x33, 0x43, 0x00, 0x31, 0x13, 0xb0, 0xab, 0xb9, 0x99, 0x10, 0x23, 0xa0, 0x99, 0x32, - 0x31, 0x53, 0x02, 0x98, 0x00, 0x90, 0x9b, 0x00, 0xb9, 0xac, 0x08, 0x31, 0x92, 0xb9, 0x10, 0xc9, - 0x9b, 0x23, 0xb0, 0x9b, 0x21, 0x11, 0x22, 0x11, 0x21, 0x33, 0x03, 0xa9, 0x19, 0x21, 0x90, 0x9a, - 0xa9, 0x19, 0x99, 0xab, 0x99, 0xbb, 0x1a, 0x12, 0x12, 0x12, 0x01, 0x99, 0x10, 0x12, 0x11, 0x11, - 0x11, 0x91, 0x09, 0x10, 0x00, 0x9a, 0x29, 0x23, 0x91, 0x99, 0xa9, 0xab, 0xa9, 0x9a, 0x10, 0x01, - 0x09, 0x99, 0x11, 0x13, 0x11, 0x11, 0x22, 0x21, 0x12, 0x11, 0x01, 0xb9, 0x9b, 0xa9, 0x9a, 0x10, - 0x11, 0x21, 0x91, 0x19, 0x90, 0xa9, 0x99, 0x99, 0x99, 0x90, 0x99, 0x09, 0x00, 0x99, 0x10, 0x31, - 0x12, 0x01, 0x21, 0x22, 0x11, 0x10, 0x90, 0xb9, 0xab, 0x99, 0x9a, 0x11, 0x12, 0x90, 0x09, 0x90, - 0x99, 0x0a, 0x01, 0x00, 0x11, 0x11, 0x12, 0x11, 0x09, 0x00, 0x90, 0x19, 0x11, 0x11, 0x91, 0x90, - 0x90, 0xa9, 0x99, 0x0a, 0x99, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x10, 0x10, 0x01, 0x00, 0x01, - 0x99, 0x99, 0x99, 0x10, 0x00, 0x10, 0x19, 0x10, 0x01, 0x00, 0x00, 0x00, 0x99, 0x90, 0x09, 0x09, - 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x70, -}; - diff --git a/build/tests/yuv2rgb/yuv2rgb.rsf.template b/build/tests/yuv2rgb/yuv2rgb.rsf.template deleted file mode 100644 index a67b1fa4..00000000 --- a/build/tests/yuv2rgb/yuv2rgb.rsf.template +++ /dev/null @@ -1,222 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 128M - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit TmpJump: for TWL "ApplicationJump" function - # - #PermitLandingTmpJump $(TWL_IPL_MAKEROM_PERMIT_TMP_JUMP) - - ### - ### Setting for TWL - ### - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - WramMappingDirect $(TWL_IPL_RED_ROOT)/build/components/jackal.TWL/wram_regs/wram_regs.rbin - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion Japan - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SCFG: scfg lock [TRUE/FALSE] - # - LockSCFG FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - HwAESSlotB TRUE - - # - # NANDAccess: nand access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - AppType User - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # use "4NAJ" for hyena - GameCode HNAJ - GameCode NTRJ - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile FALSE -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -}

    d2lrW7P3iL1&ET z$j?XPj8!L&Jv~;PxYijPa>lA7d*X~$$6p1Vv7RG8bB!}jop|>2ICbJ%XI#h`r;hB2 zGfo|U6?DdVj{F=q&Ukea*wf?HNobw%A!ocgvM0`Xb^KM(8Sgpr-e8;w>LjwKC#aLy zIuk<91a)LjoC)gqtDrN%bL9QTI1|-*#h#w1P7>=(3^^0kkv(xHs^hPM&P30V_b}s3 zQYWcBJxQHp)|nJ?CaEKP;!IM~>o+Iyz#+j_ntM>F{b&^|Wa>$vij_ipuSsi~B zbS8U_yw@6MiaM{^(^J$*VVx-d2lrQ`PZTL1(Jx$Y%oMOj9S7Jv~jG)Yh36a;B*xd*Vz}$6p1VX`UmWGmJA`oj2_1 z>FT7h&h(HoT^-pIXSzE6D(Fo29Qo{GoEhq*wWnvOlg>IbLe30zWKWzK>iDamGsAP_ z^N?|7s*~QHo~cd->&y%}Gu4qjab~LHuY%4@&ymkq#+jwgoA&f9b>6bhtdKKH9oZ9S zmOB0_=*;pQ`P^ol+3IApr)R5^$vU$`&TMsLPn_B6_^Y5Z+jHczpmFA?li8l0qfQp< z%n3Pj)R8@L=BVSZg3cVzkiDam zGv9OMv$b(PP$#!N{ee1ptn)$0`9K}n6XyeU{8iBTz;opDx^Wh$lh>YJpiVyPEC@LZ z)R8@L7O3N|g3bcZk?#P;`B0tw_VkD96tK>RA?HJNWKWzA)$vzB=R?nt?-j=RNS%WA z^hfFxvd%{#=OcAwPn?g`@mE3TBhQiVD#lr;PGNg`p>gcLpJ!pnS!f*l@8?-)9B&nL z7OL}aeve{#NIE9LifueyAbUyYRxlfF7qK>}`I!io9?q}mHRj0H)y;PkttmNMVwlw4{RY&&3 zS*nh|3OY+YM}9^aXPG)>?dfIel(WvVkh4r3*%N1(I{qr?Eb|=sxnrE=>Xf&qm#b63 zI?F@Oa&=@+oaO5HtDv*obL3~4aXwL}qCNeII+d*RNyzy`9oZA-6LtJm(D}r3{ zwK}pV&T4i1RnS@OIr4sEoHgpywx`#qQ^z`MLe3g>WKWzm>iDamv&M7eJb=HQQwd%;8IBV7MS3zg3=g9k_an`9*-=1ElP6O+#3pwl5kv(zNspGGL&N|PL z_gdquSEr#py$8N)~h3X;;dK4Uj?1@o+Izy#@V1wV|#joI!&yzA>?dONA|?o zppL%^IvYGkJ`)&cqdHCP>5b|%v(Cnlvr!${6KA73{wnBf^c?w|VVq6sG`FWWsnfzb zn?lYeb!1PRP3rioptH$ya?||x2n_5I$J}|R&``goUQ8k ztDv*hbL4ZIaki<`-k#p3P6z933pv}=kv(y?spGGL&Nk1H&w|F;u1-gLdb>KEtg}7j zY*$D2#M!QnzY03rJx4xY8fS+(o$cuz>U6Qrj*zoM9oZ9ShdTZ$=}MPhMc|X$euWR)$vzBXRqhT_X^|eQ>ULjy-%I~ z*4Yz0rvEMbp~2zf5_Rdj_irEUmbrHboQ(BZ+?$I zz_0hk@9_s6vqO&AVaM!j@fC)?2Kb})-gNhn4Ndb zE;wcv9kWZ0*=5Jbz&2Lm}soIBH&_v(Dj=b66eO6X&ox{wnAk_8hsNjdMhu;r8?qbw;p~&rwH0&JlHFPn;v__^Y6E z#B=0lgmI3lGt!i9973(1)ZawBR_YH^Qk(c?CDR{8Eu_UL(Zq_ z$euW#s^hPM&ZnLuKg*1BOr0_I^f7hDTIX2EIi`;6iE~UHe-(6&d5-*iG|q8##@W-y z)fsP{<00p`IsC)Al>PoGd{qIFJ$oD=HEo;WAe@mE3Tgy+c5 zapRm+XOcaAQk}`xIT>ioK(kO1)Y}9<I*%RlCI{qr?obeoaUo_5Hb!OSqXVsZ)owFh5tU9tM&RKQ*RnR%>Ir3g>oO9~T zv8T_eGuJxjLe4pLWKW!P>iDambIx<*{o6R_)tP5cpI2wTb{It#3GA>>?8NA|?IppL%^Iu|@gK4%!`qBa4b>udB1h zI@d$ab#-JML zzEEeqJ^h6`8?5t1$oWDY*%Rjrb^KM(`NDJL^SW`qRA-|-{iQmatn+2a`BEL(6X#2H z{8iBT(sSfHfN{Q3XR|&1l{#Cj^Hs?CN*&n~=PPymRnYm$bL4x4alTe(t3Ca-I@_%C zb;$Wz9oZA-Yjylp(D~YPHuB9y?}#J7)hlW=|Zmr;gb($L#qFGx;7buRn9Y z+|c`Fr@aeq=>4+G-Y+*o_sb2vUt~}2mm7M&_^aUka>KhXK*Q#7aI#-3&Q5)sa1MZmQ$2 zg3e9Pk)IL9xuwowd-|3-N33%z(FF?il9>b&lH8KdAGmb$$pr zKd2*n;{2eFzY01(c#ixmGtQ6d9J8l?ROh&LehfK3sv~>i{HTt<3OYY}j{JNy&QI!` zu%~}g=cILh3OPTiBYWcfq>jG|IzM@i{LD4ZZFNrB)3?<*ZJpa8=e9bsC(dnk{8iAo z?K$#u+&FjCIb%=XQRl36?u48>>d2lrchvD$LFbO=$a{lvepct4J^iyf=dJT|$oW|v z*%Rkyb^KM(`Pp;i{l+-IsB^)d{zaXO*7+sm{GyKRiSvs({wnDF;yLmjW}IKuxnxiO zs?KHW{2Fq8RY&&3`Bfc%6?A^}9C=?f&Run`*wc5_`OG?ZL(W}wWKW#C>iDambJug^ zz1BGQ)VXR;-&5zBb?$|nd+NxZIQP`?S3&2V=g9lFaqg>g-JZU$&ga&-A9C)iBYWc9 zSI1uko%^06p9zffK%Fn_=?Ch3X`Kfl=Ycx1C(Z+P{8i9-;5qU+!#EGs`O2PtsLt2c zc^GmYsv~>iJXFVD1)YbUBcEN2^GKa0#*%RlHI{qr?Jn|g*JY<~T z)cMw){!N|lSjqd(Zz1P5b!1PR-_-F}LFYHmkL(cE&$euXA ztK+YN&hMThpWBS{hdQ_H=|9x@!8(70oIli&J#qd}$6p1VKRic13mWH7b$+y`|5WEE z>--sV{!~Zy#Q9Sle-(88^c?woX`H{*xouDXrOqAe{1tNkQb+d0`AZ#t6?Fdc9Qn*@ zoX6_?Y)?N{=NIcd4mpq2kv(x9tK+YN&STG!&%ws|Tb*C+>A%&vYn{JC&fn_Do;ZK2 zvjq^mE2ln(6bsk#h zNyvGkj_ir^L>+$>be?#Qdjy# z^SeF$Or1Zh^DN{%Q%Cm1d8UrP3Odg`N4~2V=eat6+SAX~`O7-bL(X$`WKW#u>iDam z^IV;O^Luz7q{NMI|iAWLp_s6G@e}BB}$^8O-+)p=@9M^@*Vbs~qH$m+~go+J0OaiXdd$)1j? zPGsvu4LMQOkv(yus^hPMPE^m4pAp81rcM-lI+{9BtrIQeL{mrh#EGVkzY03hJV$=+ z7$>?q(d_By>O{9r^pF!>9oZ8nx;p+U=tTD%`B`S180y5Zr(>uS(>gIiP7HNqPn;O) z_^Y53!*k^4qj6%Y6U&~CsZMO`#0)tx)sa1MVyfe>f=*1&k)OH7iKR{)dpednajg?8 z8ND(J-a9C>drP8@X- z*wb;;NobuoAt#PHvL{X)b^KM(iQ_r)eq)@t>LjwK?H3pw%Bkv(zZspGGLPCU<%_eJBxS0|}G9bcVf)`=f-;;SQj z;>1_SUj?1`o+IzI#z~;gtM+sPb&^{rLC8sd2lr3DxmeK_{W-$Y%oMBvL1(J)KCM*R7K% zXBa23I;rgG#OkEBPU4W0SRL6DC$T#ID(EEk9Qo{GoLAI&!=8Rcoix^YCFH!Kj_ir^ ziaP!(=)B@N@_EQONz_SePbX0)opq9goFwYVo;XR=@mE17iRZ{?EaN0qC%rwLRGkdg zNg8sJsv~>iBvr>>1)ZdxBcI!hlT4jA?dfFdyk(taAt#wSvL{Y5b^KM(N#;57SN)cH(m2W0$!t$2S0{^gl82n+>d2lr$<^^! zK_|KA$Y)mLyrxc8d-^qXvRUV~kn@^4vM0`K>iDam^P1<#=V0TcP$#=RokE=))=3d^ zQm7+);-pZ=Uj>~Mo+F>FjgwNHoc44|b#hrJWyndXj_iq(QXPL4bW(bbd|o%s>+0mT zr(ahmk9A%TIj^fDd*ZyVj=u^zuX~Ps2QW@5b@JNNsnp45om3$wl{&H~PAYZ$RnST0 zIr6>2IH}diZ%?OIr+{@*hn&>v$euW<)$vzBC$;CucNOEjp-w@2`VDmoS?7(A^M*RI zC(aw{_^Y7vhC2V|_xLpYdSCqe@o62ibdFhi$1HQ6IA&QL zvuuu8cE>D-W0un~%jKBmcFgiPW_ca6e2!Uu$E<*3R?smkMIEzZj#+WX ztb}7$@`agvkC)e_+0I2&Ipuui&=lTIDk6DOTI z{wnCC^BlSNjFVoSlJ<0ZbxK($eaK0#j_iq(ULAiGbkci{+|S0zpiXIfI)gf8tdk++ zWKc);#L1wJzY01TJV$;;80SrO%G%R!s#DH7Z-$&V)sa1M-c-k51)VoNM}F=Y=Ph;0 z+tY8UQ^7iKg`Bt4kv(zVQpaBfowqzkewG<0qdFDs>5S@BvQEa3lTjVn6DOlO{wnBX z^c?y5Xq-&yRJNxxsZ+%|nL!vL{YeRQVbEwn6Iypj44s~QtoE+-- ztDuv^bL73&I62j6Xiw)*NYK zxzv$8adN5SuYyi4&ymjr#>uTtQ+qnMI?b$;JLKe6NA|?Yt&YD6I=MYZK4%ywk2=lm z={)MRuuh(klSdud6DN;4{wnC?@f`W=Vw}9{w6v%5s?*9kc|%TKb!1PRyz2O?pp(~g zp3bLE8|&l?Ir-F)J#q4>U6ZH3#!w} zIt4>cL3LzLoPz53tDsZRbL8`-aSEx^*`6+>P8aJG3OR+;kv(w=spGGLP9e{c&#cBN ztWH;Zy0ALktW!AT6jn#}#3`(fzY02qJx4wV8>fgm-Rh!Qqk&shF9oZA7h&ui% z=oIlB`D|^RqU!Xtr;Do7%Q{6vPEmDaPn@Fa_^Y5()N|zXx^arB^R_)*Or74=DHd{y zsUv&h6jR4v1)XA^Bi{jxQ(T=s_H=P|`dX)W$SJOl?1@uc9e)*cihGWHuP{ytb^6)U zCDiF}of09ZggUY(P6>7VRnRHnIr3e_I3?8?U{9A+XP|XThMbb>$euVQ)$vzBr=&Xn z=J)tg{CZ#f9$(rqE901zbN#fh9kT|GSwqLHkz>}_F>B(OHFeCIIcCirvlfn7%NJ(yJzida z=6)%q_sbxA7nIWbWw5y1QhLA0p4=~`^nUSI!TY6@cVEhD+Bl`v8DdYDR_7h- zlnyzi)sa1MN~`0qf=+4Ak^96rWz>1so-U)#d)6rva>}S9d*YN)$6p1VGM*#%o^i^m zGt{0gtIja%lnps$)sa1M%Bth9f=*e_k^9*=<XjJ8gNkW)b& z*%PONI{qr?RPY@6S!SGy>Ws0cE2=ZrIu%1sMRjCPoQmrBtDsZSbL8ivaVn`Z&YrHM z&Uouo3OSY3kv(xLspGGLP9@KgpSi}Vtj+{`y0SVGty4MVR8~j!#Hp-~zY02)Jx6|y z8>fmolkDj#>P)sym5@_K9oZA7iaP!(=v46>d2cXIRduG=(^b`(YMrVfr>Z)#Cr(v$ z{8iAY>N)a$W1MR0OtYt}sWaU=)k01+b!1PRYU=o_pi|9r)R8@LYN+F{f=&(3k@s5T)Kq7V zJzZ0sxz?!}a%!q0d*ako$6p1Vnw}%?-^Qt>&OCd%mOAsTQ!C`uQb+d0sils;3Ocns zM?Mo6r?xsD*weMuSzw*oA*Z%FvL{Y$b^KM(sqH!PIm0-0)cMe!uA|OJ)~OS6>Zl`o z;?z;cUj>~yo+F=Kj8j*gh4yq^brxBtZpf*tj_iq3R~>&9bn1GJd>%4RJ#{{|r|YS+ z*gEw>PCa#GPn>${_^Y5(&vWE6mT~HZ{|gf=+$Uk+$>beedMe6}`DQ+3wc z(@oXcV4bERr>Q!!Cr(p!{8i9t>N)ax-8jwE*=SEUQ)iQPnuVNZ>d2lr&D8N%L8qDL z$aetaG*@S{J>6WLE!Jrsa+<3nd*U=#$6p1V=AI+pD~!`ZovrqC3w5?xr$xwVp^of{ z(?T786?9s7j(k@!PD^#R+tV%8*&5dLB|`pc4gcX^ z{uMKF!icvWv)+zbAIGe(W7f|x>+hHiaLfieW`i8F!H(Gw$Lt-)>|Mv~J;!Y53p4p1 zFRwpyzqHc(Wv9IhTJhg47O~6TFReoNODnx!WKZswR(ikqtKj|8%DXS+HEo>M>g=|s zTdT9jI;}%aYjtE#oYw02tDw``bL2iTP8)Uh+S6^+*=LvRvp
    #2vD(JNJ9J!y3(@vd(_H;XS4q2yN$Z4mJ?1|G( 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 diff --git a/build/tests/TestMaker/doc/twl_cls_checksheet_20080508.xls b/build/tests/TestMaker/doc/twl_cls_checksheet_20080508.xls deleted file mode 100644 index 9329f55a13afb8f88bfaf768246aceaeca73d0fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50688 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 diff --git a/build/tests/TestMaker/doc/twl_parentalcontrol_spec_20080704.xls b/build/tests/TestMaker/doc/twl_parentalcontrol_spec_20080704.xls deleted file mode 100644 index 3a612ccae775578a7488dfebf294b7a5ab61b49a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16384 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 make ĂB -- FONT eXg ROM 쐬ɂ make fonttest -> make ĂB -- PARENTAL eXg ROM 쐬ɂ make parentaltest -> make ĂB -- EULA eXg ROM 쐬ɂ make eulatest -> make ĂB -- L make ƌɁAmake forcls Ƒł‚ƁA~ - CLS pfBNg (forCLS) ܂B - -* ROM p[^ -- romparam.yaml Ƀp[^w肳Ă܂B -- CLS eXgpp[^ɊւẮA - ./docs/twl_cls_checksheet_20080508.xls QƂĂB -- FONT eXgpp[^ɊւẮA - ./docs/20080617_DS_fontcodeList_NOE_FIANL.xls QƂĂB -- PARENTAL eXgpp[^ɊւẮA - ./docs/twl_parentalcontrol_spec_20080704.xls QƂĂB -- EULA eXgpp[^ɊւẮA - ㌟ؓȅڍׂ‚߂Kv܂B - -* CLS eXg - HZ0A : System/NAND/ZLA --> ShopApp / Menu - HZ4A : System/NAND/f[^ --> ʐ^ - HZ5A : System/\/NAND/f[^ --> Firm - KZ2A : User/NAND --> Shop ̔ App \ No newline at end of file diff --git a/build/tests/TestMaker/romparam.yaml b/build/tests/TestMaker/romparam.yaml deleted file mode 100644 index 051094cf736b819d73b25c63b626409e4c24c0d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2036 zcmd6oKWkG_7{;H1AmkG`ID~ZRpy4e#1(&oZFL9gCD?AT>JoH`@Hw`bY(D$ESe~x zfeMOz|3yB@SD71b^8FfWSY`Y!zvQRCtLxZ^RJ^ib%QmOScxes%rhjh zjqOvaQwCHus5Rv(Ngd`7$2zC99zs^wNjR3M9q?5n{}F5P-Idu{C9cHib<*3cWN%!r zqo1b@SjB+EE~=#K{G8Tkrmz|4Tmx({bBp=!bD6%&PkPMXCu?xppXzmbI(40S$c#N4 zaL4z!z`ck|HClo3%2aB7+Oc2CdysJC`4rJB@g7gy zlYE?nsQxsuKIO@%KTTYm@?_MXCf=QrsD2~bf4t<~FY>nOw>WwGb+TuFQ7*dg^SqrI FoB-d$3dR5c diff --git a/build/tests/TestMaker/rsf/ROM-TS_custom.rsf b/build/tests/TestMaker/rsf/ROM-TS_custom.rsf deleted file mode 100644 index 3b2f97af..00000000 --- a/build/tests/TestMaker/rsf/ROM-TS_custom.rsf +++ /dev/null @@ -1,319 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-TS.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "MY APP NAME" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - #RomVersion 0 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G/4G] - # - #RomSize 256M - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - #BannerFile ./etc/myGameBanner.bnr - BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr - - # - # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingNormalJump FALSE - - # - # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] - # - #PermitLandingTmpJump FALSE - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD - # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] - # don't have to edit - # - WramMapping $(MAKEROM_WRAM_MAPPING) - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - #CommonClientKey FALSE - - # - # HwAESSlotA_SSLClientCert: launcher deliver HW AES slot A setting [TRUE/FALSE] - # - #HwAESSlotA_SSLClientCert FALSE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - #HwAESSlotB FALSE - - # - # HwAESSlotB for Sign JPEG for Launcher: launcher deliver HW AES slot B setting for Sign JPEG for Launcher [TRUE/FALSE] - # - #HwAESSlotB_SignJPEGForLauncher FALSE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - #HwAESSlotC FALSE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - #SDCardAccess FALSE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - #NANDAccess FALSE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] - # - #WiFiConnectionIcon FALSE - - # - # Disp DSWireless Icon for Launcher [TRUE/FALSE] - # - #DSWirelessIcon FALSE - - # - # Disable debug [TRUE/FALSE] - # - DisableDebug FALSE - - # - # Agree EULA [TRUE/FALSE] - # - #AgreeEULA FALSE - - # - # Agree EULA version [1 - 255] - # - #AgreeEULAVersion 1 - - ### - #### END -} - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - #Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType USER - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - #Launch TRUE - - # - # Boot allowed Media: [GameCard] - # - Media NAND - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - #DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - #Secure FALSE - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - #GameCode ABCJ - - # - # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PublicSaveDataSize 0K - - # - # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] - # - #PrivateSaveDataSize 0K - - # - # Enable SubBannerFile - #SubBannerFile TRUE - - # - # Game card power on: [TRUE/FALSE] - # - #GameCardOn FALSE - - # - # Game card transferd to nitro mode: [TRUE/FALSE] - # - #GameCardNitroMode FALSE - - # - # Shared2 file size: [DISABLE/0-4194304/0K-4096K/0M-4M] - # - #Shared2File0Size Disable - #Shared2File1Size Disable - #Shared2File2Size Disable - #Shared2File3Size Disable - #Shared2File4Size Disable - #Shared2File5Size Disable -} - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} - -Rating -{ - # - # Permited age to play for each rating organization - # - # Supported organization - # - CERO (OGN0) : for Japan - # - ESRB (OGN1) : for North America - # - BBFC (OGN2) : obsolete organization - # - USK (OGN3) : for German - # - PEGI_GEN (OGN4) : for Europe - # - PEGI_FINLAND (OGN5) : obsolete organization - # - PEGI_PRT (OGN6) : for Portugal - # - PEGI_BBFC (OGN7) : for UK - # - OFLC (OGN8) : for Australia and NewZealand - # - GRB (OGN9) : for Korea - # - OGN10 : reserved - # - OGN11 : reserved - # - OGN12 : reserved - # - OGN13 : reserved - # - OGN14 : reserved - # - OGN15 : reserved - # - # Available age [ 0 - 31 / PENDING / FREE ] - - CERO FREE -# ESRB FREE -# USK FREE -# PEGI_GEN FREE -# PEGI_PRT FREE -# PEGI_BBFC FREE -# OFLC FREE -# GRB FREE -} diff --git a/build/tests/TestMaker/script/clsdir.py b/build/tests/TestMaker/script/clsdir.py deleted file mode 100644 index bfbfa795..00000000 --- a/build/tests/TestMaker/script/clsdir.py +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import os, sys, shutil -import yaml,codecs -import binascii - -romparampath = sys.argv[1] -romparam = yaml.load(codecs.open(romparampath,'r','utf16')) - -#----- 定数 -rsfkey = 'RSF' -bnrkey = 'Banner' -eulakey = 'EULA' -ratingkey = 'Rating' - -#----- forCLS ディレクトリの生成 ------------------------------------ -forclsdir = './forCLS' -try: - os.mkdir(forclsdir) -except: - print 'clsdir.py : can not create dir %s' % forclsdir - -#----- cls 操作用ディレクトリの生成 --------------------------------- -for num in romparam.keys(): - gamecode = romparam[num][rsfkey]['GameCode'] - tadpath = ''.join(['./roms/','twl_',gamecode,'.tad']) - - #----- gamecode dir の生成. - if os.path.exists(tadpath): - try: - clsappdir = ''.join([forclsdir,'/',gamecode]) - os.mkdir(clsappdir) - except: - print 'clsdir.py : can not create dir %s' % clsappdir - else: - print 'clsdir.py : can not create dir %s' % clsappdir - continue - - #----- version ディレクトリの生成 - verdir = ''.join([clsappdir,'/v',str(romparam[num][rsfkey]['Version'])]) - try: - os.mkdir(verdir) - except: - print 'clsdir.py : can not create dir %s' % verdir - continue - - #----- tadfile のコピー - try: - shutil.copy(tadpath,verdir) - except (IOError, os.error), why: - print "Can't copy %s to %s: %s" % (`tadpath`, `verdir`, str(why)) - continue - - #----- TitleID 取得 - tmpId = 0x00030000 - keys = ('AppType','Launch','Media','DataOnly','Secure') - for shiftbit, key in enumerate(keys): - if key == 'Launch': - if not romparam[num][rsfkey][key]: - tmpId = tmpId + (1< 2 and key[1] == 1][:-29] - fonts = [sheet[key][1] for key in keys if key[0] > 2 and key[1] == 2][:-29] - - #--- ROM の作成順序の変更 - if reverseflg: - fontcodes.reverse() - fonts.reverse() - - #--- romparam.yaml の生成 - try: - yamlfile = codecs.open(yamlpath, 'w', 'utf16') - except: - print 'genparam.py : can not open %s file' % yamlpath - continue - else: - #--- 定数値 - version = '0x0000' - apptype = 'USER' - launch = 'TRUE' - media = 'NAND' - dataonly = 'FALSE' - secure = 'FALSE' - etikect = 'personalized' - titlename = '' - titletype = 'TWL_APP' - filename = 'banner.bnr' - bnrver = '3' - codes = map(chr,range(ord('a'),ord('z')+1)) - for index, font in enumerate(fonts): - #--- gamecode, bnrtitle の決定 - gamecode = ''.join(['4',codes[index/26],codes[(index%26)],'A']) - #--- 0x0060 だけ特別対応 Excel データが存在しないため(img 貼付) - if fontcodes[index] == '0x0060': - bnrline1 = repr(''.join(['\x60_',fontcodes[index]]))[2:-1] - else: - bnrline1 = repr(''.join([font,'_',fontcodes[index]]))[2:-1] - #--- index - yamlfile.write('#-- ROM No.%d ------------------------\n' % index) - yamlfile.write('%d:\n' % index) - #--- rsf & properties parameter - yamlfile.write(' RSF :\n') - yamlfile.write(' GameCode : %s\n' % gamecode ) - yamlfile.write(' Version : %s\n' % version ) - #yamlfile.write(' AppType : %s\n' % apptype ) - #yamlfile.write(' Launch : %s\n' % launch ) - yamlfile.write(' Media : %s\n' % media ) - #yamlfile.write(' DataOnly : %s\n' % dataonly ) - #yamlfile.write(' Secure : %s\n' % secure ) - yamlfile.write(' TitleName : %s\n' % titlename ) - yamlfile.write(' TitleType : %s\n' % titletype ) - yamlfile.write(' eTicket : %s\n' % etikect ) - #--- bsf parameter - yamlfile.write(' Banner :\n') - yamlfile.write(' File : %s\n' % filename ) - yamlfile.write(' Version : %s\n' % bnrver ) - for language in ('JP','EN','FR','GE','IT','SP','CN','HN'): - bnrline2 = ''.join(['No.',str(index),' Lang:',language]) - if font == '"': - yamlfile.write(" %s : ['%s', '%s']\n" % (language, bnrline1, bnrline2)) - else: - yamlfile.write(' %s : ["%s", "%s"]\n' % (language, bnrline1, bnrline2)) - yamlfile.write('\n\n') - finally: - yamlfile.close() \ No newline at end of file diff --git a/build/tests/TestMaker/script/parentalcontrol.py b/build/tests/TestMaker/script/parentalcontrol.py deleted file mode 100644 index 105a36d4..00000000 --- a/build/tests/TestMaker/script/parentalcontrol.py +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import sys, yaml, codecs - - -target = sys.argv[1] -yamlpath = sys.argv[2] -#target = '../config/twl_parentalcontrol_spec.yaml' -#yamlpath = '../romparam.yaml' -ognparam = yaml.load(codecs.open(target,'r','utf16')) - -#--- romparam.yaml の生成 -try: - yamlfile = codecs.open(yamlpath, 'w', 'utf16') -except: - print '%s : can not open %s file' % ('hoge', yamlpath) -else: - #--- 定数値 - version = '0x0000' - apptype = 'USER' - launch = 'TRUE' - media = 'NAND' - dataonly = 'FALSE' - secure = 'FALSE' - etikect = 'personalized' - titlename = '' - titletype = 'TWL_APP' - filename = 'banner.bnr' - bnrver = '3' - codes = map(chr,range(ord('a'),ord('z')+1)) - - index = 0 - for ogn in sorted(ognparam.keys()): - #--- CardRegion の決定 - region = ognparam[ogn][0] - for age in ognparam[ogn][1]: - #--- gamecode, bnrtitle の決定 - gamecode = ''.join(['4',codes[index/26],codes[(index%26)],'A']) - bnrline1 = ''.join([ogn,'/',str(age)]) - #--- index - yamlfile.write('#-- ROM No.%d ------------------------\n' % index) - yamlfile.write('%d:\n' % index) - #--- rsf & properties parameter - yamlfile.write(' RSF :\n') - yamlfile.write(' GameCode : %s\n' % gamecode ) - yamlfile.write(' Version : %s\n' % version ) - yamlfile.write(' AppType : %s\n' % apptype ) - yamlfile.write(' Launch : %s\n' % launch ) - yamlfile.write(' Media : %s\n' % media ) - yamlfile.write(' DataOnly : %s\n' % dataonly ) - yamlfile.write(' Secure : %s\n' % secure ) - yamlfile.write(' CardRegion : %s\n' % region ) - yamlfile.write(' TitleName : %s\n' % titlename ) - yamlfile.write(' TitleType : %s\n' % titletype ) - yamlfile.write(' eTicket : %s\n' % etikect ) - #--- bsf parameter - yamlfile.write(' Banner :\n') - yamlfile.write(' File : %s\n' % filename ) - yamlfile.write(' Version : %s\n' % bnrver ) - for language in ('JP','EN','FR','GE','IT','SP','CN','HN'): - bnrline2 = ''.join(['No.',str(index),' Lang:',language]) - yamlfile.write(" %s : %s" % (language,str(yaml.dump([bnrline1,bnrline2])))) - #--- Rating - yamlfile.write(' Rating :\n') - yamlfile.write(' Ogn : %s\n' % ogn ) - yamlfile.write(' Age : %s\n' % age ) - yamlfile.write('\n\n') - index = index + 1 -finally: - yamlfile.close() \ No newline at end of file diff --git a/build/tests/TestMaker/script/rename_eula.py b/build/tests/TestMaker/script/rename_eula.py deleted file mode 100644 index d65863f1..00000000 --- a/build/tests/TestMaker/script/rename_eula.py +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import os, sys, yaml, codecs - -#yamlpath = sys.argv[1] -yamlpath = '../romparam.yaml' -romparam = yaml.load(codecs.open(yamlpath,'r','utf16')) - -#----- 定数 -rsfkey = 'RSF' -bnrkey = 'Banner' -eulakey = 'EULA' -ratingkey = 'Rating' - -os.chdir('../roms') - -for num in romparam.keys(): - srcname = ''.join(['twl_',romparam[num][rsfkey]['GameCode'],'.tad']) - destname = ''.join([str(romparam[num][bnrkey]['JP'][0]),'.tad']) - os.rename(srcname,destname) \ No newline at end of file diff --git a/build/tests/TestMaker/script/rename_font.py b/build/tests/TestMaker/script/rename_font.py deleted file mode 100644 index 47074a1e..00000000 --- a/build/tests/TestMaker/script/rename_font.py +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import os, sys, yaml, codecs - -#yamlpath = sys.argv[1] -yamlpath = '../romparam.yaml' -romparam = yaml.load(codecs.open(yamlpath,'r','utf16')) - -#----- 定数 -rsfkey = 'RSF' -bnrkey = 'Banner' -eulakey = 'EULA' -ratingkey = 'Rating' - -os.chdir('../roms') - -for num in romparam.keys(): - srcname = ''.join(['twl_',romparam[num][rsfkey]['GameCode'],'.tad']) - #destname = ''.join([('No.%03d_' % num), - # romparam[num][bnrkey]['JP'][0].split('_')[1], - # '.tad']) - destname = ''.join([('No.%03d_' % num), - romparam[num][bnrkey]['JP'][1].split('_')[0], - '_L2.tad']) - - try: - os.rename(srcname,destname) - except: - print srcname, destname \ No newline at end of file diff --git a/build/tests/TestMaker/script/rename_parental.py b/build/tests/TestMaker/script/rename_parental.py deleted file mode 100644 index 5d6d11fe..00000000 --- a/build/tests/TestMaker/script/rename_parental.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# -*- coding:utf-8 -*- - -import os, sys, yaml, codecs - -#yamlpath = sys.argv[1] -yamlpath = '../romparam.yaml' -romparam = yaml.load(codecs.open(yamlpath,'r','utf16')) - -#----- 定数 -rsfkey = 'RSF' -bnrkey = 'Banner' -eulakey = 'EULA' -ratingkey = 'Rating' - -os.chdir('../roms') - -for num in romparam.keys(): - srcname = ''.join(['twl_',romparam[num][rsfkey]['GameCode'],'.tad']) - destname = ''.join([str(romparam[num][bnrkey]['JP'][0]).replace('/','_'),'.tad']) - os.rename(srcname,destname) - - srcname = ''.join(['twl_',romparam[num][rsfkey]['GameCode'],'.srl']) - destname = ''.join([str(romparam[num][bnrkey]['JP'][0]).replace('/','_'),'.srl']) - os.rename(srcname,destname) \ No newline at end of file diff --git a/build/tests/TitleHashChecker/ARM7.TWL/Makefile b/build/tests/TitleHashChecker/ARM7.TWL/Makefile deleted file mode 100644 index cb97e88e..00000000 --- a/build/tests/TitleHashChecker/ARM7.TWL/Makefile +++ /dev/null @@ -1,84 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2008-08-15#$ -# $Rev: 2167 $ -# $Author: yosiokat $ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TWL_PROC = ARM7 -override TWL_ARCHGEN = LIMITED -##override TWL_PLATFORM = TS -TWL_NO_STD_PCHDR = True -override TARGET_CODEGEN = ARM - -ifndef TWLSDK_NOCRYPTO -#---------------------------------------------------------------------------- - -SRCS = main.c \ - kami_pxi.c - -TARGET_NAME = armadillo - -TARGET_NEF = $(TARGET_NAME).tef -LCFILE_SPEC = $(TARGET_NAME).lsf -LCFILE_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).lcf.template -LDRES_TEMPLATE = $(ROOT)/build/components/$(TARGET_NAME).TWL/$(TARGET_NAME).response.template - -CRT0_O = crt0.SCR.TWL.o - -# X^bNsh~ׁ̈ACCWJɃRpC -CCFLAGS_OPT = -O4 -inline off - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -MACRO_FLAGS += -DSDK_ARM7COMP_LTD -DSDK_SEA -DSDK_NOINIT - -MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ - -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' - -LINCLUDES += $(ROOT)/build/libraries/spi/ARM7/include \ - $(ROOT)/build/libraries/os/common/include \ - $(TWL_IPL_RED_ROOT)/include \ - ../common/include \ - $(ROOT)/build/libraries/init/common/include \ - $(ROOT)/build/libraries/fatfs/ARM7.TWL/include \ - $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/fatfs \ - $(ROOT)/build/libraries/fatfs/ARM7.TWL/include/twl/fatfs/ARM7 - -LLIBRARY_DIRS += $(TWL_IPL_RED_ROOT)/lib/ARM7-TS/$(TWL_BUILD_DIR) \ - ./obj/ARM7-TS.LTD/$(TWL_BUILD_DIR) - -LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ - libsdio_sp$(TWL_LIBSUFFIX).a \ - libathdrv_sp$(TWL_LIBSUFFIX).a \ - libwpa_sp$(TWL_LIBSUFFIX).a \ - libhotsw_sp$(TWL_LIBSUFFIX).a \ - libreloc_info_sp$(TWL_LIBSUFFIX).a - -LLIBRARIES += libpm_sp.SYSMENU$(TWL_LIBSUFFIX).a -GLIBRARIES := $(filter-out libpm_sp$(TWL_LIBSUFFIX).a,$(GLIBRARIES)) - -LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -endif #ifndef TWLSDK_NOCRYPTO - -#===== End of Makefile ===== diff --git a/build/tests/TitleHashChecker/ARM7.TWL/armadillo.lsf b/build/tests/TitleHashChecker/ARM7.TWL/armadillo.lsf deleted file mode 100644 index f4535acf..00000000 --- a/build/tests/TitleHashChecker/ARM7.TWL/armadillo.lsf +++ /dev/null @@ -1,87 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - armadillo.TWL -# File: armadillo.lsf -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2008-07-24#$ -# $Rev: 1990 $ -# $Author: kamikawa $ -#---------------------------------------------------------------------------- -# -# Nitro LCF SPEC FILE -# -#-------- -Static $(TARGET_NAME) -{ - Address 0x02380000 - StackSize 1024 1024 - - Library $(CRT0_O) -} - -#-------- -Ltdautoload SCRWRAM -{ - Address 0x03740000 - - Library libsubpsyscall.a - Library libsyscall_sp.twl.a - Library $(CW_LIBS) - Library $(ISDBG_LIBS_TWL) - Library $(ISDBG_LIBS_NITRO) - - Object * (.etable) - Object $(OBJDIR)/main.o - Object $(OBJDIR)/kami_pxi.o - - Library libsea_sp$(LIBSUFFIX).a - Library libcrypto_sp$(LIBSUFFIX).a - - Library libos_sp$(LIBSUFFIX).a - Library libmi_sp$(LIBSUFFIX).a - Library libstd_sp$(LIBSUFFIX).a - Library libmath_sp$(LIBSUFFIX).a - Library libpxi_sp$(LIBSUFFIX).a - Library libexi_sp$(LIBSUFFIX).a - Library libi2c_sp$(LIBSUFFIX).a - Library libsdio_sp$(LIBSUFFIX).a - Library libpad_sp$(LIBSUFFIX).a - Library libscfg_sp$(LIBSUFFIX).a - Library libmcu_sp$(LIBSUFFIX).a - Library libcdc_sp$(LIBSUFFIX).a - Library libsnd_sp$(LIBSUFFIX).a - Library libsndex_sp$(LIBSUFFIX).a - Library libspi_sp$(LIBSUFFIX).a - Library libpm_sp.SYSMENU$(LIBSUFFIX).a - Library libtp_sp$(LIBSUFFIX).a - Library libtpex_sp$(LIBSUFFIX).a - Library libmic_sp$(LIBSUFFIX).a - Library libmicex_sp$(LIBSUFFIX).a - Library libnvram_sp$(LIBSUFFIX).a - Library librtc_sp$(LIBSUFFIX).a - Library libfatfs_sp$(LIBSUFFIX).a - Library libwm_sp$(LIBSUFFIX).a - Library libnwm_sp$(LIBSUFFIX).a - Library libwvr_sp$(LIBSUFFIX).a - Library libwl_sp$(LIBSUFFIX).a - Library libwpa_sp$(LIBSUFFIX).a - Library libathdrv_sp$(LIBSUFFIX).a - Library libfs_sp$(LIBSUFFIX).a - Library libcard_sp$(LIBSUFFIX).a - Library libcamera_sp$(LIBSUFFIX).a - Library libhotsw_sp$(LIBSUFFIX).a - Library libreloc_info_sp$(LIBSUFFIX).a - - Object * (.wram) - Object * (.ltdwram) - Object * (.rsvwram) - Object * (.main) - Object * (.ltdmain) -} diff --git a/build/tests/TitleHashChecker/ARM7.TWL/include/kami_pxi.h b/build/tests/TitleHashChecker/ARM7.TWL/include/kami_pxi.h deleted file mode 100644 index 16d99d8f..00000000 --- a/build/tests/TitleHashChecker/ARM7.TWL/include/kami_pxi.h +++ /dev/null @@ -1,44 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-03-31#$ - $Rev: 1005 $ - $Author: kamikawa $ - *---------------------------------------------------------------------------*/ - -#ifndef TWL_CAMERA_TEST_CAMERATEST_H_ -#define TWL_CAMERA_TEST_CAMERATEST_H_ - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -void KamiPxiInit( void ); - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_CAMERA_TEST_CAMERATEST_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/ARM7.TWL/src/kami_pxi.c b/build/tests/TitleHashChecker/ARM7.TWL/src/kami_pxi.c deleted file mode 100644 index 3c8a466d..00000000 --- a/build/tests/TitleHashChecker/ARM7.TWL/src/kami_pxi.c +++ /dev/null @@ -1,219 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-07-30#$ - $Rev: 2031 $ - $Author: kamikawa $ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "kami_pxi.h" -#include "fifo.h" -#include "twl/cdc.h" -#include -#include -#include -#include -#include - -typedef unsigned char byte; /* Don't change */ -typedef unsigned short word; /* Don't change */ -typedef unsigned long dword; /* Don't change */ -#define BOOLEAN int - -extern BOOL FATFSi_nandRtfsIo( int driveno, dword block, void* buffer, word count, BOOLEAN reading); -extern BOOL sdmcFormatNandLog( BOOL verify_flag); - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define KAMITEST_MESSAGE_ARRAY_MAX 4 // XbhpbZ[WL[̃TCY -#define KAMITEST_THREAD_STACK_SIZE 2048 // Xbh̃X^bNTCY - -#define KAMITEST_THREAD_PRIORITY 6 - -// ACgăRs[ -#define KAMI_UNPACK_U16(d, s) \ - (*(d) = (u16)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8))) -#define KAMI_UNPACK_U32(d, s) \ - (*(d) = (u32)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8) | (((u8*)s)[2] << 16) | (((u8*)s)[3] << 24))) - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef struct KamiWork -{ - BOOL result; - u32 total; - u32 current; - KamiCommand command; - u8 data[KAMITEST_PXI_DATA_SIZE_MAX]; // 㑱f[^i[p - - OSMessageQueue msgQ; // XbhpbZ[WL[ - OSMessage msgArray[KAMITEST_MESSAGE_ARRAY_MAX]; - // bZ[Wi[obt@ - OSThread thread; // KAMIpXbh - u64 stack[KAMITEST_THREAD_STACK_SIZE / sizeof(u64)]; - // KAMIpXbh̃X^bN -} -KamiWork; - -/*---------------------------------------------------------------------------* - ÓIϐ` - *---------------------------------------------------------------------------*/ -static BOOL kamiInitialized; -static KamiWork kamiWork; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); -static void KamiReturnResult(KamiCommand command, KAMIPxiResult result); -static void KamiReturnResultEx(KamiCommand command, KAMIPxiResult result, u8 size, u8* data); -static void KamiThread(void *arg); - -void KamiPxiInit(void) -{ - if (kamiInitialized) - { - return; - } - kamiInitialized = TRUE; - - PXI_Init(); - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - - OS_InitMessageQueue(&kamiWork.msgQ, kamiWork.msgArray, KAMITEST_MESSAGE_ARRAY_MAX); - OS_CreateThread(&kamiWork.thread, KamiThread, 0, - (void *)(kamiWork.stack + (KAMITEST_THREAD_STACK_SIZE / sizeof(u64))), - KAMITEST_THREAD_STACK_SIZE, KAMITEST_THREAD_PRIORITY); - OS_WakeupThreadDirect(&kamiWork.thread); -} - -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused( tag ) - if (err) - { - return; - } - if (data & KAMITEST_PXI_START_BIT) // 擪f[^ - { - kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); - kamiWork.current = 0; - kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); - kamiWork.data[kamiWork.current++] = (u8)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); - } - else // 㑱f[^ - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); - kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); - kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); - } - if (kamiWork.current >= kamiWork.total) - { - switch (kamiWork.command) - { - case KAMI_EXE_FORMAT: - case KAMI_NAND_IO: - case KAMI_MCU_WRITE_FIRM: - case KAMI_MCU_IO: - case KAMI_ARM7_IO: - case KAMI_CDC_GO_DSMODE: - case KAMI_CLEAR_NAND_ERRORLOG: - case KAMI_GET_CAMERA_MODULE_TYPE: - case KAMI_GET_NAND_CID: - if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR); - } - break; - - default: - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); - } - } -} - -static void KamiReturnResult(KamiCommand command, KAMIPxiResult result) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | KAMITEST_PXI_RESULT_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - ((1 << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((result << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } -} - -static void KamiReturnResultEx(KamiCommand command, KAMIPxiResult result, u8 size, u8* data) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | KAMITEST_PXI_RESULT_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - (((size+1) << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((result << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - int i; - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } - for (i = 0; i < size; i+= 3) - { - pxiData = (u32)((data[i] << 16) | (data[i+1] << 8) | data[i+2]); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } - } -} - -static void KamiThread(void *arg) -{ -#pragma unused( arg ) - OSMessage msg; - BOOL result; - - while (TRUE) - { - (void)OS_ReceiveMessage(&kamiWork.msgQ, &msg, OS_MESSAGE_BLOCK); - switch (kamiWork.command) - { - case KAMI_NAND_IO: - { - BOOL is_read; - u32 block; - void* buffer; - u32 count; - - is_read = (BOOL)kamiWork.data[0]; - KAMI_UNPACK_U32(&block, &kamiWork.data[1]); - KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[5]); - KAMI_UNPACK_U32(&count, &kamiWork.data[9]); - - result = FATFSi_nandRtfsIo( 0, block, buffer, (u16)count, is_read ); - if (result) - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_TRUE); - } - else - { - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS_FALSE); - } - } - break; - - default: - KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); - } - } -} - -#include diff --git a/build/tests/TitleHashChecker/ARM7.TWL/src/main.c b/build/tests/TitleHashChecker/ARM7.TWL/src/main.c deleted file mode 100644 index a1ad1689..00000000 --- a/build/tests/TitleHashChecker/ARM7.TWL/src/main.c +++ /dev/null @@ -1,654 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - components - armadillo.TWL - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-08-18#$ - $Rev: 2182 $ - $Author: kamikawa $ - *---------------------------------------------------------------------------*/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "nvram_sp.h" -#include "kami_pxi.h" -#include - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -/* eXbhDx */ -#define THREAD_PRIO_SPI 2 -#define THREAD_PRIO_MCU 4 // b -#define THREAD_PRIO_SND 6 -#define THREAD_PRIO_NWM_EVENT 7 -#define THREAD_PRIO_NWM_SDIO 8 -#define THREAD_PRIO_FATFS 8 -#define THREAD_PRIO_NWM_COMMAND 9 -#define THREAD_PRIO_NWM_WPA 10 -#define THREAD_PRIO_HOTSW 11 -#define THREAD_PRIO_AES 12 -#define THREAD_PRIO_SEA 12 -#define THREAD_PRIO_RTC 12 -#define THREAD_PRIO_SNDEX 14 -#define THREAD_PRIO_FS 15 -/* OS_THREAD_LAUNCHER_PRIORITY 16 */ - -/* ROM o^GÅgR[h */ -#define ROMHEADER_FOR_CHINA_BIT 0x80 -#define ROMHEADER_FOR_KOREA_BIT 0x40 - -/* gp DMA ԍ */ -#define DMA_NO_FATFS FATFS_DMA_4 // = 0 -#define DMA_NO_NWM 3 - -/* J[h`^OJE^ */ -#define CHATTERING_COUNTER 0x1988 // 100ms (0x1988 * 15.3us = 100000us) - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static void PrintDebugInfo(void); -static OSHeapHandle InitializeAllocateSystem(void); -static void InitializeFatfs(void); -static void InitializeNwm(OSHeapHandle hh); -static void InitializeCardPower(void); -static void InitializeCdc(void); - -static void ReadUserInfo(void); -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -static BOOL IsValidConfigEx(void); -static u16 GetRomValidLanguage(void); -static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); -#else -static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); -#endif -static void VBlankIntr(void); - -/*---------------------------------------------------------------------------* - Name: TwlSpMain - Description: NxN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -void -TwlSpMain(void) -{ - OSHeapHandle heapHandle; - - /* OS */ - OS_Init(); - PrintDebugInfo(); - - /* NVRAM 烆[U[ǂݏo */ - ReadUserInfo(); - - /* q[v̈ݒ */ - heapHandle = InitializeAllocateSystem(); - - /* {^̓T[` */ - (void)PAD_InitXYButton(); - - /* ݋ */ - (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); - -#ifndef NAND_INITIALIZER_LIMITED_MODE - KamiPxiInit(); -#endif - - /* eCu */ - AES_Init(THREAD_PRIO_AES); // AES - SEA_Init(THREAD_PRIO_SEA); // SEA - FS_Init(FS_DMA_NOT_USE); // FS for CARD - FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD - InitializeFatfs(); // FAT-FS - InitializeNwm(heapHandle); // TWL - MCU_InitIrq(THREAD_PRIO_MCU); // }CR - - if (OSi_IsCodecTwlMode() == TRUE) - { - InitializeCdc(); // CODEC - CAMERA_Init(); // J - } - - SND_Init(THREAD_PRIO_SND); // TEh - SNDEX_Init(THREAD_PRIO_SNDEX); // TEhg - RTC_Init(THREAD_PRIO_RTC); // RTC - WVR_Begin(heapHandle); // NITRO - SPI_Init(THREAD_PRIO_SPI); - InitializeCardPower(); // J[hdONivOpj - - while (TRUE) - { - OS_Halt(); - - /* \tgEFAZbgv͊ĎȂ */ - /* AGB J[gbW̑}`FbN͍sȂ */ - /* DS J[h̑}`FbN͍sȂ */ - } -} - -/*---------------------------------------------------------------------------* - Name: PrintDebugInfo - Description: ARM7 R|[lg̏fobOo͂B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -PrintDebugInfo(void) -{ - OS_TPrintf("ARM7: This component is running on TWL.\n"); - OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); -} - -/*---------------------------------------------------------------------------* - Name: InitializeAllocateSystem - Description: ăVXeB - Arguments: None. - Returns: OSHeapHandle - WRAM A[iɊmۂꂽq[ṽnhԂB - *---------------------------------------------------------------------------*/ -static OSHeapHandle -InitializeAllocateSystem(void) -{ - OSHeapHandle hh; - void* subLo = (void*)OS_GetWramSubArenaLo(); - void* subHi = (void*)OS_GetWramSubArenaHi(); - void* privLo = (void*)OS_GetWramSubPrivArenaLo(); - void* privHi = (void*)OS_GetWramSubPrivArenaHi(); - - if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) - { - /* SUB A[i SUBPRIV A[iɋz */ - OS_SetWramSubArenaHi(subLo); - OS_SetWramSubPrivArenaLo(subLo); - privLo = subLo; - } - - /* A[i 0 NA */ - MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); - - /* q[v쐬 */ - privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); - hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); - if (hh < 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - - /* Jgq[vɐݒ */ - (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - /* q[vTCY̊mF */ - { - u32 heapSize; - - heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); - - if (heapSize <= 0) - { - OS_Panic("ARM7: Failed to create heap.\n"); - } - OS_TPrintf("ARM7: heap size [%d]\n", heapSize); - } - - return hh; -} - -/*---------------------------------------------------------------------------* - Name: InitializeFatfs - Description: FATFSCuB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeFatfs(void) -{ - // FATFSCȕ - if(!FATFS_Init( FATFS_DMA_4, FATFS_DMA_5, THREAD_PRIO_FATFS)) - { - // do nothing - } -} - -/*---------------------------------------------------------------------------* - Name: InitializeNwm - Description: NWMCuB - Arguments: hh - p”\ȃq[ṽnhwB - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeNwm(OSHeapHandle hh) -{ - NwmspInit nwmInit; - - /* [TODO] mۂĂq[v̈悪VꎮKvƂĂ郁ʈȏォ̃`FbNKv */ - - nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; - nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; - nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; - - nwmInit.dmaNo = DMA_NO_NWM; - nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.drvHeap.handle = hh; - - nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; - nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; - nwmInit.wpaHeap.handle = hh; - - NWMSP_Init(&nwmInit); -} - -/*---------------------------------------------------------------------------* - Name: InitializeCardPower - Description: J[hdONB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeCardPower(void) -{ - // `b^OJE^̒lݒ - reg_MI_MC1 = (u32)((reg_MI_MC1 & ~REG_MI_MC1_CC_MASK) | - (CHATTERING_COUNTER << REG_MI_MC1_CC_SHIFT)); - - // `^OJE^҂‚ƂɂCDET0ɂȂ - OS_SpinWait( OS_MSEC_TO_CPUCYC(200) ); - - // J[hXbgPdON - HOTSWi_TurnCardPowerOn(1); -} - -/*---------------------------------------------------------------------------* - Name: InitializeCdc - Description: CDCCuB - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -static void -InitializeCdc(void) -{ - u32 spiLockId; - - spiLockId = (u32)OS_GetLockID(); - if (spiLockId == OS_LOCK_ID_ERROR) - { - OS_Warning("OS_GetLockID failed.\n"); - } - - /* CODEC */ - SPI_Lock(spiLockId); - CDC_Init(); - SPI_Unlock(spiLockId); -} - -//#ifdef WM_PRECALC_ALLOWEDCHANNEL -//extern u16 WMSP_GetAllowedChannel(u16 bitField); -//#endif -/*---------------------------------------------------------------------------* - Name: ReadUserInfo - - Description: NVRAM烆[U[ǂݏoAL̈ɓWJB - ~[OĂobt@Ăꍇ́A - L̈̃[U[i[ꏊNAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void ReadUserInfo(void) -{ - s32 offset; -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - NVRAMConfigEx temp[2]; -#else - NVRAMConfig temp[2]; -#endif - s32 check; - u8 *p = OS_GetSystemWork()->nvramUserInfo; - - // ItZbgǂݏo -#ifdef NVRAM_CONFIG_CONST_ADDRESS - offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; -#else - NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, - (u8 *)(&offset)); - offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; -#endif - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), - (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCDEx(temp); -#else - // ~[ꂽQ‚̃f[^ǂݏo - NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); - NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); - // Q‚̓ǂgf - check = CheckCorrectNCD(temp); -#endif - - if (check >= 3) - { - // AvP[V̋N} - MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); - } - else if (check) - { - s32 i; - - // jbNl[␳ - if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) - { - for (i = NVRAM_CONFIG_NICKNAME_LENGTH; - i > temp[check - 1].ncd.owner.nickname.length; i--) - { - temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; - } - } - // Rg␳ - if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) - { - for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; - i--) - { - temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; - } - } - // L̈ɃXgA - MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); - } - else - { - // L̈NA - MI_CpuClear32(p, sizeof(NVRAMConfig)); - } - - // MACAhX[U[̌ɓWJ - { - u8 wMac[6]; - - // NVRAMMACAhXǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); - // WJAhXvZ - p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); - // L̈ɓWJ - MI_CpuCopy8(wMac, p, 6); - } -/* -#ifdef WM_PRECALC_ALLOWEDCHANNEL - // gp”\`lgpƒ`lvZ - { - u16 enableChannel; - u16 allowedChannel; - - // gp”\`lǂݏo - NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); - // gpƒ`lvZ - allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); - // WJAhXvZ(MACAhX̌2oCg) - p = (u8 *)((u32)p + 6); - // L̈ɓWJ - *((u16 *)p) = allowedChannel; - } -#endif -*/ -} - -#ifdef NVRAM_CONFIG_DATA_EX_VERSION -/*---------------------------------------------------------------------------* - Name: IsValidConfigEx - - Description: [U[񂪊gRtBOɑΉĂ邩ǂ𒲍B - - Arguments: None. - - Returns: BOOL - g[U[񂪗LȏꍇTRUEԂB - łꍇFALSEԂB - *---------------------------------------------------------------------------*/ -static BOOL IsValidConfigEx(void) -{ - u8 ipl2_type; - - NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); - if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) - { - return FALSE; - } - if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) - { - return TRUE; - } - return FALSE; -} - -/*---------------------------------------------------------------------------* - Name: GetRomValidLanguage - - Description: ROMo^GȀ񂩂AgR[h̑Ήrbg}bv - Ɋւ𒊏oB - - Arguments: None. - - Returns: u16 - DSJ[hA }`u[goCiΉĂ - R[h̃rbg}bvԂBDSJ[hg - R[hɑΉĂȂꍇ 0 ԂB - *---------------------------------------------------------------------------*/ -static u16 GetRomValidLanguage(void) -{ - u16 ret = 0x0000; - u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; - - // ROMo^GÅgR[hmF - if (langBit == ROMHEADER_FOR_CHINA_BIT) - { - // for CHINA - ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); - } - else if (langBit == ROMHEADER_FOR_KOREA_BIT) - { - // for KOREA - ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); - } - return ret; -} - -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCDEx - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - 3: Av̋N}ׂB - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // IPLgR[hɑΉĂ邩 - if (IsValidConfigEx()) - { - // IPLgR[hɑΉĂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - calc_crc = - SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); - if ((ncdsp[i].crc16_ex == calc_crc) - && ((0x0001 << ncdsp[i].ncd_ex.language) & - (ncdsp[i].ncd_ex.valid_language_bitmap))) - { - // gf[^p CRC Aݒ茾R[hΉR[hɊ܂܂ꍇɐƔf - if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) - { - // gR[hŒʏ팾R[h㏑ - ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; - } - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. - ncd_ex.valid_language_bitmap) - { - // ROM o^GA""gR[hݒ肳Ă邪A - // IPL2̑ΉR[h""gR[h܂܂Ȃꍇ͋N} - return 3; - } - crc_flag |= (1 << i); - } - } - } - } - else - { - // IPLgR[hɑΉĂȂꍇ - u16 rom_valid_language = GetRomValidLanguage(); - - if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) - { - // ROM o^GA""gR[hݒ肳Ăꍇ͋N} - return 3; - } - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRC saveCount l 0x80 ̃f[^𐳓Ɣf - crc_flag |= (1 << i); - } - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} - -#else -/*---------------------------------------------------------------------------* - Name: CheckCorrectNCD - - Description: ~[OĂ郆[U[̂ǂgׂ肷B - - Arguments: nvdsp - rRtBOf[^Q‚̔zB - - Returns: s32 - 0: sK؁B - 1: z[ 0 ]K؁B - 2: z[ 1 ]K؁B - *---------------------------------------------------------------------------*/ -static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) -{ - u16 i; - u16 calc_crc; - s32 crc_flag = 0; - u16 saveCount; - - // e~[f[^CRC & saveCount`FbN - for (i = 0; i < 2; i++) - { - calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); - - if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) - { - // CRCAsaveCountl0x80̃f[^𐳓ƔfB - crc_flag |= (1 << i); - } - } - - // ȃf[^̂ǂ̃f[^L𔻒肷B - switch (crc_flag) - { - case 1: - case 2: - // ЕCRC - return crc_flag; - - case 3: - // ƂCRC΂ǂ炪ŐṼf[^fB - saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); - if (saveCount == ncdsp[1].saveCount) - { - return 2; - } - return 1; - } - - // ƂCRCs - return 0; -} -#endif - -/*---------------------------------------------------------------------------* - Name: VBlankIntr - Description: V uN荞݃xN^B - Arguments: None. - Returns: None. - *---------------------------------------------------------------------------*/ -extern BOOL PMi_Initialized; -extern void PM_SelfBlinkProc(void); - -static void -VBlankIntr(void) -{ - if (PMi_Initialized) - { - PM_SelfBlinkProc(); - } -} diff --git a/build/tests/TitleHashChecker/ARM9.TWL/ARM9-TS.lsf b/build/tests/TitleHashChecker/ARM9.TWL/ARM9-TS.lsf deleted file mode 100644 index 27b5d91f..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/ARM9-TS.lsf +++ /dev/null @@ -1,57 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ARM9-TS.lsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2007-12-05#$ -# $Rev: 2840 $ -# $Author: yosizaki $ -#---------------------------------------------------------------------------- -# -# TWL LCF SPEC FILE -# - -Static $(TARGET_NAME) -{ - Address $(ADDRESS_STATIC) - Object $(OBJS_STATIC) - Library $(LLIBS) $(GLIBS) $(CW_LIBS) - StackSize 4096 4096 -} - -Autoload ITCM -{ - Address $(ADDRESS_ITCM) - Object * (.itcm) - Object $(OBJS_AUTOLOAD) (.text) - Object $(OBJS_AUTOLOAD) (.rodata) - Object $(OBJS_AUTOLOAD) (.init) - Object $(OBJS_AUTOLOAD) (.ctor) - Object $(OBJS_AUTOLOAD) (.sinit) -} - -Autoload DTCM -{ - Address $(ADDRESS_DTCM) - Object * (.dtcm) - Object $(OBJS_AUTOLOAD) (.data) - Object $(OBJS_AUTOLOAD) (.sdata) - Object $(OBJS_AUTOLOAD) (.bss) - Object $(OBJS_AUTOLOAD) (.sbss) -} - -Ltdautoload LTDMAIN -{ - # NITRO/TWL L̃I[o[C݂ꍇ́Aɂ̌ɔzuKv܂B - After $(TARGET_NAME) - Object * (.ltdmain) - Object $(OBJS_LTDAUTOLOAD) - Library $(LLIBS_EX) $(GLIBS_EX) -} diff --git a/build/tests/TitleHashChecker/ARM9.TWL/Makefile b/build/tests/TitleHashChecker/ARM9.TWL/Makefile deleted file mode 100644 index 11fd1ef7..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/Makefile +++ /dev/null @@ -1,85 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - systemMenu_RED - NandInitializerRed -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2009-03-11#$ -# $Rev: 2763 $ -# $Author: akabane_jumpei $ -#---------------------------------------------------------------------------- - -#---------------------------------------------------------------------------- -SYSM_DISABLE_DEBUG = FALSE - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED - -#TARGET_CODEGEN = THUMB - -TITLEID_LO = 0NRA -#TARGET_TAD = - -TARGET_BIN = TitleHashChecker.srl -LCFILE_SPEC = ARM9-TS.lsf -ROM_SPEC = main.rsf - -MAKEROM_ARM7_BASE = ../ARM7.TWL/bin/$(TWL_BUILDTYPE_ARM7)/armadillo -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - -SRCS = main.c \ - common.c \ - font.c \ - screen.c \ - kami_pxi.c - -LINCLUDES = ../common/include \ - $(ROOT)/build/libraries/lcfg/ARM9.TWL/include \ - ../../common/ARM9/include - -SRCDIR = src \ - ../../common/ARM9/src - -#LCFILE = # using default - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \ - -DDISABLE_DEBUG='$(SYSM_DISABLE_DEBUG)' - -MAKETAD_FLAGS += -s - -SDK_APPEND_LIBS = \ - libes$(TWL_LIBSUFFIX).a \ - libboc$(TWL_LIBSUFFIX).a \ - libsfs$(TWL_LIBSUFFIX).a \ - libnam$(TWL_LIBSUFFIX).a \ - libsea$(TWL_LIBSUFFIX).a \ - liblcfg$(TWL_LIBSUFFIX).a \ - libna$(TWL_LIBSUFFIX).a - -LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) - -MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe - -#LDIRT_CLEAN = -#INSTALL_TARGETS = -INSTALL_DIR = $(SDK_NMENU_DATADIR) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/TitleHashChecker/ARM9.TWL/include/common.h b/build/tests/TitleHashChecker/ARM9.TWL/include/common.h deleted file mode 100644 index 6983cb3f..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/include/common.h +++ /dev/null @@ -1,91 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - File: common.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-08-30#$ - $Rev: 8166 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#ifndef COMMON_H_ -#define COMMON_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#define KEY_REPEAT_START 25 // L[s[gJn܂ł̃t[ -#define KEY_REPEAT_SPAN 10 // L[s[g̊Ԋut[ - -/*---------------------------------------------------------------------------* - \ ` - *---------------------------------------------------------------------------*/ - -// L[͏ -typedef struct KeyInfo -{ - u16 cnt; // H͒l - u16 trg; // gK - u16 up; // gK - u16 rep; // ێs[g -} KeyInfo; - - -// DS-IPL2wb_ -typedef struct -{ - u16 reserved_0h[4]; - u32 ds_key; - u16 ds_arm9_romAdr; - u16 ds_arm9_ramAdr; - u16 ds_arm7_romAdr; - u16 ds_arm7_ramAdr; - u16 ds_arm9_romOffsetUnit:3; - u16 ds_arm9_ramOffsetUnit:3; - u16 ds_arm7_romOffsetUnit:3; - u16 ds_arm7_ramOffsetUnit:3; - u16 :2; - u16 ds_header_ver:2; - u16 ds_data_romAdr; - u64 card_key; - u16 ncd_romAdr; - u16 reserved_24h[2]; - u16 ds_data_crc16; -} -NORHeaderDS; - -/*---------------------------------------------------------------------------* - Prototype - *---------------------------------------------------------------------------*/ -void InitCommon(void); - -void ReadKey(KeyInfo* pKey); - -void VBlankIntr(void); - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* COMMON_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/ARM9.TWL/include/font.h b/build/tests/TitleHashChecker/ARM9.TWL/include/font.h deleted file mode 100644 index d4f23ed2..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/include/font.h +++ /dev/null @@ -1,41 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: font.h - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#ifndef FONT_H_ -#define FONT_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -extern const u32 d_CharData[8 * 256]; -extern const u32 d_PaletteData[8 * 16]; - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* FONT_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/ARM9.TWL/include/kami_pxi.h b/build/tests/TitleHashChecker/ARM9.TWL/include/kami_pxi.h deleted file mode 100644 index 4ac47057..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/include/kami_pxi.h +++ /dev/null @@ -1,112 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.h - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-07-25#$ - $Rev: 2003 $ - $Author: kamikawa $ - *---------------------------------------------------------------------------*/ - -#ifndef TWL_KAMI_TEST_KAMITEST_H_ -#define TWL_KAMI_TEST_KAMITEST_H_ - -#include "fifo.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -// ʒ` -typedef enum KAMIResult -{ - KAMI_RESULT_SUCCESS = 0, - KAMI_RESULT_SUCCESS_TRUE = 0, - KAMI_RESULT_SUCCESS_FALSE, - KAMI_RESULT_INVALID_COMMAND, - KAMI_RESULT_INVALID_PARAMETER, - KAMI_RESULT_ILLEGAL_STATUS, - KAMI_RESULT_BUSY, - KAMI_RESULT_FATAL_ERROR, - KAMI_RESULT_SEND_ERROR, - KAMI_RESULT_MAX -} -KAMIResult; - - -typedef enum { - FORMAT_MODE_QUICK, // QuicktH[}bg - FORMAT_MODE_FULL // FulltH[}bg(ep[eBV0xFFŖ߂j -} FormatMode; - -// R[obN -typedef void (*KAMICallback)(KAMIResult result, void *arg); - - -void KamiPxiInit( void ); - -KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback); -KAMIResult ExeFormat(FormatMode format_mode); -KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read); -KAMIResult kamiMcuWriteFirm(void* buffer ); -KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read); -KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read); -KAMIResult kamiCDC_GoDsMode( void ); -KAMIResult kamiClearNandErrorLog( void ); -KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ); -KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ); -KAMIResult kamiGetNandCID( void* buffer ); - -// (dv) -// ARM7ǂݏ邽߃[hOInvalidateACgO̓tbVĂB -// -static KAMIResult kamiNandRead(u32 block, void* buffer, u32 count) -{ - return kamiNandIo(block, buffer, count, TRUE); -} -static KAMIResult kamiNandWrite(u32 block, void* buffer, u32 count) -{ - return kamiNandIo(block, buffer, count, FALSE); -} -static KAMIResult kamiMcuRead(u8 reg_no, void* buffer) -{ - return kamiMcuIo((u32)reg_no, buffer, 0, TRUE); -} -static KAMIResult kamiMcuWrite(u8 reg_no, u8 value) -{ - return kamiMcuIo((u32)reg_no, NULL, (u32)value, FALSE); -} -static KAMIResult kamiARM7Read(u32 addr, void* buffer) -{ - return kamiARM7Io(addr, buffer, 0, TRUE); -} -static KAMIResult kamiARM7Write(u32 addr, u8 value) -{ - return kamiARM7Io(addr, NULL, value, FALSE); -} - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_KAMI_TEST_KAMITEST_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/ARM9.TWL/include/screen.h b/build/tests/TitleHashChecker/ARM9.TWL/include/screen.h deleted file mode 100644 index 4b758ee9..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/include/screen.h +++ /dev/null @@ -1,67 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: screen.h - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#ifndef SCREEN_H_ -#define SCREEN_H_ - -#ifdef __cplusplus - -extern "C" { -#endif - -/*===========================================================================*/ -#include - -// tHg̐F -#define COLOR_BLACK 0x10 -#define COLOR_RED 0x11 -#define COLOR_GREEN 0x12 -#define COLOR_BLUE 0x13 -#define COLOR_YELLOW 0x14 -#define COLOR_PURPLE 0x15 -#define COLOR_L_BLUE 0x16 -#define COLOR_D_RED 0x17 -#define COLOR_D_GREEN 0x18 -#define COLOR_D_BLUE 0x19 -#define COLOR_D_YELLOW 0x1a -#define COLOR_D_PURPLE 0x1b -#define COLOR_D_L_BLUE 0x1c -#define COLOR_GRAY 0x1d -#define COLOR_D_GRAY 0x1e -#define COLOR_WHITE 0x1f - -/*---------------------------------------------------------------------------* - ֐ ` - *---------------------------------------------------------------------------*/ -void InitScreen(void); -void ClearScreen(void); -void ClearMainScreen(void); -void ClearSubScreen(void); -void PutMainScreen(s32 x, s32 y, u8 palette, char* text, ...); -void PutSubScreen(s32 x, s32 y, u8 palette, char* text, ...); -void UpdateScreen(void); - -/*===========================================================================*/ -#ifdef __cplusplus - -} /* extern "C" */ -#endif - -#endif /* SCREEN_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/ARM9.TWL/main.rsf b/build/tests/TitleHashChecker/ARM9.TWL/main.rsf deleted file mode 100644 index aa90c945..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/main.rsf +++ /dev/null @@ -1,229 +0,0 @@ -#---------------------------------------------------------------------------- -# Project: TwlSDK - include -# File: ROM-BB.rsf -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2008-01-07#$ -# $Rev: 436 $ -# $Author: yosiokat $ -#---------------------------------------------------------------------------- -# -# TWL ROM SPEC FILE -# - -Arm9 -{ - Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" - Elf "$(MAKEROM_ARM9:r).tef" -} - -Arm7 -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" - Elf "$(MAKEROM_ARM7_BASE:r).tef" -} - -Arm9.Ltd -{ - Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" - OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" -} - -Arm7.Ltd -{ - Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" - OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" -} - -Property -{ - ### - ### Settings for FinalROM - ### - #### BEGIN - # - # TITLE NAME: Your product name within 12bytes - # - #TitleName "YourAppName" - - # - # MAKER CODE: Your company ID# in 2 ascii words - # issued by NINTENDO - # - #MakerCode "00" - - # - # REMASTER VERSION: Mastering version - # - RomVersion 2 - - # - # ROM SPEED TYPE: [MROM/1TROM/UNDEFINED] - # - RomSpeedType $(MAKEROM_ROMSPEED) - - # - # ROM SIZE: in bit [64M/128M/256M/512M/1G/2G] - # - #RomSize 2G - - # - # ROM PADDING: TRUE if finalrom - # - #RomFootPadding TRUE - - # - # ROM HEADER TEMPLATE: Provided to every product by NINTENDO - # - #RomHeaderTemplate ./etc/rom_header.template.sbin - - # - # BANNER FILE: generated from Banner Spec File - # - BannerFile ../banner/banner.bnr - - ### - ### Setting for TWL - ### - - # - # ROM HEADER Ltd: Provided to every product by NINTENDO - # - RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin - - # - # Digest parameters: - # - DigestParam 1024 32 - - # - # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD] - # don't have to edit - # - WramMapping MAP_TS_SCR - - # - # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] - # - CardRegion ALL - - # - # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] - # - CommonClientKey TRUE - - # - # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] - # - HwAESSlotB TRUE - - # - # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] - # - HwAESSlotC TRUE - - # - # SDCardAccess: sd card access control [TRUE/FALSE] - # - SDCardAccess TRUE - - # - # NANDAccess: NAND access control [TRUE/FALSE] - # - NANDAccess TRUE - - # - # Codec mode: - # don't have to edit - # - CodecMode $(MAKEROM_CODEC_MODE) - - # - # SCFG: scfg lock [TRUE/FALSE] - # - LockSCFG FALSE - - # - # DisableDebug FŏIROMł́AsɃfobOłȂ悤TRUEɂKv܂B - # - DisableDebug $(DISABLE_DEBUG) - - ### - #### END -} - - -AppendProperty -{ - # - # Publisher : "Nintendo" - # don't have to edit - Publisher Nintendo - - # - # Application type : [USER/SYSTEM] - # don't have to edit - AppType System - - # - # launch title on the launcher : [TRUE/FALSE] - # don't have to edit - Launch TRUE - - # - # Data only title : [TRUE/FALSE] - # don't have to edit - DataOnly FALSE - - # - # Secure title : [TRUE/FALSE] - # don't have to edit - Secure TRUE - - # - # Boot allowed Media: [GameCard/NAND] - # - Media GameCard - - # - # GameCode for TitleID : Your GameCode in 4 ascii words - # - GameCode $(TITLEID_LO) - - # - # Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PublicSaveDataSize 32K - - # - # Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M] - # - #PrivateSaveDataSize 16K - - # - # Enable SubBannerFile - #SubBannerFile TRUE -} - - -RomSpec -{ - Offset 0x00000000 - Segment ALL - HostRoot $(MAKEROM_ROMROOT) - Root / - File $(MAKEROM_ROMFILES) -} diff --git a/build/tests/TitleHashChecker/ARM9.TWL/src/common.c b/build/tests/TitleHashChecker/ARM9.TWL/src/common.c deleted file mode 100644 index c1b7c958..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/src/common.c +++ /dev/null @@ -1,156 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - File: common.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-08-25#$ - $Rev: 8074 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#include "common.h" - -static void InitInterrupts(void); -static void InitHeap(void); - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: InitCommon - - Description: {Iȏ֐ŌĂԁB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void InitCommon(void) -{ - OS_Init(); - OS_InitTick(); - OS_InitAlarm(); - GX_Init(); - GX_DispOff(); - GXS_DispOff(); - - CARD_Init(); // VKlj - CARD_Enable(TRUE); // VKlj - - InitHeap(); - InitInterrupts(); -} - -/*---------------------------------------------------------------------------* - Name: ReadKey - - Description: L[͏擾A͏\̂ҏWB - gKAgKAps[ggK oB - - Arguments: pKey - ҏWL[͏\̂w肷B - - Returns: None. - *---------------------------------------------------------------------------*/ -void ReadKey(KeyInfo* pKey) -{ - static u16 repeat_count[12]; - int i; - u16 r; - - r = PAD_Read(); - pKey->trg = 0x0000; - pKey->up = 0x0000; - pKey->rep = 0x0000; - - for (i = 0; i < 12; i++) - { - if (r & (0x0001 << i)) - { - if (!(pKey->cnt & (0x0001 << i))) - { - pKey->trg |= (0x0001 << i); // gK - repeat_count[i] = 1; - } - else - { - if (repeat_count[i] > KEY_REPEAT_START) - { - pKey->rep |= (0x0001 << i); // ps[g - repeat_count[i] = (u16) (KEY_REPEAT_START - KEY_REPEAT_SPAN); - } - else - { - repeat_count[i]++; - } - } - } - else - { - if (pKey->cnt & (0x0001 << i)) - { - pKey->up |= (0x0001 << i); // gK - } - } - } - - pKey->cnt = r; // HL[ -} - -/*---------------------------------------------------------------------------* - Name: InitInterrupts - - Description: 荞ݐݒB - V uN荞݂‚A荞݃nhݒ肷B - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitInterrupts(void) -{ - // V uN荞ݐݒ - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - (void)OS_EnableIrqMask(OS_IE_V_BLANK); - (void)GX_VBlankIntr(TRUE); - - // 荞݋ - (void)OS_EnableIrq(); - (void)OS_EnableInterrupts(); -} - -/*---------------------------------------------------------------------------* - Name: InitHeap - - Description: C̃A[iɂăăVXeB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -static void InitHeap(void) -{ - void* tempLo; - OSHeapHandle hh; - - // C̃A[iɃq[vЂƂ쐬 - tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tempLo); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - // q[v쐬Ɏsꍇُ͈I - OS_Panic("ARM9: Fail to create heap...\n"); - } - (void)OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/ARM9.TWL/src/font.c b/build/tests/TitleHashChecker/ARM9.TWL/src/font.c deleted file mode 100644 index ebc10e7b..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/src/font.c +++ /dev/null @@ -1,585 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: NitroWiFi - WCM - demos - wcm-list - File: font.c - - Copyright 2005-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Log: font.c,v $ - Revision 1.2 2006/03/10 09:22:43 kitase_hirotake - INDENT SOURCE - - Revision 1.1 2005/07/21 08:21:06 adachi_hiroaki - VKlj - - - $NoKeywords: $ - *---------------------------------------------------------------------------*/ -#include "font.h" - -/*---------------------------------------------------------------------------* - Character data - *---------------------------------------------------------------------------*/ -const u32 d_CharData[8 * 256] = -{ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0000h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01010010, 0x01010010, 0x00000110, // 0001h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x01011010, 0x01010010, 0x00010010, // 0002h - 0x00100010, 0x00100010, 0x00100001, 0x00100001, - 0x00000000, 0x01010001, 0x01010001, 0x01111111, // 0003h - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 0004h - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01010000, 0x01010100, 0x00001010, // 0005h - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011000, 0x01011000, 0x01111111, // 0006h - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01010010, 0x01101111, 0x01010010, // 0007h - 0x00010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x01010010, 0x01011111, 0x00000100, // 0008h - 0x00011111, 0x00001000, 0x00000001, 0x00011110, - 0x00000000, 0x01010000, 0x01011000, 0x00000110, // 0009h - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x01010000, 0x01111101, 0x00010001, // 000ah - 0x00010001, 0x00010001, 0x00010001, 0x00001010, - 0x00000000, 0x01010000, 0x01011110, 0x00100000, // 000bh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010100, 0x01011111, 0x00001000, // 000ch - 0x00010000, 0x00000001, 0x00000001, 0x00011110, - 0x00000000, 0x01010001, 0x01010001, 0x00000001, // 000dh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00011000, // 000eh - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x01010010, 0x01111111, 0x00010010, // 000fh - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00001110, 0x01010100, 0x01010010, // 0010h - 0x00111111, 0x00000100, 0x00000100, 0x00011000, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 0011h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x01010100, 0x01011111, 0x00000010, // 0012h - 0x00011110, 0x00100001, 0x00100000, 0x00011110, - 0x00000000, 0x01010000, 0x01011100, 0x00100011, // 0013h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01010000, 0x01111111, 0x00010000, // 0014h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x01010010, 0x01010010, 0x00001100, // 0015h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x01010001, 0x01111101, 0x00010001, // 0016h - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01010100, 0x01010011, 0x01110010, // 0017h - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01011110, 0x01011000, 0x00000100, // 0018h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01010000, 0x01011100, 0x00010010, // 0019h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01011101, 0x01010001, 0x00111101, // 001ah - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x01110001, 0x01011101, 0x00110001, // 001bh - 0x00010001, 0x00111001, 0x01010101, 0x00011001, - 0x00000000, 0x01110100, 0x01010011, 0x00110010, // 001ch - 0x00010001, 0x00010001, 0x00001010, 0x00000100, - 0x00000000, 0x01101110, 0x01011000, 0x00100100, // 001dh - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x01110000, 0x01011100, 0x00110010, // 001eh - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x01010001, 0x00111101, // 001fh - 0x00010001, 0x00011001, 0x00110101, 0x00001001, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 0020h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 0021h - 0x00001000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x01101100, 0x01001000, 0x00100100, // 0022h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00100100, 0x01111111, 0x00100100, // 0023h - 0x00100100, 0x01111111, 0x00010010, 0x00010010, - 0x00000000, 0x00001000, 0x01111110, 0x00001001, // 0024h - 0x00111110, 0x01001000, 0x00111111, 0x00001000, - 0x00000000, 0x01000010, 0x00100101, 0x00010010, // 0025h - 0x00001000, 0x00100100, 0x01010010, 0x00100001, - 0x00000000, 0x00001110, 0x00010001, 0x00001001, // 0026h - 0x01000110, 0x00101001, 0x00110001, 0x01001110, - 0x00000000, 0x00011000, 0x00010000, 0x00001000, // 0027h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01110000, 0x00001000, 0x00000100, // 0028h - 0x00000100, 0x00000100, 0x00001000, 0x01110000, - 0x00000000, 0x00000111, 0x00001000, 0x00010000, // 0029h - 0x00010000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x00001000, 0x01001001, 0x00101010, // 002ah - 0x00011100, 0x00101010, 0x01001001, 0x00001000, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 002bh - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002ch - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002dh - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 002eh - 0x00000000, 0x00000000, 0x00000000, 0x00001100, - 0x00000000, 0x01000000, 0x00100000, 0x00010000, // 002fh - 0x00001000, 0x00000100, 0x00000010, 0x00000001, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0030h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00011100, 0x00010000, 0x00010000, // 0031h - 0x00010000, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0032h - 0x00111110, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x00111110, 0x01000001, 0x01000000, // 0033h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00100000, 0x00110000, 0x00101000, // 0034h - 0x00100100, 0x00100010, 0x01111111, 0x00100000, - 0x00000000, 0x01111111, 0x00000001, 0x00111111, // 0035h - 0x01000000, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x00000001, 0x00111111, // 0036h - 0x01000001, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00100000, 0x00100000, // 0037h - 0x00010000, 0x00010000, 0x00001000, 0x00001000, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0038h - 0x00111110, 0x01000001, 0x01000001, 0x00111110, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 0039h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003ah - 0x00000000, 0x00000000, 0x00001100, 0x00000000, - 0x00000000, 0x00000000, 0x00001100, 0x00000000, // 003bh - 0x00000000, 0x00001100, 0x00001000, 0x00000100, - 0x00000000, 0x01100000, 0x00011000, 0x00000110, // 003ch - 0x00000001, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00000000, 0x01111111, 0x00000000, // 003dh - 0x00000000, 0x00000000, 0x01111111, 0x00000000, - 0x00000000, 0x00000011, 0x00001100, 0x00110000, // 003eh - 0x01000000, 0x00110000, 0x00001100, 0x00000011, - 0x00000000, 0x00111110, 0x01000001, 0x01000001, // 003fh - 0x00110000, 0x00001000, 0x00000000, 0x00001000, - 0x00000000, 0x00011100, 0x00100010, 0x01001001, // 0040h - 0x01010101, 0x01010101, 0x01010101, 0x00111010, - 0x00000000, 0x00001000, 0x00010100, 0x00010100, // 0041h - 0x00100010, 0x00111110, 0x01000001, 0x01000001, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0042h - 0x00111111, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0043h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x00011111, 0x00100001, 0x01000001, // 0044h - 0x01000001, 0x01000001, 0x00100001, 0x00011111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0045h - 0x01111111, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01111111, 0x00000001, 0x00000001, // 0046h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00111100, 0x01000010, 0x00000001, // 0047h - 0x01111001, 0x01000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0048h - 0x01111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x00001000, 0x00001000, // 0049h - 0x00001000, 0x00001000, 0x00001000, 0x00111110, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 004ah - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01100001, 0x00011001, 0x00000101, // 004bh - 0x00000011, 0x00000101, 0x00011001, 0x01100001, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 004ch - 0x00000001, 0x00000001, 0x00000001, 0x01111111, - 0x00000000, 0x01000001, 0x01100011, 0x01010101, // 004dh - 0x01001001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x01000001, 0x01000011, 0x01000101, // 004eh - 0x01001001, 0x01010001, 0x01100001, 0x01000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 004fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0050h - 0x00111111, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00011100, 0x00100010, 0x01000001, // 0051h - 0x01000001, 0x01011001, 0x00100010, 0x01011100, - 0x00000000, 0x00111111, 0x01000001, 0x01000001, // 0052h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00111110, 0x01000001, 0x00000001, // 0053h - 0x00111110, 0x01000000, 0x01000001, 0x00111110, - 0x00000000, 0x01111111, 0x00001000, 0x00001000, // 0054h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0055h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x01000001, 0x01000001, 0x00100010, // 0056h - 0x00100010, 0x00010100, 0x00010100, 0x00001000, - 0x00000000, 0x01000001, 0x01000001, 0x01000001, // 0057h - 0x01001001, 0x01010101, 0x01100011, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0058h - 0x00001000, 0x00010100, 0x00100010, 0x01000001, - 0x00000000, 0x01000001, 0x00100010, 0x00010100, // 0059h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01111111, 0x00100000, 0x00010000, // 005ah - 0x00001000, 0x00000100, 0x00000010, 0x01111111, - 0x00000000, 0x01111100, 0x00000100, 0x00000100, // 005bh - 0x00000100, 0x00000100, 0x00000100, 0x01111100, - 0x00000000, 0x00100010, 0x00010100, 0x00111110, // 005ch - 0x00001000, 0x00111110, 0x00001000, 0x00001000, - 0x00000000, 0x00011111, 0x00010000, 0x00010000, // 005dh - 0x00010000, 0x00010000, 0x00010000, 0x00011111, - 0x00000000, 0x00001000, 0x00010100, 0x00100010, // 005eh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 005fh - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x00010000, 0x00001000, 0x00011000, // 0060h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00011110, 0x00100001, // 0061h - 0x00111110, 0x00100001, 0x00100001, 0x01011110, - 0x00000000, 0x00000001, 0x00000001, 0x00111111, // 0062h - 0x01000001, 0x01000001, 0x01000001, 0x00111111, - 0x00000000, 0x00000000, 0x00111100, 0x01000010, // 0063h - 0x00000001, 0x00000001, 0x01000010, 0x00111100, - 0x00000000, 0x01000000, 0x01000000, 0x01111110, // 0064h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0065h - 0x01111111, 0x00000001, 0x01000001, 0x00111110, - 0x00000000, 0x00110000, 0x00001000, 0x00001000, // 0066h - 0x01111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x01111110, 0x01000001, // 0067h - 0x01000001, 0x01111110, 0x01000000, 0x00111110, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0068h - 0x00111111, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00001000, 0x00000000, 0x00001000, // 0069h - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00100000, 0x00000000, 0x00100000, // 006ah - 0x00100000, 0x00100001, 0x00100001, 0x00011110, - 0x00000000, 0x00000001, 0x00000001, 0x01100001, // 006bh - 0x00011001, 0x00000111, 0x00011001, 0x01100001, - 0x00000000, 0x00001000, 0x00001000, 0x00001000, // 006ch - 0x00001000, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00110111, 0x01001001, // 006dh - 0x01001001, 0x01001001, 0x01001001, 0x01001001, - 0x00000000, 0x00000000, 0x00111111, 0x01000001, // 006eh - 0x01000001, 0x01000001, 0x01000001, 0x01000001, - 0x00000000, 0x00000000, 0x00011100, 0x00100010, // 006fh - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00000000, 0x00111101, 0x01000011, // 0070h - 0x01000001, 0x01000011, 0x00111101, 0x00000001, - 0x00000000, 0x00000000, 0x01011110, 0x01100001, // 0071h - 0x01000001, 0x01100001, 0x01011110, 0x01000000, - 0x00000000, 0x00000000, 0x00110001, 0x00001101, // 0072h - 0x00000011, 0x00000001, 0x00000001, 0x00000001, - 0x00000000, 0x00000000, 0x00111110, 0x01000001, // 0073h - 0x00001110, 0x00110000, 0x01000001, 0x00111110, - 0x00000000, 0x00000100, 0x00000100, 0x01111111, // 0074h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0075h - 0x01000001, 0x01000001, 0x01000001, 0x01111110, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0076h - 0x00100010, 0x00100010, 0x00010100, 0x00001000, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0077h - 0x01001001, 0x00101010, 0x00101010, 0x00010100, - 0x00000000, 0x00000000, 0x00100001, 0x00010010, // 0078h - 0x00001100, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x00000000, 0x01000001, 0x01000001, // 0079h - 0x00100010, 0x00011100, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111111, 0x00010000, // 007ah - 0x00001000, 0x00000100, 0x00000010, 0x00111111, - 0x00000000, 0x00001000, 0x00011110, 0x01100100, // 007bh - 0x00011000, 0x00100100, 0x00000100, 0x01111000, - 0x00000000, 0x00000000, 0x00011110, 0x00000100, // 007ch - 0x00011110, 0x00110101, 0x00101101, 0x00010010, - 0x00000000, 0x00000000, 0x00000000, 0x00010001, // 007dh - 0x00100001, 0x00100001, 0x00000001, 0x00000010, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007eh - 0x00011110, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00011100, 0x00000000, // 007fh - 0x00111110, 0x00010000, 0x00001100, 0x00110010, - 0x00000000, 0x00000000, 0x00000100, 0x00101111, // 0080h - 0x01000100, 0x00011110, 0x00100101, 0x00010110, - 0x00000000, 0x00000000, 0x00001010, 0x00011110, // 0081h - 0x00101011, 0x00100010, 0x00010100, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00011101, // 0082h - 0x00101011, 0x00101001, 0x00011001, 0x00000100, - 0x00000000, 0x00000000, 0x00001000, 0x00111000, // 0083h - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00000000, 0x00000000, 0x00011100, // 0084h - 0x00100011, 0x00100000, 0x00100000, 0x00011100, - 0x00000000, 0x00000110, 0x01001001, 0x00110000, // 0085h - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000100, 0x00111111, 0x00000100, // 0086h - 0x00111110, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000000, 0x00100001, 0x01000001, // 0087h - 0x01000001, 0x01000001, 0x00000001, 0x00000010, - 0x00000000, 0x00111100, 0x00000000, 0x00111110, // 0088h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00011100, 0x00000000, 0x00111110, // 0089h - 0x00010000, 0x00001000, 0x00010100, 0x01100010, - 0x00000000, 0x00100100, 0x01011111, 0x00000100, // 008ah - 0x00111110, 0x01000101, 0x01000101, 0x00100010, - 0x00000000, 0x00100010, 0x01001111, 0x01010010, // 008bh - 0x01010010, 0x00010010, 0x00010010, 0x00001001, - 0x00000000, 0x00000100, 0x00111110, 0x00001000, // 008ch - 0x00111110, 0x00010000, 0x00000010, 0x00111100, - 0x00000000, 0x00100000, 0x00011000, 0x00000110, // 008dh - 0x00000001, 0x00000110, 0x00011000, 0x00100000, - 0x00000000, 0x00100000, 0x01111101, 0x00100001, // 008eh - 0x00100001, 0x00100001, 0x00100001, 0x00010010, - 0x00000000, 0x00011110, 0x00100000, 0x00000000, // 008fh - 0x00000000, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00001000, 0x01111111, 0x00010000, // 0090h - 0x00100000, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x00000001, 0x00000001, 0x00000001, // 0091h - 0x01000001, 0x01000001, 0x00100010, 0x00011100, - 0x00000000, 0x00010000, 0x01111111, 0x00011000, // 0092h - 0x00010100, 0x00010100, 0x00011000, 0x00001100, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 0093h - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x00111100, 0x00010000, 0x00001100, // 0094h - 0x01111111, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000100, 0x00011111, 0x00000100, // 0095h - 0x01110100, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00001000, 0x01111111, 0x00000100, // 0096h - 0x00111100, 0x01000010, 0x01000000, 0x00111100, - 0x00000000, 0x00000000, 0x00011100, 0x00100011, // 0097h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01111111, 0x00010000, 0x00001000, // 0098h - 0x00001000, 0x00001000, 0x00001000, 0x00110000, - 0x00000000, 0x00000010, 0x00110010, 0x00001100, // 0099h - 0x00000010, 0x00000001, 0x00000001, 0x00111110, - 0x00000000, 0x00100100, 0x01001111, 0x01000010, // 009ah - 0x00010001, 0x00111100, 0x00010010, 0x00001100, - 0x00000000, 0x00000010, 0x01111010, 0x01000010, // 009bh - 0x00000010, 0x00000010, 0x00001010, 0x01110010, - 0x00000000, 0x00100010, 0x00111110, 0x01010010, // 009ch - 0x01001011, 0x01101101, 0x01010101, 0x00110010, - 0x00000000, 0x00110010, 0x01001011, 0x01000110, // 009dh - 0x01000110, 0x01110010, 0x01001011, 0x00110010, - 0x00000000, 0x00011100, 0x00101010, 0x01001001, // 009eh - 0x01001001, 0x01000101, 0x01000101, 0x00110010, - 0x00000000, 0x00100001, 0x01111101, 0x00100001, // 009fh - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00000100, 0x00100011, 0x01100010, // 00a0h - 0x00100001, 0x00100001, 0x00010010, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a1h - 0x00000000, 0x00000100, 0x00001010, 0x00000100, - 0x00000000, 0x01110000, 0x00010000, 0x00010000, // 00a2h - 0x00010000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a3h - 0x00001000, 0x00001000, 0x00001000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00a4h - 0x00000000, 0x00000010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00011000, // 00a5h - 0x00011000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x01111111, // 00a6h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x00000000, 0x00111111, 0x00100000, // 00a7h - 0x00010100, 0x00001100, 0x00000100, 0x00000010, - 0x00000000, 0x00000000, 0x00100000, 0x00100000, // 00a8h - 0x00010000, 0x00001111, 0x00001000, 0x00001000, - 0x00000000, 0x00000000, 0x00000100, 0x00111111, // 00a9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00aah - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00000000, 0x00010000, 0x00111111, // 00abh - 0x00011000, 0x00010100, 0x00010010, 0x00011001, - 0x00000000, 0x00000000, 0x00000010, 0x00111111, // 00ach - 0x00100010, 0x00010010, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00000000, 0x00111110, // 00adh - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00aeh - 0x00111110, 0x00100000, 0x00100000, 0x00111110, - 0x00000000, 0x00000000, 0x00100101, 0x00101010, // 00afh - 0x00101010, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00b0h - 0x01111111, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x01111111, 0x01000000, 0x00101000, // 00b1h - 0x00011000, 0x00001000, 0x00001000, 0x00000100, - 0x00000000, 0x01000000, 0x00100000, 0x00011000, // 00b2h - 0x00010111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x00001000, 0x01111111, 0x01000001, // 00b3h - 0x01000001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000000, 0x00111110, 0x00001000, // 00b4h - 0x00001000, 0x00001000, 0x00001000, 0x01111111, - 0x00000000, 0x00100000, 0x01111111, 0x00110000, // 00b5h - 0x00101000, 0x00100100, 0x00100010, 0x00110001, - 0x00000000, 0x00000100, 0x01111111, 0x01000100, // 00b6h - 0x01000100, 0x01000100, 0x01000010, 0x00100001, - 0x00000000, 0x00000100, 0x00111111, 0x00001000, // 00b7h - 0x01111111, 0x00010000, 0x00010000, 0x00010000, - 0x00000000, 0x01111100, 0x01000100, 0x01000100, // 00b8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00000010, 0x01111110, 0x00100010, // 00b9h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00bah - 0x01000000, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00100010, 0x01111111, 0x00100010, // 00bbh - 0x00100010, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x00000011, 0x00000100, 0x01000011, // 00bch - 0x01000100, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x01111111, 0x01000000, 0x00100000, // 00bdh - 0x00010000, 0x00011000, 0x00100100, 0x01000011, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00beh - 0x00100010, 0x00000010, 0x00000010, 0x01111100, - 0x00000000, 0x01000001, 0x01000010, 0x01000000, // 00bfh - 0x00100000, 0x00100000, 0x00011000, 0x00000110, - 0x00000000, 0x01111110, 0x01000010, 0x01001110, // 00c0h - 0x01110001, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x01100000, 0x00011110, 0x00010000, // 00c1h - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01000101, 0x01001010, 0x01001010, // 00c2h - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00c3h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000010, 0x00000010, 0x00000110, // 00c4h - 0x00011010, 0x01100010, 0x00000010, 0x00000010, - 0x00000000, 0x00010000, 0x00010000, 0x01111111, // 00c5h - 0x00010000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x00000000, 0x00111110, 0x00000000, // 00c6h - 0x00000000, 0x00000000, 0x00000000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000100, // 00c7h - 0x00101000, 0x00010000, 0x00101000, 0x01000110, - 0x00000000, 0x00001000, 0x01111111, 0x00100000, // 00c8h - 0x00010000, 0x00011100, 0x01101011, 0x00001000, - 0x00000000, 0x01000000, 0x01000000, 0x01000000, // 00c9h - 0x00100000, 0x00100000, 0x00011000, 0x00000111, - 0x00000000, 0x00010010, 0x00100010, 0x00100010, // 00cah - 0x01000010, 0x01000010, 0x01000001, 0x01000001, - 0x00000000, 0x00000001, 0x00000001, 0x01111111, // 00cbh - 0x00000001, 0x00000001, 0x00000001, 0x01111110, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cch - 0x01000000, 0x00100000, 0x00010000, 0x00001110, - 0x00000000, 0x00000000, 0x00000100, 0x00001010, // 00cdh - 0x00010001, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x00001000, 0x00001000, 0x01111111, // 00ceh - 0x00001000, 0x00101010, 0x01001010, 0x01001001, - 0x00000000, 0x01111111, 0x01000000, 0x01000000, // 00cfh - 0x00100010, 0x00010100, 0x00001000, 0x00010000, - 0x00000000, 0x00001110, 0x01110000, 0x00001110, // 00d0h - 0x01110000, 0x00000110, 0x00011000, 0x01100000, - 0x00000000, 0x00001000, 0x00001000, 0x00000100, // 00d1h - 0x00000100, 0x00100010, 0x01000010, 0x01111111, - 0x00000000, 0x01000000, 0x01000000, 0x00100100, // 00d2h - 0x00101000, 0x00010000, 0x00101100, 0x01000011, - 0x00000000, 0x01111111, 0x00000100, 0x01111111, // 00d3h - 0x00000100, 0x00000100, 0x00000100, 0x01111000, - 0x00000000, 0x00000010, 0x01111111, 0x01000010, // 00d4h - 0x00100010, 0x00010100, 0x00000100, 0x00000100, - 0x00000000, 0x00000000, 0x00111110, 0x00100000, // 00d5h - 0x00100000, 0x00100000, 0x00100000, 0x01111111, - 0x00000000, 0x01111110, 0x01000000, 0x01000000, // 00d6h - 0x01111110, 0x01000000, 0x01000000, 0x01111110, - 0x00000000, 0x00111110, 0x00000000, 0x01111111, // 00d7h - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00d8h - 0x01000010, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00001010, 0x00001010, 0x00001010, // 00d9h - 0x01001010, 0x01001010, 0x00101010, 0x00011001, - 0x00000000, 0x00000010, 0x00000010, 0x01000010, // 00dah - 0x01000010, 0x00100010, 0x00010010, 0x00001110, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dbh - 0x01000001, 0x01000001, 0x01000001, 0x01111111, - 0x00000000, 0x01111111, 0x01000001, 0x01000001, // 00dch - 0x01000000, 0x01000000, 0x00100000, 0x00011100, - 0x00000000, 0x01000011, 0x01000100, 0x01000000, // 00ddh - 0x01000000, 0x00100000, 0x00010000, 0x00001111, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00deh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // 00dfh - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00000000, 0x00011110, 0x00001000, 0x00000100, // 00e0h - 0x00101001, 0x01010001, 0x01010001, 0x00001100, - 0x00000000, 0x00000000, 0x00001100, 0x00010010, // 00e1h - 0x00010010, 0x00100001, 0x01000000, 0x00000000, - 0x00000000, 0x01111101, 0x00100001, 0x01111101, // 00e2h - 0x00100001, 0x00111001, 0x01100101, 0x00011001, - 0x00000000, 0x00111100, 0x00010000, 0x00111100, // 00e3h - 0x00010000, 0x00011100, 0x00110010, 0x00001100, - 0x00000000, 0x00001110, 0x00101000, 0x00101000, // 00e4h - 0x00111110, 0x01100101, 0x00100101, 0x00010010, - 0x00000000, 0x00000100, 0x00101111, 0x01000100, // 00e5h - 0x00000110, 0x01000101, 0x01000101, 0x00111110, - 0x00000000, 0x00100010, 0x00100010, 0x00111110, // 00e6h - 0x01010010, 0x01010101, 0x01001101, 0x00100110, - 0x00000000, 0x00000100, 0x00011111, 0x00000010, // 00e7h - 0x00011111, 0x01000010, 0x01000010, 0x00111100, - 0x00000000, 0x00010010, 0x00111110, 0x01010011, // 00e8h - 0x01000010, 0x00100100, 0x00000100, 0x00000100, - 0x00000000, 0x00001000, 0x00111101, 0x01001011, // 00e9h - 0x01001001, 0x01001001, 0x00111000, 0x00000100, - 0x00000000, 0x00001000, 0x00111000, 0x00001000, // 00eah - 0x00001000, 0x00011110, 0x00101001, 0x00000110, - 0x00000000, 0x00011000, 0x00100000, 0x00000100, // 00ebh - 0x00111010, 0x01000110, 0x01000000, 0x00111000, - 0x00000000, 0x01000010, 0x01000010, 0x01000010, // 00ech - 0x01000110, 0x01000000, 0x00100000, 0x00011000, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00edh - 0x01000011, 0x01001100, 0x01010010, 0x00111100, - 0x00000000, 0x00100010, 0x00110011, 0x00101010, // 00eeh - 0x00100110, 0x00100010, 0x00100011, 0x01000010, - 0x00000000, 0x00111110, 0x00010000, 0x00111100, // 00efh - 0x01000011, 0x01000000, 0x01000010, 0x00111100, - 0x00000000, 0x00000010, 0x00111011, 0x01000110, // 00f0h - 0x01000010, 0x01000011, 0x01000010, 0x00110010, - 0x00000000, 0x00000100, 0x00000100, 0x00000010, // 00f1h - 0x01000110, 0x01000101, 0x01000101, 0x00111001, - 0x00000000, 0x01010100, 0x01111111, 0x00100100, // 00f2h - 0x00100100, 0x00100100, 0x00100010, 0x00010001, - 0x00000000, 0x01010100, 0x01011111, 0x00000100, // 00f3h - 0x00111111, 0x00001000, 0x00001000, 0x00001000, - 0x00000000, 0x01011110, 0x01100010, 0x00100010, // 00f4h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010010, 0x01111110, 0x00100010, // 00f5h - 0x00100001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01111111, 0x00100000, // 00f6h - 0x00100000, 0x00100000, 0x00100000, 0x00111111, - 0x00000000, 0x01010010, 0x01010010, 0x00111111, // 00f7h - 0x00010010, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x01010011, 0x01010100, 0x00100011, // 00f8h - 0x00100100, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01010000, 0x01011111, 0x00010000, // 00f9h - 0x00001000, 0x00001100, 0x00010010, 0x00100001, - 0x00000000, 0x01010010, 0x01111111, 0x00100010, // 00fah - 0x00010010, 0x00000010, 0x00000010, 0x00111100, - 0x00000000, 0x01010001, 0x01010010, 0x00100000, // 00fbh - 0x00100000, 0x00010000, 0x00001000, 0x00000110, - 0x00000000, 0x01011110, 0x01010010, 0x00100110, // 00fch - 0x00111001, 0x00100000, 0x00010000, 0x00001100, - 0x00000000, 0x01010000, 0x01011110, 0x00010000, // 00fdh - 0x01111111, 0x00010000, 0x00010000, 0x00001100, - 0x00000000, 0x00100101, 0x01001010, 0x00101010, // 00feh - 0x00100000, 0x00010000, 0x00001000, 0x00000111, - 0x00000000, 0x01011110, 0x01010000, 0x00111111, // 00ffh - 0x00001000, 0x00001000, 0x00001000, 0x00000110 -}; - -/*---------------------------------------------------------------------------* - Palette data - *---------------------------------------------------------------------------*/ -const u32 d_PaletteData[8 * 16] = -{ - 0x00000000, 0x00000000, 0x00000000, 0x00000000, // black - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x001f0000, 0x00000000, 0x00000000, 0x00000000, // red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03e00000, 0x00000000, 0x00000000, 0x00000000, // green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c000000, 0x00000000, 0x00000000, 0x00000000, // blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03ff0000, 0x00000000, 0x00000000, 0x00000000, // yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7c1f0000, 0x00000000, 0x00000000, 0x00000000, // purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fe00000, 0x00000000, 0x00000000, 0x00000000, // light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x00180000, 0x00000000, 0x00000000, 0x00000000, // dark red - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03000000, 0x00000000, 0x00000000, 0x00000000, // dark green - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60000000, 0x00000000, 0x00000000, 0x00000000, // dark blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x03180000, 0x00000000, 0x00000000, 0x00000000, // dark yellow - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x60180000, 0x00000000, 0x00000000, 0x00000000, // dark purple - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x63000000, 0x00000000, 0x00000000, 0x00000000, // dark light blue - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x56b50000, 0x00000000, 0x00000000, 0x00000000, // gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x2d6b0000, 0x00000000, 0x00000000, 0x00000000, // dark gray - 0x00000000, 0x00000000, 0x00000000, 0x00000000, - 0x7fff0000, 0x00000000, 0x00000000, 0x00000000, // white - 0x00000000, 0x00000000, 0x00000000, 0x00000000 -}; - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/ARM9.TWL/src/kami_pxi.c b/build/tests/TitleHashChecker/ARM9.TWL/src/kami_pxi.c deleted file mode 100644 index 101ac35f..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/src/kami_pxi.c +++ /dev/null @@ -1,684 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - NandInitializer - File: kami_pxi.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-07-25#$ - $Rev: 2003 $ - $Author: kamikawa $ - *---------------------------------------------------------------------------*/ - -#include -#include "kami_pxi.h" -#include "fifo.h" - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -// l߂ăRs[ -#define KAMI_PACK_U16(d, s) \ - ((d)[0] = (u8)((*((u16*)s) >> 0) & 0xFF), \ - (d)[1] = (u8)((*((u16*)s) >> 8) & 0xFF)) - -#define KAMI_PACK_U32(d, s) \ - ((d)[0] = (u8)((*((u32*)s) >> 0) & 0xFF), \ - (d)[1] = (u8)((*((u32*)s) >> 8) & 0xFF), \ - (d)[2] = (u8)((*((u32*)s) >> 16) & 0xFF), \ - (d)[3] = (u8)((*((u32*)s) >> 24) & 0xFF)) - - -/*---------------------------------------------------------------------------* - ^` - *---------------------------------------------------------------------------*/ -typedef struct KamiWork -{ - BOOL lock; - - KamiCommand command; - KAMIPxiResult result; - KAMICallback callback; - void* arg; - - u32 total; - u32 current; - u8* data; -} -KamiWork; - -/*---------------------------------------------------------------------------* - ÓIϐ` - *---------------------------------------------------------------------------*/ -static BOOL kamiInitialized; -static KamiWork kamiWork; - -/*---------------------------------------------------------------------------* - ֐` - *---------------------------------------------------------------------------*/ -static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data); -static void KamiSendPxiData(u8 *pData); -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err); -static void KamiDone(KAMIResult result); -static void KamiWaitBusy(void); - - -void KamiPxiInit( void ) -{ - kamiWork.lock = FALSE; - - PXI_Init(); - while ( !PXI_IsCallbackReady(PXI_FIFO_TAG_KAMITEST, PXI_PROC_ARM7 )) - { - } - PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - if ( 0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, KAMITEST_PXI_START_BIT | (KAMI_TEST_COMMAND << KAMITEST_PXI_COMMAND_SHIFT), 0)) - { - return; - } -} - - - -/////////////////////////////////////////////////////////////////// - -//typedef void (*KAMICallback)(KAMIResult result, void *arg); -/* -void CDC_ReadCallback(KAMIResult result, void* arg); -void CDC_ReadCallback(KAMIResult result, void* arg) -{ - -} -*/ - -/*---------------------------------------------------------------------------* - Name: tH[}bgs֐ - - Description: - - Arguments: FormatMode - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = callback; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode) == FALSE) - { - return KAMI_RESULT_SEND_ERROR; - } - return KAMI_RESULT_SUCCESS; -} - -KAMIResult ExeFormat(FormatMode format_mode) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: NANDANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - // f[^쐬 - KAMI_PACK_U32(&data[0], &block); - KAMI_PACK_U32(&data[4], &buffer); - KAMI_PACK_U32(&data[8], &count); - - if (KamiSendPxiCommand(KAMI_NAND_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiMcuWriteFirm - - Description: MCUt@[XV֐ - - Arguments: buffer : new mcu data buffer - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiMcuWriteFirm(void* buffer ) -{ - OSIntrMode enabled; - u8 data[4+2]; // 3̔{ - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - - // f[^쐬 - KAMI_PACK_U32(&data[0], &buffer); - - if (KamiSendPxiCommand(KAMI_MCU_WRITE_FIRM, 5, (u8)0)) - { - for (i = 0; i < 4; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: MCUANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - if (is_read) - { - kamiWork.data = (u8*)buffer; - } - else - { - kamiWork.data = 0; - } - - // f[^쐬 - KAMI_PACK_U32(&data[0], ®_no); - KAMI_PACK_U32(&data[4], &value); - - if (KamiSendPxiCommand(KAMI_MCU_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - - -/*---------------------------------------------------------------------------* - Name: ARM7ANZX֐ - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read) -{ - OSIntrMode enabled; - u8 data[12]; - int i; - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - if (is_read) - { - kamiWork.data = (u8*)buffer; - } - else - { - kamiWork.data = 0; - } - - // f[^쐬 - KAMI_PACK_U32(&data[0], &addr); - KAMI_PACK_U32(&data[4], &value); - - if (KamiSendPxiCommand(KAMI_ARM7_IO, 13, (u8)is_read)) - { - for (i = 0; i < 12; i+=3) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiCDC_GoDsMode - - Description: CODECDS[h֑Jڂ֐ - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiCDC_GoDsMode( void ) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_CDC_GO_DSMODE, 0, (u8)0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiClearNandErrorLog - - Description: NVRAMNANDG[NA܂B - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiClearNandErrorLog( void ) -{ - OSIntrMode enabled; - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(KAMI_CLEAR_NAND_ERRORLOG, 0, (u8)0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetCameraModuleTypesAsync - - Description: JW[^Cv擾܂i񓯊Łj - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg ) -{ - OSIntrMode enabled; - - if (pTypes == NULL) - { - return KAMI_RESULT_INVALID_PARAMETER; - } - - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - kamiWork.callback = callback; - kamiWork.arg = arg; - kamiWork.data = (u8*)pTypes; - (void)OS_RestoreInterrupts(enabled); - - if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0)) - { - return KAMI_RESULT_SUCCESS; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetCameraModuleTypes - - Description: JW[^Cv擾܂iŁj - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes ) -{ - OSIntrMode enabled; - - if (pTypes == NULL) - { - return KAMI_RESULT_INVALID_PARAMETER; - } - - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = (u8*)pTypes; - (void)OS_RestoreInterrupts(enabled); - - if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: kamiGetNandCID - - Description: NANDCID擾܂B - - Arguments: buffer : 16oCgobt@ - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult kamiGetNandCID(void* buffer ) -{ - OSIntrMode enabled; - u8 data[4+2]; // 3̔{ - - MI_CpuClear8( data, sizeof(data)); - - // bN - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = (u8*)buffer; - - if (KamiSendPxiCommand(KAMI_GET_NAND_CID, 0, 0)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - PXI֘A - *---------------------------------------------------------------------------*/ - -static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data) -{ - u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | - ((command << KAMITEST_PXI_COMMAND_SHIFT) & KAMITEST_PXI_COMMAND_MASK) | - ((size << KAMITEST_PXI_DATA_NUMS_SHIFT) & KAMITEST_PXI_DATA_NUMS_MASK) | - ((data << KAMITEST_PXI_1ST_DATA_SHIFT) & KAMITEST_PXI_1ST_DATA_MASK)); - if (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - return FALSE; - } - return TRUE; -} - -static void KamiSendPxiData(u8 *pData) -{ - u32 pxiData = (u32)((pData[0] << 16) | (pData[1] << 8) | pData[2]); - while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, pxiData, 0)) - { - } -} - -static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) -{ -#pragma unused( tag ) - if (err) - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - if (data & KAMITEST_PXI_START_BIT) // 擪f[^ - { - if (data & KAMITEST_PXI_RESULT_BIT) - { - kamiWork.total = (u8)((data & KAMITEST_PXI_DATA_NUMS_MASK) >> KAMITEST_PXI_DATA_NUMS_SHIFT); - kamiWork.current = 0; - kamiWork.command = (KamiCommand)((data & KAMITEST_PXI_COMMAND_MASK) >> KAMITEST_PXI_COMMAND_SHIFT); - kamiWork.result = (KAMIPxiResult)((data & KAMITEST_PXI_1ST_DATA_MASK) >> KAMITEST_PXI_1ST_DATA_SHIFT); - } - else // m̃f[^ - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - } - else // 㑱f[^ - { - if (kamiWork.data == NULL) - { - KamiDone(KAMI_RESULT_FATAL_ERROR); - return; - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0xFF0000) >> 16); - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0x00FF00) >> 8); - } - if (kamiWork.current < kamiWork.total-1) - { - kamiWork.data[kamiWork.current++] = (u8)((data & 0x0000FF) >> 0); - } - } - if (kamiWork.current == kamiWork.total-1) - { - KAMIResult result; - switch (kamiWork.result) - { - case KAMI_PXI_RESULT_SUCCESS: // alias KAMI_PXI_RESULT_SUCCESS_TRUE - result = KAMI_RESULT_SUCCESS; // alias KAMI_RESULT_SUCCESS_TRUE - break; - case KAMI_PXI_RESULT_SUCCESS_FALSE: - result = KAMI_RESULT_SUCCESS_FALSE; - break; - case KAMI_PXI_RESULT_INVALID_COMMAND: - result = KAMI_RESULT_INVALID_COMMAND; - break; - case KAMI_PXI_RESULT_INVALID_PARAMETER: - result = KAMI_RESULT_INVALID_PARAMETER; - break; - case KAMI_PXI_RESULT_ILLEGAL_STATUS: - result = KAMI_RESULT_ILLEGAL_STATUS; - break; - case KAMI_PXI_RESULT_BUSY: - result = KAMI_RESULT_BUSY; - break; - default: - result = KAMI_RESULT_FATAL_ERROR; - } - KamiDone(result); - return; - } -} - -extern void PXIi_HandlerRecvFifoNotEmpty(void); -static void KamiWaitBusy(void) -{ - volatile BOOL *p = &kamiWork.lock; - - while (*p) - { - if (OS_GetCpsrIrq() == OS_INTRMODE_IRQ_DISABLE) - { - PXIi_HandlerRecvFifoNotEmpty(); - } - } -} - -static void KamiDone(KAMIResult result) -{ - KAMICallback callback = kamiWork.callback; - void* arg = kamiWork.arg; - kamiWork.callback = NULL; - kamiWork.arg = NULL; - if (kamiWork.lock) - { - kamiWork.lock = FALSE; - } - if (callback) - { - callback(result, arg); - } -} diff --git a/build/tests/TitleHashChecker/ARM9.TWL/src/main.c b/build/tests/TitleHashChecker/ARM9.TWL/src/main.c deleted file mode 100644 index 127c5f99..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/src/main.c +++ /dev/null @@ -1,1323 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - tests - appjumpTest - Nand-2 - File: main.c - - Copyright 2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-03#$ - $Rev: 8251 $ - $Author: nishimoto_takashi $ - *---------------------------------------------------------------------------*/ -#include -#include -#include -#include -#include -#include -#include -#include - -#include "common.h" -#include "screen.h" -#include "kami_pxi.h" - -#define TITLE_SHOW_BASE_Y 5 -#define TITLE_MAX_SHOW 0x10 -#define TITLE_NUM_PAGE 300 - -#define ETICKET_NUM_MAX 10 - -#define ES_ERR_OK 0 - -#define CRCPOLY 0x1021 - -#define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) - -#define DMA_NO_FS 1 -#define CHECK_APP_NUM 10 -#define REGION_NUM 6 - -#define NAND_FIRM_INFO_OFS 1 -#define SHARED_FONT_INFO_OFS 2 - -#define NAND_FIRM_MAGIC_CODE 0x4649524D -#define SHARED_FONT_MAGIC_CODE 0x464f4e54 - -#define NAND_BLOCK_BYTE 0x200 -#define NAND_FIRM_START_OFFSET 0x200 -#define NAND_FIRM_START_OFFSET_IN_FILE 0x200 - -#define TITLE_ID_DATA_ONLY_MASK 0x00000008 -#define TITLE_ID_GAMECODE_MASK 0xFFFFFF00 - -#define OUTPUT_SORT_TITLE_NUM 15 - -#define OUTPUT_NAND_FIRM_IDX 10 -#define OUTPUT_SHARED_FONT_IDX 12 - -// fobOp -//#define HASH_CRC_CLCU_SKIP - -/*---------------------------------------------------------------------------* - ϐ ` - *---------------------------------------------------------------------------*/ -typedef void* (*NAMUTAlloc)(u32 size); -typedef void (*NAMUTFree)(void* ptr); - -static NAMUTAlloc spAllocFunc; -static NAMUTFree spFreeFunc; - -// L[ -static KeyInfo gKey; - -// CXg[Ă NAND Av̐ -static s32 gNandAppNum; - -// J[\ʒu -static s32 gCurPos = 0; - -// I𒆂̗vf -static s32 gCurrentElem; - -// y[W -static u32 gCurrentPage; -static u32 gMaxPage; - -// Error -static BOOL gErrorFlg; - -typedef struct DataStruct -{ - NAMTitleId id; - - u8 ver_major; - u8 ver_minor; - - u8 DisableDebugFlg; - - u8 Sha1_digest[SVC_SHA1_DIGEST_SIZE]; - u16 crc16; - - BOOL sort; -} DataStruct; - -static u8 sFontData_Sha1_digest[SVC_SHA1_DIGEST_SIZE]; -static u8 sNandFirm_Sha1_digest[SVC_SHA1_DIGEST_SIZE]; - -static DataStruct gDataList[TITLE_NUM_PAGE]; - -static u16 crc_table[0x100]; - -static const u32 TitleIDTable[OUTPUT_SORT_TITLE_NUM] = { - 0x484e4100, // 0.HNA* ` - 0x484e4200, // 1.HNB* {̐ݒ - 0x484e4300, // 2.HNC* t@[ - 0x484e4400, // 3.HND* DLvC - 0x484e4500, // 4.HNE* sNg`bg - 0x484e4600, // 5.HNF* Vbv - 0x484e4800, // 6.HNH* zCgXg - 0x484e4900, // 7.HNI* J - 0x484e4a00, // 8.HNJ* Nintendo][ - 0x484e4b00, // 9.HNK* TEh - 0x484e4c00, //10.HNL* o[Wf[^ - NAND_FIRM_MAGIC_CODE, //11.---- NANDt@[ - 0x344e4600, //12.4NF* Nand Filer - SHARED_FONT_MAGIC_CODE, //13.---- tHg - 0x34544e00 //14.4TN* TwlNmenu -}; -/*---------------------------------------------------------------------------* - Prototype - *---------------------------------------------------------------------------*/ -static void DrawScene(DataStruct* list); -BOOL GetDataStruct(DataStruct* list); - -static void ConvertTitleIdLo(u8* code, u8* titleid_lo); -static void ConvertGameCode(u8* code, u32 game_code); -static void ConvertInitialCode(u8* code, u32 titleid_lo); - -static void* AllocForNAM(u32 size); -static void FreeForNAM(void* ptr); - -static BOOL ProcessTitleHashCheck(void); -static BOOL GetAppPath(DataStruct* list, char* path_buf); -BOOL CulcuNandAppHash(DataStruct* list, char* full_path); -BOOL CulcuFontDataHash(DataStruct* list); -BOOL CulcuNandFirmHash(DataStruct* list); - -u16 newGetCRC(u16 start, u16 *datap, u32 size); -static void inittable(unsigned short *table); - -void* MyNAMUT_Alloc(u32 size); -void MyNAMUT_Free(void* buffer); -static BOOL ReadTWLSettings( void ); - -static void SortList( DataStruct* list ); - -static BOOL OutputHashDataForSD( DataStruct* list ); -static BOOL OutputData( FSFile* file, DataStruct* data ); - -/*---------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------* - Name: TwlMain - - Description: C֐ - *---------------------------------------------------------------------------*/ -void TwlMain(void) -{ - u32 count = 0; - BOOL errorFlg = FALSE; - - InitCommon(); - KamiPxiInit(); - - FS_Init(FS_DMA_NOT_USE); - - InitScreen(); - - GX_DispOn(); - GXS_DispOn(); - - RTC_Init(); - - spAllocFunc = AllocForNAM; - spFreeFunc = FreeForNAM; - - gNandAppNum = 0; - gErrorFlg = FALSE; - - FS_Init( FS_DMA_NOT_USE ); - - NAM_Init(AllocForNAM, FreeForNAM); - - MI_CpuClear8( gDataList, sizeof(gDataList)); - - ClearScreen(); - - ReadTWLSettings(); - - // hash Check - ProcessTitleHashCheck(); - - SortList( gDataList ); - -#ifndef HASH_CRC_CLCU_SKIP - OutputHashDataForSD( gDataList ); -#endif - - while(TRUE) - { - // L[͏擾 - ReadKey(&gKey); - - if (gKey.trg & PAD_KEY_DOWN) - { - gCurPos++; - - if ( gCurrentPage != gMaxPage ) - { - if ( gCurPos >= TITLE_MAX_SHOW ) - { - gCurrentPage++; - gCurPos = 0; - } - } - else - { - if( (gNandAppNum & 0x0f) == 0 ) - { - if( gCurPos >= TITLE_MAX_SHOW ) - { - gCurrentPage = 0; - gCurPos = 0; - } - } - else if ( gCurPos >= (gNandAppNum & 0x0f) ) // oO - { - gCurrentPage = 0; - gCurPos = 0; - } - } - - OS_TPrintf(" gCurPos : %x, gCurrentPage : %x, gNandAppNum : %x\n", gCurPos, gCurrentPage, gNandAppNum); - } - if (gKey.trg & PAD_KEY_UP) - { - if( gCurPos == 0) - { - if ( gCurrentPage == 0 ) - { - gCurrentPage = gMaxPage; - gCurPos = ((gNandAppNum & 0x0f) == 0) ? TITLE_MAX_SHOW - 1 : (gNandAppNum & 0x0f) - 1; - } - else - { - gCurrentPage--; - gCurPos = TITLE_MAX_SHOW - 1; - } - } - else - { - gCurPos--; - } - - OS_TPrintf(" gCurPos : %x, gCurrentPage : %x, gNandAppNum : %x\n", gCurPos, gCurrentPage, gNandAppNum); - } - - if (gKey.trg & PAD_KEY_LEFT) - { - if(gCurrentPage == 0) - { - gCurrentPage = gMaxPage; - } - else - { - gCurrentPage--; - } - - gCurPos = 0; - - OS_TPrintf(" gCurPos : %x, gCurrentPage : %x, gNandAppNum : %x\n", gCurPos, gCurrentPage, gNandAppNum); - } - if (gKey.trg & PAD_KEY_RIGHT) - { - if(gCurrentPage == gMaxPage) - { - gCurrentPage = 0; - } - else - { - gCurrentPage++; - } - - gCurPos = 0; - - OS_TPrintf(" gCurPos : %x, gCurrentPage : %x, gNandAppNum : %x\n", gCurPos, gCurrentPage, gNandAppNum); - } - - // I𒆂̗vf - gCurrentElem = (s32)((u32)(gCurrentPage << 4) + (u32)gCurPos); - - // ʕ` - DrawScene(gDataList); - - // uuN҂ - OS_WaitVBlankIntr(); - - // ʃNA - ClearScreen(); - } - - // uuN҂ ŌɉʂXVĂI - OS_WaitVBlankIntr(); - OS_Terminate(); -} - - -/*---------------------------------------------------------------------------* - Name: DrawScene - - Description: ʕ`֐ - - F - 0xf0, // 0xf1, // 0xf2, // - 0xf3, // 0xf4, // 0xf5, // sN - 0xf6, // F 0xf7, // 񂾐 0xf8, // 񂾗 - 0xf9, // 񂾐 0xfa, // 񂾉F 0xfb, // - 0xfc, // 0xfd, // DF 0xfe, // ZDF - *---------------------------------------------------------------------------*/ -#define OK_COLOR ((u8)0xf2) -#define NG_COLOR ((u8)0xf1) - -#define GAME_CODE_BASE_X 1 - -static void DrawScene(DataStruct* list) -{ - s32 i; - u8 init_code[5]; - u8 color; - u32 start; - u8* digest; - - DataStruct* p = list; - - if( gErrorFlg ) - { - PutMainScreen( 10, 12, 0xf1, "--- Error ---"); - PutSubScreen( 10, 12, 0xf1, "--- Error ---"); - - return; - } - - // ꗗ\ - PutMainScreen( 0, 0, 0xf4, "------ Title Hash Checker ------"); - PutMainScreen( 1, 1, 0xff, "", (gCurrentPage+1), (gMaxPage+1)); - PutMainScreen( 1, 3, 0xfa, "GameCode Version DebugFlg"); - PutMainScreen( 0, 4, 0xff, "--------------------------------"); - - // J[\\ - if( gCurPos <= TITLE_MAX_SHOW ){ - PutMainScreen( 0, gCurPos+TITLE_SHOW_BASE_Y , 0xf1, ">"); - } - - start = (u32)(gCurrentPage << 4); - p += start; - - for ( i=(s32)start; i < (start + TITLE_MAX_SHOW); i++, p++) - { - s32 tmp_i; - - if ( i >= gNandAppNum ) - { - break; - } - - tmp_i = (s32)(i & 0xf); - - if( list[i].id == NAND_FIRM_MAGIC_CODE ) - { - PutMainScreen( GAME_CODE_BASE_X, TITLE_SHOW_BASE_Y+tmp_i, OK_COLOR, "%2d:Nand Firm", (tmp_i+1)); - } - else if( list[i].id == SHARED_FONT_MAGIC_CODE ) - { - PutMainScreen( GAME_CODE_BASE_X, TITLE_SHOW_BASE_Y+tmp_i, OK_COLOR, "%2d:Shared Font", (tmp_i+1)); - } - else - { - ConvertInitialCode(init_code, NAM_GetTitleIdLo(p->id)); - - color = (list[i].DisableDebugFlg == '1' || list[i].DisableDebugFlg == '-') ? OK_COLOR : NG_COLOR; - - // Q[R[h\ - PutMainScreen( GAME_CODE_BASE_X, TITLE_SHOW_BASE_Y+tmp_i, color, "%2d:%s %d.%d (%c)", - (tmp_i+1), init_code, list[i].ver_major, list[i].ver_minor, list[i].DisableDebugFlg); - } - } - - // ڍו\ - ConvertInitialCode(init_code, NAM_GetTitleIdLo(list[gCurrentElem].id)); - - if( list[gCurrentElem].id == SHARED_FONT_MAGIC_CODE ) - { - PutSubScreen(2, 1, 0xf6, "Shared Font Hash Data"); - } - else if( list[gCurrentElem].id == NAND_FIRM_MAGIC_CODE ) - { - PutSubScreen(2, 1, 0xf6, "Nand Firm Hash Data"); - } - else - { - PutSubScreen(2, 1, 0xf4, "Selected Title : [ %s ]", init_code); - PutSubScreen(2, 4, 0xff, "- CRC16 Data -"); - - PutSubScreen(2, 6, 0xf4, "0x%04x", list[gCurrentElem].crc16); - } - - digest = (u8 *)list[gCurrentElem].Sha1_digest; - - PutSubScreen(2, 10, 0xff, "- SHA1 Digest Data -"); - - for( i=0; i<10; i++ ) - { - PutSubScreen(2 + (i*3), 12, 0xf4, "%02x ", digest[i]); - PutSubScreen(2 + (i*3), 14, 0xf4, "%02x ", digest[i+10]); - } - - PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y, 0xff, "--------------------------------"); - PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y + 1, 0xff, "LR Button : Mode Change"); - PutMainScreen( 0, TITLE_MAX_SHOW + TITLE_SHOW_BASE_Y + 2, 0xff, "Up Down Key : Next Application"); -} - - -/*---------------------------------------------------------------------------* - Name: ProcessTitleHashCheck - - Description: - *---------------------------------------------------------------------------*/ -BOOL ProcessTitleHashCheck( void ) -{ - u32 i; - s32 result = TRUE; - char full_path[FS_ENTRY_LONGNAME_MAX+6]; - - DataStruct* list; - - - // NAND ɃC|[gĂNAND Av̐擾 - if ( (gNandAppNum = NAM_GetNumTitles()) < 0) - { - OS_Panic("NAM_GetNumTitles() failed."); - } - - // ̎擾 - if ( !GetDataStruct(gDataList) ) - { - OS_Panic("GetDataStruct() failed."); - } - - list = gDataList; - -#ifndef HASH_CRC_CLCU_SKIP - // srlHashlcrc16߂ - for ( i=0; i < gNandAppNum; i++, list++ ) - { - // obt@̃NA - MI_CpuClear8(full_path, sizeof(full_path)); - - // t@CpX̎擾 - if ( !GetAppPath(list, full_path) ) - { - gErrorFlg = TRUE; - } - - // Hash, CRC16̌vZ - if ( !CulcuNandAppHash(list, full_path) ) - { - gErrorFlg = TRUE; - } - - PutMainScreen( 7, 10, 0xf6, "--- Now Loading ---"); - PutMainScreen( 7, 14, 0xf6, " %2d / %2d compleate", i+1, gNandAppNum); - - PutSubScreen( 7, 10, 0xf6, "--- Now Loading ---"); - PutSubScreen( 7, 14, 0xf6, " %2d / %2d compleate", i+1, gNandAppNum); - } -#endif - - // SharedtHgNandt@[̒lp2 - gNandAppNum += 2; - - // \y[W߂ - gMaxPage = (u32)((gNandAppNum & 0xf0) >> 4); - - // SharedtHgSha1l߂ - CulcuFontDataHash(gDataList); - - // NandFirmSha1l߂ - CulcuNandFirmHash(gDataList); - - OS_PutString("ProcessTitleHashCheck Finish!!\n"); - - return result; -} - - -/*---------------------------------------------------------------------------* - Name: GetDataStruct - - Description: TitleIDXg擾֐ - NAM_GetTitleList NAM_GetInstalledTitleList g - *---------------------------------------------------------------------------*/ -BOOL GetDataStruct(DataStruct* list) -{ - // ^CgIDXgobt@ - NAMTitleId titleIdList[TITLE_NUM_PAGE]; - s32 i; - - // --- GetTitleList - if ( NAM_GetTitleList(titleIdList, TITLE_NUM_PAGE) != NAM_OK ) - { - OS_PutString("NAM_GetTitleList failed."); - return FALSE; - } - - // f[^Xg̍쐬 - for ( i=0; i= gNandAppNum ) - { - break; - } - - OS_TPrintf("id : 0x%08x\n", titleIdList[i]); - list->id = titleIdList[i]; - - // tado[W̎擾 - if( NAM_ReadTitleInfo( &info, list->id ) != NAM_OK ) - { - OS_TPrintf("[0x%08x] ReadTitleInfo failed...\n", list->id); - }else { - list->ver_major = (u8)(info.version >> 8);; - list->ver_minor = (u8)(info.version & 0xff); - } - } - - MI_CpuClear8(titleIdList, sizeof(titleIdList)); - - OS_PutString("\n\n"); - - return TRUE; -} - - -/*---------------------------------------------------------------------------* - Name: GetAppPath - - Description: - - Arguments: - - - Returns: - - *---------------------------------------------------------------------------*/ -static BOOL GetAppPath(DataStruct* list, char* path_buf) -{ - FSFile dir; - BOOL ret = TRUE; - - // fBNgpX̍쐬 - STD_TSNPrintf( path_buf, FS_ENTRY_LONGNAME_MAX, - "nand:/title/%08x/%08x/content/", (u32)( list->id >> 32 ), list->id ); - - // .appt@C‚ - if ( !FS_OpenDirectory(&dir, path_buf, FS_FILEMODE_R | FS_FILEMODE_W) ) - { - ret = FALSE; - OS_PutString("Error FS_OpenDirectory\n\n"); - } - else - { - FSDirectoryEntryInfo info[1]; - - // .app Tăt@CۑĂ - while (FS_ReadDirectory(&dir, info)) - { - if ((info->attributes & (FS_ATTRIBUTE_DOS_DIRECTORY | FS_ATTRIBUTE_IS_DIRECTORY)) != 0) - { - } - else - { - char* pExtension; - OS_Printf(" (%d BYTEs)\n", info->filesize); - - // gq̃`FbN - pExtension = STD_SearchCharReverse( info->longname, '.'); - if (pExtension) - { - if (!STD_CompareString( pExtension, ".app")) - { - STD_ConcatenateString( path_buf, info->longname ); - - OS_TPrintf("OK! File Path : %s\n", path_buf); - - break; - } - } - } - } - - (void)FS_CloseDirectory(&dir); - } - - return ret; -} - - -/*---------------------------------------------------------------------------* - Name: OutputHashDataForSD - - Description: - - Arguments: - - Returns: - - *---------------------------------------------------------------------------*/ -static BOOL OutputHashDataForSD( DataStruct* list ) -{ - BOOL retval = TRUE; - FSFile file; - u32 i; - - char path_buf[FS_ENTRY_LONGNAME_MAX+6]; - RTCDate rtc; - DataStruct* p; - - - // t@C - FS_InitFile(&file); - - // N̎擾 - RTC_GetDate( &rtc ); - - // fBNgpX̍쐬 - STD_TSNPrintf( path_buf, FS_ENTRY_LONGNAME_MAX, - "sdmc:/TitleHashChecker_20%02d%02d%02d.txt", rtc.year, rtc.month, rtc.day ); - - // t@C̍쐬 - retval = FS_CreateFile( path_buf, FS_PERMIT_R | FS_PERMIT_W ); - - if(!retval) - { - OS_PutString("Fail: CreateFile\n"); - } - - // t@CI[v - retval = FS_OpenFileEx( &file, path_buf, FS_PERMIT_W); - - if(!retval) - { - OS_PutString("Fail: OpenFile\n"); - } - - p = list; - - // t@C֏o - for(i=0; iSha1_digest; - - if( data->id == NAND_FIRM_MAGIC_CODE ) - { - retval = FS_WriteFile( file, "NandFirm\t", 9); - } - else if( data->id == SHARED_FONT_MAGIC_CODE ) - { - retval = FS_WriteFile( file, "SharedFont\t", 11); - } - else - { - ConvertInitialCode(init_code, NAM_GetTitleIdLo(data->id)); - init_code[4] = '\t'; - - retval = FS_WriteFile( file, init_code, 5); - } - - STD_TSPrintf( hash, "%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x\n", - p[0] ,p[1] ,p[2] ,p[3] ,p[4] ,p[5] ,p[6] ,p[7] ,p[8] ,p[9], p[10],p[11],p[12],p[13],p[14],p[15],p[16],p[17],p[18],p[19]); - - OS_TPrintf("hash : %s", hash); - - retval = FS_WriteFile( file, hash , SVC_SHA1_DIGEST_SIZE*2+1); - - if(!retval) - { - OS_PutString("Fail: WriteFile\n"); - } - - return retval; -} - - -/*---------------------------------------------------------------------------* - Name: CulcuNandAppHash - - Description: - - *---------------------------------------------------------------------------*/ -#define READ_SIZE 0x1000 // MasterEditorłCRCvZɂ킹邽߂̒lg - -BOOL CulcuNandAppHash(DataStruct* list, char* full_path) -{ - FSFile file; - BOOL open_is_ok; - BOOL seek_is_ok; - BOOL read_is_ok; - u32 file_size; - u32 read_size = 0; - u32 data_size = 0; - u32 i; - u16 crc = 0; - u8* pTempBuf; - SVCSHA1Context hash; - - FSResult result; - - // CRC16vZpe[ȕ - MI_CpuClear8(crc_table, sizeof(crc_table)); - inittable(crc_table); - - // nbV - SVC_SHA1Init( &hash ); - - // FS - FS_InitFile(&file); - - // t@CI[v - open_is_ok = FS_OpenFile(&file, full_path); - if (!open_is_ok) - { - OS_Warning("Failure! FS_OpenFile"); - return FALSE; - } - - // t@C擾 - file_size = FS_GetFileLength(&file); - - // t@C傫̂邩א؂œǂ - for(i=1;;i++){ - // obt@m - pTempBuf = spAllocFunc( READ_SIZE ); - if (pTempBuf == NULL) - { - FS_CloseFile(&file); - OS_Warning("Failure! Alloc Buffer"); - return FALSE; - } - - // ǂݍރTCY߂ - if( (READ_SIZE * i) > file_size ) - { - data_size = file_size % READ_SIZE; - } - else - { - data_size = READ_SIZE; - } - - // t@C[h - read_is_ok = FS_ReadFile( &file, pTempBuf, READ_SIZE ); // {Ȃ΂ data_sizeǂ߂΂悢A - // MasterEditorCRCvZɂ킹邽߁AREAD_SIZEǂݍ - result = FS_GetResultCode(&file); - if (!read_is_ok) - { - FS_CloseFile(&file); - spFreeFunc(pTempBuf); - OS_Warning("Failure! Read File (Error Code : %d)", result); - return FALSE; - } - - // ‚łDisableDebugFlg̏ԂĂ - if(i == 1) - { - if( (u32)( list->id >> 32 ) & TITLE_ID_DATA_ONLY_MASK ) - { - list->DisableDebugFlg = '-'; - } - else - { - if(((ROM_Header *)pTempBuf)->s.disable_debug) - { - list->DisableDebugFlg = '1'; - } - else - { - list->DisableDebugFlg = '0'; - } - } - } - - // ǂ񂾃TCYXV - read_size += data_size; - - // CRC16vZ - crc = newGetCRC(crc, (u16 *)pTempBuf, READ_SIZE); // {Ȃ΂ data_sizěvZ΂悢A - // MasterEditorCRCvZɂ킹邽߁AREAD_SIZEvZ - // Hashl UpDate - SVC_SHA1Update( &hash, pTempBuf, data_size ); - - // t@CSǂ߂whileʂ - if( read_size >= file_size ) - { - break; - } - else - { - // t@CV[N - seek_is_ok = FS_SeekFile( &file, (s32)(READ_SIZE * i), FS_SEEK_SET ); - result = FS_GetResultCode(&file); - if(!seek_is_ok) - { - FS_CloseFile(&file); - spFreeFunc(pTempBuf); - OS_Warning("Failure! Seek File [read size : %d bytes] (Error Code : %d)", read_size, result); - return FALSE; - } - } - spFreeFunc( pTempBuf ); - } - - if(file_size != read_size) - { - OS_PutString(" Read Size Error!!!\n"); - } - - OS_PutString("\n\n"); - - // HashlZo - SVC_SHA1GetHash( &hash, list->Sha1_digest ); - - list->crc16 = crc; - - // t@CN[Y - FS_CloseFile(&file); - - return TRUE; -} - - -/*---------------------------------------------------------------------------* - Name: CulcuFontDataHash - - Description: - - Arguments: - - Returns: - - *---------------------------------------------------------------------------*/ -BOOL CulcuFontDataHash(DataStruct* list) -{ - FSFile file; - BOOL open_is_ok; - BOOL read_is_ok; - u32 file_size; - u8* pTempBuf; - SVCSHA1Context hash; - - FSResult result; - - // Pc2–ڂSharedFontp̃f[^ɂ - DataStruct *data = &list[gNandAppNum - SHARED_FONT_INFO_OFS]; - - // nbV - SVC_SHA1Init( &hash ); - - // FS - FS_InitFile(&file); - - // t@CI[v - open_is_ok = FS_OpenFile(&file, "nand:/sys/TWLFontTable.dat"); - if (!open_is_ok) - { - OS_Warning("Failure! FS_OpenFile"); - return FALSE; - } - - // t@C擾 - file_size = FS_GetFileLength(&file); - - // obt@m - pTempBuf = spAllocFunc( file_size ); - if (pTempBuf == NULL) - { - FS_CloseFile(&file); - OS_Warning("Failure! Alloc Buffer"); - return FALSE; - } - - // t@C[h - read_is_ok = FS_ReadFile( &file, pTempBuf, (s32)file_size ); - result = FS_GetResultCode(&file); - if (!read_is_ok) - { - FS_CloseFile(&file); - spFreeFunc(pTempBuf); - OS_Warning("Failure! Read File (Error Code : %d)", result); - return FALSE; - } - - // Hashl UpDate - SVC_CalcSHA1( data->Sha1_digest, pTempBuf, file_size ); - - data->id = SHARED_FONT_MAGIC_CODE; - - // obt@̊J - spFreeFunc( pTempBuf ); - - // t@CN[Y - FS_CloseFile(&file); - - return TRUE; -} - - -/*---------------------------------------------------------------------------* - Name: CulcuNandFirmHash - - Description: - - Arguments: - - Returns: - - *---------------------------------------------------------------------------*/ -#define NAND_BLOCK_BYTE 0x200 -#define NAND_HEADER_SIZE 0x800 -#define NAND_FIRM_REV_SIZE 0xa -#define NAND_FIRM_START_OFFSET 0x200 -#define TEMP_BUFFER_SIZE 0x100000 -#define READ_NAND_FIRM_SIZE (TEMP_BUFFER_SIZE - NAND_FIRM_START_OFFSET) - -BOOL CulcuNandFirmHash(DataStruct* list) -{ - u8* pTempBuf; - u32 read_block; - u32 culcu_size; - u32 alloc_size; - BOOL ret = TRUE; - - u8* p; - - // Pc1–ڂSharedFontp̃f[^ɂ - DataStruct *data = &list[gNandAppNum - NAND_FIRM_INFO_OFS]; - - // obt@m - // ݂ubNP(512byte)ł邱Ƃl512ACgm - alloc_size = MATH_ROUNDUP(TEMP_BUFFER_SIZE, 512); - pTempBuf = spAllocFunc( alloc_size ); //pTempBuf = spAllocFunc( READ_NAND_FIRM_SIZE ); - if (pTempBuf == NULL) - { - OS_Warning("Failure! Alloc Buffer"); - return FALSE; - } - MI_CpuClear8( pTempBuf, TEMP_BUFFER_SIZE ); //MI_CpuClear8( pTempBuf, READ_NAND_FIRM_SIZE ); - - // ------ Nvram烊[h ------ - DC_FlushRange(pTempBuf, sizeof(NORHeaderDS)); - - if (NVRAMi_Read(0, sizeof(NORHeaderDS), pTempBuf) != NVRAM_RESULT_SUCCESS) - { - OS_Warning("Fail NVRAMi_Read()!"); - } - DC_FlushRange(pTempBuf, sizeof(NORHeaderDS)); - - - // ------ NAND烊[h ------ - DC_FlushRange( pTempBuf, TEMP_BUFFER_SIZE ); - - read_block = READ_NAND_FIRM_SIZE / NAND_BLOCK_BYTE + (READ_NAND_FIRM_SIZE % NAND_BLOCK_BYTE != 0); - if (kamiNandRead(NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf+NAND_FIRM_START_OFFSET, read_block ) == KAMI_RESULT_SEND_ERROR) - { - OS_Warning("Failure! Read NandFirm"); - } - DC_FlushRange( pTempBuf, TEMP_BUFFER_SIZE ); - - - // ------ HasȟvZ ------ - // HashvZTCY߂ - culcu_size = MATH_ROUNDUP((*(u32 *)(pTempBuf+0x22c)) + (*(u32 *)(pTempBuf+0x23c)) , 256) + NAND_HEADER_SIZE + NAND_FIRM_REV_SIZE; - OS_TPrintf("NandFirm main Size : 0x%08x\n", (*(u32 *)(pTempBuf+0x22c))); - OS_TPrintf("NandFirm sub Size : 0x%08x\n", (*(u32 *)(pTempBuf+0x23c))); - OS_TPrintf("NandFirm Size : 0x%08x\n", culcu_size); - - p = (pTempBuf + (culcu_size - NAND_FIRM_REV_SIZE)); - - OS_TPrintf("Nand Firm rev : %c%c%c%c %c%c%c%c\n\n" - ,*p,*(p+1),*(p+2),*(p+3),*(p+5),*(p+6),*(p+7),*(p+8)); - - // Hashl UpDate - if( culcu_size <= READ_NAND_FIRM_SIZE ) - { - SVC_CalcSHA1( data->Sha1_digest, pTempBuf, culcu_size ); - data->id = NAND_FIRM_MAGIC_CODE; - } - else - { - OS_TPrintf("Culcu Size is illegal...\n"); - ret = FALSE; - } - // - spFreeFunc(pTempBuf); - - return ret; -} - - -/*---------------------------------------------------------------------------* - Name: SortList - - Description: - *---------------------------------------------------------------------------*/ -static void SortList( DataStruct* list ) -{ - u32 i,j,sort_count,count=0; - - u8* tmpList; - DataStruct *p; - DataStruct buf; - - tmpList = spAllocFunc( sizeof(DataStruct) * TITLE_NUM_PAGE ); - if ( tmpList == NULL ) - { - OS_Warning("Failure! Alloc Buffer"); - return ; - } - - for(i=0; iid) & TITLE_ID_GAMECODE_MASK)) - { - MI_CpuCopy8( p, ((DataStruct *)tmpList)+count, sizeof(DataStruct) ); - p->sort = TRUE; - count++; - break; - } - } - } - - sort_count = count; - - // ct@C̏o - p = list; - for(i=0; isort) - { - MI_CpuCopy8(p, ((DataStruct *)tmpList)+count, sizeof(DataStruct)); - count++; - } - } - - // ~ɕёւ - p = (DataStruct *)tmpList; - - for(i=sort_count; ii; j--) - { - if( (u32)p[j].id < (u32)p[j-1].id ) - { - MI_CpuCopy8( &p[j], &buf, sizeof(DataStruct) ); - MI_CpuCopy8( &p[j-1], &p[j], sizeof(DataStruct) ); - MI_CpuCopy8( &buf, &p[j-1], sizeof(DataStruct) ); - } - } - } - - // \[gς񂾃f[^𔽉f - MI_CpuCopy8(tmpList, list, sizeof(DataStruct) * TITLE_NUM_PAGE); -} - - -/*---------------------------------------------------------------------------* - Name: newGetCRC - - Description: CRCvZ - iZpCRCe[ugCRCvZ֐ - - oCgƊoCgւĂvZB - *---------------------------------------------------------------------------*/ -u16 newGetCRC - ( - u16 start, // CRCliݐϒlj - u16 *datap, // f[^̐擪w|C^A - u32 size // oCgPʂł̃f[^TCY - ) -{ - u32 i; - u16 crc; - u8* byte; - - crc = start; - byte = (u8 *)datap; - - for (i=0; i> 8) ^ byte1]); - crc = (u16)((crc << 8) ^ crc_table[(crc >> 8) ^ byte0]); - } - - return crc; -} - - -/*---------------------------------------------------------------------------- - ֐ - inittable - initialize table - - ` - static void inittable(unsigned short *table); - - - CRCZo邽߂̎Qƃe[u쐬B -----------------------------------------------------------------------------*/ -static void inittable(unsigned short *table) -{ - unsigned short i, j, r; - - for(i = 0; i < 0x100; i++) { - r = (unsigned short)(i << 8); - for(j = 0; j < 8; j++) { - if(r & 0x8000U) - r = (unsigned short)((r << 1) ^ CRCPOLY); - else - r <<= 1; - } - *table++ = r; - } -} - - -/*---------------------------------------------------------------------------* - UTIL ֐ - *---------------------------------------------------------------------------*/ -static void ConvertTitleIdLo(u8* code, u8* titleid_lo) -{ - u8 tmp[5]; - s32 i; - - for ( i=3; i>=0; i--, titleid_lo++ ) - { - tmp[i] = *titleid_lo; - *code = tmp[i]; - } - - // NULL I[ - *code = 0x00; -} - -static void ConvertGameCode(u8* code, u32 game_code) -{ - u8 tmp[5]; - s32 i; - - ConvertInitialCode(tmp, game_code); - - for ( i=3; i>=0; i--, code++) - { - *code = tmp[i]; - } - - // NULL I[ - *code = 0x00; -} - -static void ConvertInitialCode(u8* code, u32 titleid_lo) -{ - s32 i; - - for ( i=0; i<4; i++, code++) - { - *code = (u8)(titleid_lo >> (8 * (3-i))); - } - - // NULLI[ - *code = 0x00; -} - - -void* MyNAMUT_Alloc(u32 size) -{ - const u32 allocSize = MATH_ROUNDUP32(size); - SDK_ASSERTMSG( spAllocFunc != NULL, "NAMUT_Init should be called previously.\n"); - return spAllocFunc(allocSize); -} - - -static void* AllocForNAM(u32 size) -{ - void* ptr; - ptr = OS_AllocFromMain(size); - - if (ptr == NULL) - { - OS_Panic("alloc failed."); - } - - return ptr; -} - - -void MyNAMUT_Free(void* buffer) -{ - SDK_ASSERTMSG( spFreeFunc != NULL, "NAMUT_Init should be called previously.\n"); - if (buffer) - { - spFreeFunc(buffer); - } -} - - -static void FreeForNAM(void* ptr) -{ - OS_FreeToMain(ptr); -} - - -void VBlankIntr(void) -{ - // eLXg\XV - UpdateScreen(); - - // IRQ `FbNtO47Zbg - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - - -// TWLݒf[^̃[h -static BOOL ReadTWLSettings( void ) -{ - u8 *pBuffer = OS_AllocFromMain( LCFG_READ_TEMP ); - BOOL result; - if( pBuffer ) { - result = LCFG_ReadTWLSettings( (u8 (*)[ LCFG_READ_TEMP ] )pBuffer ); - // ReadɎsꍇt@C̃Jo݂ - if (!result) - { - OS_TPrintf( "TSD read failed. Retry onece more.\n" ); - result = LCFG_RecoveryTWLSettings(); - } - OS_FreeToMain( pBuffer ); - } - if( result ) { - OS_TPrintf( "TSD read succeeded.\n" ); - }else { - OS_TPrintf( "TSD read failed.\n" ); - } - - return result; -} - - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/ARM9.TWL/src/screen.c b/build/tests/TitleHashChecker/ARM9.TWL/src/screen.c deleted file mode 100644 index c00a4a75..00000000 --- a/build/tests/TitleHashChecker/ARM9.TWL/src/screen.c +++ /dev/null @@ -1,194 +0,0 @@ - /*---------------------------------------------------------------------------* - Project: TwlSDK - WCM - demos - wcm-list-2 - File: screen.c - - Copyright 2007-2008 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-09-17#$ - $Rev: 8556 $ - $Author: okubata_ryoma $ - *---------------------------------------------------------------------------*/ -#include -#include "screen.h" -#include "font.h" - -/*---------------------------------------------------------------------------* - 萔 ` - *---------------------------------------------------------------------------*/ -#define TEXT_SCREEN_SIZE 2048 - -/*---------------------------------------------------------------------------* - ϐ ` - *---------------------------------------------------------------------------*/ - -// zXN[[ ㉺ ][ BG ][ LN^ ] -static u16 gScreen[2 ][ 1 ][ TEXT_SCREEN_SIZE / sizeof(u16) ] ATTRIBUTE_ALIGN(32); - -/*---------------------------------------------------------------------------* - Name: InitScreen - - Description: \VXê߂ɁA\ݒB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void InitScreen(void) -{ - // e V-RAM - GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); - MI_CpuClearFast((void*)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE); - (void)GX_DisableBankForLCDC(); - - // OAM - MI_CpuFillFast((void*)HW_OAM, 0xc0, HW_OAM_SIZE); - MI_CpuFillFast((void*)HW_DB_OAM, 0xc0, HW_DB_OAM_SIZE); - - // pbg - MI_CpuClearFast((void*)HW_PLTT, HW_PLTT_SIZE); - MI_CpuClearFast((void*)HW_DB_PLTT, HW_DB_PLTT_SIZE); - - // ʐݒ - GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D); - - GX_SetBankForBG(GX_VRAM_BG_128_A); - G2_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01); - G2_SetBG0Priority(0); - - GX_SetVisiblePlane(GX_PLANEMASK_BG0); - GX_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GX_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - ((u16*)HW_PLTT)[0] = 0x0000; // black - MI_CpuFillFast(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[0][0], TEXT_SCREEN_SIZE); - GX_LoadBG0Scr(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - - // ʐݒ - GX_SetBankForSubBG(GX_VRAM_SUB_BG_32_H); - G2S_SetBG0Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, GX_BG_SCRBASE_0x0000, GX_BG_CHARBASE_0x04000, - GX_BG_EXTPLTT_01); - G2S_SetBG0Priority(0); - GXS_SetGraphicsMode(GX_BGMODE_0); - GXS_SetVisiblePlane(GX_PLANEMASK_BG0); - GXS_LoadBG0Char(d_CharData, 0, sizeof(d_CharData)); - GXS_LoadBGPltt(d_PaletteData, 0, sizeof(d_PaletteData)); - ((u16*)HW_DB_PLTT)[0] = 0x0000; // black - MI_CpuFillFast(gScreen[1][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[1][0], TEXT_SCREEN_SIZE); - GXS_LoadBG0Scr(gScreen[1][0], 0, TEXT_SCREEN_SIZE); -} - -/*---------------------------------------------------------------------------* - Name: ClearScreen - - Description: ʂ̃eLXg\NAB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void ClearScreen(void) -{ - MI_CpuClearFast(gScreen[0][0], TEXT_SCREEN_SIZE); - MI_CpuClearFast(gScreen[1][0], TEXT_SCREEN_SIZE); -} -void ClearMainScreen(void) -{ - MI_CpuClearFast(gScreen[0][0], TEXT_SCREEN_SIZE); - -} -void ClearSubScreen(void) -{ - MI_CpuClearFast(gScreen[1][0], TEXT_SCREEN_SIZE); -} -/*---------------------------------------------------------------------------* - Name: PutMainScreen - - Description: CʂɃeLXgo͂B - - Arguments: text - o͂镶B - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void PutMainScreen(s32 x, s32 y, u8 palette, char* text, ...) -{ - va_list vlist; - char temp[33]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - for (i = 0; i < 32; i++) - { - if (temp[i] == 0x00) - { - break; - } - - gScreen[0][0][((y * 32) + x + i) % (32 * 32)] = (u16) (palette << 12 | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: PrintSubScreen - - Description: TuʂɃeLXgo͂B - - Arguments: text - o͂镶B - ... - zB - - Returns: None. - *---------------------------------------------------------------------------*/ -void PutSubScreen(s32 x, s32 y, u8 palette, char* text, ...) -{ - va_list vlist; - char temp[33]; - s32 i; - - va_start(vlist, text); - (void)vsnprintf(temp, 33, text, vlist); - va_end(vlist); - - for (i = 0; i < 32; i++) - { - if (temp[i] == 0x00) - { - break; - } - - gScreen[1][0][((y * 32) + x + i) % (32 * 32)] = (u16) (palette << 12 | temp[i]); - } -} - -/*---------------------------------------------------------------------------* - Name: UpdateScreen - - Description: zXN[ V-RAM ɔfB - V uNԒł̌ĂяozB - - Arguments: None. - - Returns: None. - *---------------------------------------------------------------------------*/ -void UpdateScreen(void) -{ - // zXN[ V-RAM ɔf - DC_StoreRange(gScreen[0][0], TEXT_SCREEN_SIZE); - GX_LoadBG0Scr(gScreen[0][0], 0, TEXT_SCREEN_SIZE); - DC_StoreRange(gScreen[1][0], TEXT_SCREEN_SIZE); - GXS_LoadBG0Scr(gScreen[1][0], 0, TEXT_SCREEN_SIZE); -} - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/TitleHashChecker/Makefile b/build/tests/TitleHashChecker/Makefile deleted file mode 100644 index 7dfe4b3b..00000000 --- a/build/tests/TitleHashChecker/Makefile +++ /dev/null @@ -1,34 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tests - camera -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2008-08-05#$ -# $Rev: 2098 $ -# $Author: kamikawa $ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - - -#---------------------------------------------------------------------------- - -SUBDIRS = \ - banner \ - ARM7.TWL \ - ARM9.TWL \ - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/TitleHashChecker/banner/Makefile b/build/tests/TitleHashChecker/banner/Makefile deleted file mode 100644 index 48be6a4a..00000000 --- a/build/tests/TitleHashChecker/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: 2008-07-01#$ -# $Rev: 1750 $ -# $Author: nakasima $ -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -ICON_DIR = ./icon - -BANNER_ICON = $(ICON_DIR)/gameIcon.bmp -BANNER_SPEC = banner_v3.bsf - -TARGETS = banner.bnr -INSTALL_DIR = ./ -INSTALL_TARGETS = $(TARGETS) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) -BANNER_ICON_MIDDLE = $(addprefix $(BANNER_ICON_NAME), .nbfs .nbfc .nbfp) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_MIDDLE) \ - $(TARGETS:.bnr=.srl) - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) $(BANNER_ICON_MIDDLE) - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/TitleHashChecker/banner/banner_v3.bsf b/build/tests/TitleHashChecker/banner/banner_v3.bsf deleted file mode 100644 index 7975862b19a135ee19a81c5f20caeeac484b1ec0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 916 zcmc(e&1wQc5QOV$z;_t%oQMcHc#OFIAQG~g`?wlh{AG8Iv_^C1IeM?yl*n zqGo=+J9<&BOiqtsIdZQPYpaTCt_!<@U8Yh8_H8|=b4SNBe-q=qPD|}zQp4!u&dBMg zE0u=Y8ir0cxR>M&*@?UivEZbqQ&TnUidh*-dV1DeqkmOq>fYgH>`I;CJAh$7aI)S^ zuT)wvHeKd}(*!j&nw*A2b7>zY7=ENh5JjdWVU6CyDs@`eJlA yP=#Mo9BC(F07;{x8W1y!C;{?R3?A~xIOO)SD7vfy7z>#;N4xqQLuVZ{DDe4q?VLnI8R~_wq5uE@ diff --git a/build/tests/TitleHashChecker/common/include/fifo.h b/build/tests/TitleHashChecker/common/include/fifo.h deleted file mode 100644 index c3a83800..00000000 --- a/build/tests/TitleHashChecker/common/include/fifo.h +++ /dev/null @@ -1,104 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlSDK - camera-test - include - File: fifo.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: 2008-07-25#$ - $Rev: 2003 $ - $Author: kamikawa $ - *---------------------------------------------------------------------------*/ -#ifndef TWL_KAMI_TEST_FIFO_H_ -#define TWL_KAMI_TEST_FIFO_H_ - -#include - -/*---------------------------------------------------------------------------* - 萔` - *---------------------------------------------------------------------------*/ -#define PXI_FIFO_TAG_KAMITEST PXI_FIFO_TAG_USER_1 - -#define KAMI_PXI_CONTINUOUS_PACKET_MAX 10 -#define KAMITEST_PXI_DATA_SIZE_MAX ((KAMI_PXI_CONTINUOUS_PACKET_MAX-1)*3+1) // őf[^ - -#define KAMITEST_PXI_START_BIT 0x02000000 // 擪pPbgӖ -#define KAMITEST_PXI_RESULT_BIT 0x00008000 // PXỈ - -#define KAMITEST_PXI_COMMAND_SHIFT 8 // R}hi[̈ʒu -#define KAMITEST_PXI_COMMAND_MASK 0x00007f00 // R}hi[̃}XN -#define KAMITEST_PXI_DATA_NUMS_MASK 0x00ff0000 // f[^̈ -#define KAMITEST_PXI_DATA_NUMS_SHIFT 16 // f[^ʒu -#define KAMITEST_PXI_1ST_DATA_MASK 0x000000ff // 擪pPbg̃f[^̈ -#define KAMITEST_PXI_1ST_DATA_SHIFT 0 // 擪pPbg̃f[^ʒu - -#ifdef __cplusplus -extern "C" { -#endif - -/*===========================================================================*/ - -typedef enum KAMIPxiResult -{ - KAMI_PXI_RESULT_SUCCESS = 0, // (void/void*^) // ꍇɂ㑱pPbg - KAMI_PXI_RESULT_SUCCESS_TRUE = 0, // (BOOL^) - KAMI_PXI_RESULT_SUCCESS_FALSE, // (BOOL^) - KAMI_PXI_RESULT_INVALID_COMMAND, // sPXIR}h - KAMI_PXI_RESULT_INVALID_PARAMETER, // sȃp[^ - KAMI_PXI_RESULT_ILLEGAL_STATUS, // KAMȈԂɂ菈ss - KAMI_PXI_RESULT_BUSY, // ̃NGXgs - KAMI_PXI_RESULT_FATAL_ERROR, // ̑炩̌ŏɎs - KAMI_PXI_RESULT_MAX -} -KAMIPxiResult; - - -typedef enum KamiCommand -{ - KAMI_TEST_COMMAND, - KAMI_EXE_FORMAT, - KAMI_NAND_IO, - KAMI_MCU_IO, - KAMI_MCU_WRITE_FIRM, - KAMI_ARM7_IO, - KAMI_CDC_GO_DSMODE, - KAMI_CLEAR_NAND_ERRORLOG, - KAMI_GET_CAMERA_MODULE_TYPE, - KAMI_GET_NAND_CID -} -KamiCommand; - - -typedef enum CameraModuleType -{ - CAMERA_MODULE_TYPE_UNKNOWN, - CAMERA_MODULE_TYPE_SHARP, - CAMERA_MODULE_TYPE_MICRON -} -CameraModuleType; - - -typedef struct CameraModuleTypes -{ - CameraModuleType in; - CameraModuleType out; -} -CameraModuleTypes; - -/*===========================================================================*/ - - -#ifdef __cplusplus -} /* extern "C" */ -#endif - -#endif /* TWL_KAMI_TEST_FIFO_H_ */ - -/*---------------------------------------------------------------------------* - End of file - *---------------------------------------------------------------------------*/ diff --git a/build/tests/UjiPackage/Makefile b/build/tests/UjiPackage/Makefile deleted file mode 100644 index 9b70d85c..00000000 --- a/build/tests/UjiPackage/Makefile +++ /dev/null @@ -1,98 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL - build -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -# iZpp[X쐬Makefile - -TARGET_FIRM = SYSTEMMENU - -# -------------------------------- -# c[ւExport - -ifdef TWLSYSTEM_ROOT -export NITROSYSTEM_ROOT = $(TWLSYSTEM_ROOT) -endif - -export TARGET_CODEGEN = ALL - -# -------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -# check mandatory packages - -ifneq ($(TWLSDK_PRIVATE),TRUE) -$(error "TwlSDK-private is needed.") -endif - -ifneq ($(TWLSDK_SYSMENU_PRIVATE),TRUE) -$(error "TwlSDK-SysMenu-private is needed.") -endif - -ifneq ($(TWLSDK_SECURE7_PRIVATE),TRUE) -$(error "TwlSDK-Secure7-private is needed.") -endif - -ifneq ($(TWLSDK_TWL_WIRELESS_PRIVATE),TRUE) -$(error "TwlSDK-TwlWireless-private is needed.") -endif - -#---------------------------------------------------------------------------- - -SUBDIRS = \ - $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/namut/ARM9 \ - $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/reloc_info/ARM7 \ - $(TWL_IPL_RED_ROOT)/build/libraries_sysmenu/hotsw/ARM7 \ - $(TWL_IPL_RED_ROOT)/build/tests/TestComponent/ARM7.TWL - -#---------------------------------------------------------------------------- - -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -FIND := find -ARCHIVE_ROOT ?= . -PACKING_DATE_AND_TIME ?= $(shell date +"%Y%m%d %H%M") -PACKING_DATE ?= $(word 1,$(PACKING_DATE_AND_TIME)) -PACKING_TIME ?= $(word 2,$(PACKING_DATE_AND_TIME)) -ARCHIVE ?= TwlIPL-uji-$(PACKING_DATE)-$(PACKING_TIME).zip -PACKAGE_TMP ?= ./TwlIPL - -.PHONY: package - -package: - @echo --- Copy sources ---; \ - mkdir -p $(PACKAGE_TMP); \ - mkdir -p $(PACKAGE_TMP)/build; \ - mkdir -p $(PACKAGE_TMP)/build/tests; \ - mkdir -p $(PACKAGE_TMP)/build/systemMenu_tools; \ - $(CP) $(TWL_IPL_RED_ROOT)/build/tests/TestComponent $(PACKAGE_TMP)/build/tests/TestComponent; \ - $(CP) $(TWL_IPL_RED_ROOT)/build/systemMenu_tools/common $(PACKAGE_TMP)/build/systemMenu_tools/common; \ - echo --- Build TwlIPL ---; \ - $(MAKE) full; \ - echo --- Packaging ---; \ - mkdir -p $(PACKAGE_TMP); \ - $(CP) $(TWL_IPL_RED_ROOT)/setup $(PACKAGE_TMP)/setup; \ - $(CP) $(TWL_IPL_RED_ROOT)/lib $(PACKAGE_TMP)/lib; \ - $(CP) $(TWL_IPL_RED_ROOT)/include $(PACKAGE_TMP)/include; \ - $(CP) $(TWL_IPL_RED_ROOT)/components $(PACKAGE_TMP)/components; \ - $(CP) $(TWL_IPL_RED_ROOT)/build/buildtools $(PACKAGE_TMP)/build/buildtools; \ - $(FIND) $(PACKAGE_TMP) -name ".svn" -a -type d -print -prune -exec $(RM) $(VERBOSE) {} \; - zip -r $(ARCHIVE_ROOT)/$(ARCHIVE) $(PACKAGE_TMP) - - - -#===== End of Makefile ===== diff --git a/build/tests/UjiPackage/readme.txt b/build/tests/UjiPackage/readme.txt deleted file mode 100644 index 80107ac6..00000000 --- a/build/tests/UjiPackage/readme.txt +++ /dev/null @@ -1,24 +0,0 @@ -iZpvOpTwlIPLpbP[W쐬Makefile - -KvTwlSDKpbP[W - - TWLSDK-5_1-20090303-jp.zip - TWLSDK-5_1-20090303-private-jp.zip - TWLSDK-5_1-20090303-private-Secure7-jp.zip - TWLSDK-5_1-20090303-private-SysMenu-jp.zip - TwlSDK-5_1-20090303-private-TwlWireless-jp.zip - - - -1. eϐݒ - -$ export TWLSDK_PLATFORM=TWL -$ export TWLSYSTEM_ROOT=(TwlSystem̃CXg[fBNg) -TWLSYSTEM͎gp܂񂪁ATwlIPLcommondefsƉ߂Ȃ߁A -@ݒ肵ĂB - -2. package^[Qbgw肵make - -$ make package - -TwlIPL-uji-(t)-().zip ̃fBNgɐ܂B diff --git a/build/tests/WDSTest/Makefile b/build/tests/WDSTest/Makefile deleted file mode 100644 index fe71f85b..00000000 --- a/build/tests/WDSTest/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_PROC = ARM9 - -SRCS = main.c -TARGET_BIN = main.srl - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LLIBRARIES += WDS$(TWL_LIBSUFFIX).a - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/WDSTest/src/main.c b/build/tests/WDSTest/src/main.c deleted file mode 100644 index e896b5bb..00000000 --- a/build/tests/WDSTest/src/main.c +++ /dev/null @@ -1,297 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - WDSTest - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include -#include - -// q[v֐ -static void InitializeAllocateSystem(void); - -// ANZX|Cg̃fobO\p֐ -static void DumpWDSApInfo( WDSApInfo *apinfo ); - -void VBlankIntr(void); - -// WDS񓯊֐̃R[obN֐ -// R[obN֐ł̓AvP[ṼXe[gϐg_appstateύX -void WDS_Initialize_CB(void *arg); -void WDS_StartScan_CB(void *arg); -void WDS_EndScan_CB(void *arg); -void WDS_End_CB(void *arg); - -// AvP[V𐧌䂷Xe[g̗񋓌^ -typedef enum AppState { - APP_STATE_WDSINIT, - APP_STATE_WDSWAITINIT, - APP_STATE_WDSSCAN, - APP_STATE_WDSWAITSCAN, - APP_STATE_WDSCOMPLETESCAN, - APP_STATE_WDSENDSCAN, - APP_STATE_WDSWAITENDSCAN, - APP_STATE_WDSCOMPLETEENDSCAN, - APP_STATE_WDSEND, - APP_STATE_WDSWAITEND, - APP_STATE_WDSCOMPLETEEND -} AppState; - -// AvP[V𐧌䂷Xe[gϐ -static AppState g_appstate = APP_STATE_WDSINIT; - -// 󂯎r[Ri[ϐ(̔z`[oRŃzbgX|bg`lɓn) -static WDSBriefApInfo briefapinfo[WDS_APINFO_MAX]; - -// Ԍvp -static OSTick wdsBegin; - -/*---------------------------------------------------------------------------* - Name: NitroMain - - Description: main - - Arguments: None - - Returns: None - *---------------------------------------------------------------------------*/ -void NitroMain(void) -{ - u8 *wdsSysBuf; - OSTick wdsScanBeginTick = 0; - - // e평 - OS_Init(); - OS_InitTick(); - OS_InitAlarm(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - InitializeAllocateSystem(); - - // WDSCugpobt@m(32oCgACgĂKv) - wdsSysBuf = OS_Alloc( WDS_GetWorkAreaSize() ); - if( wdsSysBuf == NULL) - { - OS_Panic("OS_Alloc Failed"); - } - - // C[v - while( 1 ) { - OSTick now; - int i; - - OS_WaitVBlankIntr(); - switch( g_appstate ) - { - case APP_STATE_WDSINIT: - // CjVXe[g - - // WDSCȕ֐ĂяoA̔񓯊̊҂ - OS_Printf("*** WDS_Initialize\n"); - g_appstate = APP_STATE_WDSWAITINIT; - wdsBegin = OS_GetTick(); - if( WDS_Initialize( wdsSysBuf, WDS_Initialize_CB, 0 ) == 0 ) - { - OS_Printf("WDS_Initialize successed\n"); - } - else { - OS_TPrintf("WDS_Initialize failed"); - g_appstate = APP_STATE_WDSCOMPLETEEND; - } - break; - OS_Printf("*** WDS_Initialize waiting asyncronous process\n"); - case APP_STATE_WDSWAITINIT: - case APP_STATE_WDSWAITSCAN: - case APP_STATE_WDSWAITENDSCAN: - case APP_STATE_WDSWAITEND: - // 񓯊̊҂ƒXe[gQ - - // R[obN֐ĂяoAXe[gύX̂҂Ă΂悢 - break; - case APP_STATE_WDSSCAN: - // ォAr[RXLɈXLsꍇɓĂXe[g - - //OS_Printf("*** WDS_StartScan\n"); - // r[RXL񓯊Jn - g_appstate = APP_STATE_WDSWAITSCAN; - wdsBegin = OS_GetTick(); - if( WDS_StartScan( WDS_StartScan_CB ) == 0 ) - { - if( wdsScanBeginTick == 0 ) - wdsScanBeginTick = OS_GetTick(); - } - else { - OS_TPrintf("WDS_EndScan failed"); - g_appstate = APP_STATE_WDSEND; - } - break; - case APP_STATE_WDSCOMPLETESCAN: - // XLɓĂXe[g - - // ̃XLł̓r[RȂƂ̂ŁA2bԃr[RMJԂ - now = OS_GetTick(); - if( OS_TicksToMilliSeconds(now - wdsScanBeginTick) < 2000 ) - { - // ăXL̂߂ɃXLJnXe[gɈڍs - g_appstate = APP_STATE_WDSSCAN; - } - else { - // XLIXe[gɈڍs - g_appstate = APP_STATE_WDSENDSCAN; - } - break; - case APP_STATE_WDSENDSCAN: - // XLIۂɓĂXe[g - OS_Printf("*** WDS_EndScan\n"); - - // XLI񓯊Jn - wdsBegin = OS_GetTick(); - g_appstate = APP_STATE_WDSWAITENDSCAN; - if( WDS_EndScan( WDS_EndScan_CB ) == 0 ) - { - OS_Printf("WDS_EndScan successed\n"); - } - else { - OS_TPrintf("WDS_EndScan failed"); - g_appstate = APP_STATE_WDSEND; - } - break; - case APP_STATE_WDSCOMPLETEENDSCAN: - // XLI񓯊IۂɓėXe[g - OS_Printf("*** WDS_GetApInfoAll\n"); - if( WDS_GetApInfoAll( briefapinfo ) != 0 ) - { - OS_Panic("WDS_GetApInfoAll failed\n"); - } - for( i = 0 ; i < WDS_APINFO_MAX ; i++ ) - { - if( briefapinfo[i].isvalid == TRUE ) - { - OS_TPrintf("rssi: %d\n", briefapinfo[i].rssi); - DumpWDSApInfo( &briefapinfo[i].apinfo ); - } - } - g_appstate = APP_STATE_WDSEND; - break; - case APP_STATE_WDSEND: - // WDSCuIAn[h̓d𗎂Ƃ񓯊Jn - OS_Printf("*** WDS_End\n"); - g_appstate = APP_STATE_WDSWAITEND; - wdsBegin = OS_GetTick(); - if( WDS_End( WDS_End_CB ) == 0 ) - { - OS_Printf("WDS_End successed\n"); - } - else { - OS_Panic("WDS_End failed"); - } - break; - case APP_STATE_WDSCOMPLETEEND: - // WDSCủۂɓėXe[g - - OS_TPrintf("WDS completed\n"); - OS_Terminate(); - } - } -} - -// ANZX|Cg̃fobO\p֐ -static void DumpWDSApInfo( WDSApInfo *apinfo ) -{ - int i; - char buf[256]; - - OS_TPrintf( "================================\n" ); - // SSID - MI_CpuCopy8( apinfo->ssid, buf, WDS_SSID_BUF_SIZE) ; - buf[WDS_SSID_BUF_SIZE] = 0x00; - OS_TPrintf( "SSID: %s\n", buf ); - - // APNUM - MI_CpuCopy8( apinfo->apnum, buf, WDS_APNUM_BUF_SIZE) ; - buf[WDS_APNUM_BUF_SIZE] = 0x00; - OS_TPrintf( "APNUM: %s\n", buf ); - - // CHANNEL - OS_TPrintf( "channel: %d\n", apinfo->channel ); - - // ENCRYPTFLAG - OS_TPrintf( "encryptmethod: %d\n", apinfo->encryptflag); - - // WEPKEY - OS_TPrintf( "WEPKEY: " ); - for( i = 0 ; i < WDS_WEPKEY_BUF_SIZE ; i++ ) - { - OS_TPrintf( "%02x", apinfo->wepkey[i] ); - } - OS_TPrintf( "\n" ); - OS_TPrintf( "================================\n" ); -} - -static void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -// q[v֐ -static void InitializeAllocateSystem(void) -{ - void *tempLo; - OSHeapHandle hh; - - tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tempLo); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - OS_Panic("ARM9: Fail to create heap...\n"); - } - hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - -static void WDS_Initialize_CB(void *arg) -{ -#pragma unused(arg) - OS_TPrintf("WDS_Initialize_CB\n"); - g_appstate = APP_STATE_WDSSCAN; - OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); -} - -static void WDS_StartScan_CB(void *arg) -{ -#pragma unused(arg) - OS_TPrintf("WDS_StartScan_CB\n"); - g_appstate = APP_STATE_WDSCOMPLETESCAN; - OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); -} - -static void WDS_EndScan_CB(void *arg) -{ -#pragma unused(arg) - OS_TPrintf("WDS_EndScan_CB\n"); - g_appstate = APP_STATE_WDSCOMPLETEENDSCAN; - OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); -} - -static void WDS_End_CB(void *arg) -{ -#pragma unused(arg) - OS_TPrintf("WDS_End_CB\n"); - g_appstate = APP_STATE_WDSCOMPLETEEND; - OS_TPrintf("Elapsed time = %llu\n", OS_TicksToMicroSeconds( OS_GetTick() - wdsBegin ) ); -} diff --git a/build/tests/WDSWrapperTest/Makefile b/build/tests/WDSWrapperTest/Makefile deleted file mode 100644 index efc21709..00000000 --- a/build/tests/WDSWrapperTest/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: WDSWrapperTest -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -#---------------------------------------------------------------------------- - -TARGET_FIRM = SYSTEMMENU -TARGET_PLATFORM = TWL -TWL_ARCHGEN = LIMITED -TWL_PROC = ARM9 - -SRCS = main.c -TARGET_BIN = main.srl - -include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -LLIBRARIES += WDS$(TWL_LIBSUFFIX).a - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -#---------------------------------------------------------------------------- -include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/WDSWrapperTest/src/main.c b/build/tests/WDSWrapperTest/src/main.c deleted file mode 100644 index c103a5d8..00000000 --- a/build/tests/WDSWrapperTest/src/main.c +++ /dev/null @@ -1,197 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - tests - WDSWrapperTest - File: main.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ -#include - -// VuN֐ -static void VBlankIntr(void) -{ - OS_SetIrqCheckFlag(OS_IE_V_BLANK); -} - -// q[v֐ -static void InitializeAllocateSystem(void) -{ - void *tempLo; - OSHeapHandle hh; - - tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 1); - OS_SetArenaLo(OS_ARENA_MAIN, tempLo); - hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi()); - if (hh < 0) - { - OS_Panic("ARM9: Fail to create heap...\n"); - } - hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh); -} - -// WDSWrapperpAP[^ -static void *Alloc_WDSWrapper( u32 size ) -{ - return OS_Alloc( size ); -} - -static void Free_WDSWrapper( void *ptr ) -{ - OS_Free( ptr ); -} - -char *callbackstring[] = { - "WDSWRAPPER_CALLBACK_INITIALIZE", - "WDSWRAPPER_CALLBACK_CLEANUP", - "WDSWRAPPER_CALLBACK_STARTSCAN", - "WDSWRAPPER_CALLBACK_STARTSCAN2", - "WDSWRAPPER_CALLBACK_STOPSCAN", -}; - -// WDSWrapperpR[obN֐ -static void Callback_WDSWrapper( void *ptr ) -{ - WDSWrapperCallbackParam *callback = (WDSWrapperCallbackParam *)ptr; - OS_TPrintf("Callback_WDSWrapper: %s %d ", callbackstring[callback->callback], callback->errcode ); - - switch( callback->callback ) { - case WDSWRAPPER_CALLBACK_INITIALIZE: - OS_TPrintf( "" ); - break; - case WDSWRAPPER_CALLBACK_STARTSCAN2: - // nbԊũr[RԌXL񕪂 - // r[R󂯎ĂȂƂʂoꍇA\܂ - if( WDS_WrapperCheckValidBeacon() == WDSWRAPPER_ERRCODE_FAILURE ) - OS_TPrintf( "\܂" ); - else { - OS_TPrintf( "\‚܂" ); - } - // Mr[Rf[^Argumenẗɏ -#ifdef SDK_TWL - OS_TPrintf( "\n" ); - WDS_WrapperSetArgumentParam(); -#endif - break; - case WDSWRAPPER_CALLBACK_STARTSCAN: - // nbԊũr[RԌXL񕪂 - // r[R󂯎Ăꍇ̂݋\t܂ - if( WDS_WrapperCheckValidBeacon() == WDSWRAPPER_ERRCODE_SUCCESS ) - OS_TPrintf( "\‚܂" ); - break; - case WDSWRAPPER_CALLBACK_STOPSCAN: - if( WDS_WrapperCheckValidBeacon() == WDSWRAPPER_ERRCODE_FAILURE ) - OS_TPrintf( "\܂" ); - else { - OS_TPrintf( "\‚܂" ); - } - break; - case WDSWRAPPER_CALLBACK_CLEANUP: - OS_TPrintf( "" ); - break; - } - OS_TPrintf( "\n" ); -} - -// X[v[hɓOɌĂяoR[obN֐ -static void Callback_WDSPreSleep( void *ptr ) -{ -#pragma unused( ptr ) - WDS_WrapperCleanup(); - while( WDS_WrapperCheckThreadRunning() == WDSWRAPPER_ERRCODE_SUCCESS ) - OS_Sleep( 100 ); -} - -// X[v[h畜AۂɌĂяoR[obN֐ -static void Callback_WDSPostSleep( void *ptr ) -{ -#pragma unused( ptr ) - WDSWrapperInitializeParam param; - - // WDSWrapperƓJn - param.threadprio = 20; - param.dmano = 1; - - param.callback = Callback_WDSWrapper; - param.alloc = Alloc_WDSWrapper; - param.free = Free_WDSWrapper; - WDS_WrapperInitialize( param ); -} - -// C֐ -void NitroMain(void) -{ - WDSWrapperInitializeParam param; - u16 lastpad = 0x0000; - u16 nowpad = 0x0000; - PMSleepCallbackInfo presleepcallbackinfo, postsleepcallbackinfo; - - // e평 - OS_Init(); - OS_InitTick(); - OS_InitAlarm(); - - //---- interrupt setting - OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); - OS_EnableIrqMask(OS_IE_V_BLANK); - OS_EnableIrq(); - GX_VBlankIntr(TRUE); - - //---- power manager callback - PM_SetSleepCallbackInfo( &presleepcallbackinfo, Callback_WDSPreSleep, NULL ); - PM_AppendPreSleepCallback( &presleepcallbackinfo ); - PM_SetSleepCallbackInfo( &postsleepcallbackinfo, Callback_WDSPostSleep, NULL ); - PM_AppendPostSleepCallback( &postsleepcallbackinfo ); - - InitializeAllocateSystem(); - - OS_TPrintf( "WDSWrapper Sample\n\n" ); - OS_TPrintf( "X{^: WDSbp[WDSAԌXLJn\n" ); - OS_TPrintf( "B{^: XL𒆒f\n" ); - OS_TPrintf( "A{^: XLĊJ\n" ); - OS_TPrintf( "Y{^: XL𒆒fAWDSbp[WDS\n" ); - OS_TPrintf( "X^[g{^: q[v_v\\n" ); - OS_TPrintf( "ZNg{^: X[v[hin/out\n" ); - - // L[͂ŒfEĊJE - while( 1 ) { - lastpad = nowpad; - nowpad = PAD_Read(); - - // A{^: XLĊJ - // B{^: XL𒆒f - // X{^: bp[ - // Y{^: bp[ - // X^[g{^: q[v_v\ - if( ( lastpad ^ nowpad ) & PAD_BUTTON_A && !( nowpad & PAD_BUTTON_A ) ) - WDS_WrapperStartScan(); - if( ( lastpad ^ nowpad ) & PAD_BUTTON_B && !( nowpad & PAD_BUTTON_B ) ) - WDS_WrapperStopScan(); - if( ( lastpad ^ nowpad ) & PAD_BUTTON_X && !( nowpad & PAD_BUTTON_X ) ) { - // WDSWrapperƓJn - param.threadprio = 20; - param.dmano = 1; - - param.callback = Callback_WDSWrapper; - param.alloc = Alloc_WDSWrapper; - param.free = Free_WDSWrapper; - WDS_WrapperInitialize( param ); - } - if( ( lastpad ^ nowpad ) & PAD_BUTTON_Y && !( nowpad & PAD_BUTTON_Y ) ) - WDS_WrapperCleanup(); - if( ( lastpad ^ nowpad ) & PAD_BUTTON_START && !( nowpad & PAD_BUTTON_START ) ) - OS_DumpHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE ); - if( ( lastpad ^ nowpad ) & PAD_BUTTON_SELECT && !( nowpad & PAD_BUTTON_SELECT ) ) { - PM_GoSleepMode( PM_TRIGGER_KEY, PM_PAD_LOGIC_OR, PAD_BUTTON_SELECT ); - } - OS_Sleep( 100 ); - } -} diff --git a/build/tests/WirelessChecker/@ b/build/tests/WirelessChecker/@ deleted file mode 100644 index bd33deb9..00000000 --- a/build/tests/WirelessChecker/@ +++ /dev/null @@ -1 +0,0 @@ -NINTENDO_RED_CONFIDENTIAL diff --git a/build/tests/WirelessChecker/Makefile b/build/tests/WirelessChecker/Makefile deleted file mode 100644 index 14b1c89d..00000000 --- a/build/tests/WirelessChecker/Makefile +++ /dev/null @@ -1,146 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - tools - Wireless Checker -# File: Makefile -# -# Copyright 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_PLATFORM = TWL -override TARGET_CODEGEN = ARM -override TWL_ARCHGEN = LIMITED - -SUBDIRS = libraries components rsf banner - -RES_DIR = ./resources - -SRCDIR = src -INCDIR = include $(ROOT)/build/libraries/wm/common.TWL/inc \ - $(ROOT)/build/libraries/wm/ARM9.TWL/nwm/inc - -ifeq ($(TWL_NANDAPP),TRUE) -ROM_SPEC = rsf/wireless_checker_nand.rsf -else -ROM_SPEC = rsf/wireless_checker.rsf -endif - -BANNER_FILE = ./banner/000A_WLCK.bnr -MAKEROM_FLAGS = -DBANNER_FILE='$(BANNER_FILE)' - -#---------------------------------- -# Font - -FONTCVTR_DIR = $(call empath,$(TWLSYSTEM_ROOT))/tools/fontcvtr -FONT_BMP = $(RES_DIR)/ds_ipl10.bmp - -TARGET_OBJ += $(FONT_O) -EXT_OBJS += $(OBJDIR)/$(FONT_O) - - -FONT_RES_LC = $(RES_DIR)/font.NFTR -FONT_O_LC = font.o - -FONT_RES = $(FONT_RES_LC) -FONT_O = $(FONT_O_LC) - -MACRO_FLAGS += -DTWLNMENU_USE_LC_FONT - - -LDIRT_CLEAN += $(FONT_RES_LC) $(FONT_RES_NO_LC) *.rsf $(REVISION_C) - -#----------------------------------- -# For CTR compatibility check -# -# To build this imeage, add CHECK_ON_CTR=TRUE. -# make CHECK_ON_CTR=TRUE - -ifeq ($(CHECK_ON_CTR),TRUE) -BASENAME += WirelessChecker_for_CTRcheck -MACRO_FLAGS += -DCHECK_ON_CTR -else -BASENAME += WirelessChecker -endif - -#---------------------------------------------------------------------------- - -ifeq ($(TWL_NANDAPP),TRUE) -TARGET_BIN = $(BASENAME)_nand.tad -else -TARGET_BIN = $(BASENAME).srl -endif - -ifeq ($(TWL_NANDAPP),TRUE) -LCFILE_AUTOGEN = $(BINDIR)/$(notdir $(LCFILE_SPEC:.lsf=.autogen.nand.lcf)) -LDRES_AUTOGEN = $(BINDIR)/$(notdir $(LCFILE_SPEC:.lsf=.autogen.nand.response)) -endif - -SRCS = main.cpp \ - frame.cpp \ - test.cpp \ - test_wm.cpp \ - test_nwm.cpp \ - test_fatal.cpp \ - test_recovery.cpp \ - util/util.cpp \ - util/canvas.cpp \ - util/wprintf.cpp \ - util/memory.cpp - -LINCLUDES = $(ROOT)/build/libraries/wm/ARM9.TWL/nwm/inc \ - $(ROOT)/build/libraries/wm/common.TWL/inc - -LLIBRARY_DIRS = -LLIBRARIES = - -COMPONENT_NAME = racoon -MAKEROM_ARM7_BASE = ./components/racoon_wckr/bin/$(TWL_BUILDTYPE_ARM7)/racoon -MAKEROM_ARM7 = $(MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) - -include $(TWLSYSTEM_ROOT)/build/buildtools/commondefs - -LIBRARIES_UNLINK := libnwm$(TWL_LIBSUFFIX).a - -LLIBRARY_DIRS += ./libraries/nwm/ARM9/lib/$(TWL_BUILDTYPE_ARM9) -LLIBRARIES += libnwm.WCKR$(TWL_LIBSUFFIX).a - -#---------------------------------------------------------------------------- - -# convert font - -$(FONT_RES): $(FONT_BMP) $(FONT_FILTER) -ifdef SILENT - echo "make font:" $(notdir $<) -endif - $(FONTCVTR_DIR)/fontcvtrc.exe \ - -i bmp -if $< -io $(FONTCVTR_DIR)/xlor/ds_ipl.xlor -ib 1 \ - -o nitro -of $@ -oe utf16 -oa 0x23 $(FONT_OPTION) - -$(OBJDIR)/$(FONT_O): $(FONT_RES) -ifdef SILENT - echo " b2o font:" $(notdir $<) -endif - $(BIN2OBJ) $< $@ --begin font_NFTR_begin --end font_NFTR_end --align 32 - -INSTALL_TARGETS = $(BINDIR)/$(TARGET_BIN) -INSTALL_DIR = ./ -#$(TWLSDK_INSTALL_ROOT)/bin/$(CODEGEN_PROC)-$(TWL_PLATFORM)/$(TWL_BUILD_DIR) - -do-build: $(TARGETS) -ifneq ($(TWL_NANDAPP),TRUE) - $(REMAKE) TWL_NANDAPP=TRUE SKIP_SUBDIR=TRUE -endif - -include $(TWLSYSTEM_ROOT)/build/buildtools/modulerules -include $(TWLSDK_ROOT)/build/buildtools/twl/modulerules.add-ins.nadk - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/banner/000A_WLCK.bmp b/build/tests/WirelessChecker/banner/000A_WLCK.bmp deleted file mode 100644 index 51252b83b8943e0a1e79119cf95de67d5188ea13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 630 zcmd5&yA1*{3^j-W7=e;4PC`ye7uRfYE!l*QHE_)gNUXpH;n^`FN0$!gUi^D@&ORLH zHMz{V_rNZ&q7AI2Y{M<3gjI>!2VKd+s!IA$dfl%yO()!Cn335p zsDzUfG^B-*vUukU-g1_gMc%6VdZ&Q+=|B2^|Hj8034{AMwjbMo&1`Dvi-6bVzk6x? PU!QHC);Rh%e{lXc5>BI@ diff --git a/build/tests/WirelessChecker/banner/000A_WLCK.bsf b/build/tests/WirelessChecker/banner/000A_WLCK.bsf deleted file mode 100644 index a8d31c5b491b015fa7ba43f623f9ed2fcd6f4c17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 982 zcmbtTJ5Iwu5PdZgcd(KMq<}`EqXWw}CI}Elp^QRgj3tO8l9~hL5LBE14nPaHprPUl z2zWEg2DyM{HS%hAKJU%XU!PsIRN(nycG4vv_O+DgoLcA#2kSL-3NmUZ2D6%C8K zh40BeEBLEY_0gQ1_#E2Wx3X6`w1kWyND2E|vBsL!Tw1OvPJ$3q?n6n`@ef{xBnU6F z{n0&{SbjN9gYa@rZDbXD#3FDSy8DXt+rv0;DlvOk6H#}}{YiU)h<$Fd&c)ZP`}7T8 C{Dh1E diff --git a/build/tests/WirelessChecker/banner/Makefile b/build/tests/WirelessChecker/banner/Makefile deleted file mode 100644 index f6ef1ca6..00000000 --- a/build/tests/WirelessChecker/banner/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -#! make -f -#--------------------------------------------------------------------------- -# Project: NitroSDK - tools -# File: Makefile -# -# Copyright 2003,2004 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Log: Makefile,v $ -# Revision 1.1 2004/11/01 08:25:59 ooe -# (none) -# -# $NoKeywords: $ -#--------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -BANNER_ICON = 000A_WLCK.bmp -BANNER_SPEC = 000A_WLCK.bsf - -TARGETS = $(BANNER_SPEC:.bsf=.bnr) - -BANNER_ICON_NAME = $(basename $(BANNER_ICON)) - -LDIRT_CLEAN = $(TARGETS) \ - $(BANNER_ICON_NAME).nbfs \ - $(BANNER_ICON_NAME).nbfc \ - $(BANNER_ICON_NAME).nbfp \ - $(TARGETS:.bnr=.srl) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#---------------------------------------------------------------------------- -# build -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON_NAME).nbfc $(BANNER_ICON_NAME).nbfp - $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) - -# diff --git a/build/tests/WirelessChecker/components/Makefile b/build/tests/WirelessChecker/components/Makefile deleted file mode 100644 index 6ca34f03..00000000 --- a/build/tests/WirelessChecker/components/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TWL WLAN - components -# File: Makefile -# -# Copyright 2003 - 2008 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Log: Makefile,v $ -# -# -# $NoKeywords: $ -#---------------------------------------------------------------------------- - - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS_P += racoon_wckr - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/components/racoon_wckr/Makefile b/build/tests/WirelessChecker/components/racoon_wckr/Makefile deleted file mode 100644 index 81bcb35e..00000000 --- a/build/tests/WirelessChecker/components/racoon_wckr/Makefile +++ /dev/null @@ -1,56 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - components - racoon.TWL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -# Definition to override for racoon_wckr -# - -LLIBRARIES += libnwm_sp.WCKR$(TWL_LIBSUFFIX).a -LLIBRARY_DIRS += ../../libraries/nwm/ARM7/lib/$(TWL_BUILDTYPE) - -COMPONENT_DIR += $(ROOT)/build/components/racoon.TWL -COMPONENT_SRC_DIR += $(ROOT)/build/components/mongoose.TWL/src - -override SRCS = $(COMPONENT_SRC_DIR)/main.c $(COMPONENT_SRC_DIR)/initScfg.c - -override TARGET_NAME = racoon - -# Generate my own lsf from original lsf of mongoose -LSF_ORG = $(COMPONENT_DIR)/$(TARGET_NAME).lsf -MAKE_LSF = make_lsf.pl -AUTOGEN_LSF = $(TARGET_NAME)_wckr.lsf - -LDIRT_CLEAN = $(AUTOGEN_LSF) - -override TARGET_NEF = $(TARGET_NAME).tef -override LCFILE_SPEC = $(AUTOGEN_LSF) -override LCFILE_TEMPLATE = $(COMPONENT_DIR)/$(TARGET_NAME).lcf.template -override LDRES_TEMPLATE = $(COMPONENT_DIR)/$(TARGET_NAME).response.template - -override TWL_INSTALL_COMPONENTSDIR= -override INSTALL_TARGETS = -override INSTALL_DIR = - -# - -include $(TWLSDK_ROOT)/build/components/racoon.TWL/Makefile - -$(AUTOGEN_LSF): $(LSF_ORG) $(MAKE_LSF) - @echo " make:" $@ - @perl $(MAKE_LSF) $(TARGET_NAME) - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/components/racoon_wckr/make_lsf.pl b/build/tests/WirelessChecker/components/racoon_wckr/make_lsf.pl deleted file mode 100755 index b3c48384..00000000 --- a/build/tests/WirelessChecker/components/racoon_wckr/make_lsf.pl +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlWLAN - components - mongoose_sdlog.TWL -# File: make_lsf.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $ROOT; - -my $COMPONENT = $ARGV[0]; -print $COMPONENT; -# search TWLSDK_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWLSDK_ROOT/s) { - $ROOT = $ENV{$_}; - } -} - -my $src = sprintf("$ROOT/build/components/%s.TWL/%s.lsf", $COMPONENT, $COMPONENT); -my $dst = sprintf("%s_wckr.lsf", $COMPONENT); - - -my $rn = "\x0D\x0A"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - - -open(OUT, ">$dst") or die "cant open $dst\n"; -foreach my $line ( @lines ) -{ - if( $line =~ m/libnwm_sp/ ) - { - $line =~ s/libnwm_sp/libnwm_sp\.WCKR/; - } - - print OUT $line; -} -close(OUT); diff --git a/build/tests/WirelessChecker/libraries/Makefile b/build/tests/WirelessChecker/libraries/Makefile deleted file mode 100644 index 401e4ee5..00000000 --- a/build/tests/WirelessChecker/libraries/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlIPL -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = nwm - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/libraries/nwm/ARM7/Makefile b/build/tests/WirelessChecker/libraries/nwm/ARM7/Makefile deleted file mode 100644 index 3d20987a..00000000 --- a/build/tests/WirelessChecker/libraries/nwm/ARM7/Makefile +++ /dev/null @@ -1,126 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - WM - libraries -# File: Makefile -# -# Copyright 2003 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -SUBDIRS = - -#---------------------------------------------------------------------------- -override TARGET_PLATFORM = TWL - -# Codegen for sub processer -TWL_PROC = ARM7 - -# build ARM & THUMB libraries -TARGET_CODEGEN ?= ALL - -MACRO_FLAGS = -DNWM_WRACK_FIRMWARE - -NWM_SRCDIR = $(ROOT)/build/libraries/wm/ARM7.TWL/nwm - -#---------------------------------------------------------------------------- - -# INCDIR ӓ_F -INCDIR = $(NWM_SRCDIR)/inc $(NWM_SRCDIR)/../../inc \ - $(NWM_SRCDIR)/../../ARM7/inc $(NWM_SRCDIR)/../../common.TWL/inc \ - $(NWM_SRCDIR)/../common/inc \ - $(NWM_SRCDIR)/../../../wpa/include \ - $(TWLWIRELESS_ROOT)/include \ - $(TWLWIRELESS_ROOT)/host/include \ - $(TWLWIRELESS_ROOT)/host/wlan/include \ - $(TWLWIRELESS_ROOT)/host/os/twl/include \ - $(TWLWIRELESS_ROOT)/host/os/twl/library/athioctl/include \ - $(TWLWIRELESS_ROOT)/host/os/nitro/include \ - $(TWLWIRELESS_ROOT)/host/os/nitro/library/athioctl/include \ - $(ROOT)/build/libraries/spi/ARM7/include - -SRCDIR_ = ../../ARM7/src src ../../common.TWL/src - -SRCDIR = $(addprefix $(NWM_SRCDIR)/, $(SRCDIR_)) - -SRCS_ARM7 = nwmsp_system.c \ - nwmsp_cmd.c \ - nwmsp_event.c \ - nwmsp_wlan_handler.c \ - nwmsp_event_handler.c \ - nwmsp_beaconinfo.c - -SRCS_COMMON = nwm_loaddev.c \ - nwm_unloaddev.c \ - nwm_open.c \ - nwm_close.c \ - nwm_startscan.c \ - nwm_connect.c \ - nwm_disconnect.c \ - nwm_sendframe.c \ - nwm_recvframe.c \ - nwm_setwepkey.c \ - nwm_setpowersave.c \ - nwm_wpa.c \ - nwm_qos.c \ - nwm_reset.c - -SRCS = $(addprefix $(NWM_SRCDIR)/src/, $(SRCS_ARM7)) \ - $(addprefix $(NWM_SRCDIR)/../../common.TWL/src/, $(SRCS_COMMON)) \ - ../src/nwm_installfirm_autogen.c - -TARGET_LIB = libnwm_sp.WCKR$(TWL_LIBSUFFIX).a - -#---------------------------------------------------------------------------- - -# DEBUGŃrh̏ꍇARELEASEłŃrh -# DEBUGł̃Cu𑕂܂B - -ifdef TARGET_DEBUG -TWL_BUILD_TYPE = RELEASE -else -ifdef TWL_DEBUG -TWL_BUILD_TYPE = RELEASE -CCFLAGS += -DNWM_DEBUG -else -ifdef NITRO_DEBUG -TWL_BUILD_TYPE = RELEASE -endif -endif -endif - -#---------------------------------------------------------------------------- -# Default ł LIMITED ̃Cu쐬܂ -TWL_ARCHGEN ?= LIMITED - -#---------------------------------------------------------------------------- - -# Vp̃fobOtOȂ - -ifdef NWM_DEBUG -CCFLAGS += -DNWM_DEBUG -endif - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#INSTALL_TARGETS = $(TARGETS) -#INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR) -#GDIRT_INSTALLED = $(addprefix $(INSTALL_DIR)/,$(notdir $(INSTALL_TARGETS))) - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - - -#===== End of Makefile ===== - diff --git a/build/tests/WirelessChecker/libraries/nwm/ARM9/Makefile b/build/tests/WirelessChecker/libraries/nwm/ARM9/Makefile deleted file mode 100644 index e8ecb1e6..00000000 --- a/build/tests/WirelessChecker/libraries/nwm/ARM9/Makefile +++ /dev/null @@ -1,95 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - WM - libraries -# File: Makefile -# -# Copyright 2003 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- -#SUBDIRS = wm_lib - -override TARGET_PLATFORM = TWL - -# Codegen for sub processer -TWL_PROC = ARM9 -TARGET_CODEGEN ?= ALL - -MACRO_FLAGS = -DNWM_WRACK_FIRMWARE - -NWM_SRCDIR = $(ROOT)/build/libraries/wm/ARM9.TWL/nwm - -# HYBRID / LIMITED ̃Cu쐬܂ -TWL_ARCHGEN ?= ALL - -# LoadDeviceEx œ]t@[EFÃfBNg -TWLWIRELESS_FW_DIR = $(ROOT)/add-ins/TwlWireless/$(TWLWIRELESS_PACKAGE)/binfile - -SRCDIR = ./src ../../common.TWL/src -INCDIR = $(NWM_SRCDIR)/inc $(NWM_SRCDIR)/../../inc $(NWM_SRCDIR)/../../ARM9/inc \ - $(NWM_SRCDIR)/../../common.TWL/inc $(NWM_SRCDIR)/../common/inc - -SRCS_ARM9 = nwm_init.c \ - nwm_system.c \ - nwm_end.c \ - nwm_cmd.c \ - nwm_passphrase.c - -SRCS_COMMON = nwm_loaddev.c \ - nwm_unloaddev.c \ - nwm_open.c \ - nwm_close.c \ - nwm_startscan.c \ - nwm_connect.c \ - nwm_disconnect.c \ - nwm_setwepkey.c \ - nwm_setpowersave.c \ - nwm_sendframe.c \ - nwm_recvframe.c \ - nwm_wpa.c \ - nwm_qos.c \ - nwm_reset.c - -SRCS = $(addprefix $(NWM_SRCDIR)/src/, $(SRCS_ARM9)) \ - $(addprefix $(NWM_SRCDIR)/../../common.TWL/src/, $(SRCS_COMMON)) \ - ../src/nwm_installfirm_autogen.c - -EXT_OBJS = $(OBJDIR)/nwm_firm.o - -TARGET_LIB = libnwm.WCKR$(TWL_LIBSUFFIX).a - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#INSTALL_TARGETS = $(TARGETS) - -#INSTALL_DIR = $(TWL_INSTALL_LIBDIR) - -GDIRT_INSTALLED = $(addprefix $(INSTALL_DIR)/,$(notdir $(INSTALL_TARGETS))) - -#---------------------------------------------------------------------------- -# Vp̃fobOtOȂ - -ifdef NWM_DEBUG -CCFLAGS += -DNWM_DEBUG -endif - -CCFLAGS += -DENABLE_RXACK - -#---------------------------------------------------------------------------- - -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -$(OBJDIR)/nwm_firm.o: $(TWLWIRELESS_FW_DIR)/nwm_firm.bin - $(BIN2OBJ) $(call empath, $<) $@ - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/libraries/nwm/Makefile b/build/tests/WirelessChecker/libraries/nwm/Makefile deleted file mode 100644 index a7c14231..00000000 --- a/build/tests/WirelessChecker/libraries/nwm/Makefile +++ /dev/null @@ -1,39 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - wm -# File: Makefile -# -# Copyright 2003 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - - -TARGET_PLATFORM := TWL - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -SUBDIRS = scripts - -ifneq ($(filter TWL,$(TARGET_PLATFORM_LIST)),) -SUBDIRS_P += ARM9 -ifeq ($(TWLSDK_PRIVATE),TRUE) -SUBDIRS_P += ARM7 -endif -endif - -#---------------------------------------------------------------------------- - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/libraries/nwm/scripts/Makefile b/build/tests/WirelessChecker/libraries/nwm/scripts/Makefile deleted file mode 100644 index 2582bc5b..00000000 --- a/build/tests/WirelessChecker/libraries/nwm/scripts/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -#! make -f -#---------------------------------------------------------------------------- -# Project: TwlSDK - libraries - wm -# File: Makefile -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded instructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -override TARGET_CODEGEN := ARM -override TWL_ARCHGEN := LIMITED - -NWM_ORG = $(ROOT)/build/libraries/wm/common.TWL/src/nwm_installfirm.c -MAKE_NWM = make_nwm_fw_wrack.pl -AUTOGEN_NWM = src/nwm_installfirm_autogen.c -LDIRT_CLEAN += $(AUTOGEN_NWM) - -include $(TWLSDK_ROOT)/build/buildtools/commondefs - -#---------------------------------------------------------------------------- - -TARGETS = $(AUTOGEN_NWM) - -#---------------------------------------------------------------------------- -do-build: $(TARGETS) - -include $(TWLSDK_ROOT)/build/buildtools/modulerules - -$(AUTOGEN_NWM): $(NWM_ORG) $(MAKE_NWM) - @echo " make:" $@ - @perl $(MAKE_NWM) - -#===== End of Makefile ===== diff --git a/build/tests/WirelessChecker/libraries/nwm/scripts/make_nwm_fw_wrack.pl b/build/tests/WirelessChecker/libraries/nwm/scripts/make_nwm_fw_wrack.pl deleted file mode 100755 index 50d2ebf4..00000000 --- a/build/tests/WirelessChecker/libraries/nwm/scripts/make_nwm_fw_wrack.pl +++ /dev/null @@ -1,108 +0,0 @@ -#!/bin/perl -#---------------------------------------------------------------------------- -# Project: TwlIPL - tests - -# File: make_nwm_fw_wrack.pl -# -# Copyright 2007 Nintendo. All rights reserved. -# -# These coded insructions, statements, and computer programs contain -# proprietary information of Nintendo of America Inc. and/or Nintendo -# Company Ltd., and are protected by Federal copyright law. They may -# not be disclosed to third parties or copied or duplicated in any form, -# in whole or in part, without the prior written consent of Nintendo. -# -# $Date:: $ -# $Rev$ -# $Author$ -#---------------------------------------------------------------------------- - -use strict; - -my $rn = "\x0D\x0A"; - -my $SDKROOT; - -# search TWLSDK_ROOT -foreach ( sort keys ( %ENV ) ){ - if ($_ =~ m/TWLSDK_ROOT/s) { - $SDKROOT = $ENV{$_}; - } -} - -my $src = "$SDKROOT/build/libraries/wm/common.TWL/src/nwm_installfirm.c"; -my $dst_dir = "../src"; -my $dst_file = "nwm_installfirm_autogen.c"; - -open(F, $src) or die "cant open $src\n"; -my @lines = ; -close(F); - -mkdir $dst_dir unless -e $dst_dir; - -my $in_instfirm_count = 0; - -open(OUT, ">$dst_dir/$dst_file") or die "cant open $dst_dir/$dst_file\n"; -foreach my $line ( @lines ) -{ - if ( $line =~ m/^NWMRetCode NWMi_InstallFirmware\(NWMCallbackFunc callback, void\* addr, u32 size, BOOL isColdstart\)/ ) - { - print OUT <<__WRACK_FIRMWARE_API__; - -\#ifdef NWM_WRACK_FIRMWARE -NWMRetCode NWMi_WrackFirmware(NWMCallbackFunc callback); - -NWMRetCode NWMi_WrackFirmware(NWMCallbackFunc callback) -{ - NWMArm9Buf *sys = NWMi_GetSystemWork(); - NWMRetCode result; - - // R[obN֐o^ - NWMi_SetCallbackTable(NWM_APIID_INSTALL_FIRMWARE, callback); - - // ARM7FIFOŒʒm - result = NWMi_SendCommand(NWM_APIID_INSTALL_FIRMWARE, 5, - (u32)(sys->NWM7), (u32)(sys->status), (u32)(sys->fifo7to9), NULL, FALSE); - - return NWM_RETCODE_OPERATING; -} -\#endif // NWM_WRACK_FIRMWARE - -__WRACK_FIRMWARE_API__ - } - - if ( $line =~ m/MCU_SetWifiLedBlinkingStatus\( FALSE \);/ ) - { - print OUT "#ifndef NWM_WRACK_FIRMWARE", $rn; - } - - if( $line =~ m/^installfirm_err:/ ) - { - print OUT <<__WRACK_FIRMWARE__; - -\#else // NWM_WRACK_FIRMWARE -\#pragma unused (err) - // set WiFi_RST to disable WiFi - NWMSPi_SetWiFiReset(FALSE); - OS_Sleep(1); // wait 1msec - // set WiFi_RST to enable WiFi - NWMSPi_SetWiFiReset(TRUE); - { - NWMCallback *cb; - - NWMSP_ClearAPIActiveFlag(NWM_APIID_INSTALL_FIRMWARE); - // I - cb = (NWMCallback *)NWMSP_GetBuffer4Callback2Nwm9(); - cb->apiid = NWM_APIID_INSTALL_FIRMWARE; - cb->retcode = NWM_RETCODE_FATAL_ERROR; - NWMSP_ReturnResult2Nwm9((void *)cb); - return; - } -\#endif // NWM_WRACK_FIRMWARE -__WRACK_FIRMWARE__ - } - print OUT $line; - - -} -close(OUT); - diff --git a/build/tests/WirelessChecker/readme.txt b/build/tests/WirelessChecker/readme.txt deleted file mode 100644 index 980f4e29..00000000 --- a/build/tests/WirelessChecker/readme.txt +++ /dev/null @@ -1,62 +0,0 @@ -* WirelessChecker - {̃fobOp @\`FbNvO - -- mF菇 - -1. {̖tO̊mF - - ʂ́uON/OFFݒvсuOFF{́v̐ݒmFĂB - gpłԂ́Aȉ̏ԂłB - - ON/OFFݒ[ON ] - OFF{[No ] - - -2. DS̏eXg - - DS̏XLIeXg܂B - ANeBuXL(dgoXL)s܂B - LED̓_łmF邱ƂŖɓ삵Ă邱ƂmFĂB - ܂AON/OFFݒOFFɂ邱ƂŁAs邱ƂmFĂB - -3. TWL̏eXg - - TWL̏XLIeXg܂B - ANeBuXL(dgoXL)s܂B - LED̓_łmF邱ƂŖɓ삵Ă邱ƂmFĂB - ܂AON/OFFݒOFFɂ邱ƂŁAs邱ƂmFĂB - -4. FATALG[JoeXg - - TWLW[̃t@[EFAG~[gAɂFATALG[A - AvWvɂn[hEFAZbgŁAt@[EFA[hĂ邱ƂmF܂B - ċNɎITWL̏`FbNs܂B`FbNALED_łĂ邱ƂmFĂB - -iȉ̍ڂ̓IvVłBj - -5. FATALG[G~[V - 4.FATALG[蓮ŋN܂B̑sAuTWL̏eXgvs邱ƂmFĂB - - -- TODO - -ENOAƂ̃fobOɂނĉp\ΉiHj - -- ύX - -- 080801 - NANDAvɑΉB - oi[ljB - Q[R[hljB - -- 080731 - FINALROMŃrhB - eXgp̃vgfobOoĂ̂CB - R}hO{ꉻB - TwlSDK 5.0 RC1ŃrhB - -- 080730 - ʂɊȈՃwv\B - -- 080725 - ŏ̃[X - diff --git a/build/tests/WirelessChecker/resources/ds_ipl10.bmp b/build/tests/WirelessChecker/resources/ds_ipl10.bmp deleted file mode 100644 index 6fc8eedc4107a86244e2b3a56e2555d3588b880f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 922102 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